{"version":3,"file":"programdetails.js","mappings":"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,4CACA,sBACA,mBACA,iBACA,oBACA,2BACA,kBACA,6BACA,oBACA,yBACA,gBACA,uBACA,yBACA,4BACA,0BACA,6BACA,6BACA,oBACA,eACA,yBACA,gBACA,mBACA,iBACA,oBACA,sBACA,2BACA,iBACA,2BACA,6BACA,0BACA,0BACA,0BACA,oCACA,gBACA,2BACA,0BACA,kBACA,qBACA,wBACA,mBACA,sBACA,qBACA,mBACA,sBACA,wBACA,mBACA,mBACA,sBACA,uBACA,8BACA,qBACA,sBACA,uBACA,yBACA,sBACA,8BACA,oBACA,oBACA,kBACA,kBACA,mBACA,sBACA,6BACA,uBACA,6BACA,wBACA,gBACA,0BACA,mBACA,yBACA,oBACA,8BACA,8BACA,iBACA,oBACA,uBACA,4BACA,4BACA,0BACA,6BACA,0BACA,oCACA,wBACA,2BACA,yBACA,6BACA,oCACA,uBACA,qBACA,sBACA,yBACA,4BACA,oBACA,uBACA,2BACA,6BACA,wBACA,2BACA,oBACA,qBACA,wBACA,0BACA,+BACA,oBACA,8BACA,oBACA,+BACA,2BACA,iBACA,2BACA,gBACA,mBACA,cACA,iBACA,uBACA,0BACA,oBACA,+BACA,sBACA,2BACA,wBACA,yBACA,sBACA,wBACA,yBACA,0BACA,qBACA,yBACA,yBACA,8BACA,mBACA,uBACA,wBACA,qBACA,+BACA,mBACA,oBACA,cACA,oBACA,yBACA,oBACA,uBACA,qBACA,uBACA,cACA,oBACA,2BACA,sBACA,mBACA,sBACA,oBACA,uBACA,kBACA,sBACA,6BACA,6BACA,wCACA,uBACA,0BACA,wBACA,0BACA,2BACA,4BACA,yBACA,2BACA,4BACA,0BACA,qBACA,wBACA,8BACA,0BACA,2BACA,kCACA,2BACA,4BACA,gCACA,iCACA,8BACA,kCACA,iBACA,kBACA,4BACA,0BACA,qBACA,sBACA,yBACA,gCACA,sBACA,qCACA,aACA,gBACA,cACA,iBACA,wBACA,cACA,gBACA,iBACA,oBACA,kBACA,wBACA,mBACA,0BACA,6BACA,kCACA,2BACA,uBACA,6BACA,+BACA,6BACA,uCACA,0CACA,0CACA,6BACA,gCACA,qCACA,wBACA,mBACA,mBACA,uBACA,qBACA,wBACA,qBACA,kBACA,kBACA,qBACA,wBACA,sBACA,wBACA,gBACA,mBACA,iBACA,wBACA,cACA,gBACA,4BACA,+BACA,0BACA,6BACA,oCACA,oBACA,6BACA,oCACA,8CACA,wBACA,cACA,iBACA,oBACA,kBACA,wBACA,2BACA,4BACA,2BACA,8BACA,+BACA,iCACA,uBACA,+BACA,sBACA,oBACA,0BACA,mBACA,uBACA,0BACA,wBACA,6BACA,wBACA,2BACA,yBACA,4BACA,wBACA,kBACA,qBACA,mBACA,sBACA,WACA,iBACA,eACA,wBACA,oBACA,qBACA,kBACA,yBACA,uBACA,wBACA,2BACA,wBACA,2BACA,iCACA,wBACA,qBACA,yBACA,yBACA,qBACA,qBACA,+BACA,2BACA,4BACA,sBACA,4BACA,2BACA,yBACA,wBACA,uBACA,2BACA,sBACA,wBACA,6BACA,8BACA,sBACA,yBACA,mBACA,uBACA,8BACA,mCAGIq5F,EAAuB,IAAIr5F,IAAI,CACnC,qBACA,uBACA,yBACA,0BACA,2BACA,gCACA,yBACA,yBACA,0BACA,6BACA,2BACA,sBACA,kBACA,qBACA,mBACA,sBACA,wBACA,mBACA,8BACA,4BACA,4BACA,6BACA,2BACA,6BACA,mBACA,sBACA,oBACA,uBACA,8BACA,oBACA,iBACA,oBACA,kBACA,qBACA,kBACA,4BACA,2BACA,mBACA,oBACA,+BACA,uBACA,oBACA,sBACA,yBACA,kBACA,qBACA,wBACA,mBACA,6BACA,sCACA,4CACA,sBACA,mBACA,iBACA,oBACA,2BACA,kBACA,6BACA,oBACA,yBACA,gBACA,uBACA,yBACA,4BACA,0BACA,6BACA,6BACA,oBACA,eACA,yBACA,gBACA,mBACA,iBACA,oBACA,sBACA,2BACA,iBACA,2BACA,6BACA,0BACA,0BACA,0BACA,oCACA,gBACA,2BACA,0BACA,kBACA,qBACA,wBACA,mBACA,sBACA,qBACA,mBACA,sBACA,wBACA,mBACA,mBACA,sBACA,uBACA,8BACA,qBACA,sBACA,uBACA,yBACA,sBACA,8BACA,oBACA,oBACA,kBACA,kBACA,mBACA,sBACA,6BACA,uBACA,6BACA,wBACA,gBACA,0BACA,mBACA,yBACA,oBACA,8BACA,8BACA,iBACA,oBACA,uBACA,4BACA,4BACA,0BACA,6BACA,0BACA,oCACA,wBACA,2BACA,yBACA,6BACA,oCACA,uBACA,qBACA,sBACA,yBACA,4BACA,oBACA,uBACA,2BACA,6BACA,wBACA,2BACA,oBACA,qBACA,wBACA,0BACA,+BACA,oBACA,8BACA,oBACA,+BACA,2BACA,iBACA,2BACA,gBACA,mBACA,cACA,iBACA,uBACA,0BACA,oBACA,+BACA,sBACA,2BACA,wBACA,yBACA,sBACA,wBACA,yBACA,0BACA,qBACA,yBACA,yBACA,8BACA,mBACA,uBACA,wBACA,qBACA,+BACA,mBACA,oBACA,cACA,oBACA,yBACA,oBACA,uBACA,qBACA,uBACA,cACA,oBACA,2BACA,sBACA,mBACA,sBACA,oBACA,uBACA,kBACA,sBACA,6BACA,6BACA,wCACA,uBACA,0BACA,wBACA,0BACA,2BACA,4BACA,yBACA,2BACA,4BACA,0BACA,qBACA,wBACA,8BACA,0BACA,2BACA,kCACA,2BACA,4BACA,gCACA,iCACA,8BACA,kCACA,iBACA,kBACA,4BACA,0BACA,qBACA,sBACA,yBACA,gCACA,sBACA,qCACA,aACA,gBACA,cACA,iBACA,wBACA,cACA,gBACA,iBACA,oBACA,kBACA,wBACA,mBACA,0BACA,6BACA,kCACA,2BACA,uBACA,6BACA,+BACA,6BACA,uCACA,0CACA,0CACA,6BACA,gCACA,qCACA,wBACA,mBACA,mBACA,uBACA,qBACA,wBACA,qBACA,kBACA,kBACA,qBACA,wBACA,sBACA,wBACA,gBACA,mBACA,iBACA,wBACA,cACA,gBACA,4BACA,+BACA,0BACA,6BACA,oCACA,oBACA,6BACA,oCACA,8CACA,wBACA,cACA,iBACA,oBACA,kBACA,wBACA,2BACA,4BACA,2BACA,8BACA,+BACA,iCACA,uBACA,+BACA,sBACA,oBACA,0BACA,mBACA,uBACA,0BACA,wBACA,6BACA,wBACA,2BACA,yBACA,4BACA,wBACA,kBACA,qBACA,mBACA,sBACA,WACA,iBACA,eACA,wBACA,oBACA,qBACA,kBACA,yBACA,uBACA,wBACA,2BACA,wBACA,2BACA,iCACA,wBACA,qBACA,yBACA,yBACA,qBACA,qBACA,+BACA,2BACA,4BACA,sBACA,4BACA,2BACA,yBACA,wBACA,uBACA,2BACA,sBACA,wBACA,6BACA,8BACA,sBACA,yBACA,mBACA,uBACA,8BACA,mCAGK,SAASm5F,EAAsBr7G,GACpC,IAAMwf,EAAYxf,EAAKwf,WAAa,aACpC,MAAO,GAAGxf,EAAKnD,GAAG04B,kBAAkB/V,GAAa,cAAc+V,eACjE,CAEO,SAAShQ,EAA0BvlB,EAAqB6V,GAC7D,MAAgB,UAATA,EACHylG,EAAqBljH,IAAIijH,EAAsBr7G,IAC/Cu7G,EAAqBnjH,IAAIijH,EAAsBr7G,GACrD,CAEO,SAASwlB,EACdxlB,EACA6V,EACA2lG,EACAziG,GAEA,IAAMikF,EAAiBjkF,GAAU+D,YAAY9c,EAAKnD,IAC5C4+G,EACK,UAAT5lG,EAAmBmnF,GAAgBuI,cAAiBvI,GAAgBwI,eAAiBxI,GAAgBuI,cACvG,OAAOiW,KAAiBC,GAAUtyG,WAAW,OAAQsyG,GAAU9iH,SAAS,oBAAsB8iH,CAChG,C,+GCtRO,SACL99G,EACA+9G,GAEA,IAAMC,EAAeD,EAAa,OAC5Bz6G,EAA4C,CAAC,EACnD,IAAK,IAAM26G,KAAMj+G,EAAS,CACxB,IAAMggE,EAAOi+C,EAAGC,SAAWD,EAAGrvC,UACxBuvC,EAAWn+C,EAAO+9C,EAClBK,EAAW,IAAI75F,IACrB,IAAK,IAAMxH,KAASkhG,EAAG3hG,QAAS,CAC9B,IAAM3lB,GAAM,EAAAsoD,EAAAA,gBAAeliC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ACA,kBACA,oBACA,cACA,aACA,cACA,uBACA,gBACA,iBACA,WACA,YACA,cACA,kBACA,yBACA,gBACA,YACA,mBACA,gBACA,cACA,iBACA,eACA,eACA,WACA,QACA,eACA,kBACA,WACA,gBACA,gBACA,gBACA,UACA,aACA,cACA,QACA,aACA,cACA,eACA,aACA,SACA,WACA,YACA,SACA,gBACA,cACA,aACA,+BACA,wBACA,mBACA,eACA,eACA,mBACA,SACA,eACA,kBACA,gBACA,iBACA,sBACA,yBACA,YACA,oBACA,gBACA,QACA,WACA,aACA,kBACA,gBACA,YACA,kBACA,oBACA,4BACA,+BACA,+BACA,qBACA,QACA,eACA,SACA,aACA,aACA,YACA,QACA,WACA,oBACA,SACA,mBACA,sBACA,eACA,uBACA,WACA,UACA,WACA,YACA,gBACA,kBACA,aACA,mBACA,kBACA,aACA,MACA,aACA,YACA,cACA,gBAE2BA,EAAAA,iBAAG,CAC9B,kBACA,kBACA,kBACA,iBACA,aACA,kBACA,mBACA,kBACA,oBACA,iBACA,gBACA,kBACA,iBACA,aACA,YACA,gBACA,mBACA,mBACA,WACA,aACA,mCACA,gCACA,aACA,mBACA,YACA,oBACA,SACA,WACA,sBACA,uBACA,cACA,cACA,oBACA,yBACA,0BACA,yBACA,kBACA,kBACA,kBAGW2wK,EAA4B3wK,EAAAA,mBAAG,CAC1C,OACA,SACA,QACA,WACA,OACA,YACA,SACA,aACA,SAGW4wK,EAAa5wK,EAAAA,cAAG,CAAC,OAAQ,OAAQ,OAAQ,OAAQ,QAAS,SAC1D6wK,EAA0B7wK,EAAAA,2BAAG,CAAC,SAAU,UACxC8wK,EAA6B9wK,EAAAA,8BAAG,CAAC,SAAU,QAC3C8X,EAAK9X,EAAAA,MAAG,CAAC,KAAM,MACf+wK,EAAe/wK,EAAAA,gBAAG,CAAC,KACnB+vF,EAAW/vF,EAAAA,YAAG,CAAC,KAAM,MACrBgxK,EAAmBhxK,EAAAA,oBAAG,CAAC,SACvBq2I,EAAWr2I,EAAAA,YAAG,CAAC,SAAU,WAAY,mBAAoB,QACzD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,CAAC,EAAG,eAAgB,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,UAAW,CAAC,EAAG,eAAgB,CAAC,EAAG,WAAY,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,UAAW,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,UAAW,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,UAAW,CAAC,EAAG,SAAU,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,UAAW,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,UAAW,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,UAAW,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,UAAW,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,UAAW,CAAC,EAAG,SAAU,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,UAAW,CAAC,EAAG,SAAU,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,UAAW,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,UAAW,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,UAAW,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YA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AG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,GAAI,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EA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","sources":["webpack:///webpack/runtime/load script","webpack:///./src/programDetails.tsx","webpack:///./node_modules/@babel/runtime/helpers/OverloadYield.js","webpack:///./node_modules/@babel/runtime/helpers/arrayLikeToArray.js","webpack:///./node_modules/@babel/runtime/helpers/arrayWithHoles.js","webpack:///./node_modules/@babel/runtime/helpers/assertThisInitialized.js","webpack:///./node_modules/@babel/runtime/helpers/asyncToGenerator.js","webpack:///./node_modules/@babel/runtime/helpers/awaitAsyncGenerator.js","webpack:///./node_modules/@babel/runtime/helpers/classCallCheck.js","webpack:///./node_modules/@babel/runtime/helpers/construct.js","webpack:///./node_modules/@babel/runtime/helpers/createClass.js","webpack:///./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack:///./node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelperLoose.js","webpack:///./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","webpack:///./node_modules/@babel/runtime/helpers/esm/extends.js","webpack:///./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack:///./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack:///./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack:///./node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack:///./node_modules/@babel/runtime/helpers/esm/objectSpread2.js","webpack:///./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","webpack:///./node_modules/@babel/runtime/helpers/getPrototypeOf.js","webpack:///./node_modules/@babel/runtime/helpers/inherits.js","webpack:///./node_modules/@babel/runtime/helpers/interopRequireDefault.js","webpack:///./node_modules/@babel/runtime/helpers/isNativeFunction.js","webpack:///./node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js","webpack:///./node_modules/@babel/runtime/helpers/iterableToArray.js","webpack:///./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","webpack:///./node_modules/@babel/runtime/helpers/nonIterableRest.js","webpack:///./node_modules/@babel/runtime/helpers/objectDestructuringEmpty.js","webpack:///./node_modules/@babel/runtime/helpers/objectWithoutProperties.js","webpack:///./node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","webpack:///./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","webpack:///./node_modules/@babel/runtime/helpers/setPrototypeOf.js","webpack:///./node_modules/@babel/runtime/helpers/slicedToArray.js","webpack:///./node_modules/@babel/runtime/helpers/toArray.js","webpack:///./node_modules/@babel/runtime/helpers/toPrimitive.js","webpack:///./node_modules/@babel/runtime/helpers/toPropertyKey.js","webpack:///./node_modules/@babel/runtime/helpers/typeof.js","webpack:///./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","webpack:///./node_modules/@babel/runtime/helpers/wrapAsyncGenerator.js","webpack:///./node_modules/@babel/runtime/helpers/wrapNativeSuper.js","webpack:///./lambda/utils/mobile.ts","webpack:///./src/api/service.ts","webpack:///./src/components/account.tsx","webpack:///./src/components/bottomSheet.tsx","webpack:///./src/components/bottomSheetEditTarget.tsx","webpack:///./src/components/button.tsx","webpack:///./src/components/editProgram/editProgramUi/editProgramUiHelpers.ts","webpack:///./src/components/exerciseImage.tsx","webpack:///./src/components/exerciseRm.tsx","webpack:///./src/components/exerciseTooltip.tsx","webpack:///./src/components/footerPage.tsx","webpack:///./src/components/groupHeader.tsx","webpack:///./src/components/historyRecordSets.tsx","webpack:///./src/components/icons/iconApple.tsx","webpack:///./src/components/icons/iconArrowDown2.tsx","webpack:///./src/components/icons/iconArrowRight.tsx","webpack:///./src/components/icons/iconArrowUp.tsx","webpack:///./src/components/icons/iconBackspace.tsx","webpack:///./src/components/icons/iconBarbellSide.tsx","webpack:///./src/components/icons/iconCalculator.tsx","webpack:///./src/components/icons/iconCalendarSmall.tsx","webpack:///./src/components/icons/iconCheckCircle.tsx","webpack:///./src/components/icons/iconClose.tsx","webpack:///./src/components/icons/iconCloseCircleOutline.tsx","webpack:///./src/components/icons/iconDefaultExercise.tsx","webpack:///./src/components/icons/iconDiscord.tsx","webpack:///./src/components/icons/iconDoc.tsx","webpack:///./src/components/icons/iconDumbbell.tsx","webpack:///./src/components/icons/iconEdit2.tsx","webpack:///./src/components/icons/iconEditSquare.tsx","webpack:///./src/components/icons/iconGoogle.tsx","webpack:///./src/components/icons/iconGooglePlay.tsx","webpack:///./src/components/icons/iconHamburger.tsx","webpack:///./src/components/icons/iconHandle.tsx","webpack:///./src/components/icons/iconHelp.tsx","webpack:///./src/components/icons/iconInstagramFlat.tsx","webpack:///./src/components/icons/iconKettlebellSmall.tsx","webpack:///./src/components/icons/iconKeyboardClose.tsx","webpack:///./src/components/icons/iconMoon.tsx","webpack:///./src/components/icons/iconPlayCircle.tsx","webpack:///./src/components/icons/iconPlus2.tsx","webpack:///./src/components/icons/iconPreview.tsx","webpack:///./src/components/icons/iconReddit.tsx","webpack:///./src/components/icons/iconSpinner.tsx","webpack:///./src/components/icons/iconSun.tsx","webpack:///./src/components/icons/iconSvg.tsx","webpack:///./src/components/icons/iconSwap.tsx","webpack:///./src/components/icons/iconSwapSmall.tsx","webpack:///./src/components/icons/iconTrash.tsx","webpack:///./src/components/icons/iconUser.tsx","webpack:///./src/components/icons/iconWatch.tsx","webpack:///./src/components/icons/iconYoutube.tsx","webpack:///./src/components/input.tsx","webpack:///./src/components/inputNumber.tsx","webpack:///./src/components/inputNumber2.tsx","webpack:///./src/components/inputWeight.tsx","webpack:///./src/components/inputWeight2.tsx","webpack:///./src/components/inputWeightUnit.tsx","webpack:///./src/components/link.tsx","webpack:///./src/components/linkButton.tsx","webpack:///./src/components/markdown.tsx","webpack:///./src/components/menuItem.tsx","webpack:///./src/components/menuItemEditable.tsx","webpack:///./src/components/modal.tsx","webpack:///./src/components/modalAmrap.tsx","webpack:///./src/components/muscles/images/backMusclesSvg.tsx","webpack:///./src/components/muscles/images/frontMusclesSvg.tsx","webpack:///./src/components/onelink.tsx","webpack:///./src/components/pageWrapper.tsx","webpack:///./src/components/preview/programPreviewPlayground.tsx","webpack:///./src/components/preview/programPreviewPlaygroundDay.tsx","webpack:///./src/components/preview/programPreviewPlaygroundExercise.tsx","webpack:///./src/components/preview/programPreviewPlaygroundExerciseEditModal.tsx","webpack:///./src/components/preview/programPreviewPlaygroundInner.tsx","webpack:///./src/components/preview/webWorkoutModals.tsx","webpack:///./src/components/primitives/fastText.tsx","webpack:///./src/components/primitives/pressable.tsx","webpack:///./src/components/primitives/svg.tsx","webpack:///./src/components/primitives/switch.tsx","webpack:///./src/components/primitives/text.tsx","webpack:///./src/components/primitives/textInput.tsx","webpack:///./src/components/programQrCode.tsx","webpack:///./src/components/progressStateChanges.tsx","webpack:///./src/components/scrollBarrell.tsx","webpack:///./src/components/scrollableTabs.tsx","webpack:///./src/components/scroller.tsx","webpack:///./src/components/setTimerBanner.tsx","webpack:///./src/components/setTimerEdit.tsx","webpack:///./src/components/simpleMarkdown.tsx","webpack:///./src/components/swipeableRow.tsx","webpack:///./src/components/themeToggle.tsx","webpack:///./src/components/topNavMenu.tsx","webpack:///./src/components/weightRoundingInfo.tsx","webpack:///./src/components/workoutExerciseAllSets.tsx","webpack:///./src/components/workoutExerciseSet.tsx","webpack:///./src/components/workoutExerciseThumbnail.tsx","webpack:///./src/ducks/reducer.ts","webpack:///./src/ducks/thunks.ts","webpack:///./src/generated/whatsnew.ts","webpack:///./src/internalLink.tsx","webpack:///./src/lib/healthSync.ts","webpack:///./src/lib/importexporter.ts","webpack:///./src/liftoscript.ts","webpack:///./src/liftoscriptEvaluator.ts","webpack:///./src/liftoscriptFns.ts","webpack:///./src/liftoscriptLanguage.ts","webpack:///./src/migrations/migrations.ts","webpack:///./src/migrations/runner.ts","webpack:///./src/models/account.ts","webpack:///./src/models/adminDebug.ts","webpack:///./src/models/editProgram.ts","webpack:///./src/models/editProgramLenses.ts","webpack:///./src/models/editProgressEntry.ts","webpack:///./src/models/editStats.ts","webpack:///./src/models/equipment.ts","webpack:///./src/models/exercise.ts","webpack:///./src/models/exerciseImage.ts","webpack:///./src/models/history.ts","webpack:///./src/models/importSession.ts","webpack:///./src/models/length.ts","webpack:///./src/models/muscle.ts","webpack:///./src/models/onloadModal.ts","webpack:///./src/models/pp.ts","webpack:///./src/models/program.ts","webpack:///./src/models/programExercise.ts","webpack:///./src/models/programSet.ts","webpack:///./src/models/programToPlanner.ts","webpack:///./src/models/progress.ts","webpack:///./src/models/screen.ts","webpack:///./src/models/set.ts","webpack:///./src/models/settings.ts","webpack:///./src/models/state.ts","webpack:///./src/models/stats.ts","webpack:///./src/models/storage.ts","webpack:///./src/models/versionTracker.ts","webpack:///./src/models/versionTracker/types.ts","webpack:///./src/models/versionTracker/utils.ts","webpack:///./src/models/versionTracker/versionTrackerDiffVersions.ts","webpack:///./src/models/versionTracker/versionTrackerExtractByVersions.ts","webpack:///./src/models/versionTracker/versionTrackerFillVersions.ts","webpack:///./src/models/versionTracker/versionTrackerMergeByVersions.ts","webpack:///./src/models/versionTracker/versionTrackerMergeVersions.ts","webpack:///./src/models/versionTracker/versionTrackerUpdateVersions.ts","webpack:///./src/models/weight.ts","webpack:///./src/models/whatsnew.tsx","webpack:///./src/models/whatsnewParser.ts","webpack:///./src/models/whatsnewUtils.ts","webpack:///./src/navigation/ModalStateContext.tsx","webpack:///./src/navigation/NavScreenScrollContext.ts","webpack:///./src/navigation/StateContext.tsx","webpack:///./src/navigation/navUtils.ts","webpack:///./src/pages/planner/components/plannerCodeBlock.tsx","webpack:///./src/pages/planner/components/plannerStats.tsx","webpack:///./src/pages/planner/components/plannerWeekMuscles.tsx","webpack:///./src/pages/planner/components/plannerWeekStats.tsx","webpack:///./src/pages/planner/models/plannerProgram.ts","webpack:///./src/pages/planner/models/plannerProgramExercise.ts","webpack:///./src/pages/planner/models/plannerStateVars.ts","webpack:///./src/pages/planner/models/plannerStatsUtils.ts","webpack:///./src/pages/planner/plannerEvaluator.ts","webpack:///./src/pages/planner/plannerExerciseEvaluator.ts","webpack:///./src/pages/planner/plannerExerciseEvaluatorText.ts","webpack:///./src/pages/planner/plannerExerciseParser.ts","webpack:///./src/pages/planner/plannerExerciseStyles.ts","webpack:///./src/pages/planner/plannerHighlighter.ts","webpack:///./src/pages/planner/plannerKey.tsx","webpack:///./src/pages/programs/programDetails/programDetailsAddButton.tsx","webpack:///./src/pages/programs/programDetails/programDetailsLiftoscript.tsx","webpack:///./src/pages/programs/programDetails/programDetailsUpsell.tsx","webpack:///./src/pages/programs/programDetails/programDetailsWorkoutPlayground.tsx","webpack:///./src/pages/programs/programDetailsContent.tsx","webpack:///./src/parser.ts","webpack:///./src/programs/basicBeginnerProgram.ts","webpack:///./src/types.ts","webpack:///./src/utils/analytics.ts","webpack:///./src/utils/appAttribution.ts","webpack:///./src/utils/appleAuth.ts","webpack:///./src/utils/clickTracking.tsx","webpack:///./src/utils/clipboard.tsx","webpack:///./src/utils/collection.ts","webpack:///./src/utils/collector.ts","webpack:///./src/utils/comparer.ts","webpack:///./src/utils/csv.ts","webpack:///./src/utils/date.ts","webpack:///./src/utils/deviceId.ts","webpack:///./src/utils/diagnostics.ts","webpack:///./src/utils/dialog.ts","webpack:///./src/utils/encoder.ts","webpack:///./src/utils/eventManager.ts","webpack:///./src/utils/exporter.ts","webpack:///./src/utils/fitText.ts","webpack:///./src/utils/focusedInputFlush.ts","webpack:///./src/utils/generator.ts","webpack:///./src/utils/googleAccessToken.ts","webpack:///./src/utils/hostConfig.ts","webpack:///./src/utils/hydrate.ts","webpack:///./src/utils/iapHelpers.ts","webpack:///./src/utils/imageCache.ts","webpack:///./src/utils/importFromHevy.ts","webpack:///./src/utils/importFromLiftosaur.ts","webpack:///./src/utils/importFromLink.ts","webpack:///./src/utils/importTypes.ts","webpack:///./src/utils/inAppReview.ts","webpack:///./src/utils/indexeddb.ts","webpack:///./src/utils/keychainStore.ts","webpack:///./src/utils/liveActivityManager.ts","webpack:///./src/utils/log.ts","webpack:///./src/utils/math.ts","webpack:///./src/utils/nativeStorage.ts","webpack:///./src/utils/nativeTimerBridge.ts","webpack:///./src/utils/nativeWatchBridge.ts","webpack:///./src/utils/nativeWorkoutBridge.ts","webpack:///./src/utils/nativeWorkoutMirroringBridge.ts","webpack:///./src/utils/object.ts","webpack:///./src/utils/pageTheme.ts","webpack:///./src/utils/perfEnabled.ts","webpack:///./src/utils/perfSampling.ts","webpack:///./src/utils/perfScorecard.ts","webpack:///./src/utils/perfSetCompleteProbe.ts","webpack:///./src/utils/perfTracker.ts","webpack:///./src/utils/platform.ts","webpack:///./src/utils/posthog.ts","webpack:///./src/utils/rollbar.ts","webpack:///./src/utils/safeLocalStorage.ts","webpack:///./src/utils/scaledSpacings.generated.ts","webpack:///./src/utils/sendMessage.ts","webpack:///./src/utils/setUtils.ts","webpack:///./src/utils/signIn.ts","webpack:///./src/utils/string.ts","webpack:///./src/utils/styledText.ts","webpack:///./src/utils/subscriptionReceipts.ts","webpack:///./src/utils/subscriptions.ts","webpack:///./src/utils/sync.ts","webpack:///./src/utils/tailwindConfig.ts","webpack:///./src/utils/theme.ts","webpack:///./src/utils/time.ts","webpack:///./src/utils/undoingFlag.ts","webpack:///./src/utils/url.ts","webpack:///./src/utils/urlPolyfill.ts","webpack:///./src/utils/useLensReducer.ts","webpack:///./src/utils/usePerfRenderCount.ts","webpack:///./src/utils/useProgressiveItems.ts","webpack:///./src/utils/useRem.ts","webpack:///./src/utils/useThunkReducer.ts","webpack:///./src/utils/workoutExerciseUtils.ts","webpack:///./node_modules/css-in-js-utils/es/assignStyle.js","webpack:///./node_modules/css-in-js-utils/es/camelCaseProperty.js","webpack:///./node_modules/css-in-js-utils/es/hyphenateProperty.js","webpack:///./node_modules/css-in-js-utils/es/cssifyDeclaration.js","webpack:///./node_modules/css-in-js-utils/es/cssifyObject.js","webpack:///./node_modules/css-in-js-utils/es/isPrefixedProperty.js","webpack:///./node_modules/css-in-js-utils/es/isPrefixedValue.js","webpack:///./node_modules/css-in-js-utils/es/isUnitlessProperty.js","webpack:///./node_modules/css-in-js-utils/es/unprefixProperty.js","webpack:///./node_modules/css-in-js-utils/es/normalizeProperty.js","webpack:///./node_modules/css-in-js-utils/es/resolveArrayValue.js","webpack:///./node_modules/css-in-js-utils/es/unprefixValue.js","webpack:///./node_modules/css-in-js-utils/lib/hyphenateProperty.js","webpack:///./node_modules/css-in-js-utils/lib/isPrefixedValue.js","webpack:///./node_modules/culori/src/rgb/parseNumber.js","webpack:///./node_modules/culori/src/colors/named.js","webpack:///./node_modules/culori/src/rgb/parseHex.js","webpack:///./node_modules/culori/src/util/regex.js","webpack:///./node_modules/culori/src/rgb/parseRgbLegacy.js","webpack:///./node_modules/culori/src/converter.js","webpack:///./node_modules/culori/src/_prepare.js","webpack:///./node_modules/culori/src/modes.js","webpack:///./node_modules/culori/src/parse.js","webpack:///./node_modules/culori/src/interpolate/linear.js","webpack:///./node_modules/culori/src/interpolate/piecewise.js","webpack:///./node_modules/culori/src/interpolate/lerp.js","webpack:///./node_modules/culori/src/fixup/alpha.js","webpack:///./node_modules/culori/src/rgb/definition.js","webpack:///./node_modules/culori/src/rgb/parseRgb.js","webpack:///./node_modules/culori/src/rgb/parseNamed.js","webpack:///./node_modules/culori/src/rgb/parseTransparent.js","webpack:///./node_modules/culori/src/a98/convertA98ToXyz65.js","webpack:///./node_modules/culori/src/a98/convertXyz65ToA98.js","webpack:///./node_modules/culori/src/lrgb/convertRgbToLrgb.js","webpack:///./node_modules/culori/src/xyz65/convertRgbToXyz65.js","webpack:///./node_modules/culori/src/lrgb/convertLrgbToRgb.js","webpack:///./node_modules/culori/src/xyz65/convertXyz65ToRgb.js","webpack:///./node_modules/culori/src/a98/definition.js","webpack:///./node_modules/culori/src/util/normalizeHue.js","webpack:///./node_modules/culori/src/fixup/hue.js","webpack:///./node_modules/culori/src/cubehelix/constants.js","webpack:///./node_modules/culori/src/cubehelix/convertRgbToCubehelix.js","webpack:///./node_modules/culori/src/difference.js","webpack:///./node_modules/culori/src/average.js","webpack:///./node_modules/culori/src/cubehelix/definition.js","webpack:///./node_modules/culori/src/cubehelix/convertCubehelixToRgb.js","webpack:///./node_modules/culori/src/lch/convertLabToLch.js","webpack:///./node_modules/culori/src/lch/convertLchToLab.js","webpack:///./node_modules/culori/src/xyz65/constants.js","webpack:///./node_modules/culori/src/constants.js","webpack:///./node_modules/culori/src/lab65/convertLab65ToXyz65.js","webpack:///./node_modules/culori/src/lab65/convertLab65ToRgb.js","webpack:///./node_modules/culori/src/lab65/convertXyz65ToLab65.js","webpack:///./node_modules/culori/src/lab65/convertRgbToLab65.js","webpack:///./node_modules/culori/src/dlch/constants.js","webpack:///./node_modules/culori/src/dlch/convertDlchToLab65.js","webpack:///./node_modules/culori/src/dlch/convertLab65ToDlch.js","webpack:///./node_modules/culori/src/dlab/definition.js","webpack:///./node_modules/culori/src/dlch/definition.js","webpack:///./node_modules/culori/src/hsi/definition.js","webpack:///./node_modules/culori/src/hsi/convertHsiToRgb.js","webpack:///./node_modules/culori/src/hsi/convertRgbToHsi.js","webpack:///./node_modules/culori/src/hsl/parseHslLegacy.js","webpack:///./node_modules/culori/src/hsl/definition.js","webpack:///./node_modules/culori/src/hsl/convertHslToRgb.js","webpack:///./node_modules/culori/src/hsl/convertRgbToHsl.js","webpack:///./node_modules/culori/src/hsl/parseHsl.js","webpack:///./node_modules/culori/src/util/hue.js","webpack:///./node_modules/culori/src/hsv/convertHsvToRgb.js","webpack:///./node_modules/culori/src/hsv/convertRgbToHsv.js","webpack:///./node_modules/culori/src/hsv/definition.js","webpack:///./node_modules/culori/src/hwb/definition.js","webpack:///./node_modules/culori/src/hwb/convertHwbToRgb.js","webpack:///./node_modules/culori/src/hwb/convertRgbToHwb.js","webpack:///./node_modules/culori/src/hwb/parseHwb.js","webpack:///./node_modules/culori/src/hdr/transfer.js","webpack:///./node_modules/culori/src/itp/convertItpToXyz65.js","webpack:///./node_modules/culori/src/hdr/constants.js","webpack:///./node_modules/culori/src/itp/convertXyz65ToItp.js","webpack:///./node_modules/culori/src/itp/definition.js","webpack:///./node_modules/culori/src/jab/convertXyz65ToJab.js","webpack:///./node_modules/culori/src/jab/convertJabToXyz65.js","webpack:///./node_modules/culori/src/jab/convertRgbToJab.js","webpack:///./node_modules/culori/src/jab/convertJabToRgb.js","webpack:///./node_modules/culori/src/jab/definition.js","webpack:///./node_modules/culori/src/jch/convertJabToJch.js","webpack:///./node_modules/culori/src/jch/convertJchToJab.js","webpack:///./node_modules/culori/src/jch/definition.js","webpack:///./node_modules/culori/src/xyz50/constants.js","webpack:///./node_modules/culori/src/lab/convertLabToXyz50.js","webpack:///./node_modules/culori/src/xyz50/convertXyz50ToRgb.js","webpack:///./node_modules/culori/src/lab/convertLabToRgb.js","webpack:///./node_modules/culori/src/xyz50/convertRgbToXyz50.js","webpack:///./node_modules/culori/src/lab/convertXyz50ToLab.js","webpack:///./node_modules/culori/src/lab/convertRgbToLab.js","webpack:///./node_modules/culori/src/lab/definition.js","webpack:///./node_modules/culori/src/lab/parseLab.js","webpack:///./node_modules/culori/src/lab65/definition.js","webpack:///./node_modules/culori/src/lch/definition.js","webpack:///./node_modules/culori/src/lch/parseLch.js","webpack:///./node_modules/culori/src/lch65/definition.js","webpack:///./node_modules/culori/src/lchuv/convertLuvToLchuv.js","webpack:///./node_modules/culori/src/lchuv/convertLchuvToLuv.js","webpack:///./node_modules/culori/src/luv/convertXyz50ToLuv.js","webpack:///./node_modules/culori/src/luv/convertLuvToXyz50.js","webpack:///./node_modules/culori/src/lchuv/definition.js","webpack:///./node_modules/culori/src/lrgb/definition.js","webpack:///./node_modules/culori/src/luv/definition.js","webpack:///./node_modules/culori/src/oklab/convertLrgbToOklab.js","webpack:///./node_modules/culori/src/oklab/convertRgbToOklab.js","webpack:///./node_modules/culori/src/oklab/convertOklabToLrgb.js","webpack:///./node_modules/culori/src/oklab/convertOklabToRgb.js","webpack:///./node_modules/culori/src/okhsl/helpers.js","webpack:///./node_modules/culori/src/okhsl/convertOklabToOkhsl.js","webpack:///./node_modules/culori/src/okhsl/convertOkhslToOklab.js","webpack:///./node_modules/culori/src/okhsl/modeOkhsl.js","webpack:///./node_modules/culori/src/okhsv/convertOklabToOkhsv.js","webpack:///./node_modules/culori/src/okhsv/convertOkhsvToOklab.js","webpack:///./node_modules/culori/src/okhsv/modeOkhsv.js","webpack:///./node_modules/culori/src/oklab/definition.js","webpack:///./node_modules/culori/src/oklab/parseOklab.js","webpack:///./node_modules/culori/src/oklch/definition.js","webpack:///./node_modules/culori/src/oklch/parseOklch.js","webpack:///./node_modules/culori/src/p3/convertP3ToXyz65.js","webpack:///./node_modules/culori/src/p3/convertXyz65ToP3.js","webpack:///./node_modules/culori/src/p3/definition.js","webpack:///./node_modules/culori/src/prophoto/convertXyz50ToProphoto.js","webpack:///./node_modules/culori/src/prophoto/convertProphotoToXyz50.js","webpack:///./node_modules/culori/src/prophoto/definition.js","webpack:///./node_modules/culori/src/rec2020/convertXyz65ToRec2020.js","webpack:///./node_modules/culori/src/rec2020/convertRec2020ToXyz65.js","webpack:///./node_modules/culori/src/rec2020/definition.js","webpack:///./node_modules/culori/src/xyb/constants.js","webpack:///./node_modules/culori/src/xyb/convertRgbToXyb.js","webpack:///./node_modules/culori/src/xyb/convertXybToRgb.js","webpack:///./node_modules/culori/src/xyb/definition.js","webpack:///./node_modules/culori/src/xyz50/definition.js","webpack:///./node_modules/culori/src/xyz65/definition.js","webpack:///./node_modules/culori/src/xyz65/convertXyz65ToXyz50.js","webpack:///./node_modules/culori/src/xyz65/convertXyz50ToXyz65.js","webpack:///./node_modules/culori/src/yiq/definition.js","webpack:///./node_modules/culori/src/yiq/convertYiqToRgb.js","webpack:///./node_modules/culori/src/yiq/convertRgbToYiq.js","webpack:///./node_modules/culori/src/formatter.js","webpack:///./node_modules/culori/src/index.js","webpack:///./node_modules/deepmerge/dist/cjs.js","webpack:///./node_modules/dequal/dist/index.js","webpack:///./node_modules/dijkstrajs/dijkstra.js","webpack:///./node_modules/encode-utf8/index.js","webpack:///./node_modules/fbjs/lib/emptyFunction.js","webpack:///./node_modules/fbjs/lib/invariant.js","webpack:///./node_modules/fbjs/lib/warning.js","webpack:///./node_modules/hyphenate-style-name/index.js","webpack:///./node_modules/inline-style-prefixer/lib/createPrefixer.js","webpack:///./node_modules/inline-style-prefixer/lib/plugins/crossFade.js","webpack:///./node_modules/inline-style-prefixer/lib/plugins/imageSet.js","webpack:///./node_modules/inline-style-prefixer/lib/plugins/logical.js","webpack:///./node_modules/inline-style-prefixer/lib/plugins/position.js","webpack:///./node_modules/inline-style-prefixer/lib/plugins/sizing.js","webpack:///./node_modules/inline-style-prefixer/lib/plugins/transition.js","webpack:///./node_modules/inline-style-prefixer/lib/utils/addNewValuesOnly.js","webpack:///./node_modules/inline-style-prefixer/lib/utils/capitalizeString.js","webpack:///./node_modules/inline-style-prefixer/lib/utils/isObject.js","webpack:///./node_modules/inline-style-prefixer/lib/utils/prefixProperty.js","webpack:///./node_modules/inline-style-prefixer/lib/utils/prefixValue.js","webpack:///./node_modules/lens-shmens/dist/index.js","webpack:///./node_modules/lens-shmens/dist/utils/object.js","webpack:///./node_modules/linkify-it/build/index.cjs.js","webpack:///./node_modules/markdown-it/dist/index.cjs.js","webpack:///./node_modules/markdown-it/node_modules/entities/lib/decode.js","webpack:///./node_modules/markdown-it/node_modules/entities/lib/decode_codepoint.js","webpack:///./node_modules/markdown-it/node_modules/entities/lib/encode.js","webpack:///./node_modules/markdown-it/node_modules/entities/lib/escape.js","webpack:///./node_modules/markdown-it/node_modules/entities/lib/generated/decode-data-html.js","webpack:///./node_modules/markdown-it/node_modules/entities/lib/generated/decode-data-xml.js","webpack:///./node_modules/markdown-it/node_modules/entities/lib/generated/encode-html.js","webpack:///./node_modules/markdown-it/node_modules/entities/lib/index.js","webpack:///./node_modules/mdurl/build/index.cjs.js","webpack:///./node_modules/micro-memoize/dist/micro-memoize.js","webpack:///./node_modules/nullthrows/nullthrows.js","webpack:///./node_modules/papaparse/papaparse.min.js","webpack:///./node_modules/punycode.js/punycode.es6.js","webpack:///./node_modules/qrcode/lib/browser.js","webpack:///./node_modules/qrcode/lib/can-promise.js","webpack:///./node_modules/qrcode/lib/core/alignment-pattern.js","webpack:///./node_modules/qrcode/lib/core/alphanumeric-data.js","webpack:///./node_modules/qrcode/lib/core/bit-buffer.js","webpack:///./node_modules/qrcode/lib/core/bit-matrix.js","webpack:///./node_modules/qrcode/lib/core/byte-data.js","webpack:///./node_modules/qrcode/lib/core/error-correction-code.js","webpack:///./node_modules/qrcode/lib/core/error-correction-level.js","webpack:///./node_modules/qrcode/lib/core/finder-pattern.js","webpack:///./node_modules/qrcode/lib/core/format-info.js","webpack:///./node_modules/qrcode/lib/core/galois-field.js","webpack:///./node_modules/qrcode/lib/core/kanji-data.js","webpack:///./node_modules/qrcode/lib/core/mask-pattern.js","webpack:///./node_modules/qrcode/lib/core/mode.js","webpack:///./node_modules/qrcode/lib/core/numeric-data.js","webpack:///./node_modules/qrcode/lib/core/polynomial.js","webpack:///./node_modules/qrcode/lib/core/qrcode.js","webpack:///./node_modules/qrcode/lib/core/reed-solomon-encoder.js","webpack:///./node_modules/qrcode/lib/core/regex.js","webpack:///./node_modules/qrcode/lib/core/segments.js","webpack:///./node_modules/qrcode/lib/core/utils.js","webpack:///./node_modules/qrcode/lib/core/version-check.js","webpack:///./node_modules/qrcode/lib/core/version.js","webpack:///./node_modules/qrcode/lib/renderer/canvas.js","webpack:///./node_modules/qrcode/lib/renderer/svg-tag.js","webpack:///./node_modules/qrcode/lib/renderer/utils.js","webpack:///./node_modules/react-dom/cjs/react-dom-client.production.js","webpack:///./node_modules/react-dom/cjs/react-dom.production.js","webpack:///./node_modules/react-dom/client.js","webpack:///./node_modules/react-dom/index.js","webpack:///./node_modules/react-native-web/dist/exports/Appearance/index.js","webpack:///./node_modules/react-native-web/dist/exports/BackHandler/index.js","webpack:///./node_modules/react-native-web/dist/exports/DeviceEventEmitter/index.js","webpack:///./node_modules/react-native-web/dist/exports/Dimensions/index.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/bezier.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/Easing.js","webpack:///./node_modules/react-native-web/dist/exports/Easing/index.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/deepDiffer/index.js","webpack:///./node_modules/react-native-web/node_modules/memoize-one/dist/memoize-one.esm.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/FlatList/index.js","webpack:///./node_modules/react-native-web/dist/exports/FlatList/index.js","webpack:///./node_modules/react-native-web/dist/exports/I18nManager/index.js","webpack:///./node_modules/react-native-web/dist/modules/AssetRegistry/index.js","webpack:///./node_modules/react-native-web/dist/modules/ImageLoader/index.js","webpack:///./node_modules/react-native-web/dist/exports/Image/index.js","webpack:///./node_modules/react-native-web/dist/modules/requestIdleCallback/index.js","webpack:///./node_modules/react-native-web/dist/exports/InteractionManager/index.js","webpack:///./node_modules/react-native-web/dist/exports/InteractionManager/TaskQueue.js","webpack:///./node_modules/react-native-web/dist/exports/Keyboard/index.js","webpack:///./node_modules/react-native-web/dist/exports/PixelRatio/index.js","webpack:///./node_modules/react-native-web/dist/exports/Platform/index.js","webpack:///./node_modules/react-native-web/dist/exports/RefreshControl/index.js","webpack:///./node_modules/react-native-web/dist/exports/ScrollView/ScrollViewBase.js","webpack:///./node_modules/react-native-web/dist/exports/ScrollView/index.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/VirtualizedSectionList/index.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/SectionList/index.js","webpack:///./node_modules/react-native-web/dist/exports/SectionList/index.js","webpack:///./node_modules/react-native-web/dist/exports/StatusBar/index.js","webpack:///./node_modules/react-native-web/dist/exports/StyleSheet/compiler/createReactDOMStyle.js","webpack:///./node_modules/react-native-web/dist/exports/StyleSheet/compiler/normalizeColor.js","webpack:///./node_modules/react-native-web/dist/modules/isWebColor/index.js","webpack:///./node_modules/react-native-web/dist/exports/StyleSheet/compiler/unitlessNumbers.js","webpack:///./node_modules/react-native-web/dist/exports/StyleSheet/compiler/normalizeValueWithProperty.js","webpack:///./node_modules/react-native-web/dist/exports/StyleSheet/dom/createCSSStyleSheet.js","webpack:///./node_modules/react-native-web/dist/exports/StyleSheet/dom/createOrderedCSSStyleSheet.js","webpack:///./node_modules/uniwind/dist/module/components/web/createOrderedCSSStyleSheet.js","webpack:///./node_modules/react-native-web/dist/exports/StyleSheet/dom/index.js","webpack:///./node_modules/react-native-web/dist/exports/StyleSheet/compiler/hyphenateStyleName.js","webpack:///./node_modules/react-native-web/dist/modules/prefixStyles/static.js","webpack:///./node_modules/react-native-web/dist/modules/prefixStyles/index.js","webpack:///./node_modules/react-native-web/dist/exports/StyleSheet/compiler/index.js","webpack:///./node_modules/react-native-web/dist/exports/StyleSheet/compiler/hash.js","webpack:///./node_modules/react-native-web/dist/exports/StyleSheet/index.js","webpack:///./node_modules/react-native-web/dist/exports/StyleSheet/preprocess.js","webpack:///./node_modules/react-native-web/dist/exports/Text/TextAncestorContext.js","webpack:///./node_modules/react-native-web/dist/exports/Text/index.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/PooledClass/index.js","webpack:///./node_modules/react-native-web/dist/exports/Touchable/BoundingDimensions.js","webpack:///./node_modules/react-native-web/dist/exports/Touchable/Position.js","webpack:///./node_modules/react-native-web/dist/exports/Touchable/index.js","webpack:///./node_modules/react-native-web/dist/exports/TouchableNativeFeedback/index.js","webpack:///./node_modules/react-native-web/dist/modules/unitlessNumbers/index.js","webpack:///./node_modules/react-native-web/dist/modules/setValueForStyles/dangerousStyleValue.js","webpack:///./node_modules/react-native-web/dist/modules/setValueForStyles/index.js","webpack:///./node_modules/react-native-web/dist/exports/UIManager/index.js","webpack:///./node_modules/react-native-web/dist/exports/View/index.js","webpack:///./node_modules/react-native-web/dist/modules/createDOMProps/index.js","webpack:///./node_modules/react-native-web/dist/exports/createElement/index.js","webpack:///./node_modules/react-native-web/dist/exports/findNodeHandle/index.js","webpack:///./node_modules/react-native-web/dist/exports/processColor/index.js","webpack:///./node_modules/react-native-web/dist/modules/AccessibilityUtil/propsToAriaRole.js","webpack:///./node_modules/react-native-web/dist/modules/AccessibilityUtil/propsToAccessibilityComponent.js","webpack:///./node_modules/react-native-web/dist/modules/AccessibilityUtil/index.js","webpack:///./node_modules/react-native-web/dist/modules/AccessibilityUtil/isDisabled.js","webpack:///./node_modules/react-native-web/dist/modules/TextInputState/index.js","webpack:///./node_modules/react-native-web/dist/modules/UnimplementedView/index.js","webpack:///./node_modules/react-native-web/dist/modules/canUseDom/index.js","webpack:///./node_modules/react-native-web/dist/modules/dismissKeyboard/index.js","webpack:///./node_modules/react-native-web/dist/modules/forwardedProps/index.js","webpack:///./node_modules/react-native-web/dist/modules/getBoundingClientRect/index.js","webpack:///./node_modules/react-native-web/dist/modules/mergeRefs/index.js","webpack:///./node_modules/react-native-web/dist/modules/pick/index.js","webpack:///./node_modules/react-native-web/dist/modules/useElementLayout/index.js","webpack:///./node_modules/react-native-web/dist/modules/useLayoutEffect/index.js","webpack:///./node_modules/react-native-web/dist/modules/useLocale/isLocaleRTL.js","webpack:///./node_modules/react-native-web/dist/modules/useLocale/index.js","webpack:///./node_modules/react-native-web/dist/modules/useMergeRefs/index.js","webpack:///./node_modules/react-native-web/dist/modules/usePlatformMethods/index.js","webpack:///./node_modules/react-native-web/dist/modules/usePressEvents/PressResponder.js","webpack:///./node_modules/react-native-web/dist/modules/usePressEvents/index.js","webpack:///./node_modules/react-native-web/dist/modules/useResponderEvents/createResponderEvent.js","webpack:///./node_modules/react-native-web/dist/modules/useResponderEvents/ResponderEventTypes.js","webpack:///./node_modules/react-native-web/dist/modules/useResponderEvents/utils.js","webpack:///./node_modules/react-native-web/dist/modules/useResponderEvents/ResponderTouchHistoryStore.js","webpack:///./node_modules/react-native-web/dist/modules/useResponderEvents/ResponderSystem.js","webpack:///./node_modules/react-native-web/dist/modules/isSelectionValid/index.js","webpack:///./node_modules/react-native-web/dist/modules/useResponderEvents/index.js","webpack:///./node_modules/react-native-web/dist/modules/useStable/index.js","webpack:///./node_modules/react-native-web/dist/modules/warnOnce/index.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/EventEmitter/NativeEventEmitter.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/EventEmitter/RCTDeviceEventEmitter.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/VirtualizeUtils/index.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Batchinator/index.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Utilities/clamp.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/VirtualizedList/CellRenderMask.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/VirtualizedList/ChildListCollection.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/FillRateHelper/index.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/VirtualizedList/StateSafePureComponent.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/ViewabilityHelper/index.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/VirtualizedList/VirtualizedListContext.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/VirtualizedList/VirtualizedListCellRenderer.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/VirtualizedList/index.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/infoLog/index.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/vendor/emitter/EventEmitter.js","webpack:///./node_modules/react-native-web/node_modules/@react-native/normalize-colors/index.js","webpack:///./node_modules/react/cjs/react-jsx-runtime.production.js","webpack:///./node_modules/react/cjs/react.production.js","webpack:///./node_modules/react/index.js","webpack:///./node_modules/react/jsx-runtime.js","webpack:///./node_modules/scheduler/cjs/scheduler.production.js","webpack:///./node_modules/scheduler/index.js","webpack:///./node_modules/styleq/dist/styleq.js","webpack:///./node_modules/styleq/dist/transform-localize-style.js","webpack:///./node_modules/uc.micro/build/index.cjs.js","webpack:///./node_modules/uniwind/dist/module/components/utils.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Utilities/Platform.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/ReactNative/ReactNativeFeatureFlags.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/NativeAnimatedHelper.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/TurboModule/TurboModuleRegistry.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedNode.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedWithChildren.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedInterpolation.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedValue.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/AnimatedEvent.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedTransform.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedStyle.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedProps.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/useAnimatedProps.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/createAnimatedComponent.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Utilities/useRefEffect.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Utilities/useMergeRefs.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/components/AnimatedFlatList.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/components/AnimatedImage.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/components/AnimatedScrollView.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/components/AnimatedSectionList.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/components/AnimatedText.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/components/AnimatedView.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedAddition.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedDiffClamp.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedDivision.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedModulo.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedMultiplication.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedSubtraction.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedTracking.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedValueXY.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/animations/Animation.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/animations/DecayAnimation.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/SpringConfig.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/animations/SpringAnimation.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/animations/TimingAnimation.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedColor.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/AnimatedImplementation.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/AnimatedMock.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/Animated.js","webpack:///./node_modules/react-native-web/dist/exports/Animated/index.js","webpack:///./node_modules/uniwind/dist/module/components/web/Animated.js","webpack:///./node_modules/uniwind/dist/module/components/web/FlatList.js","webpack:///./node_modules/uniwind/dist/module/components/web/Image.js","webpack:///./node_modules/react-native-web/dist/modules/addEventListener/index.js","webpack:///./node_modules/react-native-web/dist/modules/modality/index.js","webpack:///./node_modules/react-native-web/dist/modules/useEvent/index.js","webpack:///./node_modules/react-native-web/dist/modules/useHover/index.js","webpack:///./node_modules/react-native-web/dist/exports/Pressable/index.js","webpack:///./node_modules/uniwind/dist/module/components/web/Pressable.js","webpack:///./node_modules/uniwind/dist/module/components/web/RefreshControl.js","webpack:///./node_modules/uniwind/dist/module/components/web/ScrollView.js","webpack:///./node_modules/uniwind/dist/module/components/web/SectionList.js","webpack:///./node_modules/react-native-web/dist/modules/multiplyStyleLengthValue/index.js","webpack:///./node_modules/react-native-web/dist/exports/Switch/index.js","webpack:///./node_modules/uniwind/dist/module/components/web/Switch.js","webpack:///./node_modules/uniwind/dist/module/components/web/Text.js","webpack:///./node_modules/react-native-web/dist/exports/TextInput/index.js","webpack:///./node_modules/uniwind/dist/module/components/web/TextInput.js","webpack:///./node_modules/uniwind/dist/module/components/web/View.js","webpack:///./node_modules/uniwind/dist/module/components/web/generateDataSet.js","webpack:///./node_modules/react-native-web/dist/exports/render/index.js","webpack:///./node_modules/react-native-web/dist/exports/unmountComponentAtNode/index.js","webpack:///./node_modules/react-native-web/dist/exports/NativeModules/index.js","webpack:///./node_modules/react-native-web/dist/exports/AccessibilityInfo/index.js","webpack:///./node_modules/react-native-web/dist/exports/Alert/index.js","webpack:///./node_modules/react-native-web/dist/exports/AppRegistry/AppContainer.js","webpack:///./node_modules/react-native-web/dist/exports/AppRegistry/index.js","webpack:///./node_modules/react-native-web/dist/exports/AppRegistry/renderApplication.js","webpack:///./node_modules/react-native-web/dist/exports/AppState/index.js","webpack:///./node_modules/react-native-web/dist/exports/Clipboard/index.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/LayoutAnimation/index.js","webpack:///./node_modules/react-native-web/dist/exports/LayoutAnimation/index.js","webpack:///./node_modules/react-native-web/dist/exports/Linking/index.js","webpack:///./node_modules/react-native-web/dist/exports/NativeEventEmitter/index.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/TouchHistoryMath/index.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/PanResponder/index.js","webpack:///./node_modules/react-native-web/dist/exports/PanResponder/index.js","webpack:///./node_modules/react-native-web/dist/exports/Share/index.js","webpack:///./node_modules/react-native-web/dist/exports/Vibration/index.js","webpack:///./node_modules/react-native-web/dist/exports/CheckBox/index.js","webpack:///./node_modules/react-native-web/dist/exports/Picker/index.js","webpack:///./node_modules/react-native-web/dist/exports/Picker/PickerItem.js","webpack:///./node_modules/react-native-web/dist/exports/ProgressBar/index.js","webpack:///./node_modules/react-native-web/dist/exports/YellowBox/index.js","webpack:///./node_modules/react-native-web/dist/exports/LogBox/index.js","webpack:///./node_modules/react-native-web/dist/exports/useColorScheme/index.js","webpack:///./node_modules/react-native-web/dist/exports/useLocaleContext/index.js","webpack:///./node_modules/react-native-web/dist/exports/useWindowDimensions/index.js","webpack:///./node_modules/react-native-web/dist/exports/ActivityIndicator/index.js","webpack:///./node_modules/uniwind/dist/module/components/web/ActivityIndicator.js","webpack:///./node_modules/react-native-web/dist/exports/TouchableOpacity/index.js","webpack:///./node_modules/react-native-web/dist/exports/Button/index.js","webpack:///./node_modules/uniwind/dist/module/components/web/Button.js","webpack:///./node_modules/react-native-web/dist/exports/ImageBackground/index.js","webpack:///./node_modules/uniwind/dist/module/components/web/ImageBackground.js","webpack:///./node_modules/react-native-web/dist/exports/KeyboardAvoidingView/index.js","webpack:///./node_modules/uniwind/dist/module/components/web/KeyboardAvoidingView.js","webpack:///./node_modules/react-native-web/dist/exports/Modal/ModalPortal.js","webpack:///./node_modules/react-native-web/dist/exports/Modal/ModalAnimation.js","webpack:///./node_modules/react-native-web/dist/exports/Modal/ModalContent.js","webpack:///./node_modules/react-native-web/dist/exports/Modal/ModalFocusTrap.js","webpack:///./node_modules/react-native-web/dist/exports/Modal/index.js","webpack:///./node_modules/uniwind/dist/module/components/web/Modal.js","webpack:///./node_modules/react-native-web/dist/exports/SafeAreaView/index.js","webpack:///./node_modules/uniwind/dist/module/components/web/SafeAreaView.js","webpack:///./node_modules/react-native-web/dist/exports/TouchableHighlight/index.js","webpack:///./node_modules/uniwind/dist/module/components/web/TouchableHighlight.js","webpack:///./node_modules/uniwind/dist/module/components/web/TouchableOpacity.js","webpack:///./node_modules/react-native-web/dist/exports/TouchableWithoutFeedback/index.js","webpack:///./node_modules/uniwind/dist/module/components/web/TouchableWithoutFeedback.js","webpack:///./node_modules/react-native-web/dist/exports/VirtualizedList/index.js","webpack:///./node_modules/uniwind/dist/module/components/web/VirtualizedList.js","webpack:///./node_modules/uniwind/dist/module/hooks/useCSSVariable/getVariableValue.js","webpack:///./node_modules/uniwind/dist/module/core/config/config.common.js","webpack:///./node_modules/uniwind/dist/module/hooks/useCSSVariable/useCSSVariable.js","webpack:///./node_modules/uniwind/dist/module/core/config/config.js","webpack:///./node_modules/uniwind/dist/module/common/utils.js","webpack:///./node_modules/uniwind/dist/module/components/web/rnw.js","webpack:///./node_modules/uniwind/dist/module/components/web/useUniwindAccent.js","webpack:///./node_modules/uniwind/dist/module/core/listener.js","webpack:///./node_modules/uniwind/dist/module/core/web/cssListener.js","webpack:///./node_modules/uniwind/dist/module/core/web/formatColor.js","webpack:///./node_modules/uniwind/dist/module/core/web/parseCSSValue.js","webpack:///./node_modules/uniwind/dist/module/core/web/getWebStyles.js","webpack:///./node_modules/uniwind/dist/module/core/context.js","webpack:///./node_modules/uniwind/dist/module/hooks/useResolveClassNames.js","webpack:///./node_modules/uniwind/dist/module/types.js","webpack:///./node_modules/@codemirror/language/dist/index.cjs","webpack:///./node_modules/@codemirror/state/dist/index.cjs","webpack:///./node_modules/@codemirror/view/dist/index.cjs","webpack:///./node_modules/@lezer/common/dist/index.cjs","webpack:///./node_modules/@lezer/highlight/dist/index.cjs","webpack:///./node_modules/@lezer/lr/dist/index.cjs","webpack:///./node_modules/@marijn/find-cluster-break/dist/index.cjs","webpack:///./node_modules/fflate/lib/index.cjs","webpack:///./node_modules/fflate/lib/worker.cjs","webpack:///./node_modules/style-mod/dist/style-mod.cjs","webpack:///./node_modules/valibot/dist/index.cjs","webpack:///./node_modules/w3c-keyname/index.cjs","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/ensure chunk","webpack:///webpack/runtime/get javascript chunk filename","webpack:///webpack/runtime/get mini-css chunk filename","webpack:///webpack/runtime/global","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///webpack/runtime/make namespace object","webpack:///webpack/runtime/publicPath","webpack:///webpack/runtime/css loading","webpack:///webpack/runtime/jsonp chunk loading"],"sourcesContent":["var inProgress = {};\nvar dataWebpackPrefix = \"liftosaur:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","import { PageWrapper } from \"./components/pageWrapper\";\nimport { IProgramIndexEntry } from \"./models/program\";\nimport { ProgramDetailsContent } from \"./pages/programs/programDetailsContent\";\nimport { IProgram } from \"./types\";\nimport { HydrateUtils_hydratePage } from \"./utils/hydrate\";\n\ninterface IData {\n  program: IProgram;\n  fullDescription?: string;\n  indexEntry?: IProgramIndexEntry;\n}\n\nfunction main(): void {\n  HydrateUtils_hydratePage<IData>((pageWrapperProps, data) => (\n    <PageWrapper {...pageWrapperProps}>\n      {(userCtx) => (\n        <ProgramDetailsContent\n          {...data}\n          units={userCtx.units}\n          isLoggedIn={pageWrapperProps.isLoggedIn}\n          client={window.fetch.bind(window)}\n        />\n      )}\n    </PageWrapper>\n  ));\n}\n\nmain();\n","function _OverloadYield(e, d) {\n  this.v = e, this.k = d;\n}\nmodule.exports = _OverloadYield, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _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}\nmodule.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _arrayWithHoles(r) {\n  if (Array.isArray(r)) return r;\n}\nmodule.exports = _arrayWithHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _assertThisInitialized(e) {\n  if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  return e;\n}\nmodule.exports = _assertThisInitialized, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function asyncGeneratorStep(n, t, e, r, o, a, c) {\n  try {\n    var i = n[a](c),\n      u = i.value;\n  } catch (n) {\n    return void e(n);\n  }\n  i.done ? t(u) : Promise.resolve(u).then(r, o);\n}\nfunction _asyncToGenerator(n) {\n  return function () {\n    var t = this,\n      e = arguments;\n    return new Promise(function (r, o) {\n      var a = n.apply(t, e);\n      function _next(n) {\n        asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n);\n      }\n      function _throw(n) {\n        asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n);\n      }\n      _next(void 0);\n    });\n  };\n}\nmodule.exports = _asyncToGenerator, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var OverloadYield = require(\"./OverloadYield.js\");\nfunction _awaitAsyncGenerator(e) {\n  return new OverloadYield(e, 0);\n}\nmodule.exports = _awaitAsyncGenerator, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _classCallCheck(a, n) {\n  if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nmodule.exports = _classCallCheck, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var isNativeReflectConstruct = require(\"./isNativeReflectConstruct.js\");\nvar setPrototypeOf = require(\"./setPrototypeOf.js\");\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}\nmodule.exports = _construct, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toPropertyKey = require(\"./toPropertyKey.js\");\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}\nmodule.exports = _createClass, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _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}\nexport { _arrayLikeToArray as default };","import unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\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}\nexport { _createForOfIteratorHelperLoose as default };","import arrayLikeToArray from \"./arrayLikeToArray.js\";\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}\nexport { _unsupportedIterableToArray as default };","function _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}\nexport { _extends as default };","function _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}\nexport { _typeof as default };","import toPropertyKey from \"./toPropertyKey.js\";\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}\nexport { _defineProperty as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n  var i = toPrimitive(t, \"string\");\n  return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import _typeof from \"./typeof.js\";\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}\nexport { toPrimitive as default };","import defineProperty from \"./defineProperty.js\";\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}\nexport { _objectSpread2 as default };","function _objectWithoutPropertiesLoose(r, e) {\n  if (null == r) return {};\n  var t = {};\n  for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n    if (-1 !== e.indexOf(n)) continue;\n    t[n] = r[n];\n  }\n  return t;\n}\nexport { _objectWithoutPropertiesLoose as default };","function _getPrototypeOf(t) {\n  return module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {\n    return t.__proto__ || Object.getPrototypeOf(t);\n  }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _getPrototypeOf(t);\n}\nmodule.exports = _getPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var setPrototypeOf = require(\"./setPrototypeOf.js\");\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}\nmodule.exports = _inherits, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _interopRequireDefault(e) {\n  return e && e.__esModule ? e : {\n    \"default\": e\n  };\n}\nmodule.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _isNativeFunction(t) {\n  try {\n    return -1 !== Function.toString.call(t).indexOf(\"[native code]\");\n  } catch (n) {\n    return \"function\" == typeof t;\n  }\n}\nmodule.exports = _isNativeFunction, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _isNativeReflectConstruct() {\n  try {\n    var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n  } catch (t) {}\n  return (module.exports = _isNativeReflectConstruct = function _isNativeReflectConstruct() {\n    return !!t;\n  }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports)();\n}\nmodule.exports = _isNativeReflectConstruct, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _iterableToArray(r) {\n  if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r);\n}\nmodule.exports = _iterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _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}\nmodule.exports = _iterableToArrayLimit, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _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}\nmodule.exports = _nonIterableRest, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _objectDestructuringEmpty(t) {\n  if (null == t) throw new TypeError(\"Cannot destructure \" + t);\n}\nmodule.exports = _objectDestructuringEmpty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var objectWithoutPropertiesLoose = require(\"./objectWithoutPropertiesLoose.js\");\nfunction _objectWithoutProperties(e, t) {\n  if (null == e) return {};\n  var o,\n    r,\n    i = objectWithoutPropertiesLoose(e, t);\n  if (Object.getOwnPropertySymbols) {\n    var n = Object.getOwnPropertySymbols(e);\n    for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);\n  }\n  return i;\n}\nmodule.exports = _objectWithoutProperties, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _objectWithoutPropertiesLoose(r, e) {\n  if (null == r) return {};\n  var t = {};\n  for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n    if (-1 !== e.indexOf(n)) continue;\n    t[n] = r[n];\n  }\n  return t;\n}\nmodule.exports = _objectWithoutPropertiesLoose, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar assertThisInitialized = require(\"./assertThisInitialized.js\");\nfunction _possibleConstructorReturn(t, e) {\n  if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e;\n  if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\");\n  return assertThisInitialized(t);\n}\nmodule.exports = _possibleConstructorReturn, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _setPrototypeOf(t, e) {\n  return module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n    return t.__proto__ = e, t;\n  }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _setPrototypeOf(t, e);\n}\nmodule.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayWithHoles = require(\"./arrayWithHoles.js\");\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit.js\");\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\nvar nonIterableRest = require(\"./nonIterableRest.js\");\nfunction _slicedToArray(r, e) {\n  return arrayWithHoles(r) || iterableToArrayLimit(r, e) || unsupportedIterableToArray(r, e) || nonIterableRest();\n}\nmodule.exports = _slicedToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayWithHoles = require(\"./arrayWithHoles.js\");\nvar iterableToArray = require(\"./iterableToArray.js\");\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\nvar nonIterableRest = require(\"./nonIterableRest.js\");\nfunction _toArray(r) {\n  return arrayWithHoles(r) || iterableToArray(r) || unsupportedIterableToArray(r) || nonIterableRest();\n}\nmodule.exports = _toArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\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}\nmodule.exports = toPrimitive, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar toPrimitive = require(\"./toPrimitive.js\");\nfunction toPropertyKey(t) {\n  var i = toPrimitive(t, \"string\");\n  return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nmodule.exports = toPropertyKey, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _typeof(o) {\n  \"@babel/helpers - typeof\";\n\n  return module.exports = _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  }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _typeof(o);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\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}\nmodule.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var OverloadYield = require(\"./OverloadYield.js\");\nfunction _wrapAsyncGenerator(e) {\n  return function () {\n    return new AsyncGenerator(e.apply(this, arguments));\n  };\n}\nfunction AsyncGenerator(e) {\n  var t, n;\n  function resume(t, n) {\n    try {\n      var r = e[t](n),\n        o = r.value,\n        u = o instanceof OverloadYield;\n      Promise.resolve(u ? o.v : o).then(function (n) {\n        if (u) {\n          var i = \"return\" === t && o.k ? t : \"next\";\n          if (!o.k || n.done) return resume(i, n);\n          n = e[i](n).value;\n        }\n        settle(!!r.done, n);\n      }, function (e) {\n        resume(\"throw\", e);\n      });\n    } catch (e) {\n      settle(2, e);\n    }\n  }\n  function settle(e, r) {\n    2 === e ? t.reject(r) : t.resolve({\n      value: r,\n      done: e\n    }), (t = t.next) ? resume(t.key, t.arg) : n = null;\n  }\n  this._invoke = function (e, r) {\n    return new Promise(function (o, u) {\n      var i = {\n        key: e,\n        arg: r,\n        resolve: o,\n        reject: u,\n        next: null\n      };\n      n ? n = n.next = i : (t = n = i, resume(e, r));\n    });\n  }, \"function\" != typeof e[\"return\"] && (this[\"return\"] = void 0);\n}\nAsyncGenerator.prototype[\"function\" == typeof Symbol && Symbol.asyncIterator || \"@@asyncIterator\"] = function () {\n  return this;\n}, AsyncGenerator.prototype.next = function (e) {\n  return this._invoke(\"next\", e);\n}, AsyncGenerator.prototype[\"throw\"] = function (e) {\n  return this._invoke(\"throw\", e);\n}, AsyncGenerator.prototype[\"return\"] = function (e) {\n  return this._invoke(\"return\", e);\n};\nmodule.exports = _wrapAsyncGenerator, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var getPrototypeOf = require(\"./getPrototypeOf.js\");\nvar setPrototypeOf = require(\"./setPrototypeOf.js\");\nvar isNativeFunction = require(\"./isNativeFunction.js\");\nvar construct = require(\"./construct.js\");\nfunction _wrapNativeSuper(t) {\n  var r = \"function\" == typeof Map ? new Map() : void 0;\n  return module.exports = _wrapNativeSuper = function _wrapNativeSuper(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  }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _wrapNativeSuper(t);\n}\nmodule.exports = _wrapNativeSuper, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","export function Mobile_isMobileFromWindow(): boolean {\n  return typeof window !== \"undefined\" && window.navigator ? Mobile_isMobile(window.navigator.userAgent) : false;\n}\n\nexport function Mobile_isMobile(userAgent: string): boolean {\n  return /Android|webOS|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(userAgent);\n}\n\nexport function Mobile_isPlaywrightFromWindow(): boolean {\n  return typeof window !== \"undefined\" && window.navigator ? Mobile_isPlaywright(window.navigator.userAgent) : false;\n}\n\nexport function Mobile_isPlaywright(userAgent: string): boolean {\n  return userAgent.includes(\"Playwright\");\n}\n","import { Platform } from \"react-native\";\nimport {\n  IStorage,\n  IHistoryRecord,\n  ISettings,\n  IUnit,\n  IMuscleGeneratorResponse,\n  IPlannerProgramWeek,\n  IAffiliateData,\n} from \"../types\";\nimport { IAccount } from \"../models/account\";\nimport { IEither } from \"../utils/types\";\nimport { UrlUtils_build } from \"../utils/url\";\nimport { IStorageUpdate2 } from \"../utils/sync\";\nimport { IExportedProgram, IProgramIndexEntry } from \"../models/program\";\nimport { CollectionUtils_uniqBy } from \"../utils/collection\";\nimport { Encoder_encode, Encoder_decode } from \"../utils/encoder\";\nimport { IAppleOffer, IGoogleOffer } from \"../models/state\";\n\nfunction Service_nativeClientHeaders(): Record<string, string> {\n  if (Platform.OS === \"ios\") {\n    return { \"X-Client\": \"liftosaur-native-ios\" };\n  }\n  if (Platform.OS === \"android\") {\n    return { \"X-Client\": \"liftosaur-native-android\" };\n  }\n  return {};\n}\n\nexport interface IServiceError {\n  status?: number;\n  message: string;\n  body?: string;\n}\n\nexport interface IProgramDetail {\n  fullDescription: string;\n  faq?: string;\n  planner: {\n    vtype: \"planner\";\n    name: string;\n    weeks: IPlannerProgramWeek[];\n  };\n}\n\nexport type IEmailAuthResponse =\n  | { type: \"success\"; response: IGetStorageResponse }\n  | { type: \"confirmation_sent\" }\n  | { type: \"error\"; error: string; providers?: string[] };\n\nexport interface IGetStorageResponse {\n  email: string;\n  storage: IStorage;\n  user_id: string;\n  is_new_user: boolean;\n  key?: string;\n  session?: string;\n}\n\nexport type IPostSyncResponse =\n  | {\n      type: \"dirty\";\n      storage: IStorage;\n      email: string;\n      user_id: string;\n      key?: string;\n    }\n  | {\n      type: \"clean\";\n      new_original_id: number;\n      email: string;\n      user_id: string;\n      key?: string;\n    }\n  | {\n      type: \"error\";\n      error: string;\n      key?: string;\n    };\n\nexport type IPostStorageResponse =\n  | {\n      status: \"success\";\n      newOriginalId: number;\n    }\n  | {\n      status: \"request\";\n      data: (\"programs\" | \"history\" | \"stats\")[];\n    }\n  | {\n      status: \"merged\";\n      storage: IStorage;\n    };\n\ntype IRedeemCouponError =\n  | \"not_authorized\"\n  | \"coupon_not_found\"\n  | \"coupon_already_claimed\"\n  | \"wrong_platform\"\n  | \"coupon_disabled\"\n  | \"unknown\";\n\nexport interface IAiConvertResponse {\n  program: string;\n}\n\nexport type IEventPayload =\n  | {\n      type: \"event\";\n      userId?: string;\n      timestamp: number;\n      name: string;\n      isMobile?: boolean;\n      iOSVersion?: number;\n      androidVersion?: number;\n      iOSOSVersion?: number;\n      androidOSVersion?: number;\n      deviceModel?: string;\n      commithash: string;\n      extra?: Record<string, string | number>;\n    }\n  | {\n      type: \"error\";\n      userId?: string;\n      timestamp: number;\n      message: string;\n      stack: string;\n      commithash: string;\n      isMobile?: boolean;\n      rollbar_id: string;\n    }\n  | {\n      type: \"safesnapshot\";\n      userId?: string;\n      timestamp: number;\n      storage_id: string;\n      commithash: string;\n      isMobile?: boolean;\n      update: string;\n    }\n  | {\n      type: \"mergesnapshot\";\n      userId?: string;\n      timestamp: number;\n      storage_id: string;\n      commithash: string;\n      isMobile?: boolean;\n      update: string;\n    }\n  | {\n      type: \"log\";\n      userId?: string;\n      timestamp: number;\n      action: string;\n      detail?: string;\n      affiliates?: Partial<Record<string, IAffiliateData>>;\n      subscriptions: string[];\n      referrer?: string;\n      landingPage?: string;\n      platform: { name: string; version?: string };\n      commithash: string;\n      isMobile?: boolean;\n    };\n\nconst cachePromises: Partial<Record<string, unknown>> = {};\n\ndeclare let __API_HOST__: string;\ndeclare let __HOST__: string;\ndeclare let __COMMIT_HASH__: string;\ndeclare let __STREAMING_API_HOST__: string;\n\nexport interface IRecordResponse {\n  history: IHistoryRecord[];\n  record: IHistoryRecord;\n  settings: ISettings;\n}\n\nexport interface ISubscriptionServerDetails {\n  type: \"apple\" | \"google\";\n  product: string;\n  isActive: boolean;\n  expires: number;\n  autoRenew?: boolean;\n  // The product a queued plan switch will renew as, read authoritatively from Google\n  // subscriptionsv2 `deferredItemReplacement` server-side. Empty when no switch is queued.\n  pendingProduct?: string;\n}\n\nexport class Service {\n  public readonly client: Window[\"fetch\"];\n\n  constructor(client: Window[\"fetch\"]) {\n    this.client = client;\n  }\n\n  public async googleSignIn(\n    token: string,\n    id: string,\n    args: { forcedUserEmail?: string }\n  ): Promise<IGetStorageResponse> {\n    const historylimit = 20;\n    const body = JSON.stringify({\n      token,\n      id,\n      forceuseremail: args.forcedUserEmail,\n      historylimit,\n    });\n    const response = await this.client(`${__API_HOST__}/api/signin/google`, {\n      method: \"POST\",\n      body: body,\n      credentials: \"include\",\n      headers: Service_nativeClientHeaders(),\n    });\n    const json: IGetStorageResponse = await response.json();\n    json.storage.history = await this.getAllHistoryRecords({\n      alreadyFetchedHistory: json.storage.history,\n      historyLimit: historylimit,\n    });\n    return {\n      email: json.email,\n      storage: json.storage,\n      user_id: json.user_id,\n      is_new_user: json.is_new_user,\n      session: json.session,\n    };\n  }\n\n  public async getAllHistoryRecords(args: {\n    alreadyFetchedHistory?: IHistoryRecord[];\n    historyLimit?: number;\n    userId?: string;\n    adminKey?: string;\n  }): Promise<IHistoryRecord[]> {\n    let history = args.alreadyFetchedHistory || [];\n    let historyResponse: IHistoryRecord[] | undefined = undefined;\n    let historyLimit = args.historyLimit || 20;\n    while ((historyResponse || history).length > historyLimit - 1) {\n      historyLimit = 100;\n      historyResponse = await this.getHistory({\n        after: history.length > 1 ? history[history.length - 2].id : undefined,\n        limit: historyLimit,\n        userId: args.userId,\n        adminKey: args.adminKey,\n      });\n      if (historyResponse.length > 0) {\n        history = [...history, ...historyResponse];\n      } else {\n        break;\n      }\n    }\n    history = CollectionUtils_uniqBy(history, \"id\");\n    return history;\n  }\n\n  public async getHistory(args: {\n    after?: number;\n    limit?: number;\n    userId?: string;\n    adminKey?: string;\n  }): Promise<IHistoryRecord[]> {\n    const url = UrlUtils_build(`${__API_HOST__}/api/history`);\n    if (args.after) {\n      url.searchParams.set(\"after\", args.after.toString());\n    }\n    if (args.limit) {\n      url.searchParams.set(\"limit\", args.limit.toString());\n    }\n    if (args.userId != null && args.adminKey != null) {\n      url.searchParams.set(\"userid\", args.userId);\n      url.searchParams.set(\"key\", args.adminKey);\n    }\n    const response = await this.client(url.toString(), { credentials: \"include\" });\n    const json: { history: IHistoryRecord[] } = await response.json();\n    return json.history;\n  }\n\n  public async appleSignIn(code: string, idToken: string, id: string): Promise<IGetStorageResponse> {\n    const historylimit = 20;\n    const response = await this.client(`${__API_HOST__}/api/signin/apple`, {\n      method: \"POST\",\n      body: JSON.stringify({\n        code,\n        idToken,\n        id,\n        historylimit,\n      }),\n      credentials: \"include\",\n      headers: Service_nativeClientHeaders(),\n    });\n    const json: IGetStorageResponse = await response.json();\n    json.storage.history = await this.getAllHistoryRecords({\n      alreadyFetchedHistory: json.storage.history,\n      historyLimit: historylimit,\n    });\n    return {\n      email: json.email,\n      storage: json.storage,\n      user_id: json.user_id,\n      is_new_user: json.is_new_user,\n      session: json.session,\n    };\n  }\n\n  public async emailSignUp(email: string, password: string, id: string): Promise<IEmailAuthResponse> {\n    return this.emailAuth(`${__API_HOST__}/api/signup/email`, { email, password, id });\n  }\n\n  public async emailSignIn(email: string, password: string, id: string): Promise<IEmailAuthResponse> {\n    return this.emailAuth(`${__API_HOST__}/api/signin/email`, { email, password, id });\n  }\n\n  private async emailAuth(url: string, body: Record<string, string>): Promise<IEmailAuthResponse> {\n    const historylimit = 20;\n    let response: Response;\n    let json: IGetStorageResponse & { status?: string; error?: string; providers?: string[] };\n    try {\n      response = await this.client(url, {\n        method: \"POST\",\n        body: JSON.stringify({ ...body, historylimit }),\n        credentials: \"include\",\n        headers: Service_nativeClientHeaders(),\n      });\n      json = await response.json();\n    } catch (e) {\n      return { type: \"error\", error: \"network_error\" };\n    }\n    if (!response.ok) {\n      return { type: \"error\", error: json.error || \"unknown_error\", providers: json.providers };\n    }\n    if (json.status === \"confirmation_sent\") {\n      return { type: \"confirmation_sent\" };\n    }\n    json.storage.history = await this.getAllHistoryRecords({\n      alreadyFetchedHistory: json.storage.history,\n      historyLimit: historylimit,\n    });\n    return {\n      type: \"success\",\n      response: {\n        email: json.email,\n        storage: json.storage,\n        user_id: json.user_id,\n        is_new_user: json.is_new_user,\n        session: json.session,\n      },\n    };\n  }\n\n  public async forgotPassword(email: string): Promise<{ error?: string; providers?: string[] }> {\n    try {\n      const response = await this.client(`${__API_HOST__}/api/auth/forgotpassword`, {\n        method: \"POST\",\n        body: JSON.stringify({ email }),\n        credentials: \"include\",\n        headers: Service_nativeClientHeaders(),\n      });\n      if (response.ok) {\n        return {};\n      }\n      const json = await response.json().catch(() => ({}));\n      return { error: json.error || \"unknown_error\", providers: json.providers };\n    } catch (e) {\n      return { error: \"network_error\" };\n    }\n  }\n\n  public async resetPassword(token: string, password: string): Promise<{ error?: string }> {\n    try {\n      const response = await this.client(`${__API_HOST__}/api/auth/resetpassword`, {\n        method: \"POST\",\n        body: JSON.stringify({ token, password }),\n        credentials: \"include\",\n        headers: Service_nativeClientHeaders(),\n      });\n      if (response.ok) {\n        return {};\n      }\n      const json = await response.json().catch(() => ({}));\n      return { error: json.error || \"unknown_error\" };\n    } catch (e) {\n      return { error: \"network_error\" };\n    }\n  }\n\n  public async verifyEmail(token: string): Promise<{ error?: string }> {\n    try {\n      const response = await this.client(`${__API_HOST__}/api/auth/verifyemail`, {\n        method: \"POST\",\n        body: JSON.stringify({ token }),\n        credentials: \"include\",\n        headers: Service_nativeClientHeaders(),\n      });\n      if (response.ok) {\n        return {};\n      }\n      const json = await response.json().catch(() => ({}));\n      return { error: json.error || \"unknown_error\" };\n    } catch (e) {\n      return { error: \"network_error\" };\n    }\n  }\n\n  public async changePassword(currentPassword: string | undefined, newPassword: string): Promise<string | undefined> {\n    try {\n      const response = await this.client(`${__API_HOST__}/api/auth/changepassword`, {\n        method: \"POST\",\n        body: JSON.stringify({ currentPassword, newPassword }),\n        credentials: \"include\",\n        headers: Service_nativeClientHeaders(),\n      });\n      if (response.ok) {\n        return undefined;\n      }\n      const json = await response.json().catch(() => ({}));\n      return json.error || \"unknown_error\";\n    } catch (e) {\n      return \"network_error\";\n    }\n  }\n\n  public async signout(): Promise<void> {\n    await this.client(`${__API_HOST__}/api/signout`, {\n      method: \"POST\",\n      body: JSON.stringify({}),\n      credentials: \"include\",\n    });\n  }\n\n  public async refreshGoogleSubscription(\n    userId: string,\n    googlePurchaseToken: string\n  ): Promise<ISubscriptionServerDetails | undefined> {\n    // Re-verifies the live purchase token (which also rewrites the server's details row) and returns the\n    // freshly-derived status incl. any queued deferred plan switch. Authorized by possession of the purchase\n    // token, so no userId-based read. Deliberately uncached: each refresh must reflect live Play state.\n    try {\n      const url = UrlUtils_build(`${__API_HOST__}/api/verifygooglepurchasetoken`);\n      const result = await this.client(url.toString(), {\n        method: \"POST\",\n        body: JSON.stringify({ googlePurchaseToken, userId }),\n        credentials: \"include\",\n      });\n      if (result.status === 200) {\n        const json = (await result.json()) as { subscription?: ISubscriptionServerDetails };\n        return json.subscription;\n      }\n    } catch {\n      // Network/parse failure: caller keeps its prior state rather than clearing the pending card.\n    }\n    return undefined;\n  }\n\n  public async getProgramRevisions(programId: string): Promise<IEither<string[], IServiceError>> {\n    try {\n      const result = await this.client(`${__API_HOST__}/api/programrevisions/${programId}`, {\n        method: \"GET\",\n        credentials: \"include\",\n      });\n      if (result.ok) {\n        const json = await result.json();\n        return { success: true, data: json.data };\n      } else {\n        const body = await result.text().catch(() => \"\");\n        return {\n          success: false,\n          error: { status: result.status, message: `http_error`, body: body.slice(0, 500) },\n        };\n      }\n    } catch (e) {\n      return { success: false, error: { message: e instanceof Error ? e.message : String(e) } };\n    }\n  }\n\n  public async getProgramRevision(programId: string, revision: string): Promise<IEither<string, string>> {\n    const result = await this.client(`${__API_HOST__}/api/programrevision/${programId}/${revision}`, {\n      method: \"GET\",\n      credentials: \"include\",\n    });\n    if (result.ok) {\n      const json = await result.json();\n      return { success: true, data: json.text };\n    } else {\n      return { success: false, error: \"error\" };\n    }\n  }\n\n  public async postSync(args: {\n    storageUpdate: IStorageUpdate2;\n    tempUserId: string | undefined;\n    signal?: AbortSignal;\n    deviceId?: string;\n  }): Promise<IPostSyncResponse> {\n    const url = UrlUtils_build(`${__API_HOST__}/api/sync2`);\n    if (args.tempUserId) {\n      url.searchParams.set(\"tempuserid\", args.tempUserId);\n    }\n    const body = JSON.stringify({\n      storageUpdate: args.storageUpdate,\n      timestamp: Date.now(),\n      historylimit: 20,\n      deviceId: args.deviceId,\n    });\n    const compressedBody = await Encoder_encode(body);\n    const payload = JSON.stringify({ data: compressedBody });\n    const result = await this.client(url.toString(), {\n      method: \"POST\",\n      body: payload,\n      credentials: \"include\",\n      signal: args.signal,\n    });\n    const json: IPostSyncResponse = await result.json();\n    if (json.type === \"dirty\") {\n      json.storage.history = await this.getAllHistoryRecords({\n        alreadyFetchedHistory: json.storage.history,\n        historyLimit: 20,\n      });\n    }\n    return json;\n  }\n\n  public async createDebugSession(\n    userId: string,\n    adminKey: string\n  ): Promise<{ session?: string; userId: string; email: string } | undefined> {\n    const url = UrlUtils_build(`${__API_HOST__}/api/admin/debugsession`);\n    url.searchParams.set(\"userid\", userId);\n    url.searchParams.set(\"key\", adminKey);\n    const response = await this.client(url.toString(), {\n      method: \"POST\",\n      body: JSON.stringify({}),\n      credentials: \"include\",\n    });\n    if (response.status !== 200) {\n      return undefined;\n    }\n    return response.json();\n  }\n\n  public async postSetupTestAccount(apiKey?: string, session?: string): Promise<{ apiKeyBound: boolean; key: string }> {\n    const response = await this.client(`${__API_HOST__}/api/dev/setuptestaccount`, {\n      method: \"POST\",\n      body: JSON.stringify({ apiKey }),\n      credentials: \"include\",\n      headers: {\n        ...Service_nativeClientHeaders(),\n        ...(session ? { authorization: `Bearer ${session}` } : {}),\n      },\n    });\n    const json: { data?: { apiKeyBound: boolean; key: string }; error?: string } = await response\n      .json()\n      .catch(() => ({}));\n    if (response.status !== 200 || json.data == null) {\n      throw new Error(`Test account setup failed (${response.status}): ${json.error || \"unknown error\"}`);\n    }\n    return json.data;\n  }\n\n  public async postDebug(id: string, state: string, meta: Record<string, string>): Promise<boolean> {\n    try {\n      const compressed = await Encoder_encode(JSON.stringify({ state, meta }));\n      const response = await this.client(`${__API_HOST__}/api/debug`, {\n        method: \"POST\",\n        body: JSON.stringify({ id, data: compressed }),\n        credentials: \"include\",\n      });\n      const json = await response.json();\n      return json?.data === \"ok\";\n    } catch (e) {\n      return false;\n    }\n  }\n\n  public async postClaimKey(userid: string): Promise<{ key: string; expires: number } | undefined> {\n    const response = await this.client(`${__API_HOST__}/api/claimkey/${userid}`, {\n      method: \"POST\",\n      credentials: \"include\",\n    });\n    const json = await response.json();\n    return json?.data?.claim;\n  }\n\n  public async checkAdminKey(adminKey: string): Promise<boolean> {\n    const url = UrlUtils_build(`${__API_HOST__}/api/admin/check`);\n    url.searchParams.set(\"key\", adminKey);\n    try {\n      const response = await this.client(url.toString(), { credentials: \"include\" });\n      return response.status === 200;\n    } catch (_) {\n      return false;\n    }\n  }\n\n  public async postAddFreeUser(userid: string, adminKey: string): Promise<void> {\n    const url = UrlUtils_build(`${__API_HOST__}/api/addfreeuser/${userid}`);\n    url.searchParams.set(\"key\", adminKey);\n    await this.client(url.toString(), {\n      method: \"POST\",\n      credentials: \"include\",\n    });\n  }\n\n  public async postSaveProgram(\n    program: IExportedProgram,\n    deviceId?: string,\n    source?: string\n  ): Promise<IEither<string, string>> {\n    const url = UrlUtils_build(`${__API_HOST__}/api/program`);\n    try {\n      const response = await this.client(url.toString(), {\n        method: \"POST\",\n        body: JSON.stringify({ program, deviceId, source }),\n        credentials: \"include\",\n      });\n      if (response.status === 200) {\n        const json = await response.json();\n        return { success: true, data: json.data.id };\n      } else {\n        const json = await response.json();\n        return { success: false, error: json.error };\n      }\n    } catch (error) {\n      const e = error as Error;\n      return { success: false, error: e.message };\n    }\n  }\n\n  public async deleteProgram(id: string): Promise<IEither<string, string>> {\n    const url = UrlUtils_build(`${__API_HOST__}/api/program/${id}`);\n    try {\n      const response = await this.client(url.toString(), {\n        method: \"DELETE\",\n        credentials: \"include\",\n      });\n      if (response.status === 200) {\n        const json = await response.json();\n        return { success: true, data: json.data.id };\n      } else {\n        const json = await response.json();\n        return { success: false, error: json.error };\n      }\n    } catch (error) {\n      const e = error as Error;\n      return { success: false, error: e.message };\n    }\n  }\n\n  public async postClaimCoupon(\n    code: string,\n    platform?: \"ios\" | \"android\"\n  ): Promise<\n    IEither<\n      {\n        key?: string;\n        expires?: number;\n        appleOffer?: IAppleOffer;\n        googleOffer?: IGoogleOffer;\n        affiliate?: string;\n      },\n      IRedeemCouponError\n    >\n  > {\n    const url = UrlUtils_build(`${__API_HOST__}/api/coupon/claim/${code}`);\n    const result = await this.client(url.toString(), {\n      method: \"POST\",\n      credentials: \"include\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n      },\n      body: JSON.stringify({ platform }),\n    });\n    const json = await result.json();\n    if (result.status === 200) {\n      const { key, expires, appleOffer, googleOffer, affiliate } = json.data || {};\n      if (key && expires) {\n        return { success: true, data: { key, expires } };\n      } else if (appleOffer) {\n        return { success: true, data: { appleOffer, affiliate } };\n      } else if (googleOffer) {\n        return { success: true, data: { googleOffer, affiliate } };\n      }\n    } else if (\"error\" in json) {\n      const error = json.error as IRedeemCouponError;\n      if (\n        error === \"not_authorized\" ||\n        error === \"coupon_not_found\" ||\n        error === \"coupon_already_claimed\" ||\n        error === \"coupon_disabled\"\n      ) {\n        return { success: false, error };\n      }\n    }\n    return { success: false, error: \"unknown\" };\n  }\n\n  public async getStorage(\n    tempUserId: string,\n    userId?: string,\n    storageId?: string,\n    adminKey?: string\n  ): Promise<IGetStorageResponse> {\n    const historylimit = 20;\n    const url = UrlUtils_build(`${__API_HOST__}/api/storage`);\n    if (tempUserId) {\n      url.searchParams.set(\"tempuserid\", tempUserId);\n    }\n    if (userId != null && adminKey != null) {\n      url.searchParams.set(\"userid\", userId);\n      url.searchParams.set(\"key\", adminKey);\n      if (storageId) {\n        url.searchParams.set(\"storageid\", storageId);\n      }\n    }\n    url.searchParams.set(\"historylimit\", historylimit.toString());\n    const result = await this.client(url.toString(), { credentials: \"include\" });\n    const json = await result.json();\n    if (json.storage?.history) {\n      json.storage.history = await this.getAllHistoryRecords({\n        alreadyFetchedHistory: json.storage.history,\n        historyLimit: historylimit,\n        userId: userId != null && adminKey != null ? userId : undefined,\n        adminKey: userId != null && adminKey != null ? adminKey : undefined,\n      });\n    }\n    return {\n      email: json.email,\n      storage: json.storage,\n      user_id: json.user_id,\n      key: json.key,\n      is_new_user: json.is_new_user,\n    };\n  }\n\n  public async getDebugSnapshotList(userId: string, adminKey: string): Promise<string[]> {\n    const url = UrlUtils_build(`${__API_HOST__}/api/debuginfo`);\n    url.searchParams.set(\"userid\", userId);\n    url.searchParams.set(\"key\", adminKey);\n    const result = await this.client(url.toString(), { credentials: \"include\" });\n    const json = await result.json();\n    return json.list ?? [];\n  }\n\n  public async getDebugSnapshotStorage(\n    userId: string,\n    adminKey: string,\n    timestamp: string\n  ): Promise<IStorage | undefined> {\n    const url = UrlUtils_build(`${__API_HOST__}/api/debuginfo`);\n    url.searchParams.set(\"userid\", userId);\n    url.searchParams.set(\"key\", adminKey);\n    url.searchParams.set(\"timestamp\", timestamp);\n    const result = await this.client(url.toString(), { credentials: \"include\" });\n    const json = await result.json();\n    if (json.storage == null) {\n      return undefined;\n    }\n    return JSON.parse(await Encoder_decode(json.storage));\n  }\n\n  public async getExceptionData(id: string): Promise<string | undefined> {\n    const apiUrl = UrlUtils_build(`${__API_HOST__}/api/exception/${id}`);\n    try {\n      const result = await this.client(apiUrl.toString(), { credentials: \"include\" });\n      const json = await result.json();\n      const s3Response = await this.client(json.url);\n      return s3Response.text();\n    } catch (_) {\n      return undefined;\n    }\n  }\n\n  private async cache(key: string, fn: () => Promise<unknown>): Promise<unknown> {\n    if (cachePromises[key] == null) {\n      cachePromises[key] = fn();\n    }\n    return cachePromises[key];\n  }\n\n  public async postEvent(event: IEventPayload): Promise<void> {\n    const nosync =\n      typeof window !== \"undefined\" && UrlUtils_build(window.location.href).searchParams.get(\"nosync\") === \"true\";\n    if (nosync) {\n      return;\n    }\n    const url = UrlUtils_build(`${__API_HOST__}/api/event`);\n    await this.client(url.toString(), {\n      method: \"POST\",\n      body: JSON.stringify(event),\n      credentials: \"include\",\n    });\n  }\n\n  public async getUploadedImages(): Promise<string[]> {\n    const url = UrlUtils_build(`${__API_HOST__}/api/uploadedimages`);\n    const response = await this.client(url.toString(), { credentials: \"include\" });\n    if (response.ok) {\n      const json: { data: { images: string[] } } = await response.json();\n      return json.data.images;\n    } else {\n      return [];\n    }\n  }\n\n  public async postImageUploadUrl(\n    fileName: string,\n    contentType: string\n  ): Promise<{ uploadUrl: string; imageUrl: string; key: string }> {\n    const url = UrlUtils_build(`${__API_HOST__}/api/imageuploadurl`);\n    const response = await this.client(url.toString(), {\n      method: \"POST\",\n      body: JSON.stringify({ fileName, contentType }),\n      credentials: \"include\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n      },\n    });\n\n    if (!response.ok) {\n      const error = await response.text();\n      throw new Error(`Failed to get upload URL: ${error}`);\n    }\n\n    return response.json();\n  }\n\n  public async verifyAppleReceipt(userId: string, appleReceipt: string): Promise<boolean> {\n    const json = await this.cache(`verifyAppleReceipt:${userId}:${appleReceipt}`, async () => {\n      try {\n        const url = UrlUtils_build(`${__API_HOST__}/api/verifyapplereceipt`);\n        const result = await this.client(url.toString(), {\n          method: \"POST\",\n          body: JSON.stringify({ appleReceipt, userId }),\n          credentials: \"include\",\n        });\n        return result.status === 200 ? result.json() : { result: true };\n      } catch {\n        return { result: true };\n      }\n    });\n    return !!(json as { result: boolean }).result;\n  }\n\n  public async verifyGooglePurchaseToken(userId: string, googlePurchaseToken: string): Promise<boolean> {\n    const json = await this.cache(`verifyGooglePurchaseToken:${userId}:${googlePurchaseToken}`, async () => {\n      try {\n        const url = UrlUtils_build(`${__API_HOST__}/api/verifygooglepurchasetoken`);\n        const result = await this.client(url.toString(), {\n          method: \"POST\",\n          body: JSON.stringify({ googlePurchaseToken, userId }),\n          credentials: \"include\",\n        });\n        return result.status === 200 ? result.json() : { result: true };\n      } catch {\n        return { result: true };\n      }\n    });\n    return !!(json as { result: boolean }).result;\n  }\n\n  public async verifySubscriptionKey(userId: string, key: string): Promise<{ clear: boolean }> {\n    try {\n      const url = UrlUtils_build(`${__API_HOST__}/api/verifysubscriptionkey`);\n      // The server only verifies keys outside of prod when `enforce` is set — tests rely on it\n      const enforce =\n        typeof window !== \"undefined\" && window.location?.href\n          ? !!UrlUtils_build(window.location.href).searchParams.get(\"enforce\")\n          : false;\n      const result = await this.client(url.toString(), {\n        method: \"POST\",\n        body: JSON.stringify({ user: userId, key, enforce }),\n        credentials: \"include\",\n      });\n      if (result.status !== 200) {\n        return { clear: false };\n      }\n      const json = (await result.json()) as { data?: { clear?: boolean } };\n      return { clear: !!json.data?.clear };\n    } catch {\n      return { clear: false };\n    }\n  }\n\n  public async deleteAccount(): Promise<boolean> {\n    const url = UrlUtils_build(`${__API_HOST__}/api/deleteaccount`);\n    const response = await this.client(url.toString(), { method: \"DELETE\", credentials: \"include\" });\n    const json = await response.json();\n    return json.data === \"ok\";\n  }\n\n  public async postShortUrl(urlToShorten: string, type: string, src?: string): Promise<string> {\n    const url = UrlUtils_build(`${__API_HOST__}/shorturl/${type}`);\n    const result = await this.client(url.toString(), {\n      method: \"POST\",\n      credentials: \"include\",\n      body: JSON.stringify({ url: urlToShorten, src }),\n    });\n    if (result.ok) {\n      const json: { url: string } = await result.json();\n      return UrlUtils_build(json.url, __HOST__).toString();\n    } else {\n      throw new Error(\"Couldn't shorten url\");\n    }\n  }\n\n  public async getDataFromShortUrl(type: \"p\" | \"n\", id: string): Promise<{ data: string; s?: string; u?: string }> {\n    const url = UrlUtils_build(`${__API_HOST__}/api/${type}/${id}`);\n    const result = await this.client(url.toString(), { credentials: \"include\" });\n    if (result.ok) {\n      const json: { data: string; s?: string; u?: string } = await result.json();\n      return json;\n    } else {\n      throw new Error(`Couldn't parse short url: ${url.toString()}`);\n    }\n  }\n\n  public async programsIndex(): Promise<IProgramIndexEntry[]> {\n    const response = await this.client(`${__HOST__}/programdata/index.json?v=${__COMMIT_HASH__}`);\n    return response.json();\n  }\n\n  public async programDetail(id: string, category: string = \"builtin\"): Promise<IProgramDetail> {\n    const response = await this.client(`${__HOST__}/programdata/programs/${category}/${id}.json?v=${__COMMIT_HASH__}`);\n    return response.json();\n  }\n\n  public async getMuscles(exercise: string): Promise<IMuscleGeneratorResponse | undefined> {\n    const url = UrlUtils_build(`${__API_HOST__}/api/muscles`);\n    url.searchParams.set(\"exercise\", exercise);\n    if (typeof window !== \"undefined\" && window.tempUserId) {\n      url.searchParams.set(\"tempuserid\", window.tempUserId);\n    }\n    const response = await this.client(url.toString(), { credentials: \"include\" });\n    if (response.ok) {\n      const json: { data: IMuscleGeneratorResponse } = await response.json();\n      return json.data;\n    } else {\n      return undefined;\n    }\n  }\n\n  public async generateAiPrompt(input: string): Promise<{ prompt?: string; error?: string }> {\n    const response = await this.client(`${__API_HOST__}/api/ai/prompt`, {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/json\" },\n      body: JSON.stringify({ input }),\n      credentials: \"include\",\n    });\n\n    if (!response.ok && response.status !== 200) {\n      return { error: `HTTP ${response.status}: ${response.statusText}` };\n    }\n\n    const json = await response.json();\n    return json;\n  }\n\n  public async *streamAiLiftoscriptProgram(\n    input: string\n  ): AsyncGenerator<{ type: \"progress\" | \"result\" | \"error\" | \"retry\" | \"finish\"; data: string }, void, unknown> {\n    try {\n      const url = `${__STREAMING_API_HOST__}/stream/ai/liftoscript`;\n\n      const response = await this.client(url, {\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application/json\" },\n        body: JSON.stringify({ input }),\n        credentials: \"include\",\n      });\n\n      if (!response.ok && response.status !== 402) {\n        yield { type: \"error\", data: `HTTP ${response.status}: ${response.statusText}` };\n        return;\n      }\n\n      const reader = response.body?.getReader();\n      if (!reader) {\n        yield { type: \"error\", data: \"No response body\" };\n        return;\n      }\n\n      const decoder = new TextDecoder();\n      let buffer = \"\";\n\n      while (true) {\n        const { done, value } = await reader.read();\n        if (done) {\n          break;\n        }\n\n        buffer += decoder.decode(value, { stream: true });\n        const lines = buffer.split(\"\\n\");\n        buffer = lines.pop() || \"\";\n\n        for (const line of lines) {\n          if (line.trim() === \"\") {\n            continue;\n          }\n          if (line.startsWith(\"data: \")) {\n            const data = line.slice(6);\n            if (data === \"[DONE]\") {\n              return;\n            }\n            try {\n              const json = JSON.parse(data);\n              yield json;\n            } catch (e) {\n              console.error(\"Failed to parse SSE data:\", e, data);\n            }\n          }\n        }\n      }\n    } catch (error) {\n      yield { type: \"error\", data: error instanceof Error ? error.message : \"Unknown error\" };\n    }\n  }\n\n  public async getUserContext(): Promise<{ account?: IAccount; units?: IUnit }> {\n    const result = await this.client(`${__API_HOST__}/api/usercontext`, {\n      method: \"GET\",\n      credentials: \"include\",\n    });\n    if (result.ok) {\n      const json = await result.json();\n      return { account: json.account || undefined, units: json.units || undefined };\n    }\n    return {};\n  }\n\n  public async getApiKeys(): Promise<{ key: string; name: string; createdAt: number }[]> {\n    const result = await this.client(`${__API_HOST__}/api/apikeys`, {\n      method: \"GET\",\n      credentials: \"include\",\n    });\n    if (result.ok) {\n      const json = await result.json();\n      return json.data?.keys || [];\n    }\n    return [];\n  }\n\n  public async createApiKey(name: string): Promise<{ key: string; name: string; createdAt: number } | undefined> {\n    const result = await this.client(`${__API_HOST__}/api/apikeys`, {\n      method: \"POST\",\n      body: JSON.stringify({ name }),\n      credentials: \"include\",\n      headers: { \"Content-Type\": \"application/json\" },\n    });\n    if (result.ok) {\n      const json = await result.json();\n      return json.data;\n    }\n    return undefined;\n  }\n\n  public async deleteApiKey(key: string): Promise<boolean> {\n    const result = await this.client(`${__API_HOST__}/api/apikeys/${encodeURIComponent(key)}`, {\n      method: \"DELETE\",\n      credentials: \"include\",\n    });\n    return result.ok;\n  }\n}\n","import { JSX, useEffect, useRef, useState } from \"react\";\nimport { View, Pressable, Platform } from \"react-native\";\nimport { Text } from \"./primitives/text\";\nimport { Service } from \"../api/service\";\nimport { IAccount } from \"../models/account\";\nimport { UidFactory_generateUid } from \"../utils/generator\";\nimport { getGoogleAccessToken } from \"../utils/googleAccessToken\";\nimport { Button } from \"./button\";\nimport { Input } from \"./input\";\nimport { LinkButton } from \"./linkButton\";\nimport { IconApple } from \"./icons/iconApple\";\nimport { IconDoc } from \"./icons/iconDoc\";\nimport { IconDumbbell } from \"./icons/iconDumbbell\";\nimport { IconGoogle } from \"./icons/iconGoogle\";\nimport { IconSpinner } from \"./icons/iconSpinner\";\nimport { IDispatch } from \"../ducks/types\";\nimport { IState } from \"../models/state\";\nimport { Thunk_googleSignIn, Thunk_appleSignIn, Thunk_emailAuth, Thunk_forgotPassword } from \"../ducks/thunks\";\nimport { IEmailAuthResult } from \"../ducks/thunks\";\nimport { track } from \"../utils/posthog\";\nimport { Tailwind_semantic } from \"../utils/tailwindConfig\";\nimport { AppleAuth_init, AppleAuth_signIn } from \"../utils/appleAuth\";\nimport { Dialog_alert } from \"../utils/dialog\";\n\ninterface IAccountProps {\n  account?: IAccount;\n  redirectUrl?: string;\n  dispatch?: IDispatch;\n  client: Window[\"fetch\"];\n  onSignIn?: (state: IState) => void;\n  // App-only: renders a \"Sign in with Email\" button opening the email-auth modal\n  // instead of the inline form. Kept as a callback so this (server-rendered)\n  // module never imports react-navigation\n  onOpenEmailAuth?: () => void;\n}\n\nconst isWeb = Platform.OS === \"web\";\n\nexport function Account(props: IAccountProps): JSX.Element {\n  const service = new Service(props.client);\n  return (\n    <View style={{ minWidth: 256, maxWidth: 416, alignSelf: \"center\", width: \"100%\" }}>\n      {props.account ? (\n        <AccountLoggedInView service={service} account={props.account} />\n      ) : (\n        <AccountLoggedOutView\n          service={service}\n          redirectUrl={props.redirectUrl}\n          dispatch={props.dispatch}\n          onSignIn={props.onSignIn}\n          onOpenEmailAuth={props.onOpenEmailAuth}\n        />\n      )}\n    </View>\n  );\n}\n\nconst changePasswordErrorMessages: Record<string, string> = {\n  invalid_credentials: \"Current password is incorrect\",\n  invalid_password: \"Password must be at least 8 characters\",\n  password_too_long: \"Password must be at most 256 characters\",\n  not_authorized: \"You're not signed in\",\n  network_error: \"Network error, please try again\",\n};\n\nexport function ChangePasswordForm(props: { service: Service; onDone: () => void }): JSX.Element {\n  const [isSubmitting, setIsSubmitting] = useState(false);\n  const [error, setError] = useState<string | undefined>(undefined);\n  const [done, setDone] = useState(false);\n  const currentRef = useRef(\"\");\n  const newRef = useRef(\"\");\n  const repeatRef = useRef(\"\");\n\n  async function submit(): Promise<void> {\n    setError(undefined);\n    if (newRef.current.length < 8) {\n      setError(changePasswordErrorMessages.invalid_password);\n      return;\n    }\n    if (newRef.current !== repeatRef.current) {\n      setError(\"Passwords don't match\");\n      return;\n    }\n    setIsSubmitting(true);\n    const err = await props.service.changePassword(currentRef.current || undefined, newRef.current);\n    setIsSubmitting(false);\n    if (err) {\n      setError(changePasswordErrorMessages[err] || \"Something went wrong, please try again\");\n    } else {\n      setDone(true);\n    }\n  }\n\n  if (done) {\n    return (\n      <View className=\"items-center py-4\">\n        <Text className=\"text-center text-text-secondary\">Your password has been updated.</Text>\n        <View className=\"items-center mt-4\">\n          <Button name=\"change-password-done\" kind=\"purple\" onClick={() => props.onDone()}>\n            Done\n          </Button>\n        </View>\n      </View>\n    );\n  }\n\n  return (\n    <View>\n      <Input\n        label=\"Current password\"\n        identifier=\"change-password-current\"\n        type=\"password\"\n        changeType=\"oninput\"\n        autoCapitalize=\"none\"\n        autoCorrect={false}\n        changeHandler={(r) => {\n          if (r.success) {\n            currentRef.current = r.data;\n          }\n        }}\n      />\n      <Text className=\"mt-1 text-xs text-text-secondary\">\n        Leave blank if you sign in with Google or Apple and haven't set a password yet.\n      </Text>\n      <View className=\"mt-3\">\n        <Input\n          label=\"New password\"\n          identifier=\"change-password-new\"\n          type=\"password\"\n          changeType=\"oninput\"\n          autoCapitalize=\"none\"\n          autoCorrect={false}\n          changeHandler={(r) => {\n            if (r.success) {\n              newRef.current = r.data;\n            }\n          }}\n        />\n      </View>\n      <View className=\"mt-3\">\n        <Input\n          label=\"Repeat new password\"\n          identifier=\"change-password-repeat\"\n          type=\"password\"\n          changeType=\"oninput\"\n          autoCapitalize=\"none\"\n          autoCorrect={false}\n          changeHandler={(r) => {\n            if (r.success) {\n              repeatRef.current = r.data;\n            }\n          }}\n        />\n      </View>\n      {error && <Text className=\"mt-2 text-xs text-text-error\">{error}</Text>}\n      <View className=\"items-center mt-4\">\n        <Button\n          name=\"change-password-submit\"\n          kind=\"purple\"\n          testID=\"change-password-submit\"\n          data-testid=\"change-password-submit\"\n          className=\"min-w-scaled-32\"\n          disabled={isSubmitting}\n          onClick={() => submit()}\n        >\n          {isSubmitting ? (\n            <IconSpinner width={20} height={20} color={Tailwind_semantic().text.alwayswhite} />\n          ) : (\n            \"Change Password\"\n          )}\n        </Button>\n      </View>\n    </View>\n  );\n}\n\ninterface IAccountLoggedInViewProps {\n  service: Service;\n  account: IAccount;\n}\n\nfunction AccountLoggedInView(props: IAccountLoggedInViewProps): JSX.Element {\n  const [isLoading, setIsLoading] = useState(false);\n  const [showChangePassword, setShowChangePassword] = useState(false);\n  const { account, service } = props;\n\n  if (showChangePassword) {\n    return (\n      <View>\n        <Text className=\"mb-4 text-lg font-bold text-center\">Change Password</Text>\n        <ChangePasswordForm service={service} onDone={() => setShowChangePassword(false)} />\n        <View className=\"items-center mt-4\">\n          <LinkButton name=\"change-password-back\" className=\"text-xs\" onPress={() => setShowChangePassword(false)}>\n            Back\n          </LinkButton>\n        </View>\n      </View>\n    );\n  }\n\n  return (\n    <View>\n      <Text className=\"mb-4 text-lg font-bold text-center\">Current Account</Text>\n      {isLoading ? (\n        <View className=\"items-center my-4\">\n          <IconSpinner width={48} height={48} />\n        </View>\n      ) : (\n        <>\n          <View className=\"flex-row items-center\">\n            <Text className=\"flex-1 mr-2 text-lg\">{account.name || `id: ${account.id}`}</Text>\n            <View className=\"flex-row items-center\">\n              {account.numberOfPrograms != null && (\n                <>\n                  <Text className=\"pr-2\">{account.numberOfPrograms}</Text>\n                  <View className=\"pr-4\">\n                    <IconDoc width={12} height={16} />\n                  </View>\n                </>\n              )}\n              {account.numberOfWorkouts != null && (\n                <>\n                  <Text className=\"pr-2\">{account.numberOfWorkouts}</Text>\n                  <View>\n                    <IconDumbbell width={28} height={19} />\n                  </View>\n                </>\n              )}\n            </View>\n          </View>\n          {account.name && <Text className=\"text-xs text-text-secondary\">id: {account.id}</Text>}\n          {account.email !== \"noemail@example.com\" && (\n            <Text className=\"text-xs text-text-secondary\">\n              Signed in as <Text className=\"text-xs font-bold text-text-secondary\">{account.email}</Text>\n            </Text>\n          )}\n          <View className=\"items-center mt-4\">\n            <Button\n              name=\"account-sign-out\"\n              kind=\"purple\"\n              data-testid=\"menu-item-logout\"\n              testID=\"menu-item-logout\"\n              className=\"ls-logout\"\n              onClick={async () => {\n                setIsLoading(true);\n                await service.signout();\n                if (isWeb && typeof window !== \"undefined\") {\n                  window.location.reload();\n                } else {\n                  setIsLoading(false);\n                }\n              }}\n            >\n              Sign Out\n            </Button>\n            <View className=\"mt-3\">\n              <LinkButton\n                name=\"account-change-password\"\n                className=\"text-sm\"\n                onPress={() => setShowChangePassword(true)}\n              >\n                Change password\n              </LinkButton>\n            </View>\n          </View>\n        </>\n      )}\n    </View>\n  );\n}\n\ninterface IAccountLoggedOutViewProps {\n  service: Service;\n  redirectUrl?: string;\n  dispatch?: IDispatch;\n  onSignIn?: (state: IState) => void;\n  onOpenEmailAuth?: () => void;\n}\n\nfunction AccountLoggedOutView(props: IAccountLoggedOutViewProps): JSX.Element {\n  const [isLoading, setIsLoading] = useState(false);\n  const [showEmailForm, setShowEmailForm] = useState(false);\n\n  useEffect(() => {\n    if (!isWeb) {\n      return;\n    }\n    AppleAuth_init();\n  }, []);\n\n  return (\n    <View>\n      <Text className=\"mb-4 text-lg font-bold text-center\">Account</Text>\n      {isLoading ? (\n        <View className=\"items-center my-4\">\n          <IconSpinner width={48} height={48} />\n        </View>\n      ) : showEmailForm ? (\n        <View>\n          <EmailAuthForm service={props.service} redirectUrl={props.redirectUrl} onSignIn={props.onSignIn} />\n          <View className=\"items-center mt-4\">\n            <LinkButton name=\"email-auth-back\" className=\"text-xs\" onPress={() => setShowEmailForm(false)}>\n              Back to sign in options\n            </LinkButton>\n          </View>\n        </View>\n      ) : (\n        <View>\n          <Pressable\n            className=\"flex-row items-center w-full px-4 py-2 mt-2 rounded-lg nm-sign-in-with-google bg-background-default\"\n            style={Platform.select({\n              ios: { shadowColor: \"#000\", shadowOffset: { width: 0, height: 1 }, shadowOpacity: 0.1, shadowRadius: 4 },\n              android: { elevation: 2 },\n              default: { boxShadow: \"0 1px 4px 0 rgba(0,0,0,0.1)\" },\n            })}\n            data-testid=\"menu-item-login\"\n            testID=\"menu-item-login\"\n            onPress={async () => {\n              track({ name: \"SignUp\" });\n              setIsLoading(true);\n              if (props.dispatch) {\n                props.dispatch(\n                  Thunk_googleSignIn((newState) => {\n                    setIsLoading(false);\n                    props.onSignIn?.(newState);\n                  })\n                );\n                return;\n              }\n              const accessToken = await getGoogleAccessToken(true);\n              if (accessToken != null) {\n                const userId = UidFactory_generateUid(8);\n                const result = await props.service.googleSignIn(accessToken, userId, {});\n                if (result.email) {\n                  if (props.redirectUrl && typeof window !== \"undefined\") {\n                    window.location.href = props.redirectUrl;\n                  } else if (typeof window !== \"undefined\") {\n                    window.location.reload();\n                  }\n                } else {\n                  setIsLoading(false);\n                }\n              }\n            }}\n          >\n            <View>\n              <IconGoogle />\n            </View>\n            <Text className=\"flex-1 ml-2 text-base text-center\">Sign in with Google</Text>\n          </Pressable>\n          <Pressable\n            className=\"flex-row items-center w-full px-4 py-3 mt-2 bg-black rounded-lg nm-sign-in-with-apple\"\n            onPress={async () => {\n              track({ name: \"SignUp\" });\n              setIsLoading(true);\n              if (props.dispatch) {\n                props.dispatch(\n                  Thunk_appleSignIn((newState) => {\n                    setIsLoading(false);\n                    props.onSignIn?.(newState);\n                  })\n                );\n                return;\n              }\n              const appleResult = await AppleAuth_signIn();\n              if (appleResult.type !== \"success\") {\n                if (appleResult.type === \"error\") {\n                  Dialog_alert(appleResult.error);\n                }\n                setIsLoading(false);\n                return;\n              }\n              const userId = UidFactory_generateUid(8);\n              try {\n                const result = await props.service.appleSignIn(appleResult.code, appleResult.id_token, userId);\n                if (result.email && typeof window !== \"undefined\") {\n                  window.location.reload();\n                } else {\n                  setIsLoading(false);\n                }\n              } catch (e) {\n                Dialog_alert(\"Couldn't sign in with Apple. Please try again.\");\n                setIsLoading(false);\n              }\n            }}\n          >\n            <View style={{ marginTop: -3 }}>\n              <IconApple />\n            </View>\n            <Text className=\"flex-1 ml-2 text-base text-center text-text-alwayswhite\">Sign in with Apple</Text>\n          </Pressable>\n          <EmailAuthButton onPress={props.onOpenEmailAuth || (() => setShowEmailForm(true))} />\n        </View>\n      )}\n    </View>\n  );\n}\n\nexport function EmailAuthButton(props: { onPress: () => void }): JSX.Element {\n  return (\n    <View className=\"items-center mt-3\">\n      <LinkButton name=\"menu-item-login-email\" className=\"text-xs\" onPress={props.onPress}>\n        or use email login\n      </LinkButton>\n    </View>\n  );\n}\n\nexport type IEmailAuthMode = \"signin\" | \"signup\" | \"forgot\";\n\nconst emailAuthErrorMessages: Record<string, string> = {\n  invalid_email: \"Please enter a valid email address\",\n  invalid_password: \"Password must be at least 8 characters\",\n  password_too_long: \"Password must be at most 256 characters\",\n  account_exists: \"An account with this email already exists - sign in instead\",\n  invalid_credentials: \"Wrong email or password\",\n  account_not_found: \"No account exists with this email\",\n  wrong_password: \"Wrong password\",\n  too_many_attempts: \"Too many attempts, try again in 15 minutes\",\n  email_send_failed: \"Couldn't send the confirmation email, please try again later\",\n  network_error: \"Network error, please try again\",\n};\n\ninterface IEmailAuthFormProps {\n  // Required only for the web no-dispatch path; in-app callers pass dispatch and go through thunks\n  service?: Service;\n  redirectUrl?: string;\n  dispatch?: IDispatch;\n  onSignIn?: (state: IState) => void;\n  onModeChange?: (mode: IEmailAuthMode) => void;\n}\n\nexport function EmailAuthForm(props: IEmailAuthFormProps): JSX.Element {\n  const [mode, setMode] = useState<IEmailAuthMode>(\"signin\");\n  const [isSubmitting, setIsSubmitting] = useState(false);\n  const [error, setError] = useState<string | undefined>(undefined);\n  const [info, setInfo] = useState<string | undefined>(undefined);\n  const emailRef = useRef(\"\");\n  const passwordRef = useRef(\"\");\n\n  function switchMode(newMode: IEmailAuthMode): void {\n    setMode(newMode);\n    setError(undefined);\n    setInfo(undefined);\n    props.onModeChange?.(newMode);\n  }\n\n  function handleResult(result: IEmailAuthResult): void {\n    setIsSubmitting(false);\n    if (result.error === \"use_oauth\") {\n      const providers = result.providers?.length ? result.providers : [\"Google\", \"Apple\"];\n      setError(`This email signs in with ${providers.join(\" or \")}`);\n    } else if (result.error) {\n      setError(emailAuthErrorMessages[result.error] || \"Something went wrong, please try again\");\n    } else if (result.confirmationSent) {\n      setInfo(\n        \"This email already has a Liftosaur account. We've emailed you a link to set a password for it - check your email.\"\n      );\n    }\n  }\n\n  async function submit(): Promise<void> {\n    const email = emailRef.current.trim();\n    const password = passwordRef.current;\n    setError(undefined);\n    setInfo(undefined);\n    if (mode === \"forgot\") {\n      if (!email) {\n        setError(emailAuthErrorMessages.invalid_email);\n        return;\n      }\n      setIsSubmitting(true);\n      const onSent = (result: IEmailAuthResult): void => {\n        if (result.error) {\n          handleResult(result);\n        } else {\n          setIsSubmitting(false);\n          setInfo(`We've sent an email with instructions to ${email}.`);\n        }\n      };\n      if (props.dispatch) {\n        props.dispatch(Thunk_forgotPassword(email, onSent));\n      } else if (props.service) {\n        onSent(await props.service.forgotPassword(email));\n      }\n      return;\n    }\n    if (mode === \"signup\") {\n      track({ name: \"SignUp\" });\n    }\n    setIsSubmitting(true);\n    if (props.dispatch) {\n      props.dispatch(\n        Thunk_emailAuth(mode, email, password, (result, newState) => {\n          handleResult(result);\n          if (!result.error && !result.confirmationSent) {\n            props.onSignIn?.(newState);\n          }\n        })\n      );\n      return;\n    }\n    if (!props.service) {\n      setIsSubmitting(false);\n      return;\n    }\n    const userId = UidFactory_generateUid(8);\n    const result =\n      mode === \"signup\"\n        ? await props.service.emailSignUp(email, password, userId)\n        : await props.service.emailSignIn(email, password, userId);\n    if (result.type === \"success\" && typeof window !== \"undefined\") {\n      if (props.redirectUrl) {\n        window.location.href = props.redirectUrl;\n      } else {\n        window.location.reload();\n      }\n      return;\n    }\n    handleResult(\n      result.type === \"error\"\n        ? { error: result.error, providers: result.providers }\n        : result.type === \"confirmation_sent\"\n          ? { confirmationSent: true }\n          : {}\n    );\n  }\n\n  return (\n    <View className=\"mt-2\">\n      <Input\n        label=\"Email\"\n        identifier=\"email-auth-email\"\n        type=\"email\"\n        changeType=\"oninput\"\n        autoCapitalize=\"none\"\n        autoCorrect={false}\n        changeHandler={(r) => {\n          if (r.success) {\n            emailRef.current = r.data;\n          }\n        }}\n      />\n      {mode !== \"forgot\" && (\n        <View className=\"mt-2\">\n          <Input\n            label=\"Password\"\n            identifier=\"email-auth-password\"\n            type=\"password\"\n            changeType=\"oninput\"\n            autoCapitalize=\"none\"\n            autoCorrect={false}\n            changeHandler={(r) => {\n              if (r.success) {\n                passwordRef.current = r.data;\n              }\n            }}\n          />\n        </View>\n      )}\n      {error && <Text className=\"mt-2 text-xs text-text-error\">{error}</Text>}\n      {info && <Text className=\"mt-2 text-xs text-text-secondary\">{info}</Text>}\n      <View className=\"items-center mt-3\">\n        <Button\n          name={`email-auth-${mode}`}\n          kind=\"purple\"\n          testID=\"email-auth-submit\"\n          data-testid=\"email-auth-submit\"\n          className=\"min-w-scaled-32\"\n          disabled={isSubmitting}\n          onClick={() => submit()}\n        >\n          {isSubmitting ? (\n            <IconSpinner width={20} height={20} color={Tailwind_semantic().text.alwayswhite} />\n          ) : mode === \"signin\" ? (\n            \"Sign In\"\n          ) : mode === \"signup\" ? (\n            \"Create Account\"\n          ) : (\n            \"Send Reset Link\"\n          )}\n        </Button>\n      </View>\n      <View className=\"flex-row justify-between mt-4 gap-4\">\n        {mode !== \"signin\" && (\n          <LinkButton name=\"email-auth-mode-signin\" className=\"text-sm\" onPress={() => switchMode(\"signin\")}>\n            Sign in\n          </LinkButton>\n        )}\n        {mode !== \"signup\" && (\n          <LinkButton name=\"email-auth-mode-signup\" className=\"text-sm\" onPress={() => switchMode(\"signup\")}>\n            Create account\n          </LinkButton>\n        )}\n        {mode !== \"forgot\" && (\n          <LinkButton name=\"email-auth-mode-forgot\" className=\"text-sm\" onPress={() => switchMode(\"forgot\")}>\n            Forgot password?\n          </LinkButton>\n        )}\n      </View>\n    </View>\n  );\n}\n","import { JSX, ReactNode, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { IconCloseCircleOutline } from \"./icons/iconCloseCircleOutline\";\n\ninterface IProps {\n  isHidden: boolean;\n  shouldShowClose?: boolean;\n  children?: ReactNode;\n  zIndex?: number;\n  onClose: () => void;\n}\n\nexport function BottomSheet(props: IProps): JSX.Element {\n  const [bottomShift, setBottomShift] = useState(0);\n  const bottomSheetRef = useRef<HTMLDivElement>(null);\n  const [containerRef, setContainerRef] = useState<HTMLElement | null>(null);\n\n  useEffect(() => {\n    setContainerRef(document.getElementById(\"bottomsheet\"));\n  }, []);\n\n  useEffect(() => {\n    if (!props.isHidden) {\n      window.setTimeout(() => document.body.classList.add(`stop-scrolling-bottom-sheet`), 1000);\n    } else {\n      window.setTimeout(() => document.body.classList.remove(\"stop-scrolling-bottom-sheet\"), 1000);\n    }\n    return () => {\n      document.body.classList.remove(\"stop-scrolling-bottom-sheet\");\n    };\n  }, [props.isHidden]);\n\n  useEffect(() => {\n    const bottomSheet = bottomSheetRef.current;\n    const height = bottomSheet?.clientHeight ?? 0;\n    setBottomShift(height);\n  }, []);\n\n  useEffect(() => {\n    setBottomShift(props.isHidden ? (bottomSheetRef.current?.clientHeight ?? 0) : 0);\n  }, [props.isHidden]);\n\n  const element = (\n    <div\n      className={`fixed inset-0 ${!props.zIndex ? \"z-40\" : \"\"} pointer-events-none`}\n      style={{ zIndex: props.zIndex }}\n      data-testid=\"bottom-sheet-container\"\n    >\n      <div\n        data-name=\"overlay\"\n        className={`pointer-events-auto absolute inset-0 bg-text-secondary will-change-transform ${\n          props.isHidden ? \"invisible opacity-0\" : \"visible opacity-50\"\n        }`}\n        style={{\n          transition: \"visibility 0.2s ease-out, opacity 0.2s ease-out\",\n        }}\n        onClick={props.onClose}\n      ></div>\n      <div\n        ref={bottomSheetRef}\n        className={`bottom-sticked absolute bottom-0 left-0 flex w-full overflow-y-auto bg-background-default pointer-events-auto will-change-transform ${\n          props.isHidden ? \"invisible\" : \"visible\"\n        }`}\n        data-testid=\"bottom-sheet\"\n        style={{\n          transition: \"transform 0.2s ease-out, visibility 0.2s\",\n          transform: `translateY(${bottomShift}px)`,\n          borderRadius: \"16px 16px 0 0\",\n          boxShadow: \"0 -5px 15px rgb(0 0 0 / 30%)\",\n        }}\n      >\n        {props.shouldShowClose && (\n          <button\n            data-testid={`bottom-sheet-close`}\n            onClick={props.onClose}\n            className=\"absolute top-0 right-0 z-20 p-2 nm-bottom-sheet-close\"\n          >\n            <IconCloseCircleOutline size={28} />\n          </button>\n        )}\n        <div className=\"flex flex-col w-full safe-area-inset-bottom\" style={{ maxHeight: \"90vh\" }}>\n          <div className=\"z-10 flex items-center justify-center pt-2 bg-background-default\">\n            <div className=\"w-8 rounded-sm bg-text-disabled\" style={{ height: \"3px\" }} />\n          </div>\n          {props.children}\n        </div>\n      </div>\n    </div>\n  );\n\n  if (!containerRef) {\n    return <></>;\n  }\n  return createPortal(element, containerRef);\n}\n","import { JSX, useRef, useState } from \"react\";\nimport { View, Pressable } from \"react-native\";\nimport { Text } from \"./primitives/text\";\nimport { Switch } from \"./primitives/switch\";\nimport { BottomSheet } from \"./bottomSheet\";\nimport { IHistoryRecord, IProgressUi, ISettings, ISubscription } from \"../types\";\nimport { MenuItemWrapper } from \"./menuItem\";\nimport { InputNumber2 } from \"./inputNumber2\";\nimport { IDispatch } from \"../ducks/types\";\nimport { InputWeight2 } from \"./inputWeight2\";\nimport { MenuItemEditable } from \"./menuItemEditable\";\nimport { IconTrash } from \"./icons/iconTrash\";\nimport { lb } from \"lens-shmens\";\nimport { updateProgress } from \"../models/state\";\nimport { Weight_build, Weight_evaluateWeight, Weight_roundConvertTo } from \"../models/weight\";\nimport { Button } from \"./button\";\nimport { FocusedInputFlush_flush } from \"../utils/focusedInputFlush\";\n\ninterface IBottomSheetEditTargetProps {\n  isHidden: boolean;\n  progress: IHistoryRecord;\n  settings: ISettings;\n  editSetModal: IProgressUi[\"editSetModal\"];\n  subscription?: ISubscription;\n  dispatch: IDispatch;\n  onClose: () => void;\n}\n\nexport type IBottomSheetEditTargetContentProps = Omit<IBottomSheetEditTargetProps, \"isHidden\"> & {\n  editSetModal: Required<IProgressUi>[\"editSetModal\"];\n};\n\nexport function BottomSheetEditTargetContent(props: IBottomSheetEditTargetContentProps): JSX.Element {\n  const set = props.editSetModal.set;\n  const [enableRpe, setEnableRpe] = useState(set.rpe != null);\n  const [enableSetTimer, setEnableSetTimer] = useState(set.setTimer != null);\n  const [enableTimer, setEnableTimer] = useState(set.timer != null);\n  const lbSet = lb<IHistoryRecord>().pi(\"ui\", {}).pi(\"editSetModal\").pi(\"set\");\n  const savedRef = useRef(false);\n\n  return (\n    <View className=\"px-gutter pt-2 pb-4\">\n      <Text className=\"py-2 text-base font-semibold text-center\">Edit Set Target</Text>\n      <MenuItemWrapper name=\"edit-set-target-reps\">\n        <View className=\"flex-row items-center py-2\">\n          <View className=\"flex-1\">\n            <Text className=\"text-sm font-semibold\">Reps</Text>\n          </View>\n          <View className=\"flex-row items-center gap-2\">\n            <Text className=\"text-xs text-text-secondary\">Min</Text>\n            <View className=\"mr-2\">\n              <InputNumber2\n                width={2.5}\n                name=\"target-minreps\"\n                onBlur={(value) => {\n                  if (savedRef.current) {\n                    return;\n                  }\n                  updateProgress(props.dispatch, [lbSet.p(\"minReps\").record(value)], \"target-blur-minreps\");\n                }}\n                onInput={(value) => {\n                  if (savedRef.current) {\n                    return;\n                  }\n                  if (value != null && !isNaN(value) && value >= 0) {\n                    updateProgress(props.dispatch, [lbSet.p(\"minReps\").record(value)], \"target-input-minreps\");\n                  }\n                }}\n                value={set.minReps}\n                min={0}\n                max={9999}\n                step={1}\n              />\n            </View>\n            <Text className=\"text-xs text-text-secondary\">Max</Text>\n            <View className=\"mr-3\">\n              <InputNumber2\n                width={2.5}\n                name=\"target-maxreps\"\n                onBlur={(value) => {\n                  if (savedRef.current) {\n                    return;\n                  }\n                  updateProgress(props.dispatch, [lbSet.p(\"reps\").record(value)], \"target-blur-maxreps\");\n                }}\n                onInput={(value) => {\n                  if (savedRef.current) {\n                    return;\n                  }\n                  if (value == null || (!isNaN(value) && value >= 0)) {\n                    updateProgress(props.dispatch, [lbSet.p(\"reps\").record(value)], \"target-input-maxreps\");\n                  }\n                }}\n                value={set.reps}\n                min={0}\n                max={9999}\n                step={1}\n              />\n            </View>\n            <View className=\"flex-row items-center\">\n              <Text className=\"mr-1 text-xs\">AMRAP?</Text>\n              <Switch\n                value={set.isAmrap}\n                testID=\"edit-target-amrap\"\n                data-testid=\"edit-target-amrap\"\n                onValueChange={() => {\n                  updateProgress(props.dispatch, [lbSet.p(\"isAmrap\").record(!set.isAmrap)], \"amrap-checkbox\");\n                }}\n              />\n            </View>\n          </View>\n        </View>\n      </MenuItemWrapper>\n      <MenuItemWrapper name=\"edit-set-target-weight\">\n        <View className=\"flex-row items-center py-2\">\n          <View className=\"flex-1\">\n            <Text className=\"text-sm font-semibold\">Weight</Text>\n          </View>\n          <View className=\"flex-row items-center gap-2\">\n            <View className=\"flex-row items-center mr-3\">\n              <InputWeight2\n                name=\"target-weight\"\n                subscription={props.subscription}\n                exerciseType={props.editSetModal.exerciseType}\n                inputCommitMode=\"blur\"\n                onBlur={(value) => {\n                  if (savedRef.current) {\n                    return;\n                  }\n                  updateProgress(\n                    props.dispatch,\n                    [lbSet.p(\"originalWeight\").record(value ?? Weight_build(0, \"lb\"))],\n                    \"target-blur-weight\"\n                  );\n                }}\n                onInput={(value) => {\n                  if (savedRef.current) {\n                    return;\n                  }\n                  if (value != null) {\n                    updateProgress(\n                      props.dispatch,\n                      [lbSet.p(\"originalWeight\").record(value ?? Weight_build(0, \"lb\"))],\n                      \"target-input-weight\"\n                    );\n                  }\n                }}\n                units={[\"lb\", \"kg\", \"%\"] as const}\n                value={set.originalWeight}\n                max={9999}\n                min={-9999}\n                settings={props.settings}\n              />\n              <Text className=\"ml-1 text-xs text-text-secondary\">\n                {set.originalWeight?.unit ?? props.settings.units}\n              </Text>\n            </View>\n            <View className=\"flex-row items-center\">\n              <Text className=\"mr-1 text-xs\">Ask?</Text>\n              <Switch\n                value={set.askWeight}\n                testID=\"edit-target-ask-weight\"\n                data-testid=\"edit-target-ask-weight\"\n                onValueChange={() => {\n                  updateProgress(props.dispatch, [lbSet.p(\"askWeight\").record(!set.askWeight)], \"ask-weight-checkbox\");\n                }}\n              />\n            </View>\n          </View>\n        </View>\n      </MenuItemWrapper>\n      {!enableRpe ? (\n        <View className=\"font-semibold\">\n          <MenuItemEditable\n            size=\"sm\"\n            type=\"boolean\"\n            name=\"Enable RPE?\"\n            value={set.rpe != null ? \"true\" : \"false\"}\n            onChange={() => {\n              setEnableRpe(true);\n            }}\n          />\n        </View>\n      ) : (\n        <MenuItemWrapper name=\"edit-set-target-rpe\">\n          <View className=\"flex-row items-center py-1\">\n            <View className=\"flex-1\">\n              <Text className=\"text-sm font-semibold\">RPE</Text>\n            </View>\n            <View className=\"flex-row items-center gap-2\">\n              <View className=\"flex-row items-center mr-3\">\n                <InputNumber2\n                  allowDot={true}\n                  width={2.5}\n                  name=\"target-rpe\"\n                  onBlur={(value) => {\n                    if (savedRef.current) {\n                      return;\n                    }\n                    updateProgress(props.dispatch, [lbSet.p(\"rpe\").record(value)], \"target-blur-rpe\");\n                  }}\n                  onInput={(value) => {\n                    if (savedRef.current) {\n                      return;\n                    }\n                    if (value != null && !isNaN(value) && value >= 0) {\n                      updateProgress(props.dispatch, [lbSet.p(\"rpe\").record(value)], \"target-input-rpe\");\n                    }\n                  }}\n                  value={set.rpe}\n                  min={0}\n                  max={10}\n                  step={0.5}\n                />\n              </View>\n              <View className=\"flex-row items-center\">\n                <Text className=\"mr-1 text-xs\">Log?</Text>\n                <Switch\n                  value={set.logRpe}\n                  testID=\"edit-target-log-rpe\"\n                  data-testid=\"edit-target-log-rpe\"\n                  onValueChange={() => {\n                    updateProgress(props.dispatch, [lbSet.p(\"logRpe\").record(!set.logRpe)], \"log-rpe-checkbox\");\n                  }}\n                />\n              </View>\n              <Pressable\n                className=\"p-2\"\n                style={{ marginRight: -8 }}\n                onPress={() => {\n                  setEnableRpe(false);\n                  updateProgress(\n                    props.dispatch,\n                    [lbSet.p(\"logRpe\").record(false), lbSet.p(\"rpe\").record(undefined)],\n                    \"clear-rpe\"\n                  );\n                }}\n              >\n                <IconTrash width={15} height={20} />\n              </Pressable>\n            </View>\n          </View>\n        </MenuItemWrapper>\n      )}\n      {!enableSetTimer ? (\n        <View className=\"font-semibold\">\n          <MenuItemEditable\n            size=\"sm\"\n            type=\"boolean\"\n            name=\"Enable Set Timer?\"\n            value={set.setTimer != null ? \"true\" : \"false\"}\n            onChange={() => {\n              setEnableSetTimer(true);\n              updateProgress(props.dispatch, [lbSet.p(\"setTimer\").record(30)], \"target-enable-set-timer\");\n            }}\n          />\n        </View>\n      ) : (\n        <MenuItemWrapper name=\"edit-set-target-set-timer\">\n          <View className=\"flex-row items-center py-1\">\n            <View className=\"flex-1\">\n              <Text className=\"text-sm font-semibold\">Set Timer</Text>\n            </View>\n            <View className=\"flex-row items-center gap-2\">\n              <View className=\"flex-row items-center mr-3\">\n                <InputNumber2\n                  width={3.5}\n                  name=\"target-set-timer\"\n                  after={() =>\n                    set.isOverflowSetTimer ? <Text className=\"text-xs text-text-secondary\">+</Text> : undefined\n                  }\n                  keyboardAddon={\n                    <View className=\"flex-row items-center py-2\">\n                      <Text className=\"mr-2 text-sm font-semibold\">Count up past target?</Text>\n                      <Switch\n                        value={!!set.isOverflowSetTimer}\n                        testID=\"edit-target-overflow-set-timer\"\n                        data-testid=\"edit-target-overflow-set-timer\"\n                        onValueChange={(value) => {\n                          updateProgress(\n                            props.dispatch,\n                            [lbSet.p(\"isOverflowSetTimer\").record(value || undefined)],\n                            \"overflow-set-timer-checkbox\"\n                          );\n                        }}\n                      />\n                    </View>\n                  }\n                  onBlur={(value) => {\n                    if (savedRef.current) {\n                      return;\n                    }\n                    updateProgress(props.dispatch, [lbSet.p(\"setTimer\").record(value)], \"target-blur-set-timer\");\n                  }}\n                  onInput={(value) => {\n                    if (savedRef.current) {\n                      return;\n                    }\n                    if (value != null && !isNaN(value) && value >= 0) {\n                      updateProgress(props.dispatch, [lbSet.p(\"setTimer\").record(value)], \"target-input-set-timer\");\n                    }\n                  }}\n                  value={set.setTimer}\n                  min={0}\n                  max={9999}\n                  step={15}\n                />\n                <Text className=\"ml-1 text-xs text-text-secondary\">s</Text>\n              </View>\n              <Pressable\n                className=\"p-2\"\n                style={{ marginRight: -8 }}\n                onPress={() => {\n                  setEnableSetTimer(false);\n                  updateProgress(\n                    props.dispatch,\n                    [lbSet.p(\"setTimer\").record(undefined), lbSet.p(\"isOverflowSetTimer\").record(undefined)],\n                    \"target-clear-set-timer\"\n                  );\n                }}\n              >\n                <IconTrash width={15} height={20} />\n              </Pressable>\n            </View>\n          </View>\n        </MenuItemWrapper>\n      )}\n      {!enableTimer ? (\n        <View className=\"font-semibold\">\n          <MenuItemEditable\n            size=\"sm\"\n            type=\"boolean\"\n            name=\"Enable Custom Rest Timer?\"\n            value={set.timer ? \"true\" : \"false\"}\n            onChange={() => {\n              setEnableTimer(true);\n            }}\n          />\n        </View>\n      ) : (\n        <MenuItemWrapper name=\"edit-set-target-timer\">\n          <View className=\"flex-row items-center py-1\">\n            <View className=\"flex-1\">\n              <Text className=\"text-sm font-semibold\">Rest Timer</Text>\n            </View>\n            <View className=\"flex-row items-center gap-2\">\n              <View className=\"flex-row items-center mr-3\">\n                <InputNumber2\n                  width={2.5}\n                  name=\"target-timer\"\n                  onBlur={(value) => {\n                    if (savedRef.current) {\n                      return;\n                    }\n                    updateProgress(props.dispatch, [lbSet.p(\"timer\").record(value)], \"target-blur-timer\");\n                  }}\n                  onInput={(value) => {\n                    if (savedRef.current) {\n                      return;\n                    }\n                    if (value != null && !isNaN(value) && value >= 0) {\n                      updateProgress(props.dispatch, [lbSet.p(\"timer\").record(value)], \"target-input-timer\");\n                    }\n                  }}\n                  value={set.timer}\n                  min={0}\n                  max={600}\n                  step={5}\n                />\n                <Text className=\"ml-1 text-xs text-text-secondary\">s</Text>\n              </View>\n              <Pressable\n                className=\"p-2\"\n                style={{ marginRight: -8 }}\n                onPress={() => {\n                  setEnableTimer(false);\n                  updateProgress(props.dispatch, [lbSet.p(\"timer\").record(undefined)], \"target-clear-timer\");\n                }}\n              >\n                <IconTrash width={15} height={20} />\n              </Pressable>\n            </View>\n          </View>\n        </MenuItemWrapper>\n      )}\n      <View className=\"my-4\">\n        <Button\n          kind=\"purple\"\n          name=\"edit-set-target-save\"\n          data-testid=\"edit-set-target-save\"\n          testID=\"edit-set-target-save\"\n          className=\"w-full\"\n          onClick={() => {\n            FocusedInputFlush_flush();\n            savedRef.current = true;\n            const entryIndex = props.editSetModal.entryIndex;\n            const setIndex = props.editSetModal.setIndex ?? 0;\n            const exerciseType = props.editSetModal.exerciseType;\n            const settings = props.settings;\n            updateProgress(\n              props.dispatch,\n              [\n                lb<IHistoryRecord>().recordModify((progress) => {\n                  const freshSet = progress.ui?.editSetModal?.set ?? progress.entries[entryIndex]?.sets[setIndex];\n                  if (!freshSet) {\n                    return progress;\n                  }\n                  const evaluatedWeight = freshSet.originalWeight\n                    ? Weight_evaluateWeight(freshSet.originalWeight, exerciseType ?? { id: \"squat\" }, settings)\n                    : undefined;\n                  const weight = evaluatedWeight\n                    ? Weight_roundConvertTo(evaluatedWeight, settings, evaluatedWeight.unit, exerciseType)\n                    : undefined;\n                  const reps = freshSet.minReps != null && freshSet.reps == null ? freshSet.minReps : freshSet.reps;\n                  const minReps = freshSet.minReps != null && freshSet.reps == null ? undefined : freshSet.minReps;\n                  const newSet = { ...freshSet, weight, reps, minReps };\n                  const newEntries = progress.entries.map((entry, i) => {\n                    if (i !== entryIndex) {\n                      return entry;\n                    }\n                    const newSets = entry.sets.map((s, j) => (j === setIndex ? newSet : s));\n                    return { ...entry, sets: newSets };\n                  });\n                  return {\n                    ...progress,\n                    entries: newEntries,\n                    ui: { ...(progress.ui ?? {}), editSetModal: undefined },\n                  };\n                }),\n              ],\n              \"save-target\"\n            );\n          }}\n        >\n          Save\n        </Button>\n      </View>\n    </View>\n  );\n}\n\nexport const BottomSheetEditTarget = (props: IBottomSheetEditTargetProps): JSX.Element => {\n  const editSetModal = props.editSetModal;\n  return (\n    <BottomSheet shouldShowClose={true} onClose={props.onClose} isHidden={props.isHidden}>\n      {editSetModal && (\n        <BottomSheetEditTargetContent\n          editSetModal={editSetModal}\n          subscription={props.subscription}\n          settings={props.settings}\n          progress={props.progress}\n          dispatch={props.dispatch}\n          onClose={props.onClose}\n        />\n      )}\n    </BottomSheet>\n  );\n};\n","import { JSX, ReactNode } from \"react\";\nimport { GestureResponderEvent, Pressable } from \"react-native\";\nimport { Pressable as StickyPressable } from \"./primitives/pressable\";\nimport { Text } from \"./primitives/text\";\nimport { useTrackClick } from \"../utils/clickTracking\";\n\nfunction containsString(children: ReactNode): boolean {\n  if (typeof children === \"string\" || typeof children === \"number\") {\n    return true;\n  }\n  if (Array.isArray(children)) {\n    return children.some((c) => typeof c === \"string\" || typeof c === \"number\");\n  }\n  return false;\n}\n\ninterface IProps {\n  buttonSize?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"lg2\";\n  kind: \"orange\" | \"purple\" | \"grayv2\" | \"red\" | \"transparent-purple\" | \"lightpurple\" | \"lightgrayv3\";\n  name: string;\n  onPress?: (e: GestureResponderEvent) => void;\n  onClick?: (e: GestureResponderEvent) => void;\n  disabled?: boolean;\n  className?: string;\n  children?: ReactNode;\n  testID?: string;\n  type?: string;\n  title?: string;\n  style?: Record<string, unknown>;\n  tabIndex?: number;\n  sticky?: boolean;\n}\n\nexport function Button(props: IProps): JSX.Element {\n  const { children, buttonSize, kind, disabled } = props;\n  const testID = props.testID || props.name;\n\n  // extract classname text size\n  const textSize = props.className\n    ? props.className.includes(\"text-xs\")\n      ? \"text-xs\"\n      : props.className.includes(\"text-sm\")\n        ? \"text-sm\"\n        : props.className.includes(\"text-lg\")\n          ? \"text-lg\"\n          : props.className.includes(\"text-base\")\n            ? \"text-base\"\n            : undefined\n    : undefined;\n\n  let containerCn = \"rounded-lg items-center justify-center\";\n  let textCn = \"text-center \";\n  if (!textSize) {\n    textCn += \"text-xs \";\n  } else {\n    textCn += textSize + \" \";\n  }\n\n  if (disabled) {\n    containerCn += \" bg-background-darkgray opacity-50\";\n    textCn += \" text-text-alwayswhite\";\n  } else if (kind === \"purple\") {\n    containerCn += \" bg-button-primarybackground\";\n    textCn += \" text-text-alwayswhite\";\n  } else if (kind === \"grayv2\") {\n    containerCn += \" bg-background-darkgray\";\n    textCn += \" text-text-alwayswhite\";\n  } else if (kind === \"red\") {\n    containerCn += \" bg-background-darkred\";\n    textCn += \" text-text-alwayswhite\";\n  } else if (kind === \"transparent-purple\") {\n    containerCn += \" bg-transparent\";\n    textCn += \" text-text-purple\";\n  } else if (kind === \"lightpurple\") {\n    containerCn += \" bg-background-purpledark\";\n    textCn += \" text-text-link\";\n  } else if (kind === \"lightgrayv3\") {\n    containerCn += \" bg-background-subtle border border-background-subtle\";\n    textCn += \" text-text-link\";\n  } else {\n    containerCn += \" bg-button-orangebackground\";\n    textCn += \" text-text-primaryinverse\";\n  }\n\n  if (buttonSize === \"sm\") {\n    containerCn += \" px-2 py-1\";\n    textCn += \" font-semibold\";\n  } else if (buttonSize === \"xs\") {\n    containerCn += \" px-1 py-0\";\n    textCn += \" font-normal\";\n  } else if (buttonSize === \"md\") {\n    containerCn += \" px-4 py-2\";\n    textCn += \" font-semibold\";\n  } else if (buttonSize === \"lg2\") {\n    containerCn += \" px-2 py-3\";\n    textCn += \" font-semibold\";\n  } else {\n    containerCn += \" px-8 py-3\";\n    textCn += \" font-semibold\";\n  }\n\n  if (props.className) {\n    containerCn += ` ${props.className}`;\n  }\n  containerCn += ` nm-${props.name}`;\n\n  const accessibilityLabel = typeof children === \"string\" ? children : undefined;\n  const trackClick = useTrackClick();\n  const userOnPress = props.onPress || props.onClick;\n  const onPress = (e: GestureResponderEvent): void => {\n    trackClick(props.name, props.className);\n    userOnPress?.(e);\n  };\n  const PressableComponent = props.sticky ? StickyPressable : Pressable;\n  return (\n    <PressableComponent\n      accessibilityRole=\"button\"\n      accessibilityLabel={accessibilityLabel}\n      className={containerCn}\n      onPress={onPress}\n      disabled={disabled}\n      testID={testID}\n      data-testid={testID}\n    >\n      {containsString(children) ? <Text className={textCn}>{children}</Text> : children}\n    </PressableComponent>\n  );\n}\n","import { PP_iterate2 } from \"../../../models/pp\";\nimport { Dialog_alert } from \"../../../utils/dialog\";\nimport { PlannerProgram_evaluate } from \"../../../pages/planner/models/plannerProgram\";\nimport {\n  IModalExerciseUi,\n  IPlannerExerciseState,\n  IPlannerProgramExercise,\n  IPlannerProgramExerciseEvaluatedSet,\n  IPlannerState,\n  IPlannerUi,\n} from \"../../../pages/planner/models/types\";\nimport { PlannerEvaluator_evaluate, PlannerEvaluator_getFirstError } from \"../../../pages/planner/plannerEvaluator\";\nimport { PlannerKey_fromFullName, PlannerKey_fromLabelNameAndEquipment } from \"../../../pages/planner/plannerKey\";\nimport {\n  IPlannerProgram,\n  ISettings,\n  IDayData,\n  IExerciseType,\n  IDaySetData,\n  IPlannerProgramDay,\n  IShortDayData,\n} from \"../../../types\";\nimport { ObjectUtils_clone } from \"../../../utils/object\";\nimport { PlannerExerciseEvaluator } from \"../../../pages/planner/plannerExerciseEvaluator\";\nimport { IExercise, Exercise_findByNameEquipment, Exercise_fullName, Exercise_get } from \"../../../models/exercise\";\nimport {\n  IEvaluatedProgram,\n  Program_evaluateCachedPlanner,\n  Program_create,\n  Program_getFirstProgramExercise,\n} from \"../../../models/program\";\nimport { ProgramToPlanner } from \"../../../models/programToPlanner\";\nimport { ILensDispatch } from \"../../../utils/useLensReducer\";\nimport { lb } from \"lens-shmens\";\nimport { UidFactory_generateUid } from \"../../../utils/generator\";\nimport { Weight_build } from \"../../../models/weight\";\n\nexport function EditProgramUiHelpers_changeFirstInstance(\n  planner: IPlannerProgram,\n  plannerExercise: IPlannerProgramExercise,\n  settings: ISettings,\n  shouldValidate: boolean,\n  cb: (exercise: IPlannerProgramExercise) => void\n): IPlannerProgram {\n  const key = PlannerKey_fromFullName(plannerExercise.fullName, settings.exercises);\n  const evaluatedProgram = ObjectUtils_clone(\n    Program_evaluateCachedPlanner({ ...Program_create(\"Temp\"), planner }, settings)\n  );\n  PP_iterate2(evaluatedProgram.weeks, (e) => {\n    const aKey = PlannerKey_fromFullName(e.fullName, settings.exercises);\n    if (key === aKey) {\n      cb(e);\n      return true;\n    }\n    return false;\n  });\n  return EditProgramUiHelpers_validate(\n    shouldValidate,\n    planner,\n    new ProgramToPlanner(evaluatedProgram, settings).convertToPlanner(),\n    settings\n  );\n}\n\nexport function EditProgramUiHelpers_changeLabel(\n  planner: IPlannerProgram,\n  modalExerciseUi: IModalExerciseUi,\n  onProgramChange: (program: IPlannerProgram) => void,\n  onUiChange: (modalExerciseUi2?: IModalExerciseUi) => void,\n  fullName: string,\n  value: string | undefined,\n  settings: ISettings,\n  dayData: Required<IDayData>,\n  change?: \"all\" | \"one\" | \"duplicate\"\n): void {\n  const { name, equipment } = PlannerExerciseEvaluator.extractNameParts(fullName, settings.exercises);\n  const newKey = PlannerKey_fromLabelNameAndEquipment(value, name, equipment, settings.exercises);\n\n  if (change === \"all\") {\n    onProgramChange(\n      EditProgramUiHelpers_changeAllInstances(planner, fullName, settings, true, (e) => {\n        e.label = value;\n      })\n    );\n  } else {\n    onProgramChange(\n      EditProgramUiHelpers_changeCurrentInstance3(planner, fullName, dayData, false, settings, true, (e) => {\n        e.label = value;\n      })\n    );\n  }\n\n  const exercise = Exercise_findByNameEquipment(settings.exercises, name, equipment);\n  let newModalExercise = modalExerciseUi;\n  if (exercise && modalExerciseUi && modalExerciseUi.fullName === fullName) {\n    const newFullName = Exercise_fullName(exercise, settings, value);\n    newModalExercise = { ...modalExerciseUi, exerciseKey: newKey, fullName: newFullName };\n    onUiChange(newModalExercise);\n  }\n}\n\nexport function EditProgramUiHelpers_changeCurrentInstanceExercise(\n  dispatch: ILensDispatch<IPlannerExerciseState>,\n  plannerExercise: IPlannerProgramExercise,\n  settings: ISettings,\n  cb: (exercise: IPlannerProgramExercise) => void\n): void {\n  const lbProgram = lb<IPlannerExerciseState>().p(\"current\").p(\"program\").pi(\"planner\");\n  dispatch(\n    lbProgram.recordModify((program) => {\n      return EditProgramUiHelpers_changeCurrentInstance2(program, plannerExercise, settings, true, cb);\n    }),\n    \"Change current exercise instance\"\n  );\n}\n\nexport function EditProgramUiHelpers_onDaysChange(\n  plannerDispatch: ILensDispatch<IPlannerState>,\n  ui: IPlannerUi,\n  weekIndex: number,\n  days: IPlannerProgramDay[],\n  cb: (order: boolean[]) => void\n): void {\n  const lbUi = lb<IPlannerState>().p(\"ui\");\n  const collapsedOrder = days.map((d, i) => {\n    return ui.dayUi.collapsed.has(`${weekIndex}-${i}`);\n  });\n  cb(collapsedOrder);\n  plannerDispatch(\n    [\n      lbUi\n        .p(\"dayUi\")\n        .p(\"collapsed\")\n        .recordModify((collapsed) => {\n          const newCollapsed = new Set<string>(collapsed);\n          for (let i = 0; i < collapsedOrder.length; i++) {\n            if (collapsedOrder[i]) {\n              newCollapsed.add(`${weekIndex}-${i}`);\n            } else {\n              newCollapsed.delete(`${weekIndex}-${i}`);\n            }\n          }\n          return newCollapsed;\n        }),\n    ],\n    \"Toggle week collapse state\"\n  );\n}\n\nexport function EditProgramUiHelpers_changeSets(\n  planner: IPlannerProgram,\n  key: string,\n  daySets: IDaySetData[],\n  settings: ISettings,\n  cb: (set: IPlannerProgramExerciseEvaluatedSet) => void\n): IPlannerProgram {\n  const evaluatedProgram = ObjectUtils_clone(\n    Program_evaluateCachedPlanner({ ...Program_create(\"Temp\"), planner }, settings)\n  );\n\n  PP_iterate2(evaluatedProgram.weeks, (e, weekIndex, dayInWeekIndex, dayIndex, exerciseIndex) => {\n    if (e.key !== key) {\n      return;\n    }\n    for (const daySet of daySets) {\n      if (daySet.week === weekIndex + 1 && daySet.dayInWeek === dayInWeekIndex + 1) {\n        for (let setVariationIndex = 0; setVariationIndex < e.evaluatedSetVariations.length; setVariationIndex++) {\n          if (daySet.setVariation === setVariationIndex + 1) {\n            const sets = e.evaluatedSetVariations[setVariationIndex].sets;\n            for (let setIndex = 0; setIndex < sets.length; setIndex++) {\n              if (daySet.set === setIndex + 1) {\n                cb(sets[setIndex]);\n              }\n            }\n          }\n        }\n      }\n    }\n  });\n\n  return EditProgramUiHelpers_validate(\n    true,\n    planner,\n    new ProgramToPlanner(evaluatedProgram, settings).convertToPlanner(),\n    settings\n  );\n}\n\nexport function EditProgramUiHelpers_changeCurrentInstance2(\n  planner: IPlannerProgram,\n  plannerExercise: IPlannerProgramExercise,\n  settings: ISettings,\n  shouldValidate: boolean,\n  cb: (exercise: IPlannerProgramExercise) => void\n): IPlannerProgram {\n  const fullName = plannerExercise.fullName;\n  const dayData = plannerExercise.dayData;\n  const isRepeat = !!plannerExercise.isRepeat;\n  return EditProgramUiHelpers_changeCurrentInstance3(\n    planner,\n    fullName,\n    dayData,\n    isRepeat,\n    settings,\n    shouldValidate,\n    cb\n  );\n}\n\nexport function EditProgramUiHelpers_changeCurrentInstance3(\n  planner: IPlannerProgram,\n  fullName: string,\n  dayData: IShortDayData,\n  isRepeat: boolean,\n  settings: ISettings,\n  shouldValidate: boolean,\n  cb: (exercise: IPlannerProgramExercise) => void\n): IPlannerProgram {\n  const evaluatedProgram = ObjectUtils_clone(\n    Program_evaluateCachedPlanner({ ...Program_create(\"Temp\"), planner }, settings)\n  );\n\n  const weeks = EditProgramUiHelpers_getWeeks2(evaluatedProgram, dayData, fullName, isRepeat);\n  for (const week of weeks) {\n    PP_iterate2(evaluatedProgram.weeks, (e, weekIndex, dayInWeekIndex, dayIndex, exerciseIndex) => {\n      const current = week === weekIndex + 1 && dayData.dayInWeek === dayInWeekIndex + 1 && e.fullName === fullName;\n      if (current) {\n        cb(e);\n      }\n    });\n  }\n\n  return EditProgramUiHelpers_validate(\n    shouldValidate,\n    planner,\n    new ProgramToPlanner(evaluatedProgram, settings).convertToPlanner(),\n    settings\n  );\n}\n\nexport function EditProgramUiHelpers_validate(\n  shouldValidate: boolean,\n  oldPlanner: IPlannerProgram,\n  newPlanner: IPlannerProgram,\n  settings: ISettings\n): IPlannerProgram {\n  if (shouldValidate) {\n    const { evaluatedWeeks } = PlannerEvaluator_evaluate(newPlanner, settings);\n    const error = PlannerEvaluator_getFirstError(evaluatedWeeks);\n    if (error) {\n      Dialog_alert(error.message);\n      return oldPlanner;\n    } else {\n      return newPlanner;\n    }\n  } else {\n    return newPlanner;\n  }\n}\n\nexport function EditProgramUiHelpers_getWeeks2(\n  evaluatedProgram: IEvaluatedProgram,\n  dayData: IShortDayData,\n  fullName: string,\n  ignoreRepeats: boolean = false\n): number[] {\n  const day = evaluatedProgram.weeks[dayData.week - 1].days[dayData.dayInWeek - 1];\n  const weeks: Set<number> = new Set();\n  weeks.add(dayData.week);\n  const exercise = day.exercises.find((e) => e.fullName === fullName);\n  if (!ignoreRepeats && exercise != null) {\n    for (const repeating of exercise.repeating) {\n      weeks.add(repeating);\n    }\n  }\n  return Array.from(weeks);\n}\n\nexport function EditProgramUiHelpers_duplicateCurrentInstance(\n  planner: IPlannerProgram,\n  dayData: Required<IDayData>,\n  fullName: string,\n  label: string | undefined,\n  newExerciseType: IExerciseType | string,\n  settings: ISettings\n): IPlannerProgram {\n  const evaluatedProgram = ObjectUtils_clone(\n    Program_evaluateCachedPlanner({ ...Program_create(\"Temp\"), planner }, settings)\n  );\n  const weeks = EditProgramUiHelpers_getWeeks2(evaluatedProgram, dayData, fullName);\n\n  const add = [];\n  for (const week of weeks) {\n    const targetDay = evaluatedProgram.weeks[week - 1]?.days[dayData.dayInWeek - 1];\n\n    let newFullName: string | undefined;\n    const index = targetDay.exercises.findIndex((e) => e.fullName === fullName);\n    const previousExercise = targetDay.exercises[index];\n    if (index !== -1 && previousExercise) {\n      let exercise: IExercise | undefined;\n      if (typeof newExerciseType === \"string\") {\n        newFullName = `${label ? `${label}: ` : \"\"}${newExerciseType}`;\n      } else {\n        exercise = Exercise_get(newExerciseType, settings.exercises);\n        newFullName = Exercise_fullName(exercise, settings, label);\n      }\n      const newExercise: IPlannerProgramExercise = {\n        ...ObjectUtils_clone(previousExercise),\n        label: label ?? previousExercise.label,\n        fullName: newFullName,\n        shortName: newFullName,\n        notused: typeof newExerciseType === \"string\" ? true : previousExercise.notused,\n        key: PlannerKey_fromFullName(newFullName, settings.exercises),\n        exerciseType: typeof newExerciseType === \"string\" ? undefined : newExerciseType,\n        name: exercise ? exercise.name : typeof newExerciseType === \"string\" ? newExerciseType : \"\",\n      };\n      targetDay.exercises.splice(index + 1, 0, newExercise);\n    }\n    if (newFullName != null && index !== -1) {\n      add.push({ dayData: { ...dayData, week }, fullName: newFullName, index: index + 1 });\n    }\n  }\n  if (add.length > 0) {\n    return new ProgramToPlanner(evaluatedProgram, settings).convertToPlanner({ add });\n  } else {\n    return planner;\n  }\n}\n\nexport function EditProgramUiHelpers_changeRepeating(\n  planner: IPlannerProgram,\n  dayData: Required<IDayData>,\n  repeatTo: number,\n  fullName: string,\n  settings: ISettings,\n  shouldValidate: boolean\n): IPlannerProgram {\n  const evaluatedProgram = ObjectUtils_clone(\n    Program_evaluateCachedPlanner({ ...Program_create(\"Temp\"), planner }, settings)\n  );\n\n  let repeatingExercise: IPlannerProgramExercise | undefined;\n  const newRepeating: number[] = [];\n  for (let week = dayData.week; week <= repeatTo; week += 1) {\n    newRepeating.push(week);\n  }\n  const add = [];\n  for (let week = 1; week <= planner.weeks.length; week += 1) {\n    const targetDay = evaluatedProgram.weeks[week - 1]?.days[dayData.dayInWeek - 1];\n    if (targetDay) {\n      const index = targetDay.exercises.findIndex((e) => e.fullName === fullName);\n      let exercise = targetDay.exercises[index] as IPlannerProgramExercise | undefined;\n      if (exercise && week >= dayData.week && !repeatingExercise) {\n        exercise.repeat = newRepeating;\n        exercise.repeating = newRepeating;\n        repeatingExercise = exercise;\n      }\n      if (repeatingExercise && week > dayData.week) {\n        if (week <= repeatTo && index === -1) {\n          exercise = { ...repeatingExercise, isRepeat: true };\n          targetDay.exercises.push(exercise);\n          add.push({ dayData: { ...dayData, week }, fullName, index: targetDay.exercises.length - 1 });\n        } else if (week > repeatTo) {\n          targetDay.exercises.splice(index, 1);\n        }\n      }\n      if (repeatingExercise && week > dayData.week && !exercise?.isRepeat) {\n        break;\n      }\n    }\n  }\n  return EditProgramUiHelpers_validate(\n    shouldValidate,\n    planner,\n    new ProgramToPlanner(evaluatedProgram, settings).convertToPlanner({ add }),\n    settings\n  );\n}\n\nexport function EditProgramUiHelpers_deleteCurrentInstance(\n  planner: IPlannerProgram,\n  dayData: Required<IDayData>,\n  fullName: string,\n  settings: ISettings,\n  shouldValidate: boolean,\n  allowDeleteEverywhere: boolean\n): IPlannerProgram {\n  const evaluatedProgram = ObjectUtils_clone(\n    Program_evaluateCachedPlanner({ ...Program_create(\"Temp\"), planner }, settings)\n  );\n  const weeks = EditProgramUiHelpers_getWeeks2(evaluatedProgram, dayData, fullName);\n\n  for (const week of weeks) {\n    const targetDay = evaluatedProgram.weeks[week - 1]?.days[dayData.dayInWeek - 1];\n\n    if (targetDay) {\n      const index = targetDay.exercises.findIndex((e) => e.fullName === fullName);\n      if (index !== -1) {\n        targetDay.exercises.splice(index, 1);\n      }\n    }\n  }\n\n  const newPlanner = EditProgramUiHelpers_validate(\n    shouldValidate,\n    planner,\n    new ProgramToPlanner(evaluatedProgram, settings).convertToPlanner(),\n    settings\n  );\n  if (!allowDeleteEverywhere) {\n    const newEvaluatedProgram = Program_evaluateCachedPlanner(\n      { ...Program_create(\"Temp\"), planner: newPlanner },\n      settings\n    );\n    const firstExercise = Program_getFirstProgramExercise(newEvaluatedProgram, fullName);\n    if (!firstExercise) {\n      Dialog_alert(\"You cannot delete this exercise from all days on the screen. Do it from the Program screen.\");\n      return planner;\n    }\n  }\n  return newPlanner;\n}\n\nexport function EditProgramUiHelpers_addInstance(\n  planner: IPlannerProgram,\n  dayData: Required<IDayData>,\n  fullName: string,\n  exerciseType: IExerciseType | undefined,\n  settings: ISettings\n): IPlannerProgram {\n  const evaluatedProgram = ObjectUtils_clone(\n    Program_evaluateCachedPlanner({ ...Program_create(\"Temp\"), planner }, settings)\n  );\n  const { week, dayInWeek } = dayData;\n  const targetDay = evaluatedProgram.weeks[week - 1]?.days[dayInWeek - 1];\n  const { label, name } = PlannerExerciseEvaluator.extractNameParts(fullName, settings.exercises);\n\n  const add = [];\n  if (targetDay) {\n    const newExercise: IPlannerProgramExercise = {\n      fullName: fullName,\n      shortName: fullName,\n      label,\n      key: PlannerKey_fromFullName(fullName, settings.exercises),\n      exerciseType: exerciseType,\n      name: name,\n      id: UidFactory_generateUid(8),\n      dayData: dayData,\n      repeat: [],\n      exerciseIndex: targetDay.exercises.length,\n      repeating: [],\n      order: 0,\n      text: \"\",\n      tags: [],\n      line: 0,\n      exerciseVariations: [{ exerciseType, name, isCurrent: true }],\n      evaluatedSetVariations: [\n        {\n          sets: [\n            {\n              maxrep: 5,\n              weight: Weight_build(100, settings.units),\n              logRpe: false,\n              isAmrap: false,\n              isQuickAddSet: false,\n              askWeight: false,\n            },\n          ],\n          isCurrent: true,\n        },\n      ],\n      setVariations: [\n        {\n          sets: [\n            {\n              repRange: {\n                isQuickAddSet: false,\n                maxrep: 5,\n                isAmrap: false,\n                numberOfSets: 1,\n              },\n              weight: Weight_build(100, settings.units),\n              logRpe: false,\n              askWeight: false,\n            },\n          ],\n          isCurrent: true,\n        },\n      ],\n      descriptions: { values: [] },\n      globals: {},\n      points: {\n        fullName: {\n          line: 0,\n          offset: 0,\n          from: 0,\n          to: 0,\n        },\n      },\n    };\n    targetDay.exercises.push(newExercise);\n    add.push({ dayData, fullName, index: targetDay.exercises.length });\n  }\n\n  return EditProgramUiHelpers_validate(\n    true,\n    planner,\n    new ProgramToPlanner(evaluatedProgram, settings).convertToPlanner({ add }),\n    settings\n  );\n}\n\nexport function EditProgramUiHelpers_changeCurrentInstancePosition(\n  planner: IPlannerProgram,\n  dayData: Required<IDayData>,\n  fullName: string,\n  fromIndex: number,\n  toIndex: number,\n  settings: ISettings\n): IPlannerProgram {\n  const evaluatedProgram = ObjectUtils_clone(\n    Program_evaluateCachedPlanner({ ...Program_create(\"Temp\"), planner }, settings)\n  );\n  const weeks = EditProgramUiHelpers_getWeeks2(evaluatedProgram, dayData, fullName);\n  const reorder = weeks.map((week) => ({ dayData: { ...dayData, week }, fromIndex, toIndex }));\n  return new ProgramToPlanner(evaluatedProgram, settings).convertToPlanner({ reorder });\n}\n\n// Matches by key (the exercise's identity), not fullName. They diverge only for exercise variations:\n// the key ignores the `!` current marker, so two instances of the same ladder can share a key while their\n// fullNames differ. Matching all same-key instances is what \"change all instances\" means — a fullName match\n// would silently skip the divergent ones (splitting a ladder on add/remove/reorder). For single-name\n// exercises the two are equivalent, since the name can't diverge across instances.\nexport function EditProgramUiHelpers_changeAllInstances(\n  planner: IPlannerProgram,\n  key: string,\n  settings: ISettings,\n  shouldValidate: boolean,\n  cb: (exercise: IPlannerProgramExercise) => void\n): IPlannerProgram {\n  const evaluatedProgram = ObjectUtils_clone(\n    Program_evaluateCachedPlanner({ ...Program_create(\"Temp\"), planner }, settings)\n  );\n  PP_iterate2(evaluatedProgram.weeks, (e) => {\n    if (e.key === key) {\n      cb(e);\n    }\n  });\n  return EditProgramUiHelpers_validate(\n    shouldValidate,\n    planner,\n    new ProgramToPlanner(evaluatedProgram, settings).convertToPlanner(),\n    settings\n  );\n}\n\nexport function EditProgramUiHelpers_getChangedKeys(\n  oldPlanner: IPlannerProgram,\n  newPlanner: IPlannerProgram,\n  settings: ISettings\n): Partial<Record<string, string>> {\n  const { evaluatedWeeks: oldEvaluatedWeeks } = PlannerProgram_evaluate(oldPlanner, settings);\n  const { evaluatedWeeks: newEvaluatedWeeks } = PlannerProgram_evaluate(newPlanner, settings);\n  const changedKeys: Partial<Record<string, string>> = {};\n  for (let weekIndex = 0; weekIndex < oldEvaluatedWeeks.length; weekIndex++) {\n    const oldWeek = oldEvaluatedWeeks[weekIndex];\n    const newWeek = newEvaluatedWeeks[weekIndex];\n    if (oldWeek && newWeek) {\n      for (let dayInWeekIndex = 0; dayInWeekIndex < oldWeek.length; dayInWeekIndex++) {\n        const oldDay = oldWeek[dayInWeekIndex];\n        const newDay = newWeek[dayInWeekIndex];\n        if (oldDay && newDay) {\n          if (oldDay.success && newDay.success) {\n            // A key that survives the edit is its own match wherever it moved to, so it's paired\n            // first and only what's left over is paired by position. Pairing everything by array\n            // index instead reports a rename for every exercise a reorder shifted - and the day's\n            // order does shift on its own: `used: none` and repeat-materialized exercises sort\n            // ahead of local ones, so turning an exercise into a template moves it.\n            const newKeys = new Set(newDay.data.map((e) => e.key));\n            const oldKeys = new Set(oldDay.data.map((e) => e.key));\n            const removed = oldDay.data.filter((e) => !newKeys.has(e.key));\n            const added = newDay.data.filter((e) => !oldKeys.has(e.key));\n            for (let i = 0; i < removed.length; i++) {\n              const newExercise = added[i];\n              if (newExercise != null) {\n                changedKeys[removed[i].key] = newExercise.key;\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n  return changedKeys;\n}\n","import { JSX, ReactNode, memo, useState } from \"react\";\nimport { View, Image } from \"react-native\";\nimport { Text } from \"./primitives/text\";\nimport { IconSpinner } from \"./icons/iconSpinner\";\nimport { IExerciseType, ISettings } from \"../types\";\nimport { IconDefaultExercise } from \"./icons/iconDefaultExercise\";\nimport {\n  ExerciseImageUtils_url,\n  ExerciseImageUtils_exists,\n  ExerciseImageUtils_existsCustom,\n} from \"../models/exerciseImage\";\nimport { Exercise_get, Exercise_nameWithEquipment } from \"../models/exercise\";\nimport { HostConfig_resolveUrl } from \"../utils/hostConfig\";\nimport { ImageCache_initialUri, ImageCache_markMissing, ImageCache_download } from \"../utils/imageCache\";\nimport { useRemScale } from \"../utils/useRem\";\n\ninterface IProps {\n  exerciseType: IExerciseType;\n  size: \"large\" | \"small\";\n  useTextForCustomExercise?: boolean;\n  useBorderForCustomExercise?: boolean;\n  suppressCustom?: boolean;\n  settings?: ISettings;\n  className?: string;\n  customClassName?: string;\n  width?: number;\n}\n\nfunction areExerciseImagePropsEqual(prev: IProps, next: IProps): boolean {\n  return (\n    prev.size === next.size &&\n    prev.useTextForCustomExercise === next.useTextForCustomExercise &&\n    prev.useBorderForCustomExercise === next.useBorderForCustomExercise &&\n    prev.suppressCustom === next.suppressCustom &&\n    prev.className === next.className &&\n    prev.customClassName === next.customClassName &&\n    prev.width === next.width &&\n    prev.exerciseType.id === next.exerciseType.id &&\n    prev.exerciseType.equipment === next.exerciseType.equipment &&\n    prev.settings?.exercises === next.settings?.exercises\n  );\n}\n\nexport const ExerciseImage = memo(function ExerciseImage(props: IProps): JSX.Element | null {\n  const { size } = props;\n  const remScale = useRemScale();\n  const exercise = Exercise_get(props.exerciseType, props.settings?.exercises || {});\n  const exerciseType = {\n    id: props.exerciseType.id,\n    equipment: props.exerciseType.equipment || exercise.defaultEquipment,\n  };\n\n  const rawSrc = ExerciseImageUtils_url(exerciseType, size, props.settings);\n  const remoteSrc = rawSrc ? HostConfig_resolveUrl(rawSrc) : undefined;\n  const initialUri = remoteSrc ? ImageCache_initialUri(remoteSrc) : undefined;\n\n  const [prevRemote, setPrevRemote] = useState<string | undefined>(remoteSrc);\n  const [isLoading, setIsLoading] = useState<boolean>(true);\n  const [isError, setIsError] = useState<boolean>(false);\n  const [aspectRatio, setAspectRatio] = useState<number>(4 / 3);\n  const [src, setSrc] = useState<string | undefined>(initialUri);\n  const [usingRemote, setUsingRemote] = useState<boolean>(initialUri === remoteSrc);\n\n  if (prevRemote !== remoteSrc) {\n    setPrevRemote(remoteSrc);\n    setSrc(initialUri);\n    setUsingRemote(initialUri === remoteSrc);\n    setIsLoading(true);\n    setIsError(false);\n    setAspectRatio(4 / 3);\n  }\n\n  const doesExist =\n    ExerciseImageUtils_exists(exerciseType, size) ||\n    ExerciseImageUtils_existsCustom(exerciseType, size, !!props.suppressCustom, props.settings);\n\n  const onCachedError = (): void => {\n    if (!usingRemote && remoteSrc) {\n      ImageCache_markMissing(remoteSrc);\n      setUsingRemote(true);\n      setSrc(remoteSrc);\n    } else {\n      setIsError(true);\n    }\n  };\n\n  const onCachedLoad = (): void => {\n    setIsLoading(false);\n    if (usingRemote && remoteSrc) {\n      ImageCache_download(remoteSrc);\n    }\n  };\n\n  if (size === \"small\") {\n    const w = Math.round((props.width || 32) * remScale);\n    const imgStyle = { width: w, height: Math.round(w * 1.5) };\n    return (\n      <>\n        {!isError && doesExist && (\n          <Image\n            data-testid=\"exercise-image-small\"\n            testID=\"exercise-image-small\"\n            className={props.className}\n            source={{ uri: src }}\n            style={imgStyle}\n            onLoad={onCachedLoad}\n            onError={onCachedError}\n            accessibilityLabel={Exercise_nameWithEquipment(exercise, props.settings)}\n          />\n        )}\n        {(isError || !doesExist) &&\n          (props.useTextForCustomExercise ? (\n            <View\n              className={`items-start justify-center overflow-hidden bg-background-image ${props.className ?? \"\"} ${props.customClassName ?? \"\"}`}\n              style={imgStyle}\n            >\n              <Text\n                className=\"text-xs text-text-secondarysubtle\"\n                style={{ fontSize: 11 * remScale, lineHeight: 13 * remScale }}\n              >\n                {Exercise_nameWithEquipment(exercise, props.settings)}\n              </Text>\n            </View>\n          ) : (\n            <View className={`items-center justify-center ${props.className ?? \"\"}`} style={imgStyle}>\n              <IconDefaultExercise size={w} />\n            </View>\n          ))}\n      </>\n    );\n  } else {\n    return doesExist ? (\n      <>\n        <Image\n          data-testid=\"exercise-image-large\"\n          testID=\"exercise-image-large\"\n          className={props.className}\n          source={{ uri: src }}\n          resizeMode=\"contain\"\n          style={{ width: \"100%\", aspectRatio }}\n          onLoad={(e) => {\n            onCachedLoad();\n            const source = (e?.nativeEvent as { source?: { width?: number; height?: number } } | undefined)?.source;\n            if (source?.width && source?.height) {\n              setAspectRatio(source.width / source.height);\n            }\n          }}\n          onError={onCachedError}\n          accessibilityLabel={Exercise_nameWithEquipment(exercise, props.settings)}\n        />\n        <ExerciseImageAuxiliary size={props.size} isError={isError} isLoading={isLoading} />\n      </>\n    ) : (\n      <ExerciseNoImage size={props.size}>\n        <Text>No exercise image</Text>\n      </ExerciseNoImage>\n    );\n  }\n}, areExerciseImagePropsEqual);\n\nfunction ExerciseImageAuxiliary(props: {\n  size: \"large\" | \"small\";\n  isError: boolean;\n  isLoading: boolean;\n}): JSX.Element | null {\n  if (props.isError) {\n    return (\n      <ExerciseNoImage size={props.size}>\n        <Text className=\"text-xs leading-normal text-center text-red-700\">Error fetching the exercise image</Text>\n      </ExerciseNoImage>\n    );\n  } else if (props.isLoading) {\n    return (\n      <ExerciseNoImage size={props.size}>\n        <View className=\"items-center w-full\">\n          <IconSpinner width={20} height={20} />\n        </View>\n      </ExerciseNoImage>\n    );\n  } else {\n    return null;\n  }\n}\n\ninterface INoImageProps {\n  children: ReactNode;\n  size: \"large\" | \"small\";\n}\n\nfunction ExerciseNoImage(props: INoImageProps): JSX.Element | null {\n  return (\n    <View className=\"items-center justify-center px-4 py-10 my-4 border border-dotted rounded-lg border-border-neutral bg-background-neutral\">\n      {props.children}\n    </View>\n  );\n}\n","import { JSX } from \"react\";\nimport { View, Pressable } from \"react-native\";\nimport { Text } from \"./primitives/text\";\nimport { MenuItemEditable } from \"./menuItemEditable\";\nimport { IExercise, Exercise_onerm } from \"../models/exercise\";\nimport { IExerciseDataValue, ISettings } from \"../types\";\nimport { IconCalculator } from \"./icons/iconCalculator\";\nimport { useModal } from \"../navigation/ModalStateContext\";\n\ninterface IExerciseRMProps {\n  name: string;\n  rmKey: keyof IExerciseDataValue;\n  exercise: IExercise;\n  settings: ISettings;\n  onEditVariable: (value: number) => void;\n  onInput?: (v: string) => void;\n  displayValue?: string;\n}\n\nexport function ExerciseRM(props: IExerciseRMProps): JSX.Element {\n  const rm = Exercise_onerm(props.exercise, props.settings);\n  const displayValue = props.displayValue ?? `${rm.value}`;\n\n  const openCalculator = useModal(\"repMaxCalculatorModal\", (weightValue) => {\n    if (weightValue != null) {\n      props.onEditVariable(weightValue);\n    }\n  });\n\n  return (\n    <View\n      data-testid=\"exercise-stats-1rm-set\"\n      testID=\"exercise-stats-1rm-set\"\n      className=\"px-4 py-1 mt-2 font-bold bg-background-cardpurple rounded-2xl\"\n    >\n      <MenuItemEditable\n        type=\"number\"\n        name={props.name}\n        isBorderless={true}\n        onChange={(v) => {\n          const value = v ? parseFloat(v) : undefined;\n          if (value && !isNaN(value)) {\n            props.onEditVariable(value);\n          }\n        }}\n        onInput={props.onInput}\n        value={displayValue}\n        after={\n          <>\n            <Text className=\"ml-1 mr-2 font-normal text-text-secondary\">{rm.unit}</Text>\n            <Pressable\n              className=\"px-2\"\n              data-testid=\"onerm-calculator\"\n              testID=\"onerm-calculator\"\n              style={{ marginRight: -4 }}\n              onPress={() => {\n                openCalculator({ unit: props.settings.units });\n              }}\n            >\n              <IconCalculator size={16} />\n            </Pressable>\n          </>\n        }\n      />\n      <View>\n        <Text className=\"text-xs italic font-normal text-right\">\n          Available in Liftoscript as <Text className=\"font-bold\">{props.rmKey}</Text> variable\n        </Text>\n      </View>\n    </View>\n  );\n}\n","import { JSX, useEffect, useRef, useState } from \"react\";\nimport { IExerciseType, ISettings } from \"../types\";\nimport { ExerciseImage } from \"./exerciseImage\";\nimport { Exercise_targetMusclesGroups, Exercise_synergistMusclesGroups } from \"../models/exercise\";\nimport { Muscle_getMuscleGroupName } from \"../models/muscle\";\n\nexport function ExerciseTooltip(props: {\n  exerciseType: IExerciseType;\n  settings: ISettings;\n  name: string;\n}): JSX.Element {\n  const [show, setShow] = useState(false);\n  const [pinned, setPinned] = useState(false);\n  const [nudge, setNudge] = useState(0);\n  const wrapperRef = useRef<HTMLSpanElement>(null);\n  const tooltipRef = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    function handleOutsideClick(e: Event): void {\n      if (wrapperRef.current && !wrapperRef.current.contains(e.target as Node)) {\n        setPinned(false);\n        setShow(false);\n      }\n    }\n    document.addEventListener(\"mousedown\", handleOutsideClick, true);\n    document.addEventListener(\"touchstart\", handleOutsideClick, true);\n    return () => {\n      document.removeEventListener(\"mousedown\", handleOutsideClick, true);\n      document.removeEventListener(\"touchstart\", handleOutsideClick, true);\n    };\n  }, []);\n\n  useEffect(() => {\n    if (!show || !tooltipRef.current) {\n      setNudge(0);\n      return;\n    }\n    const rect = tooltipRef.current.getBoundingClientRect();\n    const viewportWidth = document.documentElement.clientWidth;\n    const padding = 8;\n    if (rect.left < padding) {\n      setNudge(padding - rect.left);\n    } else if (rect.right > viewportWidth - padding) {\n      setNudge(viewportWidth - padding - rect.right);\n    } else {\n      setNudge(0);\n    }\n  }, [show]);\n\n  const targetMuscles = Exercise_targetMusclesGroups(props.exerciseType, props.settings);\n  const synergistMuscles = Exercise_synergistMusclesGroups(props.exerciseType, props.settings);\n\n  return (\n    <span\n      ref={wrapperRef}\n      className=\"relative\"\n      onMouseEnter={() => {\n        if (!pinned) {\n          setShow(true);\n        }\n      }}\n      onMouseLeave={() => {\n        if (!pinned) {\n          setShow(false);\n        }\n      }}\n      onClick={(e) => {\n        e.stopPropagation();\n        if (pinned) {\n          setPinned(false);\n          setShow(false);\n        } else {\n          setPinned(true);\n          setShow(true);\n        }\n      }}\n    >\n      <strong className=\"cursor-pointer md-exercise-name\" style={{ borderBottom: \"1px dashed #999\" }}>\n        {props.name}\n      </strong>\n      {show && (\n        <div\n          ref={tooltipRef}\n          className=\"absolute z-20 px-3 py-2 text-xs bg-white border rounded-lg shadow-lg md-exercise-tooltip border-grayv2-400\"\n          style={{\n            bottom: \"calc(100% + 6px)\",\n            left: \"50%\",\n            transform: `translateX(calc(-50% + ${nudge}px))`,\n            minWidth: \"14rem\",\n            maxWidth: \"22rem\",\n          }}\n        >\n          <div className=\"flex items-start gap-2 mb-1\">\n            <div className=\"w-scaled-12\">\n              <ExerciseImage\n                width={48}\n                settings={props.settings}\n                className=\"inline-block w-scaled-12\"\n                exerciseType={props.exerciseType}\n                size=\"small\"\n              />\n            </div>\n            <div className=\"flex-1\">\n              <div className=\"text-sm font-semibold\">{props.name}</div>\n              {targetMuscles.length > 0 && (\n                <div>\n                  <span className=\"font-semibold text-text-secondary\">Target: </span>\n                  <span className=\"font-normal\">\n                    {targetMuscles.map((m) => Muscle_getMuscleGroupName(m, props.settings)).join(\", \")}\n                  </span>\n                </div>\n              )}\n              {synergistMuscles.length > 0 && (\n                <div>\n                  <span className=\"font-semibold text-text-secondary\">Synergist: </span>\n                  <span className=\"font-normal\">\n                    {synergistMuscles.map((m) => Muscle_getMuscleGroupName(m, props.settings)).join(\", \")}\n                  </span>\n                </div>\n              )}\n            </div>\n          </div>\n          <div\n            style={{\n              position: \"absolute\",\n              bottom: \"-5px\",\n              left: `calc(50% - ${nudge}px)`,\n              transform: \"translateX(-50%) rotate(45deg)\",\n              width: \"10px\",\n              height: \"10px\",\n              background: \"white\",\n              borderRight: \"1px solid #d1d5db\",\n              borderBottom: \"1px solid #d1d5db\",\n            }}\n          />\n        </div>\n      )}\n    </span>\n  );\n}\n","import type { JSX } from \"react\";\nimport { IconInstagramFlat } from \"./icons/iconInstagramFlat\";\nimport { IconYoutube } from \"./icons/iconYoutube\";\nimport { IconReddit } from \"./icons/iconReddit\";\nimport { IconDiscord } from \"./icons/iconDiscord\";\nimport { Tailwind_semantic } from \"../utils/tailwindConfig\";\n\ninterface IProps {\n  maxWidth?: number;\n}\n\nconst footerLinks: [string, string][] = [\n  [\"Roadmap\", \"https://github.com/astashov/liftosaur/discussions\"],\n  [\"Docs\", \"/doc\"],\n  [\"Web Editor\", \"/planner\"],\n  [\"1RM Calculator\", \"/one-rep-max-calculator\"],\n  [\"Your Programs\", \"/user/programs\"],\n  [\"Blog\", \"/blog\"],\n  [\"Exercises\", \"/exercises\"],\n  [\"Terms & Conditions\", \"/terms.html\"],\n  [\"Privacy\", \"/privacy.html\"],\n  [\"Affiliate Program\", \"/affiliates\"],\n];\n\nexport function FooterPage(props: IProps): JSX.Element {\n  const maxWidth = props.maxWidth != null ? `${props.maxWidth}px` : \"800px\";\n  return (\n    <footer className=\"mt-8 \">\n      <div style={{ backgroundColor: \"#28204B\" }}>\n        <div className=\"px-6 mx-auto\" style={{ maxWidth }}>\n          <div className=\"flex flex-col md:flex-row md:items-center md:gap-10\">\n            <div className=\"hidden pt-8 md:block shrink-0\">\n              <img src=\"/images/logo.svg\" alt=\"\" style={{ height: \"200px\" }} />\n            </div>\n\n            <div className=\"shrink-0\">\n              <div className=\"pt-8 text-3xl font-bold text-text-alwayswhite md:pt-0\">Liftosaur</div>\n              <div className=\"flex items-center gap-4 mt-5\">\n                <span className=\"text-sm text-text-alwayswhite\">Follow us:</span>\n                <a\n                  href=\"https://www.instagram.com/liftosaurapp\"\n                  target=\"_blank\"\n                  className=\"opacity-80 hover:opacity-100\"\n                >\n                  <IconInstagramFlat size={28} color={Tailwind_semantic().text.alwayswhite} />\n                </a>\n                <a href=\"https://www.youtube.com/@Liftosaur\" target=\"_blank\" className=\"opacity-80 hover:opacity-100\">\n                  <IconYoutube size={28} color={Tailwind_semantic().text.alwayswhite} secondaryColor=\"#28204B\" />\n                </a>\n                <a href=\"https://www.reddit.com/r/liftosaur\" target=\"_blank\" className=\"opacity-80 hover:opacity-100\">\n                  <IconReddit size={28} color={Tailwind_semantic().text.alwayswhite} secondaryColor=\"#28204B\" />\n                </a>\n                <a href=\"https://discord.gg/AAh3cvdBRs\" target=\"_blank\" className=\"opacity-80 hover:opacity-100\">\n                  <IconDiscord size={28} color={Tailwind_semantic().text.alwayswhite} />\n                </a>\n              </div>\n              <div className=\"mt-4 text-sm text-text-alwayswhite\">\n                Questions?{\" \"}\n                <a href=\"mailto:info@liftosaur.com\" className=\"text-purple-300 underline\">\n                  info@liftosaur.com\n                </a>\n              </div>\n            </div>\n\n            <div className=\"flex-1 mt-8 md:mt-0 md:flex md:justify-end\">\n              <div className=\"footer-links-grid gap-x-10 gap-y-3\">\n                {footerLinks.map(([text, link]) => (\n                  <a\n                    key={text}\n                    className=\"text-sm text-gray-300 no-underline hover:text-text-alwayswhite\"\n                    href={link}\n                    target={link.startsWith(\"http\") ? \"_blank\" : undefined}\n                  >\n                    {text}\n                  </a>\n                ))}\n                <a\n                  className=\"text-sm text-gray-300 no-underline cursor-pointer hover:text-text-alwayswhite\"\n                  href=\"#privacy-settings\"\n                  onClick={(e) => {\n                    e.preventDefault();\n                    (window as unknown as { lftConsent?: { open: () => void } }).lftConsent?.open();\n                  }}\n                >\n                  Privacy Settings\n                </a>\n              </div>\n            </div>\n          </div>\n\n          <div className=\"mt-8 md:hidden\">\n            <img src=\"/images/logo.svg\" alt=\"\" style={{ height: \"200px\" }} />\n          </div>\n        </div>\n      </div>\n    </footer>\n  );\n}\n","import { JSX, Fragment, ReactNode, useState } from \"react\";\nimport { View, Pressable, LayoutAnimation, Platform, UIManager } from \"react-native\";\nimport { Text } from \"./primitives/text\";\nimport { StringUtils_dashcase } from \"../utils/string\";\nimport { IconArrowDown2 } from \"./icons/iconArrowDown2\";\nimport { IconArrowUp } from \"./icons/iconArrowUp\";\nimport { IconHelp } from \"./icons/iconHelp\";\n\ninterface IProps {\n  name: string;\n  help?: JSX.Element;\n  size?: \"small\" | \"large\";\n  children?: ReactNode;\n  headerClassName?: string;\n  nameAddOn?: JSX.Element;\n  rightAddOn?: JSX.Element;\n  leftExpandIcon?: boolean;\n  isExpanded?: boolean;\n  expandOnIconClick?: boolean;\n  topPadding?: boolean;\n  highlighted?: boolean;\n  onToggle?: () => void;\n}\n\nexport function GroupHeader(props: IProps): JSX.Element {\n  const { name } = props;\n  const isControlled = props.onToggle != null;\n  const [internalExpanded, setInternalExpanded] = useState<boolean>(!!props.isExpanded);\n  const isExpanded = isControlled ? !!props.isExpanded : internalExpanded;\n  const hasToggle = isControlled || !!props.children;\n  const [isHelpShown, setIsHelpShown] = useState<boolean>(false);\n  const size = props.size || \"small\";\n  const testId = `group-header-${StringUtils_dashcase(name)}`;\n\n  function onClick(): void {\n    if (!hasToggle) {\n      return;\n    }\n    if (Platform.OS === \"android\" && UIManager.setLayoutAnimationEnabledExperimental) {\n      UIManager.setLayoutAnimationEnabledExperimental(true);\n    }\n    LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\n    if (isControlled) {\n      props.onToggle!();\n    } else {\n      setInternalExpanded(!isExpanded);\n    }\n  }\n\n  const wrapperClassName = `flex-row items-center pb-1 ${props.topPadding ? \"mt-6 pt-4\" : \"\"} ${props.headerClassName || \"\"}`;\n  const inner = (\n    <>\n      {hasToggle && props.leftExpandIcon && (\n        <Pressable\n          className=\"flex items-center justify-center mr-2\"\n          onPress={props.expandOnIconClick ? onClick : undefined}\n        >\n          {isExpanded ? <IconArrowUp /> : <IconArrowDown2 />}\n        </Pressable>\n      )}\n      <View className=\"flex-row items-center flex-1\">\n        <Text\n          className={`${size === \"small\" ? \"text-xs\" : \"text-base font-bold\"} ${\n            props.highlighted ? \"text-text-purple\" : \"text-text-secondary\"\n          }`}\n        >\n          {name}\n        </Text>\n        {props.nameAddOn}\n      </View>\n      <View className=\"flex-row items-center justify-center\">\n        {props.rightAddOn}\n        {props.help && (\n          <Pressable style={{ marginRight: -8 }} className=\"px-2\" onPress={() => setIsHelpShown(!isHelpShown)}>\n            <IconHelp size={20} color=\"#607284\" />\n          </Pressable>\n        )}\n        {hasToggle && !props.leftExpandIcon ? isExpanded ? <IconArrowUp /> : <IconArrowDown2 /> : null}\n      </View>\n    </>\n  );\n\n  return (\n    <Fragment>\n      {hasToggle ? (\n        <Pressable\n          testID={testId}\n          data-testid={testId}\n          onPress={!props.expandOnIconClick ? onClick : undefined}\n          className={wrapperClassName}\n        >\n          {inner}\n        </Pressable>\n      ) : (\n        <View testID={testId} data-testid={testId} className={wrapperClassName}>\n          {inner}\n        </View>\n      )}\n      {isHelpShown && props.help}\n      {isExpanded && props.children}\n    </Fragment>\n  );\n}\n","import { JSX, memo, useMemo } from \"react\";\nimport { View } from \"react-native\";\nimport { Text } from \"./primitives/text\";\nimport { FastText } from \"./primitives/fastText\";\nimport { IDisplaySet, Reps_group, Reps_setToDisplaySet } from \"../models/set\";\nimport { ISet, IUnit } from \"../types\";\nimport { CollectionUtils_compact } from \"../utils/collection\";\nimport { ObjectUtils_keys } from \"../utils/object\";\nimport { IHistoryEntryPersonalRecords } from \"../models/history\";\nimport { StyledText, StyledText_remToPx } from \"../utils/styledText\";\nimport { useRem } from \"../utils/useRem\";\nimport { Tailwind_semantic, Tailwind_colors } from \"../utils/tailwindConfig\";\nimport { TimeUtils_formatMMSS } from \"../utils/time\";\n\nfunction isSameDisplaySet(a: IDisplaySet, b: IDisplaySet): boolean {\n  return (\n    a.reps === b.reps &&\n    a.weight === b.weight &&\n    a.rpe === b.rpe &&\n    a.askWeight === b.askWeight &&\n    a.timer === b.timer &&\n    a.setTimer === b.setTimer &&\n    a.isOverflowSetTimer === b.isOverflowSetTimer &&\n    a.auto === b.auto\n  );\n}\n\ninterface IHistoryRecordSetsProps {\n  showPrDetails?: boolean;\n  sets: ISet[];\n  isNext: boolean;\n  units: IUnit;\n  prs?: IHistoryEntryPersonalRecords;\n}\n\nexport const HistoryRecordSetsView = memo(function HistoryRecordSetsView(props: IHistoryRecordSetsProps): JSX.Element {\n  const { sets, isNext, units } = props;\n  const displayGroups = useMemo(() => {\n    const groups = Reps_group(sets, isNext);\n    return groups.map((g) => g.map((set) => Reps_setToDisplaySet(set, isNext, units)));\n  }, [sets, isNext, units]);\n  return (\n    <View className=\"text-sm\" style={{ alignItems: \"flex-end\" }}>\n      {displayGroups.map((g, i) => (\n        <HistoryRecordSet\n          key={i}\n          sets={g}\n          prs={props.prs}\n          isNext={props.isNext}\n          showPrDetails={props.showPrDetails}\n          units={props.units}\n        />\n      ))}\n    </View>\n  );\n});\n\ninterface IHistoryRecordSet2Props {\n  prs?: IHistoryEntryPersonalRecords;\n  units: IUnit;\n  showPrDetails?: boolean;\n  sets: IDisplaySet[];\n  isNext: boolean;\n}\n\nexport const HistoryRecordSet = memo(function HistoryRecordSet(props: IHistoryRecordSet2Props): JSX.Element {\n  const { isNext } = props;\n  const group = props.sets;\n  const set = group[0];\n  if (set == null) {\n    return <View />;\n  }\n  const prTypes = CollectionUtils_compact(\n    ObjectUtils_keys(props.prs || {}).map<\"e1RM\" | \"Weight\" | undefined>((k) => {\n      const prset = (props.prs || {})[k];\n      if (!prset) {\n        return undefined;\n      }\n      const displayPrSet = Reps_setToDisplaySet(prset, isNext, props.units);\n      return isSameDisplaySet(set, displayPrSet)\n        ? k === \"max1RMSet\"\n          ? \"e1RM\"\n          : k === \"maxWeightSet\"\n            ? \"Weight\"\n            : undefined\n        : undefined;\n    })\n  );\n  const isPr = prTypes.length > 0;\n  const rem = useRem();\n  const sem = Tailwind_semantic();\n  const primary = sem.text.primary;\n  const secondary = sem.text.secondary;\n  const purple = sem.text.purple;\n  // `text-orange-400` (in-range reps) has no semantic/stock entry; reuse the project's\n  // warning yellow as the closest design-system color.\n  const repsColor = isNext\n    ? secondary\n    : set.isCompleted\n      ? sem.text.success\n      : set.isInRange\n        ? Tailwind_colors().yellow[600]\n        : sem.text.error;\n  const rpeColor = isNext ? secondary : set.isRpeFailed ? sem.text.error : sem.text.success;\n  const timerColor = isNext ? secondary : purple;\n  const autoColor = isNext ? secondary : sem.syntax.auto;\n  const dataCy = isNext\n    ? \"history-entry-sets-next\"\n    : set.isCompleted\n      ? \"history-entry-sets-completed\"\n      : set.isInRange\n        ? \"history-entry-sets-in-range\"\n        : \"history-entry-sets-incompleted\";\n\n  const sm = StyledText_remToPx(\"sm\", rem);\n  const xs = StyledText_remToPx(\"xs\", rem);\n  const builder = new StyledText();\n  if (group.length > 1) {\n    builder.add(`${group.length}`, { fontWeight: \"600\", color: purple }, \"history-entry-sets\");\n    builder.add(\" \\u00D7 \", { color: secondary });\n  }\n  builder.add(`${set.reps}`, { fontWeight: \"600\", color: repsColor }, \"history-entry-reps\");\n  if (set.weight) {\n    builder.add(\" \\u00D7 \", { color: secondary });\n    builder.add(`${set.weight}`, { fontWeight: \"600\" }, \"history-entry-weight\");\n    builder.add(set.askWeight ? \"+\" : \"\");\n    if (set.unit != null) {\n      builder.add(`${set.unit}`, { color: secondary }, \"history-entry-unit\");\n    }\n  }\n  if (set.rpe != null) {\n    builder.add(\" @\", { fontSize: xs, color: rpeColor });\n    builder.add(`${set.rpe}`, { color: rpeColor }, \"history-entry-rpe\");\n  }\n  if (set.setTimer != null) {\n    builder.add(\" \");\n    if (isNext) {\n      builder.add(`${set.setTimer}`, { fontWeight: \"600\", color: timerColor }, \"history-entry-set-timer\");\n      builder.add(\"s\", { fontSize: xs, color: timerColor });\n      builder.add(`${set.isOverflowSetTimer ? \"+\" : \"\"}|`, { fontWeight: \"600\", color: timerColor });\n      if (set.timer != null) {\n        builder.add(`${set.timer}`, { fontWeight: \"600\", color: timerColor }, \"history-entry-timer\");\n        builder.add(\"s\", { fontSize: xs, color: timerColor });\n      } else {\n        builder.add(\"?\", { fontWeight: \"600\", color: timerColor });\n      }\n    } else if (set.setTimer < 60) {\n      builder.add(`${set.setTimer}`, { fontWeight: \"600\", color: timerColor }, \"history-entry-set-timer\");\n      builder.add(\"s\", { fontSize: xs, color: timerColor });\n    } else {\n      builder.add(\n        TimeUtils_formatMMSS(set.setTimer * 1000),\n        { fontWeight: \"600\", color: timerColor },\n        \"history-entry-set-timer\"\n      );\n    }\n  } else if (set.timer != null) {\n    builder.add(\" \");\n    builder.add(`${set.timer}`, { color: timerColor }, \"history-entry-timer\");\n    builder.add(\"s\", { fontSize: xs, color: timerColor });\n  }\n  if (set.auto) {\n    builder.add(\" auto\", { color: autoColor }, \"history-entry-auto\");\n  }\n  const built = builder.build();\n\n  return (\n    <View className=\"flex-row items-center\" data-testid={dataCy} testID={dataCy}>\n      {props.showPrDetails && isPr && (\n        <View className=\"flex-row items-center mr-2\">\n          <Text className=\"text-xs font-semibold leading-scaled-6 text-yellow-600\">{prTypes.join(\", \")} </Text>\n          <Text className=\"text-sm leading-scaled-6\">{\"\\u{1F3C6}\"}</Text>\n        </View>\n      )}\n      <FastText\n        text={built.text}\n        fragments={built.fragments}\n        color={primary}\n        fontSize={sm}\n        paddingHorizontal={rem / 4}\n        backgroundColor={isPr ? sem.color.yellow150 : undefined}\n      />\n    </View>\n  );\n});\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\n\nexport function IconApple(props: { color?: string; size?: number }): JSX.Element {\n  const color = props.color || \"white\";\n  const size = props.size || 20;\n  const height = size * 1.2;\n  return (\n    <IconSvg width={size} height={height} viewBox=\"0 0 20 24\" fill=\"none\">\n      <Path\n        d=\"M19.1266 18.424C18.7788 19.2275 18.3671 19.9672 17.8901 20.6472C17.2398 21.5743 16.7074 22.216 16.2971 22.5724C15.6611 23.1573 14.9797 23.4568 14.2499 23.4739C13.726 23.4739 13.0943 23.3248 12.3589 23.0224C11.621 22.7214 10.943 22.5724 10.323 22.5724C9.67278 22.5724 8.97542 22.7214 8.2295 23.0224C7.48245 23.3248 6.88063 23.4824 6.42051 23.498C5.72073 23.5278 5.02323 23.2197 4.327 22.5724C3.88263 22.1848 3.32682 21.5204 2.66097 20.5791C1.94657 19.5739 1.35924 18.4084 0.899113 17.0795C0.406331 15.6442 0.159302 14.2543 0.159302 12.9087C0.159302 11.3673 0.492366 10.0379 1.15949 8.92385C1.68379 8.029 2.38129 7.32312 3.25427 6.80493C4.12725 6.28674 5.0705 6.02267 6.08631 6.00578C6.64212 6.00578 7.371 6.1777 8.27678 6.51559C9.18 6.85462 9.75995 7.02655 10.0142 7.02655C10.2043 7.02655 10.8486 6.82552 11.9408 6.42473C12.9736 6.05305 13.8453 5.89916 14.5594 5.95978C16.4945 6.11595 17.9483 6.87876 18.9151 8.25303C17.1845 9.30163 16.3284 10.7703 16.3454 12.6544C16.361 14.122 16.8934 15.3432 17.9397 16.3129C18.4139 16.7629 18.9435 17.1107 19.5327 17.3578C19.4049 17.7283 19.27 18.0832 19.1266 18.424ZM14.6886 0.960131C14.6886 2.11039 14.2684 3.18439 13.4307 4.17847C12.4199 5.36023 11.1973 6.04311 9.8714 5.93536C9.8545 5.79736 9.8447 5.65213 9.8447 5.49951C9.8447 4.39526 10.3254 3.21349 11.1791 2.24724C11.6053 1.75801 12.1473 1.35122 12.8047 1.02671C13.4606 0.707053 14.081 0.530273 14.6645 0.5C14.6815 0.653772 14.6886 0.807554 14.6886 0.960116V0.960131Z\"\n        fill={color}\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  style?: { [key: string]: string | number };\n  className?: string;\n  color?: string;\n  width?: number;\n  height?: number;\n}\n\nexport function IconArrowDown2(props: IProps): JSX.Element {\n  const color = props.color || Tailwind_semantic().icon.neutral;\n  return (\n    <IconSvg style={props.style} width={props.width || 13} height={props.height || 8} viewBox=\"0 0 13 8\" fill=\"none\">\n      <Path\n        d=\"M11.5 1.5L6.5 6.5L1.5 1.5\"\n        stroke={color}\n        strokeWidth={1.5}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  color?: string;\n  width?: number;\n  height?: number;\n  className?: string;\n}\n\nexport function IconArrowRight(props: IProps): JSX.Element {\n  const width = props.width || 7;\n  const height = props.height || 12;\n  const color = props.color || Tailwind_semantic().icon.neutral;\n  return (\n    <IconSvg width={width} height={height} viewBox=\"0 0 7 12\" fill=\"none\">\n      <Path d=\"M1 1L6 6L1 11\" stroke={color} strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  style?: { [key: string]: string | number };\n  className?: string;\n  color?: string;\n}\n\nexport function IconArrowUp(props: IProps): JSX.Element {\n  const color = props.color || Tailwind_semantic().icon.neutral;\n  return (\n    <IconSvg style={props.style} width={13} height={8} viewBox=\"0 0 13 8\" fill=\"none\">\n      <Path\n        d=\"M1.5 6.5L6.5 1.5L11.5 6.5\"\n        stroke={color}\n        strokeWidth={1.5}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  size?: number;\n  color?: string;\n  className?: string;\n}\n\nexport function IconBackspace(props: IProps): JSX.Element {\n  const size = props.size ?? 24;\n  const color = props.color ?? Tailwind_semantic().icon.neutral;\n  return (\n    <IconSvg width={size} height={size} className={props.className} viewBox=\"0 0 24 24\" fill={color}>\n      <Path d=\"M11.2485 9.67073C10.9684 9.39505 10.9684 8.94813 11.2485 8.67245C11.5287 8.39677 11.983 8.39677 12.2631 8.67245L14.6304 11.0018L16.9977 8.67245C17.2778 8.39677 17.732 8.39677 18.0122 8.67245C18.2924 8.94807 18.2924 9.39505 18.0122 9.67073L15.6449 12L18.0122 14.3293C18.2924 14.605 18.2924 15.0519 18.0122 15.3276C17.732 15.6032 17.2778 15.6032 16.9977 15.3276L14.6304 12.9983L12.2631 15.3276C11.983 15.6032 11.5287 15.6032 11.2486 15.3276C10.9684 15.0519 10.9684 14.605 11.2486 14.3293L13.6159 12.0001L11.2485 9.67073Z\" />\n      <Path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M8.28998 4.82698L1 12L8.28998 19.173C8.82814 19.7026 9.55802 20 10.3191 20H20.1304C21.7153 20 23 18.7359 23 17.1765V6.82353C23 5.26413 21.7153 4 20.1304 4H10.3191C9.55802 4 8.82814 4.29751 8.28998 4.82698ZM20.1304 18.7765H10.3191C9.88776 18.7765 9.47418 18.6079 9.1692 18.3078L2.75857 12L9.1692 5.69215C9.47418 5.39212 9.88776 5.22352 10.3191 5.22352H20.1304C21.0285 5.22352 21.7565 5.93986 21.7565 6.82353V17.1765C21.7565 18.0601 21.0285 18.7765 20.1304 18.7765Z\"\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  size?: number;\n  color?: string;\n  className?: string;\n}\n\nexport function IconBarbellSide(props: IProps): JSX.Element {\n  const size = props.size ?? 24;\n  const color = props.color ?? Tailwind_semantic().icon.neutral;\n  return (\n    <IconSvg width={size} height={size} className={props.className} viewBox=\"0 0 24 24\" fill={color}>\n      <Path d=\"M8.0513 11.5555H1V13.4444H8.0513V11.5555Z\" />\n      <Path d=\"M11.6219 4H13.8392V21H11.6219V4Z\" />\n      <Path d=\"M14.4773 5.75981H16.6945V19.2396H14.4773V5.75981Z\" />\n      <Path d=\"M17.3325 7.49846H19.5497V17.501H17.3325V7.49846Z\" />\n      <Path d=\"M20.1382 11.5767V13.4226H23V11.5767H20.1382Z\" />\n      <Path d=\"M8.76666 4H10.9839V21H8.76666V4Z\" />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  color?: string;\n  size?: number;\n  className?: string;\n}\n\nexport function IconCalculator(props: IProps): JSX.Element {\n  const color = props.color || Tailwind_semantic().icon.neutral;\n  const size = props.size ?? 20;\n  return (\n    <IconSvg className={props.className} width={size} height={Math.ceil(size * 1.3)} viewBox=\"0 0 40 52\" fill=\"none\">\n      <Path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M0 7.12593C0 3.19038 3.09635 0 6.91592 0H33.0841C36.9037 0 40 3.19038 40 7.12593V44.874C40 48.8096 36.9037 52 33.0841 52H6.91592C3.09635 52 0 48.8096 0 44.874V7.12593ZM6.91592 3.46667C4.95454 3.46667 3.36448 5.10497 3.36448 7.12593V44.874C3.36448 46.895 4.95454 48.5333 6.91592 48.5333H33.0841C35.0455 48.5333 36.6355 46.895 36.6355 44.874V7.12593C36.6355 5.10498 35.0455 3.46667 33.0841 3.46667H6.91592ZM10.4672 12.5185C10.4672 11.5612 11.2204 10.7851 12.1495 10.7851H27.8504C28.7796 10.7851 29.5326 11.5612 29.5326 12.5185C29.5326 13.4759 28.7796 14.2518 27.8504 14.2518H12.1495C11.2204 14.2518 10.4672 13.4759 10.4672 12.5185ZM10.4672 23.3037C10.4672 22.3464 11.2204 21.5704 12.1495 21.5704H12.1757C13.1048 21.5704 13.858 22.3464 13.858 23.3037C13.858 24.261 13.1048 25.0371 12.1757 25.0371H12.1495C11.2204 25.0371 10.4672 24.261 10.4672 23.3037ZM18.3177 23.3037C18.3177 22.3464 19.0709 21.5704 19.9999 21.5704H20.0262C20.9552 21.5704 21.7084 22.3464 21.7084 23.3037C21.7084 24.261 20.9552 25.0371 20.0262 25.0371H19.9999C19.0709 25.0371 18.3177 24.261 18.3177 23.3037ZM26.1682 23.3037C26.1682 22.3464 26.9214 21.5704 27.8504 21.5704H27.8766C28.8057 21.5704 29.5589 22.3464 29.5589 23.3037C29.5589 24.261 28.8057 25.0371 27.8766 25.0371H27.8504C26.9214 25.0371 26.1682 24.261 26.1682 23.3037ZM10.4672 31.3926C10.4672 30.4353 11.2204 29.6593 12.1495 29.6593H12.1757C13.1048 29.6593 13.858 30.4353 13.858 31.3926C13.858 32.3499 13.1048 33.126 12.1757 33.126H12.1495C11.2204 33.126 10.4672 32.3499 10.4672 31.3926ZM18.3177 31.3926C18.3177 30.4353 19.0709 29.6593 19.9999 29.6593H20.0262C20.9552 29.6593 21.7084 30.4353 21.7084 31.3926C21.7084 32.3499 20.9552 33.126 20.0262 33.126H19.9999C19.0709 33.126 18.3177 32.3499 18.3177 31.3926ZM27.8504 29.6593C28.7796 29.6593 29.5326 30.4353 29.5326 31.3926V39.4815C29.5326 40.4388 28.7796 41.2149 27.8504 41.2149C26.9214 41.2149 26.1682 40.4388 26.1682 39.4815V31.3926C26.1682 30.4353 26.9214 29.6593 27.8504 29.6593ZM10.4672 39.4815C10.4672 38.5241 11.2204 37.7482 12.1495 37.7482H12.1757C13.1048 37.7482 13.858 38.5241 13.858 39.4815C13.858 40.4388 13.1048 41.2149 12.1757 41.2149H12.1495C11.2204 41.2149 10.4672 40.4388 10.4672 39.4815ZM18.3177 39.4815C18.3177 38.5241 19.0709 37.7482 19.9999 37.7482H20.0262C20.9552 37.7482 21.7084 38.5241 21.7084 39.4815C21.7084 40.4388 20.9552 41.2149 20.0262 41.2149H19.9999C19.0709 41.2149 18.3177 40.4388 18.3177 39.4815Z\"\n        fill={color}\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  size?: number;\n  color?: string;\n  className?: string;\n}\n\nexport function IconCalendarSmall(props: IProps): JSX.Element {\n  const size = props.size ?? 14;\n  const color = props.color ?? Tailwind_semantic().icon.neutral;\n  return (\n    <IconSvg width={size} height={size} className={props.className} viewBox=\"0 0 14 14\" fill=\"none\">\n      <Path\n        d=\"M10.1529 3.2428H3.74706C2.78218 3.2428 2 4.07387 2 5.09905V11.2865C2 12.3117 2.78218 13.1428 3.74706 13.1428H10.1529C11.1178 13.1428 11.9 12.3117 11.9 11.2865V5.09905C11.9 4.07387 11.1178 3.2428 10.1529 3.2428Z\"\n        stroke={color}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n      <Path d=\"M2 6.54285H11.9\" stroke={color} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n      <Path d=\"M4.2002 2.14282V4.34282\" stroke={color} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n      <Path d=\"M9.7002 2.14282V4.34282\" stroke={color} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n    </IconSvg>\n  );\n}\n","import { JSX } from \"react\";\nimport { View } from \"react-native\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { useRemScale } from \"../../utils/useRem\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  isChecked: boolean;\n  checkColor?: string;\n  color?: string;\n  style?: { [key: string]: string | number };\n  size?: number;\n  className?: string;\n}\n\nexport function IconCheckCircle(props: IProps): JSX.Element {\n  const color = props.color || Tailwind_semantic().icon.purple;\n  const checkColor = props.checkColor || Tailwind_semantic().background.default;\n  const size = props.size || 20;\n  const scale = useRemScale();\n  if (props.isChecked) {\n    return (\n      <IconSvg\n        style={props.style}\n        className={props.className}\n        width={size}\n        height={size}\n        viewBox=\"0 0 20 20\"\n        fill=\"none\"\n      >\n        <Path\n          d=\"M0 10C0 4.47715 4.47715 0 10 0C15.5228 0 20 4.47715 20 10C20 15.5228 15.5228 20 10 20C4.47715 20 0 15.5228 0 10Z\"\n          fill={color}\n        />\n        <Path\n          d=\"M14.5 7L8.70846 13L6.5 10.6139\"\n          stroke={checkColor}\n          strokeWidth=\"2\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n        />\n      </IconSvg>\n    );\n  } else {\n    const scaledSize = Math.round(size * scale);\n    return (\n      <View\n        style={{\n          ...(props.style as object),\n          width: scaledSize,\n          height: scaledSize,\n          borderWidth: 2 * scale,\n          borderRadius: scaledSize / 2,\n          borderColor: Tailwind_semantic().border.prominent,\n        }}\n        className={props.className ?? \"\"}\n      />\n    );\n  }\n}\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  size?: number;\n  color?: string;\n}\n\nexport function IconClose(props: IProps = {}): JSX.Element {\n  const size = props.size ?? 24;\n  const color = props.color || Tailwind_semantic().icon.neutral;\n  return (\n    <IconSvg width={size} height={size} viewBox=\"0 0 512 512\">\n      <Path\n        fill={color}\n        d=\"M443.6,387.1L312.4,255.4l131.5-130c5.4-5.4,5.4-14.2,0-19.6l-37.4-37.6c-2.6-2.6-6.1-4-9.8-4c-3.7,0-7.2,1.5-9.8,4  L256,197.8L124.9,68.3c-2.6-2.6-6.1-4-9.8-4c-3.7,0-7.2,1.5-9.8,4L68,105.9c-5.4,5.4-5.4,14.2,0,19.6l131.5,130L68.4,387.1  c-2.6,2.6-4.1,6.1-4.1,9.8c0,3.7,1.4,7.2,4.1,9.8l37.4,37.6c2.7,2.7,6.2,4.1,9.8,4.1c3.5,0,7.1-1.3,9.8-4.1L256,313.1l130.7,131.1  c2.7,2.7,6.2,4.1,9.8,4.1c3.5,0,7.1-1.3,9.8-4.1l37.4-37.6c2.6-2.6,4.1-6.1,4.1-9.8C447.7,393.2,446.2,389.7,443.6,387.1z\"\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path, Rect } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  size?: number;\n  color?: string;\n  bgColor?: string;\n}\n\nexport function IconCloseCircleOutline(props: IProps = {}): JSX.Element {\n  const size = props.size ?? 20;\n  const color = props.color ?? Tailwind_semantic().icon.neutral;\n  const bgColor = props.bgColor ?? Tailwind_semantic().background.subtle;\n  return (\n    <IconSvg width={size} height={size} viewBox=\"0 0 32 32\" fill=\"none\">\n      <Rect width=\"32\" height=\"32\" rx=\"16\" fill={bgColor} />\n      <Path\n        d=\"M21.9081 21.4999C21.4635 21.9446 20.7425 21.9446 20.2978 21.4999L16.2721 17.4742L12.2463 21.4999C11.8017 21.9446 11.0807 21.9446 10.636 21.4999C10.1914 21.0553 10.1914 20.3343 10.636 19.8896L14.6618 15.8639L10.636 11.8381C10.1914 11.3935 10.1914 10.6725 10.636 10.2278C11.0807 9.78317 11.8017 9.78317 12.2463 10.2278L16.2721 14.2536L20.2978 10.2278C20.7425 9.78317 21.4635 9.78317 21.9081 10.2278C22.3528 10.6725 22.3528 11.3935 21.9081 11.8381L17.8824 15.8639L21.9081 19.8896C22.3528 20.3343 22.3528 21.0553 21.9081 21.4999Z\"\n        fill={color}\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path, Rect } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\n\ninterface IProps {\n  size?: number;\n  className?: string;\n}\n\nexport function IconDefaultExercise(props: IProps = {}): JSX.Element {\n  const size = props.size ?? 24;\n  return (\n    <IconSvg noRemScale={true} width={size} height={size} viewBox=\"0 0 64 64\" fill=\"none\">\n      <Rect width=\"64\" height=\"64\" rx=\"16\" fill=\"#D9D9D9\" />\n      <Path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M25.5716 14.9039C24.7645 15.1393 23.9687 15.4203 23.1866 15.7469L23.1757 15.7515C22.5413 16.0162 22.1752 16.6773 22.2922 17.3471L23.4988 24.2642C23.589 24.7813 23.3914 25.3056 22.9838 25.6432C19.9371 28.1663 18 31.952 18 36.1839C18 44.6348 25.725 51.3062 34.5875 49.6987C40.2007 48.6802 44.6108 44.3261 45.6397 38.7873C46.6168 33.5285 44.5595 28.6763 40.9008 25.6451C40.4923 25.3066 40.2931 24.7825 40.3834 24.264L41.5883 17.3588C41.7061 16.6822 41.3366 16.0141 40.6953 15.7469C39.9132 15.4203 39.1174 15.1393 38.3106 14.9039C36.2521 14.3032 34.1188 14 31.941 14C29.7637 14 27.6301 14.3032 25.5716 14.9039ZM26.4243 19.7917C26.2912 19.0293 26.7795 18.2932 27.5418 18.1127C28.9733 17.7739 30.4446 17.6032 31.941 17.6032C33.4378 17.6032 34.9088 17.7739 36.3404 18.1127C37.1026 18.2932 37.591 19.0293 37.4576 19.7917L36.8452 23.3044C35.3197 22.7381 33.6668 22.4286 31.941 22.4286C30.2152 22.4286 28.5624 22.7381 27.037 23.3044L26.4243 19.7917Z\"\n        fill=\"#BCBCBC\"\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\n\ninterface IProps {\n  style?: { [key: string]: string | number };\n  size?: number;\n  className?: string;\n  color?: string;\n}\n\nexport function IconDiscord(props: IProps): JSX.Element {\n  const size = props.size || 24;\n  const color = props.color || \"#5865F2\";\n  return (\n    <IconSvg width={size} height={size} viewBox=\"0 -28.5 256 256\">\n      <Path\n        d=\"M216.856339,16.5966031 C200.285002,8.84328665 182.566144,3.2084988 164.041564,0 C161.766523,4.11318106 159.108624,9.64549908 157.276099,14.0464379 C137.583995,11.0849896 118.072967,11.0849896 98.7430163,14.0464379 C96.9108417,9.64549908 94.1925838,4.11318106 91.8971895,0 C73.3526068,3.2084988 55.6133949,8.86399117 39.0420583,16.6376612 C5.61752293,67.146514 -3.4433191,116.400813 1.08711069,164.955721 C23.2560196,181.510915 44.7403634,191.567697 65.8621325,198.148576 C71.0772151,190.971126 75.7283628,183.341335 79.7352139,175.300261 C72.104019,172.400575 64.7949724,168.822202 57.8887866,164.667963 C59.7209612,163.310589 61.5131304,161.891452 63.2445898,160.431257 C105.36741,180.133187 151.134928,180.133187 192.754523,160.431257 C194.506336,161.891452 196.298154,163.310589 198.110326,164.667963 C191.183787,168.842556 183.854737,172.420929 176.223542,175.320965 C180.230393,183.341335 184.861538,190.991831 190.096624,198.16893 C211.238746,191.588051 232.743023,181.531619 254.911949,164.955721 C260.227747,108.668201 245.831087,59.8662432 216.856339,16.5966031 Z M85.4738752,135.09489 C72.8290281,135.09489 62.4592217,123.290155 62.4592217,108.914901 C62.4592217,94.5396472 72.607595,82.7145587 85.4738752,82.7145587 C98.3405064,82.7145587 108.709962,94.5189427 108.488529,108.914901 C108.508531,123.290155 98.3405064,135.09489 85.4738752,135.09489 Z M170.525237,135.09489 C157.88039,135.09489 147.510584,123.290155 147.510584,108.914901 C147.510584,94.5396472 157.658606,82.7145587 170.525237,82.7145587 C183.391518,82.7145587 193.761324,94.5189427 193.539891,108.914901 C193.539891,123.290155 183.391518,135.09489 170.525237,135.09489 Z\"\n        fill={color}\n        fillRule=\"nonzero\"\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  style?: { [key: string]: string | number };\n  width?: number;\n  height?: number;\n  className?: string;\n  color?: string;\n}\n\nexport function IconDoc(props: IProps): JSX.Element {\n  const color = props.color || Tailwind_semantic().icon.neutral;\n  const width = props.width || 17;\n  const height = props.height || 22;\n  return (\n    <IconSvg\n      style={props.style}\n      className={`inline-block ${props.className ?? \"\"}`}\n      width={width}\n      height={height}\n      viewBox=\"0 0 17 22\"\n      fill=\"none\"\n    >\n      <Path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M13.1195 20.807H3.88537C2.29826 20.807 1 19.4965 1 17.8944V3.91333C1 2.31123 2.29826 1 3.88537 1H8.06936C8.50281 1 9.00786 1.21825 9.36866 1.43649L15.5725 7.69895C15.9333 8.06281 16.0049 8.50035 16.0049 9.01053V17.894C16.0049 19.4965 14.7793 20.807 13.1195 20.807Z\"\n        stroke={color}\n        strokeWidth=\"1.6\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n      <Path\n        d=\"M8.50246 1.27441V5.68669C8.50246 5.68669 8.42252 8.66424 10.9655 8.61336H15.6448\"\n        stroke={color}\n        strokeWidth=\"1.6\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n      <Path\n        d=\"M4.46238 12.4861H12.5425\"\n        stroke={color}\n        strokeWidth=\"1.6\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n      <Path\n        d=\"M4.42206 16.3123H12.5019\"\n        stroke={color}\n        strokeWidth=\"1.6\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  style?: { [key: string]: string | number };\n  className?: string;\n  color?: string;\n  width?: number;\n  height?: number;\n}\n\nexport function IconDumbbell(props: IProps): JSX.Element {\n  const width = props.width || 32;\n  const height = props.height || 21;\n  const color = props.color || Tailwind_semantic().icon.neutral;\n  return (\n    <IconSvg\n      style={props.style}\n      className={`inline-block ${props.className ?? \"\"}`}\n      width={width}\n      height={height}\n      viewBox=\"0 0 32 21\"\n      fill=\"none\"\n    >\n      <Path d=\"M9.09267 8.46919L22.7291 8.46919M22.7291 13.0846L9.09272 13.0846\" stroke={color} />\n      <Path\n        d=\"M9.09286 6.16169C9.09286 4.88719 8.17708 3.854 7.04741 3.854C5.91773 3.854 5.00195 4.88719 5.00195 6.16169L5.00195 15.3924C5.00195 16.667 5.91773 17.7001 7.04741 17.7001C8.17708 17.7001 9.09286 16.667 9.09286 15.3924L9.09286 6.16169Z\"\n        stroke={color}\n      />\n      <Path\n        d=\"M5.00156 8.46882C5.00156 7.19432 4.08577 6.16113 2.9561 6.16113C1.82643 6.16113 0.910644 7.19432 0.910644 8.46882L0.910644 13.0842C0.910643 14.3587 1.82643 15.3919 2.9561 15.3919C4.08577 15.3919 5.00156 14.3587 5.00156 13.0842L5.00156 8.46882Z\"\n        stroke={color}\n      />\n      <Path\n        d=\"M30.9105 8.46882C30.9105 7.19432 29.9947 6.16113 28.865 6.16113C27.7354 6.16113 26.8196 7.19432 26.8196 8.46882L26.8196 13.0842C26.8196 14.3587 27.7354 15.3919 28.865 15.3919C29.9947 15.3919 30.9105 14.3587 30.9105 13.0842L30.9105 8.46882Z\"\n        stroke={color}\n      />\n      <Path\n        d=\"M26.8199 6.16169C26.8199 4.88719 25.9041 3.854 24.7745 3.854C23.6448 3.854 22.729 4.88719 22.729 6.16169L22.729 15.3924C22.729 16.667 23.6448 17.7001 24.7745 17.7001C25.9041 17.7001 26.8199 16.667 26.8199 15.3925L26.8199 6.16169Z\"\n        stroke={color}\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IIconEdit2Props {\n  size?: number;\n  color?: string;\n  className?: string;\n}\n\nexport function IconEdit2(props: IIconEdit2Props): JSX.Element {\n  const size = props.size ?? 24;\n  const color = props.color ?? Tailwind_semantic().icon.neutral;\n  return (\n    <IconSvg width={size} height={size} className={props.className} viewBox=\"0 0 24 24\" fill=\"none\" stroke={color}>\n      <Path\n        d=\"M13.4486 6.95168L17.0486 10.5517M4.44867 19.5517L8.81465 18.672C9.04643 18.6253 9.25925 18.5111 9.42639 18.3439L19.2001 8.56486C19.6687 8.096 19.6683 7.33602 19.1993 6.86755L17.1289 4.79948C16.6601 4.33121 15.9005 4.33153 15.4321 4.80019L5.65743 14.5802C5.49062 14.7471 5.37672 14.9595 5.32997 15.1908L4.44867 19.5517Z\"\n        strokeWidth=\"1.6\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  className?: string;\n  color?: string;\n}\n\nexport function IconEditSquare(props: IProps): JSX.Element {\n  const color = props.color || Tailwind_semantic().icon.neutral;\n  return (\n    <IconSvg width={17} height={18} viewBox=\"0 0 17 18\" className={props.className} fill=\"none\">\n      <Path\n        d=\"M8.5 1.91663H2.25C1.55965 1.91663 1 2.47627 1 3.16663V15.6666C1 16.357 1.55965 16.9166 2.25 16.9166H14.75C15.4404 16.9166 16 16.357 16 15.6666V9.41663\"\n        stroke={color}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n      <Path\n        d=\"M8.5 7.74999V9.83332L10.5833 9.20832L16.1193 3.49378C16.6117 2.9855 16.5539 2.16227 15.9953 1.72779C15.5219 1.35961 14.8485 1.40154 14.4244 1.82558L8.5 7.74999Z\"\n        stroke={color}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\n\nexport function IconGoogle(): JSX.Element {\n  return (\n    <IconSvg width={24} height={24} viewBox=\"0 0 24 24\" fill=\"none\">\n      <Path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M23.04 12.2613C23.04 11.4459 22.9668 10.6618 22.8309 9.90906H12V14.3575H18.1891C17.9225 15.795 17.1123 17.0129 15.8943 17.8284V20.7138H19.6109C21.7855 18.7118 23.04 15.7636 23.04 12.2613Z\"\n        fill=\"#4285F4\"\n      />\n      <Path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M12 23.4998C15.105 23.4998 17.7081 22.47 19.6109 20.7137L15.8943 17.8282C14.8645 18.5182 13.5472 18.9259 12 18.9259C9.00474 18.9259 6.46951 16.903 5.56519 14.1848H1.72314V17.1644C3.61542 20.9228 7.50451 23.4998 12 23.4998Z\"\n        fill=\"#34A853\"\n      />\n      <Path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M5.56523 14.1851C5.33523 13.4951 5.20455 12.7581 5.20455 12.0001C5.20455 11.2422 5.33523 10.5051 5.56523 9.81512V6.83557H1.72318C0.944318 8.38807 0.5 10.1444 0.5 12.0001C0.5 13.8558 0.944318 15.6122 1.72318 17.1647L5.56523 14.1851Z\"\n        fill=\"#FBBC05\"\n      />\n      <Path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M12 5.07386C13.6884 5.07386 15.2043 5.65409 16.3961 6.79364L19.6945 3.49523C17.7029 1.63955 15.0997 0.5 12 0.5C7.50451 0.5 3.61542 3.07705 1.72314 6.83545L5.56519 9.815C6.46951 7.09682 9.00474 5.07386 12 5.07386Z\"\n        fill=\"#EA4335\"\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\n\ninterface IProps {\n  size?: number;\n  color?: string;\n  className?: string;\n}\n\nexport function IconGooglePlay(props: IProps): JSX.Element {\n  const size = props.size ?? 24;\n  const color = props.color ?? Tailwind_semantic().icon.neutral;\n  return (\n    <IconSvg width={size} height={size} className={props.className} viewBox=\"0 0 24 24\" fill=\"none\">\n      <Path\n        d=\"M12.6225 12.75L3.17246 3.5775C3.05288 3.82352 2.99374 4.09453 2.99996 4.368V21.135C2.99996 21.456 3.06596 21.723 3.17846 21.936L12.6225 12.75ZM13.17 12.219L16.08 9.3885L4.98296 3.258C4.71764 3.09893 4.41614 3.01014 4.10696 3C3.98064 2.99976 3.85526 3.02159 3.73646 3.0645L13.17 12.219ZM20.184 11.6565L16.782 9.777L13.722 12.7545L16.782 15.7245L20.184 13.8435C21.273 13.2435 21.273 12.258 20.184 11.6565ZM13.176 13.287L3.76346 22.4445C4.09946 22.5555 4.52096 22.503 4.98296 22.2495L16.086 16.11L13.176 13.287Z\"\n        fill={color}\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  style?: { [key: string]: string | number };\n  className?: string;\n  size?: number;\n  color?: string;\n}\n\nexport function IconHamburger(props: IProps): JSX.Element {\n  const color = props.color ?? Tailwind_semantic().icon.neutral;\n  const size = props.size ?? 22;\n  return (\n    <IconSvg style={props.style} className={props.className} width={size} height={size} viewBox=\"0 0 22 22\" fill=\"none\">\n      <Path\n        d=\"M1.57143 6.2H20.4286C21.296 6.2 22 5.4832 22 4.6C22 3.7168 21.296 3 20.4286 3H1.57143C0.704 3 0 3.7168 0 4.6C0 5.4832 0.704 6.2 1.57143 6.2ZM20.4286 9.4H1.57143C0.704 9.4 0 10.1168 0 11C0 11.8832 0.704 12.6 1.57143 12.6H20.4286C21.296 12.6 22 11.8832 22 11C22 10.1168 21.296 9.4 20.4286 9.4ZM20.4286 15.8H1.57143C0.704 15.8 0 16.5168 0 17.4C0 18.2832 0.704 19 1.57143 19H20.4286C21.296 19 22 18.2832 22 17.4C22 16.5168 21.296 15.8 20.4286 15.8Z\"\n        fill={color}\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\nexport function IconHandle(): JSX.Element {\n  const color = Tailwind_semantic().icon.neutral;\n  return (\n    <IconSvg width={20} height={20} viewBox=\"0 0 20 20\">\n      <Path\n        fill={color}\n        d=\"M7 2a2 2 0 1 0 .001 4.001A2 2 0 0 0 7 2m0 6a2 2 0 1 0 .001 4.001A2 2 0 0 0 7 8m0 6a2 2 0 1 0 .001 4.001A2 2 0 0 0 7 14m6-8a2 2 0 1 0-.001-4.001A2 2 0 0 0 13 6m0 2a2 2 0 1 0 .001 4.001A2 2 0 0 0 13 8m0 6a2 2 0 1 0 .001 4.001A2 2 0 0 0 13 14\"\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  size?: number;\n  color?: string;\n  fill?: string;\n  className?: string;\n}\n\nexport function IconHelp(props: IProps): JSX.Element {\n  const size = props.size ?? 24;\n  const color = props.color ?? Tailwind_semantic().icon.neutral;\n  return (\n    <IconSvg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\">\n      <Path\n        d=\"M12 22C17.5229 22 22 17.5229 22 12C22 6.47715 17.5229 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5229 6.47715 22 12 22Z\"\n        stroke={color}\n        fill={props.fill}\n      />\n      <Path\n        d=\"M11.0232 14C11.0232 13.4078 11.1 12.9358 11.2535 12.584C11.407 12.2322 11.7093 11.847 12.1604 11.4284C12.6163 11.0054 12.9047 10.7049 13.0256 10.5267C13.2117 10.2551 13.3047 9.9612 13.3047 9.64505C13.3047 9.22645 13.1954 8.9081 12.9768 8.6899C12.7628 8.46725 12.4465 8.3559 12.0279 8.3559C11.6279 8.3559 11.3047 8.465 11.0582 8.6832C10.8163 8.89695 10.6953 9.1886 10.6953 9.5582H9C9.0093 8.77005 9.28835 8.14665 9.8372 7.688C10.3907 7.22935 11.1209 7 12.0279 7C12.9628 7 13.6907 7.2271 14.2116 7.6813C14.7372 8.1355 15 8.77005 15 9.5849C15 10.3107 14.6465 11.0255 13.9396 11.729L13.0814 12.5372C12.7744 12.8712 12.6163 13.3588 12.607 14H11.0232Z\"\n        fill={color}\n      />\n      <Path d=\"M12.5 15.5H11V17H12.5V15.5Z\" fill={color} />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  style?: { [key: string]: string | number };\n  size?: number;\n  className?: string;\n  color?: string;\n}\n\nexport function IconInstagramFlat(props: IProps): JSX.Element {\n  const size = props.size || 24;\n  const color = props.color || Tailwind_semantic().icon.neutral;\n  return (\n    <IconSvg width={size} height={size} className={props.className} style={props.style} viewBox=\"0 0 26 26\">\n      <Path\n        d=\"M13.0047 6.32379C12.1286 6.32365 11.261 6.49611 10.4515 6.83131C9.6421 7.16652 8.90662 7.65791 8.28712 8.27741C7.66761 8.89692 7.17623 9.6324 6.84102 10.4418C6.50581 11.2513 6.33335 12.1188 6.3335 12.995C6.33335 13.8711 6.50581 14.7386 6.84102 15.5481C7.17623 16.3575 7.66761 17.093 8.28712 17.7125C8.90662 18.332 9.6421 18.8234 10.4515 19.1586C11.261 19.4938 12.1286 19.6663 13.0047 19.6661C13.8808 19.6663 14.7483 19.4938 15.5578 19.1586C16.3672 18.8234 17.1027 18.332 17.7222 17.7125C18.3417 17.093 18.8331 16.3575 19.1683 15.5481C19.5035 14.7386 19.676 13.8711 19.6758 12.995C19.676 12.1188 19.5035 11.2513 19.1683 10.4418C18.8331 9.6324 18.3417 8.89692 17.7222 8.27741C17.1027 7.65791 16.3672 7.16652 15.5578 6.83131C14.7483 6.49611 13.8808 6.32365 13.0047 6.32379ZM13.0047 17.325C12.1486 17.3248 11.3117 17.0708 10.6 16.595C9.88827 16.1193 9.33358 15.4432 9.00606 14.6522C8.67855 13.8612 8.59291 12.9909 8.75998 12.1512C8.92705 11.3116 9.33932 10.5403 9.94468 9.93498C10.55 9.32962 11.3213 8.91735 12.1609 8.75028C13.0006 8.58321 13.8709 8.66884 14.6619 8.99636C15.4529 9.32388 16.129 9.87857 16.6047 10.5903C17.0805 11.302 17.3345 12.1389 17.3347 12.995C17.335 13.5637 17.2232 14.1269 17.0057 14.6523C16.7882 15.1778 16.4693 15.6553 16.0671 16.0574C15.665 16.4596 15.1875 16.7785 14.6621 16.996C14.1366 17.2135 13.5734 17.3253 13.0047 17.325Z\"\n        fill={color}\n      />\n      <Path\n        d=\"M18.3606 0.0816689C15.9686 -0.0299145 10.0438 -0.0244978 7.64966 0.0816689C5.54583 0.180252 3.69008 0.688335 2.194 2.18442C-0.306337 4.68475 0.0132462 8.05392 0.0132462 12.995C0.0132462 18.052 -0.26842 21.3432 2.194 23.8056C4.70408 26.3146 8.122 25.9863 13.0046 25.9863C18.0139 25.9863 19.7429 25.9896 21.5142 25.3038C23.9224 24.3689 25.7402 22.2163 25.9179 18.3499C26.0306 15.9568 26.0241 10.0332 25.9179 7.639C25.7034 3.07492 23.254 0.307002 18.3606 0.0816689ZM22.1468 22.1513C20.5077 23.7904 18.2338 23.6442 12.9732 23.6442C7.5565 23.6442 5.38441 23.7243 3.7995 22.1351C1.97408 20.3183 2.3045 17.4009 2.3045 12.9777C2.3045 6.99225 1.69025 2.68167 7.69733 2.374C9.0775 2.32525 9.48375 2.309 12.958 2.309L13.0067 2.3415C18.7798 2.3415 23.3092 1.737 23.5812 7.743C23.6429 9.11342 23.657 9.52508 23.657 12.9939C23.6559 18.3478 23.7577 20.5328 22.1468 22.1513Z\"\n        fill={color}\n      />\n      <Path\n        d=\"M19.94 7.61942C20.801 7.61942 21.4989 6.92147 21.4989 6.0605C21.4989 5.19954 20.801 4.50159 19.94 4.50159C19.0791 4.50159 18.3811 5.19954 18.3811 6.0605C18.3811 6.92147 19.0791 7.61942 19.94 7.61942Z\"\n        fill={color}\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  size?: number;\n  color?: string;\n  className?: string;\n}\n\nexport function IconKettlebellSmall(props: IProps): JSX.Element {\n  const size = props.size ?? 14;\n  const color = props.color ?? Tailwind_semantic().icon.neutral;\n  return (\n    <IconSvg width={size} height={size} className={props.className} viewBox=\"0 0 14 14\" fill=\"none\">\n      <Path\n        d=\"M4.96875 7.14282L4.34705 3.82711C4.23166 3.2117 4.70379 2.64282 5.32993 2.64282H9.67007C10.2962 2.64282 10.7683 3.2117 10.6529 3.82711L10.0312 7.14282\"\n        stroke={color}\n      />\n      <Path\n        d=\"M9.30261 6.88928C7.59166 6.28746 5.47318 6.56206 4.1662 7.73766C3.4028 8.42434 3 9.33953 3 10.2888C3 11.232 3.39188 12.0895 4.0354 12.7613C4.39642 13.1382 4.95439 13.3303 5.51879 13.3303H9.48121C10.0456 13.3303 10.6036 13.1382 10.9646 12.7613C11.6082 12.0895 12 11.232 12 10.2888C12 10.1941 11.9962 10.1001 11.9885 10.0071C11.8956 8.87296 11.2302 7.86353 10.1194 7.25335C9.86046 7.11113 9.58664 6.98915 9.30261 6.88928Z\"\n        stroke={color}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  size?: number;\n  color?: string;\n  className?: string;\n}\n\nexport function IconKeyboardClose(props: IProps): JSX.Element {\n  const size = props.size ?? 24;\n  const color = props.color ?? Tailwind_semantic().icon.neutral;\n  return (\n    <IconSvg width={size} height={size} className={props.className} viewBox=\"0 0 24 24\" fill={color}>\n      <Path d=\"M4 16C3.45 16 2.97917 15.8042 2.5875 15.4125C2.19583 15.0208 2 14.55 2 14V4C2 3.45 2.19583 2.97917 2.5875 2.5875C2.97917 2.19583 3.45 2 4 2H20C20.55 2 21.0208 2.19583 21.4125 2.5875C21.8042 2.97917 22 3.45 22 4V14C22 14.55 21.8042 15.0208 21.4125 15.4125C21.0208 15.8042 20.55 16 20 16H4ZM4 14H20V4H4V14ZM8 13H16V11H8V13ZM5 10H7V8H5V10ZM8 10H10V8H8V10ZM11 10H13V8H11V10ZM14 10H16V8H14V10ZM17 10H19V8H17V10ZM5 7H7V5H5V7ZM8 7H10V5H8V7ZM11 7H13V5H11V7ZM14 7H16V5H14V7ZM17 7H19V5H17V7Z\" />\n      <Path d=\"M9 18.5L12.5 22L16 18.5H9Z\" />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  size?: number;\n  color?: string;\n  className?: string;\n}\n\nexport function IconMoon(props: IProps): JSX.Element {\n  const size = props.size ?? 20;\n  const color = props.color ?? Tailwind_semantic().icon.neutral;\n  return (\n    <IconSvg className={props.className} width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\">\n      <Path\n        d=\"M21 12.8A9 9 0 1 1 11.2 3a7 7 0 0 0 9.8 9.8z\"\n        stroke={color}\n        strokeWidth=\"2\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n    </IconSvg>\n  );\n}\n","import { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  color?: string;\n  playColor?: string;\n  style?: { [key: string]: string | number };\n  size?: number;\n  className?: string;\n}\n\nexport function IconPlayCircle(props: IProps): JSX.Element {\n  const color = props.color || Tailwind_semantic().icon.purple;\n  const playColor = props.playColor || Tailwind_semantic().background.default;\n  const size = props.size || 20;\n  return (\n    <IconSvg style={props.style} className={props.className} width={size} height={size} viewBox=\"0 0 20 20\" fill=\"none\">\n      <Path\n        d=\"M0 10C0 4.47715 4.47715 0 10 0C15.5228 0 20 4.47715 20 10C20 15.5228 15.5228 20 10 20C4.47715 20 0 15.5228 0 10Z\"\n        fill={color}\n      />\n      <Path d=\"M8 6.5L14 10L8 13.5V6.5Z\" fill={playColor} stroke={playColor} strokeWidth=\"1.5\" strokeLinejoin=\"round\" />\n    </IconSvg>\n  );\n}\n","import React, { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  color?: string;\n  size?: number;\n  style?: React.CSSProperties;\n  className?: string;\n}\n\nexport function IconPlus2(props: IProps): JSX.Element {\n  const color = props.color || Tailwind_semantic().icon.neutral;\n  const size = props.size || 18;\n  return (\n    <IconSvg style={props.style} className={props.className} width={size} height={size} viewBox=\"0 0 18 18\" fill=\"none\">\n      <Path\n        d=\"M18 9C18 9.71008 17.4244 10.2857 16.7143 10.2857H10.2857V16.7143C10.2857 17.4244 9.71008 18 9 18C8.28992 18 7.71429 17.4244 7.71429 16.7143V10.2857H1.28571C0.575635 10.2857 0 9.71008 0 9C0 8.28992 0.575634 7.71429 1.28571 7.71429H7.71429V1.28571C7.71429 0.575635 8.28992 0 9 0C9.71008 0 10.2857 0.575634 10.2857 1.28571V7.71429H16.7143C17.4244 7.71429 18 8.28992 18 9Z\"\n        fill={color}\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  size?: number;\n  color?: string;\n  className?: string;\n}\n\nexport function IconPreview(props: IProps): JSX.Element {\n  const size = props.size ?? 20;\n  const color = props.color ?? Tailwind_semantic().icon.neutral;\n  return (\n    <IconSvg className={props.className} width={size} height={size} viewBox=\"0 0 101 101\" fill=\"none\">\n      <Path\n        d=\"M55.7412 94.2857H9.85911C8.18346 94.2857 6.81248 92.8865 6.81248 91.1763V9.833C6.81248 8.1228 8.18346 6.72354 9.85911 6.72354H75.7271C77.4027 6.72354 78.7737 8.1228 78.7737 9.833V30.3243C78.7737 32.0345 80.1447 33.4337 81.8203 33.4337C83.496 33.4337 84.8669 32.0345 84.8669 30.3243V9.833C84.8669 4.68685 80.7692 0.504639 75.7271 0.504639H9.85911C4.81695 0.504639 0.719238 4.68685 0.719238 9.833V91.1763C0.719238 96.3224 4.81695 100.505 9.85911 100.505H55.7412C57.4169 100.505 58.7879 99.1054 58.7879 97.3952C58.7879 95.685 57.4321 94.2857 55.7412 94.2857Z\"\n        fill={color}\n      />\n      <Path\n        d=\"M99.8563 93.6949L86.3293 79.4381C89.8938 74.976 92.0417 69.2702 92.0417 63.0668C92.0417 48.7478 80.6321 37.1029 66.6024 37.1029C52.5727 37.1029 41.1631 48.7478 41.1631 63.0668C41.1631 77.3859 52.5727 89.0308 66.6024 89.0308C72.3605 89.0308 77.6769 87.0718 81.9421 83.7602L95.4996 98.0326C96.0937 98.6545 96.8858 98.9655 97.6779 98.9655C98.4396 98.9655 99.2165 98.6701 99.8106 98.0793C100.999 96.8977 101.029 94.9232 99.8563 93.6949ZM66.5872 82.8274C55.924 82.8274 47.2411 73.9655 47.2411 63.0824C47.2411 52.1993 55.924 43.3374 66.5872 43.3374C77.2503 43.3374 85.9332 52.1993 85.9332 63.0824C85.9332 73.9655 77.2503 82.8274 66.5872 82.8274ZM58.7878 30.3243C58.7878 28.6141 57.4168 27.2148 55.7412 27.2148H19.7454C18.0697 27.2148 16.6987 28.6141 16.6987 30.3243C16.6987 32.0345 18.0697 33.4337 19.7454 33.4337H55.7412C57.4321 33.4337 58.7878 32.0345 58.7878 30.3243ZM40.2796 47.6284C40.2796 45.9182 38.9086 44.5189 37.233 44.5189H19.7454C18.0697 44.5189 16.6987 45.9182 16.6987 47.6284C16.6987 49.3386 18.0697 50.7379 19.7454 50.7379H37.233C38.9238 50.7379 40.2796 49.3541 40.2796 47.6284ZM19.7454 61.8231C18.0697 61.8231 16.6987 63.2223 16.6987 64.9325C16.6987 66.6427 18.0697 68.042 19.7454 68.042H29.1442C30.8198 68.042 32.1908 66.6427 32.1908 64.9325C32.1908 63.2223 30.8198 61.8231 29.1442 61.8231H19.7454Z\"\n        fill={color}\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\n\ninterface IProps {\n  style?: { [key: string]: string | number };\n  size?: number;\n  className?: string;\n  color?: string;\n  secondaryColor?: string;\n}\n\nexport function IconReddit(props: IProps): JSX.Element {\n  const size = props.size || 24;\n  const color = props.color || Tailwind_semantic().icon.neutral;\n  const secondaryColor = props.secondaryColor || Tailwind_semantic().icon.white;\n  return (\n    <IconSvg width={size} height={size} className={props.className} style={props.style} viewBox=\"0 0 26 26\" fill=\"none\">\n      <Path\n        d=\"M25.2943 11.7445C25.3958 12.8278 24.8871 13.6315 24.049 14.2517C23.8477 14.4006 23.7855 14.5257 23.8212 14.7842C24.0838 16.7224 23.5183 18.4213 22.242 19.8828C20.6325 21.7251 18.5419 22.7307 16.1941 23.2596C14.5627 23.6267 12.9112 23.7053 11.2505 23.4979C9.35197 23.2596 7.54126 22.7389 5.90896 21.7104C4.47888 20.8098 3.30132 19.6681 2.61693 18.0889C2.13566 16.9782 2.01213 15.8237 2.21068 14.6335C2.23173 14.5057 2.20611 14.4353 2.08899 14.3577C1.37898 13.8827 0.863856 13.257 0.731187 12.3921C0.393565 10.1917 2.35342 8.8527 4.00401 9.2893C4.48162 9.41534 4.92355 9.67566 5.37645 9.88482C5.48716 9.93597 5.56128 9.96885 5.68205 9.88665C7.006 8.98514 8.46171 8.39509 10.0272 8.06444C10.9001 7.87994 11.7803 7.75389 12.6733 7.76029C12.8499 7.7612 12.8846 7.66621 12.9258 7.53468C13.4016 6.0212 13.881 4.50954 14.3586 2.99697C14.5279 2.4599 14.785 2.30919 15.3349 2.42702C16.6589 2.70925 17.9828 2.98692 19.3049 3.27647C19.4687 3.31209 19.562 3.28195 19.6718 3.15407C20.7945 1.85067 22.5366 2.4462 23.0975 3.44179C23.7983 4.68765 23.0133 6.24315 21.5667 6.47606C20.5145 6.64504 19.4724 5.97918 19.1924 4.93426C19.1329 4.71323 19.0286 4.64015 18.8191 4.59722C17.798 4.38989 16.7815 4.16428 15.764 3.94598C15.6835 3.92863 15.6012 3.91949 15.4987 3.90305C15.0723 5.22746 14.6505 6.53909 14.2168 7.88542C14.473 7.91191 14.6963 7.93566 14.9195 7.95849C16.9132 8.16035 18.7624 8.77871 20.4404 9.883C20.5465 9.95241 20.6097 9.94876 20.7131 9.86473C21.618 9.12671 22.6272 8.9961 23.6821 9.4601C24.6566 9.89213 25.1946 10.6822 25.2943 11.7445ZM16.797 15.9908C17.6818 15.9899 18.4687 15.2071 18.465 14.3321C18.4613 13.4005 17.7047 12.6387 16.7879 12.6414C15.8976 12.6442 15.1217 13.4041 15.1226 14.2709C15.1236 15.219 15.8766 15.9917 16.797 15.9908ZM17.1923 19.1639C17.3844 18.942 17.335 18.678 17.1584 18.5035C16.9132 18.2606 16.5966 18.193 16.3505 18.3337C16.2517 18.3903 16.1611 18.4606 16.0641 18.52C14.3687 19.5485 12.5973 19.7083 10.7619 18.9465C10.3859 18.7904 10.04 18.5584 9.68593 18.3528C9.42242 18.1994 9.0912 18.2533 8.83867 18.5081C8.67215 18.6753 8.65111 18.963 8.81763 19.1986C8.91187 19.3311 9.03905 19.4507 9.17264 19.5439C10.32 20.3477 11.6101 20.6829 13.1024 20.7002C13.2644 20.6884 13.5297 20.6738 13.795 20.6491C14.7228 20.5641 15.6076 20.3203 16.4082 19.8398C16.7 19.6626 16.9672 19.4215 17.1923 19.1639ZM9.26413 15.9908C10.0958 15.989 10.8928 15.1742 10.8891 14.3285C10.8854 13.4114 10.1141 12.6414 9.201 12.6423C8.29976 12.6423 7.53211 13.4151 7.53394 14.3202C7.53668 15.2354 8.32081 15.9926 9.26413 15.9908Z\"\n        fill={color}\n      />\n      <Path\n        d=\"M18.4649 14.3319C18.4686 15.207 17.6817 15.9897 16.7969 15.9906C15.8765 15.9916 15.1235 15.2188 15.1226 14.2707C15.1216 13.403 15.8975 12.644 16.7878 12.6412C17.7046 12.6376 18.4603 13.3994 18.4649 14.3319Z\"\n        fill={secondaryColor}\n      />\n      <Path\n        d=\"M17.1585 18.5035C17.3351 18.678 17.3845 18.9419 17.1923 19.1639C16.9673 19.4224 16.7001 19.6635 16.4073 19.8389C15.6067 20.3193 14.7219 20.5632 13.7942 20.6481C13.5288 20.6728 13.2644 20.6874 13.1015 20.6993C11.6092 20.6828 10.3191 20.3467 9.17178 19.5429C9.03728 19.4489 8.91101 19.3301 8.81677 19.1977C8.65025 18.962 8.67129 18.6734 8.83782 18.5072C9.09126 18.2523 9.42156 18.1993 9.68507 18.3519C10.0392 18.5583 10.385 18.7894 10.7611 18.9456C12.5965 19.7083 14.3679 19.5475 16.0633 18.519C16.1603 18.4606 16.2518 18.3902 16.3497 18.3327C16.5967 18.192 16.9133 18.2605 17.1585 18.5035Z\"\n        fill={secondaryColor}\n      />\n      <Path\n        d=\"M10.8901 14.3276C10.8937 15.1734 10.0968 15.9881 9.26511 15.99C8.32087 15.9918 7.53766 15.2346 7.53492 14.3185C7.53309 13.4133 8.30074 12.6406 9.20198 12.6406C10.1151 12.6406 10.8864 13.4106 10.8901 14.3276Z\"\n        fill={secondaryColor}\n      />\n    </IconSvg>\n  );\n}\n","import { JSX, useEffect, useRef } from \"react\";\nimport { Animated, Easing, Platform } from \"react-native\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { useRemScale } from \"../../utils/useRem\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  width: number;\n  height: number;\n  color?: string;\n}\n\nexport function IconSpinner(props: IProps): JSX.Element {\n  const color = props.color || Tailwind_semantic().icon.neutral;\n  const scale = useRemScale();\n  const spinValue = useRef(new Animated.Value(0)).current;\n\n  useEffect(() => {\n    const animation = Animated.loop(\n      Animated.timing(spinValue, {\n        toValue: 1,\n        duration: 1000,\n        easing: Easing.linear,\n        useNativeDriver: Platform.OS !== \"web\",\n      })\n    );\n    animation.start();\n    return () => animation.stop();\n  }, []);\n\n  const rotate = spinValue.interpolate({\n    inputRange: [0, 1],\n    outputRange: [\"0deg\", \"360deg\"],\n  });\n\n  return (\n    <Animated.View\n      style={{\n        width: Math.round(props.width * scale),\n        height: Math.round(props.height * scale),\n        transform: [{ rotate }],\n      }}\n    >\n      <IconSvg viewBox=\"0 0 512 512\" width={props.width} height={props.height}>\n        <Path\n          fill={color}\n          d=\"M256,150.6c-9,0-15.1-6-15.1-15.1V15.1C240.9,6,247,0,256,0c9,0,15.1,6,15.1,15.1v120.5C271.1,144.6,265,150.6,256,150.6z\"\n        />\n        <Path\n          fill={color}\n          d=\"M256,361.4c-9,0-15.1,6-15.1,15.1v120.5c0,9,6,15.1,15.1,15.1c9,0,15.1-6,15.1-15.1V376.5 C271.1,367.4,265,361.4,256,361.4\"\n        />\n        <Path\n          fill={color}\n          d=\"M376.6,34c-4.8,0-9.1,2.7-12.2,6.7l-60.2,103.9c-4.5,7.5-1.5,15.1,4.5,19.6c3,1.5,4.5,1.5,7.5,1.5 c4.5,0,9-3,12-6l60.2-103.9c4.5-7.5,1.5-15.1-4.5-19.6C381.5,34.6,379,34,376.6,34\"\n        />\n        <Path\n          fill={color}\n          d=\"M195.9,347.2c-4.8,0-9.1,2.7-12.2,6.7l-60.2,103.9c-4.5,7.5-1.5,15.1,4.5,19.6c3,1.5,4.5,1.5,7.5,1.5 c4.5,0,9-3,12-6l60.2-103.9c4.5-7.5,1.5-15.1-4.5-19.6C200.8,347.9,198.3,347.2,195.9,347.2\"\n        />\n        <Path\n          fill={color}\n          d=\"M134.7,32.5c-2.4,0-4.7,0.7-6.7,2.2c-6,4.5-9,13.6-4.5,19.6l60.2,103.9c3,4.5,7.5,7.5,12,7.5c3,0,4.5,0,7.5-3 c6-4.5,9-13.6,4.5-19.6L147.6,39.2C144.6,35.1,139.5,32.5,134.7,32.5\"\n        />\n        <Path\n          fill={color}\n          d=\"M315.5,345.7c-2.4,0-4.7,0.7-6.7,2.2c-6,4.5-9,13.6-4.5,19.6l60.2,103.9c3,4.5,7.5,7.5,12,7.5 c3,0,4.5-1.5,7.5-3c6-4.5,9-13.6,4.5-19.6l-60.2-103.9C325.3,348.4,320.3,345.7,315.5,345.7\"\n        />\n        <Path\n          fill={color}\n          d=\"M135.5,240.9H15.1C6,240.9,0,247,0,256c0,9,6,15.1,15.1,15.1h120.5c9,0,15.1-6,15.1-15.1 C150.6,247,144.6,240.9,135.5,240.9\"\n        />\n        <Path\n          fill={color}\n          d=\"M496.9,240.9H376.5c-9,0-15.1,6-15.1,15.1c0,9,6,15.1,15.1,15.1h120.5c9,0,15.1-6,15.1-15.1 C512,247,506,240.9,496.9,240.9\"\n        />\n        <Path\n          fill={color}\n          d=\"M48.3,121.3c-4.8,0-9.1,2.7-12.2,6.7c-4.5,7.5-1.5,15.1,4.5,19.6l103.9,60.2c3,1.5,4.5,1.5,7.5,1.5 c4.5,0,9-1.5,12-6c4.5-7.5,1.5-15.1-4.5-19.6L55.7,123.5C53.2,122,50.7,121.3,48.3,121.3\"\n        />\n        <Path\n          fill={color}\n          d=\"M361.5,302c-4.8,0-9.1,2.7-12.2,6.7c-4.5,7.5-1.5,15.1,4.5,19.6l103.9,60.2c3,1.5,4.5,1.5,7.5,1.5 c4.5,0,9-1.5,12.1-6c4.5-7.5,1.5-15.1-4.5-19.6l-103.9-60.2C366.4,302.7,363.9,302,361.5,302\"\n        />\n        <Path\n          fill={color}\n          d=\"M149.8,300.5c-2.4,0-4.7,0.7-6.7,2.2L39.2,362.9c-6,4.5-9,13.6-4.5,19.6c3,4.5,7.5,7.5,12.1,7.5c3,0,6,0,7.5-3 l103.9-60.2c6-4.5,9-13.6,4.5-19.6C159.6,303.2,154.6,300.5,149.8,300.5\"\n        />\n        <Path\n          fill={color}\n          d=\"M463,119.8c-2.4,0-4.7,0.7-6.8,2.2l-103.9,60.2c-6,4.5-9,13.6-4.5,19.6c3,4.5,7.5,7.5,12,7.5c3,0,4.5,0,7.5-3 l103.9-60.2c6-4.5,9-13.6,4.5-19.6C472.8,122.5,467.8,119.8,463,119.8\"\n        />\n      </IconSvg>\n    </Animated.View>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Circle, Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  size?: number;\n  color?: string;\n  className?: string;\n}\n\nexport function IconSun(props: IProps): JSX.Element {\n  const size = props.size ?? 20;\n  const color = props.color ?? Tailwind_semantic().icon.neutral;\n  return (\n    <IconSvg className={props.className} width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\">\n      <Circle cx=\"12\" cy=\"12\" r=\"4.5\" stroke={color} strokeWidth=\"2\" />\n      <Path\n        d=\"M12 2v2M12 20v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M2 12h2M20 12h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42\"\n        stroke={color}\n        strokeWidth=\"2\"\n        strokeLinecap=\"round\"\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Svg } from \"../primitives/svg\";\nimport type { ISvgComponentProps } from \"../primitives/svg\";\nimport { useRemScale } from \"../../utils/useRem\";\n\ntype IIconSvgProps = ISvgComponentProps & { noRemScale?: boolean };\n\nexport function IconSvg(props: IIconSvgProps): JSX.Element {\n  const { noRemScale, width, height, ...rest } = props;\n  const scale = useRemScale();\n  return (\n    <Svg\n      {...rest}\n      width={noRemScale ? width : IconSvg_scale(width, scale)}\n      height={noRemScale ? height : IconSvg_scale(height, scale)}\n    />\n  );\n}\n\nfunction IconSvg_scale(value: ISvgComponentProps[\"width\"], scale: number): ISvgComponentProps[\"width\"] {\n  return typeof value === \"number\" ? Math.round(value * scale) : value;\n}\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  size?: number;\n  color?: string;\n  className?: string;\n}\n\nexport function IconSwap(props: IProps): JSX.Element {\n  const size = props.size ?? 20;\n  const color = props.color ?? Tailwind_semantic().icon.neutral;\n  return (\n    <IconSvg className={props.className} width={size} height={size} viewBox=\"0 0 61 61\" fill=\"none\">\n      <Path\n        d=\"M58.1574 22.1348C57.5571 20.6512 55.7714 19.8993 54.1693 20.4551C52.5663 21.011 51.7552 22.6646 52.3555 24.1481C59.2796 41.2586 41.8841 58.2121 23.1916 52.9027L23.5299 52.2149C24.5126 50.2145 22.7941 47.9577 20.4102 48.1715L12.2173 48.9076C9.84535 49.1205 8.6117 51.6386 9.99591 53.4307L14.7799 59.6324C16.1662 61.4292 19.1353 61.1587 20.1211 59.1528L20.6079 58.1619C44.4367 65.5906 66.9846 43.9496 58.1574 22.1348Z\"\n        fill={color}\n      />\n      <Path\n        d=\"M37.0226 8.79372L36.6846 9.48426C35.6988 11.5017 37.4338 13.7572 39.8016 13.5435L47.9862 12.8044C50.346 12.5917 51.5956 10.0721 50.2066 8.26369L45.4258 2.03673C44.0418 0.233869 41.0743 0.504485 40.0894 2.51824L39.602 3.51485C16.1746 -3.82537 -6.86073 17.459 2.08804 39.6812C2.68776 41.1706 4.4719 41.9264 6.07251 41.3684C7.67312 40.8104 8.48445 39.1503 7.88473 37.66C0.889587 20.2893 18.5625 3.52512 37.0226 8.79372Z\"\n        fill={color}\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  size?: number;\n  color?: string;\n  className?: string;\n}\n\nexport function IconSwapSmall(props: IProps): JSX.Element {\n  const size = props.size ?? 12;\n  const color = props.color ?? Tailwind_semantic().icon.neutral;\n  return (\n    <IconSvg className={props.className} width={size} height={size} viewBox=\"0 0 12 12\" fill=\"none\" stroke={color}>\n      <Path\n        d=\"M9.71106 4.00694C9.01609 2.80719 7.71714 2 6.22939 2C4.54256 2 3.09843 3.03768 2.50217 4.50868M8.4903 4.50868H10.5V2.50174M2.78894 8.02083C3.48391 9.22059 4.78286 10.0278 6.27061 10.0278C7.95744 10.0278 9.40157 8.9901 9.99783 7.5191M4.0097 7.5191H2V9.52604\"\n        strokeWidth=\"1.2\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  style?: { [key: string]: string | number };\n  width?: number;\n  height?: number;\n  color?: string;\n}\n\nexport function IconTrash(props: IProps): JSX.Element {\n  const width = props.width || 17;\n  const height = props.height || 21;\n  const color = props.color || Tailwind_semantic().icon.neutral;\n  return (\n    <IconSvg style={props.style} width={width} height={height} viewBox=\"0 0 17 21\" fill=\"none\">\n      <Path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M4.86113 2.33333C4.86113 1.40711 5.57621 0.65625 6.45833 0.65625H10.3472C11.2293 0.65625 11.9445 1.40711 11.9445 2.33333V4.73957H15.2019C15.2058 4.73952 15.2096 4.73952 15.2135 4.73957H16.1805C16.5258 4.73957 16.8055 5.03339 16.8055 5.39582C16.8055 5.75829 16.5258 6.05207 16.1805 6.05207H15.7903L14.9885 17.8381C14.8925 19.2499 13.7736 20.3438 12.4256 20.3438H4.37996C3.03192 20.3438 1.91308 19.2499 1.81704 17.8381L1.01527 6.05207H0.625C0.279821 6.05207 0 5.75829 0 5.39582C0 5.03339 0.279821 4.73957 0.625 4.73957H1.59206C1.59594 4.73952 1.59981 4.73952 1.60368 4.73957H4.86113V2.33333ZM2.26846 6.05207L3.06387 17.7445C3.11317 18.4695 3.68771 19.0312 4.37996 19.0312H12.4256C13.1178 19.0312 13.6924 18.4695 13.7417 17.7445L14.5371 6.05207H2.26846ZM10.6945 4.73957H6.11113V2.33333C6.11113 2.13198 6.26658 1.96875 6.45833 1.96875H10.3472C10.539 1.96875 10.6945 2.13198 10.6945 2.33333V4.73957ZM6.45833 8.82293C6.8035 8.82293 7.08333 9.11671 7.08333 9.47918V15.6042C7.08333 15.9666 6.8035 16.2604 6.45833 16.2604C6.11317 16.2604 5.83333 15.9666 5.83333 15.6042V9.47918C5.83333 9.11671 6.11317 8.82293 6.45833 8.82293ZM10.3472 8.82293C10.6924 8.82293 10.9722 9.11671 10.9722 9.47918V15.6042C10.9722 15.9666 10.6924 16.2604 10.3472 16.2604C10.002 16.2604 9.72221 15.9666 9.72221 15.6042V9.47918C9.72221 9.11671 10.002 8.82293 10.3472 8.82293Z\"\n        fill={color}\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\n\ninterface IProps {\n  style?: { [key: string]: string | number };\n  size?: number;\n  className?: string;\n  color?: string;\n}\n\nexport function IconUser(props: IProps): JSX.Element {\n  const color = props.color || Tailwind_semantic().icon.neutral;\n  const size = props.size || 24;\n  return (\n    <IconSvg style={props.style} className={props.className} width={size} height={size} viewBox=\"0 0 48 48\" fill=\"none\">\n      <Path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M24 4.5C13.2304 4.5 4.5 13.2304 4.5 24C4.5 28.3561 5.92835 32.3786 8.34225 35.6246C13.0342 33.2014 18.3593 31.8333 24 31.8333C29.6407 31.8333 34.9658 33.2014 39.6577 35.6246C42.0716 32.3786 43.5 28.3561 43.5 24C43.5 13.2304 34.7696 4.5 24 4.5ZM41.2135 38.4903C44.5122 34.5756 46.5 29.5199 46.5 24C46.5 11.5736 36.4264 1.5 24 1.5C11.5736 1.5 1.5 11.5736 1.5 24C1.5 29.5199 3.48773 34.5756 6.78646 38.4902C6.79811 38.5045 6.81 38.5186 6.8221 38.5324C10.9493 43.4061 17.1134 46.5 24 46.5C30.8863 46.5 37.0501 43.4064 41.1774 38.5331C41.1896 38.5191 41.2017 38.5048 41.2135 38.4903ZM37.6176 37.9574C33.5048 35.9563 28.8853 34.8333 24 34.8333C19.1147 34.8333 14.4952 35.9563 10.3824 37.9575C13.8968 41.3869 18.7016 43.5 24 43.5C29.2984 43.5 34.1032 41.3869 37.6176 37.9574ZM24 13.8333C20.9624 13.8333 18.5 16.2958 18.5 19.3333C18.5 22.3709 20.9624 24.8333 24 24.8333C27.0376 24.8333 29.5 22.3709 29.5 19.3333C29.5 16.2958 27.0376 13.8333 24 13.8333ZM15.5 19.3333C15.5 14.6389 19.3056 10.8333 24 10.8333C28.6944 10.8333 32.5 14.6389 32.5 19.3333C32.5 24.0278 28.6944 27.8333 24 27.8333C19.3056 27.8333 15.5 24.0278 15.5 19.3333Z\"\n        fill={color}\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  width?: number;\n  height?: number;\n  color?: string;\n  className?: string;\n  style?: Record<string, unknown>;\n}\n\nexport function IconWatch(props: IProps): JSX.Element {\n  const color = props.color || Tailwind_semantic().icon.neutral;\n  const width = props.width || 17;\n  const height = props.height || 22;\n  return (\n    <IconSvg width={width} height={height} viewBox=\"0 0 17 22\" fill=\"none\">\n      <Path\n        d=\"M12.187 6.72466L13.2643 5.24117M6.58297 3.66675H10.2496M8.41667 8.2493V11.9167H12.0833M14.8333 11.9167C14.8333 15.4606 11.9605 18.3334 8.41667 18.3334C4.87283 18.3334 2 15.4606 2 11.9167C2 8.37291 4.87283 5.50008 8.41667 5.50008C11.9605 5.50008 14.8333 8.37291 14.8333 11.9167Z\"\n        stroke={color}\n        strokeWidth=\"1.5\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\n\ninterface IProps {\n  style?: { [key: string]: string | number };\n  size?: number;\n  className?: string;\n  color?: string;\n  secondaryColor?: string;\n}\n\nexport function IconYoutube(props: IProps): JSX.Element {\n  const size = props.size || 24;\n  const color = props.color || Tailwind_semantic().icon.neutral;\n  const secondaryColor = props.secondaryColor || Tailwind_semantic().icon.white;\n  return (\n    <IconSvg width={size} height={size} className={props.className} style={props.style} viewBox=\"0 0 26 26\" fill=\"none\">\n      <Path\n        d=\"M24.9772 6.98253C24.6892 5.90623 23.8433 5.06041 22.767 4.77229C20.8182 4.24957 13 4.24957 13 4.24957C13 4.24957 5.18183 4.24957 3.23295 4.77229C2.15665 5.06041 1.31083 5.90623 1.02272 6.98253C0.5 8.93141 0.5 13 0.5 13C0.5 13 0.5 17.0686 1.02272 19.0175C1.31083 20.0938 2.15665 20.9396 3.23295 21.2276C5.18183 21.7504 13 21.7504 13 21.7504C13 21.7504 20.8182 21.7504 22.767 21.2276C23.8433 20.9396 24.6892 20.0938 24.9772 19.0175C25.5 17.0686 25.5 13 25.5 13C25.5 13 25.4979 8.93141 24.9772 6.98253Z\"\n        fill={color}\n      />\n      <Path d=\"M10.4978 16.7499L16.9927 13.0003L10.4978 9.25073V16.7499Z\" fill={secondaryColor} />\n    </IconSvg>\n  );\n}\n","import React, { JSX, Ref, forwardRef, useCallback, useEffect, useImperativeHandle, useRef, useState } from \"react\";\nimport { UidFactory_generateUid } from \"../utils/generator\";\nimport { StringUtils_dashcase } from \"../utils/string\";\nimport { IEither } from \"../utils/types\";\nimport { MathUtils_normalizeNumStr } from \"../utils/math\";\n\nexport const inputClassName =\n  \"inline-block w-full px-4 text-base py-2 leading-normal bg-background-default border border-border-prominent rounded-lg appearance-none focus:outline-none focus:shadow-outline text-base\";\n\nexport type IValidationError = \"required\" | \"pattern-mismatch\";\n\nexport interface IInputHandle {\n  touch: () => void;\n}\n\nexport interface IProps\n  extends Omit<\n    React.InputHTMLAttributes<HTMLInputElement> & React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n    \"ref\" | \"autoCapitalize\" | \"autoCorrect\"\n  > {\n  label?: string;\n  identifier?: string;\n  multiline?: number;\n  changeType?: \"onblur\" | \"oninput\";\n  isLabelOutside?: boolean;\n  defaultValue?: number | string | readonly string[];\n  inputSize?: \"md\" | \"sm\";\n  labelSize?: \"xs\" | \"sm\";\n  errorMessage?: string;\n  patternMessage?: string;\n  requiredMessage?: string;\n  changeHandler?: (e: IEither<string, Set<IValidationError>>) => void;\n  handleRef?: Ref<IInputHandle>;\n  autoCapitalize?: \"none\" | \"sentences\" | \"words\" | \"characters\";\n  autoCorrect?: boolean;\n}\n\nexport function selectInputOnFocus(e: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>): boolean | undefined {\n  const target = e.target;\n  if (target instanceof HTMLInputElement) {\n    const handleNumber = target.type === \"number\";\n    if (handleNumber) {\n      target.type = \"text\";\n    }\n    const value = (target as HTMLInputElement).value;\n    target.setSelectionRange(0, value.length);\n    if (handleNumber) {\n      target.type = \"number\";\n    }\n    return false;\n  }\n  return undefined;\n}\n\nexport const Input = forwardRef((props: IProps, ref: Ref<HTMLInputElement> | Ref<HTMLTextAreaElement>): JSX.Element => {\n  const {\n    inputSize,\n    label,\n    changeHandler,\n    errorMessage,\n    patternMessage,\n    requiredMessage,\n    changeType: changeTypeProp,\n    isLabelOutside,\n    labelSize: labelSizeProp,\n    identifier: identifierProp,\n    multiline,\n    value: valueProp,\n    defaultValue: _defaultValue,\n    handleRef: _handleRef,\n    autoCapitalize,\n    autoCorrect,\n    ...otherProps\n  } = props;\n  const autoCorrectStr = autoCorrect == null ? undefined : autoCorrect ? \"on\" : \"off\";\n  const changeType = changeTypeProp || \"onblur\";\n  const identifier = identifierProp || StringUtils_dashcase((label || UidFactory_generateUid(8))?.toLowerCase());\n  const [validationErrors, setValidationErrors] = useState<Set<IValidationError>>(new Set());\n  const [touched, setTouched] = useState(false);\n  const size = inputSize || \"md\";\n\n  const internalInputRef = useRef<HTMLInputElement | HTMLTextAreaElement | null>(null);\n  const setInputRef = useCallback(\n    (el: HTMLInputElement | HTMLTextAreaElement | null) => {\n      internalInputRef.current = el;\n      if (typeof ref === \"function\") {\n        (ref as (instance: HTMLInputElement | HTMLTextAreaElement | null) => void)(el);\n      } else if (ref) {\n        (ref as React.MutableRefObject<HTMLInputElement | HTMLTextAreaElement | null>).current = el;\n      }\n    },\n    [ref]\n  );\n\n  useImperativeHandle(props.handleRef, () => ({\n    touch: () => {\n      setTouched(true);\n      const el = internalInputRef.current;\n      if (el instanceof HTMLInputElement) {\n        validateTarget(el, \"snapshot\");\n      }\n    },\n  }));\n\n  const isControlled = valueProp !== undefined;\n  const [localValue, setLocalValue] = useState(valueProp);\n  useEffect(() => {\n    if (isControlled) {\n      setLocalValue(valueProp);\n    }\n  }, [valueProp, isControlled]);\n\n  const validateTarget = useCallback(\n    (target: HTMLInputElement, displayMode: \"clear-only\" | \"snapshot\") => {\n      if (props.type === \"number\") {\n        const normalized = MathUtils_normalizeNumStr(target.value);\n        if (normalized !== target.value) {\n          target.value = normalized;\n        }\n      }\n      const errors = new Set<IValidationError>();\n      if (target.validity.patternMismatch) {\n        errors.add(\"pattern-mismatch\");\n      }\n      if (target.validity.valueMissing) {\n        errors.add(\"required\");\n      }\n      if (displayMode === \"snapshot\") {\n        setValidationErrors(errors);\n      } else {\n        setValidationErrors((prev) => {\n          const next = new Set<IValidationError>();\n          for (const err of prev) {\n            if (errors.has(err)) {\n              next.add(err);\n            }\n          }\n          return next;\n        });\n      }\n      if (changeHandler != null) {\n        if (errors.size > 0) {\n          changeHandler({ success: false, error: errors });\n        } else {\n          changeHandler({ success: true, data: target.value });\n        }\n      }\n    },\n    [changeHandler, props.type]\n  );\n\n  const onInputHandler = useCallback(\n    (\n      e:\n        | React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>\n        | React.FormEvent<HTMLInputElement | HTMLTextAreaElement>\n    ) => {\n      const target = e.target;\n      if (target instanceof HTMLInputElement) {\n        validateTarget(target, \"clear-only\");\n      }\n    },\n    [validateTarget]\n  );\n\n  let className = \"relative block w-full text-left border rounded-lg appearance-none \";\n  if (errorMessage || (touched && validationErrors.size > 0)) {\n    className += \" border-text-error\";\n  } else {\n    className += \" border-form-inputstroke\";\n  }\n\n  const errorMessages = [];\n  if (errorMessage) {\n    errorMessages.push(errorMessage);\n  }\n  if (touched) {\n    for (const error of validationErrors) {\n      if (error === \"required\") {\n        errorMessages.push(requiredMessage);\n      } else if (error === \"pattern-mismatch\") {\n        errorMessages.push(patternMessage);\n      }\n    }\n  }\n\n  let containerClassName = \"inline-block bg-background-default rounded-lg\";\n  if (className.indexOf(\"w-full\") !== -1) {\n    containerClassName += \" w-full\";\n  }\n  const labelSizeVal = labelSizeProp || \"sm\";\n  return (\n    <div className={containerClassName}>\n      {label && isLabelOutside && (\n        <div className={`leading-none ${labelSizeVal === \"xs\" ? \"text-xs\" : \"text-sm\"} text-text-secondary pb-1`}>\n          {label}\n        </div>\n      )}\n      <label\n        data-testid={`${identifier}-label`}\n        className={className}\n        style={{\n          minHeight: size === \"md\" ? (isLabelOutside ? \"40px\" : \"48px\") : isLabelOutside ? \"32px\" : \"40px\",\n        }}\n      >\n        <div\n          className={`relative ${isLabelOutside ? \"mx-2\" : \"mx-4\"} ${size === \"md\" ? \"my-1\" : \"\"}`}\n          style={size !== \"md\" ? { marginTop: \"1px\", marginBottom: \"1px\" } : {}}\n        >\n          {label && !isLabelOutside && (\n            <div\n              className={`leading-none relative ${labelSizeVal === \"xs\" ? \"text-xs\" : \"text-sm\"} text-text-secondary`}\n              style={{ top: \"2px\", left: \"0\" }}\n            >\n              {label}\n            </div>\n          )}\n          <div className=\"relative flex\" style={{ top: label ? \"3px\" : \"8px\", left: \"0\" }}>\n            {multiline ? (\n              <textarea\n                data-testid={`${identifier}-input`}\n                ref={setInputRef}\n                value={isControlled ? localValue : undefined}\n                defaultValue={!isControlled ? props.defaultValue : undefined}\n                onChange={(e) => {\n                  if (isControlled) {\n                    setLocalValue(e.target.value);\n                  }\n                }}\n                onBlur={(e) => {\n                  setTouched(true);\n                  const target = e.target;\n                  if (target instanceof HTMLInputElement) {\n                    validateTarget(target, \"snapshot\");\n                  }\n                }}\n                onInput={changeType === \"oninput\" ? onInputHandler : undefined}\n                onFocus={selectInputOnFocus}\n                autoCapitalize={autoCapitalize}\n                autoCorrect={autoCorrectStr}\n                className=\"flex-1 w-0 min-w-0 text-base border-none focus:outline-none bg-background-default\"\n                style={{ fontSize: size === \"md\" ? \"16px\" : \"15px\", height: `${multiline * 25}px` }}\n                {...otherProps}\n              />\n            ) : (\n              <input\n                data-testid={`${identifier}-input`}\n                ref={setInputRef}\n                value={isControlled ? localValue : undefined}\n                defaultValue={!isControlled ? props.defaultValue : undefined}\n                onChange={(e) => {\n                  if (isControlled) {\n                    setLocalValue(e.target.value);\n                  }\n                }}\n                onBlur={(e) => {\n                  setTouched(true);\n                  const target = e.target;\n                  if (target instanceof HTMLInputElement) {\n                    validateTarget(target, \"snapshot\");\n                  }\n                }}\n                onInput={changeType === \"oninput\" ? onInputHandler : undefined}\n                onFocus={selectInputOnFocus}\n                autoCapitalize={autoCapitalize}\n                autoCorrect={autoCorrectStr}\n                className=\"flex-1 w-0 min-w-0 text-base border-none focus:outline-none bg-background-default\"\n                style={{ height: \"1.25rem\", fontSize: size === \"md\" ? \"16px\" : \"15px\" }}\n                {...otherProps}\n              />\n            )}\n          </div>\n        </div>\n      </label>\n      {errorMessages.map((message) => (\n        <div className=\"text-xs text-left text-text-error\" key={message}>\n          {message}\n        </div>\n      ))}\n    </div>\n  );\n});\n","import { JSX, useEffect, useState } from \"react\";\nimport { View, Pressable, Platform } from \"react-native\";\nimport { TextInput } from \"./primitives/textInput\";\nimport { Text } from \"./primitives/text\";\nimport { MathUtils_clamp, MathUtils_normalizeNumStr } from \"../utils/math\";\nimport { StringUtils_dashcase } from \"../utils/string\";\n\ninterface IInputNumberProps {\n  value?: number;\n  label?: string;\n  step?: number;\n  min?: number;\n  max?: number;\n  type?: string;\n  className?: string;\n  onUpdate: (value: number) => void;\n  \"data-name\"?: string;\n  \"data-testid\"?: string;\n  testID?: string;\n}\n\nexport function InputNumber(props: IInputNumberProps): JSX.Element {\n  const { value = 0, label, step = 1, min, max, onUpdate } = props;\n  const [text, setText] = useState(String(value));\n  const testId = `input-${StringUtils_dashcase(label || \"\")}`;\n\n  useEffect(() => {\n    const parsed = Number(text);\n    if (isNaN(parsed) || parsed !== value) {\n      setText(String(value));\n    }\n  }, [value]);\n\n  function getNumericValue(t: string): number {\n    const v = Number(t);\n    return !isNaN(v) ? MathUtils_clamp(v, min, max) : (min ?? 0);\n  }\n\n  return (\n    <View className=\"w-full\">\n      {label && <Text className=\"mb-1 text-xs text-text-secondary\">{label}</Text>}\n      <View className=\"flex-row items-center gap-2\">\n        <Pressable\n          className=\"items-center justify-center w-scaled-10 h-scaled-10 border rounded-lg bg-background-purpledark border-border-neutral\"\n          data-testid={`${testId}-minus`}\n          testID={`${testId}-minus`}\n          onPress={() => {\n            const v = getNumericValue(text);\n            const newValue = MathUtils_clamp(v - step, min, max);\n            setText(String(newValue));\n            onUpdate(newValue);\n          }}\n        >\n          <Text className=\"text-xl font-bold leading-scaled-8\">-</Text>\n        </Pressable>\n        <View className=\"flex-row items-center flex-1\">\n          <TextInput\n            className=\"w-full h-scaled-10 px-4 text-base border rounded-lg bg-background-default border-border-prominent text-text-primary\"\n            style={Platform.OS === \"android\" ? { paddingVertical: 0, includeFontPadding: false } : undefined}\n            keyboardType=\"numeric\"\n            value={text}\n            testID={props.testID || `${testId}-field`}\n            data-testid={props.testID || `${testId}-field`}\n            onChangeText={(t) => {\n              const normalized = MathUtils_normalizeNumStr(t);\n              setText(normalized);\n              if (normalized !== \"\" && !isNaN(Number(normalized))) {\n                onUpdate(getNumericValue(normalized));\n              }\n            }}\n            onBlur={() => {\n              const v = getNumericValue(text);\n              setText(String(v));\n              onUpdate(v);\n            }}\n            selectTextOnFocus={Platform.OS === \"ios\"}\n          />\n        </View>\n        <Pressable\n          className=\"items-center justify-center w-scaled-10 h-scaled-10 border rounded-lg bg-background-purpledark border-border-neutral\"\n          data-testid={`${testId}-plus`}\n          testID={`${testId}-plus`}\n          onPress={() => {\n            const v = getNumericValue(text);\n            const newValue = MathUtils_clamp(v + step, min, max);\n            setText(String(newValue));\n            onUpdate(newValue);\n          }}\n        >\n          <Text className=\"text-xl font-bold leading-scaled-8\">+</Text>\n        </Pressable>\n      </View>\n    </View>\n  );\n}\n","import React, { JSX, RefObject, forwardRef, memo, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { StringUtils_dashcase } from \"../utils/string\";\nimport { IconKeyboardClose } from \"./icons/iconKeyboardClose\";\nimport { n, MathUtils_clamp } from \"../utils/math\";\nimport { IPercentageUnit, IUnit } from \"../types\";\nimport { IconCalculator } from \"./icons/iconCalculator\";\nimport { Mobile_isMobile } from \"../../lambda/utils/mobile\";\nimport { useModal } from \"../navigation/ModalStateContext\";\nimport { IconBackspace } from \"./icons/iconBackspace\";\nimport { lg } from \"../utils/posthog\";\nimport { FocusedInputFlush_register, FocusedInputFlush_unregister } from \"../utils/focusedInputFlush\";\nimport { useRem } from \"../utils/useRem\";\nimport { FitText_fontSize } from \"../utils/fitText\";\n\nexport type IInputCommitMode = \"live\" | \"debounced\" | \"blur\";\n\ninterface IInputNumber2Props {\n  name: string;\n  placeholder?: string;\n  value?: number;\n  width?: number;\n  autowidth?: boolean;\n  step?: number;\n  min?: number;\n  max?: number;\n  tabIndex?: number;\n  initialValue?: number;\n  onNext?: (value: number | undefined) => number;\n  onPrev?: (value: number | undefined) => number;\n  onInput?: (value: number | undefined) => void;\n  onPreview?: (value: number | undefined) => void;\n  onBlur?: (value: number | undefined) => void;\n  keyboardAddon?: JSX.Element;\n  after?: () => JSX.Element | undefined;\n  allowDot?: boolean;\n  allowNegative?: boolean;\n  enableCalculator?: boolean;\n  enableUnits?: (IUnit | IPercentageUnit)[];\n  onChangeUnits?: (unit: IUnit | IPercentageUnit) => void;\n  selectedUnit?: IUnit | IPercentageUnit;\n  showUnitInside?: boolean;\n  inputCommitMode?: IInputCommitMode;\n  inputDebounceMs?: number;\n  \"data-testid\"?: string;\n  testID?: string;\n}\n\nfunction clamp(value: string | number, min?: number, max?: number): number | undefined {\n  if (value === \"\") {\n    return undefined;\n  }\n  const num = MathUtils_clamp(Number(value), min, max);\n  if (isNaN(num)) {\n    return MathUtils_clamp(0, min, max);\n  }\n  return num;\n}\n\nlet nextPadOwnerId = 1;\nlet activePadOwnerId: number | null = null;\n\nfunction InputNumber2Inner(props: IInputNumber2Props): JSX.Element {\n  const remValue = useRem();\n  const initialValue = props.value != null ? n(props.value) : \"\";\n  const [value, setValue] = useState(initialValue);\n  const [isFocused, setIsFocused] = useState(false);\n  const [isTyping, setIsTyping] = useState(false);\n\n  const inputRef = useRef<HTMLInputElement>(null);\n  const containerRef = useRef<HTMLDivElement>(null);\n  const valueRef = useRef(value);\n  const keyboardRef = useRef<HTMLDivElement>(null);\n  const switchRef = useRef(false);\n  const onClickTarget = useRef<HTMLElement>(null);\n  const isFocusedRef = useRef(isFocused);\n  const isTypingRef = useRef(isTyping);\n  const allowDotRef = useRef(!!props.allowDot);\n  const allowNegativeRef = useRef(!!props.allowNegative);\n  const [isMobile, setIsMobile] = useState(false);\n  const [isCalculatorOpen, setIsCalculatorOpen] = useState(false);\n  const isCalculatorOpenRef = useRef(isCalculatorOpen);\n  const openCalculator = useModal(\"repMaxCalculatorModal\", (weightValue) => {\n    if (debounceTimerRef.current != null) {\n      clearTimeout(debounceTimerRef.current);\n      debounceTimerRef.current = null;\n    }\n    hasPendingInputRef.current = false;\n    pendingInputRef.current = undefined;\n    const newValue = clamp(weightValue, props.min, props.max);\n    valueRef.current = newValue?.toString() ?? \"\";\n    setValue(newValue?.toString() ?? \"\");\n    onPreviewRef.current?.(newValue);\n    if (props.onBlur) {\n      props.onBlur(newValue);\n    }\n    setIsCalculatorOpen(false);\n  });\n  const onBlurRef = useRef<((v: number | undefined) => void) | undefined>(props.onBlur);\n  const onInputRef = useRef<((v: number | undefined) => void) | undefined>(props.onInput);\n  const onPreviewRef = useRef<((v: number | undefined) => void) | undefined>(props.onPreview);\n  const onNextRef = useRef<((v: number | undefined) => number) | undefined>(props.onNext);\n  const onPrevRef = useRef<((v: number | undefined) => number) | undefined>(props.onPrev);\n  const onChangeUnitsRef = useRef<((u: IUnit | IPercentageUnit) => void) | undefined>(props.onChangeUnits);\n  const minRef = useRef(props.min);\n  const maxRef = useRef(props.max);\n  const stepRef = useRef(props.step);\n  const selectedUnitRef = useRef(props.selectedUnit);\n  const initialValueRef = useRef(props.initialValue);\n  const commitMode: IInputCommitMode = props.inputCommitMode ?? \"debounced\";\n  const debounceMs = props.inputDebounceMs ?? 150;\n  const commitModeRef = useRef(commitMode);\n  const debounceMsRef = useRef(debounceMs);\n  const debounceTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n  const pendingInputRef = useRef<number | undefined>(undefined);\n  const hasPendingInputRef = useRef(false);\n  onBlurRef.current = props.onBlur;\n  onInputRef.current = props.onInput;\n  onPreviewRef.current = props.onPreview;\n  onNextRef.current = props.onNext;\n  onPrevRef.current = props.onPrev;\n  onChangeUnitsRef.current = props.onChangeUnits;\n  minRef.current = props.min;\n  maxRef.current = props.max;\n  stepRef.current = props.step;\n  selectedUnitRef.current = props.selectedUnit;\n  initialValueRef.current = props.initialValue;\n  commitModeRef.current = commitMode;\n  debounceMsRef.current = debounceMs;\n  useEffect(() => {\n    setIsMobile(Mobile_isMobile(window.navigator?.userAgent || \"\"));\n  }, []);\n\n  const flushPendingInput = useCallback(() => {\n    if (debounceTimerRef.current != null) {\n      clearTimeout(debounceTimerRef.current);\n      debounceTimerRef.current = null;\n    }\n    if (hasPendingInputRef.current && onInputRef.current) {\n      const pending = pendingInputRef.current;\n      hasPendingInputRef.current = false;\n      pendingInputRef.current = undefined;\n      onInputRef.current(pending);\n    }\n  }, []);\n\n  const cancelPendingInput = useCallback(() => {\n    if (debounceTimerRef.current != null) {\n      clearTimeout(debounceTimerRef.current);\n      debounceTimerRef.current = null;\n    }\n    hasPendingInputRef.current = false;\n    pendingInputRef.current = undefined;\n  }, []);\n\n  useEffect(() => {\n    return () => {\n      flushPendingInput();\n      if (isFocusedRef.current) {\n        const newValueNum = clamp(valueRef.current, minRef.current, maxRef.current);\n        if (onBlurRef.current) {\n          onBlurRef.current(newValueNum);\n        }\n      }\n    };\n  }, [flushPendingInput]);\n\n  const paddedScrollerRef = useRef<HTMLElement | null>(null);\n  const padOwnerIdRef = useRef<number>(0);\n  if (padOwnerIdRef.current === 0) {\n    nextPadOwnerId += 1;\n    padOwnerIdRef.current = nextPadOwnerId;\n  }\n  const debugSessionRef = useRef<number>(0);\n  const outsideTouchCountRef = useRef<number>(0);\n\n  function resetKeyboardStyles(): void {\n    if (activePadOwnerId !== padOwnerIdRef.current) {\n      return;\n    }\n    document.body.classList.remove(\"show-keyboard\");\n    document.querySelectorAll(\".bottom-sticked\").forEach((el) => {\n      if (el instanceof HTMLElement) {\n        el.style.bottom = \"0px\";\n      }\n    });\n    if (paddedScrollerRef.current) {\n      paddedScrollerRef.current.style.paddingBottom = \"\";\n      paddedScrollerRef.current = null;\n    }\n    activePadOwnerId = null;\n  }\n\n  useEffect(() => {\n    if (initialValue === valueRef.current) {\n      return;\n    }\n    if (isTypingRef.current) {\n      return;\n    }\n    valueRef.current = initialValue;\n    setValue(initialValue);\n  }, [props.value]);\n\n  isFocusedRef.current = isFocused;\n  allowDotRef.current = !!props.allowDot;\n  allowNegativeRef.current = !!props.allowNegative;\n  isCalculatorOpenRef.current = !!isCalculatorOpen;\n\n  const blurRef = useRef<((debugCaller?: string) => void) | null>(null);\n  const openCalculatorRef = useRef(openCalculator);\n  openCalculatorRef.current = openCalculator;\n\n  const handleInput = useCallback((key: string): void => {\n    let newValue = valueRef.current;\n    if (!isTypingRef.current) {\n      newValue = \"\";\n    }\n    const dynMaxLength =\n      (maxRef.current?.toString().length ?? 5) + (allowDotRef.current ? 3 : 0) + (allowNegativeRef.current ? 1 : 0);\n    if (key === \"⌫\") {\n      newValue = newValue.slice(0, -1);\n    } else if (key === \"-\") {\n      if (allowNegativeRef.current) {\n        if (newValue[0] === \"-\") {\n          newValue = newValue.slice(1);\n        } else if (!newValue.includes(\"-\")) {\n          newValue = `-${newValue}`;\n        }\n      }\n    } else if (key === \".\" || key === \",\") {\n      if (allowDotRef.current && !newValue.includes(\".\")) {\n        newValue += \".\";\n      }\n    } else if (newValue.length < dynMaxLength) {\n      newValue += key;\n    }\n    if (!isTypingRef.current) {\n      setIsTyping(true);\n      isTypingRef.current = true;\n    }\n    valueRef.current = newValue;\n    setValue(newValue);\n    if (!newValue.endsWith(\".\")) {\n      const newValueNum = clamp(newValue, minRef.current, maxRef.current);\n      onPreviewRef.current?.(newValueNum);\n      if (onInputRef.current) {\n        const mode = commitModeRef.current;\n        if (mode === \"live\") {\n          onInputRef.current(newValueNum);\n        } else if (mode === \"debounced\") {\n          pendingInputRef.current = newValueNum;\n          hasPendingInputRef.current = true;\n          if (debounceTimerRef.current != null) {\n            clearTimeout(debounceTimerRef.current);\n          }\n          debounceTimerRef.current = setTimeout(() => {\n            debounceTimerRef.current = null;\n            if (hasPendingInputRef.current && onInputRef.current) {\n              const v = pendingInputRef.current;\n              hasPendingInputRef.current = false;\n              pendingInputRef.current = undefined;\n              onInputRef.current(v);\n            }\n          }, debounceMsRef.current);\n        }\n      }\n    }\n  }, []);\n\n  const blur = useCallback(\n    (debugCaller: string = \"unknown\") => {\n      if (!isFocusedRef.current) {\n        return;\n      }\n      isFocusedRef.current = false;\n      lg(\"kbd-blur-applied\", { caller: debugCaller, sid: debugSessionRef.current });\n      const closedViaKbdClose = debugCaller === \"keyboard-close-button\" || debugCaller === \"maybeBlur-keyboard-close\";\n      if (closedViaKbdClose && outsideTouchCountRef.current >= 2) {\n        lg(\"kbd-frustration-close\", {\n          sid: debugSessionRef.current,\n          outsideTaps: outsideTouchCountRef.current,\n          caller: debugCaller,\n        });\n      }\n      outsideTouchCountRef.current = 0;\n      cancelPendingInput();\n      setIsFocused(false);\n      setIsTyping(false);\n      isTypingRef.current = false;\n      const newValueNum = clamp(valueRef.current, minRef.current, maxRef.current);\n      valueRef.current = newValueNum != null ? newValueNum.toString() : \"\";\n      setValue(newValueNum != null ? newValueNum.toString() : \"\");\n      onPreviewRef.current?.(newValueNum);\n      if (onBlurRef.current) {\n        onBlurRef.current(newValueNum);\n      }\n      switchRef.current = false;\n    },\n    [cancelPendingInput]\n  );\n\n  useEffect(() => {\n    blurRef.current = blur;\n  }, [blur]);\n\n  const onKeyboardClose = useCallback(() => {\n    blurRef.current?.(\"keyboard-close-button\");\n  }, []);\n\n  const onPlus = useCallback(() => {\n    cancelPendingInput();\n    const current = valueRef.current === \"\" ? (initialValueRef.current ?? 0) : Number(valueRef.current);\n    const nextValue = onNextRef.current ? onNextRef.current(current) : current + (stepRef.current ?? 1);\n    const newValue = clamp(nextValue, minRef.current, maxRef.current);\n    valueRef.current = newValue != null ? newValue.toString() : \"\";\n    setValue(newValue != null ? newValue.toString() : \"\");\n    onPreviewRef.current?.(newValue);\n    if (commitModeRef.current !== \"blur\" && onInputRef.current) {\n      onInputRef.current(newValue);\n    }\n  }, [cancelPendingInput]);\n\n  const onMinus = useCallback(() => {\n    cancelPendingInput();\n    const current = valueRef.current === \"\" ? (initialValueRef.current ?? 0) : Number(valueRef.current);\n    const prevValue = onPrevRef.current ? onPrevRef.current(current) : current - (stepRef.current ?? 1);\n    const newValue = clamp(prevValue, minRef.current, maxRef.current);\n    valueRef.current = newValue != null ? newValue.toString() : \"\";\n    setValue(newValue != null ? newValue.toString() : \"\");\n    onPreviewRef.current?.(newValue);\n    if (commitModeRef.current !== \"blur\" && onInputRef.current) {\n      onInputRef.current(newValue);\n    }\n  }, [cancelPendingInput]);\n\n  const onShowCalculator = useCallback(() => {\n    blurRef.current?.(\"show-calculator\");\n    setIsCalculatorOpen(true);\n    const unit = selectedUnitRef.current;\n    if (unit && unit !== \"%\") {\n      openCalculatorRef.current({ unit });\n    }\n  }, []);\n\n  const onChangeUnits = useCallback((unit: IUnit | IPercentageUnit) => {\n    onChangeUnitsRef.current?.(unit);\n  }, []);\n\n  useEffect(() => {\n    if (!isFocused) {\n      return;\n    }\n    const flush = (): void => {\n      blurRef.current?.(\"flush-from-outside\");\n    };\n    FocusedInputFlush_register(flush);\n    return () => {\n      FocusedInputFlush_unregister(flush);\n    };\n  }, [isFocused]);\n\n  const isTargetOutside = useCallback((target: HTMLElement | null): boolean => {\n    if (!isFocusedRef.current) {\n      return false;\n    }\n    let cur: HTMLElement | null = target;\n    while (cur) {\n      if (cur === containerRef.current || cur === keyboardRef.current) {\n        return false;\n      }\n      if (cur === document.body) {\n        return true;\n      }\n      cur = cur.parentElement;\n    }\n    return true;\n  }, []);\n\n  useEffect(() => {\n    if (isFocused) {\n      if (props.value == null && props.initialValue != null) {\n        valueRef.current = props.initialValue?.toString() ?? \"\";\n        setValue(props.initialValue?.toString() ?? \"\");\n      }\n      if (!isMobile) {\n        return;\n      }\n      document.body.classList.add(\"show-keyboard\");\n      const keyboardHeight = keyboardRef.current?.clientHeight ?? 0;\n\n      document.querySelectorAll(\".bottom-sticked\").forEach((el) => {\n        if (el instanceof HTMLElement) {\n          el.style.bottom = `${keyboardHeight}px`;\n        }\n      });\n\n      let scrollableContainer = containerRef.current?.parentElement as HTMLElement | null;\n      while (scrollableContainer && scrollableContainer !== document.documentElement) {\n        const overflowY = getComputedStyle(scrollableContainer).overflowY;\n        if (overflowY === \"auto\" || overflowY === \"scroll\" || overflowY === \"overlay\") {\n          break;\n        }\n        scrollableContainer = scrollableContainer.parentElement;\n      }\n      scrollableContainer = scrollableContainer ?? document.documentElement;\n\n      const contentEl = scrollableContainer.firstElementChild as HTMLElement | null;\n      const insideShiftedSheet = scrollableContainer.closest(\".bottom-sticked\") != null;\n      if (scrollableContainer !== document.documentElement && contentEl && !insideShiftedSheet) {\n        contentEl.style.paddingBottom = `${keyboardHeight}px`;\n        paddedScrollerRef.current = contentEl;\n      }\n      activePadOwnerId = padOwnerIdRef.current;\n\n      const inputRect = containerRef.current?.getBoundingClientRect();\n      if (inputRect) {\n        const scrollerRect =\n          scrollableContainer === document.documentElement\n            ? { top: 0, bottom: window.innerHeight }\n            : scrollableContainer.getBoundingClientRect();\n        const visibleTop = scrollerRect.top;\n        const visibleBottom = Math.min(scrollerRect.bottom, window.innerHeight - keyboardHeight);\n        const margin = 16;\n\n        if (inputRect.bottom + margin > visibleBottom || inputRect.top - margin < visibleTop) {\n          const inputCenter = (inputRect.top + inputRect.bottom) / 2;\n          const targetCenter = (visibleTop + visibleBottom) / 2;\n          const delta = inputCenter - targetCenter;\n          scrollableContainer.scrollBy({ top: delta, behavior: \"smooth\" });\n        }\n      }\n    } else {\n      if (!isMobile) {\n        return;\n      }\n      if (!switchRef.current) {\n        resetKeyboardStyles();\n      }\n      switchRef.current = false;\n    }\n    return () => resetKeyboardStyles();\n  }, [isFocused, props.initialValue]);\n\n  useEffect(() => {\n    const keyboardHandler = (event: KeyboardEvent): void => {\n      if (!isFocusedRef.current) {\n        return;\n      }\n      if (event.key === \"Escape\") {\n        blur(\"escape\");\n      } else if (event.key === \"Enter\") {\n        blur(\"enter\");\n      } else if (event.key === \"Backspace\") {\n        handleInput(\"⌫\");\n      } else if (\n        event.key === \"0\" ||\n        event.key === \"1\" ||\n        event.key === \"2\" ||\n        event.key === \"3\" ||\n        event.key === \"4\" ||\n        event.key === \"5\" ||\n        event.key === \"6\" ||\n        event.key === \"7\" ||\n        event.key === \"8\" ||\n        event.key === \"9\" ||\n        (props.allowDot && (event.key === \".\" || event.key === \",\")) ||\n        (props.allowNegative && event.key === \"-\")\n      ) {\n        handleInput(event.key);\n      }\n    };\n    document.addEventListener(\"keydown\", keyboardHandler);\n    return () => {\n      document.removeEventListener(\"keydown\", keyboardHandler);\n    };\n  }, []);\n\n  const maybeBlur = useCallback((target: HTMLElement | null): boolean => {\n    if (target == null) {\n      blur(\"maybeBlur-null-target\");\n      return true;\n    }\n    let foundCurrentInput = false;\n    let foundOtherInput: HTMLElement | null = null;\n    let reachedBody = false;\n    while (target) {\n      if (target.classList?.contains(\"keyboard-close\")) {\n        blur(\"maybeBlur-keyboard-close\");\n        return true;\n      } else if (target === containerRef.current || target === keyboardRef.current) {\n        foundCurrentInput = true;\n        break;\n      } else if (target !== containerRef.current && target.classList?.contains(\"input-number\")) {\n        foundOtherInput = target;\n        break;\n      } else if (target === document.body) {\n        reachedBody = true;\n        break;\n      }\n      target = target.parentElement;\n    }\n    if (foundOtherInput) {\n      blur(\"maybeBlur-switch\");\n      switchRef.current = true;\n      const nextInput = foundOtherInput.querySelector(\".input-number-child\") as HTMLElement | null;\n      if (nextInput) {\n        nextInput.focus();\n      }\n      return true;\n    } else if (!foundCurrentInput) {\n      blur(reachedBody ? \"maybeBlur-outside\" : \"maybeBlur-detached\");\n      return true;\n    }\n    return false;\n  }, []);\n\n  useEffect(() => {\n    let armedFinish: (() => void) | null = null;\n    const armDeferredBlur = (target: HTMLElement): void => {\n      if (armedFinish) {\n        return;\n      }\n      let done = false;\n      const finish = (viaFallback: boolean): void => {\n        if (done) {\n          return;\n        }\n        done = true;\n        document.removeEventListener(\"click\", onClick, true);\n        clearTimeout(fallbackTimer);\n        armedFinish = null;\n        if (viaFallback && isFocusedRef.current) {\n          lg(\"kbd-click-suppressed\", {\n            sid: debugSessionRef.current,\n            tag: (target.tagName ?? \"null\").toLowerCase(),\n            cls: (target.className?.toString() ?? \"\").slice(0, 60),\n          });\n        }\n        if (isFocusedRef.current) {\n          maybeBlur(target);\n        }\n      };\n      armedFinish = () => finish(false);\n      const onClick = (): void => {\n        requestAnimationFrame(() => finish(false));\n      };\n      document.addEventListener(\"click\", onClick, true);\n      const fallbackTimer = setTimeout(() => finish(true), 250);\n    };\n\n    const touchHandler = (event: TouchEvent): void => {\n      if (isCalculatorOpenRef.current) {\n        return;\n      }\n      const target = (event.target || event.currentTarget) as HTMLElement;\n      onClickTarget.current = target;\n      if (isTargetOutside(target)) {\n        outsideTouchCountRef.current += 1;\n        armDeferredBlur(target);\n      }\n    };\n    const mouseHandler = (event: MouseEvent): void => {\n      if (isCalculatorOpenRef.current) {\n        return;\n      }\n      const target = (event.target || event.currentTarget) as HTMLElement;\n      onClickTarget.current = target;\n      if (isTargetOutside(target)) {\n        armDeferredBlur(target);\n      }\n    };\n    document.addEventListener(\"touchstart\", touchHandler);\n    document.addEventListener(\"mousedown\", mouseHandler);\n    return () => {\n      document.removeEventListener(\"touchstart\", touchHandler);\n      document.removeEventListener(\"mousedown\", mouseHandler);\n      armedFinish?.();\n    };\n  }, [isTargetOutside, maybeBlur]);\n\n  const baseFontSize = (14 * remValue) / 16;\n  const availableTextWidth = props.autowidth ? 0 : (props.width ?? 4) * remValue - 6;\n  const valueFontSize = FitText_fontSize(value ?? \"\", availableTextWidth, baseFontSize);\n  const placeholderFontSize = FitText_fontSize(props.placeholder ?? \"\", availableTextWidth, baseFontSize);\n\n  return (\n    <div ref={containerRef} className=\"input-number\">\n      <div\n        className=\"flex items-center justify-center h-scaled-6 border rounded bg-background-default border-border-prominent input-number-child\"\n        style={\n          props.autowidth ? { paddingLeft: \"0.5rem\", paddingRight: \"0.5rem\" } : { width: `${props.width ?? 4}rem` }\n        }\n        tabIndex={props.tabIndex ?? 0}\n        onFocus={() => {\n          debugSessionRef.current = Date.now();\n          lg(\"kbd-focus\", { sid: debugSessionRef.current });\n          lg(`focus-nm-${props.name}`);\n          setIsFocused(true);\n        }}\n        onBlur={(event) => {\n          setTimeout(() => {\n            const target = (event.relatedTarget || onClickTarget.current) as HTMLElement | null;\n            const result = maybeBlur(target);\n            if (!result) {\n              const currentTarget = event.currentTarget || event.target;\n              event.preventDefault();\n              (event.nativeEvent as Event).stopImmediatePropagation();\n              if (currentTarget) {\n                currentTarget.focus();\n              }\n            }\n          }, 10);\n        }}\n        onClick={(e) => {\n          e.currentTarget.focus();\n        }}\n        data-testid={`input-${StringUtils_dashcase(props.name)}-field`}\n      >\n        <div ref={inputRef} className=\"leading-none\">\n          {!value && !isFocused && props.placeholder ? (\n            <span\n              className=\"text-sm text-text-secondarysubtle text-ellipsis whitespace-nowrap\"\n              style={{ fontSize: `${placeholderFontSize}px` }}\n            >\n              {props.placeholder}\n            </span>\n          ) : (\n            <span\n              className={`text-sm inline-block whitespace-nowrap ${isFocused && !isTypingRef.current ? \"bg-background-cardpurpleselected\" : \"\"}`}\n              style={{ padding: value ? \"1px\" : \"0\", fontSize: `${valueFontSize}px` }}\n            >\n              {value}\n            </span>\n          )}\n        </div>\n        {isFocused && (\n          <div\n            className=\"inline-block h-scaled-3 leading-none blinking bg-background-darkgray\"\n            style={{ width: \"1px\" }}\n          />\n        )}\n        {props.showUnitInside && props.selectedUnit && props.value != null && (\n          <div className=\"text-xs text-text-secondary\"> {props.selectedUnit}</div>\n        )}\n        {props.after && props.after()}\n      </div>\n      {isFocused && isMobile && (\n        <CustomKeyboard\n          ref={keyboardRef}\n          onInput={handleInput}\n          inputRef={inputRef}\n          keyboardAddon={props.keyboardAddon}\n          onBlur={onKeyboardClose}\n          onPlus={onPlus}\n          onMinus={onMinus}\n          allowDot={props.allowDot}\n          allowNegative={props.allowNegative}\n          enableCalculator={props.enableCalculator}\n          onShowCalculator={onShowCalculator}\n          enableUnits={props.enableUnits}\n          onChangeUnits={onChangeUnits}\n          selectedUnit={props.selectedUnit}\n        />\n      )}\n    </div>\n  );\n}\n\nexport const InputNumber2 = memo(InputNumber2Inner);\n\ninterface ICustomKeyboardProps {\n  onInput: (value: string) => void;\n  onBlur: () => void;\n  onPlus: () => void;\n  onMinus: () => void;\n  allowDot?: boolean;\n  allowNegative?: boolean;\n  inputRef: RefObject<HTMLInputElement | null>;\n  keyboardAddon?: JSX.Element;\n\n  enableCalculator?: boolean;\n  onShowCalculator?: () => void;\n\n  enableUnits?: (IUnit | IPercentageUnit)[];\n  onChangeUnits?: (unit: IUnit | IPercentageUnit) => void;\n  selectedUnit?: IUnit | IPercentageUnit;\n}\n\ninterface IKeyboardButtonProps {\n  label: string;\n  onPress: (label: string) => void;\n}\n\nconst KeyboardButton = memo(function KeyboardButton(props: IKeyboardButtonProps): JSX.Element {\n  const onClick = useCallback(() => props.onPress(props.label), [props.onPress, props.label]);\n  return (\n    <button\n      data-testid={`keyboard-button-${props.label}`}\n      className=\"p-2 text-2xl bg-background-default active:bg-background-neutral touch-manipulation text-text-primary\"\n      onClick={onClick}\n    >\n      {props.label}\n    </button>\n  );\n});\n\nconst CustomKeyboardInner = forwardRef((props: ICustomKeyboardProps, ref: React.ForwardedRef<HTMLDivElement>) => {\n  const containerRef = useMemo(\n    () => (typeof window !== \"undefined\" ? window.document.querySelector(\"#keyboard\") : undefined),\n    []\n  );\n  const keys = useMemo<string[]>(\n    () => [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", props.allowNegative ? \"-\" : \"\", \"0\", props.allowDot ? \".\" : \"\"],\n    [props.allowDot, props.allowNegative]\n  );\n  const handleBackspace = useCallback(() => props.onInput(\"⌫\"), [props.onInput]);\n\n  const element = (\n    <div\n      ref={ref}\n      id=\"keyboard-content\"\n      className=\"fixed bottom-0 left-0 w-full keyboard-shadow\"\n      style={{ zIndex: 70 }}\n    >\n      <div className=\"safe-area-inset-bottom bg-background-default\">\n        <div className=\"flex items-center w-full gap-2 px-4 bg-background-subtle\">\n          <div className=\"flex-1\">{props.keyboardAddon}</div>\n          {props.enableCalculator && (\n            <div className=\"py-2\">\n              <button\n                data-testid=\"keyboard-rm-calculator\"\n                className=\"flex items-center justify-center w-scaled-24 px-2 py-1 border rounded keyboard-close border-border-cardpurple bg-background-cardpurple\"\n                onClick={props.onShowCalculator}\n              >\n                <span className=\"mr-2\">RM</span>\n                <span>\n                  <IconCalculator size={14} />\n                </span>\n              </button>\n            </div>\n          )}\n        </div>\n        <div className=\"flex w-full gap-4 p-4 bg-background-default\">\n          <div className=\"grid flex-1 grid-cols-3 gap-2\">\n            {keys.map((key, i) =>\n              key ? <KeyboardButton key={key} label={key} onPress={props.onInput} /> : <div key={`empty-${i}`} />\n            )}\n          </div>\n          <div className=\"w-scaled-24 mt-2\">\n            <div className=\"mb-4\">\n              <button\n                className=\"flex items-center justify-center w-full pt-2 pb-1 border rounded touch-manipulation keyboard-close border-border-cardpurple bg-background-cardpurple\"\n                data-testid=\"keyboard-close\"\n                onClick={props.onBlur}\n              >\n                <IconKeyboardClose />\n              </button>\n            </div>\n            <div className=\"flex gap-1\">\n              <div className=\"flex-1\">\n                <button\n                  className=\"flex items-center justify-center w-full p-2 border rounded touch-manipulation rounded-e-none border-border-cardpurple bg-background-cardpurple text-icon-neutral\"\n                  data-testid=\"keyboard-minus\"\n                  onClick={props.onMinus}\n                >\n                  -\n                </button>\n              </div>\n              <div className=\"flex-1\">\n                <button\n                  className=\"flex items-center justify-center w-full p-2 border rounded touch-manipulation rounded-s-none border-border-cardpurple bg-background-cardpurple text-icon-neutral\"\n                  data-testid=\"keyboard-plus\"\n                  onClick={props.onPlus}\n                >\n                  +\n                </button>\n              </div>\n            </div>\n            {props.enableUnits && props.selectedUnit ? (\n              <div className=\"flex items-center h-scaled-10 gap-2 mt-4\">\n                {props.enableUnits.map((unit) => (\n                  <button\n                    key={unit}\n                    className={`flex text-icon-neutral touch-manipulation items-center  aspect-square justify-center flex-1 w-full border rounded ${unit === props.selectedUnit ? \"border-border-prominent bg-background-cardpurpleselected\" : \" border-border-cardpurple bg-background-cardpurple\"}`}\n                    data-testid={`keyboard-unit-${unit}`}\n                    onClick={() => {\n                      if (props.onChangeUnits) {\n                        props.onChangeUnits(unit);\n                      }\n                    }}\n                  >\n                    {unit}\n                  </button>\n                ))}\n              </div>\n            ) : (\n              <div className=\"h-scaled-10 mt-4\"></div>\n            )}\n            <div className=\"mt-4\">\n              <button\n                className=\"flex items-center justify-center w-full h-scaled-10 border rounded touch-manipulation border-border-cardpurple bg-background-cardpurple\"\n                data-testid={`keyboard-backspace`}\n                onClick={handleBackspace}\n              >\n                <IconBackspace />\n              </button>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n\n  return containerRef ? createPortal(element, containerRef) : element;\n});\n\nconst CustomKeyboard = memo(CustomKeyboardInner);\n","import { JSX, useEffect, useState } from \"react\";\nimport { View, Pressable, Platform } from \"react-native\";\nimport { TextInput } from \"./primitives/textInput\";\nimport { Text } from \"./primitives/text\";\nimport { Weight_buildPct, Weight_build, Weight_decrement, Weight_increment } from \"../models/weight\";\nimport { IExerciseType, IPercentage, ISettings, IUnit, IWeight } from \"../types\";\nimport { IconCalculator } from \"./icons/iconCalculator\";\nimport { useModal } from \"../navigation/ModalStateContext\";\nimport { StringUtils_dashcase } from \"../utils/string\";\nimport { MathUtils_normalizeNumStr } from \"../utils/math\";\nimport { InputWeightUnit } from \"./inputWeightUnit\";\n\ninterface IInputWeightProps {\n  value: IWeight | IPercentage;\n  label?: string;\n  exerciseType?: IExerciseType;\n  units?: (IUnit | \"%\")[];\n  settings: ISettings;\n  \"data-testid\"?: string;\n  testID?: string;\n  onUpdate: (weight: IWeight | IPercentage) => void;\n}\n\nexport function InputWeight(props: IInputWeightProps): JSX.Element {\n  const [text, setText] = useState(String(props.value.value));\n  const [unit, setUnit] = useState<IUnit | \"%\">(props.value.unit);\n  const testId = props.testID || `input-${StringUtils_dashcase(props.label || \"\")}`;\n  const availableUnits = props.units ?? ([\"kg\", \"lb\", \"%\"] as const);\n\n  useEffect(() => {\n    const parsed = Number(text);\n    if (isNaN(parsed) || parsed !== props.value.value) {\n      setText(String(props.value.value));\n    }\n    setUnit(props.value.unit);\n  }, [props.value.value, props.value.unit]);\n\n  function buildWeight(v: number, u: IUnit | \"%\"): IWeight | IPercentage {\n    return u === \"%\" ? Weight_buildPct(v) : Weight_build(v, u);\n  }\n\n  function getValue(): IWeight | IPercentage | undefined {\n    const v = Number(text);\n    if (isNaN(v)) {\n      return undefined;\n    }\n    return buildWeight(v, unit);\n  }\n\n  const openCalculator = useModal(\"repMaxCalculatorModal\", (weightValue) => {\n    if (weightValue != null && unit !== \"%\") {\n      const w = Weight_build(weightValue, unit as IUnit);\n      setText(String(w.value));\n      props.onUpdate(w);\n    }\n  });\n\n  return (\n    <View className=\"w-full\">\n      {props.label && <Text className=\"mb-1 text-xs text-text-secondary\">{props.label}</Text>}\n      <View className=\"flex-row items-center gap-2\">\n        <Pressable\n          className=\"items-center justify-center w-scaled-10 h-scaled-10 border rounded-lg bg-background-purpledark border-border-neutral\"\n          data-testid=\"edit-weight-minus\"\n          testID=\"edit-weight-minus\"\n          onPress={() => {\n            const value = getValue();\n            if (value) {\n              if (value.unit === \"%\") {\n                const newValue = Weight_buildPct(value.value - 1);\n                setText(String(newValue.value));\n                props.onUpdate(newValue);\n              } else {\n                const newWeight = Weight_decrement(value, props.settings, props.exerciseType);\n                setText(String(newWeight.value));\n                props.onUpdate(newWeight);\n              }\n            }\n          }}\n        >\n          <Text className=\"text-xl font-bold leading-none\">-</Text>\n        </Pressable>\n        <View className=\"flex-row items-center flex-1 gap-2\">\n          <View className=\"flex-1\">\n            <TextInput\n              className=\"w-full px-4 py-2 text-base border rounded-lg bg-background-default border-border-prominent text-text-primary\"\n              keyboardType=\"numeric\"\n              value={text}\n              data-testid={testId}\n              testID={testId}\n              onChangeText={(t) => {\n                const normalized = MathUtils_normalizeNumStr(t);\n                setText(normalized);\n                if (normalized !== \"\" && !isNaN(Number(normalized))) {\n                  props.onUpdate(buildWeight(Number(normalized), unit));\n                }\n              }}\n              onBlur={() => {\n                const value = getValue();\n                if (value != null) {\n                  props.onUpdate(value);\n                }\n              }}\n              selectTextOnFocus={Platform.OS === \"ios\"}\n            />\n          </View>\n          <InputWeightUnit\n            value={unit}\n            units={availableUnits}\n            onChange={(u) => {\n              setUnit(u);\n              const v = Number(text);\n              if (!isNaN(v)) {\n                props.onUpdate(buildWeight(v, u));\n              }\n            }}\n          />\n        </View>\n        {unit !== \"%\" && (\n          <Pressable\n            className=\"items-center justify-center w-scaled-10 h-scaled-10 border rounded-lg bg-background-purpledark border-border-neutral\"\n            data-testid=\"edit-weight-calculator\"\n            testID=\"edit-weight-calculator\"\n            onPress={() => openCalculator({ unit: unit as IUnit })}\n          >\n            <IconCalculator size={16} />\n          </Pressable>\n        )}\n        <Pressable\n          className=\"items-center justify-center w-scaled-10 h-scaled-10 border rounded-lg bg-background-purpledark border-border-neutral\"\n          data-testid=\"edit-weight-plus\"\n          testID=\"edit-weight-plus\"\n          onPress={() => {\n            const value = getValue();\n            if (value) {\n              if (value.unit === \"%\") {\n                const newValue = Weight_buildPct(value.value + 1);\n                setText(String(newValue.value));\n                props.onUpdate(newValue);\n              } else {\n                const newWeight = Weight_increment(value, props.settings, props.exerciseType);\n                setText(String(newWeight.value));\n                props.onUpdate(newWeight);\n              }\n            }\n          }}\n        >\n          <Text className=\"text-xl font-bold leading-none\">+</Text>\n        </Pressable>\n      </View>\n    </View>\n  );\n}\n","import { JSX, memo, useCallback, useMemo, useRef, useState } from \"react\";\nimport { View } from \"react-native\";\nimport { Text } from \"./primitives/text\";\nimport { IExerciseType, IPercentage, IPercentageUnit, ISettings, ISubscription, IUnit, IWeight } from \"../types\";\nimport { InputNumber2, IInputCommitMode } from \"./inputNumber2\";\nimport {\n  Weight_evaluateWeight,\n  Weight_is,\n  Weight_build,\n  Weight_increment,\n  Weight_decrement,\n  Weight_buildAny,\n  Weight_calculatePlates,\n  Weight_eq,\n  Weight_formatOneSide,\n} from \"../models/weight\";\nimport { IconBarbellSide } from \"./icons/iconBarbellSide\";\nimport { Tailwind_colors } from \"../utils/tailwindConfig\";\nimport { Subscriptions_hasSubscription } from \"../utils/subscriptions\";\nimport { Equipment_getUnitOrDefaultForExerciseType } from \"../models/equipment\";\n\ninterface IInputWeight2Props {\n  value: IWeight | IPercentage | undefined;\n  name: string;\n  max?: number;\n  min?: number;\n  autowidth?: boolean;\n  width?: number;\n  showUnitInside?: boolean;\n  placeholder?: string;\n  exerciseType?: IExerciseType;\n  units?: (IUnit | IPercentageUnit)[];\n  initialValue?: IWeight | IPercentage;\n  addOn?: () => JSX.Element;\n  settings: ISettings;\n  after?: () => JSX.Element | undefined;\n  onBlur?: (value: IWeight | IPercentage | undefined) => void;\n  onInput?: (value: IWeight | IPercentage | undefined) => void;\n  subscription?: ISubscription;\n  tabIndex?: number;\n  inputCommitMode?: IInputCommitMode;\n  inputDebounceMs?: number;\n  \"data-testid\"?: string;\n  testID?: string;\n}\n\nfunction InputWeight2Inner(props: IInputWeight2Props): JSX.Element {\n  const [unit, setUnit] = useState<IUnit | IPercentageUnit>(\n    props.value?.unit ??\n      props.initialValue?.unit ??\n      Equipment_getUnitOrDefaultForExerciseType(props.settings, props.exerciseType)\n  );\n  const unitRef = useRef(unit);\n  unitRef.current = unit;\n  const onInputPropRef = useRef(props.onInput);\n  const onBlurPropRef = useRef(props.onBlur);\n  const settingsRef = useRef(props.settings);\n  const exerciseTypeRef = useRef(props.exerciseType);\n  const commitModeRef = useRef<IInputCommitMode | undefined>(props.inputCommitMode);\n  onInputPropRef.current = props.onInput;\n  onBlurPropRef.current = props.onBlur;\n  settingsRef.current = props.settings;\n  exerciseTypeRef.current = props.exerciseType;\n  commitModeRef.current = props.inputCommitMode;\n\n  const [value, setValue] = useState(props.value);\n  const draftValueRef = useRef<number | undefined>(props.value?.value);\n  draftValueRef.current = value?.value;\n  const initialValue = value ?? props.initialValue;\n  const evaluatedWeight = useMemo(\n    () =>\n      initialValue && props.exerciseType\n        ? Weight_evaluateWeight(initialValue, props.exerciseType, props.settings)\n        : undefined,\n    [initialValue, props.exerciseType, props.settings]\n  );\n\n  const onNext = useCallback((current: number | undefined): number => {\n    const u = unitRef.current;\n    if (u === \"%\") {\n      return current != null ? current + 1 : 0;\n    }\n    const weight = current != null ? Weight_build(current, u) : Weight_build(0, u);\n    const newWeight = Weight_increment(weight, settingsRef.current, exerciseTypeRef.current);\n    return newWeight.value;\n  }, []);\n\n  const onPrev = useCallback((current: number | undefined): number => {\n    const u = unitRef.current;\n    if (u === \"%\") {\n      return current != null ? current - 1 : 0;\n    }\n    const weight = current != null ? Weight_build(current, u) : Weight_build(0, u);\n    const newWeight = Weight_decrement(weight, settingsRef.current, exerciseTypeRef.current);\n    return newWeight.value;\n  }, []);\n\n  const onChangeUnits = useCallback((newUnit: IUnit | IPercentageUnit) => {\n    setUnit(newUnit);\n    const draft = draftValueRef.current;\n    const weight = draft != null ? Weight_buildAny(draft, newUnit) : undefined;\n    setValue(weight);\n    if (commitModeRef.current !== \"blur\") {\n      const cb = onInputPropRef.current;\n      if (cb) {\n        cb(weight);\n      }\n    }\n  }, []);\n\n  const onBlur = useCallback((v: number | undefined) => {\n    draftValueRef.current = v;\n    const weight = v != null ? Weight_buildAny(v, unitRef.current) : undefined;\n    setValue(weight);\n    const cb = onBlurPropRef.current;\n    if (cb) {\n      cb(weight);\n    }\n  }, []);\n\n  const onInput = useCallback((newValue: number | undefined) => {\n    draftValueRef.current = newValue;\n    const weight = newValue != null ? Weight_buildAny(newValue, unitRef.current) : undefined;\n    setValue(weight);\n    const cb = onInputPropRef.current;\n    if (cb) {\n      cb(weight);\n    }\n  }, []);\n\n  const onPreview = useCallback((newValue: number | undefined) => {\n    draftValueRef.current = newValue;\n    const weight = newValue != null ? Weight_buildAny(newValue, unitRef.current) : undefined;\n    setValue(weight);\n  }, []);\n\n  const showPlates =\n    props.subscription &&\n    props.exerciseType &&\n    Subscriptions_hasSubscription(props.subscription) &&\n    evaluatedWeight &&\n    Weight_is(evaluatedWeight);\n\n  const keyboardAddon = useMemo(() => {\n    if (!showPlates && !props.addOn) {\n      return undefined;\n    }\n    return (\n      <View className=\"py-2\">\n        {showPlates && (\n          <PlatesCalculator\n            weight={evaluatedWeight as IWeight}\n            settings={props.settings}\n            exerciseType={props.exerciseType!}\n          />\n        )}\n        {props.addOn ? <View>{props.addOn()}</View> : undefined}\n      </View>\n    );\n  }, [showPlates, evaluatedWeight, props.settings, props.exerciseType, props.addOn]);\n\n  return (\n    <View>\n      <InputNumber2\n        width={props.width}\n        tabIndex={props.tabIndex}\n        placeholder={props.placeholder}\n        after={props.after}\n        autowidth={props.autowidth}\n        allowDot={true}\n        allowNegative={true}\n        min={props.min}\n        max={props.max}\n        keyboardAddon={keyboardAddon}\n        onNext={onNext}\n        onPrev={onPrev}\n        value={props.value?.value}\n        initialValue={props.initialValue?.value}\n        name={props.name}\n        enableUnits={props.units}\n        selectedUnit={unit}\n        showUnitInside={props.showUnitInside}\n        onChangeUnits={onChangeUnits}\n        enableCalculator={true}\n        inputCommitMode={props.inputCommitMode}\n        inputDebounceMs={props.inputDebounceMs}\n        onBlur={onBlur}\n        onInput={onInput}\n        onPreview={onPreview}\n      />\n    </View>\n  );\n}\n\nexport const InputWeight2 = memo(InputWeight2Inner);\n\ninterface IPlatesCalculatorProps {\n  weight: IWeight;\n  settings: ISettings;\n  exerciseType: IExerciseType;\n}\n\nexport const PlatesCalculator = memo(function PlatesCalculator(props: IPlatesCalculatorProps): JSX.Element {\n  const { plates, totalWeight: weight } = Weight_calculatePlates(\n    props.weight,\n    props.settings,\n    props.weight.unit,\n    props.exerciseType\n  );\n  return (\n    <View className=\"flex-row items-center w-full gap-1\">\n      <View>\n        <IconBarbellSide size={13} color={Tailwind_colors().blue[400]} />\n      </View>\n      <View>\n        <Text className=\"text-xs text-text-secondary\">\n          Plates:{\" \"}\n          <Text\n            className={`text-xs font-semibold ${Weight_eq(weight, props.weight) ? \"text-text-primary\" : \"text-text-error\"}`}\n            data-testid=\"plates-list\"\n            testID=\"plates-list\"\n          >\n            {plates.length > 0 ? Weight_formatOneSide(props.settings, plates, props.exerciseType) : \"None\"}\n          </Text>\n        </Text>\n      </View>\n    </View>\n  );\n});\n","import { JSX } from \"react\";\nimport { IUnit } from \"../types\";\n\ninterface IInputWeightUnitProps {\n  value: IUnit | \"%\";\n  units: readonly (IUnit | \"%\")[];\n  onChange: (unit: IUnit | \"%\") => void;\n}\n\nexport function InputWeightUnit(props: IInputWeightUnitProps): JSX.Element {\n  return (\n    <select\n      data-testid=\"edit-weight-unit\"\n      className=\"px-1 py-1 border rounded border-border-neutral bg-background-default\"\n      value={props.value}\n      onChange={(e) => props.onChange(e.target.value as IUnit | \"%\")}\n    >\n      {props.units.map((u) => (\n        <option key={u} value={u}>\n          {u}\n        </option>\n      ))}\n    </select>\n  );\n}\n","import { JSX, ReactNode } from \"react\";\nimport { Linking, Alert } from \"react-native\";\nimport { Text } from \"./primitives/text\";\nimport { ClipboardUtils_copy } from \"../utils/clipboard\";\nimport {\n  SendMessage_isIos,\n  SendMessage_isAndroid,\n  SendMessage_toIos,\n  SendMessage_toAndroid,\n} from \"../utils/sendMessage\";\n\ninterface IProps {\n  href?: string;\n  className?: string;\n  children?: ReactNode;\n  testID?: string;\n}\n\nexport function Link(props: IProps): JSX.Element {\n  return (\n    <Text\n      data-testid={props.testID}\n      testID={props.testID}\n      className={`text-text-link font-bold underline ${props.className || \"\"}`}\n      onPress={() => {\n        const href = props.href;\n        if (!href) {\n          return;\n        }\n        if (SendMessage_isIos()) {\n          SendMessage_toIos({ type: \"openUrl\", url: href });\n        } else if (SendMessage_isAndroid()) {\n          SendMessage_toAndroid({ type: \"openUrl\", url: href });\n        } else {\n          Linking.openURL(href).catch(() => {\n            if (href.startsWith(\"mailto:\")) {\n              const email = href.replace(/^mailto:/, \"\").split(\"?\")[0];\n              ClipboardUtils_copy(email);\n              Alert.alert(\"Email copied\", `${email} was copied to your clipboard.`);\n            }\n          });\n        }\n      }}\n    >\n      {props.children}\n    </Text>\n  );\n}\n","import { JSX, ReactNode } from \"react\";\nimport { GestureResponderEvent, Pressable } from \"react-native\";\nimport { Text } from \"./primitives/text\";\nimport { useTrackClick } from \"../utils/clickTracking\";\n\ninterface IProps {\n  name: string;\n  onPress?: (e: GestureResponderEvent) => void;\n  onClick?: (e: GestureResponderEvent) => void;\n  className?: string;\n  children?: ReactNode;\n  testID?: string;\n  disabled?: boolean;\n}\n\nfunction containsString(children: ReactNode): boolean {\n  if (typeof children === \"string\" || typeof children === \"number\") {\n    return true;\n  }\n  if (Array.isArray(children)) {\n    return children.some((c) => typeof c === \"string\" || typeof c === \"number\");\n  }\n  return false;\n}\n\nexport function LinkButton(props: IProps): JSX.Element {\n  const { className, children } = props;\n  const testID = props.testID || props.name;\n  const isFontNormal = className?.includes(\"font-normal\");\n  const isNoUnderline = className?.includes(\"no-underline\");\n  const textCn = `text-text-link ${!isFontNormal ? \"font-bold\" : \"\"} ${!isNoUnderline ? \"underline\" : \"\"} ${className || \"\"}`;\n  const accessibilityLabel = typeof children === \"string\" ? children : undefined;\n  const trackClick = useTrackClick();\n  const userOnPress = props.onPress || props.onClick;\n  const onPress = (e: GestureResponderEvent): void => {\n    trackClick(props.name, props.className);\n    userOnPress?.(e);\n  };\n  return (\n    <Pressable\n      accessibilityRole=\"button\"\n      accessibilityLabel={accessibilityLabel}\n      onPress={onPress}\n      testID={testID}\n      data-testid={testID}\n      disabled={props.disabled}\n      hitSlop={{ top: 8, bottom: 8, left: 8, right: 8 }}\n    >\n      {containsString(children) ? <Text className={textCn}>{children}</Text> : children}\n    </Pressable>\n  );\n}\n","import { JSX, useEffect, useRef, useState } from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport MarkdownIt from \"markdown-it\";\nimport { LinkButton } from \"./linkButton\";\nimport { IEvaluatedProgram } from \"../models/program\";\nimport { ISettings } from \"../types\";\nimport { Exercise_findByNameAndEquipment } from \"../models/exercise\";\nimport { ExerciseTooltip } from \"./exerciseTooltip\";\n\nconst md = new MarkdownIt({ html: true, linkify: true });\n\nfunction preprocessDirectives(text: string, directivesData?: IMarkdownDirectivesData): string {\n  let result = text;\n  if (directivesData?.exercise) {\n    result = result.replace(/\\[\\{([^}]+)\\}\\]/g, (_match, name: string) => {\n      return `<strong class=\"md-exercise-directive md\" data-name=\"${name.trim()}\">${name.trim()}</strong>`;\n    });\n  }\n  if (directivesData?.exerciseExample) {\n    result = result.replace(/^:::exercise-example\\{([^}]*)\\}[ \\t]*$/gm, (_match, attrsStr: string) => {\n      const attrs: Record<string, string> = {};\n      for (const m of attrsStr.matchAll(/(\\w+)=\"([^\"]*)\"/g)) {\n        attrs[m[1]] = m[2];\n      }\n      return `<div class=\"md-exercise-example mb-4\" data-exercise=\"${attrs.exercise || \"\"}\" data-equipment=\"${attrs.equipment || \"\"}\" data-key=\"${attrs.key || \"\"}\" data-weeks=\"${attrs.weeks || \"\"}\" data-week-labels=\"${attrs.weekLabels || \"\"}\" data-onerm=\"${attrs.onerm || \"\"}\"></div>`;\n    });\n  }\n  return result;\n}\n\nexport interface IMarkdownDirectivesData {\n  exercise?: { settings: ISettings };\n  exerciseExample?: { settings: ISettings; evaluatedProgram: IEvaluatedProgram };\n}\n\ninterface IProps {\n  value: string;\n  className?: string;\n  truncate?: number;\n  directivesData?: IMarkdownDirectivesData;\n}\n\nexport function Markdown(props: IProps): JSX.Element {\n  const [shouldTruncate, setShouldTruncate] = useState(props.truncate != null);\n  const [isTruncated, setIsTruncated] = useState(props.truncate != null);\n  const stringValue = typeof props.value === \"string\" ? props.value : String(props.value ?? \"\");\n  const preprocessed = preprocessDirectives(stringValue, props.directivesData);\n  const value = typeof preprocessed === \"string\" ? preprocessed : String(preprocessed ?? \"\");\n  const result = md.render(value);\n  let className = props.className || \"markdown\";\n  if (isTruncated && props.className?.indexOf(\"line-clamp\") === -1) {\n    className += ` line-clamp-${props.truncate}`;\n  }\n\n  const containerRef = useRef<HTMLDivElement>(null);\n  useEffect(() => {\n    const container = containerRef.current;\n    if (isTruncated) {\n      setShouldTruncate(container!.scrollHeight > container!.clientHeight);\n    }\n    if (container) {\n      for (const element of Array.from(container.querySelectorAll(\"a\"))) {\n        element.setAttribute(\"target\", \"_blank\");\n      }\n      hydrateLiftoscriptCodeBlocks(container);\n      setTimeout(() => {\n        if (props.directivesData?.exercise) {\n          hydrateExerciseDirectives(container, props.directivesData.exercise.settings);\n        }\n        if (props.directivesData?.exerciseExample) {\n          hydrateExerciseExampleDirectives(\n            container,\n            props.directivesData.exerciseExample.settings,\n            props.directivesData.exerciseExample.evaluatedProgram\n          );\n        }\n      }, 0);\n    }\n  });\n\n  return (\n    <div>\n      <div ref={containerRef} className={className} dangerouslySetInnerHTML={{ __html: result }} />\n      {shouldTruncate && props.truncate != null && (\n        <div className=\"leading-none\" style={{ marginTop: \"-0.125rem\" }}>\n          <LinkButton\n            name=\"truncate-markdown\"\n            className=\"text-xs font-normal\"\n            onClick={() => setIsTruncated(!isTruncated)}\n          >\n            {isTruncated ? \"Show more\" : \"Show less\"}\n          </LinkButton>\n        </div>\n      )}\n    </div>\n  );\n}\n\nfunction hydrateLiftoscriptCodeBlocks(container: HTMLElement): void {\n  const codeEls = Array.from(container.querySelectorAll(\"code.language-liftoscript\"));\n  if (codeEls.length === 0) {\n    return;\n  }\n  import(\"../pages/planner/components/plannerCodeBlock\").then((mod) => {\n    for (const codeEl of codeEls) {\n      if (codeEl.getAttribute(\"data-hydrated\")) {\n        continue;\n      }\n      codeEl.setAttribute(\"data-hydrated\", \"true\");\n      const script = codeEl.textContent || \"\";\n      const pre = codeEl.parentElement;\n      if (pre && pre.tagName === \"PRE\") {\n        const wrapper = document.createElement(\"div\");\n        wrapper.className = \"md-liftoscript-block\";\n        pre.parentNode!.replaceChild(wrapper, pre);\n        createRoot(wrapper).render(<mod.PlannerCodeBlock script={script} />);\n      }\n    }\n  });\n}\n\nfunction hydrateExerciseDirectives(container: HTMLElement, settings: ISettings): void {\n  for (const el of Array.from(container.querySelectorAll(\".md-exercise-directive\"))) {\n    if (el.getAttribute(\"data-hydrated\")) {\n      continue;\n    }\n    el.setAttribute(\"data-hydrated\", \"true\");\n    const name = el.getAttribute(\"data-name\") || \"\";\n    const exercise = Exercise_findByNameAndEquipment(name, settings.exercises);\n    if (!exercise) {\n      continue;\n    }\n    const exerciseType = { id: exercise.id, equipment: exercise.equipment };\n    el.textContent = \"\";\n    createRoot(el).render(<ExerciseTooltip exerciseType={exerciseType} settings={settings} name={name} />);\n  }\n}\n\nfunction hydrateExerciseExampleDirectives(\n  container: HTMLElement,\n  settings: ISettings,\n  evaluatedProgram: IEvaluatedProgram\n): void {\n  for (const el of Array.from(container.querySelectorAll(\".md-exercise-example\"))) {\n    if (el.getAttribute(\"data-hydrated\")) {\n      continue;\n    }\n    el.setAttribute(\"data-hydrated\", \"true\");\n    const exercise = el.getAttribute(\"data-exercise\") || \"\";\n    const equipment = el.getAttribute(\"data-equipment\") || \"\";\n    const key = el.getAttribute(\"data-key\") || \"\";\n    const weeksStr = el.getAttribute(\"data-weeks\") || \"\";\n    const weekLabelsStr = el.getAttribute(\"data-week-labels\") || \"\";\n    const onermStr = el.getAttribute(\"data-onerm\") || \"\";\n\n    const exerciseType = { id: exercise, equipment };\n    const weekLabels = weekLabelsStr ? weekLabelsStr.split(\",\") : [];\n\n    let weekSetup: { name: string }[] | undefined;\n    if (weeksStr) {\n      const [start, end] = weeksStr.split(\"-\").map(Number);\n      weekSetup = evaluatedProgram.weeks.slice(start - 1, end).map((w, i) => ({\n        name: weekLabels[i] ? `${w.name} (${weekLabels[i]})` : w.name,\n        weekIndex: start - 1 + i,\n      }));\n    } else if (weekLabels.length > 0) {\n      weekSetup = evaluatedProgram.weeks.map((w, i) => ({\n        name: weekLabels[i] ? `${w.name} (${weekLabels[i]})` : w.name,\n      }));\n    }\n\n    import(\"../pages/programs/programDetails/programDetailsExerciseExample\").then((mod) => {\n      createRoot(el as HTMLElement).render(\n        <mod.ProgramDetailsExerciseExample\n          program={evaluatedProgram}\n          settings={settings}\n          programExerciseKey={key}\n          exerciseType={exerciseType}\n          weekSetup={weekSetup}\n          defaultOnerm={onermStr ? parseFloat(onermStr) : undefined}\n        />\n      );\n    });\n  }\n}\n","import type React from \"react\";\nimport type { JSX, ReactNode } from \"react\";\nimport { View, Pressable } from \"react-native\";\nimport { Text } from \"./primitives/text\";\nimport { IconArrowRight } from \"./icons/iconArrowRight\";\nimport { IconHandle } from \"./icons/iconHandle\";\nimport { StringUtils_dashcase } from \"../utils/string\";\n\ninterface IMenuItemProps {\n  prefix?: ReactNode;\n  name: string;\n  isBorderless?: boolean;\n  value?: string | JSX.Element;\n  expandName?: boolean;\n  expandValue?: boolean;\n  addons?: ReactNode;\n  shouldShowRightArrow?: boolean;\n  // Wraps the handle in a drag gesture (e.g. DraggableList2's render-prop); works on web and native.\n  dragHandle?: (children: ReactNode) => JSX.Element;\n  onClick?: (e: React.MouseEvent) => void;\n}\n\nexport function MenuItemWrapper(props: {\n  name: string;\n  children: ReactNode;\n  isBorderless?: boolean;\n  onClick?: (e: React.MouseEvent) => void;\n}): JSX.Element {\n  const testId = `menu-item-${StringUtils_dashcase(props.name)}`;\n  const inner = <View className={!props.isBorderless ? \"border-b border-border-neutral\" : \"\"}>{props.children}</View>;\n  if (props.onClick) {\n    return (\n      <Pressable\n        testID={testId}\n        data-testid={testId}\n        className=\"w-full\"\n        onPress={(e) => props.onClick?.(e as unknown as React.MouseEvent)}\n      >\n        {inner}\n      </Pressable>\n    );\n  }\n  return (\n    <View testID={testId} data-testid={testId} className=\"w-full\">\n      {inner}\n    </View>\n  );\n}\n\nexport function MenuItem(props: IMenuItemProps): JSX.Element {\n  const valueNode =\n    typeof props.value === \"string\" ? <Text className=\"text-right text-text-link\">{props.value}</Text> : props.value;\n\n  const dragHandle = props.dragHandle\n    ? props.dragHandle(\n        <View className=\"p-2\">\n          <IconHandle />\n        </View>\n      )\n    : null;\n\n  return (\n    <MenuItemWrapper name={props.name} onClick={props.onClick} isBorderless={props.isBorderless}>\n      <View className=\"flex-row items-center\">\n        {dragHandle}\n        {props.prefix != null && <View className=\"flex-row items-center justify-center\">{props.prefix}</View>}\n        <View className=\"flex-row items-center gap-2 flex-1\">\n          <View className={`py-3 ${props.expandValue ? undefined : \"flex-1\"}`}>\n            <View className=\"flex-row items-center\">\n              <Text className=\"text-base text-text-primary\">{props.name}</Text>\n            </View>\n            {props.addons != null && <View className=\"pt-1\">{props.addons}</View>}\n          </View>\n          <View className={`${props.expandName ? \"\" : \"flex-1\"} items-end`}>{valueNode}</View>\n        </View>\n        {props.shouldShowRightArrow && (\n          <View className=\"flex-row items-center py-2 pl-2\">\n            <IconArrowRight />\n          </View>\n        )}\n      </View>\n    </MenuItemWrapper>\n  );\n}\n","import React, { JSX, Dispatch, ReactNode, SetStateAction, useState } from \"react\";\nimport { MenuItemWrapper } from \"./menuItem\";\nimport { StringUtils_dashcase } from \"../utils/string\";\nimport { ScrollBarrell } from \"./scrollBarrell\";\nimport { IconTrash } from \"./icons/iconTrash\";\nimport { SendMessage_isIos } from \"../utils/sendMessage\";\nimport { lg } from \"../utils/posthog\";\nimport { MathUtils_normalizeNumStr } from \"../utils/math\";\n\ntype IMenuItemType = \"text\" | \"number\" | \"select\" | \"boolean\" | \"desktop-select\" | \"select2\";\n\ninterface IMenuItemEditableValueProps {\n  name: string;\n  prefix?: ReactNode;\n  type: IMenuItemType;\n  value: string | null | undefined;\n  valueUnits?: string;\n  values?: [string, string][];\n  onChange?: (v?: string, e?: React.SyntheticEvent) => void;\n  onInput?: (v: string) => void;\n  pattern?: string;\n  patternMessage?: string;\n  maxLength?: number;\n}\n\ninterface IMenuItemEditableProps extends IMenuItemEditableValueProps {\n  size?: \"sm\" | \"base\";\n  isNameBold?: boolean;\n  hasClear?: boolean;\n  after?: JSX.Element;\n  underName?: JSX.Element;\n  nextLine?: JSX.Element;\n  isNameHtml?: boolean;\n  errorMessage?: string;\n  isBorderless?: boolean;\n}\n\nexport function MenuItemEditable(props: IMenuItemEditableProps): JSX.Element {\n  const [patternError, setPatternError] = useState<boolean>(false);\n  const [isExpanded, setIsExpanded] = useState<boolean>(false);\n  let numberOfVisibleItems = Math.min(props.values?.length || 0, 4);\n  if (numberOfVisibleItems % 2 === 0) {\n    numberOfVisibleItems += 1;\n  }\n  const onChange = (v?: string, e?: React.SyntheticEvent): void => {\n    lg(`menu-item-edit-${StringUtils_dashcase(props.name)}`);\n    if (props.onChange != null) {\n      props.onChange(v, e);\n    }\n  };\n  return (\n    <MenuItemWrapper name={props.name} isBorderless={props.isBorderless}>\n      <label\n        className=\"flex flex-col flex-1 py-1 text-base\"\n        onClick={(e) => {\n          const target = e.target as HTMLElement;\n          if (props.type === \"select\" && !target.classList.contains(\"scroll-barrel-item\")) {\n            setIsExpanded(!isExpanded);\n          }\n        }}\n      >\n        <div className=\"flex items-center flex-1\">\n          {props.prefix}\n          {props.isNameHtml ? (\n            <span\n              data-testid={`menu-item-name-${StringUtils_dashcase(props.name)}`}\n              className={`flex flex-col min-w-0 break-all items-start pr-2 ${props.isNameBold ? \"font-bold\" : \"\"}`}\n              dangerouslySetInnerHTML={{ __html: props.name }}\n            />\n          ) : (\n            <span\n              data-testid={`menu-item-name-${StringUtils_dashcase(props.name)}`}\n              className={`flex flex-col min-w-0 break-all items-start pr-2 ${props.isNameBold ? \"font-bold\" : \"\"}`}\n            >\n              <div className={props.size === \"sm\" ? \"text-sm\" : \"\"}>{props.name}</div>\n              {props.underName}\n            </span>\n          )}\n          <div className=\"flex-1\" style={{ minWidth: \"3rem\" }}>\n            <MenuItemValue\n              name={props.name}\n              maxLength={props.maxLength}\n              type={props.type}\n              value={props.value}\n              pattern={props.pattern}\n              patternMessage={props.patternMessage}\n              values={props.values}\n              setPatternError={setPatternError}\n              onChange={onChange}\n            />\n          </div>\n          {props.value != null && <span className=\"flex items-center text-text-secondary\">{props.valueUnits}</span>}\n          {props.value != null && props.hasClear && (\n            <button\n              data-testid={`menu-item-delete-${StringUtils_dashcase(props.name)}`}\n              onClick={() => onChange(undefined)}\n              style={{ marginRight: \"-0.5rem\" }}\n              className={`p-2 nm-menu-item-delete-${StringUtils_dashcase(props.name)}`}\n            >\n              <IconTrash />\n            </button>\n          )}\n          {props.after != null ? props.after : undefined}\n        </div>\n        {(props.errorMessage || (patternError && props.patternMessage)) && (\n          <div style={{ marginTop: \"-0.5rem\" }} className=\"text-xs text-right text-red-500\">\n            {props.errorMessage || props.patternMessage}\n          </div>\n        )}\n      </label>\n      {props.nextLine}\n      {props.type === \"select\" && (\n        <div className=\"text-base\">\n          <ScrollBarrell\n            itemHeight={28}\n            numberOfVisibleItems={numberOfVisibleItems}\n            isExpanded={isExpanded}\n            values={props.values || []}\n            defaultSelectedValue={props.value}\n            onSelect={(v) => onChange(v)}\n          />\n        </div>\n      )}\n    </MenuItemWrapper>\n  );\n}\n\nexport function MenuItemValue(\n  props: { setPatternError: Dispatch<SetStateAction<boolean>> } & IMenuItemEditableValueProps\n): JSX.Element | null {\n  if (props.type === \"desktop-select\") {\n    return (\n      <select\n        data-testid={`menu-item-value-${StringUtils_dashcase(props.name)}`}\n        className=\"border rounded border-border-neutral bg-background-default\"\n        value={props.value || undefined}\n        onChange={handleChange(props.onChange, props.setPatternError)}\n      >\n        {(props.values || []).map(([key, value]) => (\n          <option key={key} value={key}>\n            {value}\n          </option>\n        ))}\n      </select>\n    );\n  } else if (props.type === \"select\") {\n    const keyValue = (props.values || []).filter(([v]) => v === props.value)[0];\n    return (\n      <div\n        data-testid={`menu-item-value-${StringUtils_dashcase(props.name)}`}\n        className=\"flex-1 py-2 pl-2 text-right text-text-link\"\n        style={{ minHeight: \"2.5rem\" }}\n      >\n        {keyValue && keyValue[1]}\n      </div>\n    );\n  } else if (props.type === \"text\") {\n    return (\n      <input\n        data-testid={`menu-item-value-${StringUtils_dashcase(props.name)}`}\n        key={props.value}\n        type=\"text\"\n        className=\"flex-1 w-full py-2 text-right bg-transparent text-text-link\"\n        defaultValue={props.value || undefined}\n        title={props.patternMessage}\n        maxLength={props.maxLength}\n        onBlur={handleChange(props.onChange, props.setPatternError)}\n        onFocus={(e) => {\n          const target = e.target;\n          if (target instanceof HTMLInputElement) {\n            const value = (target as HTMLInputElement).value;\n            target.setSelectionRange(0, value.length);\n            return true;\n          }\n          return undefined;\n        }}\n        pattern={props.pattern}\n      />\n    );\n  } else if (props.type === \"boolean\") {\n    return (\n      <div className=\"flex items-center flex-1 text-right\">\n        <label className=\"flex items-center justify-end flex-1 p-2\">\n          <input\n            data-testid={`menu-item-value-${StringUtils_dashcase(props.name)}`}\n            style={{ marginRight: \"-0.5rem\" }}\n            key={props.value}\n            type=\"checkbox\"\n            className=\"text-right text-text-link checkbox\"\n            checked={props.value === \"true\"}\n            onChange={(e: React.ChangeEvent<HTMLInputElement>): void => {\n              if (props.onChange != null) {\n                const value = `${(e.target as HTMLInputElement).checked}`;\n                props.onChange(value, e);\n              }\n            }}\n          />\n        </label>\n      </div>\n    );\n  } else if (props.type === \"number\") {\n    return (\n      <span className=\"flex flex-1 text-right\">\n        <input\n          data-testid={`menu-item-value-${StringUtils_dashcase(props.name)}`}\n          key={props.value}\n          onBlur={(e) => {\n            if (e.target instanceof HTMLInputElement) {\n              e.target.value = MathUtils_normalizeNumStr(e.target.value);\n            }\n            handleChange(props.onChange, props.setPatternError)(e);\n          }}\n          type={SendMessage_isIos() ? \"number\" : \"tel\"}\n          step=\"0.01\"\n          onFocus={(e) => {\n            const target = e.target;\n            if (target instanceof HTMLInputElement) {\n              const value = (target as HTMLInputElement).value;\n              if (target.type !== \"number\") {\n                target.setSelectionRange(0, value.length);\n              }\n              return true;\n            }\n            return undefined;\n          }}\n          title={props.patternMessage}\n          className=\"items-center flex-1 w-0 min-w-0 p-2 text-right bg-transparent outline-none text-text-secondary\"\n          defaultValue={props.value || undefined}\n          pattern={props.pattern}\n        />\n      </span>\n    );\n  } else {\n    return null;\n  }\n}\n\nfunction handleChange(\n  cb: ((val: string, e: React.SyntheticEvent) => void) | undefined,\n  setPatternError: Dispatch<SetStateAction<boolean>>\n): (e: React.SyntheticEvent) => void {\n  return (e: React.SyntheticEvent): void => {\n    setPatternError(e.target instanceof HTMLInputElement && e.target.validity.patternMismatch);\n    if (cb != null) {\n      const value = (e.target as HTMLInputElement).value;\n      cb(value, e);\n    }\n  };\n}\n","import { JSX, ReactNode, RefObject, useEffect, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { IconCloseCircleOutline } from \"./icons/iconCloseCircleOutline\";\n\ninterface IProps {\n  name?: string;\n  children: ReactNode;\n  autofocusInputRef?: RefObject<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement | null>;\n  preautofocus?: [RefObject<HTMLElement | null>, (el: HTMLElement) => void][];\n  isHidden?: boolean;\n  isFullWidth?: boolean;\n  isFullHeight?: boolean;\n  noPaddings?: boolean;\n  shouldShowClose?: boolean;\n  overflowHidden?: boolean;\n  innerClassName?: string;\n  zIndex?: number;\n  maxWidth?: string;\n  style?: Record<string, string | undefined>;\n  onClose?: () => void;\n}\n\nexport function Modal(props: IProps): JSX.Element {\n  const modalRef = useRef<HTMLElement>(null);\n\n  let className = \"fixed inset-0 flex items-center justify-center bottom-sticked\";\n  if (props.isHidden) {\n    className += \" invisible\";\n  }\n\n  const prevProps = useRef<IProps>(props);\n  useEffect(() => {\n    prevProps.current = props;\n  });\n\n  useEffect(() => {\n    if (!props.isHidden) {\n      document.body.classList.add(\"stop-scrolling-modal\");\n    } else {\n      document.body.classList.remove(\"stop-scrolling-modal\");\n    }\n    return () => {\n      document.body.classList.remove(\"stop-scrolling-modal\");\n    };\n  }, [props.isHidden]);\n\n  if (modalRef.current != null && prevProps.current.isHidden && !props.isHidden) {\n    for (const [ref, callback] of props.preautofocus ?? []) {\n      if (ref.current != null) {\n        callback(ref.current);\n      }\n    }\n    if (props.autofocusInputRef?.current != null) {\n      modalRef.current.classList.remove(\"invisible\");\n      props.autofocusInputRef.current.focus();\n    }\n  }\n\n  const containerRef = typeof window !== \"undefined\" ? window.document.getElementById(\"modal\") : undefined;\n\n  const element = (\n    <section ref={modalRef} className={className} style={{ zIndex: props.zIndex ?? 40 }}>\n      <div\n        data-name=\"overlay\"\n        onClick={props.shouldShowClose ? props.onClose : undefined}\n        className=\"absolute inset-0 z-10 overflow-scroll scrolling-touch opacity-50 bg-background-darkgray\"\n      ></div>\n      <div\n        data-name=\"modal\"\n        data-testid={`modal${props.name ? `-${props.name}` : \"\"}`}\n        className={`relative z-20 flex flex-col ${props.noPaddings ? \"\" : \"py-6\"} bg-background-default rounded-lg shadow-lg text-text-primary`}\n        style={{\n          maxWidth: props.maxWidth ?? \"92%\",\n          maxHeight: \"90%\",\n          width: props.isFullWidth ? \"92%\" : \"auto\",\n          height: props.isFullHeight ? \"90%\" : \"auto\",\n          ...props.style,\n        }}\n      >\n        <div\n          className={`relative h-full ${props.noPaddings ? \"\" : \"px-6\"} ${\n            props.overflowHidden ? \"overflow-hidden\" : \"overflow-auto\"\n          } ${props.innerClassName}`}\n        >\n          {props.children}\n        </div>\n        {props.shouldShowClose && (\n          <button\n            data-testid={`modal-close${props.name ? `-${props.name}` : \"\"}`}\n            onClick={props.onClose}\n            className=\"absolute p-2 nm-modal-close\"\n            style={{ top: \"-3px\", right: \"-3px\" }}\n          >\n            <IconCloseCircleOutline />\n          </button>\n        )}\n      </div>\n    </section>\n  );\n\n  return containerRef ? createPortal(element, containerRef) : element;\n}\n","import { JSX, useState } from \"react\";\nimport { View } from \"react-native\";\nimport { Button } from \"./button\";\nimport { IDispatch } from \"../ducks/types\";\nimport { Modal } from \"./modal\";\nimport { IHistoryRecord, IPercentage, IProgramState, ISettings, IWeight } from \"../types\";\nimport { GroupHeader } from \"./groupHeader\";\nimport { ObjectUtils_keys } from \"../utils/object\";\nimport { Weight_build, Weight_is, Weight_isPct, Weight_buildPct } from \"../models/weight\";\nimport { InputWeight } from \"./inputWeight\";\nimport { InputNumber } from \"./inputNumber\";\nimport { MathUtils_round } from \"../utils/math\";\nimport { IByExercise } from \"../pages/planner/plannerEvaluator\";\nimport {\n  PlannerProgramExercise_getStateMetadata,\n  PlannerProgramExercise_getState,\n} from \"../pages/planner/models/plannerProgramExercise\";\nimport { IPlannerProgramExercise } from \"../pages/planner/models/types\";\nimport { Exercise_getIsUnilateral } from \"../models/exercise\";\n\ninterface IModalAmrapProps {\n  progress: IHistoryRecord;\n  dispatch: IDispatch;\n  isPlayground: boolean;\n  settings: ISettings;\n  programExercise?: IPlannerProgramExercise;\n  otherStates?: IByExercise<IProgramState>;\n  onDone?: () => void;\n}\n\nexport function ModalAmrap(props: IModalAmrapProps): JSX.Element {\n  const amrapModal = props.progress?.amrapModal;\n  return (\n    <Modal maxWidth=\"480px\" isHidden={!amrapModal} isFullWidth={true} shouldShowClose={true} onClose={props.onDone}>\n      {amrapModal && (\n        <ModalAmrapContent\n          progress={props.progress}\n          dispatch={props.dispatch}\n          isPlayground={props.isPlayground}\n          settings={props.settings}\n          programExercise={props.programExercise}\n          otherStates={props.otherStates}\n          amrapModal={amrapModal}\n          onDone={props.onDone}\n        />\n      )}\n    </Modal>\n  );\n}\n\ninterface IModalAmrapContentProps {\n  progress: IHistoryRecord;\n  dispatch: IDispatch;\n  isPlayground: boolean;\n  settings: ISettings;\n  amrapModal: NonNullable<IHistoryRecord[\"amrapModal\"]>;\n  programExercise?: IPlannerProgramExercise;\n  otherStates?: IByExercise<IProgramState>;\n  onDone?: () => void;\n}\n\nexport function ModalAmrapContent(props: IModalAmrapContentProps): JSX.Element {\n  const progress = props.progress;\n  const { entryIndex, setIndex } = props.amrapModal;\n  const entry = progress.entries[entryIndex];\n  const isUnilateral = Exercise_getIsUnilateral(entry?.exercise || props.programExercise?.exerciseType, props.settings);\n\n  const initialReps = entry?.sets[setIndex]?.completedReps ?? entry?.sets[setIndex]?.reps;\n  const initialRepsLeft = isUnilateral\n    ? (entry?.sets[setIndex]?.completedRepsLeft ?? entry?.sets[setIndex]?.reps)\n    : undefined;\n  const initialRpe = entry?.sets[setIndex]?.completedRpe ?? entry?.sets[setIndex]?.rpe;\n  const initialWeight = entry?.sets[setIndex]?.weight;\n\n  const isAmrap = !!props.amrapModal.isAmrap;\n  const logRpe = !!props.amrapModal.logRpe;\n  const askWeight = !!props.amrapModal.askWeight;\n  const userVars = !!props.amrapModal.userVars;\n\n  const [repsInputValue, setRepsInputValue] = useState<number | undefined>(initialReps);\n  const [repsLeftInputValue, setRepsLeftInputValue] = useState<number | undefined>(initialRepsLeft);\n  const [weightInputValue, setWeightInputValue] = useState<IWeight | IPercentage | undefined>(initialWeight);\n  const [rpeInputValue, setRpeInputValue] = useState<number | undefined>(initialRpe);\n\n  const stateMetadata = props.programExercise\n    ? PlannerProgramExercise_getStateMetadata(props.programExercise) || {}\n    : {};\n  const stateMetadataKeys = ObjectUtils_keys(stateMetadata).filter((k) => stateMetadata[k]?.userPrompted);\n  const state = props.programExercise ? PlannerProgramExercise_getState(props.programExercise) : {};\n  const initialUserVarInputValues = stateMetadataKeys.reduce<\n    Record<keyof typeof stateMetadata, number | IWeight | IPercentage>\n  >((memo, k) => {\n    memo[k] = state[k];\n    return memo;\n  }, {});\n  const [userVarInputValues, setUserVarInputValues] = useState(initialUserVarInputValues);\n\n  function onDone(\n    amrapValue?: number,\n    amrapLeftValue?: number,\n    rpeValue?: number,\n    weightValue?: IWeight,\n    userVarValues: Record<string, number | IWeight | IPercentage> = {}\n  ): void {\n    props.dispatch({\n      type: \"ChangeAMRAPAction\",\n      amrapValue: amrapValue != null ? MathUtils_round(amrapValue, 1) : undefined,\n      amrapLeftValue: amrapLeftValue != null ? MathUtils_round(amrapLeftValue, 1) : undefined,\n      rpeValue: rpeValue != null ? MathUtils_round(rpeValue, 0.5) : undefined,\n      weightValue,\n      setIndex: setIndex,\n      entryIndex: entryIndex,\n      programExercise: props.programExercise,\n      isPlayground: props.isPlayground,\n      otherStates: props.otherStates,\n      isAmrap: isAmrap,\n      logRpe: logRpe,\n      askWeight: askWeight,\n      userVars: userVarValues,\n    });\n    if (props.onDone != null) {\n      props.onDone();\n    }\n  }\n\n  return (\n    <View className=\"mx-1 my-4\">\n      {isAmrap && (\n        <View>\n          {isUnilateral && (\n            <View className=\"mb-2\">\n              <InputNumber\n                label=\"Completed reps (left)\"\n                value={repsLeftInputValue ?? 0}\n                data-testid=\"modal-amrap-left-input\"\n                testID=\"modal-amrap-left-input\"\n                data-name=\"modal-input-left-autofocus\"\n                min={0}\n                step={1}\n                onUpdate={(newValue) => {\n                  setRepsLeftInputValue(newValue);\n                }}\n              />\n            </View>\n          )}\n          <View className=\"mb-2\">\n            <InputNumber\n              label={isUnilateral ? \"Completed reps (right)\" : \"Completed reps\"}\n              value={repsInputValue ?? 0}\n              data-testid=\"modal-amrap-input\"\n              testID=\"modal-amrap-input\"\n              data-name=\"modal-input-autofocus\"\n              min={0}\n              step={1}\n              onUpdate={(newValue) => {\n                setRepsInputValue(newValue);\n              }}\n            />\n          </View>\n        </View>\n      )}\n      {askWeight && (\n        <View className=\"mb-2\">\n          <InputWeight\n            exerciseType={entry?.exercise || props.programExercise?.exerciseType}\n            label=\"Weight\"\n            units={[\"kg\", \"lb\"]}\n            value={weightInputValue || Weight_build(0, props.settings.units)}\n            data-testid=\"modal-amrap-weight-input\"\n            testID=\"modal-amrap-weight-input\"\n            settings={props.settings}\n            onUpdate={(newValue) => {\n              setWeightInputValue(newValue);\n            }}\n          />\n        </View>\n      )}\n      {logRpe && (\n        <View className=\"mb-2\">\n          <InputNumber\n            label=\"Completed RPE\"\n            value={rpeInputValue ?? 0}\n            data-testid=\"modal-rpe-input\"\n            testID=\"modal-rpe-input\"\n            data-name=\"modal-rpe-autofocus\"\n            min={0}\n            max={10}\n            step={0.5}\n            onUpdate={(newValue) => {\n              setRpeInputValue(newValue);\n            }}\n          />\n        </View>\n      )}\n      {props.programExercise && userVars && (\n        <UserPromptedStateVars\n          userVarInputValues={userVarInputValues}\n          onUpdate={(key, value) => {\n            setUserVarInputValues((prev) => {\n              const previousValue = prev[key];\n              const typedValue = Weight_is(previousValue)\n                ? Weight_build(value, previousValue.unit)\n                : Weight_isPct(previousValue)\n                  ? Weight_buildPct(value)\n                  : value;\n              return { ...prev, [key]: typedValue };\n            });\n          }}\n        />\n      )}\n      <View className=\"flex-row justify-between gap-3 mt-4\">\n        <Button\n          name=\"modal-amrap-clear\"\n          data-testid=\"modal-amrap-clear\"\n          testID=\"modal-amrap-clear\"\n          kind=\"grayv2\"\n          onClick={() => {\n            onDone();\n          }}\n        >\n          Cancel\n        </Button>\n        <Button\n          name=\"modal-amrap-submit\"\n          kind=\"purple\"\n          data-testid=\"modal-amrap-submit\"\n          testID=\"modal-amrap-submit\"\n          className=\"ls-modal-set-amrap\"\n          onClick={() => {\n            const amrapValue = isAmrap ? (repsInputValue ?? 0) : undefined;\n            const amrapLeftValue = isAmrap && isUnilateral ? (repsLeftInputValue ?? 0) : undefined;\n            const rpeValue = logRpe ? rpeInputValue : undefined;\n            const weightOrPctValue = askWeight\n              ? (weightInputValue ?? Weight_build(0, props.settings.units))\n              : undefined;\n            const weightValue =\n              weightOrPctValue != null && Weight_isPct(weightOrPctValue)\n                ? Weight_build(weightOrPctValue.value, props.settings.units)\n                : weightOrPctValue;\n\n            onDone(amrapValue, amrapLeftValue, rpeValue, weightValue, userVarInputValues);\n          }}\n        >\n          Done\n        </Button>\n      </View>\n    </View>\n  );\n}\n\ninterface IUserPromptedStateVarsProps {\n  userVarInputValues: Record<string, number | IWeight | IPercentage>;\n  onUpdate: (key: string, value: number) => void;\n}\n\nexport function UserPromptedStateVars(props: IUserPromptedStateVarsProps): JSX.Element {\n  return (\n    <>\n      <GroupHeader size=\"large\" name=\"Enter new state variables values\" />\n      {ObjectUtils_keys(props.userVarInputValues).map((key, i) => {\n        return (\n          <UserPromptedStateVar\n            key={key}\n            k={key}\n            index={i}\n            value={props.userVarInputValues[key]}\n            onUpdate={(value) => props.onUpdate(key, value)}\n          />\n        );\n      })}\n    </>\n  );\n}\n\ninterface IUserPromptedStateVarProps {\n  k: string;\n  index: number;\n  value: number | IWeight | IPercentage;\n  onUpdate: (value: number) => void;\n}\n\nexport function UserPromptedStateVar(props: IUserPromptedStateVarProps): JSX.Element {\n  const { k: key, value } = props;\n  const num = Weight_is(value) || Weight_isPct(value) ? value.value : value;\n  const label = Weight_is(value) ? `${key}, ${value.unit}` : key;\n  return (\n    <View className={props.index !== 0 ? \"mt-2\" : \"\"}>\n      <InputNumber\n        data-testid={`modal-state-vars-user-prompt-input-${key}`}\n        testID={`modal-state-vars-user-prompt-input-${key}`}\n        label={label}\n        value={num}\n        min={Weight_is(value) || Weight_isPct(value) ? 0 : undefined}\n        step={1}\n        onUpdate={props.onUpdate}\n      />\n    </View>\n  );\n}\n","import type { JSX } from \"react\";\nimport { IScreenMuscle } from \"../../../types\";\nimport { Svg, G, Path } from \"../../primitives/svg\";\n\nexport interface IMuscleStyle {\n  fill?: string;\n  opacity?: number;\n}\n\nexport type IMuscleMapInput = Partial<Record<IScreenMuscle, IMuscleStyle>>;\n\ninterface IProps {\n  muscles?: IMuscleMapInput;\n  contour?: IMuscleStyle;\n  defaultOpacity?: number;\n}\n\nexport function BackMusclesSvg(props: IProps): JSX.Element {\n  function getOpacity(muscle: IScreenMuscle): number {\n    return props.muscles?.[muscle]?.opacity ?? props.defaultOpacity ?? 0.3;\n  }\n\n  function getFill(muscle: IScreenMuscle): string {\n    return props.muscles?.[muscle]?.fill ?? \"#28839F\";\n  }\n\n  return (\n    <Svg viewBox=\"0 0 112 234\" width=\"100%\" style={{ aspectRatio: 112 / 234 }}>\n      <G stroke=\"none\" strokeWidth={1} fillRule=\"evenodd\">\n        <G opacity={getOpacity(\"back\")} fill={getFill(\"back\")} transform=\"translate(28.250948, 26.431691)\">\n          <Path d=\"M35.9680522,9.13730908 C38.8320522,11.1953091 42.9700522,10.4693091 50.9080522,14.4123091 C51.2320522,14.5753091 49.1140522,14.4813091 45.8350522,16.9633091 C43.6450522,18.6223091 42.0270522,21.4113091 41.4740522,23.6993091 C40.2560522,28.7353091 43.2730522,34.5193091 28.1810522,48.6723091 C27.4940522,49.3173091 27.2850522,30.2523091 27.2850522,26.4733091 C27.2850522,16.5813091 31.7200522,16.9003091 31.7200522,14.0713091 C31.7200522,11.4243091 28.1350522,6.20330908 28.1350522,0.791309078 C28.1350522,-0.0556909219 31.0710522,-0.377690922 31.4190522,0.610309078 C32.7860522,4.49030908 33.8330522,7.60430908 35.9680522,9.13730908\" />\n          <Path d=\"M43.0610522,24.1823091 C44.3150522,26.9673091 49.9490522,28.6003091 51.0240522,29.0923091 C48.4690522,30.1203091 41.7640522,34.4473091 40.2560522,35.6883091 C43.0740522,29.9743091 42.0380522,21.9123091 43.0610522,24.1823091\" />\n          <Path d=\"M52.7930522,36.4753091 C49.8070522,39.8143091 39.0880522,38.4473091 40.0650522,37.4703091 C41.0420522,36.4923091 51.1440522,30.0483091 53.1350522,29.8473091 C53.4480522,29.8163091 53.5260522,35.6563091 52.7930522,36.4753091\" />\n          <Path d=\"M28.7539993,49.7363091 C28.7300522,56.4563091 36.8800522,70.0883091 38.2910522,69.7783091 C39.0220522,69.6183091 40.0560522,67.8413091 40.6530522,66.7553091 C44.7920522,59.2263091 46.3330522,60.6353091 46.8570522,57.3813091 C48.2300522,48.8393091 50.4510522,46.2123091 52.8590522,37.8483091 C52.8590522,37.8483091 48.1820522,41.3763091 39.3010522,39.0833091 C38.0780522,38.7683091 36.8480522,41.7863091 33.7820522,44.8523091 C30.5980522,48.0373091 28.7539993,49.7363091 28.7539993,49.7363091\" />\n          <Path d=\"M46.6220522,60.7673091 C46.1770522,64.3603091 45.9710522,66.4213091 45.7710522,72.4233091 C45.7100522,74.2423091 43.0570522,71.3253091 39.9840522,70.8303091 C39.4030522,70.7373091 44.2910522,62.2103091 46.6220522,60.7673091\" />\n          <Path d=\"M17.3940522,9.13730908 C14.5300522,11.1953091 10.3930522,10.4693091 2.45505221,14.4123091 C2.12905221,14.5753091 4.24805221,14.4813091 7.52705221,16.9633091 C9.71705221,18.6223091 11.3360522,21.4113091 11.8890522,23.6993091 C13.1060522,28.7353091 10.0890522,34.5193091 25.1820522,48.6723091 C25.8690522,49.3173091 26.0780522,30.2523091 26.0780522,26.4733091 C26.0780522,16.5813091 21.6430522,16.9003091 21.6430522,14.0713091 C21.6430522,11.4243091 25.2280522,6.20330908 25.2280522,0.791309078 C25.2280522,-0.0556909219 22.2910522,-0.377690922 21.9430522,0.610309078 C20.5770522,4.49030908 19.5290522,7.60430908 17.3940522,9.13730908\" />\n          <Path d=\"M10.3020522,24.1823091 C9.04705221,26.9673091 3.41305221,28.6003091 2.33805221,29.0923091 C4.89305221,30.1203091 11.5990522,34.4473091 13.1060522,35.6883091 C10.2890522,29.9743091 11.3240522,21.9123091 10.3020522,24.1823091\" />\n          <Path d=\"M0.569052212,36.4753091 C3.55605221,39.8143091 14.2750522,38.4473091 13.2980522,37.4703091 C12.3210522,36.4923091 2.21905221,30.0483091 0.228052212,29.8473091 C-0.0849477882,29.8163091 -0.163947788,35.6563091 0.569052212,36.4753091\" />\n          <Path d=\"M24.6090522,49.7363091 C24.6080522,56.4093091 16.4820522,70.0883091 15.0710522,69.7783091 C14.3400522,69.6183091 13.3060522,67.8413091 12.7090522,66.7553091 C8.57005221,59.2263091 7.02905221,60.6353091 6.50605221,57.3813091 C5.13205221,48.8393091 2.91105221,46.2123091 0.503052212,37.8483091 C0.503052212,37.8483091 5.18005221,41.3763091 14.0620522,39.0833091 C15.2850522,38.7683091 16.5150522,41.7863091 19.5800522,44.8523091 C22.7650522,48.0373091 24.6090522,49.7363091 24.6090522,49.7363091\" />\n          <Path d=\"M6.74005221,60.7673091 C7.18605221,64.3603091 7.39205221,66.4213091 7.59105221,72.4233091 C7.65205221,74.2423091 10.3060522,71.3253091 13.3790522,70.8303091 C13.9590522,70.7373091 9.07105221,62.2103091 6.74005221,60.7673091\" />\n          <Path d=\"M25.6370522,50.5203091 C25.6370522,50.5203091 24.9130522,59.4613091 16.7120522,70.0963091 C15.0190522,72.2923091 24.5430522,75.3873091 24.8610522,74.8593091 C25.0160522,74.6013091 25.2550522,69.3553091 25.3620522,63.8543091 C25.4730522,58.0793091 26.0730522,51.3893091 25.6370522,50.5203091\" />\n          <Path d=\"M27.7260522,50.5203091 C27.7260522,50.5203091 28.4500522,59.4613091 36.6500522,70.0963091 C38.3440522,72.2923091 28.8190522,75.3873091 28.5020522,74.8593091 C28.3470522,74.6013091 28.1070522,69.3553091 28.0010522,63.8543091 C27.8900522,58.0793091 27.2910522,51.3893091 27.7260522,50.5203091\" />\n        </G>\n        <G opacity={getOpacity(\"shoulders\")} fill={getFill(\"shoulders\")} transform=\"translate(18.066334, 41.383607)\">\n          <Path d=\"M73.6946662,19.5123927 C74.1236662,20.7313927 70.8456662,16.9743927 66.0286662,14.6253927 C64.9236662,14.0853927 63.7206662,13.6143927 62.4326662,13.2813927 C55.7296662,11.5513927 50.6486662,7.4553927 56.4656662,3.0313927 C59.8166662,0.481392703 62.7956662,-0.305607297 64.2976662,0.101392703 C70.5046662,1.7903927 71.7466662,6.5153927 72.0596662,10.2943927 C72.3586662,13.9153927 72.9196662,17.3093927 73.6946662,19.5123927\" />\n          <Path d=\"M0.0376662226,19.5123927 C-0.391333777,20.7313927 2.88666622,16.9743927 7.70366622,14.6253927 C8.80766622,14.0853927 10.0116662,13.6143927 11.2996662,13.2813927 C18.0016662,11.5513927 23.0826662,7.4553927 17.2666662,3.0313927 C13.9146662,0.481392703 10.9356662,-0.305607297 9.43466622,0.101392703 C3.22666622,1.7903927 1.98466622,6.5153927 1.67266622,10.2943927 C1.37366622,13.9153927 0.811666223,17.3093927 0.0376662226,19.5123927\" />\n        </G>\n        <G opacity={getOpacity(\"glutes\")} fill={getFill(\"glutes\")} transform=\"translate(34.187744, 98.720793)\">\n          <Path d=\"M23.7202557,4.81520662 C20.3782557,7.55720662 21.1492557,10.8362066 21.1562557,15.4562066 C21.1702557,23.8472066 21.8352557,25.2402066 25.3352557,26.9842066 C29.2182557,28.9192066 37.8072557,27.1362066 39.8722557,23.1822066 C42.6572557,17.8482066 41.4352557,7.73320662 39.2792557,5.57720662 C32.8392557,-0.863793377 25.6042557,3.26820662 23.7202557,4.81520662\" />\n          <Path d=\"M39.4502557,2.02720662 C40.3512557,2.92720662 40.0742557,5.57620662 39.7242557,5.22720662 C38.9542557,4.45520662 38.4502557,3.07720662 34.5182557,1.63620662 C31.7932557,0.637206623 29.0422557,1.59720662 27.6532557,2.01920662 C27.5062557,2.06420662 34.8732557,-2.55179338 39.4502557,2.02720662\" />\n          <Path d=\"M17.7692557,4.81520662 C21.1102557,7.55720662 20.3392557,10.8362066 20.3322557,15.4562066 C20.3192557,23.8472066 19.6532557,25.2402066 16.1532557,26.9842066 C12.2702557,28.9192066 3.68225567,27.1362066 1.61625567,23.1822066 C-1.16774433,17.8482066 0.0532556698,7.73320662 2.20925567,5.57720662 C8.64925567,-0.863793377 15.8842557,3.26820662 17.7692557,4.81520662\" />\n          <Path d=\"M2.03925567,2.02720662 C1.13825567,2.92720662 1.41525567,5.57620662 1.76425567,5.22720662 C2.53525567,4.45520662 3.03925567,3.07720662 6.97125567,1.63620662 C9.69625567,0.637206623 12.4462557,1.59720662 13.8352557,2.01920662 C13.9822557,2.06420662 6.61625567,-2.55179338 2.03925567,2.02720662\" />\n        </G>\n        <G opacity={getOpacity(\"triceps\")} fill={getFill(\"triceps\")} transform=\"translate(13.910000, 56.592542)\">\n          <Path d=\"M77.867,6.10045803 C78.74,7.18445803 80.201,14.818458 79.539,21.383458 C79.316,23.600458 82.045,30.354458 82.045,30.354458 C82.045,30.354458 80.98,32.026458 79.799,29.065458 C78.841,26.665458 78.247,22.690458 76.635,23.287458 C74.056,24.240458 78.636,31.390458 77.194,32.832458 C76.535,33.491458 69.434,29.496458 68.907,27.676458 C67.059,23.919458 64.888,21.917458 64.697,18.145458 C67.944,11.412458 69.759,2.13145803 68.983,0.0444580343 C68.767,-0.535541966 76.762,4.72645803 77.867,6.10045803\" />\n          <Path d=\"M4.176,6.10045803 C3.305,7.18445803 1.844,14.818458 2.506,21.383458 C2.729,23.600458 -1.77635684e-15,30.354458 -1.77635684e-15,30.354458 C-1.77635684e-15,30.354458 1.064,32.026458 2.245,29.065458 C3.203,26.665458 3.797,22.690458 5.409,23.287458 C7.988,24.240458 3.408,31.390458 4.851,32.832458 C5.51,33.491458 12.611,29.496458 13.137,27.676458 C14.986,23.919458 17.157,21.917458 17.348,18.145458 C14.1,11.412458 12.286,2.13145803 13.062,0.0444580343 C13.278,-0.535541966 5.282,4.72645803 4.176,6.10045803\" />\n        </G>\n        <G opacity={getOpacity(\"forearms\")} fill={getFill(\"forearms\")} transform=\"translate(8.884225, 87.710000)\">\n          <Path d=\"M87.3597749,1.77635684e-15 C83.5077749,2.421 87.0947749,5.983 91.2647749,21.423 C90.4567749,16.818 90.8587749,14.882 90.2327749,11.01 C89.3387749,5.486 87.9407749,2.17 87.3597749,1.77635684e-15\" />\n          <Path d=\"M82.1847749,2.973 C83.3317749,2.293 84.3667749,1.769 89.8397749,19.553 C90.5397749,21.827 91.3447749,23.224 91.9167749,25.939 C92.1437749,27.018 92.2267749,29.494 91.7307749,32.052 C91.6747749,32.343 91.8737749,26.085 90.6257749,25.984 C89.9917749,25.932 90.4727749,29.365 89.7897749,32.351 C89.7097749,29.215 89.6457749,26.08 88.8577749,26.072 C88.3207749,26.066 88.2717749,29.773 87.5877749,32.114 C87.5877749,32.114 87.8837749,26.159 86.9667749,26.15 C86.3257749,26.143 86.5397749,28.705 85.6297749,31.354 C85.9727749,28.079 85.4967749,25.28 85.4557749,24.609 C85.3597749,23.033 84.9917749,21.411 84.4407749,20.169 C83.1617749,17.284 82.0067749,15.811 80.6617749,11.918 C78.5737749,5.875 81.5697749,3.339 82.1847749,2.973\" />\n          <Path d=\"M4.73577495,1.77635684e-15 C8.58877495,2.421 5.00177495,5.983 0.83177495,21.423 C1.63877495,16.818 1.23677495,14.882 1.86377495,11.01 C2.75777495,5.486 4.15577495,2.17 4.73577495,1.77635684e-15\" />\n          <Path d=\"M9.91077495,2.973 C8.76377495,2.293 7.72977495,1.769 2.25577495,19.553 C1.55577495,21.827 0.75077495,23.224 0.17877495,25.939 C-0.0472250502,27.018 -0.13022505,29.494 0.36477495,32.052 C0.42077495,32.343 0.22177495,26.085 1.46977495,25.984 C2.10477495,25.932 1.62377495,29.365 2.30577495,32.351 C2.38677495,29.215 2.44977495,26.08 3.23777495,26.072 C3.77577495,26.066 3.82377495,29.773 4.50877495,32.114 C4.50877495,32.114 4.21277495,26.159 5.12977495,26.15 C5.76977495,26.143 5.55677495,28.705 6.46677495,31.354 C6.12277495,28.079 6.59877495,25.28 6.63977495,24.609 C6.73577495,23.033 7.10377495,21.411 7.65477495,20.169 C8.93477495,17.284 10.0897749,15.811 11.4347749,11.918 C13.5217749,5.875 10.5267749,3.339 9.91077495,2.973\" />\n        </G>\n        <G opacity={getOpacity(\"calves\")} fill={getFill(\"calves\")}>\n          <Path d=\"M67.3921472,171.386525 C67.5501472,169.093525 68.7271472,166.419525 71.9541472,166.022525 C74.9691472,165.653525 76.4921472,170.109525 76.4921472,170.109525 C76.4921472,170.109525 76.5041472,165.262525 80.5761472,165.011525 C84.1701472,164.790525 84.2251472,167.778525 85.0761472,171.341525 C86.6841472,178.084525 86.1111472,181.780525 86.1111472,193.331525 C86.1111472,198.661525 85.5671472,200.133525 84.4561472,200.133525 C81.1451472,200.133525 78.8531472,191.641525 78.8531472,191.641525 C78.8531472,191.641525 77.2711472,201.834525 74.9691472,200.708525 C73.8791472,200.175525 72.0921472,191.607525 70.5611472,186.674525 C68.6791472,180.613525 67.0841472,175.846525 67.3921472,171.386525\" />\n          <Path d=\"M41.8191472,171.386525 C41.6601472,169.093525 40.4841472,166.419525 37.2561472,166.022525 C34.2411472,165.653525 32.7181472,170.109525 32.7181472,170.109525 C32.7181472,170.109525 32.7061472,165.262525 28.6341472,165.011525 C25.0411472,164.790525 24.9861472,167.778525 24.1351472,171.341525 C22.5261472,178.084525 23.0991472,181.780525 23.0991472,193.331525 C23.0991472,198.661525 23.6441472,200.133525 24.7551472,200.133525 C28.0661472,200.133525 30.3581472,191.641525 30.3581472,191.641525 C30.3581472,191.641525 31.9401472,201.834525 34.2411472,200.708525 C35.3321472,200.175525 37.1181472,191.607525 38.6501472,186.674525 C40.5311472,180.613525 42.1261472,175.846525 41.8191472,171.386525\" />\n        </G>\n        <G opacity={getOpacity(\"hamstrings\")} fill={getFill(\"hamstrings\")} transform=\"translate(24.854000, 126.371014)\">\n          <Path d=\"M0,39.6679856 C1.625,21.7309856 6.213,15.0139856 8.982,8.48798559 C12.615,-0.071014412 13.997,-0.457014412 15.859,0.223985588 C17.654,0.882985588 20.203,1.31098559 23.163,1.31098559 C28.225,1.31098559 25.864,13.9659856 24.646,18.4529856 C22.544,26.1889856 17.624,34.4509856 17.624,42.4709856 C15.286,31.2039856 11.943,36.4709856 12.707,25.6259856 C8.314,35.0709856 5.767,30.5509856 0,39.6679856\" />\n          <Path d=\"M60.156,39.6679856 C58.532,21.7309856 53.944,15.0139856 51.174,8.48798559 C47.542,-0.071014412 46.16,-0.457014412 44.298,0.223985588 C42.502,0.882985588 39.954,1.31098559 36.993,1.31098559 C31.931,1.31098559 34.292,13.9659856 35.511,18.4529856 C37.612,26.1889856 42.533,34.4509856 42.533,42.4709856 C44.871,31.2039856 48.213,36.4709856 47.449,25.6259856 C51.842,35.0709856 54.39,30.5509856 60.156,39.6679856\" />\n        </G>\n        <G opacity={props.contour?.opacity ?? 1} fill={props.contour?.fill ?? \"#28839F\"}>\n          <Path d=\"M108.882,126.739 C108.742,126.835 108.552,126.88 108.364,126.903 C108.268,126.915 108.174,126.922 108.08,126.925 L107.928,126.924 C107.889,126.92 107.855,126.916 107.816,126.905 C107.661,126.866 107.499,126.781 107.348,126.687 C107.197,126.592 107.052,126.486 106.915,126.373 C106.775,126.264 106.644,126.147 106.515,126.033 C106.383,125.923 106.262,125.803 106.14,125.692 C105.898,125.466 105.664,125.25 105.452,125.033 C105.347,124.925 105.246,124.816 105.151,124.708 C105.053,124.602 104.96,124.498 104.873,124.393 C104.7,124.185 104.543,123.986 104.403,123.798 C104.265,123.606 104.146,123.426 104.037,123.261 C103.83,122.927 103.681,122.647 103.591,122.456 C103.584,122.442 103.578,122.427 103.571,122.414 C103.561,122.234 103.548,122.054 103.532,121.874 C103.492,121.44 103.439,121.008 103.375,120.577 C103.311,120.146 103.226,119.718 103.133,119.295 C103.081,119.085 103.032,118.872 102.976,118.663 L102.794,118.038 C102.787,118.014 102.763,118 102.738,118.004 C102.712,118.008 102.694,118.034 102.699,118.061 L102.7,118.063 L102.817,118.698 L102.912,119.335 C102.968,119.76 103.009,120.187 103.042,120.614 C103.103,121.469 103.116,122.325 103.089,123.178 C103.072,123.606 103.049,124.032 103.013,124.457 C102.978,124.878 102.932,125.313 102.867,125.711 C102.771,126.119 102.65,126.544 102.545,126.957 C102.444,127.374 102.333,127.784 102.222,128.187 C102.112,128.591 101.985,128.991 101.868,129.393 C101.806,129.594 101.741,129.814 101.686,130.005 C101.633,130.184 101.561,130.368 101.479,130.55 C101.317,130.917 101.117,131.28 100.898,131.632 C100.679,131.983 100.446,132.33 100.201,132.668 C99.947,133.003 99.667,133.321 99.373,133.62 C99.079,133.92 98.761,134.195 98.415,134.425 C98.068,134.65 97.688,134.831 97.289,134.893 C97.09,134.924 96.889,134.923 96.696,134.884 C96.53,134.854 96.36,134.776 96.239,134.685 C96.509,134.504 96.74,134.293 96.937,134.083 C97.159,133.837 97.344,133.591 97.498,133.352 C97.607,133.246 97.717,133.138 97.824,133.028 C97.975,132.877 98.121,132.72 98.264,132.561 C98.409,132.403 98.547,132.239 98.681,132.071 C98.952,131.738 99.196,131.382 99.418,131.009 C99.636,130.636 99.849,130.258 100.022,129.858 C100.11,129.658 100.191,129.456 100.267,129.251 C100.345,129.047 100.404,128.836 100.462,128.626 C100.577,128.204 100.647,127.768 100.674,127.332 C100.682,127.114 100.685,126.896 100.667,126.679 C100.651,126.463 100.617,126.247 100.568,126.039 C100.563,126.019 100.547,126.003 100.526,126.001 C100.499,125.998 100.475,126.017 100.472,126.044 C100.448,126.256 100.415,126.46 100.377,126.664 C100.336,126.867 100.294,127.067 100.237,127.264 C100.183,127.461 100.125,127.655 100.056,127.846 C99.985,128.037 99.917,128.227 99.837,128.413 C99.76,128.6 99.67,128.782 99.585,128.966 C99.498,129.148 99.405,129.328 99.307,129.507 C99.109,129.86 98.91,130.215 98.685,130.554 L98.011,131.582 L97.322,132.617 C97.088,132.962 96.849,133.307 96.597,133.643 C96.488,133.792 96.374,133.937 96.261,134.085 C96.04,134.249 95.795,134.395 95.524,134.506 C95.307,134.593 95.077,134.651 94.815,134.709 C94.564,134.768 94.303,134.824 94.039,134.87 C93.777,134.921 93.508,134.954 93.243,134.972 C93.11,134.978 92.978,134.979 92.853,134.964 C92.73,134.951 92.61,134.922 92.535,134.872 C92.462,134.823 92.434,134.772 92.445,134.666 C92.458,134.561 92.518,134.44 92.595,134.333 C92.751,134.11 92.968,133.924 93.203,133.751 C93.676,133.392 94.149,133.034 94.614,132.68 C95.079,132.324 95.525,131.941 95.895,131.511 C96.267,131.085 96.591,130.637 96.855,130.188 C97.119,129.735 97.313,129.278 97.46,128.848 C97.602,128.415 97.696,128.009 97.757,127.647 C97.818,127.285 97.841,126.966 97.854,126.704 C97.86,126.441 97.857,126.236 97.851,126.096 C97.843,125.957 97.838,125.882 97.838,125.882 C97.837,125.87 97.829,125.859 97.816,125.855 C97.801,125.851 97.784,125.861 97.78,125.877 L97.78,125.878 C97.78,125.878 97.762,125.95 97.728,126.085 C97.701,126.219 97.648,126.417 97.583,126.664 C97.516,126.911 97.438,127.209 97.326,127.543 C97.218,127.878 97.087,128.25 96.917,128.643 C96.754,129.039 96.55,129.455 96.318,129.884 C96.086,130.313 95.813,130.755 95.491,131.186 C95.167,131.614 94.826,132.06 94.431,132.478 C94.303,132.615 94.166,132.744 94.025,132.871 C93.974,132.907 93.92,132.945 93.858,132.987 C93.673,133.113 93.446,133.26 93.175,133.413 C92.905,133.562 92.593,133.72 92.243,133.855 C91.892,133.989 91.501,134.103 91.083,134.147 C90.667,134.19 90.224,134.159 89.814,134.005 C89.611,133.927 89.416,133.821 89.252,133.681 C89.17,133.612 89.094,133.537 89.034,133.456 C88.977,133.382 88.932,133.293 88.921,133.238 C88.928,133.231 88.934,133.225 88.944,133.217 C88.965,133.199 88.981,133.181 89.005,133.164 C89.091,133.092 89.186,133.012 89.284,132.938 C89.484,132.791 89.681,132.632 89.882,132.473 C90.275,132.149 90.684,131.836 91.058,131.489 C91.245,131.312 91.429,131.138 91.611,130.966 C91.795,130.794 91.984,130.64 92.169,130.467 C92.465,130.073 92.75,129.691 93.021,129.329 C93.287,128.966 93.495,128.591 93.652,128.228 C93.728,128.045 93.799,127.87 93.858,127.699 C93.913,127.527 93.964,127.363 94.004,127.207 C94.082,126.893 94.124,126.613 94.142,126.383 C94.16,126.152 94.155,125.967 94.147,125.843 C94.134,125.721 94.127,125.657 94.127,125.657 C94.125,125.645 94.118,125.634 94.105,125.632 C94.09,125.627 94.073,125.635 94.069,125.652 C94.069,125.652 94.052,125.716 94.019,125.834 C93.985,125.949 93.938,126.118 93.867,126.328 C93.798,126.538 93.708,126.79 93.593,127.073 C93.481,127.357 93.341,127.674 93.18,128.014 C93.018,128.354 92.847,128.726 92.672,129.13 C92.583,129.329 92.492,129.538 92.387,129.743 C92.336,129.848 92.279,129.95 92.221,130.055 C92.162,130.153 92.107,130.286 92.042,130.341 C92.034,130.349 92.025,130.357 92.016,130.365 C91.917,130.425 91.771,130.512 91.584,130.621 C91.21,130.836 90.667,131.138 89.986,131.409 C89.645,131.54 89.267,131.665 88.869,131.722 C88.674,131.75 88.463,131.758 88.303,131.712 C88.265,131.7 88.229,131.686 88.211,131.671 C88.203,131.666 88.198,131.66 88.194,131.656 C88.172,131.544 88.148,131.43 88.125,131.316 C88.076,131.097 88.05,130.885 88.054,130.696 C88.059,130.508 88.114,130.337 88.184,130.226 C88.188,130.218 88.224,130.163 88.222,130.17 C88.23,130.165 88.227,130.164 88.241,130.152 C88.261,130.131 88.296,130.101 88.333,130.072 C88.41,130.009 88.502,129.945 88.596,129.876 C88.787,129.739 88.993,129.6 89.198,129.457 C89.404,129.315 89.608,129.165 89.803,128.997 L89.946,128.867 L90.09,128.731 C90.23,128.601 90.283,128.47 90.337,128.346 C90.387,128.22 90.428,128.098 90.461,127.976 C90.497,127.856 90.529,127.737 90.557,127.618 C90.622,127.383 90.673,127.149 90.739,126.924 C90.864,126.47 91.029,126.04 91.156,125.624 C91.287,125.21 91.361,124.809 91.402,124.437 C91.446,124.065 91.473,123.723 91.486,123.42 C91.488,123.38 91.489,123.342 91.49,123.303 C91.539,123.134 91.59,122.962 91.646,122.78 C91.73,122.505 91.819,122.216 91.911,121.915 C91.958,121.774 92.002,121.576 92.042,121.387 L92.058,121.315 L92.065,121.255 L92.08,121.133 L92.085,121.071 L92.089,121.041 L92.09,121.034 L92.09,120.966 L92.085,120.834 C92.074,120.486 92.043,120.157 92.023,119.826 C91.973,119.168 91.937,118.52 91.937,117.915 C91.936,117.764 91.938,117.616 91.945,117.471 C91.949,117.326 91.955,117.184 91.968,117.048 C91.985,116.773 92.023,116.518 92.063,116.28 C92.085,116.163 92.111,116.051 92.131,115.942 C92.161,115.837 92.19,115.736 92.217,115.642 C92.222,115.62 92.23,115.602 92.236,115.582 C92.269,115.588 92.302,115.575 92.319,115.545 C92.319,115.545 92.342,115.504 92.387,115.426 C92.429,115.343 92.493,115.22 92.555,115.05 C92.685,114.709 92.774,114.152 92.713,113.483 C92.667,112.813 92.517,112.029 92.317,111.147 C92.117,110.265 91.857,109.287 91.559,108.225 C91.409,107.689 91.254,107.153 91.075,106.565 C90.984,106.283 90.891,105.995 90.796,105.703 C90.693,105.409 90.588,105.107 90.477,104.804 C90.032,103.602 89.499,102.377 88.908,101.128 C88.316,99.881 87.672,98.612 87.059,97.303 C86.437,96 85.87,94.648 85.384,93.268 C84.899,91.888 84.484,90.483 84.205,89.076 C84.125,88.726 84.063,88.374 84.009,88.024 C83.98,87.849 83.952,87.675 83.923,87.502 L83.901,87.372 L83.884,87.233 L83.85,86.967 C83.81,86.618 83.755,86.26 83.697,85.904 C83.671,85.725 83.636,85.55 83.604,85.376 C83.571,85.202 83.541,85.026 83.499,84.855 C83.203,83.474 82.726,82.176 82.223,80.989 C81.972,80.397 81.705,79.833 81.48,79.308 C81.426,79.18 81.373,79.051 81.32,78.925 L81.246,78.743 L81.169,78.541 C81.07,78.273 80.96,78.012 80.861,77.758 C80.451,76.754 80.05,75.836 79.715,75.028 C79.375,74.22 79.117,73.516 78.95,72.93 C78.866,72.637 78.813,72.373 78.778,72.137 C78.871,71.889 78.963,71.638 79.057,71.391 C79.428,70.41 79.793,69.443 80.134,68.486 C80.469,67.528 80.781,66.581 81.042,65.643 C81.303,64.705 81.527,63.782 81.685,62.875 C81.837,61.969 81.945,61.086 81.998,60.235 C82.107,58.532 81.989,56.969 81.807,55.605 C81.783,55.434 81.76,55.267 81.736,55.102 C81.707,54.938 81.678,54.778 81.649,54.619 C81.589,54.303 81.542,53.998 81.473,53.709 C81.408,53.419 81.346,53.141 81.286,52.876 C81.221,52.611 81.15,52.362 81.087,52.124 C80.966,51.648 80.829,51.228 80.719,50.863 C80.611,50.497 80.501,50.192 80.414,49.945 C80.24,49.45 80.148,49.186 80.148,49.186 C80.138,49.158 80.108,49.141 80.078,49.149 C80.047,49.157 80.028,49.189 80.037,49.219 C80.037,49.219 80.107,49.491 80.24,49.999 C80.307,50.252 80.389,50.565 80.47,50.934 C80.554,51.303 80.66,51.723 80.747,52.204 C80.947,53.157 81.135,54.325 81.253,55.667 C81.375,57.01 81.4,58.533 81.243,60.175 C81.164,60.996 81.03,61.844 80.854,62.716 C80.666,63.586 80.439,64.477 80.162,65.384 C79.887,66.292 79.56,67.214 79.208,68.151 C78.862,69.093 78.488,70.049 78.107,71.026 C77.343,72.979 76.57,75.021 75.941,77.154 C75.782,77.685 75.642,78.226 75.498,78.766 C75.431,79.038 75.364,79.31 75.296,79.583 L75.271,79.684 L75.258,79.735 L75.25,79.774 L75.245,79.8 L75.209,80.005 C75.187,80.144 75.169,80.298 75.15,80.443 C75.021,81.574 74.981,82.691 74.917,83.813 C74.803,86.051 74.604,88.279 74.336,90.467 C74.068,92.653 73.758,94.803 73.573,96.895 C73.388,98.99 73.204,101.003 73.143,102.955 C73.14,103.208 73.131,103.432 73.15,103.731 L73.158,103.844 C73.158,103.849 73.167,103.903 73.164,103.891 L73.168,103.913 L73.176,103.956 L73.206,104.13 C73.224,104.243 73.251,104.368 73.276,104.488 C73.302,104.609 73.328,104.73 73.353,104.849 C73.381,104.964 73.408,105.078 73.436,105.191 C73.491,105.416 73.546,105.638 73.601,105.86 C73.825,106.74 74.037,107.589 74.264,108.398 C74.488,109.208 74.701,109.983 74.914,110.719 C75.129,111.453 75.333,112.149 75.526,112.804 C75.727,113.457 75.914,114.067 76.088,114.632 C76.268,115.194 76.433,115.711 76.582,116.177 C76.898,117.106 77.146,117.837 77.315,118.334 C77.403,118.581 77.475,118.771 77.523,118.898 C77.572,119.026 77.596,119.091 77.596,119.091 C77.596,119.092 77.598,119.092 77.598,119.092 C77.598,119.093 77.597,119.094 77.598,119.094 L78.015,120.377 L78.414,121.66 L78.795,122.949 L79.157,124.244 C79.283,124.673 79.391,125.108 79.509,125.54 C79.627,125.971 79.739,126.405 79.846,126.841 C80.07,127.707 80.28,128.577 80.489,129.447 L80.787,130.757 C80.891,131.192 80.987,131.628 81.081,132.065 L81.363,133.378 L81.627,134.694 C81.809,135.57 81.972,136.449 82.137,137.328 C82.291,138.209 82.45,139.089 82.59,139.971 L82.81,141.295 L83.01,142.62 C83.158,143.503 83.266,144.389 83.398,145.274 C83.511,146.16 83.637,147.049 83.739,147.933 L84.061,150.61 C84.168,151.502 84.243,152.392 84.336,153.284 C84.435,154.175 84.472,155.071 84.535,155.966 C84.566,156.413 84.579,156.86 84.59,157.307 C84.6,157.756 84.621,158.203 84.621,158.65 C84.613,159.096 84.617,159.546 84.599,159.991 L84.568,160.658 C84.549,160.876 84.538,161.106 84.507,161.31 C84.505,161.324 84.505,161.338 84.505,161.35 L84.505,161.352 C84.574,162.658 84.637,163.964 84.677,165.271 L84.735,167.229 C84.741,167.553 84.75,167.883 84.748,168.202 C84.75,168.497 84.709,168.836 84.713,169.184 C84.713,169.864 84.783,170.531 84.865,171.187 C84.948,171.843 85.045,172.491 85.141,173.136 C85.329,174.425 85.497,175.708 85.597,176.997 C85.701,178.284 85.746,179.575 85.729,180.866 C85.722,181.515 85.697,182.149 85.665,182.81 L85.587,184.77 C85.548,186.079 85.526,187.405 85.536,188.714 C85.544,190.026 85.544,191.337 85.586,192.645 C85.615,193.955 85.655,195.262 85.697,196.571 L85.853,200.495 L86.036,204.414 L86.136,206.374 C86.165,207.02 86.172,207.678 86.188,208.33 C86.2,208.983 86.228,209.641 86.25,210.296 L86.356,212.261 L86.499,214.223 C86.552,214.877 86.625,215.528 86.686,216.18 L86.782,217.158 L86.898,218.133 L87.132,220.085 C87.301,221.383 87.497,222.677 87.683,223.972 C87.688,224.003 87.715,224.025 87.746,224.022 C87.778,224.019 87.801,223.991 87.798,223.959 L87.798,223.958 L87.427,220.053 L87.362,219.236 C87.462,219.331 87.599,219.433 87.768,219.538 C87.987,219.675 88.263,219.806 88.587,219.923 C88.749,219.98 88.924,220.036 89.11,220.08 C89.297,220.122 89.499,220.14 89.712,220.146 C90.143,220.149 90.606,220.112 91.075,220.231 C91.565,220.338 92.145,220.258 92.457,220.507 C92.616,220.624 92.746,220.791 92.869,220.987 C92.996,221.18 93.113,221.399 93.223,221.63 C93.277,221.746 93.328,221.864 93.38,221.984 L93.457,222.166 L93.489,222.244 C93.5,222.274 93.518,222.314 93.52,222.328 C93.577,222.497 93.613,222.746 93.625,222.983 C93.646,223.469 93.592,223.991 93.508,224.499 C93.422,225.008 93.303,225.51 93.167,225.993 C93.029,226.473 92.869,226.932 92.703,227.362 C92.532,227.79 92.354,228.188 92.168,228.545 C91.98,228.898 91.794,229.216 91.604,229.478 C91.417,229.743 91.229,229.956 91.06,230.113 C90.892,230.273 90.739,230.375 90.631,230.437 C90.576,230.469 90.533,230.491 90.504,230.504 C90.5,230.507 90.498,230.508 90.494,230.508 C90.485,230.506 90.475,230.504 90.465,230.505 C90.465,230.505 88.46,230.666 84.95,230.949 C84.073,231.017 83.102,231.091 82.045,231.149 C80.989,231.206 79.843,231.258 78.633,231.214 C78.032,231.186 77.404,231.139 76.813,230.977 C76.521,230.895 76.235,230.776 76.042,230.596 L76.023,230.58 C76.018,230.575 76.016,230.573 76.006,230.561 L75.963,230.516 L75.877,230.424 C75.818,230.362 75.766,230.3 75.713,230.239 C75.608,230.119 75.503,229.989 75.404,229.858 C75.009,229.332 74.678,228.746 74.519,228.105 C74.356,227.465 74.383,226.782 74.536,226.093 C74.847,224.708 75.623,223.331 76.239,221.796 C76.552,221.029 76.842,220.222 77.052,219.371 C77.264,218.52 77.386,217.625 77.395,216.713 C77.396,216.484 77.391,216.256 77.38,216.027 L77.357,215.683 L77.332,215.356 C77.297,214.921 77.262,214.48 77.227,214.039 C77.156,213.156 77.083,212.26 77.011,211.358 C76.938,210.454 76.864,209.54 76.79,208.617 C76.706,207.693 76.633,206.764 76.526,205.811 C76.473,205.336 76.408,204.853 76.322,204.377 L76.258,204.008 L76.187,203.658 C76.143,203.428 76.074,203.175 76.018,202.934 C75.772,201.981 75.457,201.058 75.138,200.137 C74.491,198.3 73.827,196.459 73.23,194.575 C72.929,193.635 72.644,192.688 72.375,191.727 C72.093,190.768 71.811,189.807 71.529,188.843 C70.954,186.921 70.366,184.995 69.846,183.056 C69.344,181.114 68.936,179.158 68.734,177.186 C68.692,176.692 68.63,176.202 68.607,175.707 C68.577,175.214 68.536,174.722 68.524,174.228 C68.503,173.735 68.485,173.244 68.479,172.752 L68.465,172.013 L68.461,171.83 L68.453,171.626 C68.447,171.501 68.444,171.382 68.436,171.252 C68.389,170.706 68.319,170.199 68.216,169.699 C68.119,169.196 67.996,168.706 67.868,168.219 C67.604,167.249 67.295,166.307 66.971,165.382 C66.313,163.533 65.604,161.743 64.895,159.993 C63.467,156.5 62.052,153.158 60.971,149.912 C60.699,149.101 60.443,148.299 60.222,147.501 C59.999,146.705 59.793,145.891 59.588,145.112 C59.178,143.544 58.797,142.02 58.449,140.556 C57.745,137.628 57.151,134.932 56.673,132.533 C56.558,131.932 56.446,131.351 56.338,130.791 C56.238,130.228 56.142,129.686 56.048,129.165 C55.87,128.122 55.707,127.163 55.588,126.294 C55.456,125.425 55.373,124.645 55.291,123.968 C55.226,123.29 55.17,122.712 55.126,122.244 C55.104,121.899 55.088,121.615 55.075,121.391 C55.317,122.167 55.663,122.933 56.153,123.629 C56.42,124.005 56.727,124.361 57.073,124.676 C57.418,124.993 57.803,125.266 58.208,125.5 C59.019,125.966 59.91,126.25 60.796,126.405 C61.684,126.564 62.572,126.592 63.436,126.547 C64.301,126.504 65.146,126.393 65.966,126.25 C66.376,126.177 66.782,126.096 67.181,126.011 L67.478,125.944 L67.639,125.906 L67.783,125.87 C67.979,125.816 68.162,125.777 68.366,125.715 C69.178,125.482 69.932,125.196 70.654,124.822 C71.372,124.451 72.038,123.995 72.6,123.453 C73.167,122.915 73.631,122.299 73.975,121.655 C74.325,121.012 74.559,120.347 74.707,119.702 C75.007,118.407 75.017,117.203 74.941,116.161 C74.868,115.118 74.712,114.223 74.555,113.499 C74.401,112.77 74.248,112.209 74.141,111.828 C74.029,111.447 73.969,111.244 73.969,111.244 C73.969,111.244 73.999,111.454 74.054,111.845 C74.109,112.237 74.183,112.813 74.255,113.544 C74.321,114.275 74.384,115.165 74.363,116.176 C74.331,117.183 74.243,118.325 73.88,119.477 C73.697,120.05 73.453,120.624 73.123,121.165 C72.794,121.707 72.37,122.209 71.861,122.642 C71.352,123.075 70.768,123.452 70.124,123.759 C69.484,124.066 68.769,124.309 68.055,124.489 C66.555,124.837 64.961,125.145 63.377,125.207 C62.98,125.222 62.584,125.221 62.19,125.2 C61.797,125.183 61.405,125.147 61.021,125.083 C60.253,124.958 59.512,124.725 58.854,124.358 C58.197,123.991 57.63,123.488 57.171,122.888 C56.713,122.285 56.374,121.582 56.132,120.842 C55.895,120.099 55.729,119.326 55.633,118.546 C55.582,118.155 55.554,117.762 55.529,117.379 C55.521,117.182 55.511,116.973 55.506,116.785 C55.503,116.587 55.5,116.387 55.497,116.189 C55.465,114.607 55.417,113.08 55.399,111.635 C55.391,110.194 55.386,108.83 55.56,107.608 C55.648,106.999 55.79,106.427 56.006,105.92 C56.221,105.411 56.505,104.966 56.834,104.592 C57.162,104.217 57.525,103.911 57.873,103.645 C58.222,103.378 58.564,103.159 58.873,102.96 C59.496,102.569 60.008,102.297 60.352,102.104 C60.7,101.916 60.885,101.815 60.885,101.815 C60.885,101.815 60.692,101.899 60.33,102.057 C59.97,102.222 59.438,102.458 58.783,102.803 C58.455,102.979 58.096,103.178 57.721,103.43 C57.346,103.679 56.949,103.972 56.574,104.349 C56.2,104.723 55.853,105.188 55.592,105.73 C55.328,106.271 55.144,106.878 55.017,107.513 C54.98,107.697 54.949,107.883 54.92,108.072 C54.892,107.886 54.86,107.703 54.825,107.522 C54.697,106.886 54.513,106.279 54.25,105.739 C53.989,105.197 53.642,104.733 53.267,104.357 C52.893,103.981 52.495,103.688 52.12,103.438 C51.746,103.187 51.385,102.988 51.059,102.812 C50.402,102.467 49.871,102.231 49.512,102.066 C49.149,101.908 48.956,101.823 48.956,101.823 C48.956,101.823 49.141,101.924 49.489,102.112 C49.834,102.305 50.346,102.578 50.969,102.968 C51.277,103.168 51.62,103.385 51.967,103.654 C52.316,103.919 52.679,104.225 53.007,104.6 C53.337,104.974 53.621,105.42 53.835,105.928 C54.051,106.436 54.192,107.008 54.281,107.617 C54.456,108.839 54.451,110.203 54.442,111.644 C54.425,113.089 54.376,114.616 54.344,116.198 C54.342,116.396 54.338,116.594 54.335,116.794 C54.331,116.982 54.32,117.191 54.313,117.387 C54.288,117.77 54.259,118.165 54.208,118.553 C54.112,119.334 53.946,120.108 53.71,120.85 C53.467,121.591 53.128,122.294 52.67,122.897 C52.211,123.497 51.645,123.999 50.987,124.366 C50.33,124.734 49.588,124.967 48.82,125.092 C48.437,125.156 48.045,125.192 47.651,125.209 C47.258,125.23 46.861,125.231 46.464,125.216 C44.88,125.154 43.287,124.845 41.787,124.499 C41.072,124.319 40.357,124.075 39.717,123.768 C39.074,123.46 38.49,123.084 37.98,122.651 C37.471,122.217 37.047,121.716 36.719,121.174 C36.39,120.632 36.145,120.059 35.962,119.486 C35.598,118.334 35.51,117.192 35.479,116.185 C35.457,115.174 35.521,114.284 35.586,113.553 C35.66,112.821 35.732,112.247 35.787,111.854 C35.844,111.463 35.873,111.253 35.873,111.253 C35.873,111.253 35.813,111.456 35.701,111.837 C35.594,112.217 35.44,112.78 35.287,113.508 C35.13,114.233 34.974,115.126 34.901,116.171 C34.824,117.212 34.834,118.416 35.134,119.711 C35.283,120.356 35.517,121.021 35.866,121.664 C36.21,122.308 36.675,122.923 37.241,123.462 C37.804,124.005 38.471,124.46 39.188,124.831 C39.909,125.204 40.664,125.491 41.476,125.722 C41.68,125.786 41.862,125.826 42.059,125.878 L42.203,125.916 L42.364,125.953 L42.661,126.019 C43.061,126.105 43.465,126.185 43.875,126.258 C44.696,126.401 45.54,126.513 46.405,126.555 C47.27,126.601 48.158,126.574 49.046,126.414 C49.932,126.258 50.823,125.974 51.634,125.508 C52.038,125.275 52.423,125.003 52.769,124.686 C53.114,124.37 53.421,124.014 53.688,123.637 C54.178,122.942 54.523,122.175 54.767,121.401 C54.754,121.624 54.736,121.908 54.716,122.251 C54.67,122.719 54.616,123.298 54.551,123.976 C54.469,124.654 54.386,125.432 54.253,126.301 C54.134,127.171 53.973,128.13 53.793,129.173 C53.7,129.694 53.604,130.236 53.503,130.799 C53.396,131.359 53.283,131.94 53.168,132.541 C52.69,134.94 52.096,137.636 51.393,140.564 C51.043,142.028 50.664,143.551 50.253,145.12 C50.048,145.899 49.842,146.713 49.62,147.508 C49.399,148.306 49.141,149.109 48.871,149.92 C47.79,153.166 46.374,156.508 44.947,160.001 C44.237,161.751 43.528,163.54 42.871,165.389 C42.546,166.316 42.236,167.257 41.974,168.227 C41.846,168.714 41.722,169.203 41.626,169.706 C41.521,170.207 41.452,170.715 41.405,171.259 C41.396,171.388 41.394,171.508 41.388,171.633 L41.38,171.838 L41.376,172.022 L41.362,172.759 C41.356,173.252 41.338,173.744 41.317,174.236 C41.305,174.73 41.264,175.221 41.234,175.716 C41.211,176.21 41.149,176.7 41.107,177.194 C40.905,179.165 40.498,181.122 39.996,183.064 C39.476,185.003 38.887,186.928 38.313,188.852 C38.03,189.815 37.748,190.776 37.467,191.735 C37.198,192.696 36.913,193.643 36.611,194.584 C36.015,196.467 35.35,198.307 34.704,200.145 C34.385,201.067 34.07,201.989 33.823,202.942 C33.768,203.183 33.698,203.436 33.655,203.665 L33.583,204.016 L33.52,204.384 C33.434,204.862 33.368,205.343 33.314,205.819 C33.208,206.772 33.136,207.702 33.052,208.626 C32.977,209.548 32.903,210.461 32.831,211.365 C32.758,212.268 32.686,213.163 32.615,214.046 C32.579,214.489 32.544,214.928 32.509,215.364 L32.483,215.691 L32.461,216.035 C32.451,216.263 32.446,216.492 32.447,216.72 C32.455,217.633 32.577,218.528 32.79,219.379 C32.999,220.23 33.289,221.037 33.602,221.804 C34.218,223.34 34.994,224.717 35.306,226.101 C35.458,226.79 35.485,227.472 35.322,228.113 C35.164,228.755 34.833,229.341 34.437,229.866 C34.338,229.997 34.234,230.128 34.128,230.247 C34.075,230.308 34.024,230.37 33.964,230.431 L33.878,230.524 L33.835,230.57 C33.826,230.58 33.824,230.583 33.818,230.588 L33.8,230.604 C33.606,230.784 33.32,230.903 33.028,230.985 C32.437,231.146 31.81,231.194 31.208,231.221 C29.999,231.266 28.853,231.214 27.797,231.157 C26.739,231.098 25.769,231.026 24.891,230.957 C21.382,230.675 19.376,230.512 19.376,230.512 C19.368,230.511 19.361,230.517 19.354,230.519 C19.348,230.517 19.344,230.515 19.338,230.512 C19.308,230.499 19.265,230.477 19.21,230.446 C19.103,230.383 18.95,230.281 18.782,230.121 C18.612,229.964 18.425,229.75 18.238,229.486 C18.047,229.224 17.861,228.906 17.673,228.552 C17.488,228.196 17.309,227.798 17.138,227.37 C16.973,226.94 16.813,226.481 16.674,226.001 C16.539,225.518 16.419,225.016 16.333,224.507 C16.25,223.999 16.195,223.477 16.217,222.991 C16.228,222.754 16.265,222.505 16.321,222.336 C16.323,222.322 16.341,222.282 16.353,222.252 L16.384,222.174 L16.461,221.992 C16.514,221.873 16.564,221.754 16.619,221.637 C16.729,221.407 16.846,221.188 16.973,220.995 C17.096,220.799 17.226,220.632 17.385,220.514 C17.696,220.266 18.276,220.344 18.767,220.24 C19.235,220.121 19.699,220.158 20.129,220.154 C20.342,220.148 20.544,220.13 20.731,220.087 C20.918,220.044 21.092,219.989 21.254,219.93 C21.579,219.814 21.855,219.682 22.074,219.546 C22.242,219.441 22.379,219.339 22.479,219.244 L22.415,220.06 L22.043,223.966 L22.043,223.967 C22.04,223.997 22.062,224.025 22.093,224.03 C22.125,224.034 22.154,224.012 22.159,223.981 C22.344,222.684 22.541,221.39 22.709,220.092 L22.943,218.141 L23.059,217.166 L23.155,216.188 C23.217,215.536 23.289,214.885 23.342,214.231 L23.485,212.269 L23.591,210.304 C23.613,209.649 23.642,208.991 23.654,208.338 C23.669,207.686 23.676,207.028 23.706,206.382 L23.805,204.422 L23.988,200.503 L24.144,196.579 C24.186,195.271 24.227,193.964 24.255,192.653 C24.297,191.344 24.298,190.034 24.306,188.722 C24.314,187.414 24.294,186.087 24.254,184.778 L24.177,182.819 C24.144,182.156 24.119,181.523 24.112,180.874 C24.096,179.582 24.141,178.292 24.244,177.005 C24.345,175.717 24.513,174.434 24.7,173.144 C24.796,172.5 24.894,171.852 24.976,171.195 C25.058,170.54 25.128,169.872 25.127,169.192 C25.132,168.843 25.092,168.506 25.094,168.21 C25.091,167.889 25.1,167.562 25.106,167.237 L25.165,165.279 C25.204,163.971 25.268,162.666 25.336,161.36 L25.336,161.358 C25.336,161.345 25.336,161.332 25.334,161.319 C25.303,161.114 25.293,160.883 25.272,160.666 L25.242,159.999 C25.224,159.553 25.229,159.104 25.22,158.658 C25.221,158.212 25.241,157.763 25.251,157.316 C25.262,156.868 25.275,156.42 25.306,155.972 C25.37,155.079 25.406,154.182 25.505,153.292 C25.599,152.4 25.673,151.509 25.78,150.618 L26.103,147.942 C26.204,147.055 26.331,146.169 26.443,145.282 C26.575,144.397 26.684,143.51 26.832,142.628 L27.031,141.302 L27.251,139.98 C27.391,139.096 27.551,138.217 27.704,137.336 C27.87,136.458 28.033,135.578 28.214,134.701 L28.478,133.385 L28.761,132.074 C28.854,131.635 28.951,131.2 29.055,130.764 L29.353,129.455 C29.561,128.585 29.771,127.715 29.996,126.848 C30.103,126.414 30.214,125.979 30.332,125.548 C30.45,125.116 30.558,124.68 30.684,124.252 L31.046,122.957 L31.427,121.668 L31.826,120.384 L32.244,119.102 L32.244,119.1 C32.244,119.1 32.245,119.099 32.246,119.098 C32.246,119.098 32.271,119.033 32.318,118.906 C32.367,118.779 32.438,118.589 32.526,118.342 C32.695,117.843 32.943,117.114 33.259,116.185 C33.409,115.718 33.574,115.202 33.754,114.639 C33.927,114.074 34.114,113.464 34.315,112.812 C34.508,112.158 34.712,111.462 34.928,110.727 C35.14,109.992 35.353,109.216 35.578,108.406 C35.804,107.596 36.017,106.749 36.24,105.868 C36.294,105.647 36.35,105.424 36.405,105.199 C36.432,105.086 36.46,104.972 36.488,104.857 C36.513,104.738 36.539,104.617 36.565,104.496 C36.591,104.376 36.618,104.251 36.635,104.137 L36.666,103.964 L36.673,103.921 L36.677,103.899 C36.675,103.911 36.684,103.857 36.683,103.852 L36.692,103.738 C36.709,103.44 36.702,103.216 36.698,102.963 C36.638,101.01 36.453,98.999 36.269,96.904 C36.083,94.812 35.773,92.662 35.505,90.473 C35.237,88.287 35.038,86.059 34.925,83.82 C34.86,82.699 34.82,81.583 34.691,80.451 C34.672,80.305 34.654,80.152 34.632,80.012 L34.596,79.807 L34.592,79.782 L34.583,79.744 L34.57,79.692 L34.545,79.591 C34.479,79.318 34.411,79.046 34.344,78.774 C34.199,78.233 34.06,77.693 33.9,77.162 C33.271,75.029 32.499,72.987 31.733,71.035 C31.354,70.057 30.979,69.1 30.633,68.16 C30.282,67.22 29.955,66.299 29.68,65.391 C29.402,64.485 29.175,63.593 28.988,62.723 C28.811,61.852 28.677,61.004 28.598,60.183 C28.441,58.541 28.466,57.018 28.588,55.677 C28.706,54.332 28.895,53.165 29.094,52.213 C29.181,51.732 29.288,51.312 29.372,50.942 C29.452,50.573 29.534,50.26 29.602,50.007 C29.734,49.499 29.805,49.228 29.805,49.228 C29.812,49.199 29.797,49.169 29.768,49.159 C29.737,49.147 29.704,49.164 29.693,49.194 C29.693,49.194 29.601,49.458 29.427,49.953 C29.34,50.2 29.231,50.505 29.122,50.871 C29.012,51.236 28.875,51.656 28.754,52.132 C28.691,52.37 28.621,52.62 28.555,52.884 C28.496,53.149 28.434,53.427 28.369,53.717 C28.299,54.005 28.252,54.311 28.192,54.628 C28.163,54.786 28.135,54.946 28.105,55.11 C28.082,55.275 28.059,55.442 28.034,55.612 C27.852,56.976 27.734,58.54 27.844,60.243 C27.896,61.094 28.004,61.976 28.156,62.884 C28.314,63.79 28.539,64.713 28.799,65.651 C29.06,66.589 29.372,67.536 29.707,68.494 C30.048,69.452 30.414,70.419 30.784,71.399 C30.877,71.645 30.97,71.896 31.063,72.146 C31.028,72.381 30.975,72.646 30.891,72.938 C30.725,73.525 30.466,74.227 30.126,75.036 C29.791,75.843 29.391,76.761 28.98,77.765 C28.881,78.02 28.771,78.281 28.671,78.55 L28.596,78.751 L28.521,78.933 C28.469,79.059 28.416,79.188 28.361,79.316 C28.137,79.841 27.87,80.405 27.618,80.998 C27.116,82.184 26.639,83.482 26.342,84.863 C26.3,85.034 26.27,85.21 26.237,85.383 C26.206,85.558 26.171,85.733 26.145,85.913 C26.087,86.268 26.031,86.626 25.992,86.976 L25.958,87.241 L25.939,87.38 L25.918,87.508 C25.89,87.683 25.861,87.857 25.833,88.032 C25.777,88.383 25.717,88.734 25.637,89.084 C25.357,90.49 24.943,91.896 24.457,93.276 C23.971,94.656 23.404,96.008 22.783,97.312 C22.17,98.62 21.525,99.888 20.933,101.135 C20.342,102.384 19.809,103.61 19.364,104.813 C19.253,105.115 19.148,105.418 19.045,105.712 C18.95,106.003 18.857,106.291 18.766,106.573 C18.587,107.161 18.433,107.697 18.283,108.232 C17.984,109.295 17.725,110.274 17.524,111.156 C17.324,112.037 17.174,112.821 17.128,113.492 C17.067,114.159 17.156,114.717 17.286,115.057 C17.349,115.228 17.413,115.351 17.455,115.434 C17.5,115.512 17.522,115.552 17.522,115.552 C17.536,115.576 17.562,115.587 17.589,115.588 C17.594,115.606 17.601,115.624 17.605,115.642 C17.632,115.736 17.661,115.837 17.69,115.942 C17.709,116.051 17.734,116.164 17.757,116.28 C17.794,116.518 17.831,116.773 17.845,117.049 C17.857,117.184 17.862,117.327 17.865,117.471 C17.871,117.615 17.871,117.764 17.869,117.915 C17.864,118.519 17.822,119.167 17.766,119.825 C17.743,120.156 17.71,120.485 17.698,120.834 L17.693,120.967 L17.692,120.984 L17.693,121.031 L17.694,121.036 L17.694,121.044 L17.698,121.073 L17.704,121.135 L17.718,121.257 L17.726,121.317 L17.741,121.389 C17.782,121.579 17.826,121.776 17.872,121.917 C17.964,122.217 18.053,122.506 18.138,122.78 C18.193,122.963 18.245,123.135 18.292,123.303 C18.294,123.342 18.295,123.38 18.297,123.42 C18.311,123.723 18.337,124.065 18.382,124.437 C18.423,124.809 18.496,125.21 18.626,125.624 C18.755,126.04 18.919,126.47 19.044,126.924 C19.11,127.149 19.161,127.383 19.227,127.618 C19.254,127.737 19.287,127.856 19.323,127.976 C19.355,128.098 19.396,128.22 19.446,128.346 C19.5,128.47 19.553,128.601 19.693,128.731 L19.837,128.867 L19.98,128.997 C20.175,129.165 20.379,129.315 20.585,129.457 C20.79,129.6 20.997,129.739 21.187,129.876 C21.28,129.945 21.372,130.009 21.451,130.072 C21.486,130.101 21.521,130.131 21.542,130.152 C21.557,130.164 21.553,130.165 21.562,130.17 C21.56,130.163 21.595,130.218 21.599,130.226 C21.669,130.337 21.725,130.508 21.73,130.696 C21.733,130.885 21.707,131.097 21.658,131.316 C21.635,131.43 21.611,131.544 21.589,131.656 C21.585,131.66 21.581,131.666 21.572,131.671 C21.554,131.686 21.519,131.7 21.481,131.712 C21.32,131.758 21.109,131.75 20.914,131.722 C20.517,131.665 20.138,131.54 19.797,131.409 C19.117,131.138 18.574,130.836 18.199,130.621 C18.012,130.512 17.867,130.425 17.767,130.365 C17.759,130.357 17.749,130.349 17.741,130.341 C17.676,130.286 17.622,130.153 17.562,130.055 C17.504,129.95 17.448,129.848 17.397,129.743 C17.292,129.538 17.2,129.329 17.111,129.13 C16.937,128.726 16.766,128.354 16.603,128.014 C16.442,127.674 16.302,127.357 16.191,127.073 C16.075,126.79 15.985,126.538 15.917,126.328 C15.844,126.118 15.799,125.949 15.765,125.834 C15.731,125.716 15.714,125.652 15.714,125.652 C15.711,125.64 15.701,125.632 15.689,125.631 C15.673,125.629 15.658,125.64 15.656,125.657 C15.656,125.657 15.649,125.721 15.636,125.843 C15.629,125.967 15.623,126.152 15.641,126.383 C15.659,126.613 15.702,126.893 15.779,127.207 C15.819,127.363 15.87,127.527 15.926,127.699 C15.984,127.87 16.055,128.045 16.131,128.228 C16.288,128.591 16.497,128.966 16.763,129.329 C17.033,129.691 17.319,130.073 17.614,130.467 C17.799,130.64 17.987,130.794 18.171,130.966 C18.354,131.138 18.539,131.312 18.725,131.489 C19.1,131.836 19.508,132.149 19.901,132.473 C20.102,132.632 20.299,132.791 20.499,132.938 C20.597,133.012 20.692,133.092 20.778,133.164 C20.802,133.181 20.819,133.199 20.839,133.217 C20.85,133.225 20.855,133.231 20.862,133.238 C20.852,133.293 20.807,133.382 20.749,133.456 C20.688,133.537 20.613,133.612 20.531,133.681 C20.367,133.821 20.173,133.927 19.969,134.005 C19.56,134.159 19.116,134.19 18.7,134.147 C18.283,134.103 17.892,133.989 17.541,133.855 C17.19,133.72 16.879,133.562 16.607,133.413 C16.338,133.26 16.109,133.113 15.924,132.987 C15.864,132.945 15.81,132.907 15.758,132.871 C15.618,132.744 15.481,132.615 15.353,132.478 C14.958,132.06 14.616,131.614 14.292,131.186 C13.97,130.755 13.697,130.313 13.465,129.884 C13.233,129.455 13.029,129.039 12.866,128.643 C12.697,128.25 12.565,127.878 12.457,127.543 C12.345,127.209 12.268,126.911 12.2,126.664 C12.135,126.417 12.083,126.219 12.056,126.085 C12.021,125.95 12.003,125.878 12.003,125.878 L12.003,125.877 C12,125.865 11.989,125.855 11.976,125.854 C11.96,125.853 11.946,125.866 11.945,125.882 C11.945,125.882 11.94,125.957 11.932,126.096 C11.926,126.236 11.923,126.441 11.929,126.704 C11.942,126.966 11.965,127.285 12.026,127.647 C12.087,128.009 12.181,128.415 12.324,128.848 C12.471,129.278 12.665,129.735 12.928,130.188 C13.192,130.637 13.517,131.085 13.888,131.511 C14.258,131.941 14.704,132.324 15.169,132.68 C15.635,133.034 16.107,133.392 16.58,133.751 C16.815,133.924 17.031,134.11 17.188,134.333 C17.266,134.44 17.325,134.561 17.339,134.666 C17.35,134.772 17.321,134.823 17.249,134.872 C17.174,134.922 17.054,134.951 16.93,134.964 C16.805,134.979 16.673,134.978 16.541,134.972 C16.275,134.954 16.006,134.921 15.744,134.87 C15.48,134.824 15.219,134.768 14.968,134.709 C14.706,134.651 14.477,134.593 14.26,134.506 C13.989,134.395 13.744,134.249 13.522,134.085 C13.409,133.937 13.295,133.792 13.187,133.643 C12.934,133.307 12.696,132.962 12.461,132.617 L11.772,131.582 L11.098,130.554 C10.874,130.215 10.674,129.86 10.476,129.507 C10.378,129.328 10.285,129.148 10.198,128.966 C10.114,128.782 10.023,128.6 9.946,128.413 C9.866,128.227 9.798,128.037 9.727,127.846 C9.658,127.655 9.601,127.461 9.546,127.264 C9.489,127.067 9.447,126.867 9.406,126.664 C9.368,126.46 9.334,126.256 9.312,126.044 C9.309,126.024 9.294,126.006 9.273,126.002 C9.247,125.995 9.221,126.013 9.215,126.039 C9.167,126.247 9.133,126.463 9.117,126.679 C9.099,126.896 9.102,127.114 9.109,127.332 C9.136,127.768 9.206,128.204 9.321,128.626 C9.379,128.836 9.438,129.047 9.517,129.251 C9.592,129.456 9.674,129.658 9.761,129.858 C9.934,130.258 10.147,130.636 10.365,131.009 C10.586,131.382 10.831,131.738 11.103,132.071 C11.236,132.239 11.374,132.403 11.519,132.561 C11.662,132.72 11.809,132.877 11.959,133.028 C12.066,133.138 12.176,133.246 12.286,133.352 C12.44,133.591 12.625,133.837 12.847,134.083 C13.043,134.293 13.274,134.504 13.544,134.685 C13.423,134.776 13.254,134.854 13.087,134.884 C12.895,134.923 12.694,134.924 12.495,134.893 C12.096,134.831 11.715,134.65 11.369,134.425 C11.022,134.195 10.705,133.92 10.41,133.62 C10.117,133.321 9.837,133.003 9.583,132.668 C9.337,132.33 9.104,131.983 8.885,131.632 C8.667,131.28 8.466,130.917 8.305,130.55 C8.222,130.368 8.15,130.184 8.097,130.005 C8.042,129.814 7.978,129.594 7.916,129.393 C7.797,128.991 7.671,128.591 7.562,128.187 C7.451,127.784 7.339,127.374 7.237,126.957 C7.133,126.544 7.013,126.119 6.916,125.711 C6.852,125.313 6.806,124.878 6.771,124.457 C6.734,124.032 6.711,123.606 6.694,123.178 C6.667,122.325 6.681,121.469 6.742,120.614 C6.773,120.187 6.815,119.76 6.872,119.335 L6.967,118.698 L7.083,118.063 L7.084,118.06 C7.088,118.036 7.074,118.011 7.049,118.005 C7.024,117.998 6.997,118.012 6.99,118.038 L6.808,118.663 C6.75,118.872 6.702,119.085 6.651,119.295 C6.558,119.718 6.473,120.146 6.409,120.577 C6.344,121.008 6.291,121.44 6.251,121.874 C6.235,122.054 6.223,122.234 6.211,122.414 C6.206,122.427 6.199,122.442 6.191,122.456 C6.103,122.647 5.953,122.927 5.746,123.261 C5.638,123.426 5.519,123.606 5.38,123.798 C5.239,123.986 5.083,124.185 4.91,124.393 C4.823,124.498 4.73,124.602 4.632,124.708 C4.538,124.816 4.437,124.925 4.332,125.033 C4.12,125.25 3.885,125.466 3.644,125.692 C3.521,125.803 3.4,125.923 3.268,126.033 C3.14,126.147 3.009,126.264 2.868,126.373 C2.731,126.486 2.586,126.592 2.435,126.687 C2.284,126.781 2.123,126.866 1.967,126.905 C1.927,126.916 1.895,126.92 1.855,126.924 L1.704,126.925 C1.608,126.922 1.516,126.915 1.419,126.903 C1.231,126.88 1.041,126.835 0.901,126.739 C0.759,126.646 0.698,126.503 0.717,126.323 C0.738,126.144 0.823,125.956 0.925,125.776 C1.129,125.41 1.448,125.116 1.701,124.692 C1.944,124.3 2.164,123.893 2.379,123.485 C2.594,123.079 2.81,122.668 3.03,122.288 C3.085,122.195 3.144,122.099 3.199,122.022 C3.228,121.981 3.255,121.943 3.28,121.916 L3.339,121.845 C3.357,121.821 3.372,121.806 3.402,121.758 C3.463,121.668 3.487,121.618 3.522,121.556 C3.552,121.499 3.583,121.439 3.608,121.383 C3.664,121.27 3.71,121.159 3.758,121.048 C4.125,120.164 4.427,119.289 4.75,118.439 C4.908,118.014 5.063,117.595 5.228,117.2 C5.309,117.004 5.394,116.807 5.481,116.651 C5.504,116.614 5.525,116.575 5.544,116.549 L5.558,116.526 C5.562,116.521 5.536,116.552 5.55,116.535 L5.557,116.527 L5.569,116.51 L5.595,116.478 L5.608,116.464 C5.618,116.451 5.655,116.415 5.684,116.385 C5.717,116.355 5.75,116.324 5.787,116.293 C6.084,116.045 6.437,115.797 6.778,115.561 C7.122,115.323 7.458,115.081 7.787,114.838 C8.109,114.586 8.426,114.337 8.702,114.031 C8.771,113.952 8.837,113.874 8.898,113.782 L8.91,113.765 L8.916,113.758 L8.944,113.713 L8.96,113.67 C8.967,113.647 8.975,113.624 8.98,113.601 L8.99,113.559 L9.018,113.42 C9.042,113.286 9.064,113.156 9.087,113.026 C9.133,112.854 9.186,112.65 9.246,112.403 C9.431,111.622 9.692,110.473 9.988,109.005 C10.281,107.535 10.606,105.745 10.932,103.683 C11.092,102.652 11.257,101.547 11.415,100.401 C11.577,99.26 11.797,98.066 12.075,96.828 C12.355,95.591 12.667,94.304 13.035,92.981 C13.395,91.657 13.812,90.298 14.226,88.892 C14.641,87.487 15.086,86.046 15.508,84.553 C15.715,83.805 15.918,83.047 16.102,82.27 C16.286,81.49 16.451,80.706 16.564,79.867 C16.597,79.649 16.609,79.475 16.634,79.252 C16.65,79.05 16.667,78.848 16.683,78.645 C16.714,78.242 16.75,77.837 16.775,77.428 C16.833,76.614 16.883,75.794 16.93,74.969 C17.011,73.323 17.094,71.659 17.177,69.981 C17.272,68.309 17.396,66.632 17.625,64.957 C17.85,63.279 18.18,61.62 18.583,59.959 C18.68,59.544 18.78,59.132 18.888,58.714 C18.985,58.295 19.083,57.876 19.16,57.453 C19.321,56.607 19.442,55.759 19.548,54.912 C19.653,54.066 19.736,53.219 19.833,52.377 C19.876,51.956 19.92,51.535 19.963,51.115 C20.007,50.694 20.043,50.275 20.111,49.871 C20.246,49.055 20.467,48.26 20.792,47.513 C20.956,47.141 21.142,46.781 21.354,46.438 C21.561,46.093 21.794,45.765 22.046,45.456 C23.05,44.213 24.367,43.275 25.788,42.691 C26.498,42.4 27.239,42.192 27.973,42.081 C28.168,42.051 28.363,42.02 28.557,41.991 C28.755,41.961 28.953,41.927 29.151,41.884 C29.349,41.844 29.546,41.802 29.741,41.751 C29.937,41.704 30.131,41.65 30.323,41.591 C31.094,41.363 31.811,41.054 32.503,40.772 C33.195,40.486 33.881,40.23 34.561,39.978 C35.924,39.485 37.28,39.076 38.599,38.71 C39.265,38.527 39.921,38.346 40.564,38.171 C41.211,37.99 41.845,37.799 42.463,37.591 C43.081,37.381 43.681,37.154 44.259,36.859 C44.547,36.708 44.831,36.545 45.096,36.326 C45.359,36.114 45.614,35.824 45.745,35.469 C45.779,35.383 45.803,35.295 45.822,35.208 C45.832,35.164 45.839,35.115 45.847,35.07 L45.86,34.954 C45.87,34.802 45.88,34.652 45.89,34.502 C45.894,34.211 45.903,33.922 45.895,33.643 C45.887,33.083 45.863,32.544 45.836,32.021 C45.728,29.932 45.544,28.124 45.398,26.635 C45.295,25.657 45.199,24.822 45.115,24.136 C45.149,24.211 45.185,24.287 45.22,24.36 C45.318,24.555 45.416,24.749 45.511,24.939 C45.612,25.135 45.712,25.317 45.811,25.502 C46.005,25.871 46.21,26.221 46.405,26.562 C46.799,27.242 47.203,27.858 47.561,28.424 C47.919,28.989 48.192,29.53 48.362,30.055 C48.532,30.58 48.639,31.067 48.717,31.494 C48.801,31.919 48.848,32.286 48.896,32.582 C48.974,33.177 49.016,33.495 49.016,33.495 C49.016,33.495 48.996,33.176 48.958,32.576 C48.931,32.277 48.909,31.906 48.853,31.472 C48.807,31.039 48.729,30.54 48.583,29.989 C48.44,29.438 48.182,28.848 47.851,28.254 C47.522,27.658 47.149,27.036 46.793,26.347 C46.616,26.003 46.431,25.648 46.256,25.274 C46.169,25.09 46.075,24.899 45.99,24.712 C45.903,24.517 45.815,24.32 45.726,24.12 C45.384,23.326 45.05,22.481 44.756,21.579 C44.468,20.676 44.221,19.72 44.028,18.719 C43.832,17.72 43.693,16.675 43.625,15.594 C43.556,14.514 43.537,13.4 43.601,12.263 C43.608,11.979 43.633,11.693 43.655,11.407 C43.68,11.12 43.69,10.831 43.726,10.542 C43.756,10.254 43.786,9.963 43.817,9.671 L43.822,9.616 L43.825,9.594 C43.826,9.589 43.827,9.578 43.828,9.577 L43.845,9.467 L43.878,9.245 L43.913,9.023 L43.957,8.821 C43.989,8.686 44.009,8.553 44.051,8.417 L44.167,8.007 C44.261,7.738 44.353,7.469 44.473,7.209 C44.704,6.686 44.993,6.186 45.335,5.72 C46.02,4.786 46.926,4.002 47.943,3.371 C48.963,2.742 50.1,2.27 51.283,1.949 C52.461,1.629 53.709,1.451 54.91,1.448 C56.148,1.452 57.369,1.627 58.556,1.947 C59.739,2.267 60.877,2.737 61.897,3.364 C62.914,3.995 63.821,4.778 64.506,5.713 C65.189,6.645 65.666,7.71 65.888,8.822 L65.933,9.03 L65.964,9.24 C65.983,9.379 66.012,9.523 66.025,9.656 C66.056,9.952 66.087,10.246 66.117,10.539 C66.153,10.835 66.163,11.116 66.188,11.403 C66.21,11.687 66.234,11.97 66.242,12.256 C66.306,13.392 66.287,14.507 66.217,15.587 C66.148,16.667 66.01,17.713 65.813,18.712 C65.621,19.713 65.374,20.668 65.085,21.57 C64.496,23.371 63.761,24.964 63.047,26.339 C62.691,27.028 62.318,27.649 61.99,28.245 C61.658,28.84 61.401,29.43 61.258,29.981 C61.112,30.532 61.034,31.03 60.987,31.464 C60.932,31.898 60.91,32.268 60.883,32.568 C60.846,33.168 60.826,33.487 60.826,33.487 C60.826,33.487 60.868,33.17 60.946,32.574 C60.994,32.279 61.041,31.911 61.125,31.486 C61.203,31.059 61.31,30.573 61.48,30.048 C61.649,29.522 61.923,28.982 62.281,28.417 C62.64,27.85 63.042,27.235 63.438,26.555 C63.833,25.871 64.234,25.145 64.624,24.35 C64.659,24.278 64.692,24.204 64.727,24.132 C64.642,24.816 64.547,25.651 64.443,26.627 C64.297,28.117 64.114,29.924 64.006,32.012 C63.978,32.535 63.955,33.075 63.946,33.635 C63.938,33.915 63.947,34.203 63.951,34.494 C63.961,34.643 63.971,34.794 63.981,34.946 L63.994,35.062 C64.002,35.106 64.01,35.156 64.02,35.199 C64.039,35.286 64.063,35.375 64.096,35.462 C64.227,35.817 64.482,36.106 64.745,36.318 C65.011,36.536 65.294,36.7 65.582,36.85 C66.16,37.145 66.761,37.374 67.379,37.584 C67.996,37.792 68.63,37.982 69.277,38.163 C69.92,38.339 70.576,38.518 71.243,38.702 C72.562,39.068 73.917,39.477 75.28,39.969 C75.96,40.221 76.646,40.478 77.338,40.764 C78.031,41.047 78.747,41.355 79.519,41.583 C79.71,41.642 79.903,41.696 80.1,41.743 C80.295,41.796 80.492,41.837 80.69,41.875 C80.888,41.919 81.086,41.954 81.285,41.982 C81.479,42.012 81.673,42.043 81.868,42.072 C82.602,42.184 83.343,42.391 84.053,42.682 C85.474,43.266 86.791,44.205 87.795,45.448 C88.047,45.758 88.28,46.085 88.487,46.43 C88.699,46.773 88.886,47.134 89.049,47.506 C89.375,48.252 89.595,49.048 89.73,49.862 C89.799,50.267 89.834,50.685 89.878,51.107 C89.921,51.527 89.965,51.948 90.008,52.368 C90.105,53.211 90.188,54.057 90.294,54.904 C90.399,55.75 90.521,56.599 90.681,57.444 C90.758,57.868 90.856,58.287 90.953,58.706 C91.062,59.124 91.161,59.535 91.259,59.951 C91.661,61.612 91.991,63.27 92.216,64.949 C92.445,66.624 92.569,68.302 92.665,69.973 C92.747,71.651 92.83,73.315 92.912,74.962 C92.958,75.786 93.007,76.606 93.066,77.421 C93.092,77.829 93.127,78.233 93.159,78.638 C93.175,78.841 93.191,79.042 93.207,79.243 C93.232,79.467 93.244,79.641 93.277,79.859 C93.391,80.698 93.556,81.481 93.739,82.261 C93.923,83.038 94.126,83.799 94.333,84.545 C94.755,86.037 95.2,87.479 95.616,88.883 C96.03,90.29 96.447,91.649 96.806,92.973 C97.175,94.297 97.486,95.583 97.766,96.82 C98.044,98.058 98.264,99.253 98.426,100.393 C98.584,101.54 98.749,102.645 98.91,103.675 C99.235,105.736 99.56,107.527 99.854,108.995 C100.143,110.434 100.399,111.563 100.583,112.343 C100.612,112.522 100.642,112.703 100.672,112.889 C100.702,113.062 100.733,113.239 100.766,113.42 L100.793,113.559 L100.803,113.601 C100.809,113.624 100.816,113.647 100.824,113.67 L100.84,113.713 L100.868,113.758 L100.874,113.765 L100.885,113.782 C100.946,113.874 101.013,113.952 101.081,114.031 C101.358,114.337 101.674,114.586 101.996,114.838 C102.324,115.081 102.662,115.323 103.005,115.561 C103.346,115.797 103.699,116.045 103.996,116.293 C104.034,116.324 104.066,116.355 104.1,116.385 C104.129,116.415 104.166,116.451 104.175,116.464 L104.188,116.478 L104.214,116.51 L104.227,116.527 L104.233,116.535 C104.247,116.552 104.222,116.521 104.225,116.526 L104.239,116.549 C104.258,116.575 104.28,116.614 104.301,116.651 C104.389,116.807 104.474,117.004 104.556,117.2 C104.72,117.595 104.875,118.014 105.033,118.439 C105.356,119.289 105.659,120.164 106.025,121.048 C106.073,121.159 106.119,121.27 106.175,121.383 C106.2,121.439 106.231,121.499 106.261,121.556 C106.295,121.618 106.32,121.668 106.381,121.758 C106.412,121.806 106.426,121.821 106.445,121.845 L106.503,121.916 C106.528,121.943 106.557,121.981 106.585,122.022 C106.64,122.099 106.698,122.195 106.754,122.288 C106.974,122.668 107.189,123.079 107.404,123.485 C107.619,123.893 107.839,124.3 108.083,124.692 C108.335,125.116 108.654,125.41 108.858,125.776 C108.96,125.956 109.045,126.144 109.067,126.323 C109.085,126.503 109.024,126.646 108.882,126.739 Z M44.566,24.958 C44.409,24.926 44.244,24.863 44.093,24.74 C43.942,24.618 43.795,24.441 43.658,24.213 C43.38,23.756 43.137,23.121 42.819,22.443 C42.66,22.103 42.5,21.744 42.356,21.37 C42.21,20.997 42.069,20.614 41.925,20.228 C41.786,19.845 41.625,19.458 41.487,19.086 C41.353,18.715 41.243,18.343 41.162,17.981 C41.083,17.62 41.039,17.263 41.057,16.936 C41.074,16.608 41.161,16.308 41.329,16.094 C41.494,15.878 41.732,15.754 41.957,15.693 C42.184,15.632 42.397,15.622 42.571,15.626 C42.641,15.628 42.704,15.632 42.761,15.638 C42.762,15.646 42.762,15.655 42.763,15.664 C42.954,17.893 43.47,19.964 44.126,21.795 C44.342,22.38 44.573,22.94 44.813,23.479 C44.84,23.898 44.873,24.402 44.908,24.982 C44.817,24.985 44.698,24.982 44.566,24.958 Z M67.283,15.782 C67.449,15.819 67.644,15.872 67.823,15.957 C68.004,16.043 68.149,16.163 68.247,16.311 C68.343,16.462 68.432,16.669 68.498,16.957 C68.566,17.242 68.577,17.589 68.536,17.949 C68.5,18.309 68.425,18.687 68.339,19.072 C68.24,19.46 68.111,19.854 68,20.248 C67.771,21.035 67.55,21.822 67.301,22.542 C67.053,23.259 66.778,23.918 66.427,24.397 C66.251,24.635 66.055,24.822 65.85,24.934 C65.646,25.048 65.438,25.081 65.269,25.076 C65.129,25.071 65.015,25.048 64.93,25.024 C64.966,24.424 65,23.904 65.028,23.473 C65.268,22.934 65.498,22.374 65.715,21.786 C66.363,19.979 66.873,17.938 67.069,15.741 C67.133,15.752 67.205,15.765 67.283,15.782 Z M109.355,126.293 C109.329,126.044 109.232,125.829 109.125,125.628 C109.013,125.428 108.894,125.235 108.765,125.05 C108.736,125.007 108.695,124.953 108.673,124.917 L108.583,124.776 C108.534,124.682 108.485,124.596 108.438,124.495 C108.249,124.103 108.1,123.676 107.944,123.247 C107.788,122.816 107.644,122.377 107.442,121.931 C107.39,121.819 107.342,121.707 107.271,121.59 C107.238,121.532 107.204,121.473 107.155,121.41 L107.121,121.362 L107.104,121.341 C107.086,121.317 107.119,121.358 107.114,121.35 L107.107,121.342 C107.092,121.319 107.07,121.288 107.073,121.285 C107.071,121.278 107.044,121.222 107.026,121.181 L106.967,121.037 L106.852,120.726 C106.702,120.301 106.565,119.858 106.427,119.418 C106.285,118.974 106.143,118.533 106.003,118.095 C105.853,117.657 105.695,117.223 105.51,116.793 C105.413,116.576 105.315,116.364 105.181,116.137 C105.145,116.079 105.111,116.023 105.064,115.961 L105.03,115.916 L105.01,115.89 L105.003,115.883 L104.99,115.867 L104.962,115.836 L104.919,115.791 C104.854,115.723 104.809,115.686 104.757,115.641 C104.707,115.6 104.657,115.559 104.608,115.524 C104.218,115.234 103.838,115.031 103.47,114.818 C103.102,114.61 102.739,114.423 102.399,114.226 C102.057,114.037 101.73,113.842 101.455,113.634 C101.388,113.583 101.322,113.529 101.269,113.474 L101.264,113.47 C101.264,113.47 101.263,113.468 101.264,113.468 C101.266,113.469 101.267,113.47 101.267,113.47 C101.267,113.473 101.262,113.454 101.259,113.446 L101.227,113.319 C101.186,113.143 101.145,112.971 101.105,112.802 C100.922,111.997 100.758,111.272 100.617,110.649 C100.552,110.13 100.482,109.55 100.406,108.908 C100.228,107.425 100.022,105.625 99.805,103.557 C99.751,103.042 99.696,102.508 99.64,101.96 C99.584,101.406 99.539,100.849 99.466,100.258 C99.328,99.083 99.134,97.855 98.881,96.587 C98.633,95.316 98.318,94.007 97.969,92.663 C97.615,91.318 97.235,89.935 96.807,88.528 C96.384,87.12 95.943,85.678 95.515,84.207 C95.299,83.472 95.087,82.729 94.897,81.977 C94.707,81.23 94.535,80.46 94.421,79.714 C94.39,79.537 94.369,79.309 94.346,79.134 C94.326,78.935 94.306,78.736 94.286,78.536 C94.248,78.137 94.205,77.736 94.172,77.332 C94.1,76.525 94.035,75.712 93.974,74.892 C93.851,73.253 93.748,71.587 93.589,69.903 C93.436,68.221 93.213,66.524 92.9,64.839 C92.587,63.157 92.188,61.474 91.712,59.833 L91.364,58.601 C91.259,58.19 91.153,57.78 91.068,57.366 C91.021,57.16 90.979,56.952 90.943,56.743 C90.905,56.535 90.863,56.327 90.831,56.118 C90.771,55.698 90.701,55.28 90.651,54.858 C90.54,54.017 90.447,53.174 90.364,52.334 C90.325,51.912 90.287,51.491 90.248,51.071 C90.21,50.652 90.172,50.231 90.118,49.805 C90.003,48.958 89.796,48.121 89.481,47.328 C89.329,46.929 89.151,46.54 88.946,46.167 C88.745,45.791 88.514,45.431 88.263,45.089 C87.26,43.712 85.894,42.632 84.386,41.927 C83.629,41.575 82.843,41.312 82.028,41.147 C81.835,41.11 81.643,41.073 81.451,41.036 C81.264,41.003 81.078,40.966 80.896,40.921 C80.712,40.88 80.531,40.836 80.354,40.783 C80.173,40.737 79.996,40.682 79.821,40.622 C79.121,40.389 78.434,40.096 77.732,39.806 C77.033,39.516 76.332,39.236 75.63,38.992 C74.225,38.503 72.84,38.104 71.493,37.747 C70.823,37.581 70.165,37.418 69.519,37.258 C68.877,37.096 68.253,36.927 67.651,36.741 C67.053,36.552 66.468,36.359 65.944,36.115 C65.425,35.872 64.946,35.572 64.792,35.188 C64.77,35.138 64.755,35.087 64.74,35.033 L64.722,34.958 C64.717,34.926 64.708,34.878 64.707,34.86 C64.694,34.724 64.682,34.589 64.669,34.455 C64.656,34.178 64.636,33.907 64.635,33.633 C64.622,33.087 64.625,32.552 64.633,32.034 C64.671,29.961 64.76,28.148 64.839,26.658 C64.866,26.106 64.896,25.6 64.922,25.139 C65.009,25.167 65.122,25.197 65.26,25.211 C65.446,25.229 65.688,25.21 65.93,25.094 C66.174,24.983 66.406,24.786 66.61,24.541 C67.018,24.048 67.338,23.383 67.635,22.668 C67.93,21.95 68.202,21.173 68.473,20.399 C68.61,20.011 68.735,19.627 68.885,19.247 C69.044,18.864 69.174,18.472 69.269,18.076 C69.36,17.679 69.434,17.279 69.431,16.863 C69.431,16.452 69.3,15.999 68.994,15.678 C68.846,15.518 68.668,15.401 68.493,15.328 C68.318,15.25 68.146,15.222 67.993,15.206 C67.684,15.183 67.437,15.24 67.246,15.302 C67.193,15.32 67.146,15.339 67.101,15.357 C67.184,14.338 67.225,13.29 67.193,12.222 C67.192,11.928 67.175,11.633 67.16,11.335 C67.143,11.039 67.133,10.734 67.103,10.444 C67.077,10.15 67.051,9.855 67.024,9.559 C67.01,9.396 66.984,9.246 66.965,9.089 L66.932,8.854 L66.886,8.622 C66.659,7.376 66.138,6.15 65.378,5.079 C64.621,4.004 63.609,3.108 62.488,2.413 C61.365,1.713 60.132,1.199 58.857,0.845 C57.584,0.495 56.25,0.296 54.929,0.287 C53.567,0.298 52.262,0.497 50.98,0.848 C49.706,1.204 48.473,1.719 47.352,2.419 C46.23,3.116 45.22,4.012 44.462,5.087 C44.081,5.622 43.762,6.197 43.509,6.793 C43.379,7.09 43.278,7.395 43.179,7.7 L43.055,8.164 C43.011,8.317 42.986,8.481 42.953,8.639 L42.906,8.877 L42.875,9.099 L42.83,9.432 L42.824,9.475 L42.822,9.504 L42.817,9.56 C42.79,9.86 42.764,10.159 42.737,10.457 C42.707,10.754 42.697,11.052 42.68,11.347 C42.665,11.642 42.647,11.936 42.647,12.23 C42.614,13.344 42.659,14.439 42.75,15.501 C42.699,15.492 42.644,15.483 42.583,15.475 C42.4,15.454 42.172,15.44 41.91,15.485 C41.652,15.533 41.348,15.654 41.114,15.912 C40.878,16.168 40.747,16.529 40.696,16.899 C40.645,17.273 40.663,17.665 40.715,18.059 C40.767,18.454 40.859,18.852 40.971,19.25 C41.082,19.644 41.176,20.036 41.285,20.433 C41.393,20.831 41.5,21.228 41.606,21.619 C41.715,22.01 41.814,22.402 41.928,22.781 C42.155,23.536 42.505,24.225 42.988,24.741 C43.111,24.867 43.24,24.982 43.377,25.081 C43.515,25.177 43.664,25.251 43.81,25.304 C44.104,25.411 44.389,25.4 44.589,25.345 C44.732,25.308 44.84,25.257 44.923,25.21 C44.949,25.655 44.976,26.139 45.003,26.666 C45.081,28.157 45.17,29.969 45.208,32.042 C45.216,32.559 45.22,33.094 45.207,33.64 C45.206,33.915 45.185,34.186 45.172,34.463 C45.16,34.597 45.147,34.731 45.134,34.868 C45.133,34.885 45.124,34.934 45.119,34.966 L45.101,35.042 C45.086,35.095 45.07,35.147 45.049,35.196 C44.896,35.58 44.416,35.88 43.897,36.123 C43.372,36.367 42.788,36.56 42.19,36.749 C41.588,36.934 40.964,37.104 40.323,37.265 C39.677,37.426 39.018,37.589 38.349,37.755 C37.001,38.112 35.617,38.51 34.212,39 C33.51,39.243 32.808,39.524 32.108,39.813 C31.408,40.104 30.72,40.397 30.021,40.631 C29.845,40.69 29.668,40.745 29.488,40.791 C29.311,40.844 29.128,40.888 28.945,40.928 C28.763,40.973 28.578,41.01 28.39,41.044 C28.198,41.081 28.006,41.118 27.813,41.155 C26.999,41.32 26.212,41.583 25.456,41.935 C23.947,42.639 22.582,43.72 21.579,45.096 C21.327,45.439 21.097,45.799 20.896,46.175 C20.69,46.548 20.512,46.937 20.36,47.337 C20.045,48.13 19.839,48.966 19.724,49.812 C19.669,50.239 19.631,50.66 19.594,51.079 C19.555,51.499 19.516,51.92 19.477,52.342 C19.395,53.182 19.301,54.025 19.19,54.866 C19.14,55.288 19.069,55.705 19.01,56.126 C18.978,56.335 18.936,56.543 18.898,56.751 C18.861,56.96 18.821,57.168 18.773,57.374 C18.688,57.789 18.583,58.198 18.478,58.609 L18.13,59.842 C17.654,61.481 17.254,63.165 16.941,64.846 C16.628,66.532 16.406,68.229 16.252,69.912 C16.094,71.594 15.991,73.26 15.868,74.9 C15.806,75.719 15.742,76.533 15.669,77.341 C15.636,77.744 15.594,78.144 15.555,78.545 C15.535,78.744 15.516,78.943 15.496,79.142 C15.473,79.318 15.451,79.545 15.421,79.721 C15.307,80.467 15.134,81.239 14.944,81.987 C14.754,82.737 14.542,83.48 14.326,84.216 C13.898,85.686 13.457,87.128 13.034,88.536 C12.606,89.944 12.226,91.327 11.873,92.671 C11.522,94.015 11.209,95.324 10.96,96.594 C10.708,97.863 10.513,99.091 10.375,100.266 C10.303,100.857 10.256,101.414 10.201,101.967 C10.145,102.516 10.09,103.05 10.036,103.565 C9.818,105.633 9.614,107.433 9.435,108.916 C9.386,109.33 9.34,109.716 9.295,110.079 C9.129,110.812 8.92,111.736 8.678,112.802 C8.639,112.971 8.598,113.143 8.556,113.319 L8.523,113.446 C8.522,113.454 8.517,113.473 8.517,113.47 C8.517,113.47 8.518,113.469 8.52,113.468 L8.52,113.47 L8.515,113.474 C8.461,113.529 8.395,113.583 8.329,113.634 C8.053,113.842 7.726,114.037 7.384,114.226 C7.044,114.423 6.681,114.61 6.313,114.818 C5.945,115.031 5.565,115.234 5.176,115.524 C5.126,115.559 5.076,115.6 5.026,115.641 C4.975,115.686 4.93,115.723 4.864,115.791 L4.821,115.836 L4.794,115.867 L4.779,115.883 L4.773,115.89 L4.752,115.916 L4.719,115.961 C4.672,116.023 4.638,116.079 4.603,116.137 C4.468,116.364 4.37,116.576 4.273,116.793 C4.087,117.223 3.93,117.657 3.781,118.095 C3.641,118.533 3.499,118.974 3.356,119.418 C3.219,119.858 3.081,120.301 2.932,120.726 L2.816,121.037 L2.757,121.181 C2.739,121.222 2.712,121.278 2.711,121.285 C2.714,121.288 2.691,121.319 2.675,121.342 L2.669,121.35 C2.664,121.358 2.697,121.317 2.679,121.341 L2.662,121.362 L2.628,121.41 C2.58,121.473 2.544,121.532 2.513,121.59 C2.441,121.707 2.393,121.819 2.341,121.931 C2.14,122.377 1.996,122.816 1.839,123.247 C1.684,123.676 1.534,124.103 1.345,124.495 C1.298,124.596 1.25,124.682 1.2,124.776 L1.11,124.917 C1.088,124.953 1.048,125.007 1.019,125.05 C0.889,125.235 0.771,125.428 0.658,125.628 C0.551,125.829 0.454,126.044 0.427,126.293 C0.414,126.417 0.423,126.552 0.476,126.679 C0.528,126.804 0.618,126.912 0.719,126.987 C0.922,127.136 1.143,127.209 1.356,127.257 C1.462,127.281 1.572,127.299 1.678,127.312 L1.829,127.334 C1.89,127.339 1.958,127.345 2.017,127.342 C2.495,127.307 2.88,127.14 3.244,126.968 C3.604,126.789 3.922,126.573 4.208,126.342 C4.494,126.112 4.735,125.855 4.954,125.604 C5.063,125.478 5.167,125.354 5.263,125.229 C5.357,125.103 5.445,124.977 5.527,124.853 C5.609,124.729 5.685,124.607 5.755,124.488 C5.821,124.365 5.886,124.248 5.94,124.131 C6.034,123.949 6.104,123.77 6.165,123.603 C6.16,123.898 6.158,124.194 6.168,124.49 C6.182,124.93 6.202,125.357 6.25,125.815 C6.293,126.258 6.329,126.681 6.381,127.118 C6.437,127.549 6.495,127.987 6.586,128.422 C6.672,128.858 6.793,129.286 6.927,129.709 C6.995,129.919 7.061,130.11 7.143,130.329 C7.227,130.559 7.327,130.772 7.436,130.975 C7.655,131.383 7.904,131.761 8.174,132.121 C8.445,132.479 8.74,132.816 9.069,133.124 C9.391,133.431 9.712,133.734 10.063,134.009 C10.411,134.286 10.78,134.54 11.173,134.754 C11.374,134.856 11.575,134.956 11.789,135.034 C12.002,135.11 12.225,135.165 12.453,135.196 C12.681,135.227 12.918,135.221 13.148,135.171 C13.361,135.121 13.56,135.047 13.75,134.898 C13.771,134.893 13.792,134.886 13.821,134.869 C13.825,134.866 13.829,134.86 13.833,134.856 C13.909,134.896 13.986,134.934 14.067,134.969 C14.316,135.077 14.59,135.153 14.846,135.216 C15.111,135.278 15.381,135.333 15.663,135.376 C15.944,135.412 16.234,135.443 16.537,135.433 C16.688,135.427 16.842,135.415 17.001,135.382 C17.158,135.344 17.325,135.296 17.481,135.168 C17.558,135.103 17.628,135.01 17.659,134.903 C17.691,134.796 17.684,134.688 17.66,134.597 C17.61,134.415 17.511,134.28 17.409,134.159 C17.394,134.141 17.376,134.125 17.36,134.107 C17.38,134.118 17.399,134.128 17.419,134.137 C17.776,134.307 18.187,134.46 18.647,134.537 C19.104,134.616 19.619,134.614 20.124,134.452 C20.375,134.372 20.624,134.252 20.849,134.081 C20.961,133.996 21.067,133.896 21.162,133.781 C21.255,133.662 21.345,133.535 21.392,133.341 C21.403,133.292 21.411,133.234 21.406,133.17 C21.404,133.137 21.398,133.1 21.387,133.063 C21.381,133.042 21.369,133.012 21.356,132.988 L21.344,132.967 L21.337,132.956 L21.334,132.951 L21.317,132.925 L21.308,132.913 L21.289,132.887 C21.277,132.871 21.263,132.853 21.252,132.84 C21.228,132.812 21.203,132.781 21.18,132.756 C21.084,132.649 20.984,132.561 20.886,132.472 C20.69,132.292 20.479,132.139 20.269,131.987 C20.213,131.948 20.158,131.913 20.102,131.875 C20.332,131.967 20.577,132.051 20.847,132.109 C21.071,132.152 21.307,132.189 21.586,132.135 C21.656,132.12 21.73,132.098 21.807,132.051 C21.882,132.006 21.964,131.945 22.021,131.815 L22.028,131.796 L22.032,131.786 C22.036,131.774 22.027,131.803 22.041,131.758 L22.042,131.757 L22.058,131.729 L22.095,131.662 L22.181,131.508 C22.293,131.29 22.404,131.043 22.446,130.753 C22.491,130.464 22.473,130.135 22.305,129.815 C22.28,129.768 22.283,129.772 22.248,129.715 C22.218,129.672 22.181,129.62 22.151,129.589 C22.088,129.52 22.029,129.47 21.97,129.422 C21.854,129.331 21.742,129.257 21.628,129.192 C21.402,129.06 21.179,128.948 20.957,128.836 C20.737,128.722 20.516,128.614 20.294,128.514 L20.127,128.44 L19.966,128.366 C19.91,128.346 19.832,128.259 19.769,128.173 C19.512,127.796 19.371,127.317 19.288,126.868 C19.205,126.412 19.206,125.956 19.19,125.529 C19.178,125.1 19.13,124.703 19.062,124.337 C19.017,124.077 18.969,123.833 18.919,123.608 C18.917,123.56 18.916,123.513 18.915,123.465 C18.91,123.334 18.908,123.198 18.896,123.058 C18.881,122.92 18.866,122.776 18.851,122.629 C18.814,122.337 18.762,122.027 18.709,121.723 C18.678,121.559 18.666,121.441 18.643,121.313 L18.635,121.265 L18.633,121.205 L18.628,121.083 L18.626,121.02 L18.625,121.008 L18.625,121.005 L18.635,120.889 C18.667,120.563 18.699,120.233 18.731,119.902 C18.755,119.562 18.776,119.217 18.774,118.877 C18.773,118.706 18.774,118.537 18.762,118.369 C18.753,118.2 18.746,118.035 18.724,117.871 C18.706,117.708 18.69,117.547 18.657,117.389 C18.628,117.233 18.605,117.081 18.562,116.932 C18.492,116.637 18.394,116.362 18.29,116.116 C18.232,115.995 18.178,115.879 18.123,115.771 C18.059,115.666 17.994,115.57 17.936,115.478 C17.881,115.387 17.816,115.305 17.75,115.235 C17.689,115.167 17.633,115.104 17.583,115.048 C17.58,115.028 17.578,115.009 17.576,114.989 C17.537,114.662 17.576,114.191 17.738,113.592 C17.902,112.995 18.162,112.27 18.47,111.435 C18.777,110.601 19.128,109.655 19.495,108.618 C19.675,108.1 19.862,107.562 20.056,107.005 C20.154,106.724 20.253,106.439 20.353,106.15 C20.458,105.869 20.564,105.584 20.672,105.295 C21.112,104.133 21.585,102.894 22.052,101.601 C22.519,100.308 22.98,98.956 23.455,97.585 C23.93,96.214 24.414,94.822 24.897,93.429 C25.38,92.038 25.854,90.64 26.258,89.239 C26.368,88.89 26.454,88.537 26.549,88.186 C26.596,88.011 26.643,87.837 26.689,87.663 L26.725,87.531 L26.761,87.409 L26.836,87.152 C26.933,86.807 27.041,86.479 27.148,86.157 C27.254,85.833 27.379,85.512 27.488,85.195 C27.958,83.93 28.442,82.739 29.009,81.64 C29.295,81.077 29.574,80.53 29.844,80 C29.911,79.859 29.979,79.725 30.041,79.577 C30.072,79.503 30.104,79.43 30.135,79.357 L30.217,79.157 C30.327,78.892 30.425,78.631 30.525,78.372 C30.911,77.323 31.205,76.342 31.414,75.446 C31.545,74.877 31.64,74.341 31.691,73.847 C31.756,74.026 31.821,74.203 31.887,74.382 C32.254,75.39 32.6,76.417 32.92,77.459 C33.088,77.977 33.237,78.504 33.39,79.03 C33.462,79.296 33.534,79.56 33.606,79.826 L33.708,80.216 C33.742,80.348 33.766,80.47 33.796,80.599 C34.012,81.669 34.216,82.775 34.389,83.877 C34.742,86.085 34.936,88.314 35.031,90.513 C35.126,92.713 35.142,94.882 35.242,96.973 C35.333,99.061 35.42,101.094 35.461,102.985 C35.464,103.212 35.466,103.465 35.455,103.639 L35.451,103.702 L35.448,103.722 L35.44,103.765 L35.409,103.94 C35.39,104.058 35.365,104.163 35.342,104.27 C35.246,104.717 35.15,105.156 35.057,105.588 C34.856,106.467 34.663,107.315 34.477,108.131 C34.292,108.948 34.115,109.731 33.947,110.476 C33.782,111.222 33.626,111.93 33.479,112.595 C33.334,113.261 33.201,113.885 33.076,114.462 C32.955,115.039 32.844,115.569 32.744,116.049 C32.359,117.951 32.138,119.045 32.135,119.063 L31.594,120.296 L31.087,121.55 L30.611,122.815 L30.159,124.088 C30.007,124.512 29.875,124.943 29.732,125.371 C29.59,125.798 29.454,126.227 29.322,126.658 C29.051,127.518 28.811,128.386 28.562,129.253 C28.326,130.122 28.085,130.991 27.877,131.868 L27.556,133.181 L27.254,134.499 C27.152,134.938 27.065,135.381 26.974,135.821 L26.705,137.147 C26.542,138.034 26.36,138.917 26.222,139.809 L26.007,141.143 L25.815,142.483 C25.753,142.93 25.701,143.378 25.651,143.827 L25.499,145.171 L25.382,146.519 L25.325,147.193 C25.307,147.425 25.296,147.643 25.283,147.87 L25.127,150.56 C25.073,151.457 25.052,152.36 25.012,153.258 C24.969,154.158 24.947,155.058 24.921,155.958 L24.896,156.632 L24.886,157.307 C24.882,157.757 24.867,158.207 24.871,158.657 C24.876,159.552 24.864,160.43 24.96,161.345 C24.862,162.647 24.764,163.948 24.655,165.25 L24.506,167.209 C24.483,167.538 24.462,167.863 24.446,168.198 C24.428,168.555 24.45,168.871 24.429,169.175 C24.356,170.433 24.052,171.706 23.815,172.995 C23.566,174.284 23.354,175.592 23.217,176.909 C23.076,178.225 23.01,179.551 22.998,180.875 C22.992,181.535 23.006,182.208 23.025,182.853 L23.063,184.815 C23.081,185.47 23.064,186.116 23.066,186.766 C23.067,187.416 23.077,188.064 23.066,188.717 L23.032,192.633 L22.948,200.475 L22.926,204.399 L22.935,208.329 L22.932,210.286 L22.89,212.242 L22.811,214.196 C22.781,214.848 22.738,215.5 22.702,216.151 L22.646,217.13 L22.568,218.106 L22.504,218.927 C22.482,218.931 22.456,218.935 22.426,218.94 C22.3,218.954 22.115,218.974 21.88,219.001 C21.644,219.025 21.358,219.065 21.033,219.128 C20.871,219.16 20.698,219.195 20.518,219.244 C20.338,219.294 20.155,219.37 19.965,219.459 C19.588,219.644 19.176,219.878 18.713,219.952 C18.495,219.992 18.267,219.975 18.015,219.94 C17.768,219.91 17.462,219.871 17.144,219.972 C16.828,220.068 16.558,220.268 16.348,220.483 C16.137,220.704 15.965,220.942 15.811,221.188 C15.733,221.31 15.658,221.433 15.588,221.558 L15.485,221.747 L15.46,221.796 L15.454,221.807 L15.441,221.833 L15.431,221.856 C15.417,221.889 15.404,221.913 15.385,221.964 C15.249,222.311 15.206,222.616 15.184,222.93 C15.144,223.548 15.219,224.133 15.332,224.694 C15.447,225.253 15.605,225.788 15.794,226.29 C15.98,226.793 16.189,227.267 16.419,227.701 C16.645,228.136 16.89,228.531 17.14,228.882 C17.637,229.582 18.175,230.085 18.616,230.343 C18.834,230.475 19.023,230.547 19.154,230.582 C19.22,230.6 19.27,230.612 19.305,230.616 C19.31,230.618 19.312,230.618 19.315,230.619 C19.326,230.633 19.343,230.645 19.363,230.647 C19.363,230.647 21.363,230.871 24.863,231.26 C25.739,231.352 26.71,231.451 27.77,231.538 C28.831,231.621 29.979,231.708 31.222,231.689 C31.843,231.673 32.489,231.643 33.161,231.476 C33.493,231.387 33.845,231.267 34.156,230.999 C34.3,230.866 34.407,230.771 34.538,230.636 C34.667,230.51 34.786,230.383 34.904,230.247 C35.378,229.712 35.793,229.065 36.029,228.312 C36.268,227.561 36.292,226.725 36.147,225.936 C36.006,225.144 35.74,224.387 35.455,223.644 C35.17,222.901 34.859,222.168 34.576,221.422 C34.297,220.675 34.048,219.912 33.879,219.126 C33.711,218.34 33.613,217.535 33.615,216.717 C33.617,216.512 33.625,216.306 33.636,216.101 L33.661,215.793 L33.69,215.466 C33.73,215.03 33.771,214.591 33.812,214.148 C33.895,213.266 33.974,212.37 34.041,211.463 C34.108,210.556 34.178,209.641 34.247,208.716 C34.307,207.793 34.358,206.855 34.437,205.931 C34.521,205.01 34.621,204.076 34.819,203.177 C35.021,202.268 35.283,201.346 35.558,200.421 C36.111,198.567 36.706,196.684 37.222,194.764 C37.488,193.807 37.722,192.834 37.968,191.87 C38.086,191.384 38.206,190.9 38.325,190.415 C38.456,189.933 38.588,189.453 38.719,188.969 C39.256,187.042 39.894,185.134 40.496,183.209 C41.115,181.288 41.643,179.319 41.993,177.319 C42.163,176.319 42.307,175.315 42.394,174.311 C42.442,173.809 42.49,173.307 42.511,172.806 L42.553,172.055 L42.564,171.868 L42.576,171.7 C42.585,171.578 42.592,171.449 42.604,171.332 C42.66,170.892 42.73,170.421 42.837,169.958 C42.937,169.494 43.063,169.031 43.195,168.571 C43.465,167.651 43.785,166.743 44.122,165.843 C44.798,164.047 45.553,162.29 46.279,160.551 C47.735,157.075 49.113,153.669 50.132,150.323 C50.383,149.484 50.619,148.655 50.82,147.826 C51.024,146.997 51.219,146.205 51.402,145.404 C51.771,143.813 52.109,142.276 52.418,140.794 C53.035,137.833 53.536,135.103 53.915,132.675 C54.005,132.065 54.093,131.476 54.177,130.909 C54.254,130.34 54.327,129.791 54.398,129.262 C54.522,128.206 54.634,127.234 54.706,126.354 C54.794,125.475 54.835,124.687 54.881,124.004 C54.899,123.669 54.911,123.359 54.921,123.074 C54.931,123.356 54.942,123.664 54.959,123.995 C55.006,124.679 55.048,125.467 55.135,126.345 C55.208,127.226 55.319,128.198 55.444,129.255 C55.514,129.782 55.588,130.331 55.664,130.901 C55.749,131.469 55.836,132.057 55.926,132.666 C56.305,135.095 56.806,137.824 57.423,140.786 C57.732,142.268 58.071,143.805 58.439,145.396 C58.622,146.197 58.816,146.989 59.021,147.817 C59.222,148.646 59.458,149.476 59.709,150.315 C60.729,153.661 62.106,157.066 63.563,160.544 C64.289,162.282 65.043,164.038 65.72,165.837 C66.057,166.735 66.376,167.643 66.646,168.563 C66.777,169.024 66.904,169.485 67.004,169.949 C67.11,170.412 67.182,170.884 67.237,171.324 C67.25,171.441 67.256,171.569 67.265,171.692 L67.278,171.859 L67.288,172.048 L67.33,172.798 C67.352,173.3 67.399,173.801 67.447,174.302 C67.534,175.307 67.679,176.31 67.848,177.311 C68.199,179.311 68.726,181.28 69.346,183.2 C69.948,185.127 70.585,187.034 71.122,188.963 C71.253,189.444 71.385,189.926 71.516,190.407 C71.636,190.892 71.755,191.378 71.874,191.861 C72.12,192.826 72.354,193.8 72.619,194.757 C73.135,196.675 73.73,198.559 74.284,200.412 C74.559,201.34 74.82,202.26 75.022,203.17 C75.22,204.067 75.32,205.003 75.403,205.923 C75.484,206.847 75.534,207.785 75.595,208.708 C75.664,209.633 75.732,210.549 75.8,211.455 C75.868,212.362 75.947,213.258 76.03,214.14 C76.07,214.583 76.111,215.021 76.15,215.458 L76.181,215.785 L76.205,216.094 C76.217,216.3 76.224,216.504 76.226,216.709 C76.229,217.526 76.129,218.333 75.962,219.118 C75.793,219.904 75.544,220.667 75.265,221.414 C74.982,222.16 74.671,222.892 74.386,223.636 C74.101,224.38 73.835,225.136 73.694,225.928 C73.55,226.717 73.574,227.553 73.812,228.304 C74.049,229.057 74.463,229.704 74.937,230.239 C75.056,230.375 75.175,230.503 75.303,230.629 C75.434,230.762 75.542,230.858 75.686,230.991 C75.996,231.259 76.348,231.38 76.681,231.467 C77.352,231.635 77.999,231.665 78.619,231.681 C79.862,231.699 81.011,231.612 82.071,231.53 C83.131,231.442 84.102,231.344 84.978,231.253 C88.478,230.863 90.479,230.639 90.479,230.639 C90.498,230.637 90.515,230.626 90.525,230.61 C90.529,230.61 90.532,230.61 90.537,230.608 C90.571,230.604 90.622,230.592 90.687,230.574 C90.818,230.539 91.007,230.467 91.226,230.335 C91.666,230.077 92.203,229.574 92.702,228.874 C92.952,228.523 93.197,228.129 93.422,227.692 C93.652,227.258 93.862,226.785 94.048,226.282 C94.236,225.78 94.394,225.246 94.51,224.686 C94.622,224.126 94.698,223.541 94.658,222.923 C94.636,222.608 94.592,222.303 94.457,221.956 C94.437,221.904 94.425,221.882 94.411,221.848 L94.399,221.825 L94.387,221.8 L94.381,221.788 L94.355,221.739 L94.253,221.55 C94.184,221.425 94.107,221.302 94.031,221.179 C93.876,220.935 93.704,220.696 93.494,220.475 C93.283,220.26 93.014,220.06 92.697,219.965 C92.38,219.863 92.073,219.903 91.826,219.933 C91.575,219.967 91.347,219.984 91.128,219.944 C90.666,219.87 90.253,219.636 89.876,219.451 C89.686,219.361 89.503,219.285 89.323,219.236 C89.144,219.187 88.971,219.152 88.809,219.12 C88.483,219.057 88.198,219.018 87.961,218.992 C87.726,218.967 87.542,218.946 87.416,218.932 C87.386,218.927 87.359,218.924 87.337,218.919 L87.273,218.098 L87.196,217.122 L87.14,216.143 C87.104,215.492 87.06,214.841 87.03,214.188 L86.951,212.233 L86.91,210.278 L86.907,208.321 L86.915,204.391 L86.893,200.467 L86.81,192.626 L86.774,188.71 C86.765,188.056 86.774,187.408 86.774,186.758 C86.777,186.108 86.761,185.462 86.778,184.806 L86.816,182.845 C86.836,182.201 86.849,181.527 86.843,180.868 C86.832,179.544 86.766,178.217 86.625,176.901 C86.486,175.584 86.276,174.276 86.026,172.987 C85.79,171.698 85.485,170.425 85.413,169.168 C85.391,168.863 85.414,168.548 85.396,168.19 C85.379,167.855 85.358,167.53 85.335,167.201 L85.187,165.242 C85.077,163.94 84.979,162.639 84.88,161.338 C84.978,160.423 84.965,159.545 84.97,158.649 C84.975,158.199 84.96,157.749 84.955,157.299 L84.944,156.624 L84.92,155.949 C84.894,155.05 84.872,154.15 84.829,153.251 C84.79,152.352 84.767,151.448 84.713,150.551 L84.559,147.861 C84.545,147.635 84.535,147.417 84.517,147.184 L84.458,146.51 L84.343,145.163 L84.19,143.818 C84.141,143.37 84.088,142.923 84.025,142.475 L83.834,141.135 L83.62,139.8 C83.481,138.909 83.3,138.025 83.136,137.138 L82.867,135.813 C82.776,135.373 82.689,134.93 82.587,134.491 L82.285,133.174 L81.964,131.86 C81.756,130.983 81.516,130.114 81.279,129.245 C81.031,128.378 80.791,127.51 80.52,126.65 C80.388,126.219 80.252,125.79 80.109,125.363 C79.966,124.935 79.834,124.506 79.683,124.08 L79.23,122.807 L78.754,121.543 L78.248,120.288 L77.707,119.055 C77.703,119.037 77.482,117.943 77.097,116.04 C76.997,115.562 76.886,115.031 76.766,114.454 C76.641,113.877 76.506,113.254 76.363,112.588 C76.216,111.923 76.06,111.215 75.894,110.468 C75.726,109.723 75.549,108.94 75.364,108.123 C75.179,107.308 74.985,106.459 74.784,105.579 C74.691,105.148 74.596,104.709 74.5,104.262 C74.477,104.155 74.452,104.05 74.433,103.932 L74.401,103.758 L74.394,103.714 L74.39,103.694 L74.387,103.632 C74.375,103.456 74.378,103.204 74.38,102.976 C74.421,101.087 74.508,99.054 74.6,96.966 C74.7,94.874 74.716,92.705 74.811,90.505 C74.906,88.305 75.099,86.077 75.453,83.869 C75.625,82.766 75.829,81.66 76.045,80.591 C76.075,80.463 76.099,80.341 76.133,80.207 L76.235,79.818 C76.308,79.552 76.379,79.288 76.451,79.022 C76.604,78.495 76.753,77.969 76.922,77.451 C77.242,76.409 77.588,75.383 77.955,74.375 C78.02,74.195 78.085,74.018 78.15,73.84 C78.202,74.332 78.296,74.869 78.427,75.437 C78.637,76.336 78.93,77.315 79.316,78.364 C79.417,78.623 79.514,78.884 79.624,79.149 L79.706,79.349 C79.738,79.422 79.769,79.495 79.8,79.568 C79.861,79.717 79.931,79.851 79.998,79.992 C80.268,80.522 80.546,81.069 80.833,81.632 C81.399,82.731 81.883,83.923 82.353,85.187 C82.463,85.505 82.587,85.825 82.693,86.148 C82.8,86.471 82.908,86.8 83.006,87.144 L83.117,87.523 L83.152,87.654 C83.199,87.829 83.245,88.004 83.292,88.178 C83.388,88.529 83.472,88.883 83.583,89.23 C83.988,90.632 84.461,92.03 84.944,93.422 C85.428,94.814 85.911,96.206 86.387,97.576 C86.861,98.947 87.322,100.3 87.79,101.593 C88.257,102.886 88.729,104.126 89.169,105.287 C89.276,105.576 89.383,105.861 89.488,106.141 C89.589,106.431 89.688,106.716 89.785,106.997 C89.979,107.554 90.167,108.092 90.347,108.61 C90.714,109.648 91.064,110.593 91.372,111.427 C91.679,112.261 91.939,112.987 92.103,113.585 C92.265,114.182 92.305,114.653 92.265,114.981 C92.264,114.999 92.262,115.013 92.26,115.03 C92.255,115.034 92.25,115.038 92.246,115.043 C92.194,115.1 92.137,115.164 92.074,115.234 C92.008,115.304 91.942,115.385 91.888,115.476 C91.829,115.569 91.766,115.666 91.699,115.769 C91.644,115.876 91.589,115.992 91.529,116.113 C91.425,116.358 91.324,116.632 91.252,116.926 C91.208,117.074 91.184,117.227 91.153,117.383 C91.119,117.54 91.102,117.701 91.083,117.864 C91.059,118.027 91.05,118.192 91.04,118.361 C91.026,118.53 91.025,118.698 91.023,118.87 C91.019,119.211 91.036,119.554 91.058,119.895 C91.084,120.235 91.118,120.575 91.148,120.887 L91.158,121.003 L91.158,121.018 L91.155,121.081 L91.151,121.203 L91.148,121.263 L91.14,121.311 C91.118,121.44 91.105,121.557 91.075,121.722 C91.021,122.025 90.969,122.336 90.933,122.628 C90.917,122.775 90.902,122.919 90.887,123.057 C90.875,123.197 90.873,123.334 90.868,123.464 C90.868,123.512 90.866,123.56 90.864,123.608 C90.814,123.833 90.767,124.077 90.722,124.337 C90.653,124.703 90.605,125.1 90.593,125.529 C90.577,125.956 90.579,126.412 90.496,126.868 C90.412,127.317 90.271,127.796 90.014,128.173 C89.952,128.259 89.874,128.346 89.817,128.366 L89.656,128.44 L89.489,128.514 C89.268,128.614 89.046,128.722 88.826,128.836 C88.604,128.948 88.382,129.06 88.156,129.192 C88.041,129.257 87.929,129.331 87.813,129.422 C87.754,129.47 87.695,129.52 87.632,129.589 C87.602,129.62 87.566,129.672 87.536,129.715 C87.5,129.772 87.503,129.768 87.478,129.815 C87.311,130.135 87.292,130.464 87.337,130.753 C87.379,131.043 87.49,131.29 87.602,131.508 L87.688,131.662 L87.726,131.729 L87.74,131.757 L87.742,131.758 C87.756,131.803 87.748,131.774 87.751,131.786 L87.755,131.796 L87.763,131.815 C87.818,131.945 87.901,132.006 87.976,132.051 C88.054,132.098 88.127,132.12 88.197,132.135 C88.477,132.189 88.712,132.152 88.937,132.109 C89.207,132.051 89.452,131.967 89.682,131.875 C89.626,131.913 89.57,131.948 89.515,131.987 C89.305,132.139 89.093,132.292 88.897,132.472 C88.799,132.561 88.699,132.649 88.604,132.756 C88.58,132.781 88.555,132.812 88.531,132.84 C88.52,132.853 88.507,132.871 88.495,132.887 L88.476,132.913 L88.466,132.925 L88.449,132.951 L88.445,132.956 L88.439,132.967 L88.427,132.988 C88.415,133.012 88.402,133.042 88.396,133.063 C88.385,133.1 88.378,133.137 88.377,133.17 C88.373,133.234 88.38,133.292 88.392,133.341 C88.438,133.535 88.528,133.662 88.622,133.781 C88.716,133.896 88.821,133.996 88.935,134.081 C89.159,134.252 89.408,134.372 89.659,134.452 C90.165,134.614 90.68,134.616 91.137,134.537 C91.597,134.46 92.007,134.307 92.364,134.137 C92.385,134.128 92.403,134.118 92.423,134.107 C92.408,134.125 92.39,134.141 92.374,134.159 C92.272,134.28 92.173,134.415 92.123,134.597 C92.1,134.688 92.092,134.796 92.125,134.903 C92.155,135.01 92.226,135.103 92.301,135.168 C92.458,135.296 92.625,135.344 92.783,135.382 C92.941,135.415 93.096,135.427 93.247,135.433 C93.549,135.443 93.838,135.412 94.121,135.376 C94.402,135.333 94.673,135.278 94.938,135.216 C95.192,135.153 95.467,135.077 95.716,134.969 C95.797,134.934 95.875,134.896 95.95,134.856 C95.954,134.86 95.958,134.866 95.963,134.869 C95.99,134.886 96.013,134.893 96.033,134.898 C96.223,135.047 96.422,135.121 96.635,135.171 C96.865,135.221 97.102,135.227 97.33,135.196 C97.558,135.165 97.781,135.11 97.995,135.034 C98.208,134.956 98.41,134.856 98.61,134.754 C99.004,134.54 99.372,134.286 99.721,134.009 C100.071,133.734 100.393,133.431 100.715,133.124 C101.042,132.816 101.338,132.479 101.609,132.121 C101.879,131.761 102.129,131.383 102.348,130.975 C102.457,130.772 102.556,130.559 102.641,130.329 C102.723,130.11 102.788,129.919 102.857,129.709 C102.991,129.286 103.111,128.858 103.197,128.422 C103.288,127.987 103.346,127.549 103.402,127.118 C103.454,126.681 103.49,126.258 103.533,125.815 C103.582,125.357 103.602,124.93 103.615,124.49 C103.625,124.194 103.623,123.898 103.619,123.603 C103.679,123.77 103.75,123.949 103.843,124.131 C103.897,124.248 103.963,124.365 104.028,124.488 C104.098,124.607 104.174,124.729 104.256,124.853 C104.338,124.977 104.425,125.103 104.52,125.229 C104.617,125.354 104.721,125.478 104.83,125.604 C105.048,125.855 105.29,126.112 105.575,126.342 C105.861,126.573 106.179,126.789 106.539,126.968 C106.903,127.14 107.288,127.307 107.766,127.342 C107.826,127.345 107.894,127.339 107.955,127.334 L108.105,127.312 C108.212,127.299 108.322,127.281 108.427,127.257 C108.641,127.209 108.861,127.136 109.065,126.987 C109.166,126.912 109.255,126.804 109.308,126.679 C109.36,126.552 109.37,126.417 109.355,126.293 L109.355,126.293 Z\" />\n        </G>\n      </G>\n    </Svg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { IScreenMuscle } from \"../../../types\";\nimport { Svg, G, Path } from \"../../primitives/svg\";\n\ninterface IMuscleStyle {\n  fill?: string;\n  opacity?: number;\n}\n\ninterface IProps {\n  muscles?: Partial<Record<IScreenMuscle, IMuscleStyle>>;\n  contour?: IMuscleStyle;\n  defaultOpacity?: number;\n}\n\nexport function FrontMusclesSvg(props: IProps): JSX.Element {\n  function getOpacity(muscle: IScreenMuscle): number {\n    return props.muscles?.[muscle]?.opacity ?? props.defaultOpacity ?? 0.3;\n  }\n\n  function getFill(muscle: IScreenMuscle): string {\n    return props.muscles?.[muscle]?.fill ?? \"#28839F\";\n  }\n\n  return (\n    <Svg viewBox=\"0 0 112 234\" width=\"100%\" style={{ aspectRatio: 112 / 234 }}>\n      <G stroke=\"none\" strokeWidth={1} fillRule=\"evenodd\">\n        <G opacity={getOpacity(\"back\")} fill={getFill(\"back\")} transform=\"translate(34.085925, 27.046000)\">\n          <Path d=\"M7.10542736e-15,13.633 C3.609,11.679 10.8,11.254 12.442,8.851 C13.261,7.651 12.061,2.66453526e-15 12.061,2.66453526e-15 C12.848,2.602 15.119,5.645 15.552,8.616 C15.958,11.398 17.18,15.367 15.05,14.931 C11.552,14.214 5.882,13.069 7.10542736e-15,13.633\" />\n          <Path d=\"M43.818,13.633 C40.208,11.679 33.016,11.254 31.376,8.851 C30.556,7.651 31.728,2.66453526e-15 31.728,2.66453526e-15 C30.941,2.602 28.697,5.645 28.264,8.616 C27.859,11.398 26.636,15.367 28.767,14.931 C32.264,14.214 37.935,13.069 43.818,13.633\" />\n        </G>\n        <G opacity={getOpacity(\"forearms\")} fill={getFill(\"forearms\")} transform=\"translate(8.383925, 80.657000)\">\n          <Path d=\"M9.23,2.84217094e-14 C10.583,6.484 13.338,7.896 13.295,11.365 C13.216,17.762 3.839,23.972 -5.32907052e-15,36.565 C1.961,28.621 1.896,21.289 3.558,15.539 C5.553,8.636 9.129,3.01 9.23,2.84217094e-14\" />\n          <Path d=\"M17.083,9.949 C17.083,9.949 14.606,14.013 12.914,16.428 C5.908,26.424 1.738,33.427 1.188,36.764 C5.272,35.099 8.381,37.944 8.381,37.944 C8.381,37.944 7.289,36.157 10.529,30.751 C15.308,22.782 16.732,17.956 17.083,9.949\" />\n          <Path d=\"M85.991,2.84217094e-14 C84.638,6.484 81.882,7.896 81.926,11.365 C82.005,17.762 91.382,23.972 95.221,36.565 C93.26,28.621 93.325,21.289 91.663,15.539 C89.667,8.636 86.092,3.01 85.991,2.84217094e-14\" />\n          <Path d=\"M78.138,9.949 C78.138,9.949 80.614,14.013 82.307,16.428 C89.312,26.424 93.483,33.427 94.032,36.764 C89.949,35.099 86.839,37.944 86.839,37.944 C86.839,37.944 87.932,36.157 84.691,30.751 C79.913,22.782 78.489,17.956 78.138,9.949\" />\n        </G>\n        <G opacity={getOpacity(\"chest\")} fill={getFill(\"chest\")} transform=\"translate(30.865769, 41.393920)\">\n          <Path d=\"M6.47315618,0.284079931 C10.1561562,-0.834920069 18.3901562,1.61007993 20.9701562,3.13607993 C23.4571562,4.60707993 24.2761562,11.4370799 24.4691562,17.3890799 C24.6061562,21.6510799 24.7571562,25.9740799 23.8121562,26.9190799 C21.3401562,29.3910799 7.38315618,28.3520799 3.28315618,22.8010799 C-2.66584382,14.7460799 0.115156175,2.21407993 6.47315618,0.284079931\" />\n          <Path d=\"M43.7841562,0.284079931 C40.1011562,-0.834920069 31.8671562,1.61007993 29.2871562,3.13607993 C26.8001562,4.60707993 25.9801562,11.4370799 25.7881562,17.3890799 C25.6501562,21.6510799 25.4991562,25.9740799 26.4441562,26.9190799 C28.9171562,29.3910799 42.8741562,28.3520799 46.9741562,22.8010799 C52.9221562,14.7460799 50.1421562,2.21407993 43.7841562,0.284079931\" />\n        </G>\n        <G opacity={getOpacity(\"abs\")} fill={getFill(\"abs\")} transform=\"translate(32.792925, 65.058000)\">\n          <Path d=\"M6.595,4.788 C6.595,4.788 3.689,12.233 2.824,19.612 C1.167,14.572 -3.55271368e-15,10.961 -3.55271368e-15,10.961 C-3.55271368e-15,10.961 1.524,5.571 1.359,-1.77635684e-15 C2.893,2.642 6.595,4.788 6.595,4.788\" />\n          <Path d=\"M7.294,5.046 C9.2,5.685 10.687,6.03 11.393,7.577 C14.067,13.434 9.61,21.299 12.194,38.07 C13.22,44.727 4.162,38.244 4.162,38.244 C4.162,38.244 3.858,25.938 3.298,20.852 C4.166,15.265 5.082,11.803 7.294,5.046\" />\n          <Path d=\"M22.185,7.296 C21.607,6.691 17.978,6.934 15.739,9.174 C14.327,10.587 13.952,13.184 14.186,13.667 C14.545,14.409 21.622,14.386 22.185,13.797 C22.689,13.268 22.763,7.9 22.185,7.296\" />\n          <Path d=\"M22.185,15.499 C21.607,14.959 14.736,15.032 14.212,15.581 C13.606,16.214 13.15,21.296 13.803,22.114 C14.457,22.933 21.708,22.887 22.185,22.245 C22.587,21.704 22.763,16.039 22.185,15.499\" />\n          <Path d=\"M22.185,24.059 C21.607,23.463 14.233,23.355 13.638,23.976 C13.085,24.555 13.15,29.789 13.422,30.54 C13.669,31.225 21.929,31.54 22.185,30.668 C22.528,29.498 22.763,24.656 22.185,24.059\" />\n          <Path d=\"M13.729,32.647 C14.842,31.948 21.317,31.811 21.994,33.125 C22.671,34.438 22.823,52.282 21.421,52.139 C15.174,51.507 11.914,33.79 13.729,32.647\" />\n          <Path d=\"M39.808,4.788 C39.808,4.788 42.714,12.233 43.579,19.612 C45.236,14.572 46.403,10.961 46.403,10.961 C46.403,10.961 44.879,5.571 45.044,-1.77635684e-15 C43.51,2.642 39.808,4.788 39.808,4.788\" />\n          <Path d=\"M39.108,5.046 C37.202,5.685 35.715,6.03 35.01,7.577 C32.336,13.434 36.793,21.299 34.209,38.07 C33.183,44.727 42.339,38.244 42.339,38.244 C42.339,38.244 42.545,25.938 43.105,20.852 C42.237,15.265 41.321,11.803 39.108,5.046\" />\n          <Path d=\"M24.217,7.296 C24.796,6.691 28.425,6.934 30.663,9.174 C32.076,10.587 32.45,13.184 32.217,13.667 C31.858,14.409 24.781,14.386 24.217,13.797 C23.714,13.268 23.64,7.9 24.217,7.296\" />\n          <Path d=\"M24.217,15.499 C24.796,14.959 31.667,15.032 32.192,15.581 C32.797,16.214 33.253,21.296 32.599,22.114 C31.946,22.933 24.695,22.887 24.217,22.245 C23.816,21.704 23.64,16.039 24.217,15.499\" />\n          <Path d=\"M24.217,24.059 C24.796,23.463 32.17,23.355 32.764,23.976 C33.319,24.555 33.253,29.789 32.981,30.54 C32.733,31.225 24.473,31.54 24.217,30.668 C23.875,29.498 23.64,24.656 24.217,24.059\" />\n          <Path d=\"M32.674,32.647 C31.561,31.948 25.086,31.811 24.409,33.125 C23.732,34.438 23.58,52.282 24.982,52.139 C31.23,51.507 34.49,33.79 32.674,32.647\" />\n        </G>\n        <G opacity={getOpacity(\"quadriceps\")} fill={getFill(\"quadriceps\")} transform=\"translate(26.427837, 108.418000)\">\n          <Path d=\"M24.2250883,14.335 C26.4070883,16.72 29.3570883,16.803 29.3570883,16.803 C29.4510883,16.806 29.0640883,20.723 28.2680883,23.076 C27.1490883,26.391 26.1610883,29.525 25.1670883,32.358 C24.0030883,35.676 22.8510883,38.637 21.7690883,41.832 C25.5700883,25.151 18.9620883,8.579 24.2250883,14.335\" />\n          <Path d=\"M14.2230883,2.165 C16.9620883,11.015 21.6520883,31.713 16.9780883,49.059 C16.4000883,51.2 14.8290883,53.138 13.1110883,52.548 C10.2770883,51.573 10.5320883,49.663 8.33408833,48.581 C6.54508833,47.7 4.85808833,51.07 2.18508833,48.397 C1.48708833,47.698 1.23208833,46.266 0.853088332,44.57 C-1.94791167,32.027 2.88808833,20.877 4.74608833,15.753 C4.74608833,15.753 13.0140883,16.555 14.2230883,2.165\" />\n          <Path d=\"M14.0970883,-2.84217094e-14 L17.2030883,2.547 C17.2030883,2.547 20.7190883,11.588 21.5780883,27.251 C22.0540883,35.923 20.5180883,46.349 17.9030883,52.82 L17.5940883,51.239 C17.5940883,51.239 20.6550883,40.686 19.9760883,28.971 C19.1810883,15.239 16.3840883,4.584 14.0970883,-2.84217094e-14\" />\n          <Path d=\"M34.9070883,14.335 C32.7260883,16.72 29.7750883,16.803 29.7750883,16.803 C29.6820883,16.806 30.0690883,20.723 30.8640883,23.076 C31.9840883,26.391 33.0480883,29.4 34.0420883,32.233 C35.2060883,35.551 36.2820883,38.637 37.3640883,41.832 C33.5630883,25.151 40.1700883,8.579 34.9070883,14.335\" />\n          <Path d=\"M44.9090883,2.165 C42.1700883,11.015 37.4810883,31.713 42.1550883,49.059 C42.7330883,51.2 44.3040883,53.138 46.0210883,52.548 C48.8560883,51.573 48.6020883,49.663 50.7980883,48.581 C52.5870883,47.7 54.2740883,51.07 56.9480883,48.397 C57.6460883,47.698 57.9010883,46.266 58.2800883,44.57 C61.0810883,32.027 56.2450883,20.877 54.3860883,15.753 C54.3860883,15.753 46.1190883,16.555 44.9090883,2.165\" />\n          <Path d=\"M45.0360883,-2.84217094e-14 L41.9300883,2.547 C41.9300883,2.547 38.4150883,11.588 37.5550883,27.251 C37.0790883,35.923 38.6160883,46.349 41.2290883,52.82 L41.5380883,51.239 C41.5380883,51.239 38.4780883,40.686 39.1570883,28.971 C39.9520883,15.239 42.7490883,4.584 45.0360883,-2.84217094e-14\" />\n        </G>\n        <G opacity={getOpacity(\"calves\")} fill={getFill(\"calves\")} transform=\"translate(23.688857, 161.551000)\">\n          <Path d=\"M3.47606888,0 C3.47606888,0 5.91606888,6.208 4.96106888,15.473 C2.65906888,37.804 1.13706888,47.633 1.13706888,47.633 C1.13706888,47.633 0.620068883,32.362 0.186068883,25.883 C-0.545931117,14.966 0.950068883,4.012 3.47606888,0\" />\n          <Path d=\"M18.9650689,2.026 C16.4540689,8.087 21.8770689,10.888 13.3390689,31.805 C11.3770689,30.467 9.90506888,28.245 9.87506888,25.958 C9.84106888,23.399 10.6590689,3.471 18.9650689,2.026\" />\n          <Path d=\"M9.35506888,27.602 C9.35506888,27.602 9.73606888,30.61 13.0950689,32.633 C13.0950689,32.633 10.3280689,41.414 9.20806888,49.429 C7.79506888,40.463 8.20806888,33.523 9.35506888,27.602\" />\n          <Path d=\"M61.1350689,0 C61.1350689,0 58.6940689,6.208 59.6500689,15.473 C61.9520689,37.804 63.4740689,47.633 63.4740689,47.633 C63.4740689,47.633 63.9900689,32.362 64.4250689,25.883 C65.1570689,14.966 63.6610689,4.012 61.1350689,0\" />\n          <Path d=\"M45.6470689,2.026 C48.1570689,8.087 42.7320689,10.888 51.2700689,31.805 C53.2320689,30.467 54.7060689,28.245 54.7360689,25.958 C54.7700689,23.399 53.9510689,3.471 45.6470689,2.026\" />\n          <Path d=\"M55.2560689,27.602 C55.2560689,27.602 54.8740689,30.61 51.5150689,32.633 C51.5150689,32.633 54.2820689,41.414 55.4030689,49.429 C56.8170689,40.463 56.4020689,33.523 55.2560689,27.602\" />\n        </G>\n        <G opacity={getOpacity(\"shoulders\")} fill={getFill(\"shoulders\")} transform=\"translate(19.035867, 42.008707)\">\n          <Path d=\"M6.16,2.44203801 C1.624,5.55603801 2.774,10.145038 1.394,16.694038 C1.066,18.250038 1.77635684e-15,21.930038 1.77635684e-15,21.930038 C1.978,17.532038 11.252,16.983038 11.252,11.419038 C11.252,2.63303801 17.02,0.101038012 17.02,0.101038012 C17.02,0.101038012 10.796,-0.741961988 6.16,2.44203801\" />\n          <Path d=\"M68.147,2.44203801 C72.683,5.55603801 71.534,10.145038 72.913,16.694038 C73.241,18.250038 74.307,21.930038 74.307,21.930038 C72.329,17.532038 63.055,16.983038 63.055,11.419038 C63.055,2.63303801 57.287,0.101038012 57.287,0.101038012 C57.287,0.101038012 63.511,-0.741961988 68.147,2.44203801\" />\n        </G>\n        <G opacity={getOpacity(\"biceps\")} fill={getFill(\"biceps\")} transform=\"translate(17.858633, 56.483745)\">\n          <Path d=\"M12.6202342,-2.66453526e-14 C11.0822342,3.391 7.90123417,3.34 2.86823417,6.87 C-1.19776583,9.721 -0.938765827,24.887 3.63223417,31.136 C11.0182342,23.75 14.8972342,16.753 14.2342342,8.964 C14.0112342,6.335 12.0372342,3.487 12.6202342,-2.66453526e-14\" />\n          <Path d=\"M64.0422342,-2.66453526e-14 C65.5792342,3.391 68.7602342,3.34 73.7932342,6.87 C77.8582342,9.721 77.6012342,24.887 73.0292342,31.136 C65.6432342,23.75 61.7652342,16.753 62.4272342,8.964 C62.6502342,6.335 64.6242342,3.487 64.0422342,-2.66453526e-14\" />\n        </G>\n        <G\n          opacity={props.contour?.opacity ?? 1}\n          fill={props.contour?.fill ?? \"#28839F\"}\n          transform=\"translate(0.000000, 0.243264)\"\n        >\n          <G transform=\"translate(9.165925, 125.793736)\">\n            <Path d=\"M6.994,4.159 C6.896,4.219 6.816,4.295 6.737,4.343 C6.585,4.448 6.49,4.543 6.49,4.543 L6.489,4.544 C6.487,4.547 6.485,4.549 6.486,4.553 C6.487,4.558 6.492,4.562 6.497,4.562 C6.497,4.562 6.627,4.544 6.811,4.479 C6.858,4.464 6.907,4.444 6.955,4.415 C7.004,4.39 7.054,4.36 7.105,4.327 C7.154,4.292 7.208,4.26 7.253,4.214 C7.3,4.172 7.349,4.13 7.397,4.087 C7.496,4.006 7.58,3.908 7.666,3.826 C7.746,3.737 7.819,3.653 7.877,3.576 C7.994,3.426 8.059,3.317 8.059,3.317 C8.062,3.313 8.061,3.307 8.058,3.305 C8.053,3.301 8.048,3.302 8.044,3.306 C8.044,3.306 7.963,3.403 7.826,3.531 C7.759,3.596 7.675,3.666 7.589,3.744 C7.495,3.815 7.405,3.9 7.3,3.967 C7.197,4.035 7.095,4.105 6.994,4.159\" />\n            <Path d=\"M5.652,4.903 C5.611,4.917 5.553,4.939 5.483,4.958 C5.414,4.981 5.33,5.001 5.243,5.025 C5.199,5.038 5.153,5.045 5.107,5.055 C5.06,5.064 5.013,5.076 4.966,5.08 C4.871,5.094 4.776,5.098 4.688,5.103 C4.601,5.117 4.52,5.12 4.449,5.136 C4.378,5.151 4.319,5.153 4.275,5.165 C4.231,5.173 4.204,5.182 4.204,5.182 L4.203,5.182 C4.201,5.182 4.199,5.184 4.198,5.186 C4.195,5.192 4.196,5.198 4.201,5.2 C4.201,5.2 4.223,5.214 4.265,5.233 C4.306,5.25 4.368,5.28 4.445,5.291 C4.521,5.302 4.613,5.317 4.709,5.302 C4.756,5.293 4.806,5.288 4.854,5.274 C4.903,5.259 4.95,5.245 5,5.231 C5.05,5.219 5.096,5.2 5.142,5.183 C5.189,5.165 5.235,5.151 5.278,5.131 C5.365,5.095 5.444,5.058 5.509,5.021 C5.576,4.987 5.628,4.954 5.666,4.932 C5.703,4.909 5.724,4.897 5.724,4.897 C5.728,4.895 5.73,4.89 5.728,4.886 C5.726,4.881 5.721,4.878 5.716,4.879 C5.716,4.879 5.693,4.888 5.652,4.903\" />\n            <Path d=\"M2.84,5.005 C2.528,4.958 2.116,4.928 1.719,4.841 C1.618,4.824 1.521,4.793 1.424,4.771 C1.33,4.738 1.234,4.715 1.145,4.68 C1.058,4.643 0.968,4.618 0.891,4.578 C0.813,4.538 0.733,4.511 0.667,4.471 C0.6,4.434 0.538,4.402 0.481,4.372 C0.427,4.339 0.381,4.31 0.343,4.285 C0.265,4.237 0.219,4.211 0.219,4.211 C0.219,4.211 0.254,4.25 0.319,4.315 C0.384,4.381 0.48,4.473 0.609,4.566 C0.671,4.617 0.747,4.658 0.825,4.706 C0.902,4.757 0.992,4.794 1.082,4.838 C1.173,4.879 1.271,4.914 1.37,4.95 C1.472,4.975 1.574,5.01 1.678,5.03 C2.097,5.119 2.522,5.117 2.832,5.116 C2.987,5.117 3.117,5.116 3.204,5.129 C3.249,5.131 3.284,5.144 3.308,5.148 C3.333,5.153 3.345,5.156 3.345,5.156 C3.345,5.156 3.334,5.15 3.312,5.138 C3.289,5.129 3.261,5.105 3.215,5.093 C3.126,5.062 2.996,5.03 2.84,5.005\" />\n            <Path d=\"M7.198,0.028 C6.976,0.062 6.658,0.113 6.283,0.203 C6.094,0.246 5.892,0.297 5.678,0.355 C5.464,0.409 5.24,0.475 5.01,0.543 C4.78,0.617 4.541,0.689 4.302,0.773 C4.064,0.858 3.82,0.942 3.581,1.035 C3.34,1.127 3.103,1.225 2.869,1.326 C2.635,1.421 2.412,1.535 2.193,1.637 C1.973,1.737 1.771,1.856 1.575,1.958 C1.381,2.064 1.204,2.176 1.037,2.274 C0.87,2.37 0.728,2.479 0.599,2.567 C0.469,2.653 0.361,2.74 0.274,2.81 C0.1,2.951 5.32907052e-15,3.033 5.32907052e-15,3.033 C5.32907052e-15,3.033 0.108,2.963 0.296,2.84 C0.388,2.778 0.501,2.701 0.638,2.626 C0.774,2.551 0.923,2.457 1.092,2.367 C1.262,2.28 1.443,2.178 1.64,2.083 C1.841,1.992 2.046,1.886 2.265,1.79 C2.484,1.694 2.71,1.592 2.943,1.498 C3.174,1.4 3.411,1.305 3.65,1.215 C4.125,1.028 4.609,0.862 5.061,0.704 C5.29,0.633 5.508,0.553 5.718,0.49 C5.927,0.422 6.126,0.361 6.31,0.308 C6.678,0.201 6.987,0.114 7.205,0.064 C7.313,0.043 7.399,0.018 7.459,0.013 C7.518,0.004 7.55,2.22044605e-16 7.55,2.22044605e-16 C7.55,2.22044605e-16 7.518,0.001 7.459,0.002 C7.398,0.001 7.311,0.014 7.198,0.028\" />\n            <Path d=\"M86.641,4.159 C86.54,4.105 86.438,4.035 86.335,3.967 C86.231,3.9 86.139,3.815 86.047,3.744 C85.96,3.666 85.876,3.596 85.809,3.531 C85.671,3.403 85.591,3.306 85.591,3.306 C85.588,3.303 85.582,3.301 85.578,3.304 C85.573,3.307 85.572,3.313 85.575,3.317 C85.575,3.317 85.641,3.426 85.758,3.576 C85.816,3.653 85.889,3.737 85.969,3.826 C86.055,3.908 86.139,4.006 86.238,4.087 C86.286,4.13 86.334,4.172 86.382,4.214 C86.427,4.26 86.481,4.292 86.529,4.327 C86.581,4.36 86.631,4.39 86.68,4.415 C86.728,4.444 86.777,4.464 86.824,4.479 C87.008,4.544 87.137,4.562 87.137,4.562 C87.14,4.562 87.144,4.561 87.146,4.558 C87.15,4.554 87.15,4.548 87.146,4.544 L87.145,4.543 C87.145,4.543 87.05,4.448 86.897,4.343 C86.819,4.295 86.738,4.219 86.641,4.159\" />\n            <Path d=\"M89.361,5.165 C89.316,5.153 89.257,5.151 89.186,5.136 C89.114,5.12 89.034,5.117 88.947,5.103 C88.859,5.098 88.764,5.094 88.669,5.08 C88.621,5.076 88.575,5.064 88.528,5.055 C88.482,5.045 88.435,5.038 88.392,5.025 C88.304,5.001 88.221,4.981 88.152,4.958 C88.082,4.939 88.023,4.917 87.983,4.903 C87.943,4.888 87.919,4.879 87.919,4.879 C87.914,4.878 87.91,4.879 87.907,4.884 C87.905,4.889 87.906,4.894 87.911,4.897 C87.911,4.897 87.932,4.909 87.969,4.932 C88.006,4.954 88.058,4.987 88.125,5.021 C88.191,5.058 88.27,5.095 88.357,5.131 C88.399,5.151 88.446,5.165 88.492,5.183 C88.539,5.2 88.586,5.219 88.635,5.231 C88.684,5.245 88.733,5.259 88.781,5.274 C88.829,5.288 88.879,5.293 88.926,5.302 C89.021,5.317 89.114,5.302 89.19,5.291 C89.266,5.28 89.328,5.25 89.37,5.233 C89.411,5.214 89.434,5.2 89.434,5.2 C89.436,5.2 89.438,5.198 89.438,5.196 C89.44,5.19 89.436,5.184 89.431,5.182 L89.43,5.182 C89.43,5.182 89.404,5.173 89.361,5.165\" />\n            <Path d=\"M93.154,4.372 C93.097,4.402 93.034,4.434 92.967,4.471 C92.902,4.511 92.822,4.538 92.744,4.578 C92.667,4.618 92.576,4.643 92.49,4.68 C92.401,4.715 92.305,4.738 92.211,4.771 C92.113,4.793 92.017,4.824 91.916,4.841 C91.519,4.928 91.107,4.958 90.795,5.005 C90.638,5.03 90.509,5.062 90.42,5.093 C90.374,5.105 90.345,5.129 90.323,5.138 C90.3,5.15 90.29,5.156 90.29,5.156 C90.29,5.156 90.302,5.153 90.326,5.148 C90.35,5.144 90.386,5.131 90.431,5.129 C90.518,5.116 90.649,5.117 90.803,5.116 C91.113,5.117 91.538,5.119 91.956,5.03 C92.061,5.01 92.163,4.975 92.264,4.95 C92.364,4.914 92.462,4.879 92.553,4.838 C92.643,4.794 92.733,4.757 92.81,4.706 C92.887,4.658 92.964,4.617 93.026,4.566 C93.155,4.473 93.252,4.381 93.316,4.315 C93.381,4.25 93.416,4.211 93.416,4.211 C93.416,4.211 93.369,4.237 93.292,4.285 C93.254,4.31 93.207,4.339 93.154,4.372\" />\n            <Path d=\"M93.361,2.81 C93.273,2.74 93.167,2.653 93.036,2.567 C92.906,2.479 92.764,2.37 92.597,2.274 C92.431,2.176 92.254,2.064 92.06,1.958 C91.863,1.856 91.661,1.737 91.442,1.637 C91.223,1.535 91,1.421 90.765,1.326 C90.532,1.225 90.295,1.127 90.054,1.035 C89.815,0.942 89.571,0.858 89.333,0.773 C89.094,0.689 88.855,0.617 88.626,0.543 C88.394,0.475 88.171,0.409 87.956,0.355 C87.743,0.297 87.54,0.246 87.352,0.203 C86.977,0.113 86.659,0.062 86.437,0.028 C86.324,0.014 86.237,0.001 86.176,0.002 C86.116,0.001 86.084,2.22044605e-16 86.084,2.22044605e-16 C86.084,2.22044605e-16 86.116,0.004 86.175,0.013 C86.236,0.018 86.321,0.043 86.43,0.064 C86.648,0.114 86.957,0.201 87.325,0.308 C87.509,0.361 87.708,0.422 87.917,0.49 C88.128,0.553 88.345,0.633 88.574,0.704 C89.027,0.862 89.51,1.028 89.985,1.215 C90.224,1.305 90.461,1.4 90.692,1.498 C90.925,1.592 91.151,1.694 91.369,1.79 C91.589,1.886 91.795,1.992 91.994,2.083 C92.192,2.178 92.373,2.28 92.543,2.367 C92.713,2.457 92.86,2.551 92.997,2.626 C93.134,2.701 93.246,2.778 93.339,2.84 C93.527,2.963 93.635,3.033 93.635,3.033 C93.635,3.033 93.535,2.951 93.361,2.81\" />\n          </G>\n          <Path d=\"M111.934925,129.662736 C111.902925,129.525736 111.851925,129.398736 111.793925,129.277736 C111.673925,129.037736 111.532925,128.817736 111.386925,128.601736 L111.280925,128.446736 C111.246925,128.393736 111.209925,128.338736 111.178925,128.285736 C111.123925,128.180736 111.068925,128.075736 111.015925,127.959736 C110.908925,127.734736 110.816925,127.496736 110.726925,127.257736 C110.545925,126.779736 110.385925,126.285736 110.189925,125.790736 C110.086925,125.543736 109.989925,125.295736 109.826925,125.034736 L109.752925,124.929736 L109.715925,124.878736 C109.720925,124.885736 109.736925,124.905736 109.723925,124.887736 L109.716925,124.877736 L109.703925,124.857736 C109.677925,124.823736 109.688925,124.826736 109.679925,124.813736 L109.651925,124.750736 C109.607925,124.652736 109.563925,124.538736 109.520925,124.423736 C109.349925,123.960736 109.199925,123.467736 109.047925,122.983736 C108.734925,122.010736 108.453925,121.048736 108.020925,120.115736 C107.964925,119.996736 107.905925,119.879736 107.836925,119.757736 C107.802925,119.698736 107.761925,119.635736 107.720925,119.571736 L107.649925,119.473736 L107.628925,119.447736 L107.620925,119.438736 L107.605925,119.421736 L107.574925,119.387736 L107.475925,119.287736 L107.393925,119.213736 C107.339925,119.168736 107.284925,119.125736 107.232925,119.086736 C107.125925,119.006736 107.022925,118.934736 106.917925,118.868736 C106.500925,118.606736 106.100925,118.380736 105.709925,118.168736 C105.318925,117.956736 104.944925,117.748736 104.596925,117.541736 C104.422925,117.438736 104.259925,117.327736 104.109925,117.218736 C104.036925,117.162736 103.965925,117.106736 103.907925,117.048736 L103.895925,117.035736 C103.900925,117.034736 103.901925,117.045736 103.893925,117.012736 L103.861925,116.875736 C103.699925,116.123736 103.567925,115.420736 103.445925,114.801736 C103.327925,114.181736 103.223925,113.641736 103.137925,113.196736 C103.090925,112.947736 103.048925,112.729736 103.012925,112.541736 C103.009925,112.522736 103.007925,112.503736 103.004925,112.483736 C102.814925,111.002736 102.584925,109.205736 102.319925,107.144736 C102.195925,106.114736 102.064925,105.017736 101.925925,103.861736 C101.861925,103.283736 101.794925,102.690736 101.726925,102.084736 C101.659925,101.473736 101.606925,100.858736 101.523925,100.209736 C101.369925,98.912736 101.101925,97.578736 100.750925,96.221736 C100.391925,94.866736 99.9389254,93.492736 99.4239254,92.104736 C98.4139254,89.323736 97.0449254,86.518736 95.9789254,83.571736 C95.7219254,82.838736 95.4939254,82.077736 95.3609254,81.338736 C95.3239254,81.164736 95.2989254,80.957736 95.2719254,80.756736 L95.2639254,80.695736 L95.2569254,80.619736 L95.2419254,80.468736 L95.2129254,80.164736 C95.1759254,79.759736 95.1309254,79.354736 95.0989254,78.945736 C94.9529254,77.313736 94.8529254,75.655736 94.7399254,73.979736 C94.6319254,72.304736 94.5109254,70.609736 94.3329254,68.909736 C94.1499254,67.209736 93.9059254,65.506736 93.5719254,63.822736 C93.4059254,62.979736 93.2229254,62.141736 93.0099254,61.308736 C92.9119254,60.888736 92.7949254,60.479736 92.6799254,60.069736 C92.5649254,59.659736 92.4499254,59.249736 92.3359254,58.840736 C92.1139254,58.025736 91.9309254,57.205736 91.7889254,56.375736 C91.7229254,55.960736 91.6619254,55.544736 91.6039254,55.129736 C91.5519254,54.711736 91.4999254,54.295736 91.4479254,53.879736 C91.3529254,53.047736 91.2749254,52.215736 91.1989254,51.387736 C91.1209254,50.565736 91.0659254,49.716736 90.8649254,48.899736 C90.4889254,47.264736 89.7189254,45.720736 88.6109254,44.490736 C87.5079254,43.253736 86.1069254,42.330736 84.6079254,41.761736 C84.2319254,41.621736 83.8499254,41.500736 83.4639254,41.401736 C83.2659254,41.354736 83.0639254,41.306736 82.8839254,41.273736 C82.6989254,41.238736 82.5149254,41.203736 82.3309254,41.166736 C81.6139254,41.030736 80.9309254,40.837736 80.2689254,40.586736 C79.6059254,40.338736 78.9439254,40.049736 78.2759254,39.780736 C77.6109254,39.509736 76.9469254,39.251736 76.2829254,39.033736 C74.9619254,38.583736 73.6659254,38.216736 72.4199254,37.887736 C71.7979254,37.733736 71.1909254,37.582736 70.5959254,37.436736 C70.0079254,37.288736 69.4349254,37.135736 68.8859254,36.971736 C68.3369254,36.804736 67.8079254,36.631736 67.3169254,36.433736 C66.8309254,36.235736 66.3659254,36.003736 66.0639254,35.711736 C65.9159254,35.564736 65.8199254,35.413736 65.7679254,35.230736 C65.7429254,35.147736 65.7259254,35.035736 65.7149254,34.916736 C65.7029254,34.798736 65.6849254,34.684736 65.6779254,34.567736 C65.6369254,34.098736 65.6309254,33.636736 65.6289254,33.193736 C65.6309254,32.303736 65.6739254,31.481736 65.7129254,30.739736 C65.8019254,29.252736 65.8999254,28.083736 65.9649254,27.286736 C66.0279254,26.488736 66.0609254,26.063736 66.0609254,26.063736 C66.0629254,26.033736 66.0429254,26.006736 66.0129254,26 C65.9819254,25.995736 65.9509254,26.016736 65.9459254,26.047736 C65.9459254,26.047736 65.8729254,26.468736 65.7349254,27.257736 C65.6029254,28.047736 65.4089254,29.206736 65.2249254,30.695736 C65.1329254,31.439736 65.0459254,32.265736 64.9959254,33.174736 C64.9749254,33.630736 64.9549254,34.105736 64.9719254,34.608736 C64.9719254,34.733736 64.9869254,34.861736 64.9949254,34.991736 C65.0029254,35.116736 65.0139254,35.254736 65.0529254,35.414736 C65.1219254,35.721736 65.2969254,36.023736 65.5119254,36.247736 C65.7269254,36.475736 65.9709254,36.646736 66.2179254,36.798736 C66.4679254,36.951736 66.7239254,37.079736 66.9859254,37.198736 C67.5099254,37.436736 68.0559254,37.634736 68.6189254,37.819736 C69.1819254,38.003736 69.7619254,38.174736 70.3569254,38.340736 C70.9479254,38.502736 71.5519254,38.668736 72.1699254,38.837736 C73.3929254,39.176736 74.6589254,39.551736 75.9449254,40.007736 C76.5879254,40.233736 77.2329254,40.480736 77.8889254,40.741736 C78.5449254,40.998736 79.2079254,41.292736 79.9229254,41.544736 C80.6379254,41.795736 81.3969254,41.987736 82.1609254,42.112736 C82.3479254,42.141736 82.5349254,42.171736 82.7239254,42.200736 C82.9169254,42.225736 83.0869254,42.259736 83.2599254,42.291736 C83.6159254,42.365736 83.9699254,42.459736 84.3209254,42.572736 C85.7219254,43.028736 87.0629254,43.820736 88.1499254,44.922736 C89.2329254,46.021736 90.0619254,47.433736 90.4569254,49.000736 C90.5619254,49.389736 90.6389254,49.787736 90.6979254,50.190736 C90.7529254,50.591736 90.7899254,51.010736 90.8339254,51.422736 C90.9219254,52.250736 91.0099254,53.083736 91.0989254,53.919736 C91.2839254,55.588736 91.5049254,57.285736 91.9239254,58.947736 C92.0309254,59.362736 92.1249254,59.770736 92.2239254,60.186736 C92.3219254,60.601736 92.4239254,61.015736 92.5029254,61.430736 C92.6799254,62.255736 92.8269254,63.091736 92.9589254,63.928736 C93.4779254,67.284736 93.5789254,70.679736 93.7259254,74.034736 C93.7939254,75.712736 93.8779254,77.381736 93.9939254,79.032736 C94.0179254,79.445736 94.0559254,79.855736 94.0869254,80.265736 L94.1119254,80.573736 L94.1239254,80.726736 L94.1299254,80.802736 L94.1399254,80.893736 C94.1629254,81.096736 94.1819254,81.293736 94.2229254,81.519736 C94.3649254,82.382736 94.5929254,83.174736 94.8489254,83.953736 C95.3629254,85.508736 95.9859254,86.962736 96.5849254,88.381736 C96.8809254,89.090736 97.1729254,89.790736 97.4619254,90.483736 C97.7479254,91.174736 98.0279254,91.856736 98.2889254,92.534736 C98.8149254,93.887736 99.2689254,95.220736 99.6419254,96.526736 C100.016925,97.829736 100.307925,99.109736 100.487925,100.350736 C100.664925,101.600736 100.836925,102.830736 101.017925,103.983736 C101.192925,105.139736 101.379925,106.232736 101.555925,107.258736 C101.906925,109.311736 102.246925,111.094736 102.539925,112.559736 C102.640925,113.054736 102.733925,113.510736 102.820925,113.932736 C102.873925,114.224736 102.931925,114.541736 102.994925,114.886736 C103.109925,115.510736 103.234925,116.207736 103.391925,116.978736 L103.424925,117.126736 C103.427925,117.142736 103.442925,117.201736 103.460925,117.246736 L103.468925,117.269736 L103.472925,117.278736 L103.500925,117.323736 L103.525925,117.358736 C103.591925,117.455736 103.663925,117.539736 103.737925,117.621736 C103.885925,117.785736 104.049925,117.928736 104.215925,118.070736 C104.547925,118.352736 104.906925,118.608736 105.272925,118.868736 C105.634925,119.129736 106.018925,119.378736 106.369925,119.651736 C106.456925,119.719736 106.543925,119.785736 106.621925,119.852736 C106.661925,119.886736 106.696925,119.919736 106.732925,119.952736 L106.780925,120.000736 C106.790925,120.012736 106.797925,120.020736 106.806925,120.030736 C106.901925,120.144736 106.994925,120.338736 107.087925,120.544736 C107.269925,120.959736 107.439925,121.417736 107.611925,121.879736 C107.784925,122.346736 107.960925,122.819736 108.136925,123.295736 C108.319925,123.775736 108.496925,124.258736 108.712925,124.752736 C108.765925,124.877736 108.825925,125.001736 108.896925,125.134736 C108.918925,125.171736 108.929925,125.194736 108.959925,125.242736 C108.985925,125.284736 109.025925,125.345736 109.041925,125.361736 L109.108925,125.444736 L109.152925,125.494736 C109.276925,125.662736 109.406925,125.883736 109.525925,126.104736 C109.771925,126.547736 110.007925,127.013736 110.258925,127.472736 C110.382925,127.702736 110.515925,127.929736 110.651925,128.157736 C110.718925,128.268736 110.794925,128.383736 110.874925,128.496736 L110.991925,128.650736 L111.113925,128.803736 C111.269925,128.998736 111.416925,129.199736 111.523925,129.411736 C111.629925,129.619736 111.712925,129.851736 111.658925,130.032736 C111.616925,130.209736 111.426925,130.325736 111.213925,130.378736 C111.106925,130.406736 110.992925,130.423736 110.878925,130.434736 C110.821925,130.440736 110.765925,130.441736 110.709925,130.445736 L110.526925,130.445736 C110.347925,130.434736 110.136925,130.354736 109.947925,130.247736 C109.756925,130.141736 109.573925,130.011736 109.399925,129.873736 C109.050925,129.597736 108.734925,129.290736 108.434925,128.984736 C107.846925,128.363736 107.306925,127.754736 106.893925,127.140736 C106.841925,127.063736 106.793925,126.987736 106.747925,126.914736 C106.701925,126.846736 106.646925,126.751736 106.604925,126.683736 C106.506925,126.521736 106.408925,126.363736 106.311925,126.211736 C106.119925,125.903736 105.911925,125.627736 105.710925,125.369736 C105.505925,125.111736 105.300925,124.883736 105.048925,124.686736 C105.016925,124.661736 104.981925,124.639736 104.942925,124.617736 C104.925925,124.607736 104.900925,124.593736 104.875925,124.580736 C104.843925,124.565736 104.849925,124.572736 104.813925,124.556736 C104.748925,124.538736 104.685925,124.522736 104.623925,124.505736 C104.499925,124.472736 104.377925,124.447736 104.257925,124.428736 C104.140925,124.409736 104.007925,124.401736 103.899925,124.428736 C103.798925,124.449736 103.704925,124.469736 103.616925,124.488736 C103.516925,124.504736 103.428925,124.520736 103.346925,124.533736 C103.169925,124.536736 102.951925,124.531736 102.704925,124.503736 C102.531925,124.487736 102.345925,124.457736 102.151925,124.421736 C101.957925,124.382736 101.752925,124.341736 101.546925,124.283736 C101.339925,124.226736 101.129925,124.158736 100.921925,124.080736 C100.712925,124.006736 100.508925,123.910736 100.310925,123.811736 C100.115925,123.705736 99.9279254,123.588736 99.7639254,123.454736 C99.5989254,123.321736 99.4479254,123.184736 99.3119254,123.045736 C99.1689254,122.914736 99.0499254,122.774736 98.9339254,122.641736 C98.8769254,122.574736 98.8289254,122.502736 98.7769254,122.436736 C98.7299254,122.366736 98.6849254,122.297736 98.6409254,122.231736 C98.6039254,122.161736 98.5659254,122.095736 98.5279254,122.031736 C98.4909254,121.965736 98.4679254,121.899736 98.4349254,121.838736 C98.4019254,121.778736 98.3799254,121.718736 98.3589254,121.661736 C98.3349254,121.606736 98.3129254,121.553736 98.2929254,121.506736 C98.2279254,121.315736 98.1789254,121.196736 98.1789254,121.196736 L98.1769254,121.194736 C98.1729254,121.184736 98.1649254,121.175736 98.1529254,121.171736 C98.1319254,121.163736 98.1089254,121.175736 98.1009254,121.196736 C98.1009254,121.196736 98.0599254,121.314736 98.0179254,121.533736 C98.0079254,121.642736 97.9849254,121.779736 97.9939254,121.935736 C97.9969254,122.093736 98.0209254,122.270736 98.0669254,122.464736 C98.0949254,122.559736 98.1279254,122.658736 98.1649254,122.759736 C98.2119254,122.856736 98.2519254,122.961736 98.3119254,123.059736 C98.3719254,123.157736 98.4309254,123.261736 98.5089254,123.352736 C98.5799254,123.451736 98.6659254,123.538736 98.7549254,123.625736 C98.9349254,123.797736 99.1469254,123.941736 99.3699254,124.061736 C99.5919254,124.184736 99.8249254,124.281736 100.056925,124.374736 C100.291925,124.461736 100.526925,124.540736 100.762925,124.596736 C100.997925,124.658736 101.231925,124.698736 101.457925,124.727736 C101.910925,124.789736 102.335925,124.798736 102.697925,124.779736 C103.058925,124.759736 103.358925,124.717736 103.564925,124.658736 C103.665925,124.630736 103.749925,124.599736 103.800925,124.577736 C103.803925,124.576736 103.804925,124.576736 103.806925,124.574736 C103.841925,124.568736 103.874925,124.562736 103.911925,124.554736 C103.920925,124.554736 103.937925,124.546736 103.939925,124.551736 L103.978925,124.563736 C104.006925,124.568736 104.023925,124.580736 104.044925,124.590736 C104.083925,124.610736 104.134925,124.634736 104.180925,124.660736 C104.276925,124.713736 104.376925,124.779736 104.482925,124.842736 C104.535925,124.874736 104.590925,124.909736 104.646925,124.943736 C104.638925,124.942736 104.675925,124.961736 104.672925,124.963736 C104.675925,124.968736 104.678925,124.971736 104.688925,124.981736 C104.705925,124.996736 104.723925,125.016736 104.742925,125.037736 C104.891925,125.201736 105.036925,125.444736 105.184925,125.695736 C105.212925,125.955736 105.246925,126.215736 105.273925,126.475736 C105.299925,126.708736 105.328925,126.940736 105.347925,127.169736 C105.364925,127.395736 105.389925,127.634736 105.373925,127.819736 L105.071925,129.141736 L104.781925,130.527736 C104.691925,130.989736 104.615925,131.452736 104.539925,131.914736 C104.466925,132.377736 104.398925,132.842736 104.339925,133.308736 L104.317925,133.483736 L104.306925,133.571736 L104.296925,133.643736 C104.283925,133.737736 104.260925,133.839736 104.235925,133.943736 C104.185925,134.149736 104.119925,134.362736 104.048925,134.577736 C103.906925,135.004736 103.732925,135.432736 103.560925,135.863736 L103.042925,137.167736 L102.511925,138.477736 C102.332925,138.910736 102.156925,139.346736 101.950925,139.760736 C101.745925,140.168736 101.525925,140.603736 101.106925,140.623736 C100.999925,140.635736 100.892925,140.637736 100.772925,140.636736 C100.690925,140.633736 100.600925,140.603736 100.516925,140.551736 C100.349925,140.447736 100.209925,140.276736 100.104925,140.092736 C100.001925,139.905736 99.9309254,139.700736 99.8969254,139.495736 C99.8649254,139.293736 99.8739254,139.085736 99.9279254,138.920736 C99.9929254,138.737736 100.096925,138.522736 100.185925,138.309736 L100.464925,137.665736 C100.645925,137.235736 100.811925,136.796736 100.968925,136.356736 L100.972925,136.344736 C100.981925,136.321736 100.987925,136.295736 100.990925,136.270736 C101.044925,135.908736 101.159925,135.520736 101.287925,135.137736 C101.354925,134.945736 101.423925,134.753736 101.497925,134.561736 L101.609925,134.274736 L101.725925,133.993736 L101.745925,133.944736 C101.761925,133.905736 101.768925,133.861736 101.761925,133.817736 C101.747925,133.707736 101.736925,133.597736 101.730925,133.485736 C101.726925,133.371736 101.721925,133.257736 101.723925,133.142736 C101.725925,132.910736 101.747925,132.677736 101.771925,132.443736 C101.795925,132.207736 101.837925,131.974736 101.879925,131.739736 C101.924925,131.502736 101.976925,131.272736 102.042925,131.036736 C102.048925,131.016736 102.041925,130.994736 102.022925,130.983736 C102.000925,130.968736 101.969925,130.974736 101.955925,130.996736 L101.954925,130.996736 C101.821925,131.203736 101.708925,131.428736 101.608925,131.655736 C101.506925,131.881736 101.424925,132.117736 101.349925,132.355736 C101.275925,132.593736 101.220925,132.839736 101.175925,133.090736 C101.154925,133.216736 101.136925,133.343736 101.126925,133.472736 C101.119925,133.562736 101.118925,133.653736 101.116925,133.744736 C101.070925,133.822736 101.027925,133.897736 100.984925,133.974736 C100.931925,134.070736 100.879925,134.163736 100.830925,134.261736 C100.731925,134.453736 100.635925,134.648736 100.549925,134.850736 C100.462925,135.051736 100.381925,135.256736 100.311925,135.469736 C100.250925,135.655736 100.199925,135.845736 100.160925,136.046736 C99.7619254,136.836736 99.3279254,137.605736 98.8399254,138.335736 C98.4729254,138.873736 98.0869254,139.399736 97.6509254,139.869736 C97.4329254,140.104736 97.2069254,140.330736 96.9649254,140.518736 C96.8439254,140.611736 96.7169254,140.694736 96.5979254,140.747736 C96.5419254,140.770736 96.4799254,140.792736 96.4479254,140.790736 L96.4429254,140.791736 L96.4159254,140.789736 C96.3979254,140.787736 96.4119254,140.785736 96.4069254,140.785736 C96.3899254,140.779736 96.3699254,140.774736 96.3479254,140.762736 C96.2549254,140.718736 96.1559254,140.617736 96.0639254,140.511736 C95.9719254,140.403736 95.8929254,140.278736 95.8199254,140.148736 C95.6789254,139.884736 95.5739254,139.588736 95.5579254,139.282736 C95.5509254,139.130736 95.5629254,138.974736 95.6079254,138.828736 C95.6499254,138.668736 95.7069254,138.513736 95.7679254,138.364736 C95.8929254,138.064736 96.0469254,137.772736 96.2159254,137.490736 C96.3889254,137.209736 96.5709254,136.935736 96.7509254,136.660736 C96.9319254,136.383736 97.0979254,136.101736 97.2709254,135.821736 L97.7849254,134.981736 L98.0349254,134.557736 L98.2739254,134.127736 L98.2809254,134.114736 C98.3039254,134.072736 98.3169254,134.023736 98.3159254,133.972736 L98.3129254,133.808736 C98.3119254,133.754736 98.3059254,133.699736 98.3079254,133.645736 C98.3099254,133.536736 98.3049254,133.426736 98.3139254,133.318736 C98.3189254,133.209736 98.3219254,133.100736 98.3329254,132.991736 C98.3369254,132.936736 98.3419254,132.881736 98.3499254,132.827736 L98.3699254,132.663736 C98.3849254,132.555736 98.4029254,132.447736 98.4259254,132.339736 C98.4469254,132.231736 98.4719254,132.122736 98.5009254,132.015736 C98.5289254,131.908736 98.5599254,131.799736 98.5969254,131.693736 C98.6339254,131.586736 98.6749254,131.484736 98.7199254,131.373736 C98.7249254,131.362736 98.7219254,131.349736 98.7139254,131.341736 C98.7019254,131.329736 98.6839254,131.329736 98.6729254,131.342736 L98.6699254,131.344736 C98.5919254,131.424736 98.5129254,131.518736 98.4459254,131.614736 C98.3789254,131.711736 98.3109254,131.810736 98.2529254,131.913736 C98.1949254,132.016736 98.1419254,132.123736 98.0929254,132.233736 C98.0459254,132.342736 98.0049254,132.453736 97.9659254,132.567736 C97.9269254,132.680736 97.8929254,132.795736 97.8669254,132.911736 C97.8379254,133.028736 97.8109254,133.145736 97.7939254,133.263736 C97.7609254,133.468736 97.7409254,133.674736 97.7329254,133.879736 L97.5019254,134.243736 L97.2529254,134.672736 C97.0909254,134.961736 96.9369254,135.255736 96.7879254,135.551736 C96.7609254,135.604736 96.7349254,135.659736 96.7089254,135.710736 C96.3669254,136.152736 96.0219254,136.588736 95.6649254,137.013736 C95.3029254,137.440736 94.9319254,137.858736 94.5309254,138.238736 C94.3319254,138.428736 94.1269254,138.612736 93.9099254,138.770736 C93.6939254,138.930736 93.4649254,139.071736 93.2359254,139.153736 C93.0039254,139.237736 92.7909254,139.231736 92.6529254,139.119736 C92.5069254,139.006736 92.4059254,138.781736 92.3579254,138.542736 C92.3339254,138.424736 92.3209254,138.297736 92.3229254,138.184736 C92.3169254,138.096736 92.3719254,137.975736 92.4129254,137.862736 C92.5079254,137.632736 92.6249254,137.394736 92.7539254,137.159736 C92.8769254,136.919736 93.0129254,136.681736 93.1539254,136.444736 C93.2989254,136.207736 93.4359254,135.964736 93.5709254,135.716736 C93.7069254,135.469736 93.8519254,135.226736 94.0169254,134.997736 L94.1409254,134.825736 C94.1829254,134.768736 94.2299254,134.699736 94.2649254,134.644736 C94.3399254,134.536736 94.4299254,134.428736 94.5239254,134.325736 C94.7119254,134.119736 94.9159254,133.923736 95.1149254,133.726736 C95.3129254,133.528736 95.5099254,133.326736 95.6909254,133.115736 C95.7239254,133.077736 95.7459254,133.030736 95.7519254,132.977736 L95.7529254,132.971736 C95.7749254,132.774736 95.7969254,132.574736 95.8379254,132.375736 C95.8589254,132.278736 95.8739254,132.176736 95.8969254,132.077736 L95.9679254,131.779736 C96.0189254,131.580736 96.0739254,131.380736 96.1329254,131.179736 L96.2209254,130.875736 L96.2639254,130.721736 L96.2839254,130.640736 L96.2929254,130.596736 L96.2949254,130.578736 L96.2949254,130.573736 C96.2949254,130.566736 96.2919254,130.553736 96.2819254,130.545736 C96.2609254,130.530736 96.2579254,130.536736 96.2499254,130.536736 C96.2299254,130.544736 96.2299254,130.550736 96.2279254,130.551736 L96.2209254,130.559736 L96.2209254,130.560736 C96.2169254,130.564736 96.2199254,130.571736 96.2199254,130.576736 L96.1999254,130.602736 L96.1519254,130.664736 L96.0549254,130.794736 C95.9929254,130.882736 95.9329254,130.973736 95.8759254,131.065736 C95.7629254,131.250736 95.6619254,131.444736 95.5749254,131.644736 C95.4869254,131.845736 95.4159254,132.052736 95.3569254,132.266736 C95.3099254,132.453736 95.2699254,132.644736 95.2459254,132.839736 C94.9959254,133.144736 94.7769254,133.473736 94.5649254,133.808736 C94.5589254,133.809736 94.5529254,133.807736 94.5489254,133.811736 C94.5489254,133.811736 94.3829254,133.915736 94.0889254,134.090736 C93.7939254,134.262736 93.3709254,134.506736 92.8459254,134.755736 C92.5839254,134.879736 92.2949254,135.001736 91.9849254,135.102736 C91.6809254,135.199736 91.3299254,135.286736 91.0389254,135.244736 C90.9699254,135.234736 90.9099254,135.209736 90.8869254,135.186736 C90.8779254,135.180736 90.8679254,135.161736 90.8729254,135.169736 C90.8689254,135.157736 90.8589254,135.124736 90.8669254,135.136736 L90.8609254,135.060736 C90.8459254,134.866736 90.8599254,134.742736 90.9079254,134.612736 C90.9499254,134.487736 91.0319254,134.347736 91.1149254,134.230736 L91.1559254,134.169736 L91.1759254,134.139736 L91.1869254,134.123736 C91.1769254,134.140736 91.1879254,134.123736 91.1869254,134.125736 L91.2539254,134.045736 C91.3059254,133.983736 91.3709254,133.918736 91.4319254,133.850736 C91.6849254,133.577736 91.9539254,133.295736 92.2209254,133.024736 C92.4909254,132.753736 92.7459254,132.475736 92.9879254,132.194736 C93.0159254,132.160736 93.0699254,132.096736 93.0919254,132.051736 C93.1209254,131.999736 93.1459254,131.952736 93.1639254,131.904736 C93.2049254,131.810736 93.2319254,131.718736 93.2629254,131.631736 C93.3219254,131.455736 93.3769254,131.290736 93.4449254,131.134736 C93.5779254,130.823736 93.7729254,130.550736 93.9499254,130.350736 C94.1729254,130.037736 94.1959254,129.771736 94.2459254,129.537736 C94.2859254,129.304736 94.3069254,129.107736 94.3239254,128.945736 C94.3409254,128.784736 94.3619254,128.660736 94.3799254,128.573736 C94.3969254,128.490736 94.4209254,128.435736 94.4209254,128.436736 C94.4239254,128.427736 94.4249254,128.416736 94.4219254,128.407736 C94.4189254,128.395736 94.4099254,128.387736 94.3989254,128.381736 C94.3929254,128.369736 94.3739254,128.337736 94.3449254,128.285736 C94.3079254,128.217736 94.2589254,128.117736 94.2099254,127.984736 C94.1149254,127.718736 94.0479254,127.314736 94.1009254,126.836736 C94.1499254,126.358736 94.3089254,125.819736 94.5039254,125.236736 C94.5509254,125.088736 94.5999254,124.939736 94.6409254,124.775736 C94.6509254,124.734736 94.6599254,124.692736 94.6679254,124.647736 C94.6749254,124.607736 94.6829254,124.537736 94.6839254,124.503736 C94.6889254,124.417736 94.6939254,124.330736 94.6989254,124.243736 C94.7169254,123.908736 94.7039254,123.580736 94.6959254,123.254736 C94.6739254,122.606736 94.6479254,121.972736 94.6639254,121.387736 C94.6799254,120.803736 94.7379254,120.269736 94.8509254,119.827736 C94.9069254,119.605736 94.9669254,119.401736 95.0479254,119.231736 C95.1159254,119.053736 95.2019254,118.910736 95.2709254,118.785736 C95.2879254,118.758736 95.3049254,118.732736 95.3219254,118.706736 C95.3519254,118.687736 95.3829254,118.667736 95.4149254,118.646736 C95.5239254,118.581736 95.6439254,118.508736 95.7779254,118.433736 C95.9089254,118.354736 96.0609254,118.284736 96.2139254,118.200736 C96.3729254,118.126736 96.5329254,118.039736 96.7089254,117.967736 C96.7969254,117.930736 96.8829254,117.887736 96.9719254,117.850736 C97.0629254,117.815736 97.1539254,117.779736 97.2459254,117.742736 C97.4299254,117.668736 97.6209254,117.605736 97.8109254,117.539736 C98.0039254,117.483736 98.1929254,117.413736 98.3859254,117.369736 C98.4819254,117.345736 98.5779254,117.320736 98.6709254,117.292736 C98.7649254,117.267736 98.8609254,117.253736 98.9529254,117.231736 C99.0459254,117.210736 99.1369254,117.190736 99.2259254,117.169736 C99.3169254,117.154736 99.4049254,117.139736 99.4909254,117.125736 C99.6639254,117.094736 99.8269254,117.060736 99.9809254,117.044736 C100.132925,117.027736 100.274925,117.002736 100.400925,116.985736 C100.525925,116.975736 100.636925,116.961736 100.728925,116.952736 C100.911925,116.930736 101.018925,116.910736 101.018925,116.910736 C101.018925,116.910736 100.916925,116.879736 100.735925,116.836736 C100.644925,116.815736 100.533925,116.787736 100.405925,116.763736 C100.277925,116.743736 100.131925,116.726736 99.9709254,116.711736 C99.8109254,116.692736 99.6369254,116.688736 99.4519254,116.691736 C99.3599254,116.693736 99.2639254,116.694736 99.1669254,116.695736 C99.0699254,116.704736 98.9709254,116.714736 98.8709254,116.724736 C98.6689254,116.741736 98.4629254,116.778736 98.2539254,116.823736 C98.0439254,116.859736 97.8389254,116.932736 97.6299254,116.990736 C97.4269254,117.063736 97.2219254,117.134736 97.0289254,117.225736 C96.8349254,117.314736 96.6469254,117.407736 96.4739254,117.512736 C96.2959254,117.610736 96.1369254,117.727736 95.9849254,117.831736 C95.8379254,117.946736 95.6999254,118.053736 95.5829254,118.165736 C95.4879254,118.246736 95.4089254,118.330736 95.3359254,118.410736 C95.4139254,118.220736 95.4929254,117.989736 95.5509254,117.708736 C95.6179254,117.381736 95.6429254,116.993736 95.6229254,116.565736 C95.5729254,115.709736 95.3169254,114.710736 94.8999254,113.638736 C94.4889254,112.563736 93.9109254,111.405736 93.2269254,110.199736 C92.5509254,109.012736 91.8539254,107.715736 91.1019254,106.347736 C90.3539254,104.978736 89.5659254,103.526736 88.8729254,101.961736 C88.1739254,100.400736 87.6079254,98.715736 87.2409254,96.957736 C87.1449254,96.519736 87.0689254,96.076736 87.0019254,95.629736 C86.9309254,95.184736 86.8759254,94.735736 86.8399254,94.283736 C86.7409254,93.379736 86.7729254,92.491736 86.6899254,91.529736 C86.6109254,90.590736 86.4739254,89.650736 86.2469254,88.735736 C86.0329254,87.817736 85.7279254,86.927736 85.3939254,86.062736 C84.7159254,84.336736 83.8769254,82.731736 83.1259254,81.205736 C82.9409254,80.825736 82.7559254,80.446736 82.5859254,80.078736 C82.4159254,79.700736 82.2469254,79.324736 82.0789254,78.952736 C81.7619254,78.208736 81.4469254,77.477736 81.1779254,76.752736 C80.6199254,75.310736 80.1499254,73.921736 79.7869254,72.616736 C79.4089254,71.315736 79.1309254,70.102736 78.8999254,69.020736 C78.8479254,68.747736 78.7979254,68.485736 78.7499254,68.231736 C78.7019254,67.976736 78.6469254,67.732736 78.6129254,67.495736 C78.5749254,67.257736 78.5389254,67.031736 78.5039254,66.813736 C78.4679254,66.595736 78.4289254,66.388736 78.4059254,66.190736 C78.3509254,65.794736 78.3059254,65.440736 78.2589254,65.131736 C78.2229254,64.822736 78.1929254,64.559736 78.1689254,64.345736 C78.1639254,64.302736 78.1589254,64.262736 78.1539254,64.223736 C78.1749254,64.196736 78.1989254,64.168736 78.2189254,64.142736 C78.7769254,63.416736 79.2119254,62.666736 79.5529254,61.953736 C79.8979254,61.240736 80.1389254,60.556736 80.3149254,59.943736 C80.4949254,59.330736 80.5969254,58.784736 80.6659254,58.334736 C80.7339254,57.884736 80.7539254,57.527736 80.7649254,57.285736 C80.7759254,57.041736 80.7699254,56.912736 80.7699254,56.912736 C80.7699254,56.912736 80.6949254,57.426736 80.4419254,58.285736 C80.3149254,58.713736 80.1349254,59.226736 79.8999254,59.797736 C79.6599254,60.367736 79.3519254,60.991736 78.9699254,61.640736 C78.5829254,62.287736 78.1089254,62.950736 77.5509254,63.598736 C76.9919254,64.245736 76.3249254,64.853736 75.5889254,65.414736 C74.8509254,65.976736 74.0179254,66.456736 73.1419254,66.881736 C72.2649254,67.308736 71.3169254,67.621736 70.3569254,67.881736 L69.6329254,68.064736 C69.3889254,68.121736 69.1429254,68.161736 68.8989254,68.210736 C68.4119254,68.316736 67.9159254,68.369736 67.4279254,68.443736 C67.1839254,68.481736 66.9359254,68.491736 66.6929254,68.517736 C66.4469254,68.540736 66.2039254,68.565736 65.9609254,68.588736 C65.4659254,68.625736 64.9769254,68.662736 64.4969254,68.700736 C63.5389254,68.764736 62.6209254,68.833736 61.7569254,68.836736 C61.3249254,68.839736 60.9079254,68.819736 60.5089254,68.787736 C60.1099254,68.754736 59.7269254,68.703736 59.3719254,68.618736 C58.6649254,68.445736 58.0509254,68.164736 57.6269254,67.762736 C57.1919254,67.370736 56.9489254,66.888736 56.8009254,66.480736 C56.7619254,66.376736 56.7279254,66.278736 56.7059254,66.182736 C56.6819254,66.086736 56.6539254,65.997736 56.6359254,65.913736 C56.6059254,65.744736 56.5719254,65.598736 56.5589254,65.479736 C56.5309254,65.239736 56.5149254,65.111736 56.5149254,65.111736 C56.5149254,65.111736 56.5079254,65.241736 56.4929254,65.483736 C56.4899254,65.725736 56.4819254,66.086736 56.5779254,66.541736 C56.6739254,66.989736 56.8549254,67.561736 57.3069254,68.069736 C57.7389254,68.591736 58.4169254,69.000736 59.1879254,69.256736 C59.9609254,69.514736 60.8269254,69.647736 61.7299254,69.700736 C62.6349254,69.756736 63.5819254,69.755736 64.5509254,69.718736 C65.0329254,69.700736 65.5239254,69.683736 66.0199254,69.664736 C66.5219254,69.636736 67.0389254,69.613736 67.5529254,69.559736 C68.0679254,69.490736 68.5909254,69.451736 69.1069254,69.339736 C69.3649254,69.289736 69.6259254,69.246736 69.8839254,69.190736 L70.6559254,68.998736 C71.6759254,68.708736 72.6869254,68.360736 73.6279254,67.886736 C74.5729254,67.422736 75.4419254,66.845736 76.2189254,66.213736 C76.8389254,65.712736 77.3839254,65.159736 77.8599254,64.588736 C77.8479254,64.753736 77.8359254,64.940736 77.8229254,65.149736 C77.8109254,65.463736 77.8049254,65.825736 77.7959254,66.231736 C77.7869254,67.043736 77.8169254,68.032736 77.9109254,69.162736 C78.0119254,70.293736 78.1899254,71.565736 78.4639254,72.940736 C78.6559254,73.855736 78.8919254,74.817736 79.1829254,75.805736 C79.1219254,75.994736 79.0549254,76.199736 78.9829254,76.422736 C78.5789254,77.673736 78.0019254,79.459736 77.3089254,81.604736 C76.9539254,82.669736 76.5699254,83.824736 76.1629254,85.044736 C76.1119254,85.196736 76.0609254,85.350736 76.0099254,85.504736 C75.9599254,85.664736 75.9079254,85.825736 75.8569254,85.987736 C75.7509254,86.369736 75.7119254,86.702736 75.6669254,87.053736 C75.5899254,87.747736 75.5559254,88.447736 75.5279254,89.158736 C75.4739254,90.578736 75.4369254,92.039736 75.3379254,93.521736 C75.2539254,95.002736 75.1279254,96.506736 74.9909254,98.010736 C74.8579254,99.514736 74.7239254,101.021736 74.6609254,102.505736 C74.5939254,103.992736 74.5369254,105.452736 74.5279254,106.877736 C74.5289254,107.059736 74.5289254,107.239736 74.5299254,107.416736 C74.5339254,107.600736 74.5329254,107.771736 74.5529254,107.987736 L74.5569254,108.029736 L74.5669254,108.088736 L74.5779254,108.153736 L74.5899254,108.217736 L74.6079254,108.297736 L74.6449254,108.457736 L74.6809254,108.592736 C74.7289254,108.771736 74.7809254,108.937736 74.8339254,109.105736 C75.0469254,109.768736 75.2739254,110.397736 75.5039254,111.006736 C75.9639254,112.224736 76.4339254,113.356736 76.8679254,114.402736 C77.3109254,115.444736 77.7199254,116.396736 78.0969254,117.234736 C78.4679254,118.076736 78.8039254,118.803736 79.0799254,119.403736 C79.3559254,120.002736 79.5729254,120.473736 79.7209254,120.793736 C79.8709254,121.114736 79.9419254,121.287736 79.9419254,121.287736 L79.9439254,121.288736 C79.9439254,121.290736 79.9429254,121.290736 79.9429254,121.291736 C80.1949254,122.059736 80.4439254,122.827736 80.6849254,123.591736 C80.9219254,124.361736 81.1609254,125.127736 81.3789254,125.902736 C81.4959254,126.285736 81.6009254,126.673736 81.7099254,127.059736 C81.8189254,127.445736 81.9249254,127.832736 82.0239254,128.221736 C82.2339254,128.996736 82.4269254,129.775736 82.6209254,130.553736 C82.7979254,131.334736 82.9899254,132.113736 83.1579254,132.897736 C83.3369254,133.678736 83.4879254,134.466736 83.6479254,135.251736 C83.7959254,136.039736 83.9589254,136.824736 84.0899254,137.615736 L84.2939254,138.799736 L84.4819254,139.988736 C84.6199254,140.777736 84.7199254,141.572736 84.8429254,142.364736 C84.9599254,143.158736 85.0699254,143.952736 85.1779254,144.747736 L85.4889254,147.135736 C85.5929254,147.935736 85.6949254,148.734736 85.7839254,149.532736 C85.8799254,150.330736 85.9589254,151.130736 86.0399254,151.930736 C86.1179254,152.731736 86.1679254,153.533736 86.2169254,154.335736 C86.2509254,155.137736 86.2779254,155.941736 86.2709254,156.743736 C86.2649254,157.143736 86.2499254,157.542736 86.2229254,157.940736 C86.2079254,158.138736 86.1939254,158.337736 86.1679254,158.532736 C86.1569254,158.630736 86.1439254,158.727736 86.1269254,158.821736 C86.1189254,158.869736 86.1099254,158.916736 86.0999254,158.961736 C86.0909254,159.004736 86.0759254,159.058736 86.0699254,159.078736 L86.0659254,159.088736 C86.0579254,159.114736 86.0539254,159.141736 86.0579254,159.170736 C86.1839254,160.328736 86.3189254,161.487736 86.4229254,162.647736 C86.5259254,163.803736 86.6439254,164.976736 86.6939254,166.114736 L86.6919254,166.307736 L86.6779254,166.525736 C86.6719254,166.670736 86.6669254,166.833736 86.6669254,166.982736 C86.6649254,167.282736 86.6789254,167.579736 86.6939254,167.876736 C86.7289254,168.468736 86.7869254,169.053736 86.8479254,169.636736 L87.2419254,173.110736 C87.3649254,174.264736 87.4779254,175.415736 87.5489254,176.569736 C87.6229254,177.722736 87.6669254,178.875736 87.6629254,180.028736 C87.6649254,180.604736 87.6489254,181.180736 87.6299254,181.756736 C87.6059254,182.328736 87.5719254,182.908736 87.5379254,183.492736 L87.3199254,186.978736 L87.1229254,190.471736 C87.0619254,191.637736 87.0179254,192.803736 86.9689254,193.969736 C86.9239254,195.136736 86.8809254,196.303736 86.8589254,197.471736 C86.8359254,198.640736 86.8109254,199.808736 86.8129254,200.978736 C86.8109254,202.147736 86.8239254,203.318736 86.8549254,204.488736 C86.8709254,205.074736 86.8999254,205.657736 86.9239254,206.244736 L87.0269254,207.992736 C87.1009254,209.157736 87.1639254,210.320736 87.2589254,211.485736 C87.3519254,212.651736 87.4379254,213.815736 87.5459254,214.977736 C87.5469254,214.986736 87.5519254,214.994736 87.5569254,215.000736 C87.5589254,215.031736 87.5629254,215.103736 87.5719254,215.214736 C87.5849254,215.363736 87.5969254,215.577736 87.6739254,215.852736 C87.7049254,215.991736 87.7459254,216.145736 87.7929254,216.312736 C87.8459254,216.471736 87.9059254,216.643736 87.9749254,216.826736 C88.1019254,217.197736 88.3049254,217.582736 88.5159254,218.012736 C88.6289254,218.223736 88.7599254,218.434736 88.8939254,218.654736 C89.0259254,218.874736 89.1699254,219.099736 89.3429254,219.310736 C89.5099254,219.526736 89.6969254,219.738736 89.8859254,219.952736 C90.0869254,220.159736 90.3039254,220.359736 90.5169254,220.565736 C90.6259254,220.667736 90.7299254,220.774736 90.8369254,220.879736 C90.9509254,220.978736 91.0629254,221.079736 91.1749254,221.183736 C91.3979254,221.389736 91.6099254,221.610736 91.8229254,221.833736 C92.2609254,222.265736 92.6769254,222.727736 93.0609254,223.216736 C93.4469254,223.703736 93.8129254,224.202736 94.1849254,224.673736 C94.5519254,225.148736 94.8919254,225.626736 95.1859254,226.099736 C95.4759254,226.574736 95.7309254,227.036736 95.9019254,227.477736 C96.0729254,227.916736 96.1549254,228.330736 96.0979254,228.678736 C96.0439254,229.024736 95.8389254,229.310736 95.5979254,229.541736 C95.3399254,229.755736 95.0769254,229.933736 94.8399254,230.049736 C94.7939254,230.073736 94.7519254,230.094736 94.7099254,230.116736 C94.7579254,230.017736 94.7959254,229.914736 94.8199254,229.813736 C94.8899254,229.506736 94.8829254,229.210736 94.8399254,228.940736 C94.7989254,228.668736 94.7189254,228.418736 94.6319254,228.181736 C94.5389254,227.947736 94.4339254,227.727736 94.3189254,227.524736 C94.0899254,227.118736 93.8329254,226.773736 93.5909254,226.497736 C93.3489254,226.221736 93.1199254,226.016736 92.9489254,225.883736 C92.7789254,225.748736 92.6659254,225.694736 92.6659254,225.694736 C92.6659254,225.694736 92.6799254,225.721736 92.7049254,225.773736 C92.7309254,225.824736 92.7619254,225.901736 92.8059254,225.995736 C92.8899254,226.187736 93.0049254,226.459736 93.1379254,226.782736 C93.2709254,227.104736 93.4229254,227.477736 93.5639254,227.871736 C93.7029254,228.265736 93.8359254,228.688736 93.8899254,229.078736 C93.9139254,229.273736 93.9199254,229.457736 93.8899254,229.602736 C93.8619254,229.750736 93.8099254,229.852736 93.7259254,229.943736 C93.6829254,229.988736 93.6289254,230.030736 93.5659254,230.069736 C93.5389254,230.087736 93.4929254,230.106736 93.4719254,230.119736 C93.4309254,230.137736 93.3899254,230.155736 93.3499254,230.172736 C93.2089254,230.233736 93.0569254,230.272736 92.9129254,230.289736 C92.7699254,230.304736 92.6289254,230.302736 92.4999254,230.284736 C92.4559254,230.278736 92.4159254,230.269736 92.3749254,230.260736 C92.3989254,230.209736 92.4229254,230.157736 92.4409254,230.104736 C92.5489254,229.814736 92.5879254,229.503736 92.5739254,229.199736 C92.5709254,229.129736 92.5589254,229.024736 92.5509254,228.974736 C92.5389254,228.893736 92.5239254,228.810736 92.5039254,228.738736 C92.4639254,228.587736 92.4109254,228.453736 92.3549254,228.327736 C92.2419254,228.075736 92.1129254,227.850736 91.9739254,227.646736 C91.7009254,227.235736 91.4049254,226.896736 91.1359254,226.620736 C90.5969254,226.070736 90.1529254,225.790736 90.1529254,225.790736 C90.1529254,225.790736 90.2019254,225.912736 90.2949254,226.116736 C90.3869254,226.320736 90.5229254,226.606736 90.6889254,226.940736 C90.8539254,227.274736 91.0499254,227.657736 91.2379254,228.061736 C91.3299254,228.264736 91.4219254,228.470736 91.4919254,228.674736 C91.5289254,228.774736 91.5589254,228.874736 91.5769254,228.966736 C91.5899254,229.014736 91.5939254,229.054736 91.6009254,229.096736 C91.6089254,229.170736 91.6099254,229.189736 91.6119254,229.244736 C91.6219254,229.437736 91.5969254,229.631736 91.5489254,229.807736 C91.4989254,229.983736 91.4219254,230.138736 91.3239254,230.258736 C91.2259254,230.378736 91.1069254,230.465736 90.9659254,230.520736 C90.9309254,230.534736 90.8939254,230.545736 90.8569254,230.554736 C90.8509254,230.557736 90.8289254,230.561736 90.8369254,230.561736 L90.7989254,230.567736 L90.7219254,230.578736 C90.6149254,230.599736 90.5419254,230.605736 90.4579254,230.618736 C90.1209254,230.653736 89.8339254,230.627736 89.6409254,230.555736 C89.6359254,230.554736 89.6329254,230.552736 89.6299254,230.550736 C89.6999254,230.361736 89.7319254,230.171736 89.7409254,229.995736 C89.7579254,229.475736 89.6159254,229.035736 89.4429254,228.652736 C89.3479254,228.459736 89.2749254,228.310736 89.1829254,228.141736 C89.0929254,227.979736 89.0079254,227.820736 88.9219254,227.676736 C88.7529254,227.383736 88.5889254,227.121736 88.4419254,226.889736 C88.2969254,226.658736 88.1619254,226.459736 88.0509254,226.297736 C87.8299254,225.970736 87.6909254,225.790736 87.6909254,225.790736 C87.6909254,225.790736 87.7529254,226.009736 87.8769254,226.383736 C87.9979254,226.757736 88.1839254,227.286736 88.4079254,227.914736 C88.4639254,228.070736 88.5219254,228.231736 88.5809254,228.398736 C88.6389254,228.557736 88.7059254,228.753736 88.7569254,228.914736 C88.8529254,229.245736 88.9099254,229.610736 88.8659254,229.926736 C88.8469254,230.083736 88.7959254,230.222736 88.7289254,230.311736 C88.6959254,230.356736 88.6619254,230.391736 88.6209254,230.415736 C88.6189254,230.423736 88.5079254,230.470736 88.4309254,230.497736 C88.0929254,230.622736 87.6989254,230.676736 87.3059254,230.674736 C87.1089254,230.672736 86.9109254,230.657736 86.7199254,230.626736 C86.6249254,230.611736 86.5309254,230.592736 86.4429254,230.567736 C86.4279254,230.563736 86.4139254,230.558736 86.3999254,230.554736 C86.4019254,230.547736 86.4049254,230.540736 86.4069254,230.534736 C86.4879254,230.298736 86.5409254,230.057736 86.5649254,229.823736 C86.6109254,229.351736 86.5599254,228.908736 86.4659254,228.509736 C86.3719254,228.110736 86.2379254,227.753736 86.0939254,227.438736 C85.9509254,227.122736 85.7919254,226.850736 85.6499254,226.612736 C85.5049254,226.375736 85.3629254,226.180736 85.2479254,226.020736 C85.0109254,225.702736 84.8609254,225.535736 84.8609254,225.535736 C84.8609254,225.535736 84.9469254,225.742736 85.0979254,226.104736 C85.1739254,226.284736 85.2559254,226.505736 85.3489254,226.757736 C85.4239254,226.959736 85.4969254,227.187736 85.5659254,227.432736 C85.3859254,227.284736 85.1989254,227.156736 85.0079254,227.051736 C84.4029254,226.725736 83.7809254,226.556736 83.1979254,226.512736 C82.6169254,226.473736 82.0699254,226.539736 81.6259254,226.732736 C81.4039254,226.825736 81.2099254,226.944736 81.0489254,227.077736 C80.8899254,227.211736 80.7699254,227.364736 80.6809254,227.507736 C80.5039254,227.798736 80.4569254,228.060736 80.4349254,228.230736 C80.4259254,228.316736 80.4229254,228.381736 80.4239254,228.426736 C80.4229254,228.470736 80.4229254,228.493736 80.4229254,228.493736 C80.4229254,228.493736 80.4439254,228.404736 80.4979254,228.244736 C80.5569254,228.088736 80.6589254,227.860736 80.8599254,227.641736 C81.0609254,227.423736 81.3669254,227.226736 81.7609254,227.134736 C82.1539254,227.043736 82.6229254,227.030736 83.1159254,227.132736 C83.6069254,227.232736 84.1319254,227.420736 84.5949254,227.734736 C85.0559254,228.038736 85.4659254,228.477736 85.5839254,228.976736 C85.5889254,229.005736 85.5989254,229.040736 85.6019254,229.066736 C85.6049254,229.096736 85.6099254,229.107736 85.6139254,229.158736 L85.6209254,229.221736 L85.6219254,229.264736 L85.6259254,229.378736 C85.6259254,229.527736 85.6229254,229.676736 85.5969254,229.809736 C85.5489254,230.084736 85.4519254,230.299736 85.2799254,230.446736 C85.1089254,230.596736 84.8419254,230.700736 84.5339254,230.759736 C84.2259254,230.819736 83.8839254,230.840736 83.5339254,230.855736 C83.1779254,230.865736 82.8209254,230.873736 82.4659254,230.883736 C82.1249254,230.887736 81.7889254,230.869736 81.4709254,230.821736 C81.3089254,230.796736 81.1529254,230.761736 81.0059254,230.714736 C80.9719254,230.692736 80.9339254,230.665736 80.8909254,230.635736 C80.7289254,230.510736 80.4789254,230.321736 80.2279254,230.021736 C79.9759254,229.725736 79.7379254,229.303736 79.7009254,228.748736 C79.6539254,228.197736 79.7629254,227.539736 79.9059254,226.791736 C80.0509254,226.043736 80.2029254,225.195736 80.2809254,224.253736 C80.3009254,224.018736 80.3139254,223.778736 80.3239254,223.532736 C80.3269254,223.408736 80.3299254,223.284736 80.3329254,223.159736 L80.3269254,222.959736 C80.3199254,222.883736 80.3159254,222.803736 80.3029254,222.729736 C80.2839254,222.581736 80.2429254,222.422736 80.1809254,222.266736 C80.1179254,222.109736 80.0239254,221.953736 79.9169254,221.826736 C79.6979254,221.567736 79.4909254,221.416736 79.3639254,221.255736 C79.2309254,221.098736 79.1389254,220.922736 79.0699254,220.707736 C79.0019254,220.493736 78.9599254,220.248736 78.9359254,219.994736 C78.8839254,219.482736 78.8979254,218.914736 78.9439254,218.347736 C78.9929254,217.795736 79.0999254,217.226736 79.2779254,216.670736 C79.4539254,216.108736 79.7049254,215.567736 79.9659254,214.919736 C80.0289254,214.754736 80.0909254,214.580736 80.1419254,214.391736 C80.1669254,214.297736 80.1889254,214.198736 80.2069254,214.094736 C80.2169254,214.044736 80.2209254,213.991736 80.2289254,213.938736 C80.2329254,213.911736 80.2339254,213.884736 80.2359254,213.857736 L80.2389254,213.817736 C80.2399254,213.793736 80.2409254,213.811736 80.2429254,213.755736 C80.2429254,213.586736 80.2489254,213.427736 80.2359254,213.231736 L80.2209254,212.949736 L80.1989254,212.686736 C80.1349254,211.987736 80.0509254,211.291736 79.9399254,210.586736 C79.8329254,209.882736 79.7129254,209.172736 79.5889254,208.451736 C79.4619254,207.730736 79.3169254,207.003736 79.1759254,206.266736 C79.1049254,205.898736 79.0319254,205.528736 78.9599254,205.155736 C78.9229254,204.969736 78.8859254,204.783736 78.8489254,204.596736 C78.8089254,204.406736 78.7689254,204.215736 78.7289254,204.023736 C78.5459254,203.227736 78.3029254,202.481736 78.0329254,201.725736 C77.4949254,200.221736 76.8399254,198.748736 76.2789254,197.221736 C76.1379254,196.839736 75.9989254,196.455736 75.8769254,196.067736 C75.7549254,195.672736 75.6319254,195.278736 75.5079254,194.881736 C75.3839254,194.483736 75.2589254,194.085736 75.1339254,193.685736 C75.0109254,193.284736 74.8879254,192.882736 74.7649254,192.479736 C74.2649254,190.869736 73.7589254,189.238736 73.2489254,187.594736 C72.9969254,186.773736 72.7439254,185.948736 72.4899254,185.119736 C72.2459254,184.290736 72.0039254,183.457736 71.7759254,182.622736 C71.3169254,180.952736 70.9509254,179.263736 70.7969254,177.555736 C70.6369254,175.846736 70.6559254,174.121736 70.7179254,172.398736 C70.7499254,171.535736 70.7999254,170.674736 70.8519254,169.815736 L70.8619254,169.654736 L70.8689254,169.479736 C70.8749254,169.378736 70.8739254,169.246736 70.8739254,169.125736 C70.8709254,168.887736 70.8589254,168.659736 70.8379254,168.427736 C70.7959254,167.969736 70.7239254,167.521736 70.6359254,167.081736 C70.2709254,165.326736 69.6709254,163.694736 69.0509254,162.109736 C68.4249254,160.525736 67.7579254,158.992736 67.0849254,157.497736 C65.7579254,154.503736 64.4319254,151.646736 63.4069254,148.860736 C62.8819254,147.468736 62.4359254,146.114736 62.0719254,144.755736 C61.9799254,144.418736 61.8779254,144.073736 61.7769254,143.734736 C61.6719254,143.399736 61.5689254,143.067736 61.4599254,142.741736 C61.2469254,142.086736 61.0259254,141.450736 60.8039254,140.829736 C60.3609254,139.590736 59.9149254,138.414736 59.4909254,137.298736 C59.0689254,136.183736 58.6789254,135.124736 58.3269254,134.125736 C57.6209254,132.128736 57.1099254,130.358736 56.7709254,128.877736 C56.6049254,128.137736 56.4859254,127.470736 56.3919254,126.887736 C56.3059254,126.303736 56.2469254,125.804736 56.2049254,125.399736 C56.1909254,125.245736 56.1779254,125.111736 56.1669254,124.985736 L56.3599254,124.978736 C56.4759254,124.974736 56.5879254,124.971736 56.7199254,124.955736 C56.8469254,124.943736 56.9729254,124.929736 57.0989254,124.915736 C57.2259254,124.901736 57.3449254,124.871736 57.4669254,124.851736 C57.9519254,124.764736 58.4239254,124.609736 58.8539254,124.404736 C59.2889254,124.207736 59.6719254,123.939736 60.0009254,123.659736 C60.3329254,123.378736 60.5909254,123.061736 60.8099254,122.765736 C60.9139254,122.612736 61.0079254,122.463736 61.0929254,122.321736 C61.1689254,122.173736 61.2429254,122.035736 61.3069254,121.904736 C61.3659254,121.769736 61.4239254,121.645736 61.4689254,121.528736 C61.5139254,121.410736 61.5499254,121.300736 61.5839254,121.202736 C61.6569254,121.008736 61.6859254,120.845736 61.7179254,120.740736 C61.7439254,120.632736 61.7579254,120.575736 61.7579254,120.575736 C61.7579254,120.575736 61.7229254,120.623736 61.6569254,120.712736 C61.5929254,120.801736 61.5029254,120.935736 61.3799254,121.096736 C61.3179254,121.177736 61.2529254,121.267736 61.1779254,121.363736 C61.0979254,121.454736 61.0199254,121.558736 60.9329254,121.665736 C60.8429254,121.770736 60.7429254,121.877736 60.6409254,121.991736 C60.5319254,122.097736 60.4229254,122.213736 60.3019254,122.326736 C60.1759254,122.431736 60.0579254,122.555736 59.9139254,122.654736 C59.8449254,122.706736 59.7749254,122.760736 59.7039254,122.815736 C59.6289254,122.864736 59.5529254,122.912736 59.4769254,122.963736 C59.1669254,123.154736 58.8299254,123.331736 58.4569254,123.456736 L58.3179254,123.508736 L58.1739254,123.548736 C58.0779254,123.576736 57.9819254,123.606736 57.8839254,123.631736 C57.6829254,123.668736 57.4849254,123.721736 57.2749254,123.744736 C57.1719254,123.757736 57.0669254,123.778736 56.9649254,123.785736 C56.8619254,123.791736 56.7589254,123.800736 56.6569254,123.810736 C56.5589254,123.823736 56.4399254,123.824736 56.3239254,123.826736 L55.9769254,123.834736 L55.6699254,123.826736 C55.5619254,123.824736 55.4529254,123.824736 55.3469254,123.811736 C55.2409254,123.801736 55.1349254,123.793736 55.0279254,123.785736 C54.9219254,123.779736 54.8199254,123.758736 54.7159254,123.744736 C54.5049254,123.721736 54.3079254,123.668736 54.1069254,123.631736 C54.0089254,123.606736 53.9129254,123.576736 53.8159254,123.548736 C53.7189254,123.524736 53.6249254,123.493736 53.5339254,123.456736 C53.1609254,123.330736 52.8229254,123.154736 52.5129254,122.962736 C52.4359254,122.911736 52.3599254,122.863736 52.2849254,122.814736 C52.2149254,122.759736 52.1439254,122.706736 52.0749254,122.653736 C51.9299254,122.554736 51.8139254,122.430736 51.6859254,122.326736 C51.5649254,122.213736 51.4559254,122.097736 51.3459254,121.991736 C51.2449254,121.876736 51.1449254,121.770736 51.0539254,121.665736 C50.9679254,121.558736 50.8889254,121.454736 50.8099254,121.363736 C50.7349254,121.268736 50.6699254,121.178736 50.6089254,121.098736 C50.4869254,120.938736 50.3949254,120.801736 50.3309254,120.712736 C50.2649254,120.623736 50.2309254,120.575736 50.2309254,120.575736 C50.2309254,120.575736 50.2439254,120.632736 50.2709254,120.740736 C50.3019254,120.846736 50.3299254,121.005736 50.4039254,121.200736 C50.4389254,121.297736 50.4749254,121.409736 50.5199254,121.527736 C50.5659254,121.645736 50.6239254,121.767736 50.6829254,121.903736 C50.7469254,122.034736 50.8219254,122.171736 50.8979254,122.320736 C50.9829254,122.462736 51.0779254,122.610736 51.1819254,122.763736 C51.4009254,123.058736 51.6579254,123.376736 51.9899254,123.656736 C52.3189254,123.935736 52.7019254,124.204736 53.1369254,124.401736 C53.5669254,124.607736 54.0389254,124.760736 54.5229254,124.850736 C54.7659254,124.901736 55.0099254,124.933736 55.2569254,124.954736 C55.3799254,124.970736 55.5029254,124.973736 55.6259254,124.977736 L55.8189254,124.985736 C55.8069254,125.110736 55.7949254,125.245736 55.7809254,125.399736 C55.7389254,125.804736 55.6799254,126.303736 55.5939254,126.887736 C55.5009254,127.470736 55.3819254,128.137736 55.2149254,128.877736 C54.8759254,130.358736 54.3649254,132.128736 53.6589254,134.125736 C53.3069254,135.124736 52.9169254,136.183736 52.4949254,137.298736 C52.0709254,138.414736 51.6249254,139.590736 51.1819254,140.829736 C50.9609254,141.450736 50.7389254,142.086736 50.5259254,142.741736 C50.4169254,143.067736 50.3149254,143.399736 50.2089254,143.734736 C50.1079254,144.073736 50.0059254,144.418736 49.9129254,144.755736 C49.5489254,146.114736 49.1039254,147.468736 48.5789254,148.860736 C47.5529254,151.646736 46.2279254,154.503736 44.9009254,157.497736 C44.2279254,158.992736 43.5609254,160.525736 42.9359254,162.109736 C42.3159254,163.694736 41.7159254,165.326736 41.3499254,167.081736 C41.2609254,167.521736 41.1899254,167.969736 41.1479254,168.427736 C41.1269254,168.659736 41.1149254,168.887736 41.1119254,169.125736 C41.1129254,169.246736 41.1109254,169.378736 41.1169254,169.479736 L41.1249254,169.654736 L41.1339254,169.815736 C41.1859254,170.674736 41.2359254,171.535736 41.2679254,172.398736 C41.3289254,174.121736 41.3479254,175.846736 41.1889254,177.555736 C41.0349254,179.263736 40.6689254,180.952736 40.2099254,182.622736 C39.9829254,183.457736 39.7399254,184.290736 39.4949254,185.119736 C39.2419254,185.947736 38.9889254,186.773736 38.7369254,187.594736 C38.2269254,189.238736 37.7199254,190.869736 37.2209254,192.479736 C37.0969254,192.882736 36.9749254,193.284736 36.8519254,193.685736 C36.7269254,194.085736 36.6019254,194.483736 36.4779254,194.881736 C36.3539254,195.278736 36.2319254,195.672736 36.1089254,196.067736 C35.9869254,196.455736 35.8479254,196.839736 35.7069254,197.221736 C35.1469254,198.748736 34.4909254,200.220736 33.9529254,201.725736 C33.6819254,202.481736 33.4409254,203.227736 33.2579254,204.023736 C33.2179254,204.215736 33.1769254,204.406736 33.1359254,204.596736 C33.0999254,204.783736 33.0629254,204.969736 33.0259254,205.155736 C32.9539254,205.528736 32.8809254,205.898736 32.8089254,206.265736 C32.6689254,207.002736 32.5239254,207.730736 32.3979254,208.451736 C32.2739254,209.172736 32.1539254,209.882736 32.0459254,210.586736 C31.9349254,211.290736 31.8509254,211.987736 31.7869254,212.686736 L31.7639254,212.949736 L31.7509254,213.231736 C31.7369254,213.427736 31.7429254,213.586736 31.7429254,213.755736 C31.7449254,213.811736 31.7459254,213.793736 31.7469254,213.817736 L31.7499254,213.857736 C31.7519254,213.884736 31.7529254,213.911736 31.7569254,213.938736 C31.7639254,213.991736 31.7689254,214.044736 31.7799254,214.094736 C31.7969254,214.198736 31.8179254,214.297736 31.8439254,214.391736 C31.8949254,214.580736 31.9569254,214.754736 32.0199254,214.919736 C32.2809254,215.567736 32.5319254,216.108736 32.7079254,216.670736 C32.8859254,217.226736 32.9939254,217.794736 33.0429254,218.347736 C33.0879254,218.914736 33.1019254,219.482736 33.0499254,219.993736 C33.0259254,220.248736 32.9839254,220.493736 32.9159254,220.707736 C32.8469254,220.922736 32.7549254,221.098736 32.6229254,221.255736 C32.4949254,221.416736 32.2879254,221.567736 32.0689254,221.825736 C31.9629254,221.953736 31.8679254,222.109736 31.8049254,222.266736 C31.7429254,222.422736 31.7019254,222.581736 31.6829254,222.729736 C31.6699254,222.803736 31.6669254,222.883736 31.6589254,222.959736 L31.6529254,223.159736 C31.6559254,223.284736 31.6589254,223.408736 31.6619254,223.532736 C31.6719254,223.778736 31.6849254,224.018736 31.7049254,224.253736 C31.7829254,225.195736 31.9339254,226.043736 32.0799254,226.791736 C32.1779254,227.308736 32.2599254,227.782736 32.2859254,228.207736 C32.2859254,228.232736 32.2869254,228.256736 32.2879254,228.281736 C32.2889254,228.405736 32.2899254,228.534736 32.2889254,228.662736 C32.2879254,228.691736 32.2869254,228.720736 32.2849254,228.748736 C32.2479254,229.303736 32.0099254,229.725736 31.7579254,230.021736 C31.5059254,230.321736 31.2579254,230.510736 31.0949254,230.635736 C31.0579254,230.660736 31.0279254,230.682736 30.9989254,230.702736 C30.8409254,230.754736 30.6739254,230.794736 30.4979254,230.821736 C30.1799254,230.869736 29.8449254,230.887736 29.5029254,230.883736 C29.1479254,230.873736 28.7919254,230.865736 28.4349254,230.855736 C28.0849254,230.840736 27.7429254,230.819736 27.4349254,230.759736 C27.1269254,230.700736 26.8609254,230.596736 26.6899254,230.446736 C26.5169254,230.299736 26.4199254,230.084736 26.3719254,229.809736 C26.3459254,229.676736 26.3429254,229.527736 26.3429254,229.378736 L26.3469254,229.264736 L26.3489254,229.221736 L26.3559254,229.158736 C26.3589254,229.107736 26.3649254,229.096736 26.3679254,229.066736 C26.3709254,229.040736 26.3799254,229.005736 26.3849254,228.976736 C26.5039254,228.477736 26.9129254,228.038736 27.3739254,227.734736 C27.8379254,227.420736 28.3629254,227.232736 28.8529254,227.132736 C29.3469254,227.030736 29.8159254,227.043736 30.2089254,227.134736 C30.6029254,227.226736 30.9079254,227.423736 31.1099254,227.641736 C31.3099254,227.860736 31.4129254,228.088736 31.4709254,228.244736 C31.5259254,228.404736 31.5469254,228.493736 31.5469254,228.493736 C31.5469254,228.493736 31.5469254,228.470736 31.5459254,228.426736 C31.5469254,228.381736 31.5429254,228.316736 31.5339254,228.230736 C31.5119254,228.060736 31.4659254,227.798736 31.2879254,227.507736 C31.1989254,227.364736 31.0799254,227.211736 30.9199254,227.077736 C30.7599254,226.944736 30.5659254,226.825736 30.3429254,226.732736 C29.8999254,226.539736 29.3529254,226.473736 28.7709254,226.512736 C28.1889254,226.556736 27.5669254,226.725736 26.9629254,227.051736 C26.7699254,227.156736 26.5829254,227.284736 26.4039254,227.432736 C26.4729254,227.187736 26.5469254,226.959736 26.6209254,226.757736 C26.7139254,226.505736 26.7959254,226.284736 26.8709254,226.104736 C27.0219254,225.742736 27.1089254,225.535736 27.1089254,225.535736 C27.1089254,225.535736 26.9589254,225.702736 26.7209254,226.020736 C26.6069254,226.180736 26.4639254,226.375736 26.3199254,226.612736 C26.1779254,226.850736 26.0189254,227.122736 25.8749254,227.438736 C25.7309254,227.753736 25.5969254,228.110736 25.5029254,228.509736 C25.4099254,228.908736 25.3579254,229.351736 25.4049254,229.823736 C25.4279254,230.057736 25.4809254,230.298736 25.5629254,230.534736 C25.5649254,230.540736 25.5679254,230.547736 25.5699254,230.554736 C25.5549254,230.558736 25.5419254,230.563736 25.5269254,230.567736 C25.4389254,230.592736 25.3439254,230.611736 25.2489254,230.626736 C25.0579254,230.657736 24.8599254,230.672736 24.6639254,230.674736 C24.2699254,230.676736 23.8769254,230.622736 23.5389254,230.497736 C23.4609254,230.470736 23.3499254,230.423736 23.3479254,230.415736 C23.3079254,230.391736 23.2729254,230.356736 23.2399254,230.311736 C23.1739254,230.222736 23.1229254,230.083736 23.1029254,229.926736 C23.0589254,229.610736 23.1169254,229.245736 23.2129254,228.914736 C23.2639254,228.753736 23.3299254,228.557736 23.3879254,228.398736 C23.4479254,228.231736 23.5059254,228.070736 23.5609254,227.914736 C23.7849254,227.286736 23.9709254,226.757736 24.0929254,226.383736 C24.2169254,226.009736 24.2789254,225.790736 24.2789254,225.790736 C24.2789254,225.790736 24.1399254,225.970736 23.9189254,226.297736 C23.8069254,226.459736 23.6729254,226.658736 23.5279254,226.889736 C23.3809254,227.121736 23.2169254,227.383736 23.0479254,227.676736 C22.9619254,227.820736 22.8769254,227.979736 22.7869254,228.141736 C22.6949254,228.310736 22.6209254,228.459736 22.5269254,228.652736 C22.3539254,229.035736 22.2119254,229.475736 22.2279254,229.995736 C22.2379254,230.171736 22.2699254,230.361736 22.3399254,230.550736 C22.3359254,230.552736 22.3329254,230.554736 22.3279254,230.555736 C22.1349254,230.627736 21.8479254,230.653736 21.5109254,230.618736 C21.4269254,230.605736 21.3539254,230.599736 21.2469254,230.578736 L21.1709254,230.567736 L21.1329254,230.561736 C21.1399254,230.561736 21.1179254,230.557736 21.1129254,230.554736 C21.0749254,230.545736 21.0389254,230.534736 21.0039254,230.520736 C20.8629254,230.465736 20.7439254,230.378736 20.6459254,230.258736 C20.5479254,230.138736 20.4699254,229.983736 20.4209254,229.807736 C20.3729254,229.631736 20.3469254,229.437736 20.3579254,229.244736 C20.3599254,229.189736 20.3599254,229.170736 20.3689254,229.096736 C20.3749254,229.054736 20.3799254,229.014736 20.3919254,228.966736 C20.4109254,228.874736 20.4409254,228.774736 20.4769254,228.674736 C20.5479254,228.470736 20.6389254,228.264736 20.7309254,228.061736 C20.9189254,227.657736 21.1149254,227.274736 21.2799254,226.940736 C21.4459254,226.606736 21.5819254,226.320736 21.6739254,226.116736 C21.7669254,225.912736 21.8169254,225.790736 21.8169254,225.790736 C21.8169254,225.790736 21.3719254,226.070736 20.8339254,226.620736 C20.5649254,226.896736 20.2689254,227.235736 19.9949254,227.646736 C19.8569254,227.850736 19.7269254,228.075736 19.6139254,228.327736 C19.5589254,228.453736 19.5059254,228.587736 19.4659254,228.738736 C19.4449254,228.810736 19.4309254,228.893736 19.4179254,228.974736 C19.4099254,229.024736 19.3989254,229.129736 19.3959254,229.199736 C19.3819254,229.503736 19.4209254,229.814736 19.5279254,230.104736 C19.5469254,230.157736 19.5709254,230.209736 19.5949254,230.260736 C19.5539254,230.269736 19.5139254,230.278736 19.4699254,230.284736 C19.3409254,230.302736 19.1999254,230.304736 19.0559254,230.289736 C18.9129254,230.272736 18.7599254,230.233736 18.6189254,230.172736 C18.5789254,230.155736 18.5379254,230.137736 18.4969254,230.119736 C18.4759254,230.106736 18.4309254,230.087736 18.4039254,230.069736 C18.3409254,230.030736 18.2869254,229.988736 18.2429254,229.943736 C18.1599254,229.852736 18.1069254,229.750736 18.0809254,229.602736 C18.0489254,229.457736 18.0559254,229.273736 18.0789254,229.078736 C18.1339254,228.688736 18.2669254,228.265736 18.4059254,227.871736 C18.5469254,227.477736 18.6979254,227.104736 18.8309254,226.782736 C18.9649254,226.459736 19.0789254,226.187736 19.1639254,225.995736 C19.2069254,225.901736 19.2379254,225.824736 19.2639254,225.773736 C19.2899254,225.721736 19.3029254,225.694736 19.3029254,225.694736 C19.3029254,225.694736 19.1899254,225.748736 19.0199254,225.883736 C18.8499254,226.016736 18.6199254,226.221736 18.3789254,226.497736 C18.1359254,226.773736 17.8799254,227.118736 17.6509254,227.524736 C17.5349254,227.727736 17.4299254,227.947736 17.3379254,228.181736 C17.2499254,228.418736 17.1699254,228.668736 17.1299254,228.940736 C17.0859254,229.210736 17.0799254,229.506736 17.1499254,229.813736 C17.1729254,229.910736 17.2089254,230.009736 17.2539254,230.106736 C17.2189254,230.086736 17.1839254,230.069736 17.1459254,230.049736 C16.9089254,229.933736 16.6459254,229.755736 16.3879254,229.541736 C16.1469254,229.310736 15.9419254,229.024736 15.8879254,228.678736 C15.8309254,228.330736 15.9129254,227.916736 16.0839254,227.477736 C16.2549254,227.036736 16.5099254,226.574736 16.7999254,226.099736 C17.0929254,225.626736 17.4329254,225.148736 17.8009254,224.673736 C18.1739254,224.202736 18.5389254,223.703736 18.9249254,223.216736 C19.3089254,222.727736 19.7249254,222.265736 20.1619254,221.833736 C20.3759254,221.610736 20.5879254,221.389736 20.8109254,221.183736 C20.9229254,221.079736 21.0339254,220.978736 21.1489254,220.879736 C21.2569254,220.774736 21.3599254,220.667736 21.4679254,220.565736 C21.6819254,220.359736 21.8999254,220.159736 22.0989254,219.952736 C22.2889254,219.738736 22.4749254,219.526736 22.6419254,219.310736 C22.8169254,219.099736 22.9599254,218.874736 23.0919254,218.654736 C23.2249254,218.434736 23.3569254,218.223736 23.4689254,218.012736 C23.6809254,217.582736 23.8839254,217.197736 24.0109254,216.826736 C24.0799254,216.643736 24.1389254,216.471736 24.1929254,216.312736 C24.2389254,216.145736 24.2809254,215.991736 24.3119254,215.852736 C24.3879254,215.577736 24.4009254,215.363736 24.4139254,215.214736 C24.4239254,215.099736 24.4269254,215.026736 24.4279254,214.999736 C24.4329254,214.992736 24.4399254,214.986736 24.4409254,214.977736 C24.5479254,213.815736 24.6349254,212.651736 24.7259254,211.485736 C24.8219254,210.320736 24.8849254,209.157736 24.9599254,207.992736 L25.0619254,206.244736 C25.0859254,205.657736 25.1149254,205.074736 25.1309254,204.488736 C25.1619254,203.318736 25.1749254,202.147736 25.1739254,200.978736 C25.1749254,199.808736 25.1499254,198.640736 25.1269254,197.471736 C25.1049254,196.303736 25.0629254,195.136736 25.0159254,193.969736 C24.9679254,192.803736 24.9239254,191.637736 24.8629254,190.471736 L24.6659254,186.978736 L24.4479254,183.492736 C24.4139254,182.908736 24.3799254,182.328736 24.3559254,181.756736 C24.3369254,181.180736 24.3209254,180.604736 24.3229254,180.028736 C24.3199254,178.875736 24.3639254,177.722736 24.4369254,176.569736 C24.5079254,175.415736 24.6219254,174.264736 24.7439254,173.110736 L25.1369254,169.636736 C25.1989254,169.053736 25.2569254,168.468736 25.2919254,167.876736 C25.3069254,167.579736 25.3209254,167.282736 25.3189254,166.981736 C25.3199254,166.833736 25.3149254,166.670736 25.3079254,166.525736 L25.2949254,166.306736 L25.2919254,166.114736 C25.3409254,164.976736 25.4599254,163.803736 25.5629254,162.647736 C25.6669254,161.487736 25.8019254,160.328736 25.9279254,159.170736 C25.9309254,159.143736 25.9279254,159.115736 25.9199254,159.087736 L25.9169254,159.078736 C25.9099254,159.058736 25.8939254,159.004736 25.8859254,158.961736 C25.8759254,158.916736 25.8669254,158.869736 25.8599254,158.821736 C25.8429254,158.727736 25.8289254,158.630736 25.8179254,158.532736 C25.7929254,158.337736 25.7779254,158.138736 25.7619254,157.940736 C25.7359254,157.542736 25.7209254,157.143736 25.7159254,156.743736 C25.7079254,155.941736 25.7359254,155.137736 25.7689254,154.335736 C25.8179254,153.533736 25.8669254,152.731736 25.9459254,151.930736 C26.0269254,151.130736 26.1059254,150.330736 26.2019254,149.532736 C26.2909254,148.734736 26.3929254,147.935736 26.4969254,147.135736 L26.8089254,144.747736 C26.9159254,143.952736 27.0259254,143.158736 27.1429254,142.364736 C27.2649254,141.572736 27.3659254,140.777736 27.5039254,139.988736 L27.6919254,138.799736 L27.8959254,137.615736 C28.0269254,136.824736 28.1899254,136.039736 28.3389254,135.251736 C28.4979254,134.466736 28.6489254,133.678736 28.8279254,132.897736 C28.9949254,132.113736 29.1879254,131.334736 29.3649254,130.553736 C29.5579254,129.775736 29.7519254,128.996736 29.9619254,128.221736 C30.0609254,127.832736 30.1659254,127.445736 30.2759254,127.059736 C30.3849254,126.673736 30.4899254,126.285736 30.6069254,125.902736 C30.8249254,125.127736 31.0639254,124.361736 31.3009254,123.591736 C31.5429254,122.827736 31.7909254,122.059736 32.0429254,121.291736 C32.0429254,121.290736 32.0429254,121.290736 32.0429254,121.288736 C32.0429254,121.288736 32.0439254,121.288736 32.0439254,121.287736 C32.0439254,121.287736 32.1149254,121.114736 32.2639254,120.793736 C32.4129254,120.473736 32.6299254,120.002736 32.9059254,119.403736 C33.1819254,118.803736 33.5189254,118.076736 33.8889254,117.234736 C34.2659254,116.396736 34.6749254,115.444736 35.1169254,114.402736 C35.5509254,113.356736 36.0219254,112.224736 36.4819254,111.006736 C36.7119254,110.397736 36.9399254,109.768736 37.1529254,109.105736 C37.2049254,108.937736 37.2569254,108.771736 37.3039254,108.592736 L37.3409254,108.457736 L37.3789254,108.297736 L37.3969254,108.217736 L37.4079254,108.153736 L37.4189254,108.088736 L37.4289254,108.029736 L37.4319254,107.987736 C37.4529254,107.771736 37.4519254,107.600736 37.4559254,107.416736 C37.4569254,107.239736 37.4569254,107.059736 37.4579254,106.877736 C37.4489254,105.452736 37.3919254,103.992736 37.3249254,102.505736 C37.2619254,101.021736 37.1279254,99.514736 36.9949254,98.010736 C36.8579254,96.506736 36.7319254,95.002736 36.6479254,93.521736 C36.5499254,92.039736 36.5119254,90.578736 36.4589254,89.158736 C36.4289254,88.447736 36.3959254,87.747736 36.3189254,87.053736 C36.2739254,86.702736 36.2349254,86.369736 36.1299254,85.987736 C36.0779254,85.825736 36.0269254,85.664736 35.9759254,85.504736 C35.9249254,85.350736 35.8739254,85.196736 35.8229254,85.044736 C35.4159254,83.824736 35.0309254,82.669736 34.6759254,81.604736 C33.9839254,79.459736 33.4069254,77.673736 33.0029254,76.422736 C32.9269254,76.187736 32.8569254,75.971736 32.7929254,75.775736 C33.0799254,74.795736 33.3129254,73.845736 33.5029254,72.940736 C33.7769254,71.565736 33.9549254,70.293736 34.0559254,69.162736 C34.1499254,68.032736 34.1789254,67.043736 34.1709254,66.231736 C34.1609254,65.825736 34.1559254,65.463736 34.1439254,65.149736 C34.1309254,64.928736 34.1169254,64.734736 34.1039254,64.562736 C34.5859254,65.142736 35.1379254,65.704736 35.7659254,66.213736 C36.5439254,66.845736 37.4129254,67.422736 38.3579254,67.886736 C39.2989254,68.360736 40.3089254,68.708736 41.3289254,68.998736 L42.1019254,69.190736 C42.3599254,69.246736 42.6209254,69.289736 42.8799254,69.339736 C43.3959254,69.451736 43.9189254,69.490736 44.4329254,69.559736 C44.9469254,69.613736 45.4639254,69.636736 45.9659254,69.664736 C46.4629254,69.683736 46.9529254,69.700736 47.4349254,69.718736 C48.4039254,69.755736 49.3519254,69.756736 50.2559254,69.700736 C51.1589254,69.647736 52.0249254,69.514736 52.7979254,69.256736 C53.5689254,69.000736 54.2469254,68.591736 54.6779254,68.069736 C55.1309254,67.561736 55.3129254,66.989736 55.4079254,66.541736 C55.5039254,66.086736 55.4959254,65.725736 55.4929254,65.483736 C55.4789254,65.241736 55.4709254,65.111736 55.4709254,65.111736 C55.4709254,65.111736 55.4559254,65.239736 55.4259254,65.479736 C55.4139254,65.598736 55.3799254,65.744736 55.3499254,65.913736 C55.3319254,65.997736 55.3029254,66.086736 55.2789254,66.182736 C55.2589254,66.278736 55.2239254,66.376736 55.1859254,66.480736 C55.0369254,66.888736 54.7949254,67.370736 54.3589254,67.762736 C53.9349254,68.164736 53.3219254,68.445736 52.6139254,68.618736 C52.2589254,68.703736 51.8769254,68.754736 51.4769254,68.787736 C51.0779254,68.819736 50.6609254,68.839736 50.2289254,68.836736 C49.3649254,68.833736 48.4469254,68.764736 47.4889254,68.700736 C47.0089254,68.662736 46.5199254,68.625736 46.0249254,68.588736 C45.7819254,68.565736 45.5389254,68.540736 45.2939254,68.517736 C45.0489254,68.491736 44.8019254,68.481736 44.5579254,68.443736 C44.0699254,68.369736 43.5739254,68.316736 43.0869254,68.210736 C42.8429254,68.161736 42.5959254,68.121736 42.3539254,68.064736 L41.6289254,67.881736 C40.6689254,67.621736 39.7199254,67.308736 38.8439254,66.881736 C37.9679254,66.456736 37.1349254,65.977736 36.3969254,65.415736 C35.6599254,64.853736 34.9939254,64.245736 34.4339254,63.598736 C33.8759254,62.950736 33.4029254,62.287736 33.0159254,61.640736 C32.6339254,60.991736 32.3259254,60.367736 32.0869254,59.797736 C31.8509254,59.226736 31.6719254,58.713736 31.5449254,58.285736 C31.2909254,57.426736 31.2159254,56.912736 31.2159254,56.912736 C31.2159254,56.912736 31.2099254,57.041736 31.2199254,57.285736 C31.2319254,57.527736 31.2519254,57.884736 31.3199254,58.334736 C31.3879254,58.784736 31.4909254,59.330736 31.6709254,59.943736 C31.8469254,60.556736 32.0879254,61.240736 32.4329254,61.953736 C32.7739254,62.666736 33.2089254,63.416736 33.7669254,64.142736 C33.7819254,64.162736 33.7989254,64.182736 33.8149254,64.203736 C33.8099254,64.246736 33.8039254,64.294736 33.7969254,64.345736 C33.7729254,64.559736 33.7429254,64.822736 33.7079254,65.131736 C33.6609254,65.440736 33.6149254,65.794736 33.5609254,66.190736 C33.5379254,66.388736 33.4989254,66.595736 33.4629254,66.813736 C33.4279254,67.031736 33.3919254,67.257736 33.3539254,67.495736 C33.3199254,67.732736 33.2639254,67.976736 33.2169254,68.231736 C33.1689254,68.485736 33.1189254,68.747736 33.0669254,69.020736 C32.8359254,70.102736 32.5579254,71.315736 32.1799254,72.616736 C31.8169254,73.921736 31.3469254,75.310736 30.7889254,76.752736 C30.5199254,77.477736 30.2039254,78.208736 29.8879254,78.952736 C29.7199254,79.324736 29.5509254,79.700736 29.3809254,80.078736 C29.2109254,80.446736 29.0259254,80.825736 28.8419254,81.205736 C28.0899254,82.731736 27.2509254,84.336736 26.5719254,86.062736 C26.2389254,86.927736 25.9339254,87.817736 25.7189254,88.735736 C25.4929254,89.650736 25.3559254,90.590736 25.2759254,91.529736 C25.1939254,92.491736 25.2249254,93.379736 25.1279254,94.283736 C25.0909254,94.735736 25.0359254,95.184736 24.9639254,95.629736 C24.8979254,96.076736 24.8219254,96.519736 24.7259254,96.957736 C24.3589254,98.715736 23.7929254,100.400736 23.0939254,101.961736 C22.4009254,103.526736 21.6129254,104.978736 20.8649254,106.347736 C20.1129254,107.715736 19.4159254,109.012736 18.7399254,110.199736 C18.0559254,111.405736 17.4769254,112.563736 17.0669254,113.638736 C16.6499254,114.710736 16.3939254,115.709736 16.3439254,116.565736 C16.3239254,116.993736 16.3489254,117.381736 16.4159254,117.708736 C16.4729254,117.989736 16.5519254,118.220736 16.6309254,118.410736 C16.5569254,118.330736 16.4789254,118.246736 16.3829254,118.165736 C16.2659254,118.053736 16.1289254,117.946736 15.9819254,117.831736 C15.8289254,117.727736 15.6709254,117.610736 15.4929254,117.512736 C15.3199254,117.407736 15.1319254,117.314736 14.9379254,117.225736 C14.7449254,117.134736 14.5399254,117.063736 14.3369254,116.990736 C14.1279254,116.932736 13.9239254,116.859736 13.7129254,116.823736 C13.5049254,116.778736 13.2989254,116.741736 13.0959254,116.724736 C12.9949254,116.714736 12.8969254,116.704736 12.7999254,116.695736 C12.7029254,116.694736 12.6079254,116.693736 12.5149254,116.691736 C12.3299254,116.688736 12.1559254,116.692736 11.9949254,116.711736 C11.8349254,116.726736 11.6889254,116.743736 11.5609254,116.763736 C11.4319254,116.787736 11.3219254,116.815736 11.2309254,116.836736 C11.0499254,116.879736 10.9479254,116.910736 10.9479254,116.910736 C10.9479254,116.910736 11.0549254,116.930736 11.2379254,116.952736 C11.3299254,116.961736 11.4409254,116.975736 11.5659254,116.985736 C11.6929254,117.002736 11.8329254,117.027736 11.9869254,117.044736 C12.1399254,117.060736 12.3029254,117.094736 12.4759254,117.125736 C12.5619254,117.139736 12.6499254,117.154736 12.7409254,117.169736 C12.8299254,117.190736 12.9209254,117.210736 13.0139254,117.231736 C13.1059254,117.253736 13.2009254,117.267736 13.2959254,117.292736 C13.3889254,117.320736 13.4839254,117.345736 13.5809254,117.369736 C13.7739254,117.413736 13.9629254,117.483736 14.1559254,117.539736 C14.3449254,117.605736 14.5369254,117.668736 14.7199254,117.742736 C14.8129254,117.779736 14.9039254,117.815736 14.9939254,117.850736 C15.0839254,117.887736 15.1699254,117.930736 15.2579254,117.967736 C15.4329254,118.039736 15.5939254,118.126736 15.7529254,118.200736 C15.9059254,118.284736 16.0569254,118.354736 16.1879254,118.433736 C16.3229254,118.508736 16.4419254,118.581736 16.5509254,118.646736 C16.5709254,118.659736 16.5889254,118.670736 16.6069254,118.682736 C16.6299254,118.720736 16.6529254,118.760736 16.6769254,118.804736 C16.7389254,118.932736 16.8189254,119.077736 16.8779254,119.257736 C16.9469254,119.430736 17.0019254,119.631736 17.0499254,119.851736 C17.0969254,120.071736 17.1359254,120.311736 17.1599254,120.570736 C17.1859254,120.827736 17.2009254,121.104736 17.2069254,121.392736 C17.2199254,121.970736 17.1979254,122.598736 17.1889254,123.246736 C17.1859254,123.571736 17.1839254,123.899736 17.2089254,124.237736 C17.2149254,124.326736 17.2289254,124.401736 17.2339254,124.504736 C17.2349254,124.536736 17.2429254,124.615736 17.2509254,124.654736 C17.2599254,124.700736 17.2689254,124.743736 17.2799254,124.785736 C17.3219254,124.952736 17.3729254,125.100736 17.4209254,125.247736 C17.5189254,125.540736 17.6139254,125.816736 17.6859254,126.081736 C17.7589254,126.347736 17.8149254,126.601736 17.8429254,126.838736 C17.9019254,127.312736 17.8409254,127.713736 17.7509254,127.981736 C17.7029254,128.114736 17.6569254,128.216736 17.6209254,128.284736 C17.5929254,128.335736 17.5739254,128.368736 17.5679254,128.381736 C17.5469254,128.391736 17.5369254,128.414736 17.5459254,128.436736 C17.5459254,128.435736 17.5699254,128.490736 17.5869254,128.573736 C17.6059254,128.660736 17.6249254,128.784736 17.6429254,128.945736 C17.6599254,129.107736 17.6799254,129.304736 17.7209254,129.537736 C17.7709254,129.771736 17.7939254,130.037736 18.0169254,130.350736 C18.1939254,130.550736 18.3889254,130.823736 18.5219254,131.134736 C18.5889254,131.290736 18.6449254,131.455736 18.7039254,131.631736 C18.7339254,131.718736 18.7609254,131.810736 18.8029254,131.904736 C18.8209254,131.952736 18.8449254,131.999736 18.8739254,132.051736 C18.8979254,132.096736 18.9509254,132.160736 18.9789254,132.194736 C19.2209254,132.475736 19.4759254,132.753736 19.7459254,133.024736 C20.0129254,133.295736 20.2809254,133.577736 20.5349254,133.850736 C20.5959254,133.918736 20.6609254,133.983736 20.7129254,134.045736 L20.7789254,134.125736 C20.7789254,134.123736 20.7899254,134.140736 20.7809254,134.123736 L20.7909254,134.139736 L20.8109254,134.169736 L20.8519254,134.230736 C20.9349254,134.347736 21.0169254,134.487736 21.0589254,134.612736 C21.1069254,134.742736 21.1199254,134.866736 21.1059254,135.060736 L21.0999254,135.136736 C21.1079254,135.124736 21.0979254,135.157736 21.0929254,135.169736 C21.0989254,135.161736 21.0899254,135.180736 21.0799254,135.186736 C21.0559254,135.209736 20.9959254,135.234736 20.9269254,135.244736 C20.6359254,135.286736 20.2849254,135.199736 19.9819254,135.102736 C19.6719254,135.001736 19.3829254,134.879736 19.1209254,134.755736 C18.5959254,134.506736 18.1729254,134.262736 17.8789254,134.090736 C17.5839254,133.915736 17.4179254,133.811736 17.4179254,133.811736 C17.4129254,133.807736 17.4069254,133.808736 17.4019254,133.807736 C17.1899254,133.473736 16.9699254,133.144736 16.7209254,132.839736 C16.6969254,132.644736 16.6569254,132.453736 16.6099254,132.266736 C16.5509254,132.052736 16.4789254,131.845736 16.3919254,131.644736 C16.3049254,131.444736 16.2039254,131.250736 16.0909254,131.065736 C16.0329254,130.973736 15.9739254,130.882736 15.9109254,130.794736 L15.8159254,130.664736 L15.7659254,130.602736 L15.7519254,130.581736 C15.7529254,130.575736 15.7509254,130.567736 15.7459254,130.560736 L15.7449254,130.559736 L15.7389254,130.551736 C15.7369254,130.550736 15.7369254,130.544736 15.7169254,130.536736 C15.7079254,130.536736 15.7049254,130.530736 15.6839254,130.545736 C15.6759254,130.553736 15.6719254,130.566736 15.6719254,130.573736 L15.6719254,130.578736 L15.6739254,130.596736 L15.6829254,130.640736 L15.7019254,130.721736 L15.7459254,130.875736 L15.8349254,131.179736 C15.8929254,131.380736 15.9479254,131.580736 15.9979254,131.779736 L16.0699254,132.077736 C16.0929254,132.176736 16.1079254,132.278736 16.1289254,132.375736 C16.1699254,132.574736 16.1919254,132.774736 16.2149254,132.971736 L16.2149254,132.975736 C16.2209254,133.026736 16.2399254,133.075736 16.2759254,133.115736 C16.4569254,133.326736 16.6539254,133.528736 16.8509254,133.726736 C17.0509254,133.923736 17.2559254,134.119736 17.4429254,134.325736 C17.5359254,134.428736 17.6269254,134.536736 17.7019254,134.644736 C17.7369254,134.699736 17.7839254,134.768736 17.8259254,134.825736 L17.9499254,134.997736 C18.1149254,135.226736 18.2599254,135.469736 18.3959254,135.716736 C18.5309254,135.964736 18.6689254,136.207736 18.8119254,136.444736 C18.9539254,136.681736 19.0909254,136.919736 19.2129254,137.159736 C19.3409254,137.394736 19.4579254,137.632736 19.5539254,137.862736 C19.5949254,137.975736 19.6499254,138.096736 19.6429254,138.184736 C19.6459254,138.297736 19.6329254,138.424736 19.6079254,138.542736 C19.5599254,138.781736 19.4589254,139.006736 19.3139254,139.119736 C19.1749254,139.231736 18.9629254,139.237736 18.7309254,139.153736 C18.5019254,139.071736 18.2729254,138.930736 18.0569254,138.770736 C17.8399254,138.612736 17.6349254,138.428736 17.4349254,138.238736 C17.0349254,137.858736 16.6629254,137.440736 16.3009254,137.013736 C15.9439254,136.588736 15.5989254,136.152736 15.2579254,135.710736 C15.2319254,135.659736 15.2059254,135.604736 15.1789254,135.551736 C15.0299254,135.255736 14.8749254,134.961736 14.7139254,134.672736 L14.4649254,134.243736 L14.2339254,133.879736 C14.2249254,133.674736 14.2049254,133.468736 14.1729254,133.263736 C14.1559254,133.145736 14.1289254,133.028736 14.0999254,132.911736 C14.0729254,132.795736 14.0389254,132.680736 14.0019254,132.567736 C13.9619254,132.453736 13.9199254,132.342736 13.8729254,132.233736 C13.8239254,132.123736 13.7709254,132.016736 13.7139254,131.913736 C13.6559254,131.810736 13.5889254,131.711736 13.5199254,131.614736 C13.4529254,131.518736 13.3749254,131.424736 13.2969254,131.344736 L13.2939254,131.341736 C13.2859254,131.333736 13.2739254,131.330736 13.2619254,131.334736 C13.2469254,131.341736 13.2399254,131.358736 13.2459254,131.373736 C13.2919254,131.484736 13.3319254,131.586736 13.3699254,131.693736 C13.4069254,131.799736 13.4379254,131.908736 13.4649254,132.015736 C13.4949254,132.122736 13.5189254,132.231736 13.5409254,132.339736 C13.5639254,132.447736 13.5809254,132.555736 13.5969254,132.663736 L13.6169254,132.827736 C13.6239254,132.881736 13.6309254,132.936736 13.6339254,132.991736 C13.6449254,133.100736 13.6489254,133.209736 13.6529254,133.318736 C13.6619254,133.426736 13.6569254,133.536736 13.6589254,133.645736 C13.6599254,133.699736 13.6549254,133.754736 13.6529254,133.808736 L13.6509254,133.972736 C13.6499254,134.019736 13.6609254,134.070736 13.6869254,134.116736 L13.6929254,134.127736 L13.9309254,134.557736 L14.1809254,134.981736 L14.6959254,135.821736 C14.8689254,136.101736 15.0349254,136.383736 15.2159254,136.660736 C15.3949254,136.935736 15.5769254,137.209736 15.7509254,137.490736 C15.9209254,137.772736 16.0739254,138.064736 16.1989254,138.364736 C16.2599254,138.513736 16.3169254,138.668736 16.3589254,138.828736 C16.4039254,138.974736 16.4159254,139.130736 16.4079254,139.282736 C16.3929254,139.588736 16.2879254,139.884736 16.1469254,140.148736 C16.0739254,140.278736 15.9939254,140.403736 15.9029254,140.511736 C15.8099254,140.617736 15.7119254,140.718736 15.6189254,140.762736 C15.5959254,140.774736 15.5759254,140.779736 15.5599254,140.785736 C15.5539254,140.785736 15.5679254,140.787736 15.5509254,140.789736 L15.5239254,140.791736 L15.5189254,140.790736 C15.4869254,140.792736 15.4239254,140.770736 15.3679254,140.747736 C15.2489254,140.694736 15.1219254,140.611736 15.0019254,140.518736 C14.7599254,140.330736 14.5329254,140.104736 14.3149254,139.869736 C13.8799254,139.399736 13.4939254,138.873736 13.1269254,138.335736 C12.6379254,137.605736 12.2049254,136.836736 11.8059254,136.046736 C11.7659254,135.845736 11.7159254,135.655736 11.6549254,135.469736 C11.5849254,135.256736 11.5039254,135.051736 11.4159254,134.850736 C11.3309254,134.648736 11.2349254,134.453736 11.1359254,134.261736 C11.0869254,134.163736 11.0339254,134.070736 10.9819254,133.974736 C10.9389254,133.897736 10.8949254,133.822736 10.8489254,133.744736 C10.8479254,133.653736 10.8469254,133.562736 10.8399254,133.472736 C10.8289254,133.343736 10.8109254,133.216736 10.7899254,133.090736 C10.7459254,132.839736 10.6909254,132.593736 10.6159254,132.355736 C10.5409254,132.117736 10.4599254,131.881736 10.3579254,131.655736 C10.2589254,131.428736 10.1449254,131.203736 10.0109254,130.996736 C9.99992542,130.979736 9.97792542,130.971736 9.95692542,130.977736 C9.93092542,130.984736 9.91592542,131.010736 9.92292542,131.036736 C9.98992542,131.272736 10.0419254,131.502736 10.0869254,131.739736 C10.1289254,131.974736 10.1709254,132.207736 10.1939254,132.443736 C10.2189254,132.677736 10.2409254,132.910736 10.2419254,133.142736 C10.2449254,133.257736 10.2389254,133.371736 10.2349254,133.485736 C10.2299254,133.597736 10.2189254,133.707736 10.2039254,133.817736 C10.1979254,133.858736 10.2029254,133.903736 10.2199254,133.945736 L10.2399254,133.993736 L10.3569254,134.274736 L10.4689254,134.561736 C10.5429254,134.753736 10.6119254,134.945736 10.6779254,135.137736 C10.8069254,135.520736 10.9219254,135.908736 10.9749254,136.270736 C10.9789254,136.294736 10.9849254,136.321736 10.9939254,136.346736 L10.9979254,136.356736 C11.1539254,136.796736 11.3209254,137.235736 11.5019254,137.665736 L11.7809254,138.309736 C11.8699254,138.522736 11.9729254,138.737736 12.0389254,138.920736 C12.0929254,139.085736 12.1009254,139.293736 12.0699254,139.495736 C12.0349254,139.700736 11.9649254,139.905736 11.8619254,140.092736 C11.7569254,140.276736 11.6169254,140.447736 11.4489254,140.551736 C11.3659254,140.603736 11.2759254,140.633736 11.1939254,140.636736 C11.0739254,140.637736 10.9659254,140.635736 10.8599254,140.623736 C10.4409254,140.603736 10.2199254,140.168736 10.0149254,139.760736 C9.80992542,139.346736 9.63292542,138.910736 9.45492542,138.477736 L8.92392542,137.167736 L8.40592542,135.863736 C8.23392542,135.432736 8.05892542,135.004736 7.91792542,134.577736 C7.84592542,134.362736 7.78092542,134.149736 7.73092542,133.943736 C7.70492542,133.839736 7.68292542,133.737736 7.67092542,133.643736 L7.65992542,133.571736 L7.64892542,133.483736 L7.62692542,133.308736 C7.56792542,132.842736 7.49992542,132.377736 7.42692542,131.914736 C7.35092542,131.452736 7.27592542,130.989736 7.18392542,130.527736 L6.89392542,129.141736 L6.59292542,127.819736 C6.57692542,127.634736 6.60092542,127.395736 6.61892542,127.169736 C6.63792542,126.940736 6.66592542,126.708736 6.69292542,126.475736 C6.71992542,126.215736 6.75392542,125.955736 6.78092542,125.695736 C6.92992542,125.444736 7.07392542,125.201736 7.22392542,125.037736 C7.24292542,125.016736 7.26092542,124.996736 7.27792542,124.981736 C7.28792542,124.971736 7.29092542,124.968736 7.29392542,124.963736 C7.29092542,124.961736 7.32792542,124.942736 7.31992542,124.943736 C7.37592542,124.909736 7.42992542,124.874736 7.48392542,124.842736 C7.59092542,124.779736 7.68992542,124.713736 7.78592542,124.660736 C7.83192542,124.634736 7.88392542,124.610736 7.92192542,124.590736 C7.94292542,124.580736 7.95992542,124.568736 7.98792542,124.563736 L8.02592542,124.551736 C8.02792542,124.546736 8.04592542,124.554736 8.05492542,124.554736 C8.09292542,124.562736 8.12492542,124.568736 8.15992542,124.574736 C8.16192542,124.576736 8.16292542,124.576736 8.16492542,124.577736 C8.21692542,124.599736 8.30092542,124.630736 8.40292542,124.658736 C8.60792542,124.717736 8.90692542,124.759736 9.26892542,124.779736 C9.63092542,124.798736 10.0559254,124.789736 10.5089254,124.727736 C10.7349254,124.698736 10.9689254,124.658736 11.2039254,124.596736 C11.4399254,124.540736 11.6749254,124.461736 11.9089254,124.374736 C12.1409254,124.281736 12.3749254,124.184736 12.5969254,124.061736 C12.8209254,123.941736 13.0319254,123.797736 13.2129254,123.625736 C13.3009254,123.538736 13.3869254,123.451736 13.4579254,123.352736 C13.5349254,123.261736 13.5949254,123.157736 13.6539254,123.059736 C13.7139254,122.961736 13.7549254,122.856736 13.8019254,122.759736 C13.8399254,122.658736 13.8709254,122.559736 13.8999254,122.464736 C13.9459254,122.270736 13.9699254,122.093736 13.9729254,121.935736 C13.9819254,121.779736 13.9589254,121.642736 13.9489254,121.533736 C13.9069254,121.314736 13.8659254,121.196736 13.8659254,121.196736 C13.8619254,121.186736 13.8539254,121.177736 13.8429254,121.172736 C13.8219254,121.163736 13.7979254,121.173736 13.7889254,121.194736 L13.7879254,121.196736 C13.7879254,121.196736 13.7389254,121.315736 13.6739254,121.506736 C13.6539254,121.553736 13.6319254,121.606736 13.6079254,121.661736 C13.5869254,121.718736 13.5649254,121.778736 13.5319254,121.838736 C13.4979254,121.899736 13.4759254,121.965736 13.4399254,122.031736 C13.4009254,122.095736 13.3629254,122.161736 13.3249254,122.231736 C13.2819254,122.297736 13.2369254,122.366736 13.1899254,122.436736 C13.1369254,122.502736 13.0899254,122.574736 13.0319254,122.641736 C12.9169254,122.774736 12.7979254,122.914736 12.6549254,123.045736 C12.5189254,123.184736 12.3679254,123.321736 12.2029254,123.454736 C12.0389254,123.588736 11.8499254,123.705736 11.6559254,123.811736 C11.4579254,123.910736 11.2549254,124.006736 11.0449254,124.080736 C10.8369254,124.158736 10.6269254,124.226736 10.4199254,124.283736 C10.2129254,124.341736 10.0089254,124.382736 9.81492542,124.421736 C9.61992542,124.457736 9.43492542,124.487736 9.26192542,124.503736 C9.01492542,124.531736 8.79792542,124.536736 8.61892542,124.533736 C8.53692542,124.520736 8.44892542,124.504736 8.34992542,124.488736 C8.26092542,124.469736 8.16792542,124.449736 8.06692542,124.428736 C7.95792542,124.401736 7.82492542,124.409736 7.70892542,124.428736 C7.58892542,124.447736 7.46692542,124.472736 7.34292542,124.505736 C7.28092542,124.522736 7.21792542,124.538736 7.15292542,124.556736 C7.11592542,124.572736 7.12192542,124.565736 7.09092542,124.580736 C7.06592542,124.593736 7.04092542,124.607736 7.02392542,124.617736 C6.98492542,124.639736 6.94992542,124.661736 6.91792542,124.686736 C6.66492542,124.883736 6.46192542,125.111736 6.25592542,125.369736 C6.05492542,125.627736 5.84692542,125.903736 5.65492542,126.211736 C5.55692542,126.363736 5.45992542,126.521736 5.36292542,126.683736 C5.31992542,126.751736 5.26492542,126.846736 5.21792542,126.914736 C5.17292542,126.987736 5.12492542,127.063736 5.07192542,127.140736 C4.65992542,127.754736 4.11992542,128.363736 3.53092542,128.984736 C3.23192542,129.290736 2.91492542,129.597736 2.56692542,129.873736 C2.39292542,130.011736 2.20992542,130.141736 2.01792542,130.247736 C1.82992542,130.354736 1.61892542,130.434736 1.43992542,130.445736 L1.25692542,130.445736 C1.20092542,130.441736 1.14492542,130.440736 1.08792542,130.434736 C0.972925423,130.423736 0.859925423,130.406736 0.752925423,130.378736 C0.538925423,130.325736 0.349925423,130.209736 0.307925423,130.032736 C0.253925423,129.851736 0.336925423,129.619736 0.442925423,129.411736 C0.550925423,129.199736 0.696925423,128.998736 0.852925423,128.803736 L0.974925423,128.650736 L1.09192542,128.496736 C1.17192542,128.383736 1.24792542,128.268736 1.31492542,128.157736 C1.44992542,127.929736 1.58392542,127.702736 1.70792542,127.472736 C1.95892542,127.013736 2.19492542,126.547736 2.44092542,126.104736 C2.55892542,125.883736 2.68992542,125.662736 2.81392542,125.494736 L2.85792542,125.444736 L2.92592542,125.361736 C2.94092542,125.345736 2.98092542,125.284736 3.00692542,125.242736 C3.03692542,125.194736 3.04692542,125.171736 3.06892542,125.134736 C3.13992542,125.001736 3.20092542,124.877736 3.25392542,124.752736 C3.46892542,124.258736 3.64792542,123.775736 3.82892542,123.295736 C4.00592542,122.819736 4.18092542,122.346736 4.35392542,121.879736 C4.52692542,121.417736 4.69692542,120.959736 4.87892542,120.544736 C4.97092542,120.338736 5.06492542,120.144736 5.15992542,120.030736 C5.16892542,120.020736 5.17592542,120.012736 5.18592542,120.000736 L5.23392542,119.952736 C5.26892542,119.919736 5.30492542,119.886736 5.34492542,119.852736 C5.42292542,119.785736 5.50992542,119.719736 5.59692542,119.651736 C5.94792542,119.378736 6.33192542,119.129736 6.69492542,118.868736 C7.05892542,118.608736 7.41892542,118.352736 7.75092542,118.070736 C7.91692542,117.928736 8.08092542,117.785736 8.22892542,117.621736 C8.30292542,117.539736 8.37492542,117.455736 8.44092542,117.358736 L8.46592542,117.323736 L8.49392542,117.278736 L8.49692542,117.269736 L8.50592542,117.246736 C8.52392542,117.201736 8.53892542,117.142736 8.54192542,117.126736 L8.57392542,116.978736 C8.73192542,116.207736 8.85692542,115.510736 8.97192542,114.886736 C9.03492542,114.541736 9.09192542,114.223736 9.14492542,113.932736 C9.23292542,113.510736 9.32592542,113.054736 9.42592542,112.559736 C9.71992542,111.094736 10.0599254,109.311736 10.4109254,107.258736 C10.5869254,106.232736 10.7749254,105.139736 10.9489254,103.983736 C11.1299254,102.830736 11.3019254,101.600736 11.4789254,100.350736 C11.6589254,99.109736 11.9499254,97.829736 12.3239254,96.526736 C12.6969254,95.220736 13.1519254,93.887736 13.6779254,92.534736 C13.9389254,91.856736 14.2189254,91.174736 14.5049254,90.483736 C14.7939254,89.790736 15.0859254,89.090736 15.3819254,88.381736 C15.9799254,86.962736 16.6039254,85.508736 17.1169254,83.953736 C17.3739254,83.174736 17.6009254,82.382736 17.7429254,81.519736 C17.7839254,81.293736 17.8039254,81.096736 17.8269254,80.893736 L17.8369254,80.802736 L17.8429254,80.726736 L17.8549254,80.573736 L17.8799254,80.265736 C17.9099254,79.855736 17.9479254,79.445736 17.9729254,79.032736 C18.0889254,77.381736 18.1729254,75.712736 18.2399254,74.034736 C18.3879254,70.679736 18.4889254,67.284736 19.0079254,63.928736 C19.1389254,63.091736 19.2869254,62.255736 19.4639254,61.430736 C19.5429254,61.015736 19.6439254,60.601736 19.7429254,60.186736 C19.8419254,59.770736 19.9349254,59.362736 20.0429254,58.947736 C20.4619254,57.285736 20.6829254,55.588736 20.8669254,53.919736 C20.9559254,53.083736 21.0449254,52.250736 21.1339254,51.422736 C21.1769254,51.010736 21.2139254,50.591736 21.2689254,50.190736 C21.3269254,49.787736 21.4059254,49.389736 21.5099254,49.000736 C21.9039254,47.433736 22.7329254,46.021736 23.8179254,44.922736 C24.9039254,43.820736 26.2439254,43.028736 27.6449254,42.572736 C27.9969254,42.459736 28.3509254,42.365736 28.7069254,42.291736 C28.8809254,42.259736 29.0499254,42.225736 29.2429254,42.200736 C29.4309254,42.171736 29.6189254,42.141736 29.8059254,42.112736 C30.5699254,41.987736 31.3279254,41.795736 32.0439254,41.544736 C32.7599254,41.292736 33.4219254,40.998736 34.0769254,40.741736 C34.7339254,40.480736 35.3789254,40.233736 36.0219254,40.007736 C37.3069254,39.551736 38.5729254,39.176736 39.7969254,38.837736 C40.4139254,38.668736 41.0179254,38.502736 41.6099254,38.340736 C42.2039254,38.174736 42.7839254,38.003736 43.3469254,37.819736 C43.9099254,37.634736 44.4569254,37.436736 44.9809254,37.198736 C45.2419254,37.079736 45.4999254,36.951736 45.7489254,36.798736 C45.9959254,36.646736 46.2389254,36.475736 46.4549254,36.247736 C46.6699254,36.023736 46.8449254,35.721736 46.9139254,35.414736 C46.9529254,35.254736 46.9639254,35.116736 46.9719254,34.991736 C46.9799254,34.861736 46.9939254,34.733736 46.9949254,34.608736 C47.0109254,34.105736 46.9919254,33.630736 46.9699254,33.174736 C46.9209254,32.265736 46.8339254,31.439736 46.7409254,30.695736 C46.5569254,29.206736 46.3639254,28.047736 46.2319254,27.257736 C46.0939254,26.468736 46.0209254,26.047736 46.0209254,26.047736 C46.0159254,26.019736 45.9889254,25.997736 45.9589254,26 C45.9269254,26.003736 45.9039254,26.031736 45.9059254,26.063736 C45.9059254,26.063736 45.9399254,26.488736 46.0029254,27.286736 C46.0659254,28.083736 46.1649254,29.252736 46.2539254,30.739736 C46.2929254,31.481736 46.3359254,32.303736 46.3389254,33.193736 C46.3359254,33.636736 46.3299254,34.098736 46.2889254,34.567736 C46.2809254,34.684736 46.2629254,34.798736 46.2519254,34.916736 C46.2409254,35.035736 46.2239254,35.147736 46.1989254,35.230736 C46.1469254,35.413736 46.0509254,35.564736 45.9029254,35.711736 C45.6009254,36.003736 45.1359254,36.235736 44.6509254,36.433736 C44.1589254,36.631736 43.6299254,36.804736 43.0809254,36.971736 C42.5309254,37.135736 41.9599254,37.288736 41.3699254,37.436736 C40.7759254,37.582736 40.1679254,37.733736 39.5479254,37.887736 C38.3009254,38.216736 37.0049254,38.583736 35.6829254,39.033736 C35.0199254,39.251736 34.3559254,39.509736 33.6899254,39.780736 C33.0229254,40.049736 32.3599254,40.338736 31.6979254,40.586736 C31.0349254,40.837736 30.3529254,41.030736 29.6349254,41.166736 C29.4509254,41.203736 29.2669254,41.238736 29.0829254,41.273736 C28.9019254,41.306736 28.7009254,41.354736 28.5029254,41.401736 C28.1159254,41.500736 27.7349254,41.621736 27.3599254,41.761736 C25.8609254,42.330736 24.4579254,43.253736 23.3559254,44.490736 C22.2469254,45.720736 21.4779254,47.264736 21.1019254,48.899736 C20.9009254,49.716736 20.8449254,50.565736 20.7669254,51.387736 C20.6919254,52.215736 20.6139254,53.047736 20.5179254,53.879736 C20.4659254,54.295736 20.4149254,54.711736 20.3629254,55.129736 C20.3039254,55.544736 20.2429254,55.960736 20.1779254,56.375736 C20.0359254,57.205736 19.8519254,58.025736 19.6319254,58.840736 C19.5159254,59.249736 19.4009254,59.659736 19.2869254,60.069736 C19.1719254,60.479736 19.0549254,60.888736 18.9569254,61.308736 C18.7429254,62.141736 18.5609254,62.979736 18.3949254,63.822736 C18.0599254,65.506736 17.8169254,67.209736 17.6349254,68.909736 C17.4559254,70.609736 17.3349254,72.304736 17.2259254,73.979736 C17.1139254,75.655736 17.0139254,77.313736 16.8679254,78.945736 C16.8359254,79.354736 16.7909254,79.759736 16.7539254,80.164736 L16.7239254,80.468736 L16.7099254,80.619736 L16.7019254,80.695736 L16.6949254,80.756736 C16.6679254,80.957736 16.6429254,81.164736 16.6069254,81.338736 C16.4719254,82.077736 16.2449254,82.838736 15.9879254,83.571736 C14.9229254,86.518736 13.5529254,89.323736 12.5429254,92.104736 C12.0279254,93.492736 11.5739254,94.866736 11.2159254,96.221736 C10.8639254,97.578736 10.5969254,98.912736 10.4429254,100.209736 C10.3609254,100.858736 10.3069254,101.473736 10.2399254,102.084736 C10.1719254,102.690736 10.1049254,103.283736 10.0399254,103.861736 C9.90092542,105.017736 9.76992542,106.114736 9.64692542,107.144736 C9.38192542,109.205736 9.15092542,111.002736 8.96192542,112.483736 C8.95892542,112.503736 8.95692542,112.522736 8.95392542,112.541736 C8.91792542,112.729736 8.87692542,112.947736 8.82892542,113.196736 C8.74292542,113.641736 8.63892542,114.181736 8.51992542,114.801736 C8.39892542,115.420736 8.26592542,116.123736 8.10392542,116.875736 L8.07192542,117.012736 C8.06492542,117.045736 8.06592542,117.034736 8.07092542,117.035736 L8.05892542,117.048736 C8.00092542,117.106736 7.92992542,117.162736 7.85592542,117.218736 C7.70592542,117.327736 7.54392542,117.438736 7.36992542,117.541736 C7.02192542,117.748736 6.64792542,117.956736 6.25792542,118.168736 C5.86492542,118.380736 5.46592542,118.606736 5.04892542,118.868736 C4.94392542,118.934736 4.84092542,119.006736 4.73392542,119.086736 C4.68092542,119.125736 4.62692542,119.168736 4.57292542,119.213736 L4.48992542,119.287736 L4.39192542,119.387736 L4.36092542,119.421736 L4.34492542,119.438736 L4.33792542,119.447736 L4.31692542,119.473736 L4.24592542,119.571736 C4.20392542,119.635736 4.16292542,119.698736 4.13092542,119.757736 C4.05992542,119.879736 4.00192542,119.996736 3.94492542,120.115736 C3.51192542,121.048736 3.23092542,122.010736 2.91892542,122.983736 C2.76692542,123.467736 2.61592542,123.960736 2.44592542,124.423736 C2.40292542,124.538736 2.35992542,124.652736 2.31492542,124.750736 L2.28592542,124.813736 C2.27792542,124.826736 2.28892542,124.823736 2.26292542,124.857736 L2.24892542,124.877736 L2.24192542,124.887736 C2.22492542,124.910736 2.25892542,124.869736 2.25192542,124.877736 L2.21392542,124.929736 L2.13992542,125.034736 C1.97592542,125.295736 1.87992542,125.543736 1.77592542,125.790736 C1.58092542,126.285736 1.42092542,126.779736 1.23892542,127.257736 C1.14992542,127.496736 1.05792542,127.734736 0.950925423,127.959736 C0.897925423,128.075736 0.842925423,128.180736 0.787925423,128.285736 C0.756925423,128.338736 0.719925423,128.393736 0.685925423,128.446736 L0.578925423,128.601736 C0.432925423,128.817736 0.291925423,129.037736 0.172925423,129.277736 C0.114925423,129.398736 0.0639254228,129.525736 0.0319254228,129.662736 C0,129.799736 -0.0160745772,129.952736 0.0229254228,130.106736 C0.0589254228,130.261736 0.160925423,130.400736 0.276925423,130.493736 C0.394925423,130.586736 0.523925423,130.646736 0.650925423,130.696736 C0.779925423,130.742736 0.907925423,130.773736 1.03592542,130.797736 C1.09992542,130.810736 1.16592542,130.819736 1.23092542,130.828736 L1.41292542,130.854736 C1.72192542,130.881736 1.98092542,130.801736 2.22692542,130.718736 C2.47192542,130.630736 2.69792542,130.519736 2.91392542,130.399736 C3.34592542,130.159736 3.73492542,129.878736 4.08592542,129.576736 C4.79492542,128.977736 5.33892542,128.280736 5.76892542,127.586736 C5.82192542,127.500736 5.87492542,127.412736 5.92592542,127.322736 C5.97792542,127.227736 6.01092542,127.156736 6.05992542,127.061736 C6.07492542,127.030736 6.08992542,127.001736 6.10492542,126.971736 C6.09492542,127.004736 6.08492542,127.037736 6.07492542,127.073736 C6.01292542,127.310736 5.95592542,127.534736 5.93292542,127.820736 C5.92592542,127.903736 5.93792542,128.006736 5.94192542,128.053736 L5.95692542,128.228736 L5.99192542,128.578736 L6.06392542,129.278736 L6.22892542,130.671736 L6.40592542,132.067736 C6.46992542,132.532736 6.53992542,132.996736 6.61792542,133.459736 L6.64892542,133.633736 L6.66292542,133.719736 L6.68392542,133.820736 C6.71092542,133.957736 6.74592542,134.081736 6.78292542,134.204736 C6.85792542,134.451736 6.94492542,134.681736 7.04092542,134.907736 C7.22792542,135.358736 7.43492542,135.787736 7.65592542,136.209736 C7.87192542,136.632736 8.11992542,137.037736 8.35392542,137.445736 L9.04292542,138.673736 L9.72292542,139.916736 C9.84392542,140.122736 9.96492542,140.330736 10.1289254,140.528736 C10.2129254,140.624736 10.3119254,140.721736 10.4349254,140.790736 C10.5579254,140.860736 10.6949254,140.894736 10.8219254,140.911736 C10.9479254,140.929736 11.0759254,140.932736 11.1899254,140.934736 C11.3429254,140.936736 11.4839254,140.890736 11.6039254,140.826736 C11.8449254,140.697736 12.0269254,140.506736 12.1809254,140.302736 C12.3359254,140.096736 12.4579254,139.867736 12.5409254,139.617736 C12.6249254,139.366736 12.6719254,139.094736 12.6349254,138.797736 C12.5899254,138.526736 12.5319254,138.299736 12.4699254,138.068736 C12.4539254,138.009736 12.4379254,137.951736 12.4209254,137.891736 C12.5399254,138.114736 12.6609254,138.332736 12.7899254,138.549736 C13.1309254,139.124736 13.5159254,139.674736 13.9559254,140.190736 C14.1759254,140.448736 14.4179254,140.691736 14.6929254,140.913736 C14.8309254,141.024736 14.9779254,141.127736 15.1579254,141.213736 C15.2539254,141.252736 15.3479254,141.294736 15.4819254,141.304736 L15.5059254,141.306736 L15.5419254,141.306736 L15.5729254,141.305736 C15.5959254,141.305736 15.6509254,141.297736 15.6859254,141.289736 C15.7489254,141.274736 15.8059254,141.250736 15.8569254,141.224736 C16.0569254,141.114736 16.1929254,140.971736 16.3009254,140.817736 C16.4099254,140.662736 16.4939254,140.499736 16.5559254,140.328736 C16.6789254,139.990736 16.7239254,139.625736 16.6859254,139.272736 C16.6659254,139.095736 16.6249254,138.922736 16.5569254,138.757736 C16.4889254,138.607736 16.4329254,138.452736 16.3619254,138.298736 C16.2349254,137.989736 16.1009254,137.688736 15.9819254,137.375736 C15.8599254,137.067736 15.7399254,136.754736 15.6089254,136.450736 C15.5739254,136.367736 15.5349254,136.286736 15.4969254,136.206736 C15.6989254,136.526736 15.9049254,136.842736 16.1239254,137.151736 C16.4499254,137.613736 16.7989254,138.061736 17.1839254,138.485736 C17.3789254,138.695736 17.5819254,138.899736 17.8069254,139.086736 C18.0309254,139.275736 18.2759254,139.452736 18.5719254,139.574736 C18.7179254,139.633736 18.8849254,139.678736 19.0659254,139.680736 C19.2459254,139.681736 19.4439254,139.627736 19.5999254,139.517736 C19.9129254,139.290736 20.0449254,138.960736 20.1209254,138.659736 C20.1579254,138.502736 20.1809254,138.349736 20.1839254,138.181736 C20.1809254,137.987736 20.1539254,137.834736 20.1129254,137.680736 C20.0329254,137.374736 19.8939254,137.108736 19.7459254,136.855736 C19.5909254,136.606736 19.4219254,136.372736 19.2459254,136.145736 C19.0709254,135.919736 18.8769254,135.707736 18.6739254,135.507736 C18.4719254,135.305736 18.2709254,135.106736 18.0939254,134.887736 C18.0509254,134.832736 18.0079254,134.779736 17.9679254,134.722736 C17.9259254,134.666736 17.8989254,134.616736 17.8629254,134.549736 C17.7899254,134.416736 17.7119254,134.300736 17.6349254,134.179736 C17.5939254,134.114736 17.5529254,134.047736 17.5109254,133.982736 C17.5829254,134.036736 17.6799254,134.111736 17.8029254,134.203736 C18.0799254,134.408736 18.4799254,134.696736 18.9949254,134.995736 C19.2529254,135.145736 19.5399254,135.296736 19.8609254,135.431736 C20.0219254,135.496736 20.1929254,135.557736 20.3759254,135.604736 C20.5599254,135.648736 20.7539254,135.687736 20.9799254,135.668736 C21.0909254,135.657736 21.2179254,135.633736 21.3449254,135.545736 C21.4099254,135.497736 21.4639254,135.451736 21.5129254,135.349736 C21.5399254,135.289736 21.5279254,135.312736 21.5519254,135.251736 L21.5829254,135.193736 C21.6779254,135.026736 21.7599254,134.763736 21.7439254,134.509736 C21.7249254,134.253736 21.6559254,134.027736 21.5419254,133.809736 L21.5069254,133.744736 L21.4889254,133.712736 L21.4799254,133.696736 L21.4599254,133.664736 C21.4199254,133.605736 21.3839254,133.556736 21.3469254,133.513736 C21.2729254,133.426736 21.2039254,133.348736 21.1299254,133.275736 C20.8359254,132.987736 20.5279254,132.738736 20.2209254,132.494736 C19.9179254,132.249736 19.5979254,132.032736 19.2789254,131.839736 C19.1629254,131.791736 19.0439254,131.658736 18.9539254,131.514736 C18.8639254,131.369736 18.7959254,131.210736 18.7469254,131.051736 C18.6419254,130.734736 18.6519254,130.393736 18.5469254,130.077736 C18.5319254,129.972736 18.5059254,129.842736 18.4719254,129.721736 C18.4369254,129.599736 18.3959254,129.479736 18.3549254,129.365736 C18.2719254,129.137736 18.1729254,128.936736 18.0629254,128.779736 C17.9549254,128.621736 17.8409254,128.508736 17.7479254,128.450736 C17.7049254,128.421736 17.6609254,128.399736 17.6369254,128.392736 C17.6119254,128.383736 17.5999254,128.379736 17.5999254,128.379736 L17.5969254,128.379736 C17.5889254,128.376736 17.5789254,128.377736 17.5699254,128.380736 C17.5789254,128.368736 17.6019254,128.339736 17.6369254,128.294736 C17.6849254,128.233736 17.7479254,128.139736 17.8159254,128.009736 C17.8819254,127.878736 17.9489254,127.712736 17.9979254,127.512736 C18.0449254,127.312736 18.0739254,127.078736 18.0739254,126.826736 C18.0759254,126.572736 18.0549254,126.297736 18.0079254,126.012736 C17.9629254,125.728736 17.8979254,125.432736 17.8279254,125.134736 C17.7959254,124.985736 17.7609254,124.834736 17.7399254,124.692736 C17.7349254,124.656736 17.7299254,124.620736 17.7279254,124.587736 C17.7259254,124.549736 17.7239254,124.546736 17.7249254,124.498736 C17.7279254,124.443736 17.7579254,124.358736 17.7759254,124.285736 C17.8579254,123.983736 17.9419254,123.660736 18.0079254,123.334736 C18.1399254,122.681736 18.2049254,121.998736 18.1609254,121.348736 C18.1389254,121.024736 18.0909254,120.707736 18.0139254,120.412736 C17.9369254,120.118736 17.8349254,119.842736 17.7079254,119.604736 C17.5209254,119.233736 17.2779254,118.961736 17.0609254,118.776736 C17.0379254,118.678736 17.0099254,118.556736 16.9839254,118.409736 C16.9029254,117.998736 16.8659254,117.398736 17.0429254,116.661736 C17.2109254,115.924736 17.5729254,115.053736 18.0669254,114.083736 C18.5679254,113.114736 19.1929254,112.048736 19.9099254,110.884736 C20.6299254,109.698736 21.3749254,108.380736 22.0219254,106.919736 C22.6739254,105.460736 23.2429254,103.870736 23.7599254,102.212736 C24.2719254,100.551736 24.7689254,98.833736 25.1949254,97.063736 C25.2989254,96.619736 25.4049254,96.175736 25.4969254,95.725736 C25.5459254,95.500736 25.5899254,95.275736 25.6309254,95.048736 C25.6779254,94.823736 25.7209254,94.596736 25.7599254,94.368736 C25.8019254,94.140736 25.8379254,93.911736 25.8729254,93.681736 C25.9119254,93.453736 25.9439254,93.222736 25.9759254,92.992736 L26.0719254,92.311736 C26.1099254,92.087736 26.1429254,91.874736 26.1879254,91.653736 C26.5329254,89.891736 27.1369254,88.208736 27.8589254,86.604736 C28.5809254,84.995736 29.4629254,83.480736 30.2839254,81.944736 C30.4909254,81.559736 30.6869254,81.175736 30.8769254,80.776736 C30.9679254,80.584736 31.0569254,80.394736 31.1469254,80.204736 C31.2339254,80.007736 31.3209254,79.811736 31.4069254,79.616736 C31.7419254,78.837736 32.0429254,78.068736 32.3039254,77.307736 C32.3849254,77.072736 32.4619254,76.838736 32.5369254,76.606736 C32.5879254,76.915736 32.6509254,77.252736 32.7219254,77.618736 C32.7599254,77.814736 32.7999254,78.018736 32.8409254,78.229736 C32.8869254,78.440736 32.9349254,78.659736 32.9839254,78.883736 C33.1809254,79.785736 33.4259254,80.797736 33.7339254,81.891736 C34.0469254,82.983736 34.4029254,84.163736 34.8649254,85.384736 C34.9829254,85.683736 35.1029254,85.987736 35.2239254,86.293736 C35.3199254,86.545736 35.3999254,86.875736 35.4699254,87.194736 C35.6119254,87.841736 35.7339254,88.524736 35.8449254,89.217736 C36.0629254,90.609736 36.2249254,92.061736 36.2969254,93.540736 C36.3809254,95.020736 36.3919254,96.527736 36.3689254,98.034736 C36.3489254,99.540736 36.3059254,101.047736 36.3079254,102.528736 C36.3019254,104.007736 36.2939254,105.467736 36.2599254,106.864736 C36.2529254,107.037736 36.2469254,107.209736 36.2409254,107.381736 C36.2329254,107.547736 36.2219254,107.725736 36.2079254,107.855736 L36.2069254,107.866736 L36.2039254,107.881736 L36.1929254,107.945736 L36.1799254,108.008736 L36.1679254,108.053736 L36.1439254,108.145736 L36.1109254,108.258736 C36.0689254,108.411736 36.0159254,108.570736 35.9669254,108.727736 C35.7629254,109.358736 35.5449254,109.983736 35.3349254,110.590736 C34.9129254,111.812736 34.5149254,112.967736 34.1469254,114.033736 C33.7869254,115.103736 33.4539254,116.085736 33.1749254,116.961736 C32.8889254,117.835736 32.6559254,118.603736 32.4679254,119.238736 C32.2799254,119.872736 32.1429254,120.375736 32.0559254,120.721736 C31.9719254,121.057736 31.9349254,121.242736 31.9339254,121.252736 L31.4359254,122.352736 L30.9639254,123.469736 C30.6579254,124.217736 30.3659254,124.971736 30.0849254,125.730736 C29.9429254,126.108736 29.8139254,126.492736 29.6799254,126.873736 C29.5459254,127.255736 29.4159254,127.638736 29.2919254,128.023736 C29.0369254,128.791736 28.8109254,129.568736 28.5779254,130.344736 C28.3589254,131.122736 28.1369254,131.902736 27.9469254,132.690736 C27.7429254,133.472736 27.5659254,134.262736 27.3809254,135.051736 L27.1339254,136.241736 C27.0499254,136.636736 26.9709254,137.034736 26.8989254,137.432736 L26.6749254,138.625736 C26.6079254,139.025736 26.5389254,139.423736 26.4779254,139.824736 C26.3449254,140.622736 26.2429254,141.425736 26.1309254,142.227736 C26.0389254,143.032736 25.9469254,143.834736 25.8689254,144.640736 L25.7699254,145.850736 C25.7359254,146.251736 25.7039254,146.658736 25.6839254,147.059736 C25.6359254,147.864736 25.5909254,148.668736 25.5529254,149.478736 C25.5099254,150.285736 25.4839254,151.092736 25.4549254,151.899736 C25.4459254,152.303736 25.4289254,152.706736 25.4139254,153.110736 L25.3849254,154.322736 C25.3689254,155.129736 25.3479254,155.936736 25.3669254,156.747736 C25.3709254,157.151736 25.3809254,157.557736 25.4049254,157.963736 C25.4179254,158.167736 25.4309254,158.369736 25.4549254,158.575736 C25.4659254,158.677736 25.4789254,158.780736 25.4959254,158.883736 C25.5039254,158.935736 25.5139254,158.988736 25.5249254,159.040736 C25.5339254,159.080736 25.5409254,159.116736 25.5529254,159.160736 L25.0929254,162.593736 C24.9399254,163.754736 24.7749254,164.897736 24.6719254,166.086736 L24.6649254,166.331736 L24.6679254,166.549736 C24.6679254,166.695736 24.6649254,166.824736 24.6579254,166.967736 C24.6469254,167.249736 24.6189254,167.534736 24.5909254,167.819736 C24.5289254,168.388736 24.4449254,168.960736 24.3559254,169.534736 C24.1739254,170.680736 23.9799254,171.832736 23.8129254,172.993736 C23.6419254,174.152736 23.5079254,175.319736 23.4009254,176.491736 C23.3029254,177.663736 23.2379254,178.840736 23.2189254,180.020736 C23.2069254,180.609736 23.2119254,181.199736 23.2209254,181.788736 C23.2349254,182.382736 23.2589254,182.967736 23.2809254,183.547736 C23.3289254,184.715736 23.3759254,185.882736 23.4369254,187.046736 L23.6239254,190.537736 L23.8259254,194.026736 L24.0129254,197.512736 C24.0739254,198.675736 24.1249254,199.837736 24.1719254,200.999736 C24.2239254,202.160736 24.2549254,203.322736 24.2789254,204.484736 C24.2929254,205.063736 24.2949254,205.646736 24.3019254,206.223736 L24.2989254,207.973736 L24.3099254,211.472736 C24.3119254,212.636736 24.3079254,213.802736 24.3249254,214.970736 L24.3249254,214.972736 C24.3249254,214.974736 24.3269254,214.975736 24.3269254,214.977736 C24.3119254,215.004736 24.2779254,215.067736 24.2269254,215.162736 C24.1599254,215.294736 24.0669254,215.496736 23.9259254,215.720736 C23.8549254,215.833736 23.7859254,215.961736 23.7099254,216.098736 C23.6199254,216.235736 23.5259254,216.382736 23.4299254,216.540736 C23.2479254,216.863736 22.9989254,217.205736 22.7629254,217.596736 C22.6399254,217.787736 22.4999254,217.980736 22.3659254,218.186736 C22.2299254,218.392736 22.0969254,218.608736 21.9479254,218.824736 C21.8019254,219.041736 21.6669254,219.276736 21.5289254,219.516736 C21.3799254,219.751736 21.2289254,219.992736 21.0749254,220.236736 C20.9979254,220.360736 20.9159254,220.481736 20.8349254,220.604736 C20.7479254,220.722736 20.6549254,220.836736 20.5599254,220.952736 C20.3709254,221.182736 20.1719254,221.409736 19.9589254,221.625736 C19.5199254,222.050736 19.0359254,222.448736 18.5489254,222.846736 C18.0639254,223.248736 17.5779254,223.659736 17.1529254,224.118736 C16.7239254,224.574736 16.3189254,225.046736 15.9649254,225.543736 C15.6089254,226.039736 15.3099254,226.570736 15.1269254,227.140736 C14.9439254,227.704736 14.8829254,228.332736 15.0559254,228.897736 C15.1119254,229.033736 15.1639254,229.168736 15.2349254,229.286736 C15.2729254,229.344736 15.3109254,229.401736 15.3489254,229.457736 C15.3859254,229.513736 15.4239254,229.567736 15.4719254,229.611736 C15.5629254,229.700736 15.6429254,229.799736 15.7409254,229.865736 C15.8369254,229.932736 15.9289254,229.997736 16.0199254,230.056736 C16.2099254,230.149736 16.3829254,230.247736 16.5539254,230.290736 C16.6379254,230.317736 16.7179254,230.343736 16.7939254,230.368736 C16.8699254,230.393736 16.9469254,230.399736 17.0169254,230.414736 C17.1579254,230.438736 17.2799254,230.469736 17.3899254,230.476736 C17.4329254,230.479736 17.4709254,230.482736 17.5079254,230.485736 C17.5569254,230.535736 17.6079254,230.583736 17.6629254,230.624736 C17.7869254,230.723736 17.9219254,230.794736 18.0519254,230.843736 C18.1199254,230.869736 18.1749254,230.885736 18.2519254,230.908736 L18.3279254,230.922736 L18.4239254,230.938736 C18.6759254,230.975736 18.9109254,230.958736 19.1189254,230.906736 C19.3259254,230.853736 19.4999254,230.764736 19.6339254,230.669736 C19.6839254,230.635736 19.7269254,230.599736 19.7679254,230.564736 C19.8469254,230.676736 19.9369254,230.783736 20.0409254,230.875736 C20.2759254,231.084736 20.5769254,231.211736 20.8559254,231.241736 C20.9259254,231.248736 20.9939254,231.251736 21.0599254,231.249736 L21.1179254,231.248736 L21.1569254,231.244736 L21.2329254,231.236736 C21.3279254,231.225736 21.4489254,231.203736 21.5519254,231.185736 C21.7569254,231.136736 21.9399254,231.071736 22.0919254,230.989736 C22.2339254,230.912736 22.3429254,230.820736 22.4239254,230.734736 C22.4379254,230.760736 22.4489254,230.787736 22.4649254,230.815736 C22.5499254,230.949736 22.6629254,231.078736 22.8009254,231.179736 C22.9729254,231.303736 23.0709254,231.329736 23.1949254,231.387736 C23.6779254,231.576736 24.1839254,231.645736 24.6799254,231.631736 C24.9289254,231.628736 25.1769254,231.599736 25.4229254,231.547736 C25.5459254,231.522736 25.6679254,231.493736 25.7909254,231.452736 C25.8509254,231.434736 25.9129254,231.410736 25.9739254,231.385736 C26.0319254,231.364736 26.1019254,231.331736 26.1719254,231.297736 C26.1819254,231.291736 26.1909254,231.286736 26.1999254,231.283736 C26.5339254,231.525736 26.9109254,231.637736 27.2549254,231.702736 C27.6549254,231.775736 28.0389254,231.793736 28.4109254,231.798736 L28.9619254,231.798736 L29.5099254,231.791736 C29.8889254,231.780736 30.2719254,231.750736 30.6559254,231.670736 C31.0369254,231.588736 31.4259254,231.462736 31.7749254,231.238736 C32.1229254,231.017736 32.4179254,230.697736 32.5979254,230.344736 C32.6909254,230.168736 32.7599254,229.988736 32.8109254,229.809736 C32.8359254,229.721736 32.8589254,229.622736 32.8769254,229.535736 L32.8989254,229.407736 C32.9059254,229.350736 32.9139254,229.288736 32.9129254,229.245736 C32.9199254,228.877736 32.8869254,228.568736 32.8609254,228.250736 C32.8009254,227.624736 32.7339254,227.039736 32.6589254,226.500736 C32.6409254,226.366736 32.6229254,226.234736 32.6049254,226.104736 C32.5419254,225.512736 32.4819254,224.883736 32.4719254,224.214736 C32.4679254,223.991736 32.4699254,223.761736 32.4759254,223.528736 C32.4809254,223.412736 32.4859254,223.294736 32.4899254,223.176736 L32.5039254,223.007736 C32.5119254,222.960736 32.5149254,222.916736 32.5259254,222.869736 C32.5659254,222.672736 32.6279254,222.533736 32.7469254,222.404736 C32.8639254,222.270736 33.0909254,222.116736 33.3149254,221.875736 C33.5399254,221.637736 33.7179254,221.332736 33.8299254,221.031736 C33.9429254,220.726736 34.0079254,220.419736 34.0519254,220.115736 C34.1339254,219.502736 34.1339254,218.901736 34.1059254,218.278736 C34.0689254,217.640736 33.9679254,216.994736 33.7839254,216.349736 C33.6109254,215.705736 33.3249254,215.077736 33.1079254,214.506736 C33.0549254,214.365736 33.0099254,214.227736 32.9759254,214.096736 C32.9599254,214.031736 32.9469254,213.967736 32.9379254,213.906736 C32.9319254,213.875736 32.9299254,213.846736 32.9269254,213.816736 C32.9239254,213.800736 32.9239254,213.786736 32.9229254,213.772736 L32.9219254,213.750736 C32.9219254,213.750736 32.9219254,213.743736 32.9219254,213.738736 C32.9229254,213.576736 32.9209254,213.403736 32.9349254,213.266736 L32.9499254,213.041736 L32.9749254,212.795736 C33.0399254,212.139736 33.1469254,211.459736 33.2449254,210.767736 C33.3459254,210.074736 33.4599254,209.368736 33.5789254,208.651736 C33.6929254,207.932736 33.8089254,207.202736 33.9269254,206.461736 C33.9869254,206.091736 34.0479254,205.718736 34.1019254,205.340736 C34.1289254,205.151736 34.1559254,204.960736 34.1839254,204.770736 C34.2139254,204.584736 34.2429254,204.398736 34.2719254,204.211736 C34.4009254,203.498736 34.5889254,202.744736 34.8029254,202.000736 C35.2369254,200.505736 35.7809254,198.986736 36.2709254,197.412736 C36.7559254,195.825736 37.1329254,194.213736 37.6289254,192.602736 C38.0989254,190.985736 38.6199254,189.363736 39.1589254,187.730736 C39.4339254,186.916736 39.7119254,186.098736 39.9889254,185.279736 C40.2739254,184.459736 40.5569254,183.637736 40.8259254,182.805736 C41.3639254,181.144736 41.8409254,179.429736 42.0989254,177.666736 C42.3659254,175.905736 42.4269254,174.126736 42.4209254,172.372736 C42.4119254,171.495736 42.3929254,170.621736 42.3579254,169.752736 L42.3519254,169.590736 L42.3479254,169.440736 C42.3439254,169.325736 42.3489254,169.241736 42.3499254,169.146736 C42.3569254,168.952736 42.3709254,168.749736 42.3929254,168.551736 C42.4369254,168.150736 42.5089254,167.747736 42.5979254,167.347736 C42.9639254,165.739736 43.5729254,164.163736 44.2099254,162.625736 C44.8539254,161.087736 45.5499254,159.581736 46.2149254,158.086736 C47.5709254,155.108736 48.8399254,152.183736 49.8469254,149.317736 C50.0939254,148.599736 50.3229254,147.884736 50.5319254,147.174736 C50.7429254,146.469736 50.9259254,145.746736 51.0929254,145.068736 C51.4319254,143.716736 51.8159254,142.420736 52.2129254,141.178736 C53.0149254,138.699736 53.8029254,136.421736 54.4129254,134.369736 C54.7159254,133.342736 54.9749254,132.373736 55.1889254,131.470736 C55.4029254,130.567736 55.5589254,129.727736 55.6819254,128.967736 C55.8609254,127.821736 55.9529254,126.853736 55.9929254,126.092736 C56.0329254,126.853736 56.1249254,127.821736 56.3039254,128.967736 C56.4259254,129.727736 56.5829254,130.567736 56.7969254,131.470736 C57.0099254,132.373736 57.2699254,133.342736 57.5719254,134.369736 C58.1829254,136.421736 58.9709254,138.699736 59.7719254,141.178736 C60.1709254,142.420736 60.5539254,143.716736 60.8929254,145.068736 C61.0599254,145.746736 61.2419254,146.469736 61.4539254,147.174736 C61.6619254,147.884736 61.8909254,148.599736 62.1379254,149.317736 C63.1459254,152.183736 64.4149254,155.108736 65.7709254,158.087736 C66.4359254,159.581736 67.1309254,161.087736 67.7759254,162.625736 C68.4129254,164.163736 69.0219254,165.739736 69.3869254,167.347736 C69.4769254,167.747736 69.5479254,168.150736 69.5929254,168.551736 C69.6149254,168.749736 69.6299254,168.952736 69.6349254,169.146736 C69.6359254,169.241736 69.6419254,169.325736 69.6369254,169.440736 L69.6339254,169.590736 L69.6279254,169.752736 C69.5929254,170.621736 69.5739254,171.495736 69.5659254,172.372736 C69.5589254,174.126736 69.6199254,175.905736 69.8859254,177.666736 C70.1449254,179.429736 70.6219254,181.144736 71.1589254,182.805736 C71.4289254,183.637736 71.7119254,184.459736 71.9959254,185.279736 C72.2749254,186.098736 72.5509254,186.916736 72.8269254,187.730736 C73.3659254,189.363736 73.8859254,190.985736 74.3569254,192.602736 C74.8529254,194.213736 75.2299254,195.825736 75.7149254,197.412736 C76.2049254,198.986736 76.7499254,200.505736 77.1829254,202.000736 C77.3969254,202.744736 77.5849254,203.498736 77.7139254,204.211736 C77.7429254,204.398736 77.7729254,204.584736 77.8019254,204.770736 C77.8299254,204.960736 77.8569254,205.151736 77.8839254,205.340736 C77.9379254,205.718736 77.9999254,206.091736 78.0589254,206.462736 C78.1759254,207.202736 78.2929254,207.932736 78.4069254,208.651736 C78.5259254,209.368736 78.6399254,210.074736 78.7409254,210.767736 C78.8389254,211.459736 78.9469254,212.139736 79.0109254,212.795736 L79.0359254,213.041736 L79.0509254,213.266736 C79.0649254,213.403736 79.0629254,213.576736 79.0649254,213.738736 C79.0639254,213.743736 79.0639254,213.750736 79.0639254,213.750736 L79.0619254,213.772736 C79.0619254,213.786736 79.0619254,213.800736 79.0599254,213.816736 C79.0549254,213.846736 79.0539254,213.875736 79.0489254,213.906736 C79.0379254,213.967736 79.0259254,214.031736 79.0099254,214.096736 C78.9759254,214.227736 78.9299254,214.365736 78.8779254,214.506736 C78.6609254,215.077736 78.3749254,215.706736 78.2019254,216.349736 C78.0179254,216.994736 77.9169254,217.640736 77.8799254,218.278736 C77.8519254,218.901736 77.8529254,219.502736 77.9329254,220.115736 C77.9779254,220.419736 78.0429254,220.726736 78.1559254,221.031736 C78.2679254,221.332736 78.4459254,221.637736 78.6709254,221.875736 C78.8949254,222.116736 79.1219254,222.270736 79.2389254,222.404736 C79.3579254,222.533736 79.4189254,222.672736 79.4599254,222.869736 C79.4709254,222.916736 79.4729254,222.960736 79.4819254,223.007736 L79.4949254,223.176736 C79.4999254,223.294736 79.5049254,223.412736 79.5099254,223.528736 C79.5149254,223.761736 79.5169254,223.991736 79.5129254,224.214736 C79.5059254,224.741736 79.4669254,225.239736 79.4199254,225.717736 C79.3829254,225.965736 79.3469254,226.226736 79.3109254,226.500736 C79.2349254,227.039736 79.1679254,227.624736 79.1079254,228.250736 C79.0829254,228.568736 79.0489254,228.877736 79.0559254,229.245736 C79.0559254,229.288736 79.0639254,229.350736 79.0699254,229.407736 L79.0929254,229.535736 C79.1109254,229.622736 79.1339254,229.721736 79.1589254,229.809736 C79.2099254,229.988736 79.2789254,230.168736 79.3709254,230.344736 C79.5519254,230.697736 79.8459254,231.017736 80.1949254,231.238736 C80.5439254,231.462736 80.9329254,231.588736 81.3139254,231.670736 C81.6969254,231.750736 82.0809254,231.780736 82.4589254,231.791736 L83.0079254,231.798736 L83.5579254,231.798736 C83.9299254,231.793736 84.3139254,231.775736 84.7149254,231.702736 C85.0579254,231.637736 85.4359254,231.525736 85.7699254,231.283736 C85.7789254,231.286736 85.7879254,231.291736 85.7979254,231.297736 C85.8679254,231.331736 85.9379254,231.364736 85.9949254,231.385736 C86.0569254,231.410736 86.1179254,231.434736 86.1789254,231.452736 C86.3019254,231.493736 86.4239254,231.522736 86.5469254,231.547736 C86.7929254,231.599736 87.0399254,231.628736 87.2889254,231.631736 C87.7849254,231.645736 88.2909254,231.576736 88.7749254,231.387736 C88.8979254,231.329736 88.9959254,231.303736 89.1689254,231.179736 C89.3069254,231.078736 89.4189254,230.949736 89.5049254,230.815736 C89.5209254,230.787736 89.5319254,230.760736 89.5459254,230.734736 C89.6259254,230.820736 89.7359254,230.912736 89.8779254,230.989736 C90.0299254,231.071736 90.2119254,231.136736 90.4169254,231.185736 C90.5199254,231.203736 90.6409254,231.225736 90.7359254,231.236736 L90.8129254,231.244736 L90.8509254,231.248736 L90.9089254,231.249736 C90.9749254,231.251736 91.0439254,231.248736 91.1139254,231.241736 C91.3929254,231.211736 91.6929254,231.084736 91.9279254,230.875736 C92.0319254,230.783736 92.1229254,230.676736 92.2019254,230.564736 C92.2419254,230.599736 92.2849254,230.635736 92.3359254,230.669736 C92.4699254,230.764736 92.6429254,230.853736 92.8499254,230.906736 C93.0579254,230.958736 93.2939254,230.975736 93.5449254,230.938736 L93.6419254,230.922736 L93.7169254,230.908736 C93.7949254,230.885736 93.8489254,230.869736 93.9179254,230.843736 C94.0479254,230.794736 94.1819254,230.723736 94.3069254,230.624736 C94.3619254,230.583736 94.4119254,230.536736 94.4599254,230.486736 C94.5019254,230.483736 94.5469254,230.480736 94.5959254,230.476736 C94.7059254,230.469736 94.8279254,230.438736 94.9689254,230.414736 C95.0389254,230.399736 95.1149254,230.393736 95.1909254,230.368736 C95.2679254,230.343736 95.3479254,230.317736 95.4309254,230.290736 C95.6029254,230.247736 95.7759254,230.149736 95.9659254,230.056736 C96.0559254,229.997736 96.1489254,229.932736 96.2449254,229.865736 C96.3419254,229.799736 96.4229254,229.700736 96.5139254,229.611736 C96.5619254,229.567736 96.5989254,229.513736 96.6369254,229.457736 C96.6749254,229.401736 96.7129254,229.344736 96.7519254,229.286736 C96.8219254,229.167736 96.8749254,229.033736 96.9299254,228.897736 C97.1029254,228.332736 97.0419254,227.704736 96.8579254,227.140736 C96.6749254,226.570736 96.3779254,226.039736 96.0209254,225.543736 C95.6669254,225.046736 95.2609254,224.574736 94.8329254,224.118736 C94.4079254,223.659736 93.9229254,223.248736 93.4379254,222.846736 C92.9499254,222.448736 92.4659254,222.050736 92.0279254,221.625736 C91.8149254,221.409736 91.6139254,221.182736 91.4249254,220.952736 C91.3319254,220.836736 91.2379254,220.722736 91.1509254,220.604736 C91.0699254,220.481736 90.9869254,220.360736 90.9109254,220.236736 C90.7569254,219.992736 90.6059254,219.751736 90.4579254,219.516736 C90.3189254,219.276736 90.1829254,219.041736 90.0369254,218.824736 C89.8879254,218.608736 89.7559254,218.392736 89.6199254,218.186736 C89.4859254,217.980736 89.3449254,217.787736 89.2219254,217.596736 C88.9869254,217.205736 88.7379254,216.863736 88.5559254,216.540736 C88.4599254,216.382736 88.3649254,216.235736 88.2759254,216.098736 C88.1999254,215.961736 88.1309254,215.833736 88.0609254,215.720736 C87.9189254,215.496736 87.8259254,215.294736 87.7579254,215.162736 C87.7079254,215.066736 87.6739254,215.004736 87.6589254,214.977736 C87.6589254,214.975736 87.6609254,214.973736 87.6609254,214.973736 L87.6609254,214.970736 C87.6769254,213.802736 87.6739254,212.636736 87.6759254,211.472736 L87.6869254,207.973736 L87.6839254,206.223736 C87.6909254,205.646736 87.6929254,205.063736 87.7069254,204.484736 C87.7319254,203.322736 87.7619254,202.160736 87.8139254,200.999736 C87.8609254,199.837736 87.9109254,198.675736 87.9719254,197.512736 L88.1589254,194.026736 L88.3609254,190.537736 L88.5489254,187.046736 C88.6099254,185.882736 88.6569254,184.715736 88.7059254,183.547736 C88.7279254,182.967736 88.7509254,182.382736 88.7649254,181.788736 C88.7739254,181.199736 88.7789254,180.609736 88.7669254,180.020736 C88.7479254,178.840736 88.6829254,177.663736 88.5839254,176.491736 C88.4779254,175.319736 88.3439254,174.152736 88.1729254,172.993736 C88.0069254,171.832736 87.8119254,170.680736 87.6299254,169.534736 C87.5409254,168.960736 87.4569254,168.388736 87.3959254,167.819736 C87.3669254,167.534736 87.3399254,167.249736 87.3279254,166.967736 C87.3209254,166.824736 87.3179254,166.695736 87.3179254,166.549736 L87.3209254,166.331736 L87.3139254,166.086736 C87.2119254,164.897736 87.0459254,163.754736 86.8929254,162.593736 L86.4319254,159.160736 C86.4449254,159.116736 86.4519254,159.080736 86.4609254,159.040736 C86.4719254,158.988736 86.4829254,158.935736 86.4889254,158.883736 C86.5069254,158.780736 86.5199254,158.677736 86.5299254,158.575736 C86.5549254,158.369736 86.5679254,158.167736 86.5819254,157.963736 C86.6049254,157.557736 86.6149254,157.151736 86.6189254,156.747736 C86.6369254,155.936736 86.6169254,155.129736 86.6009254,154.322736 L86.5719254,153.110736 C86.5569254,152.706736 86.5399254,152.303736 86.5309254,151.899736 C86.5029254,151.092736 86.4759254,150.285736 86.4329254,149.478736 C86.3949254,148.668736 86.3499254,147.864736 86.3019254,147.059736 C86.2819254,146.658736 86.2509254,146.251736 86.2159254,145.850736 L86.1169254,144.640736 C86.0389254,143.834736 85.9469254,143.032736 85.8549254,142.227736 C85.7429254,141.425736 85.6409254,140.622736 85.5079254,139.824736 C85.4469254,139.423736 85.3789254,139.025736 85.3099254,138.625736 L85.0869254,137.432736 C85.0149254,137.034736 84.9359254,136.636736 84.8519254,136.241736 L84.6049254,135.051736 C84.4199254,134.262736 84.2429254,133.472736 84.0389254,132.690736 C83.8479254,131.902736 83.6279254,131.122736 83.4079254,130.344736 C83.1739254,129.568736 82.9489254,128.791736 82.6939254,128.023736 C82.5699254,127.638736 82.4399254,127.255736 82.3049254,126.873736 C82.1719254,126.492736 82.0429254,126.108736 81.9009254,125.730736 C81.6199254,124.971736 81.3279254,124.217736 81.0229254,123.469736 L80.5489254,122.352736 L80.0519254,121.252736 C80.0509254,121.242736 80.0129254,121.057736 79.9299254,120.721736 C79.8429254,120.375736 79.7059254,119.872736 79.5179254,119.238736 C79.3299254,118.604736 79.0969254,117.835736 78.8109254,116.961736 C78.5319254,116.085736 78.1989254,115.103736 77.8389254,114.033736 C77.4709254,112.967736 77.0729254,111.812736 76.6509254,110.590736 C76.4419254,109.983736 76.2219254,109.358736 76.0199254,108.727736 C75.9699254,108.570736 75.9169254,108.411736 75.8749254,108.258736 L75.8409254,108.145736 L75.8179254,108.053736 L75.8049254,108.008736 L75.7929254,107.945736 L75.7809254,107.881736 L75.7789254,107.866736 L75.7779254,107.855736 C75.7639254,107.725736 75.7529254,107.547736 75.7449254,107.381736 C75.7389254,107.209736 75.7329254,107.037736 75.7259254,106.864736 C75.6919254,105.467736 75.6829254,104.007736 75.6779254,102.528736 C75.6799254,101.047736 75.6359254,99.540736 75.6169254,98.034736 C75.5929254,96.527736 75.6039254,95.020736 75.6899254,93.540736 C75.7609254,92.061736 75.9219254,90.609736 76.1409254,89.217736 C76.2529254,88.524736 76.3729254,87.841736 76.5159254,87.194736 C76.5859254,86.875736 76.6669254,86.545736 76.7619254,86.293736 C76.8829254,85.987736 77.0029254,85.683736 77.1209254,85.384736 C77.5829254,84.163736 77.9389254,82.983736 78.2519254,81.891736 C78.5589254,80.797736 78.8039254,79.785736 79.0019254,78.883736 C79.0509254,78.659736 79.0989254,78.440736 79.1449254,78.229736 C79.1859254,78.018736 79.2249254,77.814736 79.2639254,77.618736 C79.3319254,77.268736 79.3929254,76.945736 79.4419254,76.646736 C79.5129254,76.866736 79.5859254,77.085736 79.6629254,77.307736 C79.9239254,78.068736 80.2249254,78.837736 80.5589254,79.616736 C80.6459254,79.811736 80.7329254,80.007736 80.8199254,80.204736 C80.9089254,80.394736 80.9999254,80.584736 81.0909254,80.776736 C81.2789254,81.175736 81.4759254,81.559736 81.6829254,81.944736 C82.5039254,83.480736 83.3849254,84.995736 84.1079254,86.604736 C84.8299254,88.208736 85.4329254,89.891736 85.7789254,91.653736 C85.8239254,91.874736 85.8569254,92.087736 85.8949254,92.311736 L85.9909254,92.992736 C86.0229254,93.222736 86.0539254,93.453736 86.0939254,93.681736 C86.1289254,93.911736 86.1639254,94.140736 86.2069254,94.368736 C86.2459254,94.596736 86.2889254,94.823736 86.3359254,95.048736 C86.3769254,95.275736 86.4219254,95.500736 86.4689254,95.725736 C86.5619254,96.175736 86.6679254,96.619736 86.7719254,97.063736 C87.1969254,98.833736 87.6949254,100.551736 88.2059254,102.212736 C88.7229254,103.870736 89.2929254,105.460736 89.9449254,106.919736 C90.5919254,108.380736 91.3369254,109.698736 92.0569254,110.884736 C92.7739254,112.048736 93.3999254,113.114736 93.8999254,114.083736 C94.3929254,115.053736 94.7569254,115.924736 94.9239254,116.661736 C95.1009254,117.398736 95.0639254,117.998736 94.9829254,118.409736 C94.9499254,118.592736 94.9159254,118.737736 94.8889254,118.842736 C94.8319254,118.897736 94.7749254,118.955736 94.7169254,119.023736 C94.5809254,119.188736 94.4399254,119.389736 94.3239254,119.628736 C94.2059254,119.866736 94.1099254,120.137736 94.0369254,120.428736 C93.9659254,120.720736 93.9219254,121.032736 93.9009254,121.353736 C93.8609254,121.995736 93.9209254,122.672736 94.0409254,123.326736 C94.1009254,123.652736 94.1749254,123.974736 94.2499254,124.281736 C94.2649254,124.354736 94.2889254,124.439736 94.2909254,124.500736 C94.2919254,124.545736 94.2899254,124.555736 94.2859254,124.594736 C94.2839254,124.628736 94.2789254,124.664736 94.2729254,124.701736 C94.2509254,124.846736 94.2149254,124.996736 94.1799254,125.146736 C94.1089254,125.444736 94.0399254,125.738736 93.9909254,126.020736 C93.9409254,126.302736 93.9169254,126.575736 93.9159254,126.827736 C93.9129254,127.078736 93.9389254,127.310736 93.9839254,127.509736 C94.0289254,127.709736 94.0939254,127.875736 94.1569254,128.006736 C94.2229254,128.136736 94.2849254,128.231736 94.3309254,128.293736 C94.3659254,128.340736 94.3889254,128.369736 94.3979254,128.381736 C94.3889254,128.378736 94.3799254,128.375736 94.3699254,128.379736 L94.3669254,128.379736 C94.3669254,128.379736 94.3549254,128.383736 94.3289254,128.392736 C94.3059254,128.399736 94.2619254,128.421736 94.2179254,128.450736 C94.1249254,128.508736 94.0119254,128.621736 93.9039254,128.779736 C93.7949254,128.936736 93.6949254,129.137736 93.6119254,129.365736 C93.5699254,129.479736 93.5289254,129.599736 93.4949254,129.721736 C93.4609254,129.842736 93.4349254,129.972736 93.4199254,130.077736 C93.3139254,130.393736 93.3249254,130.734736 93.2199254,131.051736 C93.1709254,131.210736 93.1029254,131.369736 93.0129254,131.514736 C92.9229254,131.658736 92.8039254,131.791736 92.6879254,131.839736 C92.3689254,132.032736 92.0489254,132.249736 91.7449254,132.494736 C91.4389254,132.738736 91.1309254,132.987736 90.8369254,133.275736 C90.7629254,133.348736 90.6939254,133.426736 90.6199254,133.513736 C90.5829254,133.556736 90.5469254,133.605736 90.5069254,133.664736 L90.4869254,133.696736 L90.4779254,133.712736 L90.4599254,133.744736 L90.4239254,133.809736 C90.3099254,134.027736 90.2419254,134.253736 90.2229254,134.509736 C90.2069254,134.763736 90.2889254,135.026736 90.3829254,135.193736 L90.4149254,135.251736 C90.4389254,135.312736 90.4259254,135.289736 90.4539254,135.349736 C90.5029254,135.451736 90.5569254,135.497736 90.6219254,135.545736 C90.7489254,135.633736 90.8749254,135.657736 90.9869254,135.668736 C91.2129254,135.687736 91.4069254,135.648736 91.5909254,135.604736 C91.7739254,135.557736 91.9449254,135.496736 92.1059254,135.431736 C92.4269254,135.296736 92.7139254,135.145736 92.9719254,134.995736 C93.4869254,134.696736 93.8869254,134.408736 94.1639254,134.203736 C94.2859254,134.111736 94.3839254,134.036736 94.4559254,133.982736 C94.4139254,134.047736 94.3729254,134.114736 94.3309254,134.179736 C94.2549254,134.300736 94.1759254,134.416736 94.1039254,134.549736 C94.0679254,134.616736 94.0409254,134.666736 93.9999254,134.722736 C93.9599254,134.779736 93.9159254,134.832736 93.8719254,134.887736 C93.6959254,135.106736 93.4939254,135.305736 93.2929254,135.507736 C93.0899254,135.707736 92.8949254,135.919736 92.7199254,136.145736 C92.5449254,136.372736 92.3749254,136.606736 92.2199254,136.855736 C92.0729254,137.108736 91.9339254,137.374736 91.8539254,137.680736 C91.8129254,137.834736 91.7859254,137.987736 91.7829254,138.181736 C91.7859254,138.349736 91.8089254,138.502736 91.8449254,138.659736 C91.9219254,138.960736 92.0529254,139.290736 92.3669254,139.517736 C92.5229254,139.627736 92.7199254,139.681736 92.9019254,139.680736 C93.0829254,139.678736 93.2479254,139.633736 93.3949254,139.574736 C93.6919254,139.452736 93.9349254,139.275736 94.1599254,139.086736 C94.3849254,138.899736 94.5879254,138.695736 94.7829254,138.485736 C95.1679254,138.061736 95.5169254,137.613736 95.8419254,137.151736 C96.0619254,136.842736 96.2679254,136.526736 96.4689254,136.206736 C96.4319254,136.286736 96.3929254,136.367736 96.3579254,136.450736 C96.2259254,136.754736 96.1069254,137.067736 95.9849254,137.375736 C95.8649254,137.688736 95.7319254,137.989736 95.6049254,138.298736 C95.5339254,138.452736 95.4779254,138.607736 95.4099254,138.757736 C95.3419254,138.922736 95.3009254,139.095736 95.2809254,139.272736 C95.2419254,139.625736 95.2869254,139.990736 95.4109254,140.328736 C95.4729254,140.499736 95.5569254,140.662736 95.6649254,140.817736 C95.7739254,140.971736 95.9089254,141.114736 96.1099254,141.224736 C96.1609254,141.250736 96.2179254,141.274736 96.2809254,141.289736 C96.3159254,141.297736 96.3709254,141.305736 96.3939254,141.305736 L96.4249254,141.306736 L96.4609254,141.306736 L96.4849254,141.304736 C96.6179254,141.294736 96.7129254,141.252736 96.8079254,141.213736 C96.9879254,141.127736 97.1359254,141.024736 97.2749254,140.913736 C97.5489254,140.691736 97.7899254,140.448736 98.0099254,140.190736 C98.4509254,139.674736 98.8349254,139.124736 99.1759254,138.549736 C99.3049254,138.332736 99.4269254,138.114736 99.5449254,137.891736 C99.5289254,137.951736 99.5129254,138.009736 99.4969254,138.068736 C99.4349254,138.299736 99.3769254,138.526736 99.3319254,138.797736 C99.2949254,139.094736 99.3419254,139.366736 99.4249254,139.617736 C99.5089254,139.867736 99.6309254,140.096736 99.7859254,140.302736 C99.9399254,140.506736 100.120925,140.697736 100.362925,140.826736 C100.482925,140.890736 100.622925,140.936736 100.776925,140.934736 C100.890925,140.932736 101.017925,140.929736 101.144925,140.911736 C101.271925,140.894736 101.408925,140.860736 101.531925,140.790736 C101.654925,140.721736 101.752925,140.624736 101.836925,140.528736 C102.001925,140.330736 102.121925,140.122736 102.242925,139.916736 L102.923925,138.673736 L103.612925,137.445736 C103.846925,137.037736 104.094925,136.632736 104.310925,136.209736 C104.530925,135.787736 104.737925,135.358736 104.925925,134.907736 C105.020925,134.681736 105.109925,134.451736 105.182925,134.204736 C105.219925,134.081736 105.255925,133.957736 105.282925,133.820736 L105.302925,133.719736 L105.318925,133.633736 L105.348925,133.459736 C105.425925,132.996736 105.495925,132.532736 105.560925,132.067736 L105.737925,130.671736 L105.902925,129.278736 L105.974925,128.578736 L106.008925,128.228736 L106.024925,128.053736 C106.028925,128.006736 106.039925,127.903736 106.033925,127.820736 C106.009925,127.534736 105.952925,127.310736 105.891925,127.073736 C105.881925,127.037736 105.870925,127.004736 105.860925,126.971736 C105.876925,127.001736 105.891925,127.030736 105.906925,127.061736 C105.955925,127.156736 105.988925,127.227736 106.040925,127.322736 C106.091925,127.412736 106.144925,127.500736 106.197925,127.586736 C106.627925,128.280736 107.171925,128.977736 107.880925,129.576736 C108.231925,129.878736 108.620925,130.159736 109.051925,130.399736 C109.268925,130.519736 109.494925,130.630736 109.738925,130.718736 C109.986925,130.801736 110.244925,130.881736 110.553925,130.854736 L110.735925,130.828736 C110.800925,130.819736 110.866925,130.810736 110.930925,130.797736 C111.058925,130.773736 111.187925,130.742736 111.315925,130.696736 C111.442925,130.646736 111.570925,130.586736 111.689925,130.493736 C111.805925,130.400736 111.906925,130.261736 111.942925,130.106736 C111.982925,129.952736 111.966348,129.799736 111.934925,129.662736 L111.934925,129.662736 Z\" />\n          <G transform=\"translate(42.033108, 0.756736)\">\n            <Path d=\"M0.473817743,19.907 C0.859817743,21.397 1.46581774,22.837 2.18381774,23.75 C2.36181774,23.978 2.54681774,24.171 2.73181774,24.317 C2.91581774,24.464 3.10081774,24.563 3.26181774,24.615 C3.42281774,24.665 3.55581774,24.672 3.64481774,24.665 C3.68981774,24.662 3.72381774,24.657 3.74681774,24.654 C3.76881774,24.649 3.78081774,24.647 3.78081774,24.647 C3.78081774,24.647 3.76881774,24.648 3.74581774,24.651 C3.72281774,24.654 3.68881774,24.655 3.64481774,24.655 C3.55781774,24.654 3.42681774,24.636 3.27581774,24.574 C2.97081774,24.453 2.61381774,24.129 2.30781774,23.66 C1.68681774,22.723 1.21081774,21.273 0.955817743,19.803 C0.827817743,19.068 0.753817743,18.324 0.735817743,17.63 C0.717817743,16.941 0.747817743,16.287 0.884817743,15.817 C0.915817743,15.698 0.959817743,15.6 1.00081774,15.515 C1.04481774,15.436 1.09081774,15.377 1.12881774,15.346 C1.20481774,15.288 1.23081774,15.3 1.30981774,15.311 C1.38281774,15.325 1.45981774,15.365 1.50681774,15.394 C1.52981774,15.409 1.54681774,15.42 1.55581774,15.428 C1.56181774,15.432 1.56481774,15.435 1.56481774,15.435 C1.57981774,15.447 1.59681774,15.46 1.61281774,15.47 C1.83681774,15.615 2.13581774,15.553 2.28181774,15.328 C2.42781774,15.105 2.36381774,14.806 2.13981774,14.659 L2.13081774,14.654 C2.13081774,14.654 2.11481774,14.643 2.08281774,14.621 C2.05281774,14.603 2.01281774,14.58 1.95681774,14.552 C1.84681774,14.5 1.68481774,14.422 1.42781774,14.393 C1.29981774,14.379 1.14381774,14.382 0.974817743,14.432 C0.806817743,14.481 0.638817743,14.585 0.513817743,14.717 C0.386817743,14.848 0.298817743,14.999 0.228817743,15.152 C0.166817743,15.305 0.115817743,15.463 0.085817743,15.623 C-0.042182257,16.261 -0.00718225699,16.95 0.062817743,17.676 C0.140817743,18.401 0.279817743,19.161 0.473817743,19.907\" />\n            <Path d=\"M26.3468177,15.435 C26.3468177,15.435 26.3498177,15.432 26.3548177,15.428 C26.3638177,15.42 26.3818177,15.409 26.4048177,15.394 C26.4508177,15.365 26.5288177,15.325 26.6018177,15.311 C26.6798177,15.3 26.7068177,15.288 26.7818177,15.346 C26.8198177,15.377 26.8668177,15.436 26.9108177,15.515 C26.9518177,15.6 26.9968177,15.698 27.0268177,15.817 C27.1638177,16.287 27.1938177,16.941 27.1758177,17.63 C27.1578177,18.324 27.0838177,19.068 26.9558177,19.803 C26.7008177,21.273 26.2238177,22.723 25.6028177,23.66 C25.2978177,24.129 24.9408177,24.453 24.6358177,24.574 C24.4838177,24.636 24.3538177,24.654 24.2658177,24.655 C24.2218177,24.655 24.1878177,24.654 24.1648177,24.651 C24.1428177,24.648 24.1308177,24.647 24.1308177,24.647 C24.1308177,24.647 24.1418177,24.649 24.1648177,24.654 C24.1868177,24.657 24.2208177,24.662 24.2658177,24.665 C24.3548177,24.672 24.4888177,24.665 24.6498177,24.615 C24.8108177,24.563 24.9948177,24.464 25.1798177,24.317 C25.3638177,24.171 25.5498177,23.978 25.7278177,23.75 C26.4458177,22.837 27.0518177,21.397 27.4378177,19.907 C27.6308177,19.161 27.7698177,18.401 27.8488177,17.676 C27.9188177,16.95 27.9528177,16.261 27.8258177,15.623 C27.7958177,15.463 27.7438177,15.305 27.6818177,15.152 C27.6128177,14.999 27.5238177,14.848 27.3978177,14.717 C27.2728177,14.585 27.1038177,14.481 26.9358177,14.432 C26.7678177,14.382 26.6108177,14.379 26.4838177,14.393 C26.2268177,14.422 26.0648177,14.5 25.9548177,14.552 C25.8998177,14.58 25.8588177,14.603 25.8288177,14.621 C25.7968177,14.643 25.7808177,14.654 25.7808177,14.654 L25.7688177,14.66 C25.7538177,14.671 25.7388177,14.683 25.7238177,14.695 C25.5188177,14.867 25.4928177,15.172 25.6648177,15.376 C25.8368177,15.58 26.1428177,15.608 26.3468177,15.435\" />\n            <Path d=\"M2.35181774,18.113 C2.37581774,18.685 2.42981774,19.133 2.45881774,19.438 C2.49781774,19.741 2.51781774,19.904 2.51781774,19.904 C2.51781774,19.904 2.51181774,19.74 2.50081774,19.435 C2.49581774,19.129 2.49081774,18.68 2.50481774,18.111 C2.52081774,17.541 2.55781774,16.85 2.63381774,16.063 C2.71281774,15.276 2.83181774,14.39 3.02781774,13.441 C3.12681774,12.968 3.24681774,12.479 3.39981774,11.984 C3.55281774,11.49 3.73481774,10.987 3.97781774,10.51 C4.09981774,10.272 4.23781774,10.041 4.39981774,9.835 C4.55781774,9.626 4.74481774,9.443 4.94981774,9.327 C5.05181774,9.27 5.15781774,9.228 5.26481774,9.207 C5.32081774,9.189 5.35881774,9.2 5.40481774,9.19 C5.41781774,9.189 5.42381774,9.183 5.44281774,9.186 L5.49881774,9.192 L5.61081774,9.202 L5.63881774,9.205 L5.63981774,9.205 L5.68781774,9.217 L5.78981774,9.241 C5.85681774,9.258 5.92481774,9.271 5.99381774,9.294 C6.12981774,9.335 6.26781774,9.378 6.40681774,9.431 C6.96181774,9.632 7.53881774,9.888 8.14081774,10.108 C8.74281774,10.33 9.36981774,10.526 10.0128177,10.665 C10.6568177,10.806 11.3108177,10.922 11.9728177,10.981 C12.3018177,11.023 12.6388177,11.032 12.9728177,11.057 C13.3048177,11.073 13.6268177,11.074 13.9548177,11.084 C15.2968177,11.076 16.6228177,10.956 17.9118177,10.665 C18.5558177,10.526 19.1828177,10.328 19.7838177,10.107 C20.3868177,9.887 20.9628177,9.631 21.5178177,9.43 L21.7258177,9.357 L21.9218177,9.296 C21.9838177,9.275 22.0608177,9.258 22.1348177,9.24 L22.2448177,9.215 L22.2998177,9.202 C22.2908177,9.204 22.3218177,9.201 22.3308177,9.2 C22.5548177,9.164 22.7708177,9.209 22.9768177,9.326 C23.1818177,9.442 23.3678177,9.625 23.5258177,9.834 C23.6878177,10.04 23.8268177,10.272 23.9478177,10.51 C24.1918177,10.987 24.3728177,11.49 24.5258177,11.983 C24.6798177,12.478 24.7998177,12.967 24.8988177,13.441 C25.2868177,15.341 25.3868177,16.973 25.4198177,18.111 C25.4348177,18.681 25.4298177,19.129 25.4248177,19.435 C25.4138177,19.74 25.4078177,19.904 25.4078177,19.904 C25.4078177,19.904 25.4278177,19.741 25.4658177,19.438 C25.4948177,19.133 25.5488177,18.685 25.5728177,18.113 C25.5998177,17.54 25.6178177,16.842 25.5858177,16.042 C25.5548177,15.242 25.4908177,14.34 25.3328177,13.362 C25.1698177,12.385 24.9548177,11.323 24.4628177,10.256 C24.3398177,9.99 24.1938177,9.726 24.0088177,9.472 C23.8278177,9.218 23.6048177,8.97 23.3018177,8.783 C23.0058177,8.594 22.6098177,8.49 22.2378177,8.548 C22.2098177,8.551 22.2018177,8.549 22.1568177,8.558 L22.1018177,8.57 L21.9908177,8.593 C21.9168177,8.609 21.8458177,8.622 21.7628177,8.647 L21.5218177,8.715 L21.2958177,8.789 C20.6958177,8.994 20.1288177,9.233 19.5428177,9.432 C18.9588177,9.632 18.3628177,9.807 17.7498177,9.939 C16.5298177,10.207 15.2378177,10.313 13.9708177,10.313 C13.6458177,10.305 13.3138177,10.307 12.9948177,10.291 C12.6788177,10.27 12.3638177,10.264 12.0468177,10.226 C11.4118177,10.174 10.7878177,10.067 10.1758177,9.938 C9.56281774,9.806 8.96681774,9.63 8.38181774,9.431 C7.79681774,9.232 7.22881774,8.993 6.62981774,8.788 C6.48181774,8.737 6.32781774,8.691 6.17181774,8.649 C6.09681774,8.624 6.01581774,8.609 5.93581774,8.593 L5.81581774,8.567 L5.75681774,8.555 C5.75681774,8.555 5.72481774,8.549 5.71281774,8.548 L5.69881774,8.547 L5.67081774,8.545 L5.55981774,8.535 C5.52281774,8.532 5.48681774,8.528 5.42881774,8.533 C5.32781774,8.543 5.21281774,8.543 5.12581774,8.571 C4.94181774,8.614 4.77281774,8.69 4.62281774,8.781 C4.31981774,8.969 4.09681774,9.217 3.91481774,9.471 C3.73081774,9.725 3.58481774,9.99 3.46081774,10.256 C2.96981774,11.323 2.75381774,12.385 2.59181774,13.362 C2.43381774,14.339 2.36881774,15.242 2.33881774,16.042 C2.30781774,16.842 2.32481774,17.54 2.35181774,18.113\" />\n            <Path d=\"M13.9438177,0.772 C10.4998177,0.778 3.74481774,2.406 2.87581774,8.531 C1.54181774,17.94 3.50181774,24.036 6.02681774,29.223 C7.54181774,32.335 9.70081774,35.239 13.7848177,35.401 L14.1408177,35.401 C18.2218177,35.235 20.3788177,32.334 21.8928177,29.223 C24.4178177,24.036 26.3768177,17.94 25.0438177,8.531 C24.1748177,2.406 17.4198177,0.779 13.9698177,0.773 C13.9598177,0.773 13.9498177,0.773 13.9438177,0.772 Z M14.1488177,36.172 L13.7698177,36.172 C9.26481774,35.993 7.14581774,32.889 5.52581774,29.561 C2.94681774,24.263 0.748817743,18.036 2.11181774,8.422 C2.93081774,2.649 8.81981774,0.01 13.9458177,0.001 C13.9518177,0 13.9578177,0 13.9628177,0 C19.0978177,0.009 24.9888177,2.648 25.8078177,8.422 C27.1708177,18.036 24.9728177,24.263 22.3938177,29.561 C20.7728177,32.889 18.6548177,35.993 14.1648177,36.172 C14.1598177,36.172 14.1548177,36.172 14.1488177,36.172 L14.1488177,36.172 Z\" />\n          </G>\n        </G>\n      </G>\n    </Svg>\n  );\n}\n","import React, { JSX, useEffect, useState } from \"react\";\nimport { Platform_onelink } from \"../utils/platform\";\n\ninterface IOnelinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n  type?: \"ios\" | \"android\";\n}\n\nexport function Onelink(props: IOnelinkProps): JSX.Element {\n  const { type, ...rest } = props;\n  const initialOnelink = Platform_onelink(true);\n  const [onelink, setOnelink] = useState(initialOnelink);\n  useEffect(() => {\n    setOnelink(Platform_onelink(false, type));\n  }, []);\n\n  return <a href={onelink} {...rest} />;\n}\n","import { JSX, ReactNode, useEffect, useState } from \"react\";\nimport { FooterPage } from \"./footerPage\";\nimport { TopNavMenu } from \"./topNavMenu\";\nimport { IAccount } from \"../models/account\";\nimport { IUnit } from \"../types\";\nimport { Service } from \"../api/service\";\n\nexport interface IUserContext {\n  account?: IAccount;\n  units?: IUnit;\n}\n\nexport interface IPageWrapperProps {\n  skipTopNavMenu?: boolean;\n  skipFooter?: boolean;\n  url?: string;\n  maxWidth?: number;\n  maxBodyWidth?: number;\n  children?: ReactNode | ((ctx: IUserContext) => ReactNode);\n  isLoggedIn?: boolean;\n  client: Window[\"fetch\"];\n}\n\nexport function PageWrapper(props: IPageWrapperProps): JSX.Element {\n  const [userContext, setUserContext] = useState<IUserContext>({});\n  const [isLoggedIn, setIsLoggedIn] = useState(!!props.isLoggedIn);\n\n  useEffect(() => {\n    if (props.isLoggedIn) {\n      const service = new Service(props.client);\n      service.getUserContext().then((ctx) => {\n        setUserContext(ctx);\n        if (!ctx.account) {\n          setIsLoggedIn(false);\n        }\n      });\n    }\n  }, []);\n\n  const children = typeof props.children === \"function\" ? props.children(userContext) : props.children;\n\n  return (\n    <div style={{ display: \"flex\", flexDirection: \"column\", minHeight: \"100vh\" }}>\n      {!props.skipTopNavMenu && (\n        <TopNavMenu\n          maxWidth={props.maxWidth || 1200}\n          current={props.url}\n          isLoggedIn={isLoggedIn}\n          account={userContext.account}\n          client={props.client}\n        />\n      )}\n      <div\n        id=\"app\"\n        style={{ maxWidth: props.maxBodyWidth || props.maxWidth || 800, margin: \"0 auto\", width: \"100%\", flex: 1 }}\n      >\n        {children}\n      </div>\n      {!props.skipFooter && <FooterPage maxWidth={props.maxWidth || 800} />}\n    </div>\n  );\n}\n","import { JSX, memo, ReactNode, useCallback, useEffect, useMemo, useRef } from \"react\";\nimport { View } from \"react-native\";\nimport { IHistoryRecord, IProgram, ISettings, IStats } from \"../../types\";\nimport { IDispatch } from \"../../ducks/types\";\nimport { buildCardsReducer, ICardsAction } from \"../../ducks/reducer\";\nimport {\n  IEvaluatedProgram,\n  Program_runAllFinishDayScripts,\n  Program_nextHistoryRecord,\n  Program_evaluate,\n  Program_getProgramDay,\n  Program_getProgramDayUsedExercises,\n} from \"../../models/program\";\nimport { ProgramPreviewPlaygroundDay } from \"./programPreviewPlaygroundDay\";\nimport { ILensDispatch, useLensReducer } from \"../../utils/useLensReducer\";\nimport { lb } from \"lens-shmens\";\nimport { Progress_applyProgramDay, Progress_runInitialUpdateScripts } from \"../../models/progress\";\nimport { ProgramPreviewPlaygroundInnerRenderer } from \"./programPreviewPlaygroundInner\";\nimport type { IScrollableTabsProps } from \"../scrollableTabs\";\nimport {\n  IProgramPreviewPlaygroundDaySetupWithProgress,\n  IProgramPreviewPlaygroundState,\n} from \"./programPreviewPlaygroundSetup\";\nimport deepmerge from \"deepmerge\";\nimport { SimpleMarkdown } from \"../simpleMarkdown\";\nimport { usePerfRenderCount } from \"../../utils/usePerfRenderCount\";\nimport { ObjectUtils_filter } from \"../../utils/object\";\nimport { ProgramToPlanner } from \"../../models/programToPlanner\";\nimport { WebWorkoutModals } from \"./webWorkoutModals\";\nimport { useAppState } from \"../../navigation/StateContext\";\nimport { IState, updateState } from \"../../models/state\";\nimport { useProgressiveItems } from \"../../utils/useProgressiveItems\";\n\nfunction buildDayDispatch(\n  playgroundDispatch: ILensDispatch<IProgramPreviewPlaygroundState>,\n  weekIndex: number,\n  dayIndex: number,\n  progress: IHistoryRecord,\n  settings: ISettings,\n  stats: IStats\n): IDispatch {\n  return (async (action: unknown) => {\n    const newProgress = buildCardsReducer(settings, stats, undefined)(progress, action as ICardsAction);\n    onProgressChange(playgroundDispatch, weekIndex, dayIndex, newProgress);\n  }) as IDispatch;\n}\n\ninterface IProgramPreviewPlaygroundProps {\n  program: IProgram;\n  settings: ISettings;\n  isPlayground: boolean;\n  scrollableTabsProps?: Partial<IScrollableTabsProps>;\n  stats: IStats;\n  hasNavbar?: boolean;\n  showAllWeeks?: boolean;\n  onEngage?: () => void;\n  scrollTabZIndex?: number;\n  useNavModals?: boolean;\n  headerContent?: ReactNode;\n  externalWeekIndex?: number;\n  hideWeekTabBar?: boolean;\n  onContentScroll?: (e: import(\"react-native\").NativeSyntheticEvent<import(\"react-native\").NativeScrollEvent>) => void;\n}\n\nfunction onProgressChange(\n  dispatch: ILensDispatch<IProgramPreviewPlaygroundState>,\n  weekIndex: number,\n  dayIndex: number,\n  newProgress: IHistoryRecord\n): void {\n  dispatch(\n    lb<IProgramPreviewPlaygroundState>()\n      .p(\"progresses\")\n      .pi(weekIndex)\n      .p(\"days\")\n      .pi(dayIndex)\n      .p(\"progress\")\n      .record(newProgress),\n    \"Update progress\"\n  );\n}\n\nexport function playgroundOnProgramChange(\n  dispatch: ILensDispatch<IProgramPreviewPlaygroundState>,\n  newEvaluatedProgram: IEvaluatedProgram,\n  stats: IStats,\n  state: IProgramPreviewPlaygroundState\n): void {\n  const newPlanner = new ProgramToPlanner(newEvaluatedProgram, state.settings).convertToPlanner();\n  const newProgram = { ...state.program, planner: newPlanner };\n  dispatch(\n    [\n      lb<IProgramPreviewPlaygroundState>()\n        .p(\"progresses\")\n        .recordModify((progresses) => {\n          return progresses.map((wk) => {\n            return {\n              ...wk,\n              days: wk.days.map((day: IProgramPreviewPlaygroundDaySetupWithProgress) => {\n                let newProgress = Progress_applyProgramDay(day.progress, newEvaluatedProgram, day.day, state.settings);\n                newProgress = Progress_runInitialUpdateScripts(\n                  newProgress,\n                  undefined,\n                  day.day,\n                  newEvaluatedProgram,\n                  state.settings,\n                  stats\n                );\n                return {\n                  ...day,\n                  progress: newProgress,\n                };\n              }),\n            };\n          });\n        }),\n      lb<IProgramPreviewPlaygroundState>().p(\"program\").record(newProgram),\n    ],\n    \"Update program\"\n  );\n}\n\nexport function playgroundOnSettingsChange(\n  dispatch: ILensDispatch<IProgramPreviewPlaygroundState>,\n  newSettings: ISettings,\n  stats: IStats,\n  evaluatedProgram: IEvaluatedProgram\n): void {\n  dispatch(\n    [\n      lb<IProgramPreviewPlaygroundState>()\n        .p(\"progresses\")\n        .recordModify((progresses) => {\n          return progresses.map((wk) => {\n            return {\n              ...wk,\n              days: wk.days.map((day: IProgramPreviewPlaygroundDaySetupWithProgress) => {\n                let newProgress = Progress_applyProgramDay(day.progress, evaluatedProgram, day.day, newSettings);\n                newProgress = Progress_runInitialUpdateScripts(\n                  newProgress,\n                  undefined,\n                  day.day,\n                  evaluatedProgram,\n                  newSettings,\n                  stats\n                );\n                return {\n                  ...day,\n                  progress: newProgress,\n                };\n              }),\n            };\n          });\n        }),\n      lb<IProgramPreviewPlaygroundState>().p(\"settings\").record(newSettings),\n    ],\n    \"Update settings\"\n  );\n}\n\nfunction onFinish(\n  dispatch: ILensDispatch<IProgramPreviewPlaygroundState>,\n  props: IProgramPreviewPlaygroundProps,\n  state: IProgramPreviewPlaygroundState,\n  d: IProgramPreviewPlaygroundDaySetupWithProgress\n): void {\n  const { program: newProgram, exerciseData } = Program_runAllFinishDayScripts(\n    state.program,\n    d.progress,\n    props.stats,\n    state.settings\n  );\n  const newSettings = {\n    ...state.settings,\n    exerciseData: deepmerge(state.settings.exerciseData, exerciseData),\n  };\n  dispatch(\n    [\n      lb<IProgramPreviewPlaygroundState>()\n        .p(\"progresses\")\n        .recordModify((progresses) => {\n          return progresses.map((wk) => {\n            return {\n              ...wk,\n              days: wk.days.map((day: IProgramPreviewPlaygroundDaySetupWithProgress) => {\n                const newProgress = Program_nextHistoryRecord(newProgram, newSettings, props.stats, day.day);\n                return {\n                  ...day,\n                  progress: newProgress,\n                };\n              }),\n            };\n          });\n        }),\n      lb<IProgramPreviewPlaygroundState>().p(\"program\").record(newProgram),\n      lb<IProgramPreviewPlaygroundState>().p(\"settings\").record(newSettings),\n    ],\n    \"Finish day\"\n  );\n}\n\nfunction buildInitialState(props: IProgramPreviewPlaygroundProps): IProgramPreviewPlaygroundState {\n  const initialEvaluatedProgram = Program_evaluate(props.program, props.settings);\n  let dayNumber = 0;\n  return {\n    program: props.program,\n    settings: props.settings,\n    isPlayground: props.isPlayground,\n    progresses: (initialEvaluatedProgram.weeks || []).map((week) => {\n      return {\n        name: week.name,\n        days: week.days.map(() => {\n          dayNumber += 1;\n          const progress = Program_nextHistoryRecord(props.program, props.settings, props.stats, dayNumber);\n          const programDay = Program_getProgramDay(initialEvaluatedProgram, dayNumber);\n          const dayExercises = programDay ? Program_getProgramDayUsedExercises(programDay) : [];\n          const exerciseTags = new Set(dayExercises.map((e) => e.tags).flat());\n          const states = ObjectUtils_filter(initialEvaluatedProgram.states, (key) => {\n            return exerciseTags.has(key);\n          });\n          return { day: dayNumber, states, progress };\n        }),\n      };\n    }),\n  };\n}\n\n// --- Inner rendering shared by both local and nav variants ---\n\ninterface IProgramPreviewPlaygroundInnerProps {\n  props: IProgramPreviewPlaygroundProps;\n  state: IProgramPreviewPlaygroundState;\n  dispatch: ILensDispatch<IProgramPreviewPlaygroundState>;\n  evaluatedProgram: IEvaluatedProgram;\n}\n\ninterface IPlaygroundWeekContentProps {\n  week: { name: string; days: IProgramPreviewPlaygroundDaySetupWithProgress[] };\n  weekIndex: number;\n  state: IProgramPreviewPlaygroundState;\n  props: IProgramPreviewPlaygroundProps;\n  dispatch: ILensDispatch<IProgramPreviewPlaygroundState>;\n  evaluatedProgram: IEvaluatedProgram;\n  handleProgressChange: (wIndex: number, dayIndex: number, newProgress: IHistoryRecord) => void;\n  handleFinish: (wIndex: number, dayIndex: number) => void;\n}\n\nfunction PlaygroundWeekContent(p: IPlaygroundWeekContentProps): JSX.Element {\n  const { week, weekIndex, state, props, dispatch, evaluatedProgram, handleProgressChange, handleFinish } = p;\n  const programWeekDescription = evaluatedProgram.weeks[weekIndex]?.description;\n  const visibleDays = useProgressiveItems(week.days, {\n    initialBatch: 1,\n    batchSize: 1,\n    debugLabel: `Playground/week-${weekIndex}`,\n  });\n  return (\n    <View>\n      {programWeekDescription && (\n        <View className=\"mx-4\">\n          <SimpleMarkdown value={programWeekDescription} className=\"text-sm\" />\n        </View>\n      )}\n      <View className=\"flex-row flex-wrap justify-center mt-4\" style={{ gap: 24 }}>\n        {visibleDays.map((d: IProgramPreviewPlaygroundDaySetupWithProgress, i) => {\n          return (\n            <View key={i} style={{ maxWidth: 384, minWidth: 288 }} className=\"flex-1\">\n              <ProgramPreviewPlaygroundDay\n                weekName={state.progresses.length > 1 ? week.name : undefined}\n                day={d.day}\n                weekIndex={weekIndex}\n                dayIndex={i}\n                program={evaluatedProgram}\n                progress={d.progress}\n                settings={state.settings}\n                isPlayground={state.isPlayground}\n                stats={props.stats}\n                onProgressChange={handleProgressChange}\n                onFinish={handleFinish}\n              />\n              {!props.useNavModals && (\n                <WebWorkoutModals\n                  progress={d.progress}\n                  dispatch={buildDayDispatch(dispatch, weekIndex, i, d.progress, props.settings, props.stats)}\n                  settings={state.settings}\n                  program={evaluatedProgram}\n                  day={d.day}\n                  onProgramChange={(newEvaluatedProgram) =>\n                    playgroundOnProgramChange(dispatch, newEvaluatedProgram, props.stats, state)\n                  }\n                  onSettingsChange={(newSettings) =>\n                    playgroundOnSettingsChange(dispatch, newSettings, props.stats, evaluatedProgram)\n                  }\n                />\n              )}\n            </View>\n          );\n        })}\n      </View>\n    </View>\n  );\n}\n\nfunction ProgramPreviewPlaygroundInner(p: IProgramPreviewPlaygroundInnerProps): JSX.Element {\n  const { props, state, dispatch, evaluatedProgram } = p;\n\n  const stateRef = useRef(state);\n  stateRef.current = state;\n  const propsRef = useRef(props);\n  propsRef.current = props;\n\n  const handleProgressChange = useCallback(\n    (weekIndex: number, dayIndex: number, newProgress: IHistoryRecord) => {\n      onProgressChange(dispatch, weekIndex, dayIndex, newProgress);\n    },\n    [dispatch]\n  );\n\n  const handleFinish = useCallback(\n    (weekIndex: number, dayIndex: number) => {\n      const s = stateRef.current;\n      const pp = propsRef.current;\n      const d = s.progresses[weekIndex].days[dayIndex];\n      onFinish(dispatch, pp, s, d);\n    },\n    [dispatch]\n  );\n\n  if (props.showAllWeeks && !props.isPlayground) {\n    return (\n      <ProgramPreviewAllWeeks\n        {...props}\n        state={state}\n        dispatch={dispatch}\n        evaluatedProgram={evaluatedProgram}\n        handleProgressChange={handleProgressChange}\n        handleFinish={handleFinish}\n      />\n    );\n  }\n\n  return (\n    <ProgramPreviewPlaygroundInnerRenderer\n      headerContent={props.headerContent}\n      weekNames={state.progresses.map((w) => w.name)}\n      singleWeek={state.progresses.length <= 1}\n      renderWeekContent={(weekIndex) => (\n        <PlaygroundWeekContent\n          week={state.progresses[weekIndex]}\n          weekIndex={weekIndex}\n          state={state}\n          props={props}\n          dispatch={dispatch}\n          evaluatedProgram={evaluatedProgram}\n          handleProgressChange={handleProgressChange}\n          handleFinish={handleFinish}\n        />\n      )}\n      scrollableTabsProps={props.scrollableTabsProps}\n      hasNavbar={props.hasNavbar}\n      scrollTabZIndex={props.scrollTabZIndex}\n      externalWeekIndex={props.externalWeekIndex}\n      hideWeekTabBar={props.hideWeekTabBar}\n    />\n  );\n}\n\n// --- Local variant (standalone web pages) ---\n\nfunction ProgramPreviewPlaygroundLocal(props: IProgramPreviewPlaygroundProps): JSX.Element {\n  const initialState = useMemo(() => buildInitialState(props), [props.program, props.settings]);\n  const [state, dispatch] = useLensReducer(initialState, {}, [\n    () => {\n      if (props.onEngage) {\n        props.onEngage();\n      }\n    },\n  ]);\n  const evaluatedProgram = useMemo(() => {\n    return Program_evaluate(state.program, state.settings);\n  }, [state.program, state.settings]);\n\n  return (\n    <ProgramPreviewPlaygroundInner\n      props={props}\n      state={state}\n      dispatch={dispatch}\n      evaluatedProgram={evaluatedProgram}\n    />\n  );\n}\n\n// --- Nav variant (app, uses global state.playgroundState) ---\n\nfunction buildGlobalPlaygroundDispatch(globalDispatch: IDispatch): ILensDispatch<IProgramPreviewPlaygroundState> {\n  return (lensRecordings, desc) => {\n    const recordings = Array.isArray(lensRecordings) ? lensRecordings : [lensRecordings];\n    updateState(\n      globalDispatch,\n      recordings.map((lr) =>\n        lb<IState>()\n          .pi(\"playgroundState\")\n          .recordModify((s) => lr.fn(s))\n      ),\n      desc\n    );\n  };\n}\n\nfunction ProgramPreviewPlaygroundNav(props: IProgramPreviewPlaygroundProps): JSX.Element {\n  const { state: globalState, dispatch: globalDispatch } = useAppState();\n  const initialState = useMemo(() => buildInitialState(props), [props.program, props.settings]);\n\n  useEffect(() => {\n    updateState(\n      globalDispatch,\n      [lb<IState>().p(\"playgroundState\").record(initialState)],\n      \"Initialize playground state\"\n    );\n    return () => {\n      updateState(globalDispatch, [lb<IState>().p(\"playgroundState\").record(undefined)], \"Cleanup playground state\");\n    };\n  }, [initialState]);\n\n  const state = globalState.playgroundState ?? initialState;\n  const dispatch = useMemo(() => buildGlobalPlaygroundDispatch(globalDispatch), [globalDispatch]);\n\n  const evaluatedProgram = useMemo(() => {\n    return Program_evaluate(state.program, state.settings);\n  }, [state.program, state.settings]);\n\n  return (\n    <ProgramPreviewPlaygroundInner\n      props={props}\n      state={state}\n      dispatch={dispatch}\n      evaluatedProgram={evaluatedProgram}\n    />\n  );\n}\n\n// --- Entry point ---\n\nexport const ProgramPreviewPlayground = memo((props: IProgramPreviewPlaygroundProps): JSX.Element => {\n  usePerfRenderCount(\"ProgramPreviewPlayground\");\n  if (props.useNavModals) {\n    return <ProgramPreviewPlaygroundNav {...props} />;\n  }\n  return <ProgramPreviewPlaygroundLocal {...props} />;\n});\n\n// --- All Weeks layout ---\n\ninterface IProgramPreviewAllWeeksProps extends IProgramPreviewPlaygroundProps {\n  evaluatedProgram: IEvaluatedProgram;\n  state: IProgramPreviewPlaygroundState;\n  dispatch: ILensDispatch<IProgramPreviewPlaygroundState>;\n  handleProgressChange: (weekIndex: number, dayIndex: number, newProgress: IHistoryRecord) => void;\n  handleFinish: (weekIndex: number, dayIndex: number) => void;\n}\n\nfunction buildAllWeeksCss(numWeeks: number): string {\n  const minCol = 20;\n  const gap = 1;\n  const rules: string[] = [];\n\n  rules.push(\n    `.preview-all-weeks-scroll { overflow-x: auto; container-type: inline-size; container-name: preview-weeks; scroll-snap-type: x mandatory; }`,\n    `.preview-all-weeks-grid { display: grid; gap: ${gap}rem; align-items: start; ` +\n      `grid-template-columns: repeat(${numWeeks}, minmax(${minCol}rem, 24rem)); }`\n  );\n\n  for (let n = 1; n < numWeeks; n++) {\n    const breakpoint = n === 1 ? 0 : n * minCol + (n - 1) * gap;\n    rules.push(\n      `@container preview-weeks (min-width: ${breakpoint}rem) {` +\n        ` .preview-all-weeks-grid {` +\n        ` grid-template-columns: repeat(${numWeeks}, calc((100cqi - ${n - 1}rem) / ${n})); } }`\n    );\n  }\n\n  const allFitBreakpoint = numWeeks * minCol + (numWeeks - 1) * gap;\n  rules.push(\n    `@container preview-weeks (min-width: ${allFitBreakpoint}rem) {` +\n      ` .preview-all-weeks-grid {` +\n      ` grid-template-columns: repeat(${numWeeks}, minmax(${minCol}rem, 24rem)); justify-content: center; } }`\n  );\n\n  return rules.join(\"\\n\");\n}\n\nfunction ProgramPreviewAllWeeks(props: IProgramPreviewAllWeeksProps): JSX.Element {\n  const { state, dispatch, evaluatedProgram, handleProgressChange, handleFinish } = props;\n  const numWeeks = state.progresses.length;\n  const cssRules = useMemo(() => buildAllWeeksCss(numWeeks), [numWeeks]);\n\n  return (\n    <div>\n      <style dangerouslySetInnerHTML={{ __html: cssRules }} />\n      <div className=\"preview-all-weeks-scroll\">\n        <div className=\"preview-all-weeks-grid\">\n          {state.progresses.map((week, weekIndex) => {\n            const programWeekDescription = evaluatedProgram.weeks[weekIndex]?.description;\n            return (\n              <div key={weekIndex} style={{ gridColumn: weekIndex + 1, gridRow: 1, scrollSnapAlign: \"start\" }}>\n                <h3 className=\"mb-1 text-lg font-bold\">{week.name}</h3>\n                {programWeekDescription && (\n                  <div className=\"text-sm\">\n                    <SimpleMarkdown value={programWeekDescription} />\n                  </div>\n                )}\n              </div>\n            );\n          })}\n          {state.progresses.map((week, weekIndex) =>\n            week.days.map((d: IProgramPreviewPlaygroundDaySetupWithProgress, i: number) => (\n              <div key={d.day} style={{ gridColumn: weekIndex + 1, gridRow: i + 2 }}>\n                <ProgramPreviewPlaygroundDay\n                  weekName={numWeeks > 1 ? week.name : undefined}\n                  day={d.day}\n                  weekIndex={weekIndex}\n                  dayIndex={i}\n                  program={evaluatedProgram}\n                  progress={d.progress}\n                  settings={props.settings}\n                  isPlayground={props.isPlayground}\n                  stats={props.stats}\n                  onProgressChange={handleProgressChange}\n                  onFinish={handleFinish}\n                />\n                {!props.useNavModals && (\n                  <WebWorkoutModals\n                    progress={d.progress}\n                    dispatch={buildDayDispatch(dispatch, weekIndex, i, d.progress, props.settings, props.stats)}\n                    settings={state.settings}\n                    program={evaluatedProgram}\n                    day={d.day}\n                    onProgramChange={(newEvaluatedProgram) =>\n                      playgroundOnProgramChange(dispatch, newEvaluatedProgram, props.stats, state)\n                    }\n                    onSettingsChange={(newSettings) =>\n                      playgroundOnSettingsChange(dispatch, newSettings, props.stats, evaluatedProgram)\n                    }\n                  />\n                )}\n              </div>\n            ))\n          )}\n        </div>\n      </div>\n    </div>\n  );\n}\n","import { JSX, memo, useCallback, useMemo } from \"react\";\nimport { View } from \"react-native\";\nimport { Text } from \"../primitives/text\";\nimport { buildCardsReducer, ICardsAction } from \"../../ducks/reducer\";\nimport { IHistoryRecord, ISettings, IStats } from \"../../types\";\nimport { IDispatch } from \"../../ducks/types\";\nimport { ProgramPreviewPlaygroundExercise } from \"./programPreviewPlaygroundExercise\";\nimport { lb } from \"lens-shmens\";\nimport { Button } from \"../button\";\nimport { IEvaluatedProgram, Program_getProgramDay, Program_getProgramDayUsedExercises } from \"../../models/program\";\nimport { StringUtils_dashcase } from \"../../utils/string\";\nimport { SimpleMarkdown } from \"../simpleMarkdown\";\nimport { Scroller } from \"../scroller\";\nimport { WorkoutExerciseThumbnail } from \"../workoutExerciseThumbnail\";\nimport { updateProgress } from \"../../models/state\";\nimport { Progress_getColorToSupersetGroup } from \"../../models/progress\";\n\ninterface IProgramPreviewPlaygroundDayProps {\n  program: IEvaluatedProgram;\n  weekName?: string;\n  day: number;\n  weekIndex: number;\n  dayIndex: number;\n  isPlayground: boolean;\n  settings: ISettings;\n  progress: IHistoryRecord;\n  onProgressChange: (weekIndex: number, dayIndex: number, newProgress: IHistoryRecord) => void;\n  stats: IStats;\n  onFinish: (weekIndex: number, dayIndex: number) => void;\n}\n\nexport const ProgramPreviewPlaygroundDay = memo((props: IProgramPreviewPlaygroundDayProps): JSX.Element => {\n  const { weekIndex, dayIndex, onProgressChange, onFinish } = props;\n  const dispatch: IDispatch = useCallback(\n    async (action) => {\n      const newProgress = buildCardsReducer(\n        props.settings,\n        props.stats,\n        undefined\n      )(props.progress, action as ICardsAction);\n      onProgressChange(weekIndex, dayIndex, newProgress);\n    },\n    [props.settings, props.progress, onProgressChange, weekIndex, dayIndex]\n  );\n  const handleFinish = useCallback(() => onFinish(weekIndex, dayIndex), [onFinish, weekIndex, dayIndex]);\n\n  const programDay = Program_getProgramDay(props.program, props.day)!;\n  const index = props.progress.currentEntryIndex ?? 0;\n  const entry = props.progress.entries[index];\n  const dayExercises = programDay ? Program_getProgramDayUsedExercises(programDay) : [];\n  const programExercises = props.isPlayground\n    ? dayExercises.filter((e) => e.key === entry.programExerciseId)\n    : dayExercises;\n\n  return (\n    <View\n      data-testid={`preview-day-${StringUtils_dashcase(programDay.name)}`}\n      testID={`preview-day-${StringUtils_dashcase(programDay.name)}`}\n    >\n      <Text className=\"mx-4 mb-1 text-lg font-bold\" data-testid=\"preview-day-name\" testID=\"preview-day-name\">\n        {props.weekName ? `${props.weekName} - ` : \"\"}\n        {programDay.name}\n      </Text>\n      {programDay.description && (\n        <View className=\"mx-4\">\n          <SimpleMarkdown value={programDay.description} className=\"text-sm\" />\n        </View>\n      )}\n      {props.isPlayground && (\n        <View className=\"mb-2\">\n          <PreviewListOfExercises\n            isPlayground={props.isPlayground}\n            progress={props.progress}\n            settings={props.settings}\n            dispatch={dispatch}\n          />\n        </View>\n      )}\n      {(programExercises ?? []).map((programExercise, i) => {\n        const anEntry = props.progress.entries.find((e) => e.programExerciseId === programExercise.key);\n        if (!anEntry) {\n          return null;\n        }\n        return (\n          <ProgramPreviewPlaygroundExercise\n            key={programExercise.key}\n            entry={anEntry}\n            dayIndex={props.day}\n            progress={props.progress}\n            isPlayground={props.isPlayground}\n            programExercise={programExercise}\n            program={props.program}\n            index={props.isPlayground ? index : i}\n            settings={props.settings}\n            stats={props.stats}\n            dispatch={dispatch}\n          />\n        );\n      })}\n      {props.isPlayground && (\n        <View className=\"items-center\">\n          <Button\n            name=\"finish-day-details-playground\"\n            kind=\"purple\"\n            onClick={handleFinish}\n            data-testid=\"finish-day-details-playground\"\n            testID=\"finish-day-details-playground\"\n          >\n            Finish this day\n          </Button>\n        </View>\n      )}\n    </View>\n  );\n});\n\ninterface IPreviewListOfExercisesProps {\n  isPlayground: boolean;\n  progress: IHistoryRecord;\n  settings: ISettings;\n  dispatch: IDispatch;\n}\n\nfunction PreviewListOfExercises(props: IPreviewListOfExercisesProps): JSX.Element {\n  const colorToSupersetGroup = useMemo(() => Progress_getColorToSupersetGroup(props.progress), [props.progress]);\n  const dispatch = props.dispatch;\n  const onSelect = useCallback(\n    (entryIndex: number) => {\n      updateProgress(dispatch, [lb<IHistoryRecord>().p(\"currentEntryIndex\").record(entryIndex)], \"click-exercise-tab\");\n    },\n    [dispatch]\n  );\n  const currentIdx = props.progress.currentEntryIndex ?? 0;\n  const currentSuperset = props.progress.entries[currentIdx]?.superset;\n  return (\n    <Scroller>\n      <View className=\"flex-row items-center gap-1 px-4\">\n        {props.progress.entries.map((entry, entryIndex) => (\n          <WorkoutExerciseThumbnail\n            colorToSupersetGroup={colorToSupersetGroup}\n            onSelect={onSelect}\n            shouldShowProgress={props.isPlayground}\n            isCurrent={entryIndex === currentIdx}\n            currentSuperset={currentSuperset}\n            key={entryIndex}\n            settings={props.settings}\n            entry={entry}\n            entryIndex={entryIndex}\n          />\n        ))}\n      </View>\n    </Scroller>\n  );\n}\n","import { JSX, memo } from \"react\";\nimport { View, Pressable } from \"react-native\";\nimport { Text } from \"../primitives/text\";\nimport { ExerciseImage } from \"../exerciseImage\";\nimport { SimpleMarkdown } from \"../simpleMarkdown\";\nimport {\n  equipmentName,\n  Exercise_get,\n  Exercise_getNotes,\n  Exercise_nameWithEquipment,\n  Exercise_fullName,\n} from \"../../models/exercise\";\nimport { IHistoryEntry, IHistoryRecord, IProgramState, ISettings, IStats } from \"../../types\";\nimport { ComparerUtils_noFns } from \"../../utils/comparer\";\nimport { IDispatch } from \"../../ducks/types\";\nimport { Reps_isFinished, Reps_isCompleted } from \"../../models/set\";\nimport { IconCheckCircle } from \"../icons/iconCheckCircle\";\nimport { IconEditSquare } from \"../icons/iconEditSquare\";\nimport { lb } from \"lens-shmens\";\nimport { IEvaluatedProgram, Program_getDayData } from \"../../models/program\";\nimport { HistoryRecordSetsView } from \"../historyRecordSets\";\nimport { StringUtils_dashcase } from \"../../utils/string\";\nimport { IPlannerProgramExercise } from \"../../pages/planner/models/types\";\nimport { PlannerProgramExercise_currentDescription } from \"../../pages/planner/models/plannerProgramExercise\";\nimport { WorkoutExerciseAllSets } from \"../workoutExerciseAllSets\";\nimport { WorkoutExerciseUtils_getBgColor50 } from \"../../utils/workoutExerciseUtils\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\nimport { Equipment_getEquipmentNameForExerciseType } from \"../../models/equipment\";\nimport { GroupHeader } from \"../groupHeader\";\nimport { Progress_getNextSupersetEntry } from \"../../models/progress\";\n\ninterface IProps {\n  entry: IHistoryEntry;\n  programExercise: IPlannerProgramExercise;\n  program: IEvaluatedProgram;\n  stats: IStats;\n  settings: ISettings;\n  progress: IHistoryRecord;\n  dayIndex: number;\n  isPlayground: boolean;\n  index: number;\n  staticState?: IProgramState;\n  dispatch: IDispatch;\n}\n\nfunction getColor(entry: IHistoryEntry): string {\n  if (entry.sets.length === 0) {\n    return \"purple\";\n  }\n  if (Reps_isFinished(entry.sets)) {\n    if (Reps_isCompleted(entry.sets)) {\n      return \"green\";\n    } else {\n      return \"red\";\n    }\n  } else {\n    return \"purple\";\n  }\n}\n\nfunction getBgColor100(entry: IHistoryEntry): string {\n  const color = getColor(entry);\n  if (color === \"green\") {\n    return \"bg-greenv2-100\";\n  } else if (color === \"red\") {\n    return \"bg-redv2-100\";\n  } else {\n    return \"bg-background-cardpurple\";\n  }\n}\n\nexport const ProgramPreviewPlaygroundExercise = memo((props: IProps): JSX.Element => {\n  return props.isPlayground ? (\n    <ProgramPreviewPlayground\n      stats={props.stats}\n      entry={props.entry}\n      programExercise={props.programExercise}\n      program={props.program}\n      settings={props.settings}\n      progress={props.progress}\n      dayIndex={props.dayIndex}\n      index={props.index}\n      staticState={props.staticState}\n      dispatch={props.dispatch}\n    />\n  ) : (\n    <ProgramPreviewHistoryRecordSets\n      entry={props.entry}\n      programExercise={props.programExercise}\n      settings={props.settings}\n      index={props.index}\n      dispatch={props.dispatch}\n    />\n  );\n}, ComparerUtils_noFns);\n\ninterface IProgramPreviewHistoryRecordSetsProps {\n  entry: IHistoryEntry;\n  programExercise: IPlannerProgramExercise;\n  settings: ISettings;\n  index: number;\n  dispatch: IDispatch;\n}\n\nfunction ProgramPreviewHistoryRecordSets(props: IProgramPreviewHistoryRecordSetsProps): JSX.Element {\n  const exercise = Exercise_get(props.entry.exercise, props.settings.exercises);\n  const equipment = exercise.equipment;\n  const programExercise = props.programExercise;\n  const description = PlannerProgramExercise_currentDescription(programExercise);\n\n  return (\n    <View\n      className={`py-2 px-2 mx-4 mb-3 rounded-lg ${getBgColor100(props.entry)} relative`}\n      data-testid={StringUtils_dashcase(exercise.name)}\n      testID={StringUtils_dashcase(exercise.name)}\n    >\n      <View className=\"flex-row items-center gap-2\">\n        <PlaygroundExerciseTopBar\n          dispatch={props.dispatch}\n          index={props.index}\n          entry={props.entry}\n          programExercise={props.programExercise}\n          isPlayground={false}\n        />\n        <View className=\"w-scaled-10\">\n          <View className=\"p-1 rounded-lg bg-background-image\">\n            <ExerciseImage settings={props.settings} className=\"w-full\" exerciseType={exercise} size=\"small\" />\n          </View>\n        </View>\n        <View className=\"flex-1 ml-auto\" style={{ minWidth: 64 }}>\n          <View className=\"flex-row items-center\">\n            <Text className=\"flex-1 mr-1 text-sm font-bold\">{exercise.name}</Text>\n          </View>\n          {equipment && <Text className=\"text-sm text-text-secondary\">{equipmentName(equipment)}</Text>}\n        </View>\n        <View className=\"mt-1 ml-1\">\n          <HistoryRecordSetsView sets={props.entry.sets} units={props.settings.units} isNext={true} />\n        </View>\n      </View>\n      {description && (\n        <View className=\"mt-1\">\n          <SimpleMarkdown value={description} className=\"text-sm\" />\n        </View>\n      )}\n    </View>\n  );\n}\n\ninterface IProgramPreviewPlaygroundProps {\n  entry: IHistoryEntry;\n  programExercise: IPlannerProgramExercise;\n  program: IEvaluatedProgram;\n  settings: ISettings;\n  stats: IStats;\n  progress: IHistoryRecord;\n  dayIndex: number;\n  index: number;\n  staticState?: IProgramState;\n  dispatch: IDispatch;\n}\n\nfunction ProgramPreviewPlayground(props: IProgramPreviewPlaygroundProps): JSX.Element {\n  const exercise = Exercise_get(props.entry.exercise, props.settings.exercises);\n  const programExercise = props.programExercise;\n  const dayData = Program_getDayData(props.program, props.dayIndex);\n  const description = PlannerProgramExercise_currentDescription(programExercise);\n  const currentEquipmentName = Equipment_getEquipmentNameForExerciseType(props.settings, exercise);\n  const exerciseNotes = Exercise_getNotes(props.entry.exercise, props.settings);\n  const supersetEntry = Progress_getNextSupersetEntry(props.progress.entries, props.entry);\n  const supersetExercise = supersetEntry ? Exercise_get(supersetEntry.exercise, props.settings.exercises) : undefined;\n\n  return (\n    <View\n      className={`pt-2 pb-2 mb-6 rounded-lg ${WorkoutExerciseUtils_getBgColor50(props.entry.sets, false)} relative`}\n      data-testid={`entry-${StringUtils_dashcase(exercise.name)}`}\n      testID={`entry-${StringUtils_dashcase(exercise.name)}`}\n    >\n      <View>\n        <PlaygroundExerciseTopBar\n          dispatch={props.dispatch}\n          index={props.index}\n          entry={props.entry}\n          programExercise={props.programExercise}\n          isPlayground={true}\n          xOffset={20}\n        />\n        <View className=\"flex-row items-center mx-4\">\n          <View className=\"w-scaled-10 mr-1\">\n            <View className=\"p-1 rounded-lg bg-background-image\">\n              <ExerciseImage settings={props.settings} className=\"w-full\" exerciseType={exercise} size=\"small\" />\n            </View>\n          </View>\n          <View className=\"flex-1 ml-auto\" style={{ minWidth: 64 }}>\n            <View className=\"flex-row items-center\">\n              <Text className=\"flex-1 mr-1 font-bold\">{Exercise_nameWithEquipment(exercise, props.settings)}</Text>\n            </View>\n            <Text data-testid=\"exercise-equipment\" testID=\"exercise-equipment\" className=\"text-xs text-text-secondary\">\n              Equipment: <Text className=\"text-xs font-bold text-text-secondary\">{currentEquipmentName || \"None\"}</Text>\n            </Text>\n            {supersetExercise && (\n              <Text data-testid=\"exercise-superset\" testID=\"exercise-superset\" className=\"text-xs text-text-secondary\">\n                Supersets with:{\" \"}\n                <Text className=\"text-xs font-bold text-text-secondary\">\n                  {Exercise_fullName(supersetExercise, props.settings)}\n                </Text>\n              </Text>\n            )}\n          </View>\n        </View>\n        {exerciseNotes && (\n          <View className=\"mt-1\">\n            {exerciseNotes && description && <GroupHeader name=\"Exercise Notes\" />}\n            <SimpleMarkdown value={exerciseNotes} className=\"text-sm\" />\n          </View>\n        )}\n        {description && (\n          <View className=\"mt-1\">\n            {exerciseNotes && description && <GroupHeader name=\"Program Exercise Description\" />}\n            <SimpleMarkdown value={description} className=\"text-sm\" />\n          </View>\n        )}\n        <View className=\"mt-1\">\n          <WorkoutExerciseAllSets\n            isPlayground={true}\n            day={dayData.day}\n            isCurrentProgress={true}\n            program={props.program}\n            programExercise={props.programExercise}\n            stats={props.stats}\n            entry={props.entry}\n            entryIndex={props.index}\n            otherStates={props.program.states}\n            userPromptedStateVars={props.progress.userPromptedStateVars?.[props.programExercise.key]}\n            exerciseType={props.entry.exercise}\n            lbSets={lb<IHistoryRecord>().p(\"entries\").i(props.index).p(\"sets\")}\n            lbWarmupSets={lb<IHistoryRecord>().p(\"entries\").i(props.index).p(\"warmupSets\")}\n            settings={props.settings}\n            dispatch={props.dispatch}\n            subscription={undefined}\n          />\n        </View>\n      </View>\n    </View>\n  );\n}\n\ninterface IPlaygroundExerciseTopBarProps {\n  dispatch: IDispatch;\n  index: number;\n  entry: IHistoryEntry;\n  programExercise: IPlannerProgramExercise;\n  isPlayground: boolean;\n  xOffset?: number;\n}\n\nfunction PlaygroundExerciseTopBar(props: IPlaygroundExerciseTopBarProps): JSX.Element {\n  return (\n    <View\n      className=\"absolute z-0 px-2 py-1 rounded-full bg-background-neutral\"\n      style={{ right: -12 + (props.xOffset ?? 0), top: -18 }}\n    >\n      <View className=\"flex-row items-center gap-2\">\n        <Pressable\n          data-testid=\"program-preview-edit-exercise\"\n          testID=\"program-preview-edit-exercise\"\n          onPress={() => {\n            props.dispatch({\n              type: \"UpdateProgress\",\n              lensRecordings: [lb<IHistoryRecord>().pi(\"ui\", {}).p(\"editModal\").record(undefined)],\n              desc: \"clear-edit-modal\",\n            });\n            setTimeout(() => {\n              props.dispatch({\n                type: \"UpdateProgress\",\n                lensRecordings: [\n                  lb<IHistoryRecord>()\n                    .pi(\"ui\", {})\n                    .p(\"editModal\")\n                    .record({ programExerciseId: props.programExercise.key, entryIndex: props.index }),\n                ],\n                desc: \"open-edit-exercise-modal\",\n              });\n            }, 0);\n          }}\n        >\n          <IconEditSquare color={Tailwind_semantic().icon.neutralsubtle} />\n        </Pressable>\n        {props.isPlayground && (\n          <Pressable\n            data-testid=\"program-preview-complete-exercise\"\n            testID=\"program-preview-complete-exercise\"\n            onPress={() => {\n              props.dispatch({\n                type: \"UpdateProgress\",\n                lensRecordings: [\n                  lb<IHistoryRecord>()\n                    .pi(\"entries\")\n                    .i(props.index)\n                    .p(\"sets\")\n                    .recordModify((sets) =>\n                      sets.map((s) => {\n                        const newSet = { ...s, completedReps: s.reps, completedWeight: s.weight };\n                        return newSet.completedReps != null && newSet.completedWeight != null\n                          ? { ...newSet, isCompleted: true }\n                          : s;\n                      })\n                    ),\n                  lb<IHistoryRecord>()\n                    .pi(\"entries\")\n                    .i(props.index)\n                    .p(\"warmupSets\")\n                    .recordModify((sets) =>\n                      sets.map((s) => {\n                        const newSet = { ...s, completedReps: s.reps, completedWeight: s.weight };\n                        return newSet.completedReps != null && newSet.completedWeight != null\n                          ? { ...newSet, isCompleted: true }\n                          : s;\n                      })\n                    ),\n                ],\n                desc: \"complete-all-sets\",\n              });\n            }}\n          >\n            <IconCheckCircle isChecked={true} color={Reps_isCompleted(props.entry.sets) ? \"#38A169\" : \"#BAC4CD\"} />\n          </Pressable>\n        )}\n      </View>\n    </View>\n  );\n}\n","import { JSX, useRef, useState } from \"react\";\nimport { View } from \"react-native\";\nimport { Text } from \"../primitives/text\";\nimport { Button } from \"../button\";\nimport { MenuItemEditable } from \"../menuItemEditable\";\nimport { Modal } from \"../modal\";\nimport { Weight_is, Weight_isPct } from \"../../models/weight\";\nimport { IProgramStateMetadata, ISettings, IExerciseDataValue, IProgramState } from \"../../types\";\nimport { ObjectUtils_keys } from \"../../utils/object\";\nimport { ExerciseRM } from \"../exerciseRm\";\nimport { Exercise_get } from \"../../models/exercise\";\nimport { IPlannerProgramExercise } from \"../../pages/planner/models/types\";\nimport {\n  PlannerProgramExercise_getState,\n  PlannerProgramExercise_getStateMetadata,\n} from \"../../pages/planner/models/plannerProgramExercise\";\n\ninterface IProgramPreviewPlaygroundExerciseEditModalProps {\n  programExercise: IPlannerProgramExercise;\n  hideVariables?: boolean;\n  onClose: () => void;\n  onEditStateVariable: (stateKey: string, newValue: string) => void;\n  onEditVariable: (variableKey: keyof IExerciseDataValue, newValue: number) => void;\n  settings: ISettings;\n}\n\nexport function ProgramPreviewPlaygroundExerciseEditContent(\n  props: IProgramPreviewPlaygroundExerciseEditModalProps\n): JSX.Element | null {\n  const programExercise = props.programExercise;\n  const state = PlannerProgramExercise_getState(props.programExercise);\n  const stateMetadata = PlannerProgramExercise_getStateMetadata(props.programExercise);\n  const hasStateVariables = ObjectUtils_keys(state).length > 0;\n  const pendingStateVarsRef = useRef<Record<string, string>>({});\n  const [pendingRm, setPendingRm] = useState<string | undefined>(undefined);\n  if (!programExercise.exerciseType) {\n    return null;\n  }\n  const exercise = Exercise_get(programExercise.exerciseType, props.settings.exercises);\n  return (\n    <View style={{ minWidth: 240 }}>\n      {!props.hideVariables && (\n        <ExerciseRM\n          name=\"1 Rep Max\"\n          rmKey=\"rm1\"\n          exercise={exercise}\n          settings={props.settings}\n          displayValue={pendingRm}\n          onEditVariable={(v) => {\n            setPendingRm(String(v));\n          }}\n          onInput={(v) => {\n            setPendingRm(v);\n          }}\n        />\n      )}\n      {(hasStateVariables || props.hideVariables) && (\n        <>\n          <Text className=\"mb-2 text-lg font-bold text-center\">Edit state variables</Text>\n          {hasStateVariables ? (\n            <ProgramStateVariables\n              settings={props.settings}\n              state={state}\n              stateMetadata={stateMetadata}\n              onEditStateVariable={props.onEditStateVariable}\n              pendingRef={pendingStateVarsRef}\n            />\n          ) : (\n            <View className=\"px-4 py-2\">\n              <Text className=\"text-sm italic text-center text-text-secondary\">No state variables</Text>\n            </View>\n          )}\n        </>\n      )}\n      <View className=\"items-center mt-4\">\n        <Button\n          name=\"details-workout-playground-save-statvars\"\n          kind=\"purple\"\n          onClick={() => {\n            if (pendingRm != null) {\n              const num = parseFloat(pendingRm);\n              if (!isNaN(num)) {\n                props.onEditVariable(\"rm1\", num);\n              }\n            }\n            for (const [key, value] of Object.entries(pendingStateVarsRef.current)) {\n              props.onEditStateVariable(key, value);\n            }\n            props.onClose();\n          }}\n          data-testid=\"modal-edit-mode-save-statvars\"\n          testID=\"modal-edit-mode-save-statvars\"\n        >\n          Done\n        </Button>\n      </View>\n    </View>\n  );\n}\n\nexport function ProgramPreviewPlaygroundExerciseEditModal(\n  props: IProgramPreviewPlaygroundExerciseEditModalProps\n): JSX.Element | null {\n  return (\n    <Modal shouldShowClose={true} onClose={props.onClose}>\n      <ProgramPreviewPlaygroundExerciseEditContent {...props} />\n    </Modal>\n  );\n}\n\ninterface IStateProps {\n  state: IProgramState;\n  stateMetadata?: IProgramStateMetadata;\n  onEditStateVariable: (stateKey: string, newValue: string) => void;\n  settings: ISettings;\n  pendingRef?: React.RefObject<Record<string, string>>;\n}\n\nfunction ProgramStateVariables(props: IStateProps): JSX.Element {\n  return (\n    <View className=\"px-4 py-2 bg-background-cardpurple rounded-2xl\">\n      {ObjectUtils_keys(props.state).map((stateKey, i) => {\n        const value = props.state[stateKey];\n        const displayValue = Weight_is(value) || Weight_isPct(value) ? value.value : value;\n\n        return (\n          <MenuItemEditable\n            key={stateKey}\n            name={stateKey}\n            isBorderless={i === Object.keys(props.state).length - 1}\n            nextLine={\n              props.stateMetadata?.[stateKey]?.userPrompted ? (\n                <View style={{ marginTop: -12 }} className=\"mb-1\">\n                  <Text className=\"text-xs text-text-secondary\">User Prompted</Text>\n                </View>\n              ) : undefined\n            }\n            isNameBold={true}\n            type=\"number\"\n            value={displayValue.toString()}\n            valueUnits={Weight_is(value) || Weight_isPct(value) ? value.unit : undefined}\n            hasClear={false}\n            onChange={(v) => {\n              if (props.pendingRef && v != null) {\n                props.pendingRef.current[stateKey] = v;\n              }\n            }}\n            onInput={(v) => {\n              if (props.pendingRef) {\n                props.pendingRef.current[stateKey] = v;\n              }\n            }}\n          />\n        );\n      })}\n    </View>\n  );\n}\n","import { JSX, ReactNode } from \"react\";\nimport { IScrollableTabsProps, ScrollableTabs } from \"../scrollableTabs\";\n\nexport interface IProgramPreviewPlaygroundInnerRendererProps {\n  headerContent?: ReactNode;\n  weekNames: string[];\n  singleWeek: boolean;\n  renderWeekContent: (weekIndex: number) => JSX.Element;\n  scrollableTabsProps?: Partial<IScrollableTabsProps>;\n  hasNavbar?: boolean;\n  scrollTabZIndex?: number;\n  externalWeekIndex?: number;\n  hideWeekTabBar?: boolean;\n}\n\nexport function ProgramPreviewPlaygroundInnerRenderer(props: IProgramPreviewPlaygroundInnerRendererProps): JSX.Element {\n  if (props.hideWeekTabBar) {\n    return props.renderWeekContent(props.externalWeekIndex ?? 0);\n  }\n  return (\n    <ScrollableTabs\n      headerContent={props.headerContent}\n      offsetY={props.scrollableTabsProps?.offsetY ?? (props.hasNavbar ? \"3rem\" : undefined)}\n      zIndex={props.scrollTabZIndex}\n      shouldNotExpand={true}\n      color=\"purple\"\n      type={props.scrollableTabsProps?.type}\n      topPadding={props.scrollableTabsProps?.topPadding}\n      className={props.scrollableTabsProps?.className}\n      nonSticky={props.scrollableTabsProps?.nonSticky}\n      tabs={props.weekNames.map((name, weekIndex) => ({\n        label: name,\n        children: () => props.renderWeekContent(weekIndex),\n      }))}\n    />\n  );\n}\n","import { JSX } from \"react\";\nimport { IHistoryRecord, ISettings } from \"../../types\";\nimport { IDispatch } from \"../../ducks/types\";\nimport { ModalAmrap } from \"../modalAmrap\";\nimport { Modal } from \"../modal\";\nimport { SetTimerBannerContent } from \"../setTimerBanner\";\nimport { SetTimerEditContent } from \"../setTimerEdit\";\nimport { WeightRoundingInfoContent } from \"../weightRoundingInfo\";\nimport { BottomSheetEditTarget } from \"../bottomSheetEditTarget\";\nimport { ProgramPreviewPlaygroundExerciseEditModal } from \"./programPreviewPlaygroundExerciseEditModal\";\nimport { lb } from \"lens-shmens\";\nimport { EditProgramLenses_properlyUpdateStateVariable } from \"../../models/editProgramLenses\";\nimport {\n  IEvaluatedProgram,\n  Program_getProgramExercise,\n  Program_getDayData,\n  Program_stateValue,\n} from \"../../models/program\";\nimport { Exercise_toKey } from \"../../models/exercise\";\nimport { Weight_build } from \"../../models/weight\";\nimport { PlannerProgramExercise_getState } from \"../../pages/planner/models/plannerProgramExercise\";\n\ninterface IWebWorkoutModalsProps {\n  progress: IHistoryRecord;\n  dispatch: IDispatch;\n  settings: ISettings;\n  program: IEvaluatedProgram;\n  day: number;\n  onProgramChange: (newProgram: IEvaluatedProgram) => void;\n  onSettingsChange: (newSettings: ISettings) => void;\n}\n\nexport function WebWorkoutModals(props: IWebWorkoutModalsProps): JSX.Element {\n  const editModalProgramExerciseId = props.progress.ui?.editModal?.programExerciseId;\n  const editModalProgramExercise = editModalProgramExerciseId\n    ? Program_getProgramExercise(props.day, props.program, editModalProgramExerciseId)\n    : undefined;\n\n  const setTimerModal = props.progress.setTimer;\n  // A timed AMRAP set keeps setTimer set behind the amrap modal (see Progress_proceedAfterTimedSet) — yield to\n  // the amrap modal here like SetTimerBannerContent does, so the set-timer shell doesn't show behind it.\n  const showSetTimerModal = setTimerModal != null && props.progress.amrapModal == null;\n  const closeSetTimerModal = (): void => {\n    props.dispatch({ type: \"CloseSetTimerAction\", isPlayground: true });\n  };\n\n  const setTimerEditModal = props.progress.ui?.setTimerEditModal;\n  const setTimerEditSet = setTimerEditModal\n    ? props.progress.entries[setTimerEditModal.entryIndex]?.sets[setTimerEditModal.setIndex]\n    : undefined;\n  const closeSetTimerEditModal = (): void => {\n    props.dispatch({\n      type: \"UpdateProgress\",\n      lensRecordings: [lb<IHistoryRecord>().pi(\"ui\", {}).p(\"setTimerEditModal\").record(undefined)],\n      desc: \"close-set-timer-edit\",\n    });\n  };\n\n  const roundingModal = props.progress.ui?.roundingModal;\n  const roundingEntry = roundingModal ? props.progress.entries[roundingModal.entryIndex] : undefined;\n  const roundingSet = roundingModal ? roundingEntry?.sets[roundingModal.setIndex] : undefined;\n  const closeRoundingModal = (): void => {\n    props.dispatch({\n      type: \"UpdateProgress\",\n      lensRecordings: [lb<IHistoryRecord>().pi(\"ui\", {}).p(\"roundingModal\").record(undefined)],\n      desc: \"close-rounding-info\",\n    });\n  };\n\n  return (\n    <>\n      {showSetTimerModal && setTimerModal && (\n        <Modal maxWidth=\"480px\" isHidden={false} isFullWidth={true} shouldShowClose={true} onClose={closeSetTimerModal}>\n          <SetTimerBannerContent\n            progress={props.progress}\n            settings={props.settings}\n            setTimerModal={setTimerModal}\n            dispatch={props.dispatch}\n            onClose={closeSetTimerModal}\n            isPlayground={true}\n            programExercise={Program_getProgramExercise(\n              props.day,\n              props.program,\n              props.progress.entries[setTimerModal.entryIndex]?.programExerciseId\n            )}\n            otherStates={props.program.states}\n          />\n        </Modal>\n      )}\n      {setTimerEditModal && setTimerEditSet && (\n        <Modal\n          maxWidth=\"480px\"\n          isHidden={false}\n          isFullWidth={true}\n          shouldShowClose={true}\n          onClose={closeSetTimerEditModal}\n        >\n          <SetTimerEditContent\n            set={setTimerEditSet}\n            entryIndex={setTimerEditModal.entryIndex}\n            setIndex={setTimerEditModal.setIndex}\n            dispatch={props.dispatch}\n          />\n        </Modal>\n      )}\n      {roundingModal && roundingEntry && roundingSet && (\n        <Modal maxWidth=\"480px\" isHidden={false} isFullWidth={true} shouldShowClose={true} onClose={closeRoundingModal}>\n          <WeightRoundingInfoContent\n            set={roundingSet}\n            exerciseType={roundingEntry.exercise}\n            settings={props.settings}\n          />\n        </Modal>\n      )}\n      {props.progress.amrapModal && (\n        <ModalAmrap\n          isPlayground={true}\n          progress={props.progress}\n          dispatch={props.dispatch}\n          settings={props.settings}\n          programExercise={Program_getProgramExercise(\n            props.day,\n            props.program,\n            props.progress.entries[props.progress.amrapModal?.entryIndex || 0]?.programExerciseId\n          )}\n          otherStates={props.program.states}\n        />\n      )}\n      <BottomSheetEditTarget\n        settings={props.settings}\n        progress={props.progress}\n        dispatch={props.dispatch}\n        editSetModal={props.progress.ui?.editSetModal}\n        isHidden={props.progress.ui?.editSetModal == null}\n        onClose={() => {\n          props.dispatch({\n            type: \"UpdateProgress\",\n            lensRecordings: [lb<IHistoryRecord>().pi(\"ui\", {}).p(\"editSetModal\").record(undefined)],\n            desc: \"close-bottomsheet-target\",\n          });\n        }}\n      />\n      {editModalProgramExercise && (\n        <ProgramPreviewPlaygroundExerciseEditModal\n          onClose={() =>\n            props.dispatch({\n              type: \"UpdateProgress\",\n              lensRecordings: [lb<IHistoryRecord>().pi(\"ui\", {}).p(\"editModal\").record(undefined)],\n              desc: \"close-playground-exercise-edit-modal\",\n            })\n          }\n          onEditStateVariable={(stateKey, newValue) => {\n            const dayData = Program_getDayData(props.program, props.day);\n            const lensRecording = EditProgramLenses_properlyUpdateStateVariable(\n              lb<IEvaluatedProgram>()\n                .p(\"weeks\")\n                .i(dayData.week - 1)\n                .p(\"days\")\n                .i(dayData.dayInWeek - 1)\n                .p(\"exercises\")\n                .find((e) => e.key === editModalProgramExerciseId),\n              {\n                [stateKey]: Program_stateValue(\n                  PlannerProgramExercise_getState(editModalProgramExercise),\n                  stateKey,\n                  newValue\n                ),\n              }\n            );\n            const newProgram = lensRecording.reduce((acc, lens) => lens.fn(acc), props.program);\n            props.onProgramChange(newProgram);\n          }}\n          onEditVariable={(variableKey, newValue) => {\n            if (!editModalProgramExercise.exerciseType) {\n              return;\n            }\n            const exerciseType = Exercise_toKey(editModalProgramExercise.exerciseType);\n            const newSettings = {\n              ...props.settings,\n              exerciseData: {\n                ...props.settings.exerciseData,\n                [exerciseType]: {\n                  ...props.settings.exerciseData[exerciseType],\n                  [variableKey]: Weight_build(newValue, props.settings.units),\n                },\n              },\n            };\n            props.onSettingsChange(newSettings);\n          }}\n          programExercise={editModalProgramExercise}\n          settings={props.settings}\n        />\n      )}\n    </>\n  );\n}\n","import { CSSProperties, JSX } from \"react\";\nimport { IFastTextProps, IFastTextStyle, StyledText_fragmentsToSpans } from \"../../utils/styledText\";\n\nfunction fragmentCss(style?: IFastTextStyle): CSSProperties | undefined {\n  if (style == null) {\n    return undefined;\n  }\n  return {\n    color: style.color as string | undefined,\n    backgroundColor: style.backgroundColor as string | undefined,\n    fontWeight: normalizeFontWeight(style.fontWeight),\n    fontSize: style.fontSize != null ? style.fontSize : undefined,\n    fontStyle: style.fontStyle,\n    textDecorationLine: style.textDecorationLine,\n  };\n}\n\n// fonts.css only declares Poppins 400/600/700; CSS matching would resolve 500 down to 400,\n// while the native renderers map 500-699 to the SemiBold face — normalize to match them.\nfunction normalizeFontWeight(fontWeight: IFastTextStyle[\"fontWeight\"]): string | undefined {\n  return fontWeight === \"500\" ? \"600\" : fontWeight;\n}\n\nfunction numberOfLinesCss(numberOfLines: number | undefined): CSSProperties | undefined {\n  if (numberOfLines == null || numberOfLines <= 0) {\n    return undefined;\n  }\n  if (numberOfLines === 1) {\n    return { display: \"block\", whiteSpace: \"nowrap\", overflow: \"hidden\", textOverflow: \"ellipsis\" };\n  }\n  return {\n    display: \"-webkit-box\",\n    WebkitLineClamp: numberOfLines,\n    WebkitBoxOrient: \"vertical\",\n    overflow: \"hidden\",\n  };\n}\n\nexport function FastText(props: IFastTextProps): JSX.Element {\n  const spans = StyledText_fragmentsToSpans(props.text, props.fragments);\n  // Base color/fontSize/fontWeight/fontStyle inherit via CSS; backgroundColor does not.\n  const baseStyle: CSSProperties = {\n    color: props.color as string | undefined,\n    backgroundColor: props.backgroundColor as string | undefined,\n    fontFamily: props.fontFamily,\n    fontWeight: normalizeFontWeight(props.fontWeight),\n    fontSize: props.fontSize != null ? props.fontSize : undefined,\n    fontStyle: props.fontStyle,\n    textDecorationLine: props.textDecorationLine,\n    paddingLeft: props.paddingHorizontal,\n    paddingRight: props.paddingHorizontal,\n    lineHeight: props.lineHeight != null ? `${props.lineHeight}px` : undefined,\n    // whitespace preserved + no soft-wrap; the parent scroll container provides overflow.\n    ...(props.noWrap ? { whiteSpace: \"pre\" } : props.preserveWhitespace ? { whiteSpace: \"pre-wrap\" } : undefined),\n    // textAlign only takes effect on a block-level box (an inline span shrinks to content).\n    ...(props.textAlign != null ? { display: \"block\", textAlign: props.textAlign } : undefined),\n    ...numberOfLinesCss(props.numberOfLines),\n    ...(props.style as CSSProperties),\n  };\n  const topTestId = props[\"data-testid\"] ?? props.testID;\n  const topDataCy = props[\"data-cy\"];\n  return (\n    <span style={baseStyle} aria-label={props.accessibilityLabel} data-testid={topTestId} data-cy={topDataCy}>\n      {spans.map((span, i) =>\n        span.style != null || span.testID != null ? (\n          <span key={i} style={fragmentCss(span.style)} data-testid={span.testID} data-cy={span.testID}>\n            {span.text}\n          </span>\n        ) : (\n          <span key={i}>{span.text}</span>\n        )\n      )}\n    </span>\n  );\n}\n","export { Pressable } from \"react-native\";\n","import React from \"react\";\nimport { Platform } from \"react-native\";\n\ntype ISvgProps = React.SVGProps<SVGSVGElement> & { children?: React.ReactNode };\ntype IPathProps = React.SVGProps<SVGPathElement>;\ntype ICircleProps = React.SVGProps<SVGCircleElement>;\ntype IRectProps = React.SVGProps<SVGRectElement>;\ntype ILineProps = React.SVGProps<SVGLineElement>;\ntype IGProps = React.SVGProps<SVGGElement>;\ntype IDefsProps = React.SVGProps<SVGDefsElement>;\ntype IClipPathProps = React.SVGProps<SVGClipPathElement>;\ntype IPolygonProps = React.SVGProps<SVGPolygonElement>;\ntype IPolylineProps = React.SVGProps<SVGPolylineElement>;\ntype IEllipseProps = React.SVGProps<SVGEllipseElement>;\ntype IStopProps = React.SVGProps<SVGStopElement>;\ntype ILinearGradientProps = React.SVGProps<SVGLinearGradientElement>;\ntype IRadialGradientProps = React.SVGProps<SVGRadialGradientElement>;\ntype ITextProps = React.SVGProps<SVGTextElement>;\ntype ITSpanProps = React.SVGProps<SVGTSpanElement>;\ntype IUseProps = React.SVGProps<SVGUseElement>;\ntype IMaskProps = React.SVGProps<SVGMaskElement>;\ntype IPatternProps = React.SVGProps<SVGPatternElement>;\ntype IImageProps = React.SVGProps<SVGImageElement>;\ntype IForeignObjectProps = React.SVGProps<SVGForeignObjectElement>;\ntype ISymbolProps = React.SVGProps<SVGSymbolElement>;\n\nexport type ISvgComponentProps = ISvgProps;\n\nexport function Svg(props: ISvgProps): React.JSX.Element {\n  if (\n    Platform.OS === \"web\" &&\n    [\"inline-block\", \"inline\", \"block\", \"flex\"].every((cl) => !props.className?.includes(cl))\n  ) {\n    props = { ...props, className: `inline-block ${props.className || \"\"}` };\n  }\n  return React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", ...props });\n}\n\nexport function Path(props: IPathProps): React.JSX.Element {\n  return React.createElement(\"path\", props);\n}\n\nexport function Circle(props: ICircleProps): React.JSX.Element {\n  return React.createElement(\"circle\", props);\n}\n\nexport function Rect(props: IRectProps): React.JSX.Element {\n  return React.createElement(\"rect\", props);\n}\n\nexport function Line(props: ILineProps): React.JSX.Element {\n  return React.createElement(\"line\", props);\n}\n\nexport function G(props: IGProps): React.JSX.Element {\n  return React.createElement(\"g\", props);\n}\n\nexport function Defs(props: IDefsProps): React.JSX.Element {\n  return React.createElement(\"defs\", props);\n}\n\nexport function ClipPath(props: IClipPathProps): React.JSX.Element {\n  return React.createElement(\"clipPath\", props);\n}\n\nexport function Polygon(props: IPolygonProps): React.JSX.Element {\n  return React.createElement(\"polygon\", props);\n}\n\nexport function Polyline(props: IPolylineProps): React.JSX.Element {\n  return React.createElement(\"polyline\", props);\n}\n\nexport function Ellipse(props: IEllipseProps): React.JSX.Element {\n  return React.createElement(\"ellipse\", props);\n}\n\nexport function LinearGradient(props: ILinearGradientProps): React.JSX.Element {\n  return React.createElement(\"linearGradient\", props);\n}\n\nexport function RadialGradient(props: IRadialGradientProps): React.JSX.Element {\n  return React.createElement(\"radialGradient\", props);\n}\n\nexport function Stop(props: IStopProps): React.JSX.Element {\n  return React.createElement(\"stop\", props);\n}\n\nexport function SvgText(props: ITextProps): React.JSX.Element {\n  return React.createElement(\"text\", props);\n}\n\nexport function TSpan(props: ITSpanProps): React.JSX.Element {\n  return React.createElement(\"tspan\", props);\n}\n\nexport function Use(props: IUseProps): React.JSX.Element {\n  return React.createElement(\"use\", props);\n}\n\nexport function Mask(props: IMaskProps): React.JSX.Element {\n  return React.createElement(\"mask\", props);\n}\n\nexport function Pattern(props: IPatternProps): React.JSX.Element {\n  return React.createElement(\"pattern\", props);\n}\n\nexport function SvgImage(props: IImageProps): React.JSX.Element {\n  return React.createElement(\"image\", props);\n}\n\nexport function ForeignObject(props: IForeignObjectProps): React.JSX.Element {\n  return React.createElement(\"foreignObject\", props);\n}\n\nexport function SvgSymbol(props: ISymbolProps): React.JSX.Element {\n  return React.createElement(\"symbol\", props);\n}\n\ninterface ISvgXmlProps {\n  xml: string;\n  width?: number | string;\n  height?: number | string;\n  style?: React.CSSProperties;\n  className?: string;\n  preserveAspectRatio?: string;\n}\n\nexport function SvgXml(props: ISvgXmlProps): React.JSX.Element {\n  const { xml, width, height, style, className } = props;\n  return React.createElement(\"span\", {\n    className,\n    style: {\n      display: \"inline-block\",\n      width,\n      height,\n      lineHeight: 0,\n      ...style,\n    },\n    dangerouslySetInnerHTML: { __html: xml },\n  });\n}\n\ninterface ISvgUriProps {\n  uri: string;\n  width?: number | string;\n  height?: number | string;\n  style?: React.CSSProperties;\n  className?: string;\n}\n\nexport function SvgUri(props: ISvgUriProps): React.JSX.Element {\n  const { uri, width, height, style, className } = props;\n  return React.createElement(\"img\", {\n    src: uri,\n    width,\n    height,\n    className,\n    style,\n    alt: \"\",\n  });\n}\n","import React, { JSX } from \"react\";\n\ninterface ISwitchProps {\n  value: boolean | undefined;\n  onValueChange: (value: boolean) => void;\n  disabled?: boolean;\n  testID?: string;\n}\n\nexport function Switch(props: ISwitchProps): JSX.Element {\n  return (\n    <input\n      type=\"checkbox\"\n      className=\"checkbox text-text-link\"\n      checked={!!props.value}\n      disabled={props.disabled}\n      data-testid={props.testID}\n      onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n        props.onValueChange(e.currentTarget.checked);\n      }}\n    />\n  );\n}\n","import { Text as RNText, TextProps, Platform } from \"react-native\";\nimport { JSX } from \"react\";\n\nconst textColorPattern =\n  /\\btext-(icon|text|syntax|red|green|blue|yellow|purple|gray|slate|zinc|stone|neutral|orange|amber|lime|emerald|teal|cyan|sky|indigo|violet|fuchsia|pink|rose|white|black|transparent|inherit|current)\\b/;\nconst textSizePattern = /\\btext-(2xs|xs|sm|base|lg|xl|\\dxl|\\[)/;\n\nexport function Text_hasSizeClass(className: string | undefined): boolean {\n  return className != null && textSizePattern.test(className);\n}\n\nexport function Text_resolveFontFamily(className: string | undefined): string {\n  return resolveFontFamily(className);\n}\n\nfunction resolveFontFamily(className: string | undefined): string {\n  if (Platform.OS !== \"android\") {\n    return \"Poppins\";\n  }\n  const isBold = className != null && /\\bfont-bold\\b/.test(className);\n  const isSemiBold = className != null && /\\bfont-semibold\\b/.test(className);\n  const isItalic = className != null && /\\bitalic\\b/.test(className);\n  if (isBold && isItalic) {\n    return \"Poppins-BoldItalic\";\n  }\n  if (isBold) {\n    return \"Poppins-Bold\";\n  }\n  if (isSemiBold && isItalic) {\n    return \"Poppins-SemiBoldItalic\";\n  }\n  if (isSemiBold) {\n    return \"Poppins-SemiBold\";\n  }\n  if (isItalic) {\n    return \"Poppins-Italic\";\n  }\n  return \"Poppins-Regular\";\n}\n\n// RN's <Text> with none of the defaults Text injects below - for nested spans, which would\n// otherwise get text-base forced on them, and for trees that resolve their own font family.\nexport function TextRaw(props: TextProps & { className?: string }): JSX.Element {\n  return <RNText allowFontScaling={false} {...props} />;\n}\n\n// The OS font scale is folded into the rem instead (see Settings_getTextSize), which moves\n// spacing and icons along with the type. Letting RN also scale fontSize here would apply it\n// twice, and only to the text, so it would overflow boxes that didn't grow.\nexport function Text({\n  style,\n  className,\n  ...props\n}: TextProps & { className?: string; \"data-testid\"?: string }): JSX.Element {\n  const defaults: string[] = [];\n  if (className == null || !textColorPattern.test(className)) {\n    defaults.push(\"text-text-primary\");\n  }\n  if (className == null || !textSizePattern.test(className)) {\n    defaults.push(\"text-base\");\n  }\n  const effectiveClassName =\n    defaults.length > 0 ? (className ? `${defaults.join(\" \")} ${className}` : defaults.join(\" \")) : className;\n  const fontFamily = resolveFontFamily(effectiveClassName);\n  const dataTestid = (props as { \"data-testid\"?: string })[\"data-testid\"];\n  const testID = props.testID || dataTestid;\n  return (\n    <RNText\n      className={effectiveClassName}\n      style={[{ fontFamily }, style]}\n      allowFontScaling={false}\n      {...props}\n      testID={testID}\n    />\n  );\n}\n","import { TextInput as RNTextInput, TextInputProps } from \"react-native\";\nimport { forwardRef, JSX, Ref } from \"react\";\nimport { Text_hasSizeClass, Text_resolveFontFamily } from \"./text\";\n\nexport type ITextInput = RNTextInput;\n\n// See the note in ./text.tsx - the OS font scale is folded into the rem instead, so letting\n// RN scale fontSize here too would apply it twice and only to the text.\n// Without a size class RN falls back to its own fixed default, which is the one font size in the\n// app that ignores the text size setting entirely - so default it the same way Text does. The\n// family comes from the same resolver too, so inputs don't render in the system font next to\n// Poppins labels (and Android gets a real face name rather than the family alias).\nexport const TextInput = forwardRef(function TextInputInner(\n  props: TextInputProps & { className?: string; \"data-testid\"?: string },\n  ref: Ref<RNTextInput>\n): JSX.Element {\n  const className = Text_hasSizeClass(props.className) ? props.className : `text-base ${props.className ?? \"\"}`.trim();\n  const fontFamily = Text_resolveFontFamily(className);\n  return (\n    <RNTextInput\n      ref={ref}\n      allowFontScaling={false}\n      {...props}\n      className={className}\n      style={[{ fontFamily }, props.style]}\n    />\n  );\n});\n","import { JSX, useEffect, useState } from \"react\";\nimport { View } from \"react-native\";\nimport QRCode from \"qrcode\";\nimport { SvgXml } from \"./primitives/svg\";\nimport { Text } from \"./primitives/text\";\n\ninterface IProgramQrCodeProps {\n  url: string;\n  size?: number;\n  title?: string;\n}\n\nexport function ProgramQrCode(props: IProgramQrCodeProps): JSX.Element | null {\n  const size = props.size ?? 160;\n  const [svg, setSvg] = useState<string | undefined>(undefined);\n\n  useEffect(() => {\n    let cancelled = false;\n    QRCode.toString(props.url, { type: \"svg\", margin: 1 })\n      .then((result) => {\n        if (!cancelled) {\n          setSvg(result);\n        }\n      })\n      .catch((error) => {\n        console.error(error);\n      });\n    return () => {\n      cancelled = true;\n    };\n  }, [props.url]);\n\n  if (!svg) {\n    return null;\n  }\n\n  return (\n    <View className=\"mt-1\">\n      {props.title && <Text className=\"text-xs text-text-secondary\">{props.title}</Text>}\n      <SvgXml xml={svg} width={size} height={size} />\n    </View>\n  );\n}\n","import { JSX, memo } from \"react\";\nimport { View } from \"react-native\";\nimport { Text } from \"./primitives/text\";\nimport { IEvaluatedProgram, Program_computeProgressStateChanges } from \"../models/program\";\nimport { ObjectUtils_isNotEmpty, ObjectUtils_keys } from \"../utils/object\";\nimport { Weight_print } from \"../models/weight\";\nimport { StringUtils_dashcase } from \"../utils/string\";\nimport { Reps_isFinished } from \"../models/set\";\nimport { IHistoryEntry, ISettings, IProgramState, IDayData, IPercentage, IWeight, IStats } from \"../types\";\nimport { IPlannerProgramExercise } from \"../pages/planner/models/types\";\nimport { LinkButton } from \"./linkButton\";\n\n// Not a \"line-through\" className - RN doesn't inherit text decoration from a View into its Text\n// children the way CSS does, so it has to sit on every Text node itself.\nconst strikeThrough = { textDecorationLine: \"line-through\" } as const;\n\ninterface IProps {\n  entry: IHistoryEntry;\n  settings: ISettings;\n  dayData: IDayData;\n  programExercise: IPlannerProgramExercise;\n  program: IEvaluatedProgram;\n  stats: IStats;\n  userPromptedStateVars?: IProgramState;\n  onSuppressProgress?: (isSuppressed: boolean) => void;\n  forceShow?: boolean;\n}\n\nfunction ProgressStateChangesInner(props: IProps): JSX.Element | null {\n  const { entry, settings, dayData } = props;\n  const changes = Program_computeProgressStateChanges(\n    entry,\n    dayData,\n    settings,\n    props.programExercise,\n    props.program,\n    props.stats,\n    props.userPromptedStateVars\n  );\n  if (!changes) {\n    return null;\n  }\n  const showEndOfDay = props.forceShow || Reps_isFinished(entry.sets);\n\n  return (\n    <ProgressStateChangesView\n      diffState={showEndOfDay ? changes.diffState : undefined}\n      diffVars={showEndOfDay ? changes.diffVars : undefined}\n      prints={showEndOfDay ? changes.prints : undefined}\n      updatePrints={entry.updatePrints}\n      isSuppressed={entry.isSuppressed}\n      onSuppressProgress={props.onSuppressProgress}\n    />\n  );\n}\n\nexport const ProgressStateChanges = memo(ProgressStateChangesInner);\n\ninterface IViewProps {\n  diffState?: Record<string, string | undefined>;\n  diffVars?: Record<string, string | undefined>;\n  prints?: (number | IWeight | IPercentage)[][];\n  updatePrints?: (number | IWeight | IPercentage)[][];\n  isSuppressed?: boolean;\n  onSuppressProgress?: (isSuppressed: boolean) => void;\n}\n\nexport function ProgressStateChangesView(props: IViewProps): JSX.Element | null {\n  const diffState = props.diffState ?? {};\n  const diffVars = props.diffVars ?? {};\n  const prints = props.prints ?? [];\n  const updatePrints = props.updatePrints ?? [];\n  const hasDiffState = ObjectUtils_isNotEmpty(diffState);\n  const hasDiffVars = ObjectUtils_isNotEmpty(diffVars);\n  const onSuppressProgress = props.onSuppressProgress;\n\n  if (!hasDiffVars && !hasDiffState && prints.length === 0 && updatePrints.length === 0) {\n    return null;\n  }\n\n  return (\n    <View\n      data-help-id=\"progress-state-changes\"\n      data-help=\"This shows how state variables of the exercise are going to change after finishing this workout day. It usually indicates progression or deload, so next time you'd do more/less reps, or lift more/less weight.\"\n    >\n      <View>\n        {hasDiffVars && <ExerciseChanges diffVars={diffVars} isSuppressed={props.isSuppressed} />}\n        {hasDiffState && <StateVariablesChanges diffState={diffState} isSuppressed={props.isSuppressed} />}\n        {prints.length > 0 && <Prints title=\"Progress Prints\" prints={prints} />}\n        {updatePrints.length > 0 && <Prints title=\"Update Prints\" prints={updatePrints} />}\n      </View>\n      {onSuppressProgress && (\n        <View>\n          <LinkButton\n            name=\"supress-progress\"\n            className=\"text-xs\"\n            data-testid=\"suppress-progress\"\n            testID=\"suppress-progress\"\n            onClick={() => {\n              onSuppressProgress(!props.isSuppressed);\n            }}\n          >\n            {props.isSuppressed ? \"Enable\" : \"Suppress\"}\n          </LinkButton>\n        </View>\n      )}\n    </View>\n  );\n}\n\nfunction ExerciseChanges({\n  diffVars,\n  isSuppressed,\n}: {\n  diffVars: Record<string, string | undefined>;\n  isSuppressed?: boolean;\n}): JSX.Element | null {\n  if (ObjectUtils_isNotEmpty(diffVars)) {\n    const strike = isSuppressed ? strikeThrough : undefined;\n    return (\n      <View>\n        <Text className=\"text-xs font-bold\">Exercise Changes</Text>\n        <View data-testid=\"variable-changes\" testID=\"variable-changes\">\n          {ObjectUtils_keys(diffVars).map((key) => (\n            <View\n              key={key}\n              data-testid={`variable-changes-key-${StringUtils_dashcase(key)}`}\n              testID={`variable-changes-key-${StringUtils_dashcase(key)}`}\n            >\n              <Text style={strike} className=\"text-xs\">\n                <Text style={strike} className=\"text-xs italic\">\n                  {key}\n                </Text>\n                :{\" \"}\n                <Text\n                  style={strike}\n                  className=\"text-xs font-bold\"\n                  data-testid={`variable-changes-value-${StringUtils_dashcase(key)}`}\n                  testID={`variable-changes-value-${StringUtils_dashcase(key)}`}\n                >\n                  {diffVars[key]}\n                </Text>\n              </Text>\n            </View>\n          ))}\n        </View>\n      </View>\n    );\n  }\n  return null;\n}\n\nfunction StateVariablesChanges({\n  diffState,\n  isSuppressed,\n}: {\n  diffState: Record<string, string | undefined>;\n  isSuppressed?: boolean;\n}): JSX.Element | null {\n  if (ObjectUtils_isNotEmpty(diffState)) {\n    const strike = isSuppressed ? strikeThrough : undefined;\n    return (\n      <View>\n        <Text style={strike} className=\"text-xs font-bold\">\n          State Variables changes\n        </Text>\n        <View data-testid=\"state-changes\" testID=\"state-changes\">\n          {ObjectUtils_keys(diffState).map((key) => (\n            <View\n              key={key}\n              data-testid={`state-changes-key-${StringUtils_dashcase(key)}`}\n              testID={`state-changes-key-${StringUtils_dashcase(key)}`}\n            >\n              <Text style={strike} className=\"text-xs\">\n                <Text style={strike} className=\"text-xs italic\">\n                  {key}\n                </Text>\n                :{\" \"}\n                <Text\n                  style={strike}\n                  className=\"text-xs font-bold\"\n                  data-testid={`state-changes-value-${StringUtils_dashcase(key)}`}\n                  testID={`state-changes-value-${StringUtils_dashcase(key)}`}\n                >\n                  {diffState[key]}\n                </Text>\n              </Text>\n            </View>\n          ))}\n        </View>\n      </View>\n    );\n  }\n  return null;\n}\n\nfunction Prints({\n  title,\n  prints,\n}: {\n  title: string;\n  prints: (IWeight | IPercentage | number)[][];\n}): JSX.Element | null {\n  if (prints.length > 0) {\n    return (\n      <View>\n        <Text className=\"text-xs font-bold\">{title}</Text>\n        <View>\n          {prints.map((print) => (\n            <View key={JSON.stringify(print)}>\n              <Text className=\"text-xs\">\n                {print.map((p, i) => (\n                  <Text key={i}>\n                    {i > 0 ? \", \" : \"\"}\n                    {Weight_print(p)}\n                  </Text>\n                ))}\n              </Text>\n            </View>\n          ))}\n        </View>\n      </View>\n    );\n  }\n  return null;\n}\n","import { JSX, useEffect, useRef } from \"react\";\nimport { StringUtils_dashcase, StringUtils_truncate } from \"../utils/string\";\n\ninterface IProps {\n  isExpanded: boolean;\n  values: [string, string][];\n  defaultSelectedValue: string | null | undefined;\n  numberOfVisibleItems: number;\n  itemHeight: number;\n  onSelect: (value: string) => void;\n}\n\nexport function ScrollBarrell(props: IProps): JSX.Element {\n  const height = props.itemHeight * props.numberOfVisibleItems;\n  const numberOfDummyItems = Math.floor(props.numberOfVisibleItems / 2);\n  const containerRef = useRef<HTMLDivElement>(null);\n  const barrelRef = useRef<HTMLDivElement>(null);\n  const timer = useRef<number | undefined>(undefined);\n  const isDefaultSet = useRef<boolean>(false);\n  const isTurnedOn = useRef<boolean>(props.isExpanded);\n  const isExpanded = useRef<boolean>(props.isExpanded);\n  isExpanded.current = props.isExpanded;\n\n  function setDefaultIndex(): void {\n    if (!isDefaultSet.current) {\n      const barrel = barrelRef.current;\n      if (barrel) {\n        let defaultSelectedIndex = props.values.findIndex(([value, key]) => value === props.defaultSelectedValue);\n        defaultSelectedIndex = defaultSelectedIndex === -1 ? 0 : defaultSelectedIndex;\n        barrel.scrollTop = defaultSelectedIndex * props.itemHeight;\n        isDefaultSet.current = true;\n      }\n    }\n  }\n\n  useEffect(() => {\n    setDefaultIndex();\n  }, []);\n\n  useEffect(() => {\n    const container = containerRef.current;\n    if (container) {\n      container.addEventListener(\"transitionend\", (e) => {\n        isTurnedOn.current = isExpanded.current;\n      });\n    }\n  }, []);\n\n  useEffect(() => {\n    const barrel = barrelRef.current;\n    if (barrel) {\n      barrel.addEventListener(\"scroll\", (e) => {\n        if (!isTurnedOn.current) {\n          return;\n        }\n        const target = e.target as HTMLDivElement;\n        if (timer.current) {\n          clearTimeout(timer.current);\n        }\n        timer.current = window.setTimeout(() => {\n          if (props.isExpanded) {\n            timer.current = undefined;\n            const offset = target.scrollTop;\n            const index = Math.round(offset / props.itemHeight);\n            const selected = props.values[index];\n            if (selected != null) {\n              const value = selected[0];\n              props.onSelect(value);\n            }\n          }\n        }, 150);\n      });\n    }\n  }, [props.isExpanded, props.values, props.defaultSelectedValue, props.itemHeight]);\n\n  return (\n    <div\n      className=\"relative overflow-hidden border-t border-border-neutral\"\n      ref={containerRef}\n      style={{\n        transition: \"height 150ms ease-in-out, visibility 150ms linear\",\n        visibility: props.isExpanded ? \"inherit\" : \"hidden\",\n        height: props.isExpanded ? `${height}px` : 0,\n      }}\n    >\n      <div\n        className=\"absolute w-full scroll-barrell-selected bg-background-subtle\"\n        style={{\n          height: `${props.itemHeight}px`,\n          top: \"50%\",\n          left: 0,\n          marginTop: `-${Math.round(props.itemHeight / 2)}px`,\n        }}\n      />\n      <div\n        className=\"relative w-full h-full overflow-scroll\"\n        ref={barrelRef}\n        style={{ WebkitOverflowScrolling: \"touch\", scrollSnapType: \"y mandatory\" }}\n      >\n        {Array.apply(null, Array(numberOfDummyItems)).map((_, i) => (\n          <div\n            key={`top-${i}`}\n            className=\"flex items-center justify-center w-full\"\n            style={{ minHeight: `${props.itemHeight}px`, scrollSnapAlign: \"start\" }}\n          />\n        ))}\n        {props.values.map(([value, label], index) => (\n          <button\n            key={value}\n            data-testid={`scroll-barrel-item-${StringUtils_dashcase(label)}`}\n            className=\"flex items-center justify-center w-full cursor-pointer scroll-barrel-item\"\n            style={{ minHeight: `${props.itemHeight}px`, scrollSnapAlign: \"start\" }}\n            onClick={() => {\n              props.onSelect(value);\n              barrelRef.current?.scrollTo({ top: index * props.itemHeight, behavior: \"smooth\" });\n            }}\n          >\n            {StringUtils_truncate(label, 35)}\n          </button>\n        ))}\n        {Array.apply(null, Array(numberOfDummyItems)).map((_, i) => (\n          <div\n            key={`bottom-${i}`}\n            className=\"flex items-center justify-center w-full\"\n            style={{ minHeight: `${props.itemHeight}px`, scrollSnapAlign: \"start\" }}\n          />\n        ))}\n      </div>\n      <div className=\"absolute inset-0 pointer-events-none barrel-bg\" />\n    </div>\n  );\n}\n","import { JSX, ReactNode, useState } from \"react\";\nimport { View, ScrollView, Platform, LayoutChangeEvent } from \"react-native\";\nimport { Pressable } from \"./primitives/pressable\";\nimport { Text } from \"./primitives/text\";\nimport { StringUtils_dashcase } from \"../utils/string\";\nimport { Scroller } from \"./scroller\";\nimport { Tailwind_semantic } from \"../utils/tailwindConfig\";\n\nexport interface IScrollableTabsProps {\n  tabs: {\n    label: string;\n    children: () => ReactNode;\n    isInvalid?: boolean;\n  }[];\n  color?: \"orange\" | \"purple\";\n  defaultIndex?: number;\n  className?: string;\n  type?: \"tabs\" | \"squares\";\n  shouldNotExpand?: boolean;\n  offsetY?: string;\n  topPadding?: string;\n  nonSticky?: boolean;\n  zIndex?: number;\n  fillHeight?: boolean;\n  onChange?: (index: number) => void;\n  headerContent?: ReactNode;\n}\n\nexport function ScrollableTabs(props: IScrollableTabsProps): JSX.Element {\n  const { tabs } = props;\n  const [selectedIndex, setSelectedIndex] = useState<number>(props.defaultIndex || 0);\n  const [barWidth, setBarWidth] = useState<number>(0);\n  const color = props.color || \"orange\";\n\n  const onBarLayout = (e: LayoutChangeEvent): void => {\n    setBarWidth(e.nativeEvent.layout.width);\n  };\n\n  const tabsRow =\n    tabs.length > 1 ? (\n      <View\n        className={`flex-row ${props.topPadding == null ? \"pt-6\" : \"\"} pb-2 ${props.className || \"\"}`}\n        style={{\n          ...(props.topPadding != null ? { paddingTop: parseFloat(props.topPadding) || 0 } : null),\n          minWidth: barWidth || undefined,\n        }}\n      >\n        {tabs.map(({ label, isInvalid }, index) => {\n          const nameClass = `tab-${StringUtils_dashcase(label.toLowerCase())}`;\n\n          if (props.type === \"squares\") {\n            const isSelected = selectedIndex === index;\n            return (\n              <Pressable\n                key={label}\n                className={`px-3 py-2 rounded mr-2 ${\n                  isSelected\n                    ? \"bg-background-default border border-button-primarybackground\"\n                    : \"bg-background-subtle border border-background-default\"\n                }`}\n                data-testid={nameClass}\n                testID={nameClass}\n                onPress={() => {\n                  props.onChange?.(index);\n                  setSelectedIndex(index);\n                }}\n              >\n                <Text className={`text-sm ${isSelected ? \"text-text-purple\" : \"text-text-secondary\"}`}>{label}</Text>\n              </Pressable>\n            );\n          }\n\n          const isSelected = selectedIndex === index;\n          const activeColor =\n            color === \"orange\" ? Tailwind_semantic().icon.yellow : Tailwind_semantic().button.secondarystroke;\n          const activeTextColor = color === \"orange\" ? \"text-icon-yellow\" : \"text-text-purple\";\n\n          return (\n            <View\n              key={label}\n              className=\"items-center border-b border-border-neutral\"\n              style={{ flexGrow: 1, flexShrink: 0, flexBasis: \"auto\" }}\n            >\n              <Pressable\n                className=\"px-4 pb-1\"\n                style={isSelected ? { borderBottomWidth: 2, borderBottomColor: activeColor } : undefined}\n                data-testid={nameClass}\n                testID={nameClass}\n                onPress={() => {\n                  props.onChange?.(index);\n                  setSelectedIndex(index);\n                }}\n              >\n                <Text\n                  numberOfLines={1}\n                  className={`text-base ${isSelected ? activeTextColor : \"\"} ${isInvalid ? \"text-text-error\" : \"\"}`}\n                >\n                  {isInvalid ? \"⚠️\" : \"\"}\n                  {label}\n                </Text>\n              </Pressable>\n            </View>\n          );\n        })}\n      </View>\n    ) : null;\n  const tabBar =\n    tabsRow != null ? (\n      <View className=\"bg-background-default\" onLayout={onBarLayout}>\n        <Scroller>{tabsRow}</Scroller>\n      </View>\n    ) : null;\n\n  const content = (\n    <View className={props.fillHeight ? \"flex-1\" : \"\"}>{tabs[selectedIndex]?.children() || tabs[0]?.children()}</View>\n  );\n\n  if (props.headerContent != null) {\n    return (\n      <ScrollView\n        stickyHeaderIndices={tabBar ? [1] : undefined}\n        style={{ flex: 1 }}\n        contentContainerStyle={{ flexGrow: 1 }}\n        className=\"bg-background-default\"\n      >\n        <View>{props.headerContent}</View>\n        {tabBar || <View />}\n        {content}\n      </ScrollView>\n    );\n  }\n\n  const stickyStyle =\n    !props.nonSticky && Platform.OS === \"web\"\n      ? ({ position: \"sticky\", top: props.offsetY || 0, zIndex: props.zIndex ?? 10 } as Record<string, unknown>)\n      : undefined;\n\n  return (\n    <View className={props.fillHeight ? \"flex-1\" : \"\"}>\n      {tabBar && (\n        <View style={stickyStyle} className=\"bg-background-default\">\n          {tabBar}\n        </View>\n      )}\n      {content}\n    </View>\n  );\n}\n","import { JSX, ReactNode, Ref, forwardRef, useImperativeHandle, useRef } from \"react\";\nimport { View, ScrollView, Platform } from \"react-native\";\n\ninterface IProps {\n  children: ReactNode;\n  arrowYOffsetPct?: number;\n  scrollOffset?: number;\n}\n\nexport interface IScrollerHandle {\n  scrollToEnd: () => void;\n  scrollTo: (x: number) => void;\n}\n\nexport const Scroller = forwardRef(function Scroller(props: IProps, ref: Ref<IScrollerHandle>): JSX.Element {\n  const scrollRef = useRef<ScrollView>(null);\n  const isWeb = Platform.OS === \"web\";\n\n  useImperativeHandle(\n    ref,\n    () => ({\n      scrollToEnd: () => scrollRef.current?.scrollToEnd({ animated: true }),\n      scrollTo: (x: number) => scrollRef.current?.scrollTo({ x, animated: true }),\n    }),\n    []\n  );\n\n  if (!isWeb) {\n    return (\n      <ScrollView ref={scrollRef} horizontal showsHorizontalScrollIndicator={false} removeClippedSubviews={false}>\n        {props.children}\n      </ScrollView>\n    );\n  }\n\n  return (\n    <View className=\"relative flex-1 min-w-0\">\n      <ScrollView ref={scrollRef} horizontal showsHorizontalScrollIndicator={false} className=\"scrollbar-hide\">\n        {props.children}\n      </ScrollView>\n    </View>\n  );\n});\n","import { JSX, useEffect, useRef, useState } from \"react\";\nimport { View } from \"react-native\";\nimport { Text } from \"./primitives/text\";\nimport { Button } from \"./button\";\nimport { IDispatch } from \"../ducks/types\";\nimport { IExerciseType, IHistoryRecord, IProgramState, ISettings } from \"../types\";\nimport { TimeUtils_formatMMSS } from \"../utils/time\";\nimport { WorkoutExerciseSetTarget } from \"./workoutExerciseSet\";\nimport { ExerciseImage } from \"./exerciseImage\";\nimport { Exercise_get, Exercise_nameWithEquipment } from \"../models/exercise\";\nimport { Thunk_recordSetTimer, Thunk_checkSetTimer } from \"../ducks/thunks\";\nimport { Progress_isSetTimerCheckDue } from \"../models/progress\";\nimport { IByExercise } from \"../pages/planner/plannerEvaluator\";\nimport { IPlannerProgramExercise } from \"../pages/planner/models/types\";\n\n// Re-renders the clock every 250ms and calls onTick so `auto` circuits advance/complete on time. All the\n// advance/complete/rest logic lives in the model (Progress_checkSetTimer) — this just provides the clock tick.\nfunction useSetTimerTick(isActive: boolean, onTick: () => void): void {\n  const [, setTick] = useState(0);\n  const onTickRef = useRef(onTick);\n  onTickRef.current = onTick;\n  useEffect(() => {\n    if (!isActive) {\n      return undefined;\n    }\n    const intervalId = setInterval(() => {\n      setTick((t) => t + 1);\n      onTickRef.current();\n    }, 250);\n    return () => clearInterval(intervalId);\n  }, [isActive]);\n}\n\ninterface ISetTimerBannerContentProps {\n  progress: IHistoryRecord;\n  settings: ISettings;\n  setTimerModal: NonNullable<IHistoryRecord[\"setTimer\"]>;\n  dispatch: IDispatch;\n  onClose: () => void;\n  // In the playground the progress isn't in global state, so the record/tick thunks can't resolve it.\n  // Dispatch the underlying card actions directly instead, mirroring how ModalAmrap handles the playground.\n  isPlayground?: boolean;\n  programExercise?: IPlannerProgramExercise;\n  otherStates?: IByExercise<IProgramState>;\n}\n\nexport function SetTimerBannerContent(props: ISetTimerBannerContentProps): JSX.Element | null {\n  const { progress, dispatch, setTimerModal, settings, onClose, isPlayground } = props;\n  const { entryIndex, setIndex, startedAt } = setTimerModal;\n  const entry = progress.entries[entryIndex];\n  const set = entry?.sets[setIndex];\n\n  useSetTimerTick(set != null, () => {\n    if (isPlayground) {\n      // The thunk gates on this internally; the playground dispatches the card action directly, so gate here\n      // too — otherwise every 250ms tick writes playground state even when no transition is due.\n      if (Progress_isSetTimerCheckDue(progress, Date.now())) {\n        dispatch({\n          type: \"CheckSetTimerAction\",\n          programExercise: props.programExercise,\n          otherStates: props.otherStates,\n          isPlayground: true,\n        });\n      }\n    } else {\n      dispatch(Thunk_checkSetTimer());\n    }\n  });\n\n  const target = set?.setTimer ?? 0;\n  const elapsedMs = Math.max(0, Date.now() - startedAt);\n\n  // For a timed AMRAP set the amrap modal stacks on top while this modal stays mounted underneath (see\n  // Progress_proceedAfterTimedSet). Hide the clock so it isn't visible behind the amrap sheet.\n  if (set == null || entry == null || progress.amrapModal != null) {\n    return null;\n  }\n\n  const pct = target > 0 ? Math.min(1, elapsedMs / (target * 1000)) : 0;\n  const elapsedLabel = TimeUtils_formatMMSS(elapsedMs);\n\n  function recordSetTimer(keepTiming: boolean): void {\n    if (isPlayground) {\n      dispatch({\n        type: \"CompleteSetAction\",\n        entryIndex,\n        setIndex,\n        mode: \"workout\",\n        programExercise: props.programExercise,\n        otherStates: props.otherStates,\n        forceUpdateEntryIndex: false,\n        isExternal: false,\n        isPlayground: true,\n        keepSetTimerRunning: keepTiming,\n      });\n    } else {\n      dispatch(Thunk_recordSetTimer(entryIndex, setIndex, keepTiming));\n    }\n  }\n\n  function onStopAndRecord(): void {\n    recordSetTimer(false);\n  }\n\n  function onLogKeepTiming(): void {\n    recordSetTimer(true);\n  }\n\n  const isCompleted = !!set.isCompleted;\n\n  return (\n    <View className=\"px-4 pt-2 pb-6\">\n      <BannerHeader\n        exerciseType={entry.exercise}\n        settings={settings}\n        subtitle={\n          <View className=\"flex-row items-center flex-wrap\">\n            <Text className=\"text-text-secondary text-sm\">\n              Set {setIndex + 1} of {entry.sets.length}\n              {\" - \"}\n            </Text>\n            <WorkoutExerciseSetTarget set={set} setType=\"program\" />\n          </View>\n        }\n      />\n      <View className=\"items-center my-6\">\n        <Text\n          className=\"font-bold text-text-primary\"\n          style={{ fontSize: 64, lineHeight: 72 }}\n          data-testid=\"set-timer-current\"\n          testID=\"set-timer-current\"\n        >\n          {elapsedLabel}\n        </Text>\n        <Text className=\"text-text-secondary\">\n          of <Text className=\"font-semibold text-syntax-timer\">{TimeUtils_formatMMSS(target * 1000)}</Text> target\n        </Text>\n      </View>\n      <ProgressBar pct={pct} />\n      <View className=\"flex-row justify-between mt-1\">\n        <Text className=\"text-xs text-text-secondary\">0:00</Text>\n        <Text className=\"text-xs text-text-secondary\">{TimeUtils_formatMMSS(target * 1000)}</Text>\n      </View>\n      <View className=\"mt-6 gap-2\">\n        {/* Once the set is logged there's nothing left to record — only \"Discard & close\" remains. */}\n        {!isCompleted && (\n          <Button\n            name=\"set-timer-stop-record\"\n            data-testid=\"set-timer-stop-record\"\n            kind=\"purple\"\n            onPress={onStopAndRecord}\n          >\n            Stop &amp; record · {elapsedLabel}\n          </Button>\n        )}\n        {!isCompleted && (\n          <Button\n            name=\"set-timer-log-keep\"\n            data-testid=\"set-timer-log-keep\"\n            kind=\"lightpurple\"\n            onPress={onLogKeepTiming}\n          >\n            Log {elapsedLabel}, keep timing\n          </Button>\n        )}\n        <Button name=\"set-timer-discard\" data-testid=\"set-timer-discard\" kind=\"transparent-purple\" onPress={onClose}>\n          Discard &amp; close\n        </Button>\n      </View>\n    </View>\n  );\n}\n\nfunction BannerHeader(props: { exerciseType: IExerciseType; settings: ISettings; subtitle: JSX.Element }): JSX.Element {\n  const exercise = Exercise_get(props.exerciseType, props.settings.exercises);\n  return (\n    <View className=\"flex-row items-center\">\n      <View className=\"self-start rounded-lg bg-background-image\">\n        <ExerciseImage settings={props.settings} width={48} exerciseType={props.exerciseType} size=\"small\" />\n      </View>\n      <View className=\"flex-1 min-w-0 ml-2\">\n        <Text className=\"text-xl font-bold text-text-primary\">\n          {Exercise_nameWithEquipment(exercise, props.settings)}\n        </Text>\n        {props.subtitle}\n      </View>\n    </View>\n  );\n}\n\nfunction ProgressBar(props: { pct: number }): JSX.Element {\n  return (\n    <View className=\"h-2 overflow-hidden rounded-full bg-background-neutral\">\n      <View\n        className=\"h-full rounded-full bg-button-primarybackground\"\n        style={{ width: `${Math.round(props.pct * 100)}%` }}\n      />\n    </View>\n  );\n}\n","import { JSX, useState } from \"react\";\nimport { View } from \"react-native\";\nimport { lb } from \"lens-shmens\";\nimport { Text } from \"./primitives/text\";\nimport { Button } from \"./button\";\nimport { Input } from \"./input\";\nimport { updateProgress } from \"../models/state\";\nimport { IDispatch } from \"../ducks/types\";\nimport { IHistoryRecord, ISet } from \"../types\";\nimport { MathUtils_clamp } from \"../utils/math\";\nimport { StringUtils_pad } from \"../utils/string\";\n\ninterface ISetTimerEditContentProps {\n  set: ISet;\n  entryIndex: number;\n  setIndex: number;\n  dispatch: IDispatch;\n}\n\nexport function SetTimerEditContent(props: ISetTimerEditContentProps): JSX.Element {\n  const { set, entryIndex, setIndex, dispatch } = props;\n  const initialSeconds = set.completedSetTimer ?? set.setTimer ?? 0;\n\n  const [minutesValue, setMinutesValue] = useState(Math.floor(initialSeconds / 60).toString());\n  const [secondsValue, setSecondsValue] = useState(StringUtils_pad((initialSeconds % 60).toString(), 2));\n\n  const lbSet = lb<IHistoryRecord>().p(\"entries\").i(entryIndex).p(\"sets\").i(setIndex);\n  const lbModal = lb<IHistoryRecord>().pi(\"ui\", {}).p(\"setTimerEditModal\");\n\n  // Write the value and clear the modal flag in a SINGLE dispatch. The web playground's dispatch applies each\n  // action to a progress snapshot captured at render, so a second dispatch (e.g. a separate onClose) would read\n  // the stale snapshot and clobber this write. Clearing the flag here is what closes the modal (unmount on web,\n  // shouldGoBack pop on native) — no separate onClose() call needed.\n  const onClear = (): void => {\n    updateProgress(\n      dispatch,\n      [lbSet.p(\"completedSetTimer\").record(undefined), lbModal.record(undefined)],\n      \"clear-set-timer\"\n    );\n  };\n\n  const onSave = (): void => {\n    const minutes = Number(minutesValue);\n    const seconds = Number(secondsValue);\n    const newSeconds =\n      isNaN(minutes) || isNaN(seconds)\n        ? initialSeconds\n        : MathUtils_clamp(minutes, 0, 999) * 60 + MathUtils_clamp(seconds, 0, 59);\n    updateProgress(\n      dispatch,\n      [lbSet.p(\"completedSetTimer\").record(newSeconds), lbModal.record(undefined)],\n      \"edit-set-timer\"\n    );\n  };\n\n  return (\n    <View>\n      <Text className=\"pb-2 font-bold\">Edit recorded time</Text>\n      <Text className=\"pb-2 text-xs text-text-secondary\">(in mm:ss)</Text>\n      <View className=\"flex-row items-center\">\n        <View className=\"flex-1\">\n          <Input\n            type=\"tel\"\n            placeholder=\"00\"\n            value={minutesValue}\n            inputSize=\"sm\"\n            labelSize=\"xs\"\n            changeType=\"oninput\"\n            identifier=\"set-timer-edit-minutes\"\n            changeHandler={(e) => {\n              if (e.success) {\n                setMinutesValue(e.data);\n              }\n            }}\n          />\n        </View>\n        <View className=\"items-center justify-center\" style={{ width: 16, height: 40 }}>\n          <Text>:</Text>\n        </View>\n        <View className=\"flex-1\">\n          <Input\n            type=\"tel\"\n            placeholder=\"00\"\n            value={secondsValue}\n            inputSize=\"sm\"\n            labelSize=\"xs\"\n            changeType=\"oninput\"\n            identifier=\"set-timer-edit-seconds\"\n            changeHandler={(e) => {\n              if (e.success) {\n                setSecondsValue(e.data);\n              }\n            }}\n          />\n        </View>\n      </View>\n      <View className=\"flex-row justify-between mt-4\">\n        <Button\n          name=\"set-timer-edit-clear\"\n          data-testid=\"set-timer-edit-clear\"\n          kind=\"grayv2\"\n          className=\"mr-3\"\n          onClick={onClear}\n        >\n          Clear\n        </Button>\n        <Button name=\"set-timer-edit-submit\" data-testid=\"set-timer-edit-submit\" kind=\"purple\" onClick={onSave}>\n          Save\n        </Button>\n      </View>\n    </View>\n  );\n}\n","import { JSX, useMemo } from \"react\";\nimport { ScrollView, View } from \"react-native\";\nimport { Text } from \"./primitives/text\";\nimport MarkdownIt from \"markdown-it\";\nimport type Token from \"markdown-it/lib/token.mjs\";\nimport { Link } from \"./link\";\nimport { InternalLink } from \"../internalLink\";\nimport { IconDiscord } from \"./icons/iconDiscord\";\nimport { IconDoc } from \"./icons/iconDoc\";\nimport { IconSwap } from \"./icons/iconSwap\";\nimport { IconHelp } from \"./icons/iconHelp\";\nimport { IconEdit2 } from \"./icons/iconEdit2\";\nimport { IconPreview } from \"./icons/iconPreview\";\nimport { PlannerCodeBlock } from \"../pages/planner/components/plannerCodeBlock\";\n\nconst md = new MarkdownIt({ html: false, linkify: true });\n\nconst ICON_RE = /::icon-(discord|doc|swap|help|edit2|preview)::/g;\n\ninterface IProps {\n  value: string;\n  className?: string;\n}\n\nexport function SimpleMarkdown(props: IProps): JSX.Element {\n  const rendered = useMemo(() => {\n    const tokens = md.parse(props.value, {});\n    return renderBlocks(tokens, 0, tokens.length).elements;\n  }, [props.value]);\n  return <View className={props.className}>{rendered}</View>;\n}\n\ninterface IBlockResult {\n  elements: JSX.Element[];\n  next: number;\n}\n\nfunction renderBlocks(tokens: Token[], start: number, end: number, depth = 0): IBlockResult {\n  const elements: JSX.Element[] = [];\n  let i = start;\n  while (i < end) {\n    const token = tokens[i];\n    if (token.type === \"paragraph_open\") {\n      const inline = tokens[i + 1];\n      elements.push(\n        <Text key={i} className=\"mb-2 text-sm\">\n          {inline?.children ? renderInline(inline.children) : null}\n        </Text>\n      );\n      i += 3;\n    } else if (token.type === \"heading_open\") {\n      const level = parseInt(token.tag.replace(\"h\", \"\"), 10);\n      const inline = tokens[i + 1];\n      const sizeClass = level <= 2 ? \"text-lg\" : level <= 4 ? \"text-base\" : \"text-sm\";\n      elements.push(\n        <Text key={i} className={`${sizeClass} font-bold mb-1`}>\n          {inline?.children ? renderInline(inline.children) : null}\n        </Text>\n      );\n      i += 3;\n    } else if (token.type === \"bullet_list_open\" || token.type === \"ordered_list_open\") {\n      const ordered = token.type === \"ordered_list_open\";\n      const closeType = ordered ? \"ordered_list_close\" : \"bullet_list_close\";\n      const listEnd = findMatchingClose(tokens, i, token.type, closeType);\n      const items = renderListItems(tokens, i + 1, listEnd, ordered, depth);\n      elements.push(\n        <View key={i} className={depth > 0 ? \"pl-4\" : \"\"}>\n          {items}\n        </View>\n      );\n      i = listEnd + 1;\n    } else if (token.type === \"fence\" || token.type === \"code_block\") {\n      if (token.info && token.info.trim() === \"liftoscript\") {\n        elements.push(\n          <ScrollView key={i} horizontal className=\"mb-2\" showsHorizontalScrollIndicator={false}>\n            <PlannerCodeBlock className=\"text-sm\" script={token.content.replace(/\\n+$/, \"\")} />\n          </ScrollView>\n        );\n      } else {\n        elements.push(\n          <View key={i} className=\"p-2 mb-2 rounded bg-background-subtle\">\n            <Text className=\"font-mono text-xs\">{token.content}</Text>\n          </View>\n        );\n      }\n      i += 1;\n    } else if (token.type === \"hr\") {\n      elements.push(<View key={i} className=\"my-2 border-b border-border-neutral\" />);\n      i += 1;\n    } else {\n      i += 1;\n    }\n  }\n  return { elements, next: i };\n}\n\nfunction renderListItems(tokens: Token[], start: number, end: number, ordered: boolean, depth: number): JSX.Element[] {\n  const items: JSX.Element[] = [];\n  let i = start;\n  let orderIndex = 1;\n  while (i < end) {\n    if (tokens[i].type !== \"list_item_open\") {\n      i += 1;\n      continue;\n    }\n    const itemEnd = findMatchingClose(tokens, i, \"list_item_open\", \"list_item_close\");\n    const bullet = ordered ? `${orderIndex}. ` : \"• \";\n    const inner = renderBlocks(tokens, i + 1, itemEnd, depth + 1).elements;\n    items.push(\n      <View key={i} className=\"flex-row pl-2 mb-1\">\n        <Text className=\"text-sm\">{bullet}</Text>\n        <View className=\"flex-1\">{inner}</View>\n      </View>\n    );\n    orderIndex += 1;\n    i = itemEnd + 1;\n  }\n  return items;\n}\n\nfunction findMatchingClose(tokens: Token[], start: number, openType: string, closeType: string): number {\n  let depth = 0;\n  for (let i = start; i < tokens.length; i += 1) {\n    if (tokens[i].type === openType) {\n      depth += 1;\n    } else if (tokens[i].type === closeType) {\n      depth -= 1;\n      if (depth === 0) {\n        return i;\n      }\n    }\n  }\n  return tokens.length;\n}\n\nfunction renderInline(tokens: Token[]): (JSX.Element | string)[] {\n  const elements: (JSX.Element | string)[] = [];\n  let i = 0;\n  while (i < tokens.length) {\n    const token = tokens[i];\n    if (token.type === \"text\") {\n      pushTextWithIcons(elements, token.content, `t${i}`);\n      i += 1;\n    } else if (token.type === \"softbreak\") {\n      elements.push(\" \");\n      i += 1;\n    } else if (token.type === \"hardbreak\") {\n      elements.push(\"\\n\");\n      i += 1;\n    } else if (token.type === \"code_inline\") {\n      elements.push(\n        <Text key={i} className=\"px-1 font-mono text-xs rounded bg-background-subtle\">\n          {token.content}\n        </Text>\n      );\n      i += 1;\n    } else if (token.type === \"strong_open\") {\n      const content = collectInlineUntil(tokens, i + 1, \"strong_close\");\n      elements.push(\n        <Text key={i} className=\"text-sm font-bold\">\n          {renderInline(content.tokens)}\n        </Text>\n      );\n      i = content.endIndex + 1;\n    } else if (token.type === \"em_open\") {\n      const content = collectInlineUntil(tokens, i + 1, \"em_close\");\n      elements.push(\n        <Text key={i} className=\"text-sm italic\">\n          {renderInline(content.tokens)}\n        </Text>\n      );\n      i = content.endIndex + 1;\n    } else if (token.type === \"link_open\") {\n      const href = token.attrGet(\"href\") || \"\";\n      const content = collectInlineUntil(tokens, i + 1, \"link_close\");\n      if (href) {\n        if (href.startsWith(\"internal:\")) {\n          const internalHref = href.slice(\"internal:\".length);\n          elements.push(\n            <InternalLink\n              key={i}\n              name=\"markdown-internal\"\n              className=\"text-sm underline text-text-link\"\n              href={internalHref}\n            >\n              {renderInline(content.tokens)}\n            </InternalLink>\n          );\n        } else {\n          elements.push(\n            <Link key={i} className=\"text-sm underline text-text-link\" href={href}>\n              {renderInline(content.tokens)}\n            </Link>\n          );\n        }\n      }\n      i = content.endIndex + 1;\n    } else {\n      i += 1;\n    }\n  }\n  return elements;\n}\n\nfunction pushTextWithIcons(out: (JSX.Element | string)[], text: string, keyPrefix: string): void {\n  ICON_RE.lastIndex = 0;\n  let lastIndex = 0;\n  let match: RegExpExecArray | null;\n  let part = 0;\n  while ((match = ICON_RE.exec(text)) !== null) {\n    if (match.index > lastIndex) {\n      out.push(text.slice(lastIndex, match.index));\n    }\n    const name = match[1];\n    out.push(renderIcon(name, `${keyPrefix}-i${part}`));\n    lastIndex = match.index + match[0].length;\n    part += 1;\n  }\n  if (lastIndex < text.length) {\n    out.push(text.slice(lastIndex));\n  }\n}\n\nfunction renderIcon(name: string, key: string): JSX.Element {\n  const size = 14;\n  const className = \"inline-block\";\n  switch (name) {\n    case \"discord\":\n      return <IconDiscord key={key} size={size} className={className} />;\n    case \"doc\":\n      return <IconDoc key={key} width={size} height={size} className={className} />;\n    case \"swap\":\n      return <IconSwap key={key} size={size} className={className} />;\n    case \"help\":\n      return <IconHelp key={key} size={size} className={className} />;\n    case \"edit2\":\n      return <IconEdit2 key={key} size={size} className={className} />;\n    case \"preview\":\n      return <IconPreview key={key} size={size} className={className} />;\n    default:\n      return <Text key={key}>{`::icon-${name}::`}</Text>;\n  }\n}\n\nfunction collectInlineUntil(\n  tokens: Token[],\n  startIndex: number,\n  closeType: string\n): { tokens: Token[]; endIndex: number } {\n  const collected: Token[] = [];\n  let i = startIndex;\n  while (i < tokens.length && tokens[i].type !== closeType) {\n    collected.push(tokens[i]);\n    i += 1;\n  }\n  return { tokens: collected, endIndex: i };\n}\n","import React, { JSX, useCallback, useEffect, useRef, useState } from \"react\";\nimport { MathUtils_clamp } from \"../utils/math\";\n\ninterface ISwipeableRowProps {\n  children: (props: {\n    style: React.CSSProperties;\n    close: () => void;\n    moveRef: React.RefObject<HTMLDivElement | null>;\n  }) => JSX.Element;\n  width: number;\n  onPointerDown?: () => void;\n  openThreshold: number;\n  closeThreshold: number;\n  initiateTreshold: number;\n  scrollThreshold: number;\n  showHint?: boolean;\n}\n\nexport function SwipeableRow(props: ISwipeableRowProps): JSX.Element {\n  const { children, width, openThreshold, closeThreshold } = props;\n  const [translateX, setTranslateX] = useState(0);\n  const startX = useRef(0);\n  const startY = useRef(0);\n  const startScrollTop = useRef(0);\n  const isDragging = useRef(false);\n  const isScrolling = useRef(false);\n  const isSwiping = useRef(false);\n  const isOpen = useRef(false);\n  const translateXRef = useRef(0);\n  const moveRef = useRef<HTMLDivElement | null>(null);\n  const onPointerDownProp = props.onPointerDown;\n\n  const updateTranslate = useCallback((value: number): void => {\n    translateXRef.current = value;\n    setTranslateX(value);\n  }, []);\n\n  const handlePointerDown = useCallback(\n    (event: TouchEvent | PointerEvent): void => {\n      if (isDragging.current) {\n        return;\n      }\n      if (onPointerDownProp) {\n        onPointerDownProp();\n      }\n      const parentScroller = document.querySelectorAll(\".parent-scroller\");\n      for (const scroller of Array.from(parentScroller)) {\n        (scroller as HTMLElement).style.overflowX = \"hidden\";\n      }\n      startX.current = \"touches\" in event ? event.touches[0].clientX : event.clientX;\n      startY.current = \"touches\" in event ? event.touches[0].clientY : event.clientY;\n      startScrollTop.current = document.documentElement.scrollTop;\n      isDragging.current = true;\n      isScrolling.current = false;\n      isSwiping.current = false;\n    },\n    [onPointerDownProp]\n  );\n\n  const handlePointerMove = useCallback(\n    (event: TouchEvent | PointerEvent): void => {\n      if (isSwiping.current && event.cancelable) {\n        event.preventDefault();\n      }\n      if (!isDragging.current) {\n        return;\n      }\n      const clientX = \"touches\" in event ? event.touches[0].clientX : event.clientX;\n      const clientY = \"touches\" in event ? event.touches[0].clientY : event.clientY;\n      const deltaX = clientX - startX.current - (isOpen.current ? width : 0);\n      const deltaY = Math.abs(clientY - startY.current);\n\n      if (deltaY > props.scrollThreshold && !isSwiping.current) {\n        isScrolling.current = true;\n      }\n\n      if (deltaX < -props.initiateTreshold && !isScrolling.current) {\n        isSwiping.current = true;\n        updateTranslate(MathUtils_clamp(deltaX, -width, 0));\n        return;\n      }\n    },\n    [width, props.scrollThreshold, props.initiateTreshold, updateTranslate]\n  );\n\n  const handlePointerUp = useCallback((): void => {\n    if (!isDragging.current) {\n      return;\n    }\n    isDragging.current = false;\n    const parentScroller = document.querySelectorAll(\".parent-scroller\");\n    for (const scroller of Array.from(parentScroller)) {\n      (scroller as HTMLElement).style.overflowX = \"scroll\";\n    }\n\n    const current = translateXRef.current;\n    if (!isOpen.current && current < -openThreshold) {\n      updateTranslate(-width);\n      isOpen.current = true;\n    } else if (isOpen.current && current > -closeThreshold) {\n      updateTranslate(0);\n      isOpen.current = false;\n    } else {\n      updateTranslate(isOpen.current ? -width : 0);\n    }\n  }, [openThreshold, closeThreshold, width, updateTranslate]);\n\n  useEffect(() => {\n    const el = moveRef.current;\n    if (!el) {\n      return;\n    }\n    el.addEventListener(\"touchstart\", handlePointerDown, { passive: true });\n    el.addEventListener(\"touchend\", handlePointerUp, { passive: true });\n    el.addEventListener(\"touchcancel\", handlePointerUp, { passive: true });\n    el.addEventListener(\"touchmove\", handlePointerMove, { passive: false });\n    el.addEventListener(\"pointerdown\", handlePointerDown, { passive: true });\n    el.addEventListener(\"pointerup\", handlePointerUp, { passive: true });\n    el.addEventListener(\"pointercancel\", handlePointerUp, { passive: true });\n    el.addEventListener(\"pointermove\", handlePointerMove, { passive: false });\n    return () => {\n      el.removeEventListener(\"touchstart\", handlePointerDown);\n      el.removeEventListener(\"touchend\", handlePointerUp);\n      el.removeEventListener(\"touchcancel\", handlePointerUp);\n      el.removeEventListener(\"touchmove\", handlePointerMove);\n      el.removeEventListener(\"pointerdown\", handlePointerDown);\n      el.removeEventListener(\"pointerup\", handlePointerUp);\n      el.removeEventListener(\"pointercancel\", handlePointerUp);\n      el.removeEventListener(\"pointermove\", handlePointerMove);\n    };\n  }, [handlePointerDown, handlePointerMove, handlePointerUp]);\n\n  const close = (): void => {\n    updateTranslate(0);\n    isOpen.current = false;\n  };\n\n  return children({\n    style: {\n      animation: props.showHint ? \"swipeable-row-hint 3s ease-in-out infinite\" : undefined,\n      transform: !props.showHint ? `translateX(${translateX}px)` : undefined,\n      transition: isDragging.current ? \"none\" : \"transform 0.3s ease-in-out\",\n    },\n    close,\n    moveRef,\n  });\n}\n","import type { JSX } from \"react\";\nimport { IconMoon } from \"./icons/iconMoon\";\nimport { IconSun } from \"./icons/iconSun\";\nimport { PageTheme_toggle } from \"../utils/pageTheme\";\nimport { Tailwind_semantic } from \"../utils/tailwindConfig\";\n\ninterface IProps {\n  size?: number;\n  isWhite?: boolean;\n  className?: string;\n}\n\n// Which icon is visible is driven by the `dark`/`light` class on <html> rather than React state,\n// so the server-rendered markup matches whatever theme the pre-paint script picked.\nexport function ThemeToggle(props: IProps): JSX.Element {\n  const size = props.size ?? 20;\n  const color = props.isWhite ? Tailwind_semantic().icon.white : Tailwind_semantic().text.primary;\n  return (\n    <button\n      className={`p-2 leading-none nm-theme-toggle cursor-pointer ${props.className || \"\"}`}\n      title=\"Switch between dark and light theme\"\n      aria-label=\"Switch between dark and light theme\"\n      onClick={() => PageTheme_toggle()}\n    >\n      <span className=\"block dark:hidden\">\n        <IconMoon size={size} color={color} />\n      </span>\n      <span className=\"hidden dark:block\">\n        <IconSun size={size} color={color} />\n      </span>\n    </button>\n  );\n}\n","import { JSX, useState } from \"react\";\nimport { IconHamburger } from \"./icons/iconHamburger\";\nimport { Account } from \"./account\";\nimport { IconUser } from \"./icons/iconUser\";\nimport { IAccount } from \"../models/account\";\nimport { Modal } from \"./modal\";\nimport { IconReddit } from \"./icons/iconReddit\";\nimport { IconDiscord } from \"./icons/iconDiscord\";\nimport { IconClose } from \"./icons/iconClose\";\nimport { IconApple } from \"./icons/iconApple\";\nimport { Onelink } from \"./onelink\";\nimport { IconInstagramFlat } from \"./icons/iconInstagramFlat\";\nimport { IconYoutube } from \"./icons/iconYoutube\";\nimport { IconGooglePlay } from \"./icons/iconGooglePlay\";\nimport { IconSpinner } from \"./icons/iconSpinner\";\nimport { Tailwind_semantic } from \"../utils/tailwindConfig\";\nimport { track } from \"../utils/posthog\";\nimport { ThemeToggle } from \"./themeToggle\";\n\nexport function TopNavMenu(props: {\n  client: Window[\"fetch\"];\n  maxWidth: number;\n  current?: string;\n  isLoggedIn: boolean;\n  account?: IAccount;\n  mobileRight?: JSX.Element;\n  isWhite?: boolean;\n}): JSX.Element {\n  const [isMenuOpen, setIsMenuOpen] = useState(false);\n  const [isAccountModalOpen, setIsAccountModalOpen] = useState(false);\n  const isLoggedIn = props.isLoggedIn;\n\n  return (\n    <nav className=\"w-full mx-auto\">\n      <div className=\"flex items-center\">\n        {/* Mobile nav */}\n        <div className=\"flex items-center w-full gap-2 px-4 py-4 md:hidden\">\n          <div className=\"flex items-center gap-2 mr-auto\">\n            <div className=\"overflow-hidden rounded-lg\" style={{ width: \"2.5rem\", height: \"2.5rem\" }}>\n              <a href=\"/\" className=\"flex items-center no-underline\">\n                <img\n                  className=\"inline align-middle\"\n                  style={{ width: \"2.5rem\", height: \"2.5rem\" }}\n                  src=\"/images/icon.svg\"\n                  alt=\"Liftosaur Logo\"\n                />\n              </a>\n            </div>\n            <div className={`text-xl font-bold ${props.isWhite ? \"text-text-alwayswhite\" : \"\"}`}>Liftosaur</div>\n          </div>\n          {props.mobileRight}\n          <div className=\"flex flex-row items-center gap-2\">\n            <ThemeToggle isWhite={props.isWhite} />\n            <button\n              className=\"p-2 align-middle bg-background-default rounded-lg nm-navbar-hamburger leading-none\"\n              onClick={() => setIsMenuOpen(true)}\n            >\n              <IconHamburger />\n            </button>\n          </div>\n        </div>\n\n        {/* Mobile full-screen overlay menu */}\n        {isMenuOpen && (\n          <div className=\"fixed inset-0 z-50 overflow-y-auto bg-background-default md:hidden\">\n            <div className=\"p-4\">\n              <div className=\"flex items-center justify-between mb-8\">\n                <div className=\"flex items-center gap-2\">\n                  <div className=\"overflow-hidden rounded-lg\" style={{ width: \"2.5rem\", height: \"2.5rem\" }}>\n                    <a href=\"/\" className=\"flex items-center no-underline\">\n                      <img\n                        className=\"inline align-middle\"\n                        style={{ width: \"2.5rem\", height: \"2.5rem\" }}\n                        src=\"/images/icon.svg\"\n                        alt=\"Liftosaur Logo\"\n                      />\n                    </a>\n                  </div>\n                  <div className=\"text-xl font-bold\">Liftosaur</div>\n                </div>\n                <div className=\"flex items-center\">\n                  <ThemeToggle />\n                  <button className=\"p-2\" onClick={() => setIsMenuOpen(false)}>\n                    <IconClose size={20} color={Tailwind_semantic().text.primary} />\n                  </button>\n                </div>\n              </div>\n              <div className=\"flex flex-col gap-4 mb-6\">\n                {getMenuItems(isLoggedIn, !!props.account?.affiliateEnabled).map(([text, link]) => (\n                  <a key={text} className=\"font-semibold no-underline\" href={link} onClick={() => setIsMenuOpen(false)}>\n                    {text}\n                  </a>\n                ))}\n              </div>\n              <div className=\"pt-6 mb-6 border-t border-border-neutral\">\n                {isLoggedIn ? (\n                  <button\n                    className=\"font-semibold text-text-purple\"\n                    onClick={() => {\n                      setIsMenuOpen(false);\n                      setIsAccountModalOpen(true);\n                    }}\n                  >\n                    Sign Out\n                  </button>\n                ) : (\n                  <button\n                    className=\"font-semibold text-text-purple\"\n                    onClick={() => {\n                      setIsMenuOpen(false);\n                      setIsAccountModalOpen(true);\n                    }}\n                  >\n                    Sign In\n                  </button>\n                )}\n              </div>\n              <div className=\"flex flex-col gap-3 mb-8\">\n                <Onelink\n                  className=\"flex items-center gap-3 text-text-primary no-underline\"\n                  onClick={() => track({ redditname: \"Lead\", googlename: \"outbound_click\" })}\n                >\n                  <IconApple color={Tailwind_semantic().text.primary} />\n                  <span className=\"text-base\">App Store</span>\n                </Onelink>\n                <Onelink\n                  type=\"android\"\n                  target=\"_blank\"\n                  className=\"flex items-center gap-3 text-text-primary no-underline\"\n                  onClick={() => track({ redditname: \"Lead\", googlename: \"outbound_click\" })}\n                >\n                  <IconGooglePlay size={20} color={Tailwind_semantic().text.primary} />\n                  <span className=\"text-base\">Google Play</span>\n                </Onelink>\n              </div>\n              <div className=\"pt-6 border-t border-border-neutral\">\n                <div className=\"flex items-center justify-center gap-5\">\n                  <a href=\"https://www.instagram.com/liftosaurapp\" target=\"_blank\">\n                    <IconInstagramFlat size={24} color={Tailwind_semantic().text.primary} />\n                  </a>\n                  <a href=\"https://x.com/liftosaur\" target=\"_blank\">\n                    <IconYoutube size={24} color={Tailwind_semantic().text.primary} />\n                  </a>\n                  <a href=\"https://www.reddit.com/r/liftosaur\" target=\"_blank\">\n                    <IconReddit size={24} color={Tailwind_semantic().text.primary} />\n                  </a>\n                  <a href=\"https://discord.gg/AAh3cvdBRs\" target=\"_blank\">\n                    <IconDiscord size={24} color={Tailwind_semantic().text.primary} />\n                  </a>\n                </div>\n              </div>\n            </div>\n          </div>\n        )}\n\n        <DesktopNav\n          maxWidth={props.maxWidth}\n          current={props.current}\n          onAccountClick={() => setIsAccountModalOpen(true)}\n          isLoggedIn={isLoggedIn}\n          affiliateEnabled={!!props.account?.affiliateEnabled}\n          isWhite={props.isWhite}\n        />\n      </div>\n      <ModalAccount\n        isHidden={!isAccountModalOpen}\n        client={props.client}\n        account={props.account}\n        isLoggedIn={isLoggedIn}\n        onClose={() => setIsAccountModalOpen(false)}\n      />\n    </nav>\n  );\n}\n\nfunction getMenuItems(isLoggedIn: boolean, affiliateEnabled: boolean): readonly (readonly [string, string, string?])[] {\n  return [\n    [\"Programs\", \"/programs\"],\n    [\"Exercises\", \"/exercises\"],\n    [\"Web Editor\", \"/planner\"],\n    [\"Docs\", \"/doc\"],\n    [\"Blog\", \"/blog\"],\n    [\"AI Helper\", \"/ai/prompt\"],\n    ...(isLoggedIn ? [[\"My Programs\", \"/user/programs\"] as const] : []),\n    ...(isLoggedIn && affiliateEnabled ? [[\"Affiliate Stats\", \"/user/affiliates\"] as const] : []),\n  ];\n}\n\ninterface IDesktopNavProps {\n  current?: string;\n  onAccountClick: () => void;\n  isLoggedIn: boolean;\n  affiliateEnabled: boolean;\n  isWhite?: boolean;\n  maxWidth: number;\n}\n\nfunction DesktopNav(props: IDesktopNavProps): JSX.Element {\n  return (\n    <div className={`mb-4 w-full hidden md:block ${props.isWhite ? \"\" : \"border-b border-background-neutral\"}`}>\n      <div\n        className={`mx-auto px-4 py-4 items-center gap-4 flex-1 hidden text-text-primary md:flex ${props.isWhite ? \"text-text-alwayswhite\" : \"\"}`}\n        style={{ maxWidth: `${props.maxWidth}px` }}\n      >\n        <a href=\"/\" className=\"flex items-center gap-4 mr-auto no-underline shrink-0\">\n          <div className=\"overflow-hidden rounded-lg\" style={{ width: \"3em\", height: \"3em\" }}>\n            <img\n              className=\"inline align-middle\"\n              style={{ width: \"100%\", height: \"100%\" }}\n              src=\"/images/icon.svg\"\n              alt=\"Liftosaur Logo\"\n            />\n          </div>\n          <span className=\"text-xl font-bold\">Liftosaur</span>\n        </a>\n        <div className=\"flex items-center gap-4\">\n          <ul className=\"flex flex-wrap items-center justify-end leading-none list-none gap-x-4\">\n            {getMenuItems(props.isLoggedIn, props.affiliateEnabled).map(([text, link, hideClass]) => (\n              <li key={text} className={`list-none ${hideClass || \"\"}`}>\n                {props.current === link ? (\n                  <span\n                    className={`py-1 text-sm underline ${props.isWhite ? \"text-text-alwayswhite\" : \"text-text-purple\"}`}\n                  >\n                    {text}\n                  </span>\n                ) : (\n                  <a\n                    className={`py-1 text-sm font-medium ${props.isWhite ? \"text-text-alwayswhite\" : \"text-text-secondary\"} no-underline hover:underline`}\n                    href={link}\n                  >\n                    {text}\n                  </a>\n                )}\n              </li>\n            ))}\n          </ul>\n          <div className=\"bg-border-prominent\" style={{ width: \"1px\", height: \"1.5rem\" }} />\n          <div className=\"flex items-center gap-4 shrink-0\">\n            <a href=\"https://www.instagram.com/liftosaurapp\" target=\"_blank\">\n              <IconInstagramFlat\n                color={props.isWhite ? Tailwind_semantic().icon.white : Tailwind_semantic().text.primary}\n              />\n            </a>\n            <a href=\"https://www.youtube.com/@Liftosaur\" target=\"_blank\">\n              <IconYoutube\n                color={props.isWhite ? Tailwind_semantic().icon.white : Tailwind_semantic().text.primary}\n                secondaryColor={props.isWhite ? Tailwind_semantic().icon.purple : Tailwind_semantic().icon.white}\n              />\n            </a>\n            <a href=\"https://www.reddit.com/r/liftosaur\" target=\"_blank\">\n              <IconReddit\n                color={props.isWhite ? Tailwind_semantic().icon.white : Tailwind_semantic().text.primary}\n                secondaryColor={props.isWhite ? Tailwind_semantic().icon.purple : Tailwind_semantic().icon.white}\n              />\n            </a>\n            <a href=\"https://discord.gg/AAh3cvdBRs\" target=\"_blank\">\n              <IconDiscord color={props.isWhite ? Tailwind_semantic().icon.white : Tailwind_semantic().text.primary} />\n            </a>\n            <div className=\"bg-border-prominent\" style={{ width: \"1px\", height: \"1.5rem\" }} />\n            {props.isLoggedIn ? (\n              <button onClick={() => props.onAccountClick()} className=\"p-1\">\n                <IconUser size={20} color={Tailwind_semantic().icon.green} />\n              </button>\n            ) : (\n              <button\n                onClick={() => props.onAccountClick()}\n                className={`text-sm font-medium ${props.isWhite ? \"text-text-alwayswhite\" : \"text-text-secondary\"} no-underline hover:underline whitespace-nowrap`}\n              >\n                Sign In\n              </button>\n            )}\n            <ThemeToggle isWhite={props.isWhite} />\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n}\n\ninterface IModalAccountProps {\n  client: Window[\"fetch\"];\n  account?: IAccount;\n  isLoggedIn: boolean;\n  isHidden: boolean;\n  onClose: () => void;\n}\n\nfunction ModalAccount(props: IModalAccountProps): JSX.Element {\n  return (\n    <Modal isHidden={props.isHidden} onClose={props.onClose} shouldShowClose={true}>\n      {props.isLoggedIn && props.account == null ? (\n        <div className=\"py-8 text-center\">\n          <IconSpinner width={20} height={20} />\n        </div>\n      ) : (\n        <Account account={props.account} client={props.client} />\n      )}\n    </Modal>\n  );\n}\n","import { JSX } from \"react\";\nimport { View } from \"react-native\";\nimport { Text } from \"./primitives/text\";\nimport { ISet, ISettings, IExerciseType, IWeight } from \"../types\";\nimport { n } from \"../utils/math\";\nimport {\n  Weight_isPct,\n  Weight_display,\n  Weight_evaluateWeight,\n  Weight_convertTo,\n  Weight_calculatePlates,\n  Weight_formatOneSide,\n} from \"../models/weight\";\nimport { Exercise_onerm, Exercise_defaultRounding } from \"../models/exercise\";\nimport {\n  Equipment_getEquipmentDataForExerciseType,\n  Equipment_getEquipmentNameForExerciseType,\n  Equipment_getUnitOrDefaultForExerciseType,\n} from \"../models/equipment\";\nimport { CollectionUtils_sort } from \"../utils/collection\";\n\ninterface IWeightRoundingInfoContentProps {\n  set: ISet;\n  exerciseType: IExerciseType;\n  settings: ISettings;\n}\n\nexport function WeightRoundingInfoContent(props: IWeightRoundingInfoContentProps): JSX.Element {\n  const { set, exerciseType, settings } = props;\n  const originalWeight = set.originalWeight;\n  const weight = set.weight;\n  const unit = Equipment_getUnitOrDefaultForExerciseType(settings, exerciseType);\n  const equipmentData = Equipment_getEquipmentDataForExerciseType(settings, exerciseType);\n  const equipmentName = Equipment_getEquipmentNameForExerciseType(settings, exerciseType);\n  const evaluatedWeight =\n    originalWeight != null\n      ? Weight_convertTo(Weight_evaluateWeight(originalWeight, exerciseType, settings), unit)\n      : undefined;\n\n  return (\n    <View testID=\"weight-rounding-info\">\n      <Text className=\"pb-1 text-base font-bold\">Why is the weight adjusted?</Text>\n      {originalWeight != null && weight != null && (\n        <Text className=\"pb-3 text-lg\" testID=\"weight-rounding-headline\">\n          <Text className=\"text-lg line-through text-text-secondary\">{Weight_display(originalWeight)}</Text>\n          <Text className=\"text-lg text-text-secondary\"> → </Text>\n          <Text className=\"text-lg font-bold text-syntax-weight\">{Weight_display(weight)}</Text>\n        </Text>\n      )}\n      {Weight_isPct(originalWeight) && evaluatedWeight != null && (\n        <Text className=\"pb-2 text-sm\">\n          The program sets the target as a percentage of your 1RM:{\" \"}\n          <Text className=\"text-sm font-semibold text-syntax-weight\">{Weight_display(originalWeight)}</Text> of{\" \"}\n          <Text className=\"text-sm font-semibold text-syntax-weight\">\n            {Weight_display(Weight_convertTo(Exercise_onerm(exerciseType, settings), unit))}\n          </Text>{\" \"}\n          is <Text className=\"text-sm font-semibold text-syntax-weight\">{Weight_display(evaluatedWeight)}</Text>.\n        </Text>\n      )}\n      {!Weight_isPct(originalWeight) &&\n        originalWeight != null &&\n        originalWeight.unit !== unit &&\n        evaluatedWeight != null && (\n          <Text className=\"pb-2 text-sm\">\n            The program's weight is in <Text className=\"text-sm font-semibold\">{originalWeight.unit}</Text> — converted\n            to <Text className=\"text-sm font-semibold\">{unit}</Text> it's{\" \"}\n            <Text className=\"text-sm font-semibold text-syntax-weight\">{Weight_display(evaluatedWeight)}</Text>.\n          </Text>\n        )}\n      <Text className=\"pb-2 text-sm\">\n        The app adjusts the program's exact weight to match what you can actually load with your equipment.\n      </Text>\n      <WeightRoundingEquipmentExplanation\n        settings={settings}\n        exerciseType={exerciseType}\n        unit={unit}\n        targetWeight={evaluatedWeight ?? weight}\n        equipmentName={equipmentName}\n      />\n      {equipmentData?.isAssisting && (\n        <View className=\"p-3 mt-2 border rounded-lg border-border-cardyellow bg-background-cardyellow\">\n          <Text className=\"text-sm font-bold\">This equipment is marked as \"Is Assisting\".</Text>\n          <Text className=\"pt-1 text-sm\">\n            Added weight is <Text className=\"text-sm font-semibold\">subtracted</Text> from the total — like an assisted\n            pull-up machine, where more weight makes the exercise easier. That can make the working weight much lower\n            than the target, or even <Text className=\"text-sm font-semibold\">0</Text>. If that's not how{\" \"}\n            <Text className=\"text-sm font-bold\">{equipmentName ? `\"${equipmentName}\"` : \"this equipment\"}</Text> works,\n            turn off \"Is Assisting\" in the equipment settings.\n          </Text>\n        </View>\n      )}\n    </View>\n  );\n}\n\ninterface IWeightRoundingEquipmentExplanationProps {\n  settings: ISettings;\n  exerciseType: IExerciseType;\n  unit: IWeight[\"unit\"];\n  targetWeight?: IWeight;\n  equipmentName?: string;\n}\n\nfunction WeightRoundingEquipmentExplanation(props: IWeightRoundingEquipmentExplanationProps): JSX.Element {\n  const { settings, exerciseType, unit, targetWeight, equipmentName } = props;\n  const equipmentData = Equipment_getEquipmentDataForExerciseType(settings, exerciseType);\n\n  if (equipmentData == null) {\n    const rounding = Exercise_defaultRounding(exerciseType, settings);\n    return (\n      <Text className=\"text-sm\">\n        This exercise has no equipment set up, so the weight is rounded to the nearest{\" \"}\n        <Text className=\"text-sm font-semibold text-syntax-weight\">\n          {n(rounding)}\n          {unit}\n        </Text>\n        . You can change the rounding or assign equipment in the exercise settings.\n      </Text>\n    );\n  }\n\n  const name = <Text className=\"text-sm font-bold\">{equipmentName ? `\"${equipmentName}\"` : \"This equipment\"}</Text>;\n\n  if (equipmentData.isFixed) {\n    const fixed = CollectionUtils_sort(\n      equipmentData.fixed.filter((w) => w.unit === (equipmentData.unit ?? unit)),\n      (a, b) => a.value - b.value\n    );\n    return (\n      <Text className=\"text-sm\">\n        {name} uses fixed weights\n        {fixed.length > 0 ? (\n          <>\n            : <Text className=\"text-sm font-semibold text-text-purple\">{fixed.map((w) => n(w.value)).join(\", \")}</Text>{\" \"}\n            <Text className=\"text-sm font-semibold text-text-purple\">{equipmentData.unit ?? unit}</Text>\n          </>\n        ) : (\n          \", but none are set up for your current unit\"\n        )}\n        . The app picks the heaviest one that doesn't exceed the target — or the lightest one, if they're all heavier.\n        You can edit the list in the equipment settings.\n      </Text>\n    );\n  }\n\n  const usesBodyweight = equipmentData.useBodyweightForBar && settings.currentBodyweight != null;\n  const barWeight = usesBodyweight && settings.currentBodyweight ? settings.currentBodyweight : equipmentData.bar[unit];\n  const platesResult = targetWeight ? Weight_calculatePlates(targetWeight, settings, unit, exerciseType) : undefined;\n  return (\n    <Text className=\"text-sm\">\n      {name} uses{\" \"}\n      {usesBodyweight ? (\n        <>\n          your bodyweight (<Text className=\"text-sm font-semibold text-syntax-weight\">{Weight_display(barWeight)}</Text>\n          ) as the base weight\n        </>\n      ) : (\n        <>\n          a <Text className=\"text-sm font-semibold text-syntax-weight\">{Weight_display(barWeight)}</Text> bar\n        </>\n      )}\n      {platesResult != null ? (\n        <>\n          {\" \"}\n          {equipmentData.isAssisting ? \"minus\" : \"plus\"} the plates you have available\n          {platesResult.plates.length > 0 ? (\n            <>\n              {\" \"}\n              (\n              <Text className=\"text-sm font-semibold text-text-purple\">\n                {Weight_formatOneSide(settings, platesResult.plates, exerciseType)}\n              </Text>{\" \"}\n              per side)\n            </>\n          ) : (\n            <Text className=\"text-sm text-text-purple\"> (no plates fit here)</Text>\n          )}\n          , so the closest loadable weight is{\" \"}\n          <Text className=\"text-sm font-semibold text-syntax-weight\">{Weight_display(platesResult.totalWeight)}</Text>\n        </>\n      ) : (\n        <> plus the plates you have available</>\n      )}\n      . You can edit the bar weight and available plates in the equipment settings.\n    </Text>\n  );\n}\n","import type { JSX } from \"react\";\nimport { View, Pressable } from \"react-native\";\nimport { Text } from \"./primitives/text\";\nimport { IDispatch } from \"../ducks/types\";\nimport {\n  ISettings,\n  ISet,\n  IExerciseType,\n  ISubscription,\n  IProgramState,\n  IHistoryRecord,\n  ITargetType,\n  IHistoryEntry,\n  IStats,\n} from \"../types\";\nimport { IPlannerProgramExercise } from \"../pages/planner/models/types\";\nimport { updateProgress } from \"../models/state\";\nimport { lb, LensBuilder } from \"lens-shmens\";\nimport { WorkoutExerciseSet, computeSetColumnWidths } from \"./workoutExerciseSet\";\nimport { Reps_isFinishedSet, Reps_addSet } from \"../models/set\";\nimport { n } from \"../utils/math\";\nimport { TimeUtils_formatMMSS } from \"../utils/time\";\nimport { IconPlus2 } from \"./icons/iconPlus2\";\nimport { Tailwind_colors } from \"../utils/tailwindConfig\";\nimport { IByExercise } from \"../pages/planner/plannerEvaluator\";\nimport { WorkoutExerciseUtils_getBgColor100 } from \"../utils/workoutExerciseUtils\";\nimport { Equipment_getUnitOrDefaultForExerciseType } from \"../models/equipment\";\nimport { IconSwapSmall } from \"./icons/iconSwapSmall\";\nimport { ProgressStateChanges, ProgressStateChangesView } from \"./progressStateChanges\";\nimport { IEvaluatedProgram } from \"../models/program\";\nimport { Exercise_getIsUnilateral } from \"../models/exercise\";\nimport { memo, useCallback, useMemo } from \"react\";\nimport { usePerfRenderCount } from \"../utils/usePerfRenderCount\";\nimport { useTrackClick } from \"../utils/clickTracking\";\nimport { useRem } from \"../utils/useRem\";\n\ninterface IWorkoutExerciseAllSets {\n  day: number;\n  isCurrentProgress: boolean;\n  isPlayground: boolean;\n  exerciseType: IExerciseType;\n  lbWarmupSets: LensBuilder<IHistoryRecord, ISet[], {}>;\n  lbSets: LensBuilder<IHistoryRecord, ISet[], {}>;\n  entry: IHistoryEntry;\n  entryIndex: number;\n  lastSets?: ISet[];\n  helps?: string[];\n  stats: IStats;\n  onStopShowingHint?: () => void;\n  onTargetClick?: () => void;\n  subscription?: ISubscription;\n  userPromptedStateVars?: IProgramState;\n  program?: IEvaluatedProgram;\n  programExercise?: IPlannerProgramExercise;\n  otherStates?: IByExercise<IProgramState>;\n  settings: ISettings;\n  dispatch: IDispatch;\n}\n\nfunction getTargetColumnLabel(targetType: ITargetType): string {\n  switch (targetType) {\n    case \"target\":\n      return \"Target\";\n    case \"lasttime\":\n      return \"Previous Set\";\n    case \"platescalculator\":\n      return \"Plates\";\n    case \"e1rm\":\n      return \"e1RM\";\n  }\n}\n\nfunction WorkoutExerciseAllSetsInner(props: IWorkoutExerciseAllSets): JSX.Element {\n  usePerfRenderCount(\"WorkoutExerciseAllSets\");\n  const warmupSets = props.entry.warmupSets;\n  const sets = props.entry.sets;\n  const buttonBgColor = WorkoutExerciseUtils_getBgColor100(sets, false);\n  const nextSetIndex = [...warmupSets, ...sets].findIndex((s) => !Reps_isFinishedSet(s));\n  const exerciseUnit =\n    sets[0]?.completedWeight?.unit ??\n    sets[0]?.weight?.unit ??\n    warmupSets[0]?.completedWeight?.unit ??\n    warmupSets[0]?.weight?.unit ??\n    Equipment_getUnitOrDefaultForExerciseType(props.settings, props.exerciseType);\n  const targetLabel = getTargetColumnLabel(props.settings.workoutSettings.targetType);\n  const lbEntry = useMemo(() => lb<IHistoryRecord>().p(\"entries\").i(props.entryIndex), [props.entryIndex]);\n  const isUnilateral = Exercise_getIsUnilateral(props.exerciseType, props.settings);\n  const remValue = useRem();\n  const rpeLabel = useMemo(() => {\n    const allSets = [...sets, ...warmupSets];\n    let longest = \"\";\n    for (const s of allSets) {\n      if (s.completedRpe != null) {\n        const label = `@${n(s.completedRpe)}`;\n        if (label.length > longest.length) {\n          longest = label;\n        }\n      }\n      if (s.completedSetTimer != null) {\n        const label = TimeUtils_formatMMSS(s.completedSetTimer * 1000);\n        if (label.length > longest.length) {\n          longest = label;\n        }\n      }\n    }\n    return longest;\n  }, [sets, warmupSets]);\n  const rpeColumnLabel = useMemo(() => {\n    const allSets = [...sets, ...warmupSets];\n    const hasRpe = allSets.some((s) => s.completedRpe != null);\n    const hasTime = allSets.some((s) => s.completedSetTimer != null);\n    if (hasRpe && hasTime) {\n      return \"RPE/Time\";\n    }\n    return hasTime ? \"Time\" : \"RPE\";\n  }, [sets, warmupSets]);\n  // The column must fit both the recorded values and its header, so size it by whichever is wider.\n  const rpeColumnWidthLabel =\n    rpeLabel.length === 0 ? \"\" : rpeLabel.length >= rpeColumnLabel.length ? rpeLabel : rpeColumnLabel;\n  const hasTime = rpeColumnLabel.indexOf(\"Time\") >= 0;\n  const columnWidths = useMemo(() => {\n    const widths = computeSetColumnWidths(remValue, isUnilateral, rpeColumnWidthLabel);\n    // Time values (mm:ss) and the tap target read better with a touch more room than RPE.\n    return hasTime ? { ...widths, rpe: widths.rpe + Math.round(0.75 * remValue) } : widths;\n  }, [remValue, isUnilateral, rpeColumnWidthLabel, hasTime]);\n  const lbWarmupSetByIndex = useMemo(\n    () => warmupSets.map((_, i) => props.lbWarmupSets.i(i)),\n    [props.lbWarmupSets, warmupSets.length]\n  );\n  const lbSetByIndex = useMemo(() => sets.map((_, i) => props.lbSets.i(i)), [props.lbSets, sets.length]);\n\n  const { dispatch, lbWarmupSets, lbSets, lastSets, exerciseType, settings } = props;\n  const trackClick = useTrackClick();\n  const onAddWarmupSet = useCallback(() => {\n    trackClick(\"workout-add-warmup-set\");\n    const unilateral = Exercise_getIsUnilateral(exerciseType, settings);\n    updateProgress(\n      dispatch,\n      [lbWarmupSets.recordModify((s) => Reps_addSet(s, unilateral, undefined, true))],\n      \"add-warmupset\"\n    );\n  }, [dispatch, exerciseType, lbWarmupSets, settings, trackClick]);\n  const onAddSet = useCallback(() => {\n    trackClick(\"workout-add-set\");\n    const unilateral = Exercise_getIsUnilateral(exerciseType, settings);\n    updateProgress(\n      dispatch,\n      [lbSets.recordModify((s) => Reps_addSet(s, unilateral, lastSets ? lastSets[lastSets.length - 1] : undefined))],\n      \"add-set\"\n    );\n  }, [dispatch, exerciseType, lbSets, lastSets, settings, trackClick]);\n\n  const onSuppressProgress = useCallback(\n    (isSuppressed: boolean) => {\n      updateProgress(\n        dispatch,\n        lbEntry.recordModify((e) => ({ ...e, isSuppressed })),\n        \"suppress\"\n      );\n    },\n    [dispatch, lbEntry]\n  );\n\n  return (\n    <View className=\"overflow-hidden\">\n      <View className=\"flex-row items-center pb-1 border-b border-border-neutral\">\n        <View className=\"items-center\" style={{ width: columnWidths.set }}>\n          <Text className=\"text-xs text-text-secondary\">Set</Text>\n        </View>\n        <View className=\"flex-1\">\n          <Pressable onPress={props.onTargetClick} className=\"flex-row items-center\">\n            {targetLabel ? <Text className=\"mr-1 text-xs text-text-secondary\">{targetLabel}</Text> : null}\n            {props.onTargetClick && <IconSwapSmall size={12} color={Tailwind_colors().lightgray[600]} />}\n          </Pressable>\n        </View>\n        <View className=\"items-center\" style={{ width: columnWidths.reps }}>\n          <Text className=\"text-xs text-text-secondary\">Reps</Text>\n        </View>\n        <View style={{ width: columnWidths.separator }} />\n        <View className=\"items-center\" style={{ width: columnWidths.weight }}>\n          <Text className=\"text-xs text-text-secondary\">{exerciseUnit}</Text>\n        </View>\n        {columnWidths.rpe > 0 ? (\n          <View className=\"items-center ml-1\" style={{ width: columnWidths.rpe }}>\n            <Text numberOfLines={1} className=\"text-xs text-center text-text-secondary\">\n              {rpeColumnLabel}\n            </Text>\n          </View>\n        ) : null}\n        <View style={{ width: columnWidths.check }} />\n      </View>\n\n      <View>\n        {warmupSets.map((set, i) => (\n          <WorkoutExerciseSet\n            isCurrentProgress={props.isCurrentProgress}\n            isPlayground={props.isPlayground}\n            type=\"warmup\"\n            key={`warmup-${set.id}-${i}`}\n            day={props.day}\n            exerciseType={props.exerciseType}\n            programExercise={props.programExercise}\n            otherStates={props.otherStates}\n            subscription={props.subscription}\n            lbSets={props.lbWarmupSets}\n            lbSet={lbWarmupSetByIndex[i]}\n            set={set}\n            entryIndex={props.entryIndex}\n            isNext={nextSetIndex === i}\n            setIndex={i}\n            columnWidths={columnWidths}\n            settings={props.settings}\n            dispatch={props.dispatch}\n          />\n        ))}\n        {sets.map((set, i) => (\n          <WorkoutExerciseSet\n            isPlayground={props.isPlayground}\n            isCurrentProgress={props.isCurrentProgress}\n            type=\"workout\"\n            key={`workout-${set.id}-${i}`}\n            onStopShowingHint={props.onStopShowingHint}\n            helps={props.helps}\n            isNext={nextSetIndex - warmupSets.length === i}\n            programExercise={props.programExercise}\n            day={props.day}\n            otherStates={props.otherStates}\n            exerciseType={props.exerciseType}\n            lastSet={props.lastSets?.[i]}\n            subscription={props.subscription}\n            lbSets={props.lbSets}\n            lbSet={lbSetByIndex[i]}\n            set={set}\n            entryIndex={props.entryIndex}\n            setIndex={i}\n            columnWidths={columnWidths}\n            settings={props.settings}\n            dispatch={props.dispatch}\n          />\n        ))}\n      </View>\n\n      {props.programExercise && props.program ? (\n        <View className=\"mx-4 mt-2\">\n          <ProgressStateChanges\n            entry={props.entry}\n            settings={props.settings}\n            dayData={props.programExercise.dayData}\n            programExercise={props.programExercise}\n            stats={props.stats}\n            program={props.program}\n            userPromptedStateVars={props.userPromptedStateVars}\n            onSuppressProgress={onSuppressProgress}\n          />\n        </View>\n      ) : (\n        props.entry.progressSnapshot && (\n          <View className=\"mx-4 mt-2\">\n            <ProgressStateChangesView\n              diffState={props.entry.progressSnapshot.diffState}\n              diffVars={props.entry.progressSnapshot.diffVars}\n              prints={props.entry.progressSnapshot.prints}\n              updatePrints={props.entry.progressSnapshot.updatePrints}\n              isSuppressed={props.entry.isSuppressed}\n            />\n          </View>\n        )\n      )}\n\n      <View className=\"flex-row gap-2 px-4 mt-1 mb-2\">\n        <View className=\"flex-1\">\n          <Pressable\n            className={`${buttonBgColor} w-full py-2 rounded-md flex-row items-center justify-center`}\n            data-testid=\"add-warmup-set\"\n            testID=\"add-warmup-set\"\n            onPress={onAddWarmupSet}\n          >\n            <IconPlus2 size={10} color={Tailwind_colors().blue[400]} />\n            <Text className=\"ml-2 text-xs font-semibold text-text-link\">Add Warmup Set</Text>\n          </Pressable>\n        </View>\n        <View className=\"flex-1\">\n          <Pressable\n            className={`${buttonBgColor} w-full py-2 rounded-md flex-row items-center justify-center`}\n            data-testid=\"add-workout-set\"\n            testID=\"add-workout-set\"\n            onPress={onAddSet}\n          >\n            <IconPlus2 size={10} color={Tailwind_colors().blue[400]} />\n            <Text className=\"ml-2 text-xs font-semibold text-text-link\">Add Set</Text>\n          </Pressable>\n        </View>\n      </View>\n    </View>\n  );\n}\n\nexport const WorkoutExerciseAllSets = memo(WorkoutExerciseAllSetsInner);\n","import type { JSX } from \"react\";\nimport { memo, useCallback } from \"react\";\nimport { View, Pressable } from \"react-native\";\nimport { Text } from \"./primitives/text\";\nimport { IDispatch } from \"../ducks/types\";\nimport {\n  ISettings,\n  ISet,\n  IExerciseType,\n  ISubscription,\n  IProgramState,\n  IHistoryRecord,\n  IWeight,\n  IPercentage,\n} from \"../types\";\nimport { IconCheckCircle } from \"./icons/iconCheckCircle\";\nimport { IconPlayCircle } from \"./icons/iconPlayCircle\";\nimport { n } from \"../utils/math\";\nimport { TimeUtils_formatMMSS } from \"../utils/time\";\nimport { Tailwind_semantic } from \"../utils/tailwindConfig\";\nimport { InputNumber2 } from \"./inputNumber2\";\nimport { InputWeight2 } from \"./inputWeight2\";\nimport { updateProgress } from \"../models/state\";\nimport { LensBuilder, lb } from \"lens-shmens\";\nimport {\n  WorkoutExerciseUtils_getBorderColor100,\n  WorkoutExerciseUtils_getBgColor50,\n  WorkoutExerciseUtils_getIconColor,\n  WorkoutExerciseUtils_setsStatusToTextColorValue,\n} from \"../utils/workoutExerciseUtils\";\nimport { FastText } from \"./primitives/fastText\";\nimport { StyledText, StyledText_cls } from \"../utils/styledText\";\nimport { useRem } from \"../utils/useRem\";\nimport { SwipeableRow } from \"./swipeableRow\";\nimport { CollectionUtils_removeAt } from \"../utils/collection\";\nimport { IPlannerProgramExercise } from \"../pages/planner/models/types\";\nimport { IByExercise } from \"../pages/planner/plannerEvaluator\";\nimport { EditProgressEntry_showEditSetModal } from \"../models/editProgressEntry\";\nimport { useTrackClick } from \"../utils/clickTracking\";\nimport { Reps_enforceCompletedSet, Reps_setsStatus, Reps_avgUnilateralCompletedReps } from \"../models/set\";\nimport {\n  Weight_eq,\n  Weight_rpeMultiplier,\n  Weight_multiply,\n  Weight_calculatePlates,\n  Weight_formatOneSide,\n  Weight_isPct,\n  Weight_getOneRepMax,\n} from \"../models/weight\";\nimport { Exercise_getIsUnilateral, Exercise_onerm } from \"../models/exercise\";\nimport { FocusedInputFlush_flush } from \"../utils/focusedInputFlush\";\n\nexport interface ISetColumnWidths {\n  set: number;\n  reps: number;\n  separator: number;\n  weight: number;\n  rpe: number;\n  check: number;\n}\n\nfunction computeRpeColumnWidth(rpeLabel: string, remValue: number): number {\n  if (!rpeLabel) {\n    return 0;\n  }\n  let units = 0.3;\n  for (const ch of rpeLabel) {\n    if (ch === \".\") {\n      units += 0.5;\n    } else if (ch === \"@\") {\n      units += 0.5;\n    } else {\n      units += 0.42;\n    }\n  }\n  return Math.max(Math.round(units * remValue), Math.round(1.75 * remValue));\n}\n\n// The set number badge and the check button hold an icon plus constant padding, so they need a\n// fixed part and a scaling part rather than a flat rem multiple - a multiple over-reserves badly\n// at large text sizes, and every point taken here comes out of the target label's flex-1 column.\n// The reps and weight fields stay narrow on purpose: values longer than they fit shrink their own\n// font instead of widening the column (see FitText_fontSize).\nexport function computeSetColumnWidths(remValue: number, isUnilateral: boolean, rpeLabel: string): ISetColumnWidths {\n  const scale = remValue / 16;\n  const labelW = isUnilateral ? remValue : 0;\n  const rpe = computeRpeColumnWidth(rpeLabel, remValue);\n  const iconWidth = 24 * scale;\n  return {\n    set: Math.round(iconWidth + 8),\n    reps: Math.round(2.75 * remValue) + labelW,\n    separator: Math.round(remValue),\n    weight: Math.round(3.25 * remValue),\n    rpe,\n    check: Math.round(iconWidth + (rpe > 0 ? 20 : 32)),\n  };\n}\n\ninterface IWorkoutExerciseSet {\n  exerciseType: IExerciseType;\n  day: number;\n  type: \"warmup\" | \"workout\";\n  lbSet: LensBuilder<IHistoryRecord, ISet, {}>;\n  lbSets: LensBuilder<IHistoryRecord, ISet[], {}>;\n  isCurrentProgress: boolean;\n  lastSet?: ISet;\n  set: ISet;\n  helps?: string[];\n  onStopShowingHint?: () => void;\n  isNext?: boolean;\n  subscription?: ISubscription;\n  isPlayground: boolean;\n  entryIndex: number;\n  programExercise?: IPlannerProgramExercise;\n  otherStates?: IByExercise<IProgramState>;\n  setIndex: number;\n  columnWidths: ISetColumnWidths;\n  settings: ISettings;\n  dispatch: IDispatch;\n}\n\nfunction WorkoutExerciseSetInner(props: IWorkoutExerciseSet): JSX.Element {\n  const trackClick = useTrackClick();\n  const set = props.set;\n  const placeholderReps = `${set.minReps != null ? `${n(set.minReps)}-` : \"\"}${set.reps != null ? n(set.reps) : \"\"}${set.reps != null && set.isAmrap ? \"+\" : \"\"}`;\n  const placeholderWeight = set.weight?.value != null ? `${n(set.weight.value)}${set.askWeight ? \"+\" : \"\"}` : undefined;\n  const completedRpeValue = set.logRpe && set.completedRpe != null ? set.completedRpe : undefined;\n  const borderColor = WorkoutExerciseUtils_getBorderColor100([props.set], false);\n  const hasEdit = props.type === \"workout\";\n  const isUnilateral = Exercise_getIsUnilateral(props.exerciseType, props.settings);\n  const remValue = useRem();\n  const labelW = isUnilateral ? remValue : 0;\n  const repsInputWidth = (props.columnWidths.reps - labelW) / remValue;\n  const weightInputWidth = props.columnWidths.weight / remValue;\n\n  const { dispatch, lbSet, setIndex, entryIndex, programExercise, otherStates, isPlayground, type } = props;\n\n  const onInputLeftReps = useCallback(\n    (value: number | undefined) => {\n      if (value != null && !isNaN(value) && value >= 0) {\n        updateProgress(\n          dispatch,\n          [lbSet.recordModify((s) => ({ ...s, completedRepsLeft: Math.round(value) }))],\n          \"input-left-reps\"\n        );\n      }\n    },\n    [dispatch, lbSet]\n  );\n  const onBlurLeftReps = useCallback(\n    (value: number | undefined) => {\n      updateProgress(dispatch, [lbSet.recordModify((s) => ({ ...s, completedRepsLeft: value }))], \"blur-left-reps\");\n    },\n    [dispatch, lbSet]\n  );\n  const onInputReps = useCallback(\n    (value: number | undefined) => {\n      if (value != null && !isNaN(value) && value >= 0) {\n        updateProgress(\n          dispatch,\n          [\n            lbSet.recordModify((s) => {\n              const newSet = { ...s, completedReps: Math.round(value) };\n              return Reps_enforceCompletedSet(newSet);\n            }),\n          ],\n          \"input-reps\"\n        );\n      }\n    },\n    [dispatch, lbSet]\n  );\n  const onBlurReps = useCallback(\n    (value: number | undefined) => {\n      updateProgress(\n        dispatch,\n        [\n          lbSet.recordModify((s) => {\n            const newSet = { ...s, completedReps: value };\n            return Reps_enforceCompletedSet(newSet);\n          }),\n        ],\n        \"blur-reps\"\n      );\n    },\n    [dispatch, lbSet]\n  );\n  const onBlurWeight = useCallback(\n    (value: IWeight | IPercentage | undefined) => {\n      if (value == null || value.unit !== \"%\") {\n        updateProgress(\n          dispatch,\n          [\n            lbSet.recordModify((s) => {\n              const newSet = { ...s, completedWeight: value };\n              return Reps_enforceCompletedSet(newSet);\n            }),\n          ],\n          \"blur-weight\"\n        );\n      }\n    },\n    [dispatch, lbSet]\n  );\n  const onInputWeight = useCallback(\n    (value: IWeight | IPercentage | undefined) => {\n      if (value != null && value.unit !== \"%\") {\n        updateProgress(\n          dispatch,\n          [\n            lbSet.recordModify((s) => {\n              const newSet = { ...s, completedWeight: value };\n              return Reps_enforceCompletedSet(newSet);\n            }),\n          ],\n          \"input-weight\"\n        );\n      }\n    },\n    [dispatch, lbSet]\n  );\n  const onCompleteSet = useCallback(() => {\n    FocusedInputFlush_flush();\n    dispatch({\n      type: \"CompleteSetAction\",\n      setIndex,\n      entryIndex,\n      programExercise,\n      otherStates,\n      isPlayground,\n      mode: type,\n      forceUpdateEntryIndex: type === \"workout\" && !set.isCompleted,\n      isExternal: false,\n    });\n  }, [dispatch, setIndex, entryIndex, programExercise, otherStates, isPlayground, type, set.isCompleted]);\n  const onEditSetTimer = useCallback(() => {\n    trackClick(\"workout-set-timer-edit-open\");\n    updateProgress(\n      dispatch,\n      [lb<IHistoryRecord>().pi(\"ui\", {}).p(\"setTimerEditModal\").record({ entryIndex, setIndex })],\n      \"open-set-timer-edit\"\n    );\n  }, [dispatch, entryIndex, setIndex, trackClick]);\n  const onOpenRoundingInfo = useCallback(() => {\n    trackClick(\"workout-rounding-info\");\n    updateProgress(\n      dispatch,\n      [lb<IHistoryRecord>().pi(\"ui\", {}).p(\"roundingModal\").record({ entryIndex, setIndex })],\n      \"open-rounding-info\"\n    );\n  }, [dispatch, entryIndex, setIndex, trackClick]);\n  const isRoundedWeight =\n    props.type !== \"warmup\" &&\n    props.settings.workoutSettings.targetType === \"target\" &&\n    set.weight != null &&\n    set.originalWeight != null &&\n    !Weight_eq(set.weight, set.originalWeight);\n\n  return (\n    <SwipeableRow\n      width={hasEdit ? 128 : 64}\n      openThreshold={hasEdit ? 30 : 15}\n      closeThreshold={hasEdit ? 110 : 55}\n      scrollThreshold={7}\n      initiateTreshold={8}\n      onPointerDown={props.onStopShowingHint}\n    >\n      {({ style, close, moveRef }) => (\n        <View\n          ref={moveRef as unknown as React.RefObject<View>}\n          className={`${WorkoutExerciseUtils_getBgColor50([set], props.type === \"warmup\")}`}\n          style={style as object}\n          data-testid={getDataCy(set)}\n          testID={getDataCy(set)}\n        >\n          <View className={`flex-row items-center border-b ${borderColor}`}>\n            <View className=\"items-center justify-center py-1\" style={{ width: props.columnWidths.set }}>\n              <View\n                className=\"w-scaled-6 h-scaled-6 items-center justify-center\"\n                style={{\n                  borderRadius: 9999,\n                  overflow: \"hidden\",\n                  backgroundColor: props.isNext ? Tailwind_semantic().button.primarybackground : \"transparent\",\n                }}\n              >\n                {props.type === \"warmup\" ? (\n                  <Text className={`text-xs ${props.isNext ? \"text-text-alwayswhite font-bold\" : \"\"}`}>W</Text>\n                ) : (\n                  <Text className={props.isNext ? \"text-text-alwayswhite font-bold\" : \"\"}>{props.setIndex + 1}</Text>\n                )}\n              </View>\n            </View>\n\n            <Pressable\n              className=\"flex-1\"\n              data-testid=\"workout-set-target\"\n              testID=\"workout-set-target\"\n              disabled={!isRoundedWeight}\n              onPress={onOpenRoundingInfo}\n            >\n              <WorkoutExerciseSetTargetField\n                set={set}\n                lastSet={props.lastSet}\n                setType={\n                  props.type === \"warmup\"\n                    ? \"warmup\"\n                    : props.isCurrentProgress && props.programExercise == null\n                      ? \"adhoc\"\n                      : \"program\"\n                }\n                settings={props.settings}\n                exerciseType={props.exerciseType}\n                underlineRounded={isRoundedWeight}\n              />\n            </Pressable>\n\n            <View className=\"items-center justify-center py-2\" style={{ width: props.columnWidths.reps }}>\n              {isUnilateral && (\n                <View className=\"flex-row items-center justify-center mb-1\">\n                  <Text className=\"text-xs text-text-secondary\" style={{ width: labelW }}>\n                    L:\n                  </Text>\n                  <InputNumber2\n                    width={repsInputWidth}\n                    name=\"set-left-reps\"\n                    onInput={onInputLeftReps}\n                    onBlur={onBlurLeftReps}\n                    placeholder={placeholderReps}\n                    initialValue={set.reps}\n                    value={set.completedRepsLeft != null ? set.completedRepsLeft : undefined}\n                    min={0}\n                    max={9999}\n                    step={1}\n                    inputCommitMode=\"blur\"\n                  />\n                </View>\n              )}\n              <View className=\"flex-row items-center justify-center\">\n                {isUnilateral && (\n                  <Text className=\"text-xs text-text-secondary\" style={{ width: labelW }}>\n                    R:\n                  </Text>\n                )}\n                <InputNumber2\n                  width={repsInputWidth}\n                  name=\"set-reps\"\n                  onInput={onInputReps}\n                  onBlur={onBlurReps}\n                  placeholder={placeholderReps}\n                  initialValue={set.reps}\n                  value={set.completedReps != null ? set.completedReps : undefined}\n                  min={0}\n                  max={9999}\n                  step={1}\n                  inputCommitMode=\"blur\"\n                />\n              </View>\n            </View>\n\n            <View className=\"items-center justify-center py-2\" style={{ width: props.columnWidths.separator }}>\n              <Text className=\"text-text-secondary\">×</Text>\n            </View>\n\n            <View className=\"items-start justify-center py-2\" style={{ width: props.columnWidths.weight }}>\n              <InputWeight2\n                width={weightInputWidth}\n                name=\"set-weight\"\n                exerciseType={props.exerciseType}\n                inputCommitMode=\"blur\"\n                onBlur={onBlurWeight}\n                onInput={onInputWeight}\n                addOn={\n                  set.rpe != null && set.reps != null\n                    ? () => (\n                        <RpeWeightHint\n                          reps={set.completedReps ?? set.reps ?? 0}\n                          rpe={set.completedRpe ?? set.rpe!}\n                          settings={props.settings}\n                          exerciseType={props.exerciseType}\n                        />\n                      )\n                    : undefined\n                }\n                subscription={props.subscription}\n                placeholder={placeholderWeight}\n                initialValue={set.weight}\n                value={set.completedWeight || undefined}\n                max={9999}\n                min={-9999}\n                settings={props.settings}\n              />\n            </View>\n\n            {props.columnWidths.rpe > 0 ? (\n              <View className=\"items-center justify-center py-2 ml-1\" style={{ width: props.columnWidths.rpe }}>\n                {completedRpeValue != null ? (\n                  <Text\n                    numberOfLines={1}\n                    data-testid=\"rpe-value\"\n                    testID=\"rpe-value\"\n                    className=\"text-xs font-semibold text-text-success\"\n                  >\n                    @{n(completedRpeValue)}\n                  </Text>\n                ) : null}\n                {set.completedSetTimer != null ? (\n                  <Pressable\n                    data-testid=\"set-timer-value\"\n                    testID=\"set-timer-value\"\n                    hitSlop={{ top: 12, bottom: 12, left: 12, right: 12 }}\n                    onPress={props.type === \"workout\" ? onEditSetTimer : undefined}\n                  >\n                    <Text numberOfLines={1} className=\"text-xs font-semibold text-syntax-timer\">\n                      {TimeUtils_formatMMSS(set.completedSetTimer * 1000)}\n                    </Text>\n                  </Pressable>\n                ) : null}\n              </View>\n            ) : null}\n\n            <View className=\"items-end justify-center\" style={{ width: props.columnWidths.check }}>\n              {props.type === \"workout\" && set.setTimer != null && !set.isCompleted ? (\n                <Pressable\n                  className={props.columnWidths.rpe > 0 ? \"pl-1 pr-4 py-3\" : \"px-4 py-3\"}\n                  data-testid=\"start-set-timer\"\n                  testID=\"start-set-timer\"\n                  onPress={onCompleteSet}\n                >\n                  <IconPlayCircle size={24} color={WorkoutExerciseUtils_getIconColor([set], false)} />\n                </Pressable>\n              ) : (\n                <Pressable\n                  className={props.columnWidths.rpe > 0 ? \"pl-1 pr-4 py-3\" : \"px-4 py-3\"}\n                  data-testid=\"complete-set\"\n                  testID=\"complete-set\"\n                  onPress={onCompleteSet}\n                >\n                  <IconCheckCircle\n                    size={24}\n                    isChecked={true}\n                    color={WorkoutExerciseUtils_getIconColor([set], props.type === \"warmup\")}\n                  />\n                </Pressable>\n              )}\n            </View>\n          </View>\n\n          <View\n            style={{\n              position: \"absolute\",\n              top: 0,\n              bottom: 0,\n              left: \"100%\",\n              flexDirection: \"row\",\n              width: hasEdit ? 128 : 64,\n              marginLeft: 1,\n            }}\n          >\n            {hasEdit && (\n              <Pressable\n                data-testid=\"edit-set-target\"\n                testID=\"edit-set-target\"\n                onPress={() => {\n                  trackClick(\"workout-set-edit\");\n                  close();\n                  EditProgressEntry_showEditSetModal(\n                    props.dispatch,\n                    props.settings,\n                    props.type === \"warmup\",\n                    props.entryIndex,\n                    props.setIndex,\n                    props.programExercise,\n                    props.exerciseType,\n                    set\n                  );\n                }}\n                style={{ flex: 1, justifyContent: \"center\", alignItems: \"center\" }}\n                className=\"bg-background-darkgray\"\n              >\n                <Text className=\"text-text-alwayswhite\">Edit</Text>\n              </Pressable>\n            )}\n            <Pressable\n              data-testid=\"delete-set\"\n              testID=\"delete-set\"\n              onPress={() => {\n                trackClick(\"workout-set-delete\");\n                close();\n                updateProgress(\n                  props.dispatch,\n                  [\n                    props.lbSets.recordModify((s) => {\n                      const newSets = CollectionUtils_removeAt(s, props.setIndex);\n                      for (let i = 0; i < newSets.length; i += 1) {\n                        newSets[i].index = i;\n                      }\n                      return newSets;\n                    }),\n                  ],\n                  \"delete-set\"\n                );\n              }}\n              style={{ flex: 1, justifyContent: \"center\", alignItems: \"center\" }}\n              className=\"bg-background-darkred\"\n            >\n              <Text className=\"text-text-alwayswhite\">Delete</Text>\n            </Pressable>\n          </View>\n        </View>\n      )}\n    </SwipeableRow>\n  );\n}\n\nexport const WorkoutExerciseSet = memo(WorkoutExerciseSetInner);\n\ninterface IWorkoutExerciseSetTargetProps {\n  setType: \"program\" | \"warmup\" | \"adhoc\";\n  set: ISet;\n  underlineRounded?: boolean;\n}\n\nexport function WorkoutExerciseSetTarget(props: IWorkoutExerciseSetTargetProps): JSX.Element {\n  const cls = StyledText_cls(useRem());\n  switch (props.setType) {\n    case \"warmup\": {\n      const set = props.set;\n      const builder = new StyledText();\n      if (set.reps != null) {\n        builder.add(n(Math.max(0, set.reps)), cls(\"font-semibold\"));\n      }\n      if (set.reps != null && set.weight != null) {\n        builder.add(\" × \", cls(\"text-text-secondary\"));\n      }\n      if (set.weight != null) {\n        builder.add(n(set.weight.value), cls(\"font-semibold\"));\n        builder.add(set.weight.unit, cls(\"text-xs\"));\n      }\n      const built = builder.build();\n      return (\n        <View>\n          <Text className=\"text-xs text-text-secondary\">Warmup</Text>\n          <FastText text={built.text} fragments={built.fragments} {...cls(\"text-sm text-text-primary\")} />\n        </View>\n      );\n    }\n    case \"adhoc\":\n    case \"program\": {\n      const aSet = props.set;\n      const isDiffWeight = aSet.weight && aSet.originalWeight && !Weight_eq(aSet.weight, aSet.originalWeight);\n      const hasTarget = aSet.reps != null || aSet.weight != null;\n      const builder = new StyledText();\n      if (aSet.reps != null) {\n        builder.add(\n          `${aSet.minReps != null ? `${n(Math.max(0, aSet.minReps))}-` : \"\"}${n(Math.max(0, aSet.reps))}${aSet.isAmrap ? \"+\" : \"\"}`,\n          cls(\"font-semibold text-syntax-reps\")\n        );\n      }\n      if (aSet.reps != null && aSet.weight != null) {\n        builder.add(\" × \", cls(\"text-text-secondary\"));\n      }\n      if (aSet.originalWeight && aSet.weight) {\n        if (isDiffWeight) {\n          builder.add(n(aSet.originalWeight.value), cls(\"line-through text-text-secondary\"));\n          builder.add(aSet.originalWeight.unit, cls(\"text-xs line-through text-text-secondary\"));\n        } else {\n          builder.add(n(aSet.originalWeight.value), cls(\"font-semibold text-syntax-weight\"));\n          builder.add(aSet.originalWeight.unit, cls(\"text-xs text-syntax-weight\"));\n        }\n      }\n      if (aSet.weight && isDiffWeight) {\n        const underline = props.underlineRounded ? \" underline\" : \"\";\n        builder.add(\" \");\n        builder.add(n(aSet.weight.value), cls(`font-semibold text-syntax-weight${underline}`));\n        builder.add(aSet.weight.unit, cls(`text-xs text-syntax-weight${underline}`));\n      }\n      builder.add(\n        `${aSet.originalWeight == null && aSet.askWeight ? \" ?\" : \"\"}${aSet.askWeight ? \"+\" : \"\"}${\n          aSet.rpe ? ` @${n(Math.max(0, aSet.rpe))}` : \"\"\n        }${aSet.rpe && aSet.logRpe ? \"+\" : \"\"}`,\n        cls(\"font-semibold text-syntax-rpe\")\n      );\n      if (aSet.setTimer != null) {\n        const overflow = aSet.isOverflowSetTimer ? \"+\" : \"\";\n        builder.add(` ${n(Math.max(0, aSet.setTimer))}`, cls(\"font-semibold text-syntax-timer\"));\n        builder.add(\"s\", cls(\"text-xs text-syntax-timer\"));\n        builder.add(`${overflow}|`, cls(\"font-semibold text-syntax-timer\"));\n        if (aSet.timer != null) {\n          builder.add(`${n(Math.max(0, aSet.timer))}`, cls(\"font-semibold text-syntax-timer\"));\n          builder.add(\"s\", cls(\"text-xs text-syntax-timer\"));\n        } else {\n          builder.add(\"?\", cls(\"font-semibold text-syntax-timer\"));\n        }\n      } else if (aSet.timer != null) {\n        builder.add(` ${n(aSet.timer)}`, cls(\"text-syntax-timer\"));\n        builder.add(\"s\", cls(\"text-xs text-syntax-timer\"));\n      }\n      if (aSet.auto) {\n        builder.add(\" auto\", cls(\"text-syntax-auto\"));\n      }\n      const built = builder.build();\n      return (\n        <View>\n          {aSet.label ? <Text className=\"text-xs text-text-secondary\">{aSet.label}</Text> : null}\n          {props.setType === \"adhoc\" && <Text className=\"text-xs text-text-secondary\">Ad-hoc</Text>}\n          {hasTarget ? (\n            <FastText text={built.text} fragments={built.fragments} {...cls(\"text-sm text-text-primary\")} />\n          ) : (\n            <Text className=\"text-sm\">None</Text>\n          )}\n        </View>\n      );\n    }\n  }\n}\n\ninterface IWorkoutExerciseLastSetProps {\n  set?: ISet;\n}\n\nfunction WorkoutExerciseLastSet(props: IWorkoutExerciseLastSetProps): JSX.Element {\n  const cls = StyledText_cls(useRem());\n  const set = props.set;\n  if (set == null) {\n    return <Text className=\"text-xs text-text-secondary\">No last set</Text>;\n  }\n  const statusColor = WorkoutExerciseUtils_setsStatusToTextColorValue(Reps_setsStatus([set]));\n  const semibold = { ...cls(\"font-semibold\"), color: statusColor };\n  const builder = new StyledText();\n  builder.add(set.completedReps != null ? n(set.completedReps) : \"-\", semibold);\n  builder.add(\" × \", cls(\"text-text-secondary\"));\n  builder.add(set.completedWeight ? set.completedWeight.value.toString() : \"-\", semibold);\n  builder.add(set.completedWeight?.unit, { ...cls(\"text-xs\"), color: statusColor });\n  builder.add(\n    set.completedRpe != null\n      ? ` @${n(Math.max(0, set.completedRpe))}+`\n      : set.rpe != null\n        ? ` @${n(Math.max(0, set.rpe))}`\n        : \"\",\n    semibold\n  );\n  const built = builder.build();\n  return (\n    <View>\n      {set.label ? <Text className=\"text-xs text-text-secondary\">{set.label}</Text> : null}\n      <FastText text={built.text} fragments={built.fragments} {...cls(\"text-sm text-text-primary\")} />\n    </View>\n  );\n}\n\ninterface IRpeWeightHintProps {\n  reps: number;\n  rpe: number;\n  settings: ISettings;\n  exerciseType: IExerciseType;\n}\n\nfunction RpeWeightHint(props: IRpeWeightHintProps): JSX.Element {\n  const cls = StyledText_cls(useRem());\n  const multiplier = Weight_rpeMultiplier(props.reps, props.rpe);\n  const onerm = Exercise_onerm(props.exerciseType, props.settings);\n  const weight = Weight_multiply(onerm, multiplier);\n  const builder = new StyledText();\n  builder.add(`${props.reps}`, cls(\"font-bold text-syntax-reps\"));\n  builder.add(\" × \");\n  builder.add(`@${props.rpe}`, cls(\"font-bold text-syntax-rpe\"));\n  builder.add(\" - \");\n  builder.add(`${n(multiplier * 100, 0)}%`, cls(\"font-bold text-text-primary\"));\n  builder.add(\" of 1RM - \");\n  builder.add(n(weight.value), cls(\"font-bold text-text-primary\"));\n  builder.add(weight.unit);\n  const built = builder.build();\n  return (\n    <View>\n      <FastText text={built.text} fragments={built.fragments} {...cls(\"text-xs text-text-secondary\")} />\n    </View>\n  );\n}\n\nfunction getDataCy(set: ISet): string {\n  if (set.isAmrap) {\n    if (!set.isCompleted || !set.completedReps) {\n      return \"set-amrap-nonstarted\";\n    } else if (set.minReps != null && set.completedReps < set.minReps) {\n      return \"set-amrap-incompleted\";\n    } else if (set.minReps != null && set.reps != null && set.completedReps < set.reps) {\n      return \"set-amrap-in-range\";\n    } else if (set.reps != null && set.completedReps < set.reps) {\n      return \"set-amrap-incompleted\";\n    } else {\n      return \"set-amrap-completed\";\n    }\n  } else if (set.completedReps == null || !set.isCompleted) {\n    return \"set-nonstarted\";\n  } else {\n    if (set.reps == null || set.completedReps >= set.reps) {\n      return \"set-completed\";\n    } else if (set.minReps != null && set.completedReps >= set.minReps) {\n      return \"set-in-range\";\n    } else {\n      return \"set-incompleted\";\n    }\n  }\n}\n\ninterface IWorkoutExerciseSetTargetFieldProps {\n  setType: \"program\" | \"warmup\" | \"adhoc\";\n  set: ISet;\n  lastSet?: ISet;\n  settings: ISettings;\n  exerciseType: IExerciseType;\n  underlineRounded?: boolean;\n}\n\nfunction WorkoutExerciseSetTargetField(props: IWorkoutExerciseSetTargetFieldProps): JSX.Element {\n  switch (props.settings.workoutSettings.targetType) {\n    case \"target\": {\n      return (\n        <WorkoutExerciseSetTarget set={props.set} setType={props.setType} underlineRounded={props.underlineRounded} />\n      );\n    }\n    case \"lasttime\": {\n      return <WorkoutExerciseLastSet set={props.lastSet} />;\n    }\n    case \"platescalculator\": {\n      return (\n        <WorkoutExercisePlatesCalculator set={props.set} settings={props.settings} exerciseType={props.exerciseType} />\n      );\n    }\n    case \"e1rm\": {\n      return <WorkoutExerciseE1RMSet set={props.set} settings={props.settings} />;\n    }\n  }\n  return <View />;\n}\n\ninterface IWorkoutExercisePlatesCalculatorProps {\n  set: ISet;\n  settings: ISettings;\n  exerciseType: IExerciseType;\n}\n\nfunction WorkoutExercisePlatesCalculator(props: IWorkoutExercisePlatesCalculatorProps): JSX.Element {\n  const setWeight = props.set.weight;\n  if (setWeight == null) {\n    return (\n      <Text className=\"text-sm font-semibold\" data-testid=\"plates-list\" testID=\"plates-list\">\n        None\n      </Text>\n    );\n  }\n\n  const { plates, totalWeight: weight } = Weight_calculatePlates(\n    props.set.completedWeight ?? setWeight,\n    props.settings,\n    setWeight.unit,\n    props.exerciseType\n  );\n  const formattedPlates = plates.length > 0 ? Weight_formatOneSide(props.settings, plates, props.exerciseType) : \"None\";\n  return (\n    <Text\n      className={`text-sm font-semibold ${Weight_eq(weight, props.set.completedWeight ?? setWeight) ? \"text-text-primary\" : \"text-text-error\"}`}\n      data-testid=\"plates-list\"\n      testID=\"plates-list\"\n    >\n      {formattedPlates}\n    </Text>\n  );\n}\n\ninterface IWorkoutExerciseE1RMSetProps {\n  set: ISet;\n  settings: ISettings;\n}\n\nfunction WorkoutExerciseE1RMSet(props: IWorkoutExerciseE1RMSetProps): JSX.Element {\n  const cls = StyledText_cls(useRem());\n  const set = props.set;\n  const isCompleted = !!set.isCompleted;\n  const weight = set.completedWeight ?? set.weight ?? set.originalWeight;\n  const reps = Reps_avgUnilateralCompletedReps(set) ?? set.reps;\n  const rpe = set.completedRpe ?? set.rpe ?? 10;\n  if (weight == null || Weight_isPct(weight) || reps == null) {\n    return <Text className=\"text-sm\">Unknown</Text>;\n  }\n  const e1RM = Weight_getOneRepMax(weight, reps, rpe);\n  const built = new StyledText().add(n(e1RM.value), cls(\"font-semibold\")).add(e1RM.unit, cls(\"text-xs\")).build();\n  return (\n    <FastText\n      text={built.text}\n      fragments={built.fragments}\n      {...cls(\"text-sm text-text-primary\")}\n      style={isCompleted ? undefined : { opacity: 0.4 }}\n    />\n  );\n}\n","import { JSX, memo, useCallback } from \"react\";\nimport { View } from \"react-native\";\nimport { Pressable } from \"./primitives/pressable\";\nimport { FastText } from \"./primitives/fastText\";\nimport { StyledText, StyledText_cls } from \"../utils/styledText\";\nimport { useRem } from \"../utils/useRem\";\nimport { Exercise_get } from \"../models/exercise\";\nimport { Reps_setsStatus } from \"../models/set\";\nimport { IHistoryEntry, ISettings } from \"../types\";\nimport {\n  WorkoutExerciseUtils_setsStatusToBorderColor,\n  WorkoutExerciseUtils_setsStatusToColor,\n} from \"../utils/workoutExerciseUtils\";\nimport { ExerciseImage } from \"./exerciseImage\";\nimport { IconCheckCircle } from \"./icons/iconCheckCircle\";\nimport { StringUtils_dashcase } from \"../utils/string\";\nimport { Tailwind_colors, Tailwind_semantic } from \"../utils/tailwindConfig\";\nimport { ObjectUtils_entries } from \"../utils/object\";\n\ninterface IWorkoutExerciseThumbnailProps {\n  onSelect?: (entryIndex: number) => void;\n  disabled?: boolean;\n  colorToSupersetGroup: Partial<Record<string, IHistoryEntry[]>>;\n  isCurrent: boolean;\n  currentSuperset?: string;\n  shouldShowProgress?: boolean;\n  entry: IHistoryEntry;\n  entryIndex: number;\n  settings: ISettings;\n}\n\nfunction WorkoutExerciseThumbnailInner(props: IWorkoutExerciseThumbnailProps): JSX.Element {\n  const { entry, entryIndex, isCurrent, currentSuperset, onSelect, disabled } = props;\n  const onPress = useCallback(() => {\n    if (!disabled) {\n      onSelect?.(entryIndex);\n    }\n  }, [disabled, onSelect, entryIndex]);\n  const hasSupersets = Object.keys(props.colorToSupersetGroup).length > 0;\n  const colorAndSupersetGroup = ObjectUtils_entries(props.colorToSupersetGroup).find(([_, entries]) => {\n    return entries && entries.some((e) => e.id === entry.id);\n  });\n  const supersetColor = colorAndSupersetGroup ? colorAndSupersetGroup[0] : undefined;\n  const setsStatus = Reps_setsStatus(entry.sets);\n  const isCurrentSuperset = currentSuperset != null && currentSuperset === entry.superset;\n  const borderColor = isCurrent ? \"border-purple-600\" : WorkoutExerciseUtils_setsStatusToBorderColor(setsStatus);\n  const exercise = Exercise_get(entry.exercise, props.settings.exercises);\n  const totalSetsCount = entry.sets.length;\n  const completedSetsCount = entry.sets.filter((set) => set.isCompleted).length;\n\n  return (\n    <View>\n      <Pressable\n        onPress={onPress}\n        data-name={`workout-exercise-tab-${entryIndex}`}\n        testID={`workout-tab-${StringUtils_dashcase(exercise.name)}`}\n        data-testid={`workout-tab-${StringUtils_dashcase(exercise.name)}`}\n        dataSet={{ isSelected: isCurrent ? \"true\" : \"false\" }}\n        className=\"bg-background-default\"\n        style={{ paddingHorizontal: 2 }}\n      >\n        <View\n          className={`items-center flex-row justify-center w-scaled-14 h-scaled-14 border ${borderColor} bg-background-image rounded-lg overflow-hidden`}\n          style={{\n            borderWidth: isCurrent ? 2 : 1,\n            padding: !isCurrent ? 1 : 0,\n            marginVertical: isCurrent ? 1 : 0,\n          }}\n        >\n          <ExerciseImage\n            useTextForCustomExercise={true}\n            className=\"h-scaled-10\"\n            customClassName=\"w-scaled-10\"\n            exerciseType={entry.exercise}\n            size=\"small\"\n            settings={props.settings}\n          />\n          {setsStatus === \"not-finished\" ? (\n            props.shouldShowProgress && (\n              <View style={{ position: \"absolute\", bottom: 0, right: 0, padding: 2 }}>\n                <View className=\"absolute inset-0 rounded-md bg-lightgray-50\" style={{ opacity: 0.75 }} />\n                <View style={{ position: \"relative\", zIndex: 10 }}>\n                  <SetsProgressBadge completed={completedSetsCount} total={totalSetsCount} />\n                </View>\n              </View>\n            )\n          ) : (\n            <View style={{ position: \"absolute\", bottom: 2, right: 2 }}>\n              <IconCheckCircle\n                isChecked={true}\n                size={14}\n                color={WorkoutExerciseUtils_setsStatusToColor(setsStatus)}\n                checkColor={Tailwind_colors().white}\n              />\n            </View>\n          )}\n        </View>\n      </Pressable>\n      {supersetColor ? (\n        <View className=\"mx-1\">\n          <View\n            className=\"w-full\"\n            style={{\n              backgroundColor: isCurrentSuperset ? supersetColor : Tailwind_semantic().background.neutral,\n              height: 2,\n              marginTop: isCurrent ? 3 : 5,\n            }}\n          />\n        </View>\n      ) : hasSupersets ? (\n        <View className=\"w-full\" style={{ backgroundColor: \"transparent\", height: 2, marginTop: isCurrent ? 3 : 5 }} />\n      ) : null}\n    </View>\n  );\n}\n\nfunction SetsProgressBadge(props: { completed: number; total: number }): JSX.Element {\n  const cls = StyledText_cls(useRem());\n  const counter = cls(\"text-xs font-semibold\");\n  const built = new StyledText().add(`${props.completed}`, counter).add(\"/\").add(`${props.total}`, counter).build();\n  return <FastText text={built.text} fragments={built.fragments} {...cls(\"text-base text-black\")} />;\n}\n\nexport const WorkoutExerciseThumbnail = memo(WorkoutExerciseThumbnailInner);\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Reducer } from \"react\";\nimport {\n  Program_getProgram,\n  Program_nextHistoryRecord,\n  Program_evaluate,\n  Program_getDayExerciseKeys,\n} from \"../models/program\";\nimport { Dialog_alert } from \"../utils/dialog\";\nimport {\n  Progress_getProgress,\n  Progress_getProgressById,\n  Progress_completeSetAction,\n  Progress_changeAmrapAction,\n  Progress_checkSetTimer,\n  Progress_closeTimedSet,\n  Progress_setProgress,\n  Progress_finishWorkout,\n  Progress_isCurrent,\n  Progress_stop,\n  Progress_showUpdateDate,\n  Progress_changeDate,\n  Progress_stopTimer,\n  Progress_startTimer,\n  Progress_getCurrentProgress,\n  Progress_applyProgramDay,\n  Progress_runInitialUpdateScripts,\n} from \"../models/progress\";\nimport {\n  Storage_get,\n  Storage_getDefault,\n  Storage_getHistoryRecord,\n  Storage_isChanged,\n  Storage_updateVersions,\n} from \"../models/storage\";\nimport { IScreen, IScreenParams } from \"../models/screen\";\nimport { ILensRecordingPayload, lb } from \"lens-shmens\";\nimport { buildState, IEnv, ILocalStorage, INotification, IState, IStateErrors, updateState } from \"../models/state\";\nimport { UidFactory_generateUid } from \"../utils/generator\";\nimport {\n  IStorage,\n  IWeight,\n  IProgressMode,\n  ISettings,\n  IHistoryRecord,\n  IPercentage,\n  IProgramState,\n  ISubscription,\n  IStats,\n} from \"../types\";\nimport { IndexedDBUtils_get, IndexedDBUtils_set } from \"../utils/indexeddb\";\nimport { Persistence } from \"../utils/persistence\";\nimport { basicBeginnerProgram } from \"../programs/basicBeginnerProgram\";\nimport { AdminDebug_isDebugAccountId } from \"../models/adminDebug\";\nimport { LogUtils_log } from \"../utils/log\";\nimport { Service } from \"../api/service\";\nimport { unrunMigrations } from \"../migrations/runner\";\nimport {\n  ObjectUtils_isEqual,\n  ObjectUtils_changedKeys,\n  ObjectUtils_isNotEmpty,\n  ObjectUtils_keys,\n} from \"../utils/object\";\nimport { UrlUtils_build } from \"../utils/url\";\nimport { DateUtils_formatHHMMSS } from \"../utils/date\";\nimport { IReducerOnAction } from \"./types\";\nimport { Thunk_sync2 } from \"./thunks\";\nimport { CollectionUtils_uniqBy, CollectionUtils_compact } from \"../utils/collection\";\nimport { Subscriptions_cleanupOutdatedGooglePurchaseTokens } from \"../utils/subscriptions\";\nimport { UndoingFlag_set } from \"../utils/undoingFlag\";\nimport { Diagnostics_getLastActions, Diagnostics_recordAction, Diagnostics_setLastState } from \"../utils/diagnostics\";\nimport { Exercise_toKey } from \"../models/exercise\";\nimport { NativeWorkoutBridge_discardWorkout } from \"../utils/nativeWorkoutBridge\";\nimport { NativeWatchBridge_sendDiscardWorkoutToWatch } from \"../utils/nativeWatchBridge\";\nimport { NativeWorkoutMirroring_resetWatchWorkoutState } from \"../utils/nativeWorkoutMirroringBridge\";\nimport { IPlannerProgramExercise } from \"../pages/planner/models/types\";\nimport { IByExercise } from \"../pages/planner/plannerEvaluator\";\nimport { EditProgramUiHelpers_getChangedKeys } from \"../components/editProgram/editProgramUi/editProgramUiHelpers\";\nimport { History_deleteRecords } from \"../models/history\";\nimport { lg } from \"../utils/posthog\";\nimport { Equipment_getCurrentGym, Equipment_getEquipmentIdForExerciseType } from \"../models/equipment\";\nimport { Stats_getCurrentMovingAverageBodyweight } from \"../models/stats\";\nimport { Weight_build, Weight_eq } from \"../models/weight\";\nimport { PerfTracker_recordEvent, PerfTracker_getSessionId } from \"../utils/perfTracker\";\nimport { PerfEnabled_isEnabled, PerfEnabled_tier2 } from \"../utils/perfEnabled\";\nimport { PerfProbe_onAction, PerfProbe_isTarget } from \"../utils/perfSetCompleteProbe\";\nimport { PerfScorecard_recordAction } from \"../utils/perfScorecard\";\n\ndeclare let __COMMIT_HASH__: string;\n\nconst isLoggingEnabled =\n  typeof window !== \"undefined\" && window?.location\n    ? !!UrlUtils_build(window.location.href).searchParams.get(\"log\")\n    : false;\n\nexport async function getIdbKey(userId?: string, isAdmin?: boolean): Promise<string> {\n  const currentAccount = await IndexedDBUtils_get(\"current_account\");\n  if (currentAccount) {\n    return `liftosaur_${currentAccount}`;\n  } else {\n    return userId != null && isAdmin ? `liftosaur_${userId}` : \"liftosaur\";\n  }\n}\n\ndeclare let __HOST__: string;\n\nexport async function getInitialState(\n  client: Window[\"fetch\"],\n  args?: { url?: URL; rawStorage?: string; localStorage?: ILocalStorage; storage?: IStorage; deviceId?: string }\n): Promise<IState> {\n  const url =\n    args?.url ||\n    (typeof document !== \"undefined\" ? UrlUtils_build(document.location.href) : UrlUtils_build(`${__HOST__}/app/`));\n  const messageerror = url.searchParams.get(\"messageerror\") || undefined;\n  const messagesuccess = url.searchParams.get(\"messagesuccess\") || undefined;\n  const nosync = url.searchParams.get(\"nosync\") === \"true\";\n  let storage: ILocalStorage | undefined;\n  if (args?.storage) {\n    storage = { storage: args.storage };\n  } else if (args?.localStorage != null) {\n    storage = args.localStorage;\n  } else if (args?.rawStorage != null) {\n    try {\n      storage = JSON.parse(args.rawStorage);\n    } catch (e) {\n      storage = undefined;\n    }\n  }\n  const notification: INotification | undefined =\n    messageerror || messagesuccess\n      ? {\n          type: messageerror ? (\"error\" as const) : (\"success\" as const),\n          content: messageerror || messagesuccess || \"\",\n        }\n      : undefined;\n\n  const deviceId = args?.deviceId;\n  if (storage != null && storage.storage != null) {\n    const hasUnrunMigrations = unrunMigrations(storage.storage).length > 0;\n    const maybeStorage = Storage_get(storage.storage, true);\n    let finalStorage: IStorage;\n    const errors: IStateErrors = {};\n    if (maybeStorage.success) {\n      finalStorage = maybeStorage.data;\n    } else {\n      const service = new Service(client);\n      const userid = (storage.storage?.tempUserId || `missing-${UidFactory_generateUid(8)}`) as string;\n      const serverStorage = await service.getStorage(userid, undefined, undefined);\n      const maybeServerStorage = Storage_get(serverStorage.storage, false);\n      if (maybeServerStorage.success) {\n        finalStorage = maybeServerStorage.data;\n      } else {\n        errors.corruptedstorage = {\n          userid,\n          backup: await service.postDebug(userid, JSON.stringify(storage.storage), { local: \"true\" }),\n          confirmed: false,\n          local: true,\n        };\n        finalStorage = Storage_getDefault();\n      }\n    }\n\n    const finalLastSyncedStorage: IStorage | undefined = storage.lastSyncedStorage;\n\n    // Handle migration from old localStorage format where progress was stored separately\n    // Now progress is stored in storage.progress\n    const oldProgress = (storage as { progress?: IHistoryRecord }).progress;\n    if (oldProgress != null && (finalStorage.progress == null || finalStorage.progress.length === 0)) {\n      const migratedProgress = Storage_getHistoryRecord(oldProgress as unknown as Record<string, unknown>, true);\n      if (migratedProgress.success) {\n        finalStorage = { ...finalStorage, progress: [{ ...migratedProgress.data, vtype: \"progress\" }] };\n      }\n    }\n\n    return {\n      storage: finalStorage,\n      lastSyncedStorage: finalLastSyncedStorage,\n      progress: {},\n      notification,\n      loading: { items: {} },\n      programs: [basicBeginnerProgram],\n      programsIndex: [],\n      revisions: {},\n      user: undefined,\n      freshMigrations: maybeStorage.success && hasUnrunMigrations,\n      errors,\n      nosync: nosync || AdminDebug_isDebugAccountId(finalStorage.tempUserId),\n      deviceId,\n      editProgramStates: {},\n      editProgramExerciseStates: {},\n    };\n  }\n  const newState = buildState({\n    notification,\n    nosync,\n    deviceId,\n  });\n  LogUtils_log(newState.storage.tempUserId, \"ls-initialize-user\", {}, []);\n  return newState;\n}\n\nexport type IChangeDate = {\n  type: \"ChangeDate\";\n  id: number;\n  date: string;\n  time: number;\n};\n\nexport type IConfirmDate = {\n  type: \"ConfirmDate\";\n  id: number;\n  date?: string;\n  time?: number;\n};\n\nexport type ILoginAction = {\n  type: \"Login\";\n  email: string;\n  userId: string;\n};\n\nexport type ILogoutAction = {\n  type: \"Logout\";\n};\n\nexport type IPushScreen<T extends IScreen> = {\n  type: \"PushScreen\";\n  screen: T;\n  params?: IScreenParams<T>;\n  shouldResetStack?: boolean;\n};\n\nexport type IPullScreen = {\n  type: \"PullScreen\";\n};\n\nexport type ICancelProgress = {\n  type: \"CancelProgress\";\n};\n\nexport type IDeleteProgress = {\n  type: \"DeleteProgress\";\n  id: number;\n};\n\nexport type ICompleteSetAction = {\n  type: \"CompleteSetAction\";\n  entryIndex: number;\n  setIndex: number;\n  programExercise?: IPlannerProgramExercise;\n  otherStates?: IByExercise<IProgramState>;\n  isPlayground: boolean;\n  mode: IProgressMode;\n  forceUpdateEntryIndex: boolean;\n  isExternal: boolean;\n  // Set when completing a timed set from its running clock: the elapsed seconds to record (the model\n  // otherwise derives it from setTimerModal.startedAt), and whether to keep the clock running afterwards.\n  recordedSeconds?: number;\n  keepSetTimerRunning?: boolean;\n};\n\n// Polled by any surface (banner tick, rest-timer tick, live activity, watch) to drive time-based set\n// timer transitions: auto-fire when the work timer hits its target, or auto-advance after rest expires.\n// No-op (returns the same progress) when nothing is due.\nexport type ICheckSetTimerAction = {\n  type: \"CheckSetTimerAction\";\n  programExercise?: IPlannerProgramExercise;\n  otherStates?: IByExercise<IProgramState>;\n  now?: number;\n  // When a playground timer auto-fires at its target, the completion must stay playground-scoped — otherwise\n  // it resumes/updates the real native workout (playground records have id 0 and read as \"current\").\n  isPlayground?: boolean;\n};\n\n// Discard the set timer banner (no recording); starts the deferred rest if the set was already logged.\nexport type ICloseSetTimerAction = {\n  type: \"CloseSetTimerAction\";\n  // Playground has no rest timers, so closing a logged set-timer there must not start a deferred rest.\n  isPlayground?: boolean;\n};\n\nexport type IFinishProgramDayAction = {\n  type: \"FinishProgramDayAction\";\n  id: number;\n};\n\nexport type IStartProgramDayAction = {\n  type: \"StartProgramDayAction\";\n  programId?: string;\n};\n\nexport type IChangeAMRAPAction = {\n  type: \"ChangeAMRAPAction\";\n  setIndex: number;\n  isPlayground: boolean;\n  entryIndex: number;\n  amrapValue?: number;\n  amrapLeftValue?: number;\n  rpeValue?: number;\n  weightValue?: IWeight;\n  isAmrap?: boolean;\n  logRpe?: boolean;\n  askWeight?: boolean;\n  programExercise?: IPlannerProgramExercise;\n  otherStates?: IByExercise<IProgramState>;\n  userVars?: Record<string, number | IWeight | IPercentage>;\n};\n\nexport type IUpdateSettingsAction = {\n  type: \"UpdateSettings\";\n  lensRecording: ILensRecordingPayload<ISettings>;\n  desc: string;\n};\n\nexport type IUpdateStateAction = {\n  type: \"UpdateState\";\n  lensRecording: ILensRecordingPayload<IState>[];\n  desc: string;\n};\n\nexport type IReplaceStateAction = {\n  type: \"ReplaceState\";\n  state: IState;\n};\n\nexport type IEditHistoryRecordAction = {\n  type: \"EditHistoryRecord\";\n  historyRecord: IHistoryRecord;\n};\n\nexport type IStartTimer = {\n  type: \"StartTimer\";\n  timestamp: number;\n  mode: IProgressMode;\n  entryIndex: number;\n  setIndex: number;\n  timer?: number;\n};\n\nexport type IStopTimer = {\n  type: \"StopTimer\";\n};\n\nexport type IApplyProgramChangesToProgress = {\n  type: \"ApplyProgramChangesToProgress\";\n  programExerciseIds?: string[];\n  // Set only where the program itself changed, which is the only place that can know what the day looked like\n  // before. Without it the pass is value-only — see `Progress_applyProgramDay`.\n  oldDayKeys?: string[];\n};\n\nexport type IUpdateProgressAction = {\n  type: \"UpdateProgress\";\n  lensRecordings: ILensRecordingPayload<IHistoryRecord>[];\n  desc: string;\n};\n\nexport type ICardsAction =\n  | ICompleteSetAction\n  | IChangeAMRAPAction\n  | IUpdateProgressAction\n  | ICheckSetTimerAction\n  | ICloseSetTimerAction;\n\nexport type IAction =\n  | ICardsAction\n  | IStartProgramDayAction\n  | IFinishProgramDayAction\n  | IEditHistoryRecordAction\n  | ICancelProgress\n  | IDeleteProgress\n  | IPushScreen<any>\n  | IPullScreen\n  | IChangeDate\n  | IConfirmDate\n  | ILoginAction\n  | ILogoutAction\n  | IStartTimer\n  | IStopTimer\n  | IUpdateStateAction\n  | IReplaceStateAction\n  | IUpdateSettingsAction\n  | IApplyProgramChangesToProgress;\n\nlet timerId: number | undefined = undefined;\n\nfunction isExternalStorageMerge(action: unknown): boolean {\n  return (\n    typeof action === \"object\" &&\n    action != null &&\n    \"type\" in action &&\n    action.type === \"UpdateState\" &&\n    \"desc\" in action &&\n    (action.desc === \"Merge synced storage\" ||\n      action.desc === \"Merge watch storage\" ||\n      action.desc === \"Reload storage from disk\")\n  );\n}\n\nexport function defaultOnActions(env: IEnv): IReducerOnAction[] {\n  return [\n    (dispatch, action, oldState, newState) => {\n      const isFinishDayAction = \"type\" in action && action.type === \"FinishProgramDayAction\";\n      if (!isExternalStorageMerge(action) && Storage_isChanged(oldState.storage, newState.storage)) {\n        dispatch(Thunk_sync2({ log: isFinishDayAction }));\n      }\n    },\n    (dispatch, action, oldState, newState) => {\n      if (oldState.storage.programs !== newState.storage.programs) {\n        const newProgramIds = newState.storage.programs.map((p) => p.id);\n        if (Array.from(new Set(newProgramIds)).length !== newProgramIds.length) {\n          lg(\"program-duplicate-ids\", {\n            programIds: JSON.stringify(newProgramIds),\n            lastReducerActions: JSON.stringify(\n              Diagnostics_getLastActions().map((a) => [a.type, \"desc\" in a ? a.desc : undefined])\n            ),\n          });\n          const newPrograms = CollectionUtils_uniqBy(newState.storage.programs, \"id\");\n          updateState(\n            dispatch,\n            [lb<IState>().p(\"storage\").pi(\"programs\").record(newPrograms)],\n            \"Remove duplicate programs\"\n          );\n        }\n      }\n    },\n    (dispatch, action, oldState, newState) => {\n      // The ongoing workout, not whichever record is on screen — `ApplyProgramChangesToProgress` only ever\n      // touches that one, and a past workout open for editing has its own program and day. Reading the viewed\n      // record here would diff the wrong day and hand those keys to the live workout.\n      const progress = Progress_getCurrentProgress(newState);\n      if (progress != null) {\n        const oldProgram = Program_getProgram(oldState, progress.programId);\n        const newProgram = Program_getProgram(newState, progress.programId);\n        if (oldProgram != null && newProgram != null && !ObjectUtils_isEqual(oldProgram, newProgram)) {\n          // Exercises can only be added, removed or reordered by the planner moving, and evaluating the old\n          // program to find out what the day held isn't free — so only pay for it when the planner differs.\n          // Evaluated with the *new* settings, so the keys are comparable to the ones the handler derives.\n          const isPlannerSame =\n            oldProgram.planner != null && newProgram.planner != null\n              ? ObjectUtils_isEqual(oldProgram.planner, newProgram.planner)\n              : oldProgram.planner === newProgram.planner;\n          const oldDayKeys = isPlannerSame\n            ? undefined\n            : Program_getDayExerciseKeys(Program_evaluate(oldProgram, newState.storage.settings), progress.day);\n          dispatch({ type: \"ApplyProgramChangesToProgress\", oldDayKeys });\n        }\n      }\n    },\n    (dispatch, action, oldState, newState) => {\n      if (\n        oldState.storage.stats !== newState.storage.stats ||\n        ((newState.storage.stats.weight.weight ?? []).length > 0 && newState.storage.settings.currentBodyweight == null)\n      ) {\n        const oldBodyweight =\n          Stats_getCurrentMovingAverageBodyweight(oldState.storage.stats, oldState.storage.settings) ??\n          Weight_build(0, oldState.storage.settings.units);\n        const newBodyweight =\n          Stats_getCurrentMovingAverageBodyweight(newState.storage.stats, newState.storage.settings) ??\n          Weight_build(0, newState.storage.settings.units);\n        if (!Weight_eq(oldBodyweight, newBodyweight)) {\n          updateState(\n            dispatch,\n            [lb<IState>().p(\"storage\").p(\"settings\").pi(\"currentBodyweight\").record(newBodyweight)],\n            \"Update current bodyweight\"\n          );\n          dispatch({ type: \"ApplyProgramChangesToProgress\" });\n        }\n      }\n    },\n    (dispatch, action, oldState, newState) => {\n      if (\"type\" in action && action.type === \"UpdateState\" && (action.desc === \"undo\" || action.desc === \"redo\")) {\n        const screenData = env.getCurrentScreenData?.();\n        if (!screenData || screenData.name !== \"editProgramExercise\") {\n          return;\n        }\n        const oldExerciseKey = screenData.params?.key;\n        const oldProgramId = screenData.params?.programId;\n        const oldExerciseStateKey = oldProgramId && oldExerciseKey ? `${oldProgramId}_${oldExerciseKey}` : undefined;\n        const oldPlannerState = oldExerciseStateKey\n          ? oldState.editProgramExerciseStates[oldExerciseStateKey]\n          : undefined;\n        const newPlannerState = oldExerciseStateKey\n          ? newState.editProgramExerciseStates[oldExerciseStateKey]\n          : undefined;\n        if (oldPlannerState != null && newPlannerState != null && oldExerciseKey != null) {\n          const changedKeys = EditProgramUiHelpers_getChangedKeys(\n            oldPlannerState.current.program.planner!,\n            newPlannerState.current.program.planner!,\n            newState.storage.settings\n          );\n          const newKey = changedKeys[oldExerciseKey];\n          if (newKey && env.navigationRef?.isReady()) {\n            env.navigationRef.setParams({ ...screenData.params, key: newKey } as Record<string, unknown>);\n          }\n        }\n      }\n    },\n    (dispatch, action, oldState, newState) => {\n      const progress = Progress_getProgress(newState);\n      if (progress != null) {\n        const oldExerciseData = oldState.storage.settings.exerciseData;\n        const newExerciseData = newState.storage.settings.exerciseData;\n        if (\n          oldExerciseData != null &&\n          newExerciseData != null &&\n          !ObjectUtils_isEqual(oldExerciseData, newExerciseData)\n        ) {\n          const changes = ObjectUtils_changedKeys(oldExerciseData, newExerciseData);\n          if (ObjectUtils_isNotEmpty(changes)) {\n            const changedExercises = ObjectUtils_keys(changes);\n            const affectedEntries = progress.entries.filter((entry) => {\n              const key = Exercise_toKey(entry.exercise);\n              return changedExercises.indexOf(key) !== -1;\n            });\n            if (affectedEntries.length > 0) {\n              dispatch({\n                type: \"ApplyProgramChangesToProgress\",\n                programExerciseIds: CollectionUtils_compact(affectedEntries.map((e) => e.programExerciseId)),\n              });\n            }\n          }\n        }\n      }\n    },\n    (dispatch, action, oldState, newState) => {\n      const progress = Progress_getProgress(newState);\n      if (progress != null) {\n        const oldEquipment = Equipment_getCurrentGym(oldState.storage.settings).equipment;\n        const newEquipment = Equipment_getCurrentGym(newState.storage.settings).equipment;\n        if (oldEquipment != null && newEquipment != null && !ObjectUtils_isEqual(oldEquipment, newEquipment)) {\n          const changedEquipmentIds = ObjectUtils_keys(ObjectUtils_changedKeys(oldEquipment, newEquipment));\n          const settings = newState.storage.settings;\n          const affectedEntries = progress.entries.filter((entry) => {\n            const equipmentId = Equipment_getEquipmentIdForExerciseType(settings, entry.exercise);\n            return equipmentId != null && changedEquipmentIds.indexOf(equipmentId) !== -1;\n          });\n          if (affectedEntries.length > 0) {\n            dispatch({\n              type: \"ApplyProgramChangesToProgress\",\n              programExerciseIds: CollectionUtils_compact(affectedEntries.map((e) => e.programExerciseId)),\n            });\n          }\n        }\n      }\n    },\n    (dispatch, action, oldState, newState) => {\n      if (!ObjectUtils_isEqual(oldState.storage.subscription.google, newState.storage.subscription.google)) {\n        const userId = newState.user?.id || newState.storage.tempUserId;\n        Subscriptions_cleanupOutdatedGooglePurchaseTokens(dispatch, userId, env.service, newState.storage.subscription);\n      }\n    },\n    (dispatch, action, oldState, newState) => {\n      if (\"type\" in action && action.type === \"UpdateState\" && action.desc === \"stop-is-undoing\") {\n        setTimeout(() => {\n          UndoingFlag_set(false);\n        }, 200);\n      }\n    },\n  ];\n}\n\nexport const reducerWrapper =\n  (storeToLocalStorage: boolean, persistence: Persistence): Reducer<IState, IAction> =>\n  (state, action) => {\n    Diagnostics_setLastState(state);\n    Diagnostics_recordAction({ ...action, time: DateUtils_formatHHMMSS(Date.now(), true) });\n    const perfOn = PerfEnabled_isEnabled();\n    const perfActionType = \"type\" in action ? action.type : \"thunk\";\n    const perfActionDesc = \"type\" in action && action.type === \"UpdateState\" ? action.desc : undefined;\n    const perfSyncStart = perfOn ? Date.now() : 0;\n    let newState = reducer(state, action);\n    const isMergingStorage = isExternalStorageMerge(action);\n    const isStorageChanged = !isMergingStorage && Storage_isChanged(state.storage, newState.storage);\n    if (isStorageChanged) {\n      const oldHistoryLen = state.storage.history?.length ?? 0;\n      const newHistoryLen = newState.storage.history?.length ?? 0;\n      const actionDesc = \"type\" in action && action.type === \"UpdateState\" ? action.desc : action.type;\n      if (oldHistoryLen > 0 && newHistoryLen === 0) {\n        lg(\"ls-history-deletion-critical\", {\n          oldLen: oldHistoryLen,\n          newLen: newHistoryLen,\n          action: actionDesc || \"unknown\",\n        });\n      } else if (oldHistoryLen - newHistoryLen > 5) {\n        lg(\"ls-history-deletion-warning\", {\n          oldLen: oldHistoryLen,\n          newLen: newHistoryLen,\n          action: actionDesc || \"unknown\",\n        });\n      }\n      const versions = Storage_updateVersions(state.storage, newState.storage, state.deviceId);\n      newState = { ...newState, storage: { ...newState.storage, _versions: versions } };\n    }\n\n    if (typeof window !== \"undefined\" && window.setTimeout && window.clearTimeout) {\n      window.tempUserId = newState.storage.tempUserId;\n      if (timerId != null) {\n        window.clearTimeout(timerId);\n      }\n\n      (window as any).state = newState;\n      if (storeToLocalStorage && newState.errors.corruptedstorage == null) {\n        timerId = window.setTimeout(async () => {\n          clearTimeout(timerId);\n\n          const newState2: IState = (window as any).state;\n          timerId = undefined;\n          const userId = newState2.user?.id || newState2.storage.tempUserId;\n          await IndexedDBUtils_set(\"current_account\", userId);\n          const probeTarget = PerfProbe_isTarget();\n          try {\n            const stats = await persistence.save(`liftosaur_${userId}`, {\n              storage: newState2.storage,\n              lastSyncedStorage: newState2.lastSyncedStorage,\n            });\n            if (probeTarget) {\n              lg(\"perf-persist\", {\n                stringify_ms: stats.stringifyMs,\n                write_ms: stats.writeMs,\n                bytes: stats.bytes,\n                shards: stats.shards.join(\",\"),\n              });\n            }\n          } catch (e) {\n            // Write failed (e.g. quota) — the write cache wasn't updated, so the next\n            // save retries these shards instead of skipping them as \"unchanged\"\n            lg(\"ls-persistence-save-error\", { error: String(e) });\n          }\n        }, 100);\n      }\n    }\n\n    if (perfOn) {\n      const perfDurationMs = Date.now() - perfSyncStart;\n      PerfScorecard_recordAction(perfActionDesc ?? perfActionType, perfDurationMs);\n      if (\n        perfActionType === \"CompleteSetAction\" ||\n        perfActionType === \"ChangeAMRAPAction\" ||\n        perfActionType === \"UpdateProgress\"\n      ) {\n        PerfProbe_onAction(perfActionDesc ?? perfActionType, perfDurationMs);\n      }\n      if (PerfEnabled_tier2()) {\n        PerfTracker_recordEvent({\n          type: \"action\",\n          session: PerfTracker_getSessionId(),\n          action: perfActionType,\n          desc: perfActionDesc,\n          duration_ms: perfDurationMs,\n          ts: perfSyncStart,\n        });\n      }\n    }\n    return newState;\n  };\n\nexport function buildCardsReducer(\n  settings: ISettings,\n  stats: IStats,\n  subscription?: ISubscription\n): Reducer<IHistoryRecord, ICardsAction> {\n  return (progress, action): IHistoryRecord => {\n    switch (action.type) {\n      case \"CompleteSetAction\": {\n        const newProgress = Progress_completeSetAction(settings, stats, progress, action, subscription);\n        return newProgress;\n      }\n      case \"ChangeAMRAPAction\": {\n        const newProgress = Progress_changeAmrapAction(settings, stats, progress, action, subscription);\n        return newProgress;\n      }\n      case \"CheckSetTimerAction\": {\n        return Progress_checkSetTimer(\n          settings,\n          stats,\n          progress,\n          subscription,\n          action.programExercise,\n          action.otherStates,\n          action.now,\n          action.isPlayground\n        );\n      }\n      case \"CloseSetTimerAction\": {\n        return Progress_closeTimedSet(progress, settings, subscription, action.isPlayground);\n      }\n      case \"UpdateProgress\": {\n        return action.lensRecordings.reduce((memo, recording) => recording.fn(memo), progress);\n      }\n    }\n  };\n}\n\nexport const reducer: Reducer<IState, IAction> = (state, action): IState => {\n  if (\n    action.type === \"CompleteSetAction\" ||\n    action.type === \"ChangeAMRAPAction\" ||\n    action.type === \"CheckSetTimerAction\" ||\n    action.type === \"CloseSetTimerAction\" ||\n    action.type === \"UpdateProgress\"\n  ) {\n    const progress = Progress_getProgress(state);\n    if (progress == null) {\n      return state;\n    }\n    return Progress_setProgress(\n      state,\n      buildCardsReducer(state.storage.settings, state.storage.stats, state.storage.subscription)(progress, action)\n    );\n  } else if (action.type === \"StartProgramDayAction\") {\n    const progress = Progress_getProgress(state);\n    if (progress != null) {\n      return state;\n    } else if (state.storage.currentProgramId != null) {\n      const program = Program_getProgram(state, action.programId || state.storage.currentProgramId);\n      if (program != null) {\n        const newProgress = Program_nextHistoryRecord(program, state.storage.settings, state.storage.stats);\n        return {\n          ...state,\n          storage: { ...state.storage, progress: [newProgress] },\n        };\n      } else {\n        Dialog_alert(\"No currently selected program\");\n        return state;\n      }\n    } else {\n      return state;\n    }\n  } else if (action.type === \"EditHistoryRecord\") {\n    return {\n      ...state,\n      progress: { ...state.progress, [action.historyRecord.id]: { ...action.historyRecord, ui: {} } },\n    };\n  } else if (action.type === \"FinishProgramDayAction\") {\n    const progress = Progress_getProgressById(state, action.id);\n    if (progress == null) {\n      return state;\n    }\n    const newStorage = Progress_finishWorkout(state.storage, progress);\n    return {\n      ...state,\n      storage: newStorage,\n      progress: Progress_isCurrent(progress) ? state.progress : Progress_stop(state.progress, progress.id),\n    };\n  } else if (action.type === \"ChangeDate\") {\n    const progress = Progress_getProgressById(state, action.id);\n    if (progress == null) {\n      return state;\n    }\n    return Progress_setProgress(state, Progress_showUpdateDate(progress, action.date, action.time));\n  } else if (action.type === \"ConfirmDate\") {\n    const progress = Progress_getProgressById(state, action.id);\n    if (progress == null) {\n      return state;\n    }\n    return Progress_setProgress(state, Progress_changeDate(progress, action.date, action.time));\n  } else if (action.type === \"CancelProgress\") {\n    const progress = Progress_getProgress(state)!;\n    return {\n      ...state,\n      storage: Progress_isCurrent(progress) ? { ...state.storage, progress: [] } : state.storage,\n      progress: Progress_isCurrent(progress) ? state.progress : Progress_stop(state.progress, progress.id),\n    };\n  } else if (action.type === \"DeleteProgress\") {\n    const progress = Progress_getProgressById(state, action.id);\n    if (progress != null) {\n      if (Progress_isCurrent(progress)) {\n        NativeWorkoutBridge_discardWorkout();\n        NativeWatchBridge_sendDiscardWorkoutToWatch();\n        NativeWorkoutMirroring_resetWatchWorkoutState();\n        return {\n          ...state,\n          storage: {\n            ...state.storage,\n            history: state.storage.history.filter((h) => h.id !== progress.id),\n            progress: [],\n          },\n        };\n      }\n      return {\n        ...state,\n        storage: History_deleteRecords(state.storage, [progress.id]),\n        progress: Progress_stop(state.progress, progress.id),\n      };\n    } else {\n      return state;\n    }\n  } else if (action.type === \"PushScreen\") {\n    return state;\n  } else if (action.type === \"PullScreen\") {\n    return state;\n  } else if (action.type === \"Login\") {\n    return {\n      ...state,\n      user: { email: action.email, id: action.userId },\n      storage: { ...state.storage, email: action.email },\n    };\n  } else if (action.type === \"Logout\") {\n    return { ...state, user: undefined, storage: { ...state.storage, email: undefined } };\n  } else if (action.type === \"StopTimer\") {\n    const progress = Progress_getProgress(state);\n    if (progress != null) {\n      return Progress_setProgress(state, Progress_stopTimer(progress));\n    } else {\n      return state;\n    }\n  } else if (action.type === \"StartTimer\") {\n    const progress = Progress_getProgress(state);\n    if (progress) {\n      return Progress_setProgress(\n        state,\n        Progress_startTimer(\n          progress,\n          action.timestamp,\n          action.mode,\n          action.entryIndex,\n          action.setIndex,\n          state.storage.settings,\n          state.storage.subscription,\n          action.timer,\n          true\n        )\n      );\n    } else {\n      return state;\n    }\n  } else if (action.type === \"UpdateSettings\") {\n    if (isLoggingEnabled) {\n      console.log(`%c-------${action.desc ? ` ${action.desc}` : \"\"}`, \"font-weight:bold\");\n    }\n    return {\n      ...state,\n      storage: {\n        ...state.storage,\n        settings: action.lensRecording.fn(state.storage.settings),\n      },\n    };\n  } else if (action.type === \"ReplaceState\") {\n    return action.state;\n  } else if (action.type === \"UpdateState\") {\n    if (isLoggingEnabled) {\n      console.log(`%c-------${action.desc ? ` ${action.desc}` : \"\"}`, \"font-weight:bold\");\n    }\n    return action.lensRecording.reduce((memo, recording) => {\n      if (isLoggingEnabled) {\n        recording.log(\"state\");\n      }\n      const newState = recording.fn(memo);\n      if (isLoggingEnabled && recording.type === \"modify\") {\n        console.log(\"New Value: \", recording.value.v);\n      }\n      return newState;\n    }, state);\n  } else if (action.type === \"ApplyProgramChangesToProgress\") {\n    const progress = Progress_getCurrentProgress(state);\n    if (progress != null) {\n      const program = Program_evaluate(Program_getProgram(state, progress.programId)!, state.storage.settings);\n      let newProgress = Progress_applyProgramDay(progress, program, progress.day, state.storage.settings, {\n        programExerciseIds: action.programExerciseIds,\n        oldDayKeys: action.oldDayKeys,\n        stats: state.storage.stats,\n      });\n      newProgress = Progress_runInitialUpdateScripts(\n        newProgress,\n        action.programExerciseIds,\n        progress.day,\n        program,\n        state.storage.settings,\n        state.storage.stats\n      );\n\n      return {\n        ...state,\n        storage: { ...state.storage, progress: [newProgress] },\n      };\n    } else {\n      return state;\n    }\n  } else {\n    return state;\n  }\n};\n","import { IThunk, IDispatch } from \"./types\";\nimport type { NavigationAction } from \"@react-navigation/native\";\nimport { IScreen, IScreenData, IScreenParams } from \"../models/screen\";\nimport type { INavigateOpts } from \"../navigation/navigationService\";\nimport type { IAllScreenParamList } from \"../navigation/types\";\n\nimport { getNavigationService } from \"../navigation/navUtils\";\nimport RB from \"rollbar\";\nimport { IGetStorageResponse, IPostSyncResponse, Service } from \"../api/service\";\nimport { lb } from \"lens-shmens\";\nimport {\n  Program_getProgram,\n  Program_getFullProgram,\n  Program_evaluate,\n  Program_getProgramExercise,\n  Program_isEmpty,\n  Program_editAction,\n  Program_nextHistoryRecord,\n  Program_create,\n  Program_exportProgramToFile,\n  Program_exportProgramToLink,\n} from \"../models/program\";\nimport { getGoogleAccessToken } from \"../utils/googleAccessToken\";\nimport { SignIn_google, SignIn_apple, SignOut_google } from \"../utils/signIn\";\nimport { Platform } from \"react-native\";\nimport { Dialog_confirm, Dialog_alert } from \"../utils/dialog\";\nimport { InAppReview_request } from \"../utils/inAppReview\";\nimport {\n  IApplePromotionalOffer,\n  IEnv,\n  IGooglePromotionalOffer,\n  ILocalStorage,\n  IOfferData,\n  IState,\n  ISubscriptionLoading,\n  updateProgress,\n  updateState,\n} from \"../models/state\";\nimport {\n  AdminDebug_fetchStorage,\n  AdminDebug_fetchDebugSnapshotStorage,\n  AdminDebug_isDebugAccountId,\n} from \"../models/adminDebug\";\nimport {\n  IProgram,\n  IStorage,\n  IExerciseType,\n  ISettings,\n  IDayData,\n  IHistoryRecord,\n  IWeight,\n  IPercentage,\n  ILength,\n  ICustomExercise,\n  IImportSession,\n  IProgramState,\n} from \"../types\";\nimport { IPlannerProgramExercise } from \"../pages/planner/models/types\";\nimport { IByExercise } from \"../pages/planner/plannerEvaluator\";\nimport { CollectionUtils_compact, CollectionUtils_setAt } from \"../utils/collection\";\nimport { ImportExporter_exportStorage, ImportExporter_getExportedProgram } from \"../lib/importexporter\";\nimport { Storage_mergeStorage, Storage_isChanged, Storage_get, Storage_setAffiliate } from \"../models/storage\";\nimport { History_exportAsCSV } from \"../models/history\";\nimport { ImportSession_apply, ImportSession_findEditedRecordIds, ImportSession_undo } from \"../models/importSession\";\nimport { ImportFileError } from \"../utils/importTypes\";\nimport { StringUtils_pluralize } from \"../utils/string\";\nimport { CSV_toString } from \"../utils/csv\";\nimport { Exporter_toFile } from \"../utils/exporter\";\nimport { DateUtils_formatYYYYMMDD, DateUtils_format } from \"../utils/date\";\nimport { getInitialState } from \"./reducer\";\nimport { IndexedDBUtils_get, IndexedDBUtils_set } from \"../utils/indexeddb\";\nimport { Account_getAll, IAccount } from \"../models/account\";\nimport { WhatsNew_updateStorage } from \"../models/whatsnewUtils\";\nimport { OnloadModal_getNext, OnloadModal_shouldShowHearAboutUs } from \"../models/onloadModal\";\nimport { Screen_shouldConfirmNavigation } from \"../models/screen\";\nimport {\n  Subscriptions_listOfSubscriptions,\n  Subscriptions_hasSubscription,\n  Subscriptions_verifyAppleReceipt,\n  Subscriptions_cleanupOutdatedAppleReceipts,\n  Subscriptions_setAppleReceipt,\n  Subscriptions_verifyGooglePurchaseToken,\n  Subscriptions_setGooglePurchaseToken,\n} from \"../utils/subscriptions\";\nimport {\n  SendMessage_isIos,\n  SendMessage_toIosWithResult,\n  SendMessage_toIos,\n  SendMessage_print,\n  SendMessage_toAndroid,\n  SendMessage_isAndroid,\n} from \"../utils/sendMessage\";\nimport { IIapPurchase, IIapPurchaseError } from \"../utils/iapAdapter\";\nimport {\n  IapHelpers_alertAlreadySubscribed,\n  IapHelpers_applePromoToAdapter,\n  IapHelpers_clearLoading,\n  IapHelpers_setLoading,\n  IapHelpers_getSkus,\n  IapHelpers_readReceiptOrJwsIOS,\n} from \"../utils/iapHelpers\";\nimport { UidFactory_generateUid } from \"../utils/generator\";\nimport { ClipboardUtils_copy } from \"../utils/clipboard\";\nimport {\n  Progress_getProgress,\n  Progress_getProgressById,\n  Progress_isSetTimerCheckDue,\n  Progress_getFirstIncompleteWorkoutSet,\n  Progress_updateTimer,\n  Progress_getCurrentProgress,\n  Progress_isCurrent,\n  Progress_stop,\n  Progress_scheduleTimerNotification,\n} from \"../models/progress\";\nimport { Reps_findNextEntryAndSetIndex } from \"../models/set\";\nimport { NativeTimerBridge_stopTimer } from \"../utils/nativeTimerBridge\";\nimport { NativeWorkoutBridge_discardWorkout } from \"../utils/nativeWorkoutBridge\";\nimport { IImportLinkData, ImportFromLink_importFromLink } from \"../utils/importFromLink\";\nimport { getLatestMigrationVersion } from \"../migrations/migrations\";\nimport { LogUtils_log } from \"../utils/log\";\nimport { lg } from \"../utils/posthog\";\nimport { RollbarUtils_config } from \"../utils/rollbar\";\nimport { UrlUtils_build } from \"../utils/url\";\nimport { ImportFromLiftosaur_convertLiftosaurCsvToHistoryRecords } from \"../utils/importFromLiftosaur\";\nimport { ImportFromHevy_convertHevyCsvToHistoryRecords } from \"../utils/importFromHevy\";\nimport { Sync_getStorageUpdate2 } from \"../utils/sync\";\nimport { PerfProbe_isTarget } from \"../utils/perfSetCompleteProbe\";\nimport {\n  ObjectUtils_values,\n  ObjectUtils_filter,\n  ObjectUtils_clone,\n  ObjectUtils_omit,\n  ObjectUtils_keys,\n} from \"../utils/object\";\nimport { EditStats_uploadDailyMetrics, EditStats_uploadHealthStats } from \"../models/editStats\";\nimport { HealthSync_eligibleForAppleHealth, HealthSync_eligibleForGoogleHealth } from \"../lib/healthSync\";\nimport {\n  PlannerProgram_generateFullText,\n  PlannerProgram_hasNonSelectedWeightUnit,\n  PlannerProgram_switchToUnit,\n} from \"../pages/planner/models/plannerProgram\";\nimport { Weight_oppositeUnit } from \"../models/weight\";\nimport { ICollectionVersions } from \"../models/versionTracker\";\nimport { DeviceId_get } from \"../utils/deviceId\";\nimport {\n  LiveActivityManager_updateProgressLiveActivity,\n  LiveActivityManager_updateLiveActivityForNextEntry,\n} from \"../utils/liveActivityManager\";\nimport { KeychainStore_setAuthToken, KeychainStore_clearAuthToken, IAuthToken } from \"../utils/keychainStore\";\nimport { NativeWatchBridge_sendAuthToWatch, NativeWatchBridge_sendClearAuthToWatch } from \"../utils/nativeWatchBridge\";\nimport { Analytics_trackPurchase, Analytics_trackSignUp } from \"../utils/analytics\";\n\ndeclare let Rollbar: RB;\n\nexport class NoRetryError extends Error {\n  public noretry = true;\n}\n\nexport function Thunk_googleSignIn(cb?: (state: IState) => void): IThunk {\n  return async (dispatch, getState, env) => {\n    if (Platform.OS !== \"web\") {\n      const result = await SignIn_google();\n      if (result?.idToken == null && result?.accessToken == null) {\n        if (cb) {\n          cb(getState());\n        }\n        return;\n      }\n      const token = result.idToken || result.accessToken!;\n      const state = getState();\n      const userId = state.user?.id || state.storage.tempUserId;\n      const loginResult = await load(dispatch, \"Logging in\", async () => {\n        return env.service.googleSignIn(token, userId, {});\n      });\n      await load(dispatch, \"Signing in\", () => {\n        return handleLogin(dispatch, loginResult, env.service.client, userId);\n      });\n      if (cb) {\n        cb(getState());\n      }\n      dispatch(Thunk_sync2());\n      return;\n    }\n    const url = UrlUtils_build(window.location.href);\n    const forcedUserEmail = url.searchParams.get(\"forceuseremail\");\n    if (forcedUserEmail == null) {\n      const accessToken = await getGoogleAccessToken();\n      if (accessToken != null) {\n        const state = getState();\n        const userId = state.user?.id || state.storage.tempUserId;\n        const result = await load(dispatch, \"Logging in\", async () => {\n          return env.service.googleSignIn(accessToken, userId, {});\n        });\n        await load(dispatch, \"Signing in\", () => {\n          return handleLogin(dispatch, result, env.service.client, userId);\n        });\n        if (cb) {\n          cb(getState());\n        }\n        dispatch(Thunk_sync2());\n      }\n    } else {\n      const state = getState();\n      const userId = state.user?.id || state.storage.tempUserId;\n      const result = await env.service.googleSignIn(forcedUserEmail, userId, { forcedUserEmail });\n      await load(dispatch, \"Logging in\", () => handleLogin(dispatch, result, env.service.client, userId));\n      if (cb) {\n        cb(getState());\n      }\n      dispatch(Thunk_sync2());\n    }\n  };\n}\n\nexport interface IEmailAuthResult {\n  error?: string;\n  providers?: string[];\n  confirmationSent?: boolean;\n}\n\nexport function Thunk_emailAuth(\n  mode: \"signin\" | \"signup\",\n  email: string,\n  password: string,\n  cb: (result: IEmailAuthResult, state: IState) => void\n): IThunk {\n  return async (dispatch, getState, env) => {\n    dispatch(Thunk_postevent(`email-${mode}`));\n    const state = getState();\n    const userId = state.user?.id || state.storage.tempUserId;\n    const result = await load(dispatch, \"Logging in\", () => {\n      return mode === \"signup\"\n        ? env.service.emailSignUp(email, password, userId)\n        : env.service.emailSignIn(email, password, userId);\n    });\n    if (result.type === \"success\") {\n      await load(dispatch, \"Signing in\", () => handleLogin(dispatch, result.response, env.service.client, userId));\n      dispatch(Thunk_sync2());\n      cb({}, getState());\n    } else if (result.type === \"confirmation_sent\") {\n      cb({ confirmationSent: true }, getState());\n    } else {\n      cb({ error: result.error, providers: result.providers }, getState());\n    }\n  };\n}\n\nexport function Thunk_forgotPassword(email: string, cb: (result: IEmailAuthResult) => void): IThunk {\n  return async (dispatch, getState, env) => {\n    dispatch(Thunk_postevent(\"email-forgot-password\"));\n    const result = await load(dispatch, \"Sending email\", () => env.service.forgotPassword(email));\n    cb(result);\n  };\n}\n\nexport function Thunk_postevent(action: string, extra?: Record<string, string | number>): IThunk {\n  return async (dispatch, getState, env) => {\n    lg(action, extra, env.service, getState().user?.id || getState().storage.tempUserId);\n  };\n}\n\nexport function Thunk_appleSignIn(cb?: (state: IState) => void): IThunk {\n  return async (dispatch, getState, env) => {\n    dispatch(Thunk_postevent(\"apple-sign-in\"));\n    let id_token: string | undefined;\n    let code: string | undefined;\n    if (Platform.OS !== \"web\") {\n      const signInResult = await SignIn_apple();\n      if (signInResult == null) {\n        if (cb) {\n          cb(getState());\n        }\n        return;\n      }\n      id_token = signInResult.idToken;\n      code = signInResult.code ?? \"\";\n    } else if (SendMessage_isIos()) {\n      const result = await SendMessage_toIosWithResult<{ id_token: string; code: string } | { error: string }>({\n        type: \"signInWithApple\",\n      });\n      if (!result) {\n        return;\n      }\n      if (\"error\" in result) {\n        Dialog_alert(result.error);\n        return;\n      } else {\n        ({ id_token, code } = result);\n      }\n    } else {\n      if (!window.AppleID?.auth) {\n        Dialog_alert(\"Apple Sign In is not available\");\n        if (cb) {\n          cb(getState());\n        }\n        return;\n      }\n      const response = await window.AppleID.auth.signIn();\n      ({ id_token, code } = response.authorization);\n    }\n    if (id_token != null) {\n      const state = getState();\n      const userId = state.user?.id || state.storage.tempUserId;\n      const result = await load(dispatch, \"Logging in\", async () =>\n        env.service.appleSignIn(code ?? \"\", id_token!, userId)\n      );\n      await load(dispatch, \"Signing in\", () => handleLogin(dispatch, result, env.service.client, userId));\n      if (cb) {\n        cb(getState());\n      }\n      dispatch(Thunk_sync2());\n    } else {\n      if (cb) {\n        cb(getState());\n      }\n    }\n  };\n}\n\nexport function Thunk_log(action: string, detail?: string): IThunk {\n  return async (dispatch, getState, env) => {\n    const state = getState();\n    if (!state.nosync) {\n      LogUtils_log(\n        state.user?.id || state.storage.tempUserId,\n        action,\n        state.storage.affiliates,\n        Subscriptions_listOfSubscriptions(state.storage.subscription),\n        state.storage.referrer,\n        state.storage.landingPage,\n        detail\n      );\n    }\n  };\n}\n\nexport function Thunk_verifySubscriptionKey(): IThunk {\n  return async (dispatch, getState, env) => {\n    const state = getState();\n    const key = state.storage.subscription.key;\n    if (state.nosync || key == null) {\n      return;\n    }\n    const userId = state.user?.id || state.storage.tempUserId;\n    const { clear } = await env.service.verifySubscriptionKey(userId, key);\n    if (clear) {\n      updateState(\n        dispatch,\n        [lb<IState>().p(\"storage\").p(\"subscription\").p(\"key\").record(undefined)],\n        \"Clear subscription key\"\n      );\n    }\n  };\n}\n\nexport function Thunk_logOut(cb?: () => void): IThunk {\n  return async (dispatch, getState, env) => {\n    dispatch(Thunk_postevent(\"log-out\"));\n    if (getState().user?.id) {\n      const isDebugAccount = AdminDebug_isDebugAccountId(getState().storage.tempUserId);\n      await env.service.signout();\n      dispatch({ type: \"Logout\" });\n      updateState(dispatch, [lb<IState>().p(\"lastSyncedStorage\").record(undefined)], \"Clear last sync on logout\");\n      // A debug sandbox borrows the device's native auth, so logging out of it must only drop the\n      // debug session - tearing down the keychain/Google/watch auth here would wipe the admin's own\n      // real persisted login.\n      if (!isDebugAccount) {\n        SendMessage_toIos({ type: \"accountLogout\" });\n        try {\n          await KeychainStore_clearAuthToken();\n        } catch (e) {\n          lg(\"ls-keychain-clear-auth-fail\", { error: e instanceof Error ? e.message : String(e) });\n        }\n        await SignOut_google();\n        NativeWatchBridge_sendClearAuthToWatch();\n      }\n    }\n    if (cb) {\n      cb();\n    }\n  };\n}\n\nexport function Thunk_postDebug(): IThunk {\n  return async (dispatch, getState, env) => {\n    const state = getState();\n    const userid = state.user?.id || state.storage.tempUserId;\n    await load(dispatch, \"Debug sync\", async () => env.service.postDebug(userid, JSON.stringify(state), {}));\n  };\n}\n\nasync function _sync2(\n  dispatch: IDispatch,\n  getState: () => IState,\n  env: IEnv,\n  args?: { force: boolean },\n  signal?: AbortSignal\n): Promise<void> {\n  const state = getState();\n  function handleResponse(\n    result: IPostSyncResponse,\n    handleResponseArgs: {\n      lastSyncedStorage?: IStorage;\n      requestedLastStorage?: boolean;\n    }\n  ): boolean {\n    const { lastSyncedStorage, requestedLastStorage } = handleResponseArgs;\n    if (result.type === \"clean\") {\n      dispatch(Thunk_postevent(\"handle-response-clean\"));\n      updateState(\n        dispatch,\n        [\n          lb<IState>()\n            .p(\"lastSyncedStorage\")\n            .record(lastSyncedStorage || getState().lastSyncedStorage),\n          lb<IState>().pi(\"lastSyncedStorage\").p(\"originalId\").record(result.new_original_id),\n          lb<IState>().p(\"storage\").p(\"originalId\").record(result.new_original_id),\n          lb<IState>().p(\"storage\").p(\"subscription\").p(\"key\").record(result.key),\n        ],\n        \"Update sync metadata\"\n      );\n      if (getState().storage.email !== result.email || getState().user?.id !== result.user_id) {\n        dispatch({ type: \"Login\", email: result.email, userId: result.user_id });\n      }\n      return true;\n    } else if (result.type === \"dirty\") {\n      result.storage.tempUserId = result.user_id;\n      if (requestedLastStorage) {\n        dispatch(Thunk_postevent(\"handle-response-dirty-requested-last-storage\"));\n        updateState(\n          dispatch,\n          [\n            lb<IState>().p(\"lastSyncedStorage\").record(result.storage),\n            lb<IState>().p(\"storage\").p(\"tempUserId\").record(result.user_id),\n          ],\n          \"Update last synced storage\"\n        );\n      } else {\n        dispatch(Thunk_postevent(\"handle-response-dirty\"));\n        const currentStorage = getState().storage;\n        const currentHistoryLen = currentStorage.history?.length ?? 0;\n        const serverHistoryLen = result.storage.history?.length ?? 0;\n        const historyVersions = result.storage._versions?.history as { deleted?: Record<string, number> } | undefined;\n        const serverDeletedHistory = Object.keys(historyVersions?.deleted || {}).length;\n\n        const probeMergeTarget = PerfProbe_isTarget();\n        const probeMergeT0 = probeMergeTarget ? Date.now() : 0;\n        const newStorage = Storage_mergeStorage(currentStorage, result.storage, getState().deviceId);\n        if (probeMergeTarget) {\n          lg(\"perf-sync-merge\", {\n            merge_ms: Date.now() - probeMergeT0,\n            history_len: currentStorage.history?.length ?? 0,\n          });\n        }\n        const mergedHistoryLen = newStorage.history?.length ?? 0;\n\n        if (currentHistoryLen > 0 && mergedHistoryLen < currentHistoryLen) {\n          lg(\"ls-history-deletion-server-merge\", {\n            currentHistoryLen,\n            serverHistoryLen,\n            mergedHistoryLen,\n            serverDeletedHistory,\n          });\n        }\n\n        const newProgramIds = newStorage.programs.map((p) => p.id);\n        if (Array.from(new Set(newProgramIds)).length !== newProgramIds.length) {\n          lg(\"program-duplicate-ids-after-merge\", {\n            programIds: JSON.stringify(newProgramIds),\n            oldPrograms: JSON.stringify(currentStorage.programs),\n            newPrograms: JSON.stringify(result.storage.programs),\n            oldVersions: JSON.stringify(currentStorage._versions?.programs),\n            newVersions: JSON.stringify(result.storage._versions?.programs),\n          });\n        }\n        updateState(\n          dispatch,\n          [\n            lb<IState>().p(\"lastSyncedStorage\").record(result.storage),\n            lb<IState>().p(\"storage\").record(newStorage),\n            lb<IState>().p(\"storage\").p(\"subscription\").p(\"key\").record(result.key),\n          ],\n          \"Merge synced storage\"\n        );\n        if (getState().storage.email !== result.email || getState().user?.id !== result.user_id) {\n          dispatch({ type: \"Login\", email: result.email, userId: result.user_id });\n        }\n      }\n      return true;\n    } else if (result.type === \"error\" && result.error === \"not_authorized\") {\n      updateState(\n        dispatch,\n        [\n          lb<IState>().p(\"storage\").p(\"subscription\").p(\"key\").record(result.key),\n          lb<IState>().p(\"lastSyncedStorage\").record(undefined),\n        ],\n        \"Update subscription no storage\"\n      );\n      return false;\n    } else if (result.type === \"error\") {\n      if (result.error === \"outdated_client_storage\") {\n        Dialog_alert(\n          \"The version of the storage on a device is older than on the server, so sync failed. \" +\n            \"To fix it - kill/restart the app a couple times.\"\n        );\n      }\n      throw new NoRetryError(result.error);\n    }\n    return false;\n  }\n  if (state.lastSyncedStorage == null || state.lastSyncedStorage.tempUserId !== state.storage.tempUserId) {\n    dispatch(\n      Thunk_postevent(\"fetch-last-synced-storage\", {\n        lastUserId: state.lastSyncedStorage?.tempUserId ?? \"\",\n        newUserId: state.storage.tempUserId ?? \"\",\n      })\n    );\n    const result = await env.service.postSync({\n      tempUserId: state.storage.tempUserId,\n      storageUpdate: {\n        version: state.storage.version,\n      },\n      signal,\n      deviceId: state.deviceId,\n    });\n    if (signal?.aborted) {\n      return;\n    }\n    const handled = handleResponse(result, { requestedLastStorage: true });\n    if (handled) {\n      await _sync2(dispatch, getState, env, args);\n    }\n  } else {\n    dispatch(Thunk_postevent(\"sync-storage-update\", { force: args?.force ? \"true\" : \"false\" }));\n    const probeSyncTarget = PerfProbe_isTarget();\n    const probeSyncT0 = probeSyncTarget ? Date.now() : 0;\n    const storageUpdate = Sync_getStorageUpdate2(state.storage, state.lastSyncedStorage, state.deviceId);\n    if (probeSyncTarget) {\n      lg(\"perf-sync\", {\n        build_ms: Date.now() - probeSyncT0,\n        has_update: storageUpdate.storage != null ? \"true\" : \"false\",\n      });\n    }\n    if (args?.force || storageUpdate.storage) {\n      const lastSyncedStorage = state.storage;\n      const result = await env.service.postSync({\n        tempUserId: state.storage.tempUserId,\n        storageUpdate: storageUpdate,\n        signal,\n        deviceId: state.deviceId,\n      });\n      if (signal?.aborted) {\n        return;\n      }\n      handleResponse(result, { lastSyncedStorage });\n    }\n  }\n}\n\nfunction getDeletedStats(state: IState): number[] {\n  let deleted: string[] = [];\n  const versionStats = state.storage._versions?.stats as Record<string, Record<string, ICollectionVersions>>;\n  for (const type of Object.keys(versionStats || {})) {\n    for (const statType of Object.keys(versionStats[type] || {})) {\n      const stats = versionStats[type][statType];\n      deleted = deleted.concat(Object.keys(stats.deleted || {}));\n    }\n  }\n  return deleted.map(Number);\n}\n\nasync function _syncHealthKit(dispatch: IDispatch, getState: () => IState, env: IEnv): Promise<void> {\n  const settings = getState().storage.settings;\n  if (!env.health) {\n    return;\n  }\n  const platform: \"ios\" | \"android\" = Platform.OS === \"ios\" ? \"ios\" : \"android\";\n  const syncMeasurements =\n    platform === \"ios\" ? settings.appleHealthSyncMeasurements : settings.googleHealthSyncMeasurements;\n  const syncSleepNutrition =\n    platform === \"ios\" ? settings.appleHealthSyncSleepNutrition : settings.googleHealthSyncSleepNutrition;\n\n  if (syncMeasurements) {\n    dispatch(Thunk_postevent(platform === \"ios\" ? \"read-apple-health\" : \"read-google-health\"));\n    const anchor = platform === \"ios\" ? settings.appleHealthAnchor : settings.googleHealthAnchor;\n    const result = await env.health.syncMeasurements({\n      anchor,\n      weightUnit: settings.units,\n      lengthUnit: settings.lengthUnits,\n    });\n    EditStats_uploadHealthStats(\n      platform,\n      dispatch,\n      { data: result },\n      getState().storage.settings,\n      getDeletedStats(getState())\n    );\n  }\n\n  if (syncSleepNutrition) {\n    dispatch(Thunk_postevent(platform === \"ios\" ? \"read-apple-health-daily\" : \"read-google-health-daily\"));\n    // iOS reads a 90-day rolling window; Android is 30 because Health Connect won't return records older\n    // than 30 days without the READ_HEALTH_DATA_HISTORY permission (which we don't request).\n    const windowDays = platform === \"android\" ? 30 : 90;\n    const daily = await env.health.syncDailyMetrics({ windowDays, metrics: [\"sleep\", \"calories\", \"protein\"] });\n    EditStats_uploadDailyMetrics(platform, dispatch, daily);\n  }\n}\n\nexport function Thunk_saveWorkoutToHealth(args: {\n  startMs: number;\n  endMs: number;\n  calories: number;\n  intervals: [number, number | null][];\n  successAlert?: boolean;\n}): IThunk {\n  return async (dispatch, getState, env) => {\n    if (!env.health || AdminDebug_isDebugAccountId(getState().storage.tempUserId)) {\n      return;\n    }\n    const platform = Platform.OS === \"ios\" ? \"apple\" : \"google\";\n    dispatch(Thunk_postevent(`submit-workout-${platform}-health`));\n    dispatch(\n      Thunk_postevent(`storing-workout-to-${platform}-health`, {\n        intervalsCount: args.intervals.length,\n      })\n    );\n    try {\n      await env.health.saveWorkout(args);\n      dispatch(Thunk_postevent(`success-workout-${platform}-health`));\n      if (args.successAlert) {\n        Dialog_alert(`Synced to ${platform === \"apple\" ? \"Apple Health\" : \"Google Health\"}`);\n      }\n    } catch (e) {\n      console.warn(\"Failed to save workout to Health\", e);\n      dispatch(Thunk_postevent(`fail-workout-${platform}-health`, { error: (e as Error)?.message ?? \"unknown\" }));\n      Dialog_alert(`Couldn't save workout to ${platform === \"apple\" ? \"Apple Health\" : \"Google Health\"}`);\n    }\n  };\n}\n\nexport function Thunk_saveMeasurementsToHealth(args: {\n  bodyweight?: IWeight;\n  bodyfat?: IPercentage;\n  waist?: ILength;\n  timestamp: number;\n}): IThunk {\n  return async (dispatch, getState, env) => {\n    if (!env.health || AdminDebug_isDebugAccountId(getState().storage.tempUserId)) {\n      return;\n    }\n    if (!args.bodyweight && !args.bodyfat && !args.waist) {\n      return;\n    }\n    try {\n      await env.health.saveMeasurements(args);\n    } catch (e) {\n      console.warn(\"Failed to save measurements to Health\", e);\n      const platform = Platform.OS === \"ios\" ? \"apple\" : \"google\";\n      dispatch(\n        Thunk_postevent(`${platform}-health-save-measurements-error`, {\n          error: (e as Error)?.message ?? \"unknown\",\n        })\n      );\n      Dialog_alert(`Couldn't save measurements to ${platform === \"apple\" ? \"Apple Health\" : \"Google Health\"}`);\n    }\n  };\n}\n\nexport function Thunk_requestHealthPermissions(): IThunk {\n  return async (_dispatch, getState, env) => {\n    if (!env.health || AdminDebug_isDebugAccountId(getState().storage.tempUserId)) {\n      return;\n    }\n    try {\n      await env.health.requestPermissions();\n    } catch (e) {\n      console.warn(\"Failed to request health permissions\", e);\n    }\n  };\n}\n\nexport function Thunk_syncHealthKit(cb?: () => void): IThunk {\n  return async (dispatch, getState, env) => {\n    const state = getState();\n    if (AdminDebug_isDebugAccountId(state.storage.tempUserId)) {\n      if (cb != null) {\n        cb();\n      }\n      return;\n    }\n    const s = state.storage.settings;\n    const appleSyncEnabled = s.appleHealthSyncMeasurements || s.appleHealthSyncSleepNutrition;\n    const googleSyncEnabled = s.googleHealthSyncMeasurements || s.googleHealthSyncSleepNutrition;\n    if (\n      !(appleSyncEnabled && HealthSync_eligibleForAppleHealth()) &&\n      !(googleSyncEnabled && HealthSync_eligibleForGoogleHealth())\n    ) {\n      if (cb != null) {\n        cb();\n      }\n      return;\n    }\n    try {\n      await env.queue.enqueue(async () => {\n        try {\n          await _syncHealthKit(dispatch, getState, env);\n        } catch (e) {\n          console.warn(\"Failed to sync from Health\", e);\n          const platform = Platform.OS === \"ios\" ? \"apple\" : \"google\";\n          dispatch(Thunk_postevent(`${platform}-health-sync-error`, { error: (e as Error)?.message ?? \"unknown\" }));\n        }\n      });\n    } finally {\n      if (cb != null) {\n        cb();\n      }\n    }\n  };\n}\n\nexport function Thunk_sync2(args?: { force?: boolean; cb?: () => void; log?: boolean }): IThunk {\n  return async (dispatch, getState, env) => {\n    if (args?.log) {\n      dispatch(\n        Thunk_postevent(\"sync2-enter\", {\n          isProcessing: `${env.queue.getIsProcessing()}`,\n          queueLength: env.queue.length().toString(),\n        })\n      );\n    }\n    try {\n      const state = getState();\n      if (state.errors.corruptedstorage == null && !state.nosync && (state.user != null || args?.force)) {\n        await env.queue.enqueue(\n          async (args2, signal) => {\n            await load(dispatch, \"Sync\", async () => {\n              if (args2?.log) {\n                dispatch(Thunk_postevent(\"sync2-start\"));\n              }\n              await _sync2(dispatch, getState, env, args2, signal);\n            });\n          },\n          { force: !!args?.force, log: !!args?.log }\n        );\n      }\n    } finally {\n      if (args?.cb) {\n        args.cb();\n      }\n    }\n  };\n}\n\nexport function Thunk_updateTimer(\n  newTimer: number,\n  entryIndex: number | undefined,\n  setIndex: number | undefined,\n  skipLiveActivityUpdate: boolean\n): IThunk {\n  return async (dispatch, getState, env) => {\n    const state = getState();\n    const progress = Progress_getProgress(state);\n    if (!progress) {\n      return;\n    }\n    const program = Program_getProgram(state, progress.programId);\n    if (!program) {\n      return;\n    }\n    const newProgress = Progress_updateTimer(\n      progress,\n      program,\n      newTimer,\n      progress.timerSince || Date.now(),\n      entryIndex,\n      setIndex,\n      !!skipLiveActivityUpdate,\n      state.storage.settings,\n      state.storage.subscription\n    );\n    updateProgress(dispatch, lb<IHistoryRecord>().record(newProgress), \"Update rest timer\");\n  };\n}\n\nexport function Thunk_updateLiveActivity(\n  entryIndex: number | undefined,\n  setIndex: number | undefined,\n  restTimer: number | undefined,\n  restTimerSince: number | undefined\n): IThunk {\n  return async (dispatch, getState, env) => {\n    const state = getState();\n    const progress = Progress_getProgress(state);\n    if (!progress) {\n      return;\n    }\n    const program = Program_getProgram(state, progress.programId);\n    if (!program) {\n      return;\n    }\n    LiveActivityManager_updateProgressLiveActivity(\n      program,\n      progress,\n      state.storage.settings,\n      state.storage.subscription,\n      entryIndex,\n      setIndex,\n      restTimer,\n      restTimerSince\n    );\n  };\n}\n\nexport function Thunk_completeSetExternal(\n  entryIndex: number,\n  setIndex: number,\n  restTimer: number,\n  restTimerSince: number\n): IThunk {\n  return async (dispatch, getState, env) => {\n    const state = getState();\n    const progress = Progress_getProgress(state);\n    if (!progress) {\n      return;\n    }\n    const entry = progress.entries[entryIndex];\n    const isWarmup = setIndex < entry.warmupSets.length;\n    let adjustedSetIndex = setIndex;\n    if (!isWarmup) {\n      adjustedSetIndex -= entry.warmupSets.length;\n    }\n    SendMessage_print(`Main App: complete set entryIndex: ${entryIndex}, setIndex: ${setIndex}`);\n    const program = Program_getFullProgram(state, progress.programId);\n    const evaluatedProgram = program ? Program_evaluate(program, state.storage.settings) : undefined;\n    const programExercise = evaluatedProgram\n      ? Program_getProgramExercise(progress.day, evaluatedProgram, entry.programExerciseId)\n      : undefined;\n\n    const set = isWarmup ? entry.warmupSets[adjustedSetIndex] : entry.sets[adjustedSetIndex];\n    if (!set) {\n      SendMessage_print(`Main App: Set not found at index ${adjustedSetIndex}, skipping`);\n      dispatch(Thunk_updateLiveActivity(entryIndex, setIndex, restTimer, restTimerSince));\n      return;\n    }\n    if (set.isCompleted) {\n      SendMessage_print(`Main App: Set already completed, refreshing live activity`);\n      dispatch(Thunk_updateLiveActivity(entryIndex, setIndex, restTimer, restTimerSince));\n      return;\n    }\n\n    dispatch({\n      type: \"CompleteSetAction\",\n      setIndex: adjustedSetIndex,\n      entryIndex: entryIndex,\n      programExercise: programExercise,\n      otherStates: evaluatedProgram?.states,\n      isPlayground: false,\n      mode: isWarmup ? \"warmup\" : \"workout\",\n      forceUpdateEntryIndex: true,\n      isExternal: true,\n    });\n  };\n}\n\nfunction resolveTimedSetProgramContext(\n  state: IState,\n  progress: IHistoryRecord,\n  entryIndex: number | undefined\n): { programExercise: IPlannerProgramExercise | undefined; otherStates: IByExercise<IProgramState> | undefined } {\n  const entry = entryIndex != null ? progress.entries[entryIndex] : undefined;\n  if (!entry) {\n    return { programExercise: undefined, otherStates: undefined };\n  }\n  const program = Program_getFullProgram(state, progress.programId);\n  const evaluatedProgram = program ? Program_evaluate(program, state.storage.settings) : undefined;\n  const programExercise = evaluatedProgram\n    ? Program_getProgramExercise(progress.day, evaluatedProgram, entry.programExerciseId)\n    : undefined;\n  return { programExercise, otherStates: evaluatedProgram?.states };\n}\n\n// Record the running set timer and complete the set. The model (Progress_completeSetAction) derives the\n// elapsed time from when the clock started, decides whether to advance/close+rest, and may open the\n// AMRAP modal — this thunk just resolves the program context the update script needs.\nexport function Thunk_recordSetTimer(\n  entryIndex: number,\n  setIndex: number,\n  keepTiming: boolean,\n  recordedSeconds?: number\n): IThunk {\n  return async (dispatch, getState, env) => {\n    const state = getState();\n    const progress = Progress_getProgress(state);\n    if (!progress) {\n      return;\n    }\n    // A native Live Activity / Live Update \"Stop & Record\"/\"Log & keep\" tap can arrive stale — the timed set\n    // already auto-closed at its target, or the user double-tapped an old notification. The set timer modal is\n    // then gone (or points at a different set), and completing here would fall through to normal set toggling\n    // and flip the already-completed set back off. Ignore it and just resync the surface that sent it.\n    const setTimerModal = progress.setTimer;\n    if (setTimerModal == null || setTimerModal.entryIndex !== entryIndex || setTimerModal.setIndex !== setIndex) {\n      dispatch(Thunk_refreshLiveActivity());\n      return;\n    }\n    const { programExercise, otherStates } = resolveTimedSetProgramContext(state, progress, entryIndex);\n    dispatch({\n      type: \"CompleteSetAction\",\n      entryIndex,\n      setIndex,\n      mode: \"workout\",\n      programExercise,\n      otherStates,\n      forceUpdateEntryIndex: false,\n      isExternal: false,\n      isPlayground: false,\n      keepSetTimerRunning: keepTiming,\n      // From the live activity this is the elapsed at the moment of the tap (native-computed) — use it\n      // instead of recomputing from startedAt at processing time, which drifts if the app woke late.\n      recordedSeconds,\n    });\n  };\n}\n\n// Polled by the set-timer banner and the rest timer every tick. Cheap no-op unless a time threshold has\n// actually been crossed (auto work timer hit its target, or auto rest expired), in which case the model\n// advances/completes. Gated by the pure predicate so we don't evaluate the program every second.\nexport function Thunk_checkSetTimer(): IThunk {\n  return async (dispatch, getState, env) => {\n    const state = getState();\n    const progress = Progress_getProgress(state);\n    if (!progress || !Progress_isSetTimerCheckDue(progress, Date.now())) {\n      return;\n    }\n    const hadSetTimer = progress.setTimer != null;\n    const entryIndex = progress.setTimer?.entryIndex ?? progress.timerEntryIndex;\n    const { programExercise, otherStates } = resolveTimedSetProgramContext(state, progress, entryIndex);\n    dispatch({ type: \"CheckSetTimerAction\", programExercise, otherStates });\n    // The set timer just closed — into rest, into an AMRAP prompt, or ended (an EMOM that rolls straight to\n    // the next set keeps setTimer, so it stays silent, matching the watch). Play the set→rest cue.\n    const after = Progress_getProgress(getState());\n    const setTimerClosed = hadSetTimer && (after?.setTimer == null || after?.amrapModal != null);\n    if (setTimerClosed && getState().adminKey == null) {\n      const settings = getState().storage.settings;\n      env.audio.play(settings.volume, !!settings.vibration, \"set-timer-end\");\n    }\n    // The predicate above guarantees the model just advanced (auto work timer hit target, or auto rest\n    // expired → next set timer). Re-push so the live activity/live update follows along — otherwise an\n    // in-app poll advances the UI while the lock-screen stays on the expired rest until the next update.\n    dispatch(Thunk_refreshLiveActivity());\n  };\n}\n\n// Re-pushes the live activity for the current workout state (set timer / rest / next set). Used on app\n// foreground (after Thunk_checkSetTimer reconciles the model) to resync the live activity, which can't\n// advance itself while the app is suspended.\nexport function Thunk_refreshLiveActivity(): IThunk {\n  return async (dispatch, getState, env) => {\n    const state = getState();\n    const progress = Progress_getProgress(state);\n    if (!progress || !Progress_isCurrent(progress)) {\n      return;\n    }\n    const program = Program_getFullProgram(state, progress.programId);\n    const settings = state.storage.settings;\n    const subscription = state.storage.subscription;\n    const setTimerModal = progress.setTimer;\n    if (setTimerModal != null) {\n      // Centralization in LiveActivityManager_updateLiveActivity reads setTimerModal, so the entry/set\n      // passed here are overridden — it renders the set-timer view.\n      LiveActivityManager_updateProgressLiveActivity(\n        program,\n        progress,\n        settings,\n        subscription,\n        setTimerModal.entryIndex,\n        setTimerModal.setIndex,\n        undefined,\n        undefined\n      );\n      return;\n    }\n    if (progress.timer != null && progress.timerSince != null) {\n      // The rest timer belongs to the just-completed set (progress.timerSetIndex), but the live activity\n      // must show the NEXT set so its complete button targets a set that can actually be completed — pushing\n      // the completed set's index makes the button a no-op. Mirrors screenWorkout/restTimer; the rest timer\n      // itself is read from progress.timer/timerSince inside updateLiveActivity, so it still shows.\n      const next =\n        progress.timerEntryIndex != null\n          ? Reps_findNextEntryAndSetIndex(progress, progress.timerEntryIndex, progress.timerMode ?? \"workout\")\n          : undefined;\n      LiveActivityManager_updateProgressLiveActivity(\n        program,\n        progress,\n        settings,\n        subscription,\n        next?.entryIndex ?? progress.timerEntryIndex,\n        next?.setIndex ?? progress.timerSetIndex,\n        progress.timer,\n        progress.timerSince\n      );\n      return;\n    }\n    const next = Progress_getFirstIncompleteWorkoutSet(progress);\n    if (next != null) {\n      const entry = progress.entries[next.entryIndex];\n      const absoluteSetIndex = entry.warmupSets.length + next.setIndex;\n      LiveActivityManager_updateProgressLiveActivity(\n        program,\n        progress,\n        settings,\n        subscription,\n        next.entryIndex,\n        absoluteSetIndex,\n        undefined,\n        undefined\n      );\n    }\n  };\n}\n\nexport function Thunk_playAudioNotification(): IThunk {\n  return async (dispatch, getState, env) => {\n    if (getState().adminKey == null) {\n      const settings = getState().storage.settings;\n      env.audio.play(settings.volume, !!settings.vibration);\n    }\n  };\n}\n\nexport function Thunk_handleWatchStorageMerge(storageJson: string, isLiveActivity?: boolean): IThunk {\n  return async (dispatch, getState, env) => {\n    try {\n      const watchStorage: IStorage = JSON.parse(storageJson);\n      const state = getState();\n\n      const phoneHistoryLen = state.storage.history?.length ?? 0;\n      const watchHistoryLen = watchStorage.history?.length ?? 0;\n\n      const wasOnProgressScreen = env.getCurrentScreenData?.()?.name === \"progress\";\n      const hadProgress = state.storage.progress && state.storage.progress.length > 0;\n\n      // Merge watch storage with phone storage. amrapModal now lives on progress (not progress.ui), so it\n      // version-merges across devices like setTimer — no manual propagation past the `ui` exclusion needed.\n      let mergedStorage = Storage_mergeStorage(state.storage, watchStorage, state.deviceId);\n\n      // currentEntryIndex syncs, but the workout pager only scrolls when forceUpdateEntryIndex (a device-local\n      // ui flag) flips — without this a watch-driven exercise switch highlights the thumbnail but never scrolls\n      // the pager to it. Flip the flag when the merge actually moved the shown exercise.\n      const prevEntryIndex = state.storage.progress?.[0]?.currentEntryIndex ?? 0;\n      const mergedEntryIndex = mergedStorage.progress?.[0]?.currentEntryIndex ?? 0;\n      if (mergedEntryIndex !== prevEntryIndex && mergedStorage.progress?.[0]) {\n        mergedStorage = {\n          ...mergedStorage,\n          progress: [\n            {\n              ...mergedStorage.progress[0],\n              ui: {\n                ...mergedStorage.progress[0].ui,\n                forceUpdateEntryIndex: !mergedStorage.progress[0].ui?.forceUpdateEntryIndex,\n              },\n            },\n          ],\n        };\n      }\n\n      if (Storage_isChanged(state.storage, mergedStorage)) {\n        // Also merge into lastSyncedStorage to preserve phone's unsent changes\n        // This ensures prepareSync won't re-detect watch's changes as new phone changes\n        const mergedLastSynced = state.lastSyncedStorage\n          ? Storage_mergeStorage(state.lastSyncedStorage, watchStorage, state.deviceId)\n          : mergedStorage;\n\n        const mergedHistoryLen = mergedStorage.history?.length ?? 0;\n\n        if (phoneHistoryLen > 0 && mergedHistoryLen < phoneHistoryLen) {\n          lg(\"ls-history-deletion-watch-merge\", {\n            phoneHistoryLen,\n            watchHistoryLen,\n            mergedHistoryLen,\n          });\n        }\n\n        updateState(\n          dispatch,\n          [\n            lb<IState>().p(\"storage\").record(mergedStorage),\n            lb<IState>().p(\"lastSyncedStorage\").record(mergedLastSynced),\n          ],\n          \"Merge watch storage\"\n        );\n        SendMessage_print(\"handleWatchStorageMerge: successfully merged watch storage\");\n\n        const beforeProgress = state.storage.progress?.[0];\n        const afterProgress = mergedStorage.progress?.[0];\n        const timerChanged =\n          beforeProgress?.timer !== afterProgress?.timer || beforeProgress?.timerSince !== afterProgress?.timerSince;\n        if (timerChanged) {\n          if (\n            afterProgress?.timer != null &&\n            afterProgress.timerSince != null &&\n            afterProgress.timerEntryIndex != null &&\n            afterProgress.timerMode != null &&\n            Subscriptions_hasSubscription(mergedStorage.subscription)\n          ) {\n            const remaining = afterProgress.timer - (Date.now() - afterProgress.timerSince) / 1000;\n            if (remaining > 0) {\n              Progress_scheduleTimerNotification(\n                afterProgress,\n                afterProgress.timerEntryIndex,\n                afterProgress.timerMode,\n                mergedStorage.settings,\n                remaining\n              );\n            } else {\n              NativeTimerBridge_stopTimer();\n            }\n          } else {\n            NativeTimerBridge_stopTimer();\n          }\n        }\n\n        if (afterProgress != null && beforeProgress !== afterProgress) {\n          const entryIndex = afterProgress.timerEntryIndex ?? 0;\n          const mode = afterProgress.timerMode ?? \"workout\";\n          const program = Program_getProgram(getState(), afterProgress.programId);\n          const evaluatedProgram = program ? Program_evaluate(program, mergedStorage.settings) : undefined;\n          const entry = afterProgress.entries[entryIndex];\n          const programExercise =\n            evaluatedProgram && entry\n              ? Program_getProgramExercise(afterProgress.day, evaluatedProgram, entry.programExerciseId)\n              : undefined;\n          LiveActivityManager_updateLiveActivityForNextEntry(\n            afterProgress,\n            entryIndex,\n            mode,\n            programExercise,\n            mergedStorage.settings,\n            mergedStorage.subscription\n          );\n        }\n\n        // If progress went from active to empty, the workout ended on the watch.\n        // Run the same JS-side cleanup as a phone-side finish/discard so the\n        // module-level reminder duration in nativeWorkoutBridge gets cleared.\n        // Without this, the AppState listener can schedule a phantom \"ongoing\n        // workout\" reminder the next time the phone backgrounds.\n        const progressIsNowEmpty = !mergedStorage.progress || mergedStorage.progress.length === 0;\n        if (hadProgress && progressIsNowEmpty) {\n          NativeWorkoutBridge_discardWorkout();\n        }\n        if (wasOnProgressScreen && hadProgress && progressIsNowEmpty) {\n          SendMessage_print(\"handleWatchStorageMerge: workout finished on watch, navigating to main screen\");\n          dispatch(Thunk_pushScreen(\"main\", undefined, { tab: \"home\" }));\n        }\n      } else {\n        SendMessage_print(\"handleWatchStorageMerge: no changes after merge\");\n      }\n    } catch (error) {\n      SendMessage_print(`handleWatchStorageMerge: failed to merge storage: ${error}`);\n    }\n  };\n}\n\nexport function Thunk_reloadStorageFromDisk(): IThunk {\n  return async (dispatch, getState, env) => {\n    try {\n      const currentAccount = (await IndexedDBUtils_get(\"current_account\")) as string | undefined;\n      if (!currentAccount) {\n        SendMessage_print(\"reloadStorageFromDisk: no current_account\");\n        return;\n      }\n\n      const parsed = await env.persistence.load(`liftosaur_${currentAccount}`);\n      if (parsed == null) {\n        SendMessage_print(\"reloadStorageFromDisk: no storage found\");\n        return;\n      }\n\n      const storage: IStorage | undefined = parsed.storage;\n      const lastSyncedStorage: IStorage | undefined = parsed.lastSyncedStorage;\n\n      if (!storage) {\n        SendMessage_print(\"reloadStorageFromDisk: invalid storage format\");\n        return;\n      }\n\n      const currentState = getState();\n      const currentHistoryLen = currentState.storage.history?.length ?? 0;\n      const diskHistoryLen = storage.history?.length ?? 0;\n\n      if (currentHistoryLen > 0 && diskHistoryLen === 0) {\n        lg(\"ls-history-deletion-reload-disk\", {\n          currentHistoryLen,\n          diskHistoryLen,\n        });\n      }\n\n      updateState(\n        dispatch,\n        [\n          lb<IState>().p(\"storage\").record(storage),\n          lb<IState>()\n            .p(\"lastSyncedStorage\")\n            .record(lastSyncedStorage ?? storage),\n        ],\n        \"Reload storage from disk\"\n      );\n    } catch (error) {\n      SendMessage_print(`reloadStorageFromDisk: failed: ${error}`);\n    }\n  };\n}\n\nexport function Thunk_fetchStorage(storageId?: string): IThunk {\n  return async (dispatch, getState, env) => {\n    if (getState().errors.corruptedstorage == null) {\n      const result = await load(dispatch, \"Loading from cloud\", () => {\n        const state = getState();\n        const url = typeof window !== \"undefined\" ? UrlUtils_build(window.location.href) : undefined;\n        const userId = url != null ? url.searchParams.get(\"userid\") : state.user?.id;\n        return env.service.getStorage(state.storage.tempUserId, userId || undefined, storageId, state.adminKey);\n      });\n      await handleLogin(dispatch, result, env.service.client, getState().user?.id || getState().storage.tempUserId);\n    }\n  };\n}\n\nexport function Thunk_pushToEditProgram(dayData?: Required<IDayData>, key?: string): IThunk {\n  return async (dispatch, getState) => {\n    const state = getState();\n    const currentProgram =\n      state.storage.currentProgramId != null ? Program_getProgram(state, state.storage.currentProgramId) : undefined;\n    if (Program_isEmpty(currentProgram)) {\n      dispatch(Thunk_pushScreen(\"programs\", undefined, { tab: \"program\" }));\n    } else if (currentProgram) {\n      Program_editAction(dispatch, currentProgram, dayData, key, { tab: \"program\" });\n    }\n  };\n}\n\nexport function Thunk_startProgramDay(programId?: string): IThunk {\n  return async (dispatch, getState) => {\n    const state = getState();\n    const progress = Progress_getCurrentProgress(state);\n    if (progress != null) {\n      dispatch(Thunk_pushScreen(\"progress\", { id: progress.id }, { tab: \"workout\" }));\n    } else if (state.storage.currentProgramId != null) {\n      const program = Program_getProgram(state, programId ?? state.storage.currentProgramId);\n      if (program != null) {\n        const newProgress = Program_nextHistoryRecord(program, state.storage.settings, state.storage.stats);\n        updateState(dispatch, [lb<IState>().p(\"storage\").p(\"progress\").record([newProgress])], \"Create new progress\");\n        dispatch(Thunk_log(\"ls-start-workout\"));\n        dispatch(Thunk_pushScreen(\"progress\", { id: newProgress.id }, { tab: \"workout\" }));\n      } else {\n        Dialog_alert(\"No currently selected program\");\n      }\n    }\n  };\n}\n\nexport function Thunk_pushToEditProgramExercise(\n  key: string,\n  dayData: Required<IDayData>,\n  workoutProgramId?: string\n): IThunk {\n  return async (dispatch, getState) => {\n    const state = getState();\n    const isFromWorkout = workoutProgramId != null;\n    const editProgramIds = Object.keys(state.editProgramStates);\n    const programId = isFromWorkout ? workoutProgramId : (editProgramIds[0] ?? state.storage.currentProgramId);\n    const editProgramState = programId ? state.editProgramStates[programId] : undefined;\n    const currentProgram = isFromWorkout\n      ? programId != null\n        ? Program_getProgram(state, programId)\n        : undefined\n      : editProgramState?.current.program || (programId != null ? Program_getProgram(state, programId) : undefined);\n    if (currentProgram && !Program_isEmpty(currentProgram) && programId) {\n      dispatch(Thunk_log(\"ls-program-edit-exercise-screen\"));\n      const { navigateToModal } = await getNavigationService();\n      // Prototype: exercise edits open the Liftoscript editor sheet instead of the\n      // full edit screen.\n      navigateToModal(\"exerciseLiftoEditorModal\", { programId, key, dayData, fromWorkout: isFromWorkout });\n    } else {\n      dispatch(Thunk_pushScreen(\"main\"));\n    }\n  };\n}\n\n// The workout screen's day-level edit, and the Program screen's eventually. Takes the absolute\n// day number the workout already carries rather than a dayData, so nothing here has to know how\n// weeks are laid out.\nexport function Thunk_pushToEditProgramDay(day: number, workoutProgramId?: string): IThunk {\n  return async (dispatch, getState) => {\n    const state = getState();\n    const isFromWorkout = workoutProgramId != null;\n    const editProgramIds = Object.keys(state.editProgramStates);\n    const programId = isFromWorkout ? workoutProgramId : (editProgramIds[0] ?? state.storage.currentProgramId);\n    const currentProgram = programId != null ? Program_getProgram(state, programId) : undefined;\n    if (currentProgram && !Program_isEmpty(currentProgram) && programId) {\n      dispatch(Thunk_log(\"ls-program-edit-day-sheet\"));\n      const { navigateToModal } = await getNavigationService();\n      navigateToModal(\"dayLiftoEditorModal\", { programId, day, fromWorkout: isFromWorkout });\n    } else {\n      dispatch(Thunk_pushScreen(\"main\"));\n    }\n  };\n}\n\nexport function Thunk_pushScreen<T extends IScreen>(\n  screen: T,\n  params?: IScreenParams<T>,\n  opts?: INavigateOpts\n): IThunk {\n  return async (dispatch, getState) => {\n    dispatch(Thunk_postevent(\"navigate-to-\" + screen));\n    if (\n      [\"musclesProgram\", \"musclesDay\", \"graphsList\"].indexOf(screen) !== -1 &&\n      !Subscriptions_hasSubscription(getState().storage.subscription)\n    ) {\n      opts = { stack: \"subscription\" };\n      screen = \"subscription\" as T;\n    }\n    if (screen === \"subscription\") {\n      opts = { ...opts, stack: \"subscription\" };\n    }\n    const screensWithoutCurrentProgram = [\n      \"first\",\n      \"onboarding\",\n      \"units\",\n      \"programs\",\n      \"programPreview\",\n      \"setupequipment\",\n      \"setupplates\",\n      \"hearaboutus\",\n      \"programselect\",\n    ];\n    if (getState().storage.currentProgramId == null && screensWithoutCurrentProgram.indexOf(screen) === -1) {\n      screen = \"programs\" as T;\n    }\n    const { navigateTo } = await getNavigationService();\n    navigateTo(screen, params as IAllScreenParamList[typeof screen], opts);\n    if (typeof window !== \"undefined\" && window.scroll) {\n      window.scroll(0, 0);\n    }\n  };\n}\n\nexport function Thunk_updateScreenParams<T extends IScreen>(params?: IScreenParams<T>): IThunk {\n  return async (_dispatch, _getState, env) => {\n    if (env.navigationRef?.isReady()) {\n      env.navigationRef.setParams(params as Record<string, unknown>);\n    }\n  };\n}\n\nexport function Thunk_maybeRequestReview(): IThunk {\n  return async (dispatch, getState) => {\n    try {\n      const history = getState().storage.history;\n      const state = getState();\n      const now = Date.now();\n      const reviewRequests = state.storage.reviewRequests;\n      const lastReviewRequest = reviewRequests[reviewRequests.length - 1];\n      if (\n        history.length > 10 &&\n        reviewRequests.length < 3 &&\n        (!lastReviewRequest || now - lastReviewRequest > 1000 * 60 * 60 * 24 * 32)\n      ) {\n        dispatch(Thunk_postevent(\"request-review\"));\n        SendMessage_toIos({ type: \"requestReview\" });\n        SendMessage_toAndroid({ type: \"requestReview\" });\n        InAppReview_request();\n      }\n    } catch (error) {\n      const e = error as Error;\n      Rollbar.error(e);\n    }\n  };\n}\n\nexport function Thunk_maybeRequestSignup(): IThunk {\n  return async (dispatch, getState) => {\n    try {\n      const history = getState().storage.history;\n      const state = getState();\n      const now = Date.now();\n      const signupRequests = state.storage.signupRequests;\n      const lastsignupRequest = signupRequests[signupRequests.length - 1];\n      if (\n        state.user?.id == null &&\n        history.length > 8 &&\n        signupRequests.length < 3 &&\n        (!lastsignupRequest || now - lastsignupRequest > 1000 * 60 * 60 * 24 * 14)\n      ) {\n        dispatch(Thunk_postevent(\"request-signup\"));\n        updateState(dispatch, [lb<IState>().p(\"showSignupRequest\").record(true)], \"Show signup request\");\n      }\n    } catch (error) {\n      const e = error as Error;\n      Rollbar.error(e);\n    }\n  };\n}\n\nexport function Thunk_maybeShowOnloadModal(): IThunk {\n  return async (dispatch, getState) => {\n    try {\n      const next = OnloadModal_getNext(getState());\n      if (next === \"whatsnew\") {\n        updateState(dispatch, [lb<IState>().p(\"showWhatsNew\").record(true)], \"Show what's new on load\");\n      } else if (next === \"hearaboutus\") {\n        dispatch(Thunk_maybeRequestHearAboutUs());\n      }\n    } catch (error) {\n      Rollbar.error(error as Error);\n    }\n  };\n}\n\nexport function Thunk_maybeRequestHearAboutUs(): IThunk {\n  return async (dispatch, getState) => {\n    try {\n      if (OnloadModal_shouldShowHearAboutUs(getState())) {\n        dispatch(Thunk_postevent(\"request-hear-about-us\"));\n        updateState(dispatch, [lb<IState>().p(\"showHearAboutUs\").record(true)], \"Show hear-about-us\");\n      }\n    } catch (error) {\n      Rollbar.error(error as Error);\n    }\n  };\n}\n\nexport const screensWithEditState: IScreen[] = [\"progress\", \"editProgram\", \"editProgramExercise\"];\n\nfunction cleanupScreenEditState(dispatch: IDispatch, state: IState, screen: IScreenData): void {\n  if (screen.name === \"progress\") {\n    const progressId = screen.params?.id ?? 0;\n    const progress = Progress_getProgressById(state, progressId);\n    if (progress && !Progress_isCurrent(progress)) {\n      updateState(\n        dispatch,\n        [\n          lb<IState>()\n            .pi(\"progress\")\n            .recordModify((progresses) => Progress_stop(progresses, progress.id)),\n        ],\n        \"Stop workout progress\"\n      );\n    }\n  } else if (screen.name === \"editProgram\") {\n    const programId = screen.params?.programId;\n    if (programId != null && state.editProgramStates[programId] != null) {\n      updateState(\n        dispatch,\n        [\n          lb<IState>()\n            .p(\"editProgramStates\")\n            .recordModify((states) => ObjectUtils_omit(states, [programId])),\n        ],\n        \"Stop edit program\"\n      );\n    }\n  } else if (screen.name === \"editProgramExercise\") {\n    const programId = screen.params?.programId;\n    const exerciseKey = screen.params?.key;\n    const exerciseStateKey = programId != null && exerciseKey != null ? `${programId}_${exerciseKey}` : undefined;\n    if (exerciseStateKey != null && state.editProgramExerciseStates[exerciseStateKey] != null) {\n      updateState(\n        dispatch,\n        [\n          lb<IState>()\n            .p(\"editProgramExerciseStates\")\n            .recordModify((states) => ObjectUtils_omit(states, [exerciseStateKey])),\n        ],\n        \"Clear edit exercise state\"\n      );\n    }\n  }\n}\n\nexport function Thunk_cleanupRemovedScreens(screens: IScreenData[]): IThunk {\n  return async (dispatch, getState) => {\n    for (const screen of screens) {\n      cleanupScreenEditState(dispatch, getState(), screen);\n    }\n  };\n}\n\nexport function Thunk_pullScreen(): IThunk {\n  return async () => {\n    const { goBack } = await getNavigationService();\n    goBack();\n    if (typeof window !== \"undefined\" && window.scroll) {\n      window.scroll(0, 0);\n    }\n  };\n}\n\nexport function Thunk_confirmScreenLeave(screen: IScreenData, action: NavigationAction): IThunk {\n  return async (dispatch, getState, env) => {\n    // Save flows (e.g. Thunk_finishProgramDay) dispatch their commit synchronously\n    // right after the navigation call that got prevented. Deferring a tick lets that\n    // commit land, so the re-check below sees clean state and proceeds silently.\n    await new Promise((resolve) => setTimeout(resolve, 0));\n    const confirmation = Screen_shouldConfirmNavigation(getState(), screen);\n    if (confirmation == null || (await Dialog_confirm(confirmation))) {\n      env.navigationRef?.dispatch(action);\n    }\n  };\n}\n\nexport function Thunk_editHistoryRecord(historyRecord: IHistoryRecord): IThunk {\n  return async (dispatch) => {\n    dispatch({ type: \"EditHistoryRecord\", historyRecord });\n    const { navigateTo } = await getNavigationService();\n    navigateTo(\"progress\", { id: historyRecord.id });\n  };\n}\n\nexport function Thunk_finishProgramDay(id: number): IThunk {\n  return async (dispatch, getState) => {\n    const state = getState();\n    const progress = Progress_getProgressById(state, id);\n    const isCurrent = progress ? Progress_isCurrent(progress) : false;\n    const { navigateTo, goBack } = await getNavigationService();\n    // Navigate before dispatch so the progress screen unmounts before\n    // FallbackScreen can detect null progress and redirect to home.\n    // The dispatch must stay synchronous after goBack: for a dirty past workout\n    // useConfirmScreenLeave intercepts the goBack, and Thunk_confirmScreenLeave's\n    // one-tick defer needs the save committed by then to proceed without a dialog.\n    // ScreenRemovalCleanup's \"state\" event also fires post-commit, so the save\n    // lands before the removed screen's edit state gets cleaned up.\n    if (isCurrent) {\n      navigateTo(\"finishDay\", progress ? { id: progress.startTime } : undefined, { tab: \"workout\" });\n    } else {\n      goBack();\n    }\n    dispatch({ type: \"FinishProgramDayAction\", id });\n  };\n}\n\nexport function Thunk_deleteProgress(id: number): IThunk {\n  return async (dispatch) => {\n    dispatch({ type: \"DeleteProgress\", id });\n    const { navigateTo } = await getNavigationService();\n    navigateTo(\"main\", undefined, { tab: \"home\" });\n  };\n}\n\nexport function Thunk_fetchPrograms(): IThunk {\n  return async (dispatch, getState, env) => {\n    const result = await load(dispatch, \"Loading programs\", async () => {\n      const index = await env.service.programsIndex();\n      const details = await Promise.all(index.map((entry) => env.service.programDetail(entry.id)));\n      const programs = index.map((entry, i) => {\n        const detail = details[i];\n        const program: IProgram = {\n          ...Program_create(entry.name, entry.id),\n          author: entry.author,\n          url: entry.url,\n          shortDescription: entry.shortDescription,\n          description: entry.description || \"\",\n          isMultiweek: entry.isMultiweek,\n          tags: entry.tags as IProgram[\"tags\"],\n          planner: detail.planner,\n        };\n        return program;\n      });\n      return { programs, index };\n    });\n    if (result) {\n      dispatch({\n        type: \"UpdateState\",\n        lensRecording: [\n          lb<IState>().p(\"programs\").record(result.programs),\n          lb<IState>().p(\"programsIndex\").record(result.index),\n        ],\n        desc: \"Set loaded Programs\",\n      });\n    }\n  };\n}\n\nexport function Thunk_fetchRevisions(programId: string, cb: () => void): IThunk {\n  return async (dispatch, getState, env) => {\n    const programRevisions = await load(dispatch, \"Loading revisions\", () =>\n      env.service.getProgramRevisions(programId)\n    );\n    if (programRevisions.success) {\n      updateState(\n        dispatch,\n        [\n          lb<IState>()\n            .p(\"revisions\")\n            .recordModify((revisions) => {\n              return { ...revisions, [programId]: programRevisions.data };\n            }),\n        ],\n        \"Set loaded Revisions\"\n      );\n    } else {\n      const error = programRevisions.error;\n      const state = getState();\n      const context = {\n        programId,\n        status: error.status ?? 0,\n        message: error.message,\n        body: error.body ?? \"\",\n        isLoggedIn: state.user?.id ? \"yes\" : \"no\",\n      };\n      lg(\"ls-program-revisions-fetch-error\", context, env.service, state.user?.id || state.storage.tempUserId);\n      Rollbar.error(\"Couldn't fetch program revisions\", { ...context, userId: state.user?.id });\n      Dialog_alert(\n        `Couldn't fetch program revisions${error.status != null ? ` (${error.status})` : `: ${error.message}`}`\n      );\n    }\n    cb();\n  };\n}\n\nexport function Thunk_exportStorage(): IThunk {\n  return async (dispatch, getState, env) => {\n    dispatch(Thunk_postevent(\"export-storage-to-json\"));\n    ImportExporter_exportStorage(getState().storage);\n  };\n}\n\nexport function Thunk_exportProgramToFile(program: IProgram): IThunk {\n  return async (dispatch, getState, env) => {\n    dispatch(Thunk_postevent(\"export-program-to-file\"));\n    const state = getState();\n    Program_exportProgramToFile(program, state.storage.settings, state.storage.version);\n  };\n}\n\nexport function Thunk_exportProgramToLink(program: IProgram): IThunk {\n  return async (dispatch, getState, env) => {\n    dispatch(Thunk_postevent(\"export-program-to-link\"));\n    const state = getState();\n    const link = await Program_exportProgramToLink(program, state.storage.settings, state.storage.version);\n    await ClipboardUtils_copy(link);\n    Dialog_alert(\"Link copied to clipboard:\\n\\n\" + link);\n  };\n}\n\nexport function Thunk_exportHistoryToCSV(): IThunk {\n  return async (dispatch, getState, env) => {\n    dispatch(Thunk_postevent(\"export-history-to-csv\"));\n    const state = getState();\n    const csv = CSV_toString(History_exportAsCSV(state.storage.history, state.storage.settings));\n    Exporter_toFile(`liftosaur_${DateUtils_formatYYYYMMDD(Date.now())}.csv`, csv);\n  };\n}\n\nexport function Thunk_exportProgramsToText(): IThunk {\n  return async (dispatch, getState, env) => {\n    dispatch(Thunk_postevent(\"export-programs-to-text\"));\n    let text = \"\";\n    for (const program of getState().storage.programs) {\n      if (!program.planner) {\n        continue;\n      }\n      text += `======= ${program.name} =======\\n\\n`;\n      text += PlannerProgram_generateFullText(program.planner.weeks);\n      text += `\\n\\n\\n`;\n    }\n    Exporter_toFile(`liftosaur_all_programs_${DateUtils_formatYYYYMMDD(Date.now())}.txt`, text);\n  };\n}\n\nexport function Thunk_importStorage(maybeStorage: string): IThunk {\n  return async (dispatch) => {\n    dispatch(Thunk_postevent(\"import-json-storage\"));\n    let parsedMaybeStorage: Record<string, unknown>;\n    try {\n      parsedMaybeStorage = JSON.parse(maybeStorage);\n    } catch (e) {\n      Dialog_alert(\"Couldn't parse the provided file\");\n      return;\n    }\n    const result = Storage_get(parsedMaybeStorage, false);\n    if (result.success) {\n      updateState(dispatch, [lb<IState>().p(\"storage\").record(result.data)], \"Importing Storage\");\n      Dialog_alert(\"Successfully imported\");\n    } else {\n      Dialog_alert(`Couldn't import the storage, errors: \\n${result.error.join(\"\\n\")}`);\n    }\n  };\n}\n\n// Parsing a large CSV blocks the JS thread, so show the navbar spinner while it runs. The yield lets\n// the spinner paint before the synchronous parse starts (otherwise it wouldn't render until parsing\n// finishes). This does NOT use `load()` - that retries up to 3x, which would re-parse a bad file.\nasync function importWithSpinner<T>(dispatch: IDispatch, cb: () => T): Promise<T> {\n  const name = UidFactory_generateUid(4);\n  updateState(\n    dispatch,\n    [lb<IState>().p(\"loading\").p(\"items\").p(name).record({ startTime: Date.now(), type: \"Importing\" })],\n    \"Start import parse\"\n  );\n  try {\n    await new Promise((resolve) => setTimeout(resolve, 16));\n    return cb();\n  } finally {\n    updateState(\n      dispatch,\n      [lb<IState>().p(\"loading\").p(\"items\").pi(name).p(\"endTime\").record(Date.now())],\n      \"End import parse\"\n    );\n  }\n}\n\nexport function Thunk_importCsvData(rawCsv: string): IThunk {\n  return async (dispatch, getState, env) => {\n    try {\n      dispatch(Thunk_postevent(\"import-csv-data\"));\n      const result = await importWithSpinner(dispatch, () =>\n        ImportFromLiftosaur_convertLiftosaurCsvToHistoryRecords(rawCsv, getState().storage.settings)\n      );\n      if (result.historyRecords.length === 0) {\n        Dialog_alert(\"No workouts found in the file.\");\n        return;\n      }\n      updateState(\n        dispatch,\n        [lb<IState>().p(\"importPreview\").record({ source: \"liftosaurCsv\", result })],\n        \"Open import preview\"\n      );\n      dispatch(Thunk_pushScreen(\"importPreview\"));\n    } catch (e) {\n      if (e instanceof ImportFileError) {\n        Dialog_alert(e.message);\n      } else {\n        console.error(e);\n        Dialog_alert(\"Couldn't parse the provided file\");\n      }\n    }\n  };\n}\n\nexport function Thunk_importHevyData(rawCsv: string): IThunk {\n  return async (dispatch, getState) => {\n    try {\n      dispatch(Thunk_postevent(\"import-hevy-data\"));\n      const result = await importWithSpinner(dispatch, () =>\n        ImportFromHevy_convertHevyCsvToHistoryRecords(rawCsv, getState().storage.settings)\n      );\n      if (result.historyRecords.length === 0) {\n        Dialog_alert(\"No workouts found in the file.\");\n        return;\n      }\n      updateState(\n        dispatch,\n        [lb<IState>().p(\"importPreview\").record({ source: \"hevy\", result })],\n        \"Open import preview\"\n      );\n      dispatch(Thunk_pushScreen(\"importPreview\"));\n    } catch (e) {\n      if (e instanceof ImportFileError) {\n        Dialog_alert(e.message);\n      } else {\n        console.error(e);\n        Rollbar.error(e as Error);\n        Dialog_alert(\"Failed to import history from Hevy.\");\n      }\n    }\n  };\n}\n\nexport function Thunk_undoImport(sessionId: string): IThunk {\n  return async (dispatch, getState) => {\n    const storage = getState().storage;\n    const session = (storage.importSessions ?? []).find((s) => s.id === sessionId);\n    if (session == null) {\n      return;\n    }\n    const editedCount = ImportSession_findEditedRecordIds(storage, session).length;\n    const editedWarning = editedCount > 0 ? ` ${editedCount} of them were edited after the import.` : \"\";\n    const sourceName = session.source === \"hevy\" ? \"Hevy\" : \"CSV\";\n    if (\n      !(await Dialog_confirm(\n        `Remove ${session.workoutCount} ${StringUtils_pluralize(\"workout\", session.workoutCount)} imported from ${sourceName} on ${DateUtils_format(session.timestamp)}?${editedWarning}`\n      ))\n    ) {\n      return;\n    }\n    const undone = ImportSession_undo(getState().storage, sessionId);\n    if (undone != null) {\n      updateState(dispatch, [lb<IState>().p(\"storage\").record(undone)], \"Undo import\");\n    }\n  };\n}\n\nexport function Thunk_applyImport(\n  historyRecords: IHistoryRecord[],\n  customExercises: Record<string, ICustomExercise>,\n  source: IImportSession[\"source\"]\n): IThunk {\n  return async (dispatch, getState) => {\n    const applied = ImportSession_apply(getState().storage, historyRecords, customExercises, source);\n    updateState(\n      dispatch,\n      [\n        lb<IState>().p(\"storage\").p(\"history\").record(applied.history),\n        lb<IState>().p(\"storage\").p(\"settings\").p(\"exercises\").record(applied.exercises),\n        lb<IState>().p(\"storage\").p(\"importSessions\").record(applied.importSessions),\n      ],\n      `Import history from ${source === \"hevy\" ? \"Hevy\" : \"CSV\"}`\n    );\n  };\n}\n\nexport function Thunk_importFromLink(link: string): IThunk {\n  return async (dispatch, getState, env) => {\n    dispatch(Thunk_postevent(\"import-from-link\"));\n    const data = await ImportFromLink_importFromLink(link, env.service.client);\n    if (data.success) {\n      if (data.data.source) {\n        Storage_setAffiliate(dispatch, data.data.source, \"program\");\n      }\n      dispatch(Thunk_importProgram(data.data));\n    } else {\n      Dialog_alert(data.error.join(\"\\n\"));\n    }\n  };\n}\n\nexport function Thunk_generateAndCopyLink(\n  editProgram: IProgram,\n  settings: ISettings,\n  cb: (link: string) => void\n): IThunk {\n  return async (dispatch, getState, env) => {\n    dispatch(Thunk_postevent(\"generate-and-copy-link\"));\n    const link = await Program_exportProgramToLink(editProgram, settings, getLatestMigrationVersion());\n    try {\n      const state = getState();\n      const service = new Service(env.service.client);\n      const url = await service.postShortUrl(\n        link,\n        \"p\",\n        state.storage.settings.affiliateEnabled && state.user?.id ? state.user.id : undefined\n      );\n      ClipboardUtils_copy(url);\n      cb(url);\n    } catch (error) {\n      const e = error as Error;\n      Rollbar.error(e);\n      ClipboardUtils_copy(link);\n      cb(link);\n    }\n  };\n}\n\nexport function Thunk_importProgram(importLinkData: IImportLinkData): IThunk {\n  return async (dispatch, getState, env) => {\n    dispatch(Thunk_postevent(\"import-program-from-link\"));\n    const { decoded: maybeProgram, source, userid } = importLinkData;\n    const state = getState();\n    const result = await ImportExporter_getExportedProgram(env.service.client, maybeProgram, state.storage.settings);\n    if (result.success) {\n      const { program, customExercises } = result.data;\n      const existingCustomExerciseNames = new Set(\n        CollectionUtils_compact(ObjectUtils_values(state.storage.settings.exercises).map((e) => e?.name))\n      );\n      const newCustomExercises = ObjectUtils_filter(\n        customExercises,\n        (_, v) => v != null && !existingCustomExerciseNames.has(v.name)\n      );\n      if (source) {\n        program.source = source;\n      }\n      if (userid) {\n        program.authorid = userid;\n      }\n      const newProgram: IProgram = { ...ObjectUtils_clone(program), clonedAt: Date.now() };\n      if (!(await Dialog_confirm(`Do you want to import program ${newProgram.name}?`))) {\n        return;\n      }\n      const hasExistingProgram = getState().storage.programs.some((p) => p.id === newProgram.id);\n      if (\n        hasExistingProgram &&\n        !(await Dialog_confirm(\"Program with the same id already exists, do you want to overwrite it?\"))\n      ) {\n        return;\n      }\n      if (newProgram.planner && PlannerProgram_hasNonSelectedWeightUnit(newProgram.planner, state.storage.settings)) {\n        const fromUnit = Weight_oppositeUnit(state.storage.settings.units);\n        const toUnit = state.storage.settings.units;\n        if (await Dialog_confirm(`The program has weights in ${fromUnit}, do you want to convert them to ${toUnit}?`)) {\n          newProgram.planner = PlannerProgram_switchToUnit(newProgram.planner, state.storage.settings);\n        }\n      }\n      updateState(\n        dispatch,\n        [\n          lb<IState>()\n            .p(\"storage\")\n            .p(\"settings\")\n            .p(\"exercises\")\n            .recordModify((e) => ({ ...e, ...newCustomExercises })),\n          lb<IState>()\n            .p(\"storage\")\n            .p(\"programs\")\n            .recordModify((programs) => {\n              const index = programs.findIndex((p) => p.id === newProgram.id);\n              if (index !== -1) {\n                return CollectionUtils_setAt(programs, index, newProgram);\n              } else {\n                return [...programs, newProgram];\n              }\n            }),\n          lb<IState>().p(\"storage\").p(\"currentProgramId\").record(newProgram.id),\n        ],\n        \"Importing Program\"\n      );\n      Dialog_alert(\"Successfully imported\");\n      const { navigateTo } = await getNavigationService();\n      navigateTo(\"main\", undefined, { tab: \"home\" });\n    } else {\n      Dialog_alert(result.error.join(\"\\n\"));\n    }\n  };\n}\n\nexport function Thunk_createAccount(): IThunk {\n  return async (dispatch, getState, env) => {\n    dispatch(Thunk_postevent(\"create-account\"));\n    dispatch(\n      Thunk_logOut(async () => {\n        const newState = await getInitialState(env.service.client, { deviceId: getState().deviceId });\n        dispatch({ type: \"ReplaceState\", state: newState });\n        dispatch(Thunk_fetchInitial());\n      })\n    );\n  };\n}\n\nexport function Thunk_deleteAccount(id: string, cb?: () => void): IThunk {\n  return async (dispatch, getState, env) => {\n    dispatch(Thunk_postevent(\"delete-local-account\"));\n    await env.persistence.delete(`liftosaur_${id}`);\n    if (cb) {\n      cb();\n    }\n  };\n}\n\nexport function Thunk_fetchAccounts(cb: (accounts: IAccount[]) => void): IThunk {\n  return async (dispatch, getState, env) => {\n    cb(await Account_getAll(env.persistence));\n  };\n}\n\nexport function Thunk_deleteAccountRemote(cb?: (result: boolean) => void): IThunk {\n  return async (dispatch, getState, env) => {\n    await load(dispatch, \"Delete cloud account\", () => {\n      return new Promise(async (resolve) => {\n        dispatch(Thunk_postevent(\"delete-remove-account\"));\n        const result = await env.service.deleteAccount();\n        dispatch(\n          Thunk_logOut(() => {\n            if (cb) {\n              cb(result);\n              resolve(result);\n            }\n          })\n        );\n      });\n    });\n  };\n}\n\nexport function Thunk_switchAccount(id: string): IThunk {\n  return async (dispatch, getState, env) => {\n    dispatch(\n      Thunk_logOut(async () => {\n        dispatch(Thunk_postevent(\"switch-account\"));\n        const localStorage = await env.persistence.load(`liftosaur_${id}`);\n        if (localStorage?.storage != null) {\n          const result = Storage_get(localStorage.storage);\n          if (result.success) {\n            const newState = await getInitialState(env.service.client, { localStorage, deviceId: getState().deviceId });\n            dispatch({ type: \"ReplaceState\", state: newState });\n            dispatch(Thunk_fetchInitial());\n          } else {\n            console.error(\"Failed to switch account, error:\", result.error);\n            Dialog_alert(`Error while trying to switch the account: ${result.error}`);\n          }\n        } else {\n          console.error(\"Error while trying to switch the account: missing account\", id);\n          Dialog_alert(`Error while trying to switch the account: missing account ${id}`);\n        }\n      })\n    );\n  };\n}\n\nexport function Thunk_adminCheckKey(adminKey: string, cb: (isValid: boolean) => void): IThunk {\n  return async (dispatch, getState, env) => {\n    const isValid = await load(dispatch, \"Validating admin key\", () => env.service.checkAdminKey(adminKey));\n    cb(isValid);\n  };\n}\n\nexport function Thunk_adminListDebugSnapshots(\n  userId: string,\n  adminKey: string,\n  cb: (snapshots: string[]) => void\n): IThunk {\n  return async (dispatch, getState, env) => {\n    const snapshots = await load(dispatch, \"Listing debug snapshots\", () =>\n      env.service.getDebugSnapshotList(userId, adminKey)\n    );\n    cb(snapshots);\n  };\n}\n\nexport function Thunk_adminLoginAsUser(\n  userId: string,\n  adminKey: string,\n  storageId?: string,\n  debugTimestamp?: string\n): IThunk {\n  return async (dispatch, getState, env) => {\n    const result = await load(dispatch, \"Loading user storage\", () =>\n      debugTimestamp != null\n        ? AdminDebug_fetchDebugSnapshotStorage(env.service, userId, adminKey, debugTimestamp)\n        : AdminDebug_fetchStorage(env.service, getState().storage.tempUserId, userId, adminKey, storageId)\n    );\n    if (!result.success) {\n      Dialog_alert(`Failed to login as user ${userId}: ${result.error}`);\n      return;\n    }\n    const debugStorage = result.data;\n    dispatch(Thunk_postevent(\"admin-login-as-user\"));\n    // Sign out the admin's own session so the debug sandbox is fully anonymous: the server\n    // never minted a target cookie, and clearing the admin's own cookie means no in-session\n    // request can be attributed to anyone. The admin's local account stays in IndexedDB.\n    await env.service.signout();\n    const localStorage: ILocalStorage = { storage: debugStorage };\n    await IndexedDBUtils_set(\"current_account\", debugStorage.tempUserId);\n    await env.persistence.saveFull(`liftosaur_${debugStorage.tempUserId}`, localStorage);\n    const newState = await getInitialState(env.service.client, { localStorage, deviceId: getState().deviceId });\n    dispatch({ type: \"ReplaceState\", state: newState });\n    dispatch(Thunk_fetchInitial());\n    const { navigateTo } = await getNavigationService();\n    navigateTo(\"main\", undefined, { tab: \"home\" });\n  };\n}\n\nexport function Thunk_adminEnableServerSync(adminKey: string): IThunk {\n  return async (dispatch, getState, env) => {\n    const tempUserId = getState().storage.tempUserId;\n    if (!AdminDebug_isDebugAccountId(tempUserId)) {\n      return;\n    }\n    const session = await load(dispatch, \"Creating debug session\", () =>\n      env.service.createDebugSession(tempUserId, adminKey)\n    );\n    if (session == null) {\n      Dialog_alert(\"Failed to create debug session (check the admin key)\");\n      return;\n    }\n    // Enablement is intentionally session-only and fails closed: the set-cookie authenticates this\n    // session via the cookie jar, but on restart getInitialState reloads any debug_ account\n    // force-nosync, so sync turns back off and must be re-enabled here. We deliberately do NOT write\n    // the debug session to the keychain - that slot is the real login auth (+ watch bridge), and a\n    // debug token must never outlive the session or leak to the watch.\n    updateState(\n      dispatch,\n      [\n        lb<IState>().p(\"nosync\").record(false),\n        lb<IState>().p(\"user\").record({ id: session.userId, email: session.email }),\n      ],\n      \"Debug: enable server sync\"\n    );\n    dispatch(Thunk_sync2({ force: true, log: true }));\n  };\n}\n\nexport function Thunk_debugTestLogin(\n  apiKey?: string,\n  cb?: (result: { userId: string; email: string; apiKeyBound: boolean } | { error: string }) => void\n): IThunk {\n  return async (dispatch, getState, env) => {\n    try {\n      const userId = `test_${UidFactory_generateUid(8)}`;\n      const email = `${userId}@test.liftosaur.com`;\n      const result = await env.service.googleSignIn(email, userId, { forcedUserEmail: email });\n      if (result.email == null) {\n        cb?.({ error: \"Sign in failed - forceuseremail only works against a local dev server\" });\n        return;\n      }\n      // Setup before handleLogin so a failure (e.g. non-local backend without the dev route)\n      // doesn't leave the app committed to a half-provisioned account. The signin above already\n      // replaced the session cookie though, so on failure also sign out rather than keep\n      // HTTP-layer auth pointing at the throwaway account.\n      let setup: { apiKeyBound: boolean; key: string };\n      try {\n        setup = await env.service.postSetupTestAccount(apiKey, result.session);\n      } catch (e) {\n        await env.service.signout().catch(() => undefined);\n        throw e;\n      }\n      await handleLogin(dispatch, result, env.service.client, getState().user?.id || getState().storage.tempUserId);\n      updateState(\n        dispatch,\n        [lb<IState>().p(\"storage\").p(\"subscription\").p(\"key\").record(setup.key)],\n        \"Set test account subscription key\"\n      );\n      dispatch(Thunk_sync2());\n      cb?.({ userId: result.user_id, email: result.email, apiKeyBound: setup.apiKeyBound });\n    } catch (e) {\n      cb?.({ error: e instanceof Error ? e.message : String(e) });\n    }\n  };\n}\n\nexport function Thunk_claimkey(): IThunk {\n  return async (dispatch, getState, env) => {\n    const claim = await env.service.postClaimKey(getState().storage.tempUserId);\n    if (claim) {\n      finishFreeAccess(dispatch, claim.key, claim.expires);\n    } else {\n      Dialog_alert(\"Failed to claim the free access\");\n      dispatch(Thunk_log(\"ls-claim-free-user-fail\"));\n    }\n  };\n}\n\nfunction finishFreeAccess(dispatch: IDispatch, key: string, expires: number): void {\n  updateState(dispatch, [lb<IState>().p(\"storage\").p(\"subscription\").p(\"key\").record(key)], \"Set subscription key\");\n  const date = DateUtils_format(expires);\n  Dialog_alert(`Successfully claimed the free access until ${date}`);\n  dispatch(Thunk_log(\"ls-claim-free-user-success\"));\n  dispatch(Thunk_pullScreen());\n}\n\nexport function Thunk_fetchInitial(): IThunk {\n  return async (dispatch, getState, env) => {\n    if (getState().storage.whatsNew == null) {\n      WhatsNew_updateStorage(dispatch);\n    }\n    dispatch(Thunk_fetchPrograms());\n    // A debug sandbox must not verify the target's subscription receipts or restore IAPs.\n    if (AdminDebug_isDebugAccountId(getState().storage.tempUserId)) {\n      return;\n    }\n    dispatch(Thunk_verifySubscriptionKey());\n    if (getState().storage.subscription.apple.length > 0) {\n      dispatch(Thunk_postevent(\"check-apple-subscription\"));\n      const receipt = getState().storage.subscription.apple[0]?.value;\n      const userId = getState().user?.id || getState().storage.tempUserId;\n      const isVerified = await Subscriptions_verifyAppleReceipt(userId, env.service, receipt);\n      if (!isVerified) {\n        dispatch(Thunk_postevent(\"apple-subscription-invalid-restore\"));\n        await Subscriptions_cleanupOutdatedAppleReceipts(\n          dispatch,\n          userId,\n          env.service,\n          getState().storage.subscription\n        );\n        if (SendMessage_isIos() || Platform.OS === \"ios\") {\n          dispatch(Thunk_restorePurchases());\n        }\n      } else {\n        dispatch(Thunk_postevent(\"apple-subscription-verified\"));\n        if (getState().storage.subscription.apple.length === 0) {\n          Subscriptions_setAppleReceipt(dispatch, receipt);\n        }\n      }\n    }\n    // Modern RN restore-on-load (Platform.OS android/ios) must wait until initConnection() succeeds, so it's\n    // dispatched from the IAP effect in App.native.tsx via Thunk_iapRestoreOnStartup, not here. The legacy WebView\n    // Android app has no env.iap and restores through the native bridge, which doesn't depend on initConnection.\n    if (SendMessage_isAndroid()) {\n      dispatch(Thunk_restorePurchases());\n    }\n  };\n}\n\n// Restore on startup for the native stores, dispatched only after iap.initConnection() succeeds (getAvailablePurchases\n// needs an open connection). Android restores unconditionally; iOS only self-heals when no receipt is stored: a\n// lifetime/sub owned on this Apple ID but bought under a different local account (or never persisted) leaves\n// storage.subscription empty - the only signal devices without StoreKit access (the Apple Watch) use to unlock\n// Premium, and the live \"lifetime\" screen state hides the manual Restore button, so there's no other recovery path.\n// StoreKit 2's currentEntitlements read is silent (unlike legacy SK1 restoreCompletedTransactions, which prompts for\n// the App Store password - the reason iOS wasn't restored on load before), so it's safe to do on every launch.\nexport function Thunk_iapRestoreOnStartup(): IThunk {\n  return async (dispatch, getState, env) => {\n    if (env.iap == null) {\n      return;\n    }\n    // A debug sandbox must not restore the admin's IAPs into the target-derived debug account (same guard as\n    // Thunk_fetchInitial) - restoring would also write server-side subscription/payment records under the debug id.\n    if (AdminDebug_isDebugAccountId(getState().storage.tempUserId)) {\n      return;\n    }\n    if (Platform.OS === \"android\") {\n      dispatch(Thunk_restorePurchases());\n    } else if (Platform.OS === \"ios\" && getState().storage.subscription.apple.length === 0) {\n      dispatch(Thunk_restorePurchases());\n    }\n  };\n}\n\nexport function Thunk_redeemCoupon(code: string, cb: (success: boolean) => void): IThunk {\n  return async (dispatch, getState, env) => {\n    dispatch(Thunk_postevent(\"redeem-coupon\"));\n    const platform = SendMessage_isIos() ? \"ios\" : SendMessage_isAndroid() ? \"android\" : undefined;\n    const result = await load(dispatch, \"Claiming coupon\", () => env.service.postClaimCoupon(code, platform));\n    if (result.success) {\n      const { key, expires, appleOffer, googleOffer, affiliate } = result.data;\n      if (appleOffer) {\n        console.log(\"Apple promotional offer data:\", appleOffer);\n        updateState(dispatch, [lb<IState>().p(\"appleOffer\").record(appleOffer)], \"Set apple promotional offer\");\n        lg(\"ls-coupon-applied\", { code, type: \"apple\" });\n        Dialog_alert(\"Coupon has been applied! Proceed to purchase now.\");\n      } else if (googleOffer) {\n        console.log(\"Google promotional offer data:\", googleOffer);\n        updateState(dispatch, [lb<IState>().p(\"googleOffer\").record(googleOffer)], \"Set google promotional offer\");\n        lg(\"ls-coupon-applied\", { code, type: \"google\" });\n        Dialog_alert(\"Coupon has been applied! Proceed to purchase now.\");\n      } else if (key && expires) {\n        finishFreeAccess(dispatch, key, expires);\n      }\n      if (affiliate) {\n        Storage_setAffiliate(dispatch, affiliate, \"coupon\");\n      }\n      cb(true);\n    } else {\n      switch (result.error) {\n        case \"not_authorized\": {\n          Dialog_alert(\"You need to sign in first to claim the coupon.\");\n          break;\n        }\n        case \"coupon_not_found\": {\n          Dialog_alert(\"Couldn't find the coupon with that code.\");\n          break;\n        }\n        case \"coupon_disabled\": {\n          Dialog_alert(\"Couldn't find the coupon with that code.\");\n          break;\n        }\n        case \"coupon_already_claimed\": {\n          Dialog_alert(\"This coupon is already claimed.\");\n          break;\n        }\n        case \"wrong_platform\": {\n          Dialog_alert(\"This coupon could only be activated on Android or iOS.\");\n          break;\n        }\n        default: {\n          Dialog_alert(\"Failed to claim the coupon.\");\n          break;\n        }\n      }\n      dispatch(Thunk_log(\"ls-claim-coupon-fail\"));\n      cb(false);\n    }\n  };\n}\n\nexport function Thunk_setAppleReceipt(receipt?: string, opts?: { keepSubscriptionScreenOpen?: boolean }): IThunk {\n  return async (dispatch, getState, env) => {\n    if (receipt) {\n      if (\n        await Subscriptions_verifyAppleReceipt(\n          getState().user?.id || getState().storage.tempUserId,\n          env.service,\n          receipt\n        )\n      ) {\n        dispatch(Thunk_postevent(\"complete-apple-subscription\"));\n        dispatch(Thunk_log(\"ls-set-apple-receipt\"));\n        Subscriptions_setAppleReceipt(dispatch, receipt);\n        // A plan switch re-delivers the existing receipt; closing the screen would hide the freshly-updated\n        // pending-switch UI, so keep it open in that case and let the refresh repaint the management state.\n        if (env.getCurrentScreenData?.()?.name === \"subscription\" && !opts?.keepSubscriptionScreenOpen) {\n          dispatch(Thunk_pullScreen());\n        }\n      } else {\n        dispatch(Thunk_postevent(\"apple-subscription-invalid\"));\n      }\n    }\n  };\n}\n\nexport function Thunk_pushExerciseStatsScreen(exerciseType: IExerciseType): IThunk {\n  return async (dispatch, getState, env) => {\n    updateState(dispatch, [lb<IState>().p(\"viewExerciseType\").record(exerciseType)], \"Set exercise type to view\");\n    dispatch(Thunk_pushScreen(\"exerciseStats\"));\n  };\n}\n\nexport function Thunk_setGooglePurchaseToken(\n  productId?: string,\n  token?: string,\n  opts?: { keepSubscriptionScreenOpen?: boolean }\n): IThunk {\n  return async (dispatch, getState, env) => {\n    if (productId && token) {\n      const purchaseToken = JSON.stringify({ productId, token });\n      const state = getState();\n      const userId = state.user?.id || state.storage.tempUserId;\n      if (await Subscriptions_verifyGooglePurchaseToken(env.service, userId, purchaseToken)) {\n        dispatch(Thunk_postevent(\"complete-google-subscription\"));\n        dispatch(Thunk_log(\"ls-set-google-purchase-token\"));\n        Subscriptions_setGooglePurchaseToken(dispatch, purchaseToken);\n        // A plan switch re-delivers the existing token; keep the screen open so the updated pending-switch\n        // UI stays visible instead of being closed out from under the user.\n        if (env.getCurrentScreenData?.()?.name === \"subscription\" && !opts?.keepSubscriptionScreenOpen) {\n          dispatch(Thunk_pullScreen());\n        }\n      } else {\n        dispatch(Thunk_postevent(\"google-subscription-invalid\", { productId, token }));\n      }\n    }\n  };\n}\n\nasync function load<T>(dispatch: IDispatch, type: string, cb: () => Promise<T>): Promise<T> {\n  return new Promise((resolve, reject) => {\n    const name = UidFactory_generateUid(4);\n    _load(dispatch, name, type, cb, 0, resolve, reject);\n  });\n}\n\nfunction _load<T>(\n  dispatch: IDispatch,\n  name: string,\n  type: string,\n  cb: () => Promise<T>,\n  attempt: number,\n  resolve: (arg: T) => void,\n  reject: (arg: unknown) => void\n): void {\n  updateState(\n    dispatch,\n    [\n      lb<IState>()\n        .p(\"loading\")\n        .p(\"items\")\n        .p(name)\n        .recordModify((i) => {\n          if (i == null) {\n            return { startTime: Date.now(), attempt, type };\n          } else {\n            return { ...i, attempt };\n          }\n        }),\n    ],\n    \"Start loading\"\n  );\n  cb()\n    .then((r) => {\n      updateState(\n        dispatch,\n        [\n          lb<IState>().p(\"loading\").p(\"items\").pi(name).p(\"endTime\").record(Date.now()),\n          lb<IState>().p(\"loading\").p(\"items\").pi(name).p(\"error\").record(undefined),\n        ],\n        \"End loading\"\n      );\n      resolve(r);\n    })\n    .catch((e) => {\n      if (e.name === \"AbortError\") {\n        updateState(\n          dispatch,\n          [\n            lb<IState>().p(\"loading\").p(\"items\").pi(name).p(\"endTime\").record(Date.now()),\n            lb<IState>().p(\"loading\").p(\"items\").pi(name).p(\"error\").record(undefined),\n          ],\n          \"Abort loading\"\n        );\n        reject(e);\n        return;\n      }\n      if (attempt >= 3 || (e instanceof NoRetryError && e.noretry)) {\n        updateState(\n          dispatch,\n          [\n            lb<IState>().p(\"loading\").p(\"items\").pi(name).p(\"error\").record(`${type} failed`),\n            lb<IState>().p(\"loading\").p(\"items\").pi(name).p(\"endTime\").record(Date.now()),\n          ],\n          `Failed loading`\n        );\n        if (type === \"Logging in\") {\n          Rollbar.error(\"Error while logging in\", {\n            error: e instanceof Error ? e.message : String(e),\n          });\n          Rollbar.error(e);\n        }\n        reject(e);\n      } else {\n        setTimeout(() => {\n          _load(dispatch, name, type, cb, attempt + 1, resolve, reject);\n        }, 1000);\n      }\n    });\n}\n\nasync function handleLogin(\n  dispatch: IDispatch,\n  result: IGetStorageResponse,\n  client: Window[\"fetch\"],\n  oldUserId?: string\n): Promise<void> {\n  try {\n    if (result.email != null) {\n      dispatch(Thunk_postevent(\"login\"));\n      Rollbar.configure(RollbarUtils_config({ person: { email: result.email, id: result.user_id } }));\n      let storage: IStorage;\n      const storageResult = Storage_get(result.storage, true);\n      const service = new Service(client);\n      if (storageResult.success) {\n        storage = storageResult.data;\n      } else {\n        storage = result.storage;\n        const userid = result.user_id || result.storage.tempUserId || `missing-${UidFactory_generateUid(8)}`;\n        await service.postDebug(userid, JSON.stringify(result.storage), { local: \"false\" });\n      }\n      storage.tempUserId = result.user_id;\n      storage.email = result.email;\n      if (result.is_new_user) {\n        Analytics_trackSignUp();\n        if (oldUserId) {\n          try {\n            await service.postDebug(oldUserId, JSON.stringify(window.state || {}), {\n              new_userid: result.user_id,\n              email: result.email,\n            });\n          } catch (e) {\n            console.error(\"Failed to upload debug data for old user\", e);\n          }\n        }\n      }\n      if (oldUserId === result.user_id) {\n        dispatch(Thunk_postevent(\"login-same-user\"));\n        updateState(dispatch, [lb<IState>().p(\"lastSyncedStorage\").record(storage)], \"Set last synced on login\");\n        dispatch({ type: \"Login\", email: result.email, userId: result.user_id });\n        if (storage.subscription.key !== result.key) {\n          updateState(\n            dispatch,\n            [lb<IState>().p(\"storage\").p(\"subscription\").p(\"key\").record(result.key)],\n            \"Set subscription key from login\"\n          );\n        }\n      } else {\n        dispatch(Thunk_postevent(\"login-different-user\"));\n        storage.subscription.key = result.key;\n        const newState = await getInitialState(client, { storage, deviceId: await DeviceId_get() });\n        newState.lastSyncedStorage = ObjectUtils_clone(newState.storage);\n        newState.user = { id: result.user_id, email: result.email };\n        dispatch({ type: \"ReplaceState\", state: newState });\n      }\n      dispatch(Thunk_fetchInitial());\n      SendMessage_toIos({ type: \"authChanged\", userId: result.user_id });\n      if (result.session) {\n        const auth: IAuthToken = {\n          token: result.session,\n          expiresAt: Math.floor(Date.now() / 1000) + 10 * 365 * 24 * 60 * 60,\n          userId: result.user_id,\n        };\n        try {\n          await KeychainStore_setAuthToken(auth);\n        } catch (e) {\n          lg(\"ls-keychain-set-auth-fail\", { error: e instanceof Error ? e.message : String(e) });\n        }\n        NativeWatchBridge_sendAuthToWatch(auth);\n      }\n    } else if (result.key) {\n      updateState(\n        dispatch,\n        [lb<IState>().p(\"storage\").p(\"subscription\").p(\"key\").record(result.key)],\n        \"Set subscription free user key\"\n      );\n    }\n  } catch (error) {\n    console.error(error);\n    throw error;\n  }\n}\n\ninterface IIapSubscribeArgs {\n  applePromo?: IApplePromotionalOffer;\n  googlePromo?: IGooglePromotionalOffer;\n}\n\nfunction buildSubscribeThunk(\n  loadingKey: keyof ISubscriptionLoading,\n  messageType: \"subscribeMontly\" | \"subscribeYearly\",\n  sku: string,\n  args?: IIapSubscribeArgs\n): IThunk {\n  return async (dispatch, getState, env) => {\n    IapHelpers_setLoading(dispatch, getState, { [loadingKey]: true } as ISubscriptionLoading);\n    if (env.iap) {\n      const owned = await env.iap.getAvailablePurchases();\n      if (owned.length > 0) {\n        IapHelpers_alertAlreadySubscribed();\n        IapHelpers_clearLoading(dispatch);\n        return;\n      }\n      try {\n        await env.iap.requestSubscription({\n          sku,\n          applePromo: IapHelpers_applePromoToAdapter(args?.applePromo),\n          googleOfferId: args?.googlePromo?.offerId,\n        });\n      } catch (e) {\n        IapHelpers_clearLoading(dispatch);\n        console.warn(\"IAP requestSubscription failed\", e);\n      }\n    } else {\n      SendMessage_toIos({ type: messageType, offer: JSON.stringify(args?.applePromo) });\n      SendMessage_toAndroid({ type: messageType, offer: JSON.stringify(args?.googlePromo) });\n    }\n  };\n}\n\nexport function Thunk_subscribeMonthly(args?: IIapSubscribeArgs): IThunk {\n  return buildSubscribeThunk(\"monthly\", \"subscribeMontly\", IapHelpers_getSkus().monthly, args);\n}\n\nexport function Thunk_subscribeYearly(args?: IIapSubscribeArgs): IThunk {\n  return buildSubscribeThunk(\"yearly\", \"subscribeYearly\", IapHelpers_getSkus().yearly, args);\n}\n\nexport function Thunk_buyLifetime(): IThunk {\n  return async (dispatch, getState, env) => {\n    IapHelpers_setLoading(dispatch, getState, { lifetime: true });\n    if (env.iap) {\n      const owned = await env.iap.getAvailablePurchases();\n      if (owned.length > 0) {\n        IapHelpers_alertAlreadySubscribed();\n        IapHelpers_clearLoading(dispatch);\n        return;\n      }\n      try {\n        await env.iap.requestInAppProduct({ sku: IapHelpers_getSkus().lifetime });\n      } catch (e) {\n        IapHelpers_clearLoading(dispatch);\n        console.warn(\"IAP requestInAppProduct failed\", e);\n      }\n    } else {\n      SendMessage_toIos({ type: \"subscribeLifetime\" });\n      SendMessage_toAndroid({ type: \"subscribeLifetime\" });\n    }\n  };\n}\n\nexport function Thunk_restorePurchases(args?: { interactive?: boolean }): IThunk {\n  return async (dispatch, _getState, env) => {\n    const interactive = args?.interactive ?? false;\n    if (env.iap) {\n      try {\n        const purchases = await env.iap.getAvailablePurchases();\n        if (purchases.length === 0) {\n          if (interactive) {\n            Dialog_alert(\"No active purchases to restore.\");\n          }\n          return;\n        }\n        if (Platform.OS === \"ios\") {\n          const receipt = await IapHelpers_readReceiptOrJwsIOS(env.iap, purchases[0]);\n          if (receipt) {\n            dispatch(Thunk_setAppleReceipt(receipt));\n          }\n        } else {\n          for (const purchase of purchases) {\n            if (purchase.purchaseToken && purchase.productId) {\n              dispatch(Thunk_setGooglePurchaseToken(purchase.productId, purchase.purchaseToken));\n            }\n          }\n        }\n      } catch (e) {\n        console.warn(\"IAP restorePurchases failed\", e);\n        if (interactive) {\n          Dialog_alert(\"Couldn't restore purchases. Please try again later.\");\n        }\n      }\n    } else {\n      SendMessage_toIos({ type: \"restoreSubscriptions\" });\n      SendMessage_toAndroid({ type: \"restoreSubscriptions\" });\n    }\n  };\n}\n\nexport function Thunk_iapHandlePurchase(purchase: IIapPurchase): IThunk {\n  return async (dispatch, _getState, env) => {\n    if (!env.iap) {\n      return;\n    }\n    try {\n      const keepScreen = { keepSubscriptionScreenOpen: !!purchase.renewsAsProductId };\n      if (Platform.OS === \"ios\") {\n        const receipt = await IapHelpers_readReceiptOrJwsIOS(env.iap, purchase);\n        if (receipt) {\n          dispatch(Thunk_setAppleReceipt(receipt, keepScreen));\n        } else {\n          console.warn(\"IAP: no receipt obtained for purchase, server will not be notified\");\n        }\n      } else {\n        if (purchase.purchaseToken && purchase.productId) {\n          dispatch(Thunk_setGooglePurchaseToken(purchase.productId, purchase.purchaseToken, keepScreen));\n        }\n      }\n      // A queued plan switch re-delivers the existing transaction (renewsAsProductId set); it's not a\n      // new purchase, so don't double-count it as one.\n      if (!purchase.renewsAsProductId) {\n        let price = purchase.price;\n        let currency = purchase.currency;\n        if (price == null) {\n          // Re-deliveries (background renewals, killed-app replays, restores) arrive before the\n          // paywall fetched prices, so resolve the product price now to avoid reporting af_revenue: 0.\n          // A transient store-lookup failure here must not skip the purchase event entirely - fall\n          // back to whatever the purchase already carried and still track.\n          try {\n            const resolved = await env.iap.getProductPrice(purchase.productId);\n            price = resolved.price ?? price;\n            currency = resolved.currency ?? currency;\n          } catch (e) {\n            console.warn(\"IAP getProductPrice failed\", e);\n          }\n        }\n        Analytics_trackPurchase({\n          productId: purchase.productId,\n          price: price ?? 0,\n          currency: currency || \"USD\",\n          transactionId: purchase.transactionId ?? purchase.id,\n          transactionDate: purchase.transactionDate,\n        });\n      }\n    } finally {\n      try {\n        await env.iap.finishTransaction(purchase);\n      } catch (e) {\n        console.warn(\"IAP finishTransaction failed\", e);\n      }\n      IapHelpers_clearLoading(dispatch);\n      // Refresh so a plan switch (or its cancellation) reflects in subscriptionStatus.pendingProductId\n      // right away, instead of only after the screen re-mounts.\n      dispatch(Thunk_iapRefreshActiveSubscriptions());\n    }\n  };\n}\n\nexport function Thunk_iapHandlePurchaseError(error: IIapPurchaseError): IThunk {\n  return async (dispatch) => {\n    console.warn(\"IAP purchase error\", error);\n    dispatch(\n      Thunk_postevent(\"iap-purchase-error\", {\n        code: error.code,\n        message: error.message,\n        ...(error.productId ? { productId: error.productId } : {}),\n      })\n    );\n    IapHelpers_clearLoading(dispatch);\n  };\n}\n\n// Android's Google Play billing sheet (especially for in-app products) doesn't reliably emit a\n// purchaseError event when the user dismisses it without buying, so the plan-card spinner would\n// otherwise hang until the safety timeout. A real purchase clears its own loading via\n// Thunk_iapHandlePurchase, so by the time the app has been back in the foreground for a moment any\n// still-set loading means the sheet was dismissed.\nexport function Thunk_iapClearStuckLoadingOnForeground(): IThunk {\n  return async (dispatch, getState) => {\n    if (Platform.OS !== \"android\") {\n      return;\n    }\n    if (getState().subscriptionLoading != null) {\n      IapHelpers_clearLoading(dispatch);\n    }\n  };\n}\n\nexport function Thunk_redeemCouponIOS(): IThunk {\n  return async (_dispatch, _getState, env) => {\n    if (!env.iap) {\n      return;\n    }\n    try {\n      await env.iap.presentCodeRedemptionSheetIOS();\n    } catch (e) {\n      console.warn(\"IAP presentCodeRedemptionSheetIOS failed\", e);\n    }\n  };\n}\n\nexport function Thunk_iapFetchProducts(): IThunk {\n  return async (dispatch, getState, env) => {\n    if (!env.iap) {\n      return;\n    }\n    try {\n      const skus = IapHelpers_getSkus();\n      const subs = await env.iap.fetchSubscriptions([skus.monthly, skus.yearly]);\n      const inApp = await env.iap.fetchInAppProducts([skus.lifetime]);\n      const newPrices: Record<string, string> = {};\n      const newOffers: Record<string, IOfferData[]> = {};\n      for (const sub of subs) {\n        newPrices[sub.id] = sub.displayPrice;\n        const mapped: IOfferData[] = sub.subscriptionOffers\n          .filter((o) => !!o.id)\n          .map((o) => ({ offerId: o.id, formattedPrice: o.displayPrice }));\n        if (mapped.length > 0) {\n          newOffers[sub.id] = mapped;\n        }\n      }\n      for (const product of inApp) {\n        newPrices[product.id] = product.displayPrice;\n      }\n      updateState(\n        dispatch,\n        [\n          lb<IState>()\n            .p(\"prices\")\n            .recordModify((v) => ({ ...(v ?? {}), ...newPrices })),\n          lb<IState>()\n            .p(\"offers\")\n            .recordModify((v) => ({ ...(v ?? {}), ...newOffers })),\n        ],\n        \"Update prices for products\"\n      );\n      // Persist localized prices to synced storage so the web paywall can show them. Guard on change\n      // so an unchanged fetch on every app open doesn't bump the storage version and trigger a sync.\n      const storedPrices = getState().storage.subscriptionPrices ?? {};\n      const changed = ObjectUtils_keys(newPrices).some((k) => newPrices[k] !== storedPrices[k]);\n      if (changed) {\n        updateState(\n          dispatch,\n          [\n            lb<IState>()\n              .p(\"storage\")\n              .p(\"subscriptionPrices\")\n              .recordModify((v) => ({ ...(v ?? {}), ...newPrices })),\n          ],\n          \"Save subscription prices to storage\"\n        );\n      }\n    } catch (e) {\n      console.warn(\"IAP fetchProducts failed\", e);\n    }\n  };\n}\n\n// How long the optimistic Android plan-switch hint survives before deferring to the server. Generous\n// enough to cover Google's deferred RTDN propagation; the hint also clears as soon as the server reports.\nconst SUBSCRIPTION_PENDING_HINT_MS = 1 * 60 * 1000;\n\nexport function Thunk_iapRefreshActiveSubscriptions(): IThunk {\n  return async (dispatch, getState, env) => {\n    if (!env.iap) {\n      return;\n    }\n    updateState(\n      dispatch,\n      [lb<IState>().p(\"subscriptionStatusLoading\").record(true)],\n      \"Start subscription status loading\"\n    );\n    try {\n      const [subs, owned] = await Promise.all([env.iap.getActiveSubscriptions(), env.iap.getAvailablePurchases()]);\n      const lifetimeSku = IapHelpers_getSkus().lifetime;\n      const ownedLifetime = owned.some((p) => p.productId === lifetimeSku);\n      let patchedSubs = subs;\n      let serverPending: string | undefined;\n      // Android exposes neither the subscription expiry nor a queued plan switch client-side, so fill\n      // both from the server's verified subscriptionsv2 record (iOS already has them from StoreKit).\n      // `pendingProduct` comes from Google's `deferredItemReplacement` and is authoritative: when the\n      // switch is cancelled in Play or has landed, the server drops it and the pending card clears.\n      if (Platform.OS === \"android\" && subs.some((s) => s.isActive)) {\n        try {\n          // Re-verify the live purchase token to get the server's freshly-derived status (incl. a queued\n          // `deferredItemReplacement` plan switch), so it surfaces immediately instead of waiting on Google's\n          // laggy SUBSCRIPTION_DEFERRED RTDN. Authorized by the purchase token, not a userId lookup.\n          const state = getState();\n          const userId = state.user?.id || state.storage.tempUserId;\n          const activeStoreSub = subs.find((s) => s.isActive && !!s.purchaseTokenAndroid);\n          if (activeStoreSub?.purchaseTokenAndroid) {\n            const purchaseToken = JSON.stringify({\n              productId: activeStoreSub.productId,\n              token: activeStoreSub.purchaseTokenAndroid,\n            });\n            const sub = await env.service.refreshGoogleSubscription(userId, purchaseToken);\n            if (sub) {\n              serverPending = sub.pendingProduct;\n              patchedSubs = subs.map((s) =>\n                s.isActive ? { ...s, expirationDate: s.expirationDate ?? sub.expires } : s\n              );\n            }\n          }\n        } catch (e) {\n          console.warn(\"IAP refreshGoogleSubscription failed\", e);\n        }\n      }\n      // The server's pendingProduct is authoritative once present; until Google's deferred RTDN lands,\n      // a fresh non-expired optimistic hint bridges the gap. Drop the hint when the server takes over,\n      // it expires, or the switch has landed (active product already equals the hint).\n      const hint = getState().subscriptionPendingHint;\n      const hintValid =\n        hint != null &&\n        Date.now() < hint.until &&\n        !patchedSubs.some((s) => s.isActive && s.productId === hint.productId);\n      const keepHint = hintValid && serverPending == null;\n      const effectivePending = serverPending ?? (hintValid ? hint?.productId : undefined);\n      if (effectivePending != null) {\n        patchedSubs = patchedSubs.map((s) => (s.isActive ? { ...s, pendingProductId: effectivePending } : s));\n      }\n      updateState(\n        dispatch,\n        [\n          lb<IState>().p(\"subscriptionStatus\").record(patchedSubs),\n          lb<IState>().p(\"ownedLifetime\").record(ownedLifetime),\n          ...(keepHint ? [] : [lb<IState>().p(\"subscriptionPendingHint\").record(undefined)]),\n        ],\n        \"Update active subscriptions\"\n      );\n    } catch (e) {\n      console.warn(\"IAP getActiveSubscriptions failed\", e);\n    } finally {\n      updateState(\n        dispatch,\n        [lb<IState>().p(\"subscriptionStatusLoading\").record(undefined)],\n        \"Stop subscription status loading\"\n      );\n    }\n  };\n}\n\nexport function Thunk_switchSubscription(target: \"monthly\" | \"yearly\"): IThunk {\n  return async (dispatch, getState, env) => {\n    const sku = target === \"monthly\" ? IapHelpers_getSkus().monthly : IapHelpers_getSkus().yearly;\n    IapHelpers_setLoading(dispatch, getState, { [target]: true } as ISubscriptionLoading);\n    if (!env.iap) {\n      IapHelpers_clearLoading(dispatch);\n      return;\n    }\n    try {\n      if (Platform.OS === \"ios\") {\n        // StoreKit applies the subscription group's upgrade/downgrade rules automatically,\n        // so a switch is just a normal purchase of the target sku. Deliberately skips the\n        // already-subscribed guard that the initial-purchase thunks use.\n        await env.iap.requestSubscription({ sku });\n      } else {\n        let active = getState().subscriptionStatus ?? [];\n        if (active.length === 0) {\n          active = await env.iap.getActiveSubscriptions();\n        }\n        const current = active.find((s) => s.isActive && !!s.purchaseTokenAndroid);\n        if (!current?.purchaseTokenAndroid) {\n          IapHelpers_clearLoading(dispatch);\n          Dialog_alert(\"Couldn't find your active subscription to switch. Please try again.\");\n          return;\n        }\n        // monthly→yearly defers to the next billing cycle (short wait, no wasted paid time);\n        // yearly→monthly prorates immediately (a year is too long to wait).\n        const isDeferred = target === \"yearly\";\n        await env.iap.requestSubscription({\n          sku,\n          androidOldPurchaseToken: current.purchaseTokenAndroid,\n          androidOldProductId: current.productId,\n          androidReplacementMode: isDeferred ? \"deferred\" : \"with-time-proration\",\n        });\n        // Android plan changes don't reliably emit a purchase event, so clear the spinner here. The\n        // pending \"Switching to…\" state is read authoritatively from the server (subscriptionsv2\n        // `deferredItemReplacement`) on refresh, but that lags behind Google's deferred RTDN — so set a\n        // short-lived, non-synced optimistic hint to show the card immediately. The refresh reconciles it\n        // against the server and drops it once the server is authoritative (or after it expires).\n        if (isDeferred) {\n          updateState(\n            dispatch,\n            [\n              lb<IState>()\n                .p(\"subscriptionPendingHint\")\n                .record({ productId: sku, until: Date.now() + SUBSCRIPTION_PENDING_HINT_MS }),\n            ],\n            \"Optimistic pending subscription switch\"\n          );\n        }\n        IapHelpers_clearLoading(dispatch);\n        dispatch(Thunk_iapRefreshActiveSubscriptions());\n      }\n    } catch (e) {\n      IapHelpers_clearLoading(dispatch);\n      console.warn(\"IAP switchSubscription failed\", e);\n    }\n  };\n}\n\nexport function Thunk_openManageSubscriptions(): IThunk {\n  return async (_dispatch, _getState, env) => {\n    if (!env.iap) {\n      Dialog_alert(\"Manage your subscription from your App Store / Play Store account settings.\");\n      return;\n    }\n    try {\n      await env.iap.openManageSubscriptions();\n    } catch (e) {\n      console.warn(\"IAP openManageSubscriptions failed\", e);\n    }\n  };\n}\n","// Auto-generated from ./CHANGELOG.md\n// Do not edit manually - run npm run build:markdown to update\n\nexport const content = `<!--\n  This file is the source of truth for the in-app \"What's new?\" modal.\n  It is bundled into the JS at build time by scripts/build-markdown.js.\n\n  Format: each entry is a YAML-frontmatter block delimited by ---.\n  Required keys: date (YYYY-MM-DD), title.\n  Body is markdown. Each paragraph in the body becomes a paragraph in the modal.\n  Use bullet lists (- ...) only when you want bullets to render as actual bullets.\n\n  Custom inline directives:\n    ::icon-discord::, ::icon-doc::, ::icon-swap::, ::icon-help::, ::icon-edit2::, ::icon-preview::\n    [label](internal:/path)        — internal app/website link\n    \\`\\`\\`liftoscript ... \\`\\`\\`          — Liftoscript code block with syntax highlighting\n-->\n\n---\ndate: 2026-08-17\ntitle: Some Liftoeditor improvements\n---\n\n1. If you tap ::icon-edit2:: icon on the workout screen, it now opens the liftoeditor in a bottomsheet with the current program day, that you can edit.\n\n2. You can reorder exercises in the editor by long-press and dragging them.\n\n3. On the \"Edit Program Exercise\" sheet, there's ::icon-preview:: icon that shows the preview of the exercise with all the reuses filled in.\n\n4. On the \"Edit Program Exercise\" it also will tell you if the progress is defined on some other week/day, and you jump there, or show it right for this week/day, editable.\n\n---\ndate: 2026-08-12\ntitle: Improvements in exercise swapping during workout\n---\n\nWhen you swap an exercise during a workout, it now remembers the last exercises you swapped, and offers them in a \"Recent\" section at the top of the exercise picker. That should make doing repeated swaps faster.\n\nAlso, it used to keep the same weight when you swap to an adhoc exercise. Which only makes sense if you used 1RM percentage weights. But for absolute weights it almost never makes sense.\n\nSo, now it'll try to adjust the weight. It'll try to find the latest weights you did for the same reps in history, and use that weight. If it couldn't - it'll try to find the closest and infer from it. If it couldn't - it'll infer the weights from 1RM.\n\nAnd for warmups - it'll check if you have specific warmup config in your current program for that exercise, and will use that if it's there. Otherwise - just fallback to the default warmups.\n\n---\ndate: 2026-08-11\ntitle: Swapping an exercise now adjusts the weights to match\n---\n\nWhen you swapped an exercise mid-workout, only the exercise changed - the weights stayed exactly as they were. That's fine if your program uses percentages of 1RM, but if it uses absolute weights, you'd swap Leg Press for a Lateral Raise and end up staring at a 500lb lateral raise.\n\nNow the weights come along with the swap. For each set, the app looks at your history for the exercise you're swapping **to**, finds the set closest in reps to what you're about to do, and converts that weight to your target reps and RPE. If the reps and RPE match, you just get the weight you actually lifted last time. Sets with different reps each get their own weight, so a 12/10/8 pyramid comes back as a pyramid.\n\nIf you've never done the new exercise before, it falls back to your 1RM for it, or the exercise's default starting weight if you haven't set one - which is what percentage-based sets have always done on a swap. Either way, correcting it once is enough: your correction becomes history, so the next swap picks it up.\n\nWarmups get rebuilt for the new exercise too - from the warmups your program defines for it if it has any, and from that exercise's defaults otherwise.\n\n---\ndate: 2026-08-10\ntitle: Text size now scales the whole app, and follows your device setting\n---\n\nWhen you had the Aa (for font-size) slider moved to the right, and also increased font-size in your device settings,\nit used to multiply the values, completely breaking the app layout (because the font size became huuuge).\n\nFixed that, now the font size slider is the only thing that controls the app's text size. It also uses the device's font size as the starting point, so if you have a larger system font, the app will start out larger too.\n\nAlso the icons, exercise thumbnails, etc also scale with the text now. Everything scales together!\n\n---\ndate: 2026-08-09\ntitle: Embrace Liftoscript, part 1: Redesign of the \"Edit Program Exercise\" screen\n---\n\nOne of the main sources of confusion and frustration in Liftosaur are the \"Program\" and \"Edit Program Exercise\" screens. They provide the UI to edit the program, but the problem is that the UI maps pretty poorly to Liftoscript.\nAnd Liftoscript is still source of truth. Also, when you edit UI - you have little idea what Liftoscript it'd result to. Users get weird errors they have no idea how to resolve - because errors come from Liftoscript syntax, not UI.\n\nHistorically, I tried to hide the complexity of Liftoscript, trying to lower the learning curve. But IMHO it doesn't work - I just need to be honest and upfront that knowing at least some Liftoscript basics is required to use Liftosaur effectively. So, I'm pivoting to the new approach - embracing Liftoscript!\n\nAs a first step - now \"Edit Program Exercise\" is not a screen anymore, it's a bottom sheet, where you can edit Liftoscript. For that, I created a new native code editor from ground up. Typing code generally is not convenient on a phone, so it solves that by having 'structured' editing mode, where you can tap values, elements, and use the action pills to do actions with them. So, kinda a mix of UI and code. You can swipe between elements, and you can double-tap on text to switch to freeform editing. Each element also shows a hint what it means, so hopefully it helps to learn Liftoscript basics easier.\n\nFor now, it's only \"Edit Program Exercise\" screen, but I will work on replacing all the editors in the app with this new native editor.\n\nI understand it's a quite controversial change, so please let me know your thoughts in Discord, r/liftosaur subreddit, or by email at **info@liftosaur.com**.\n\n---\ndate: 2026-07-19\ntitle: Added Sleep & Nutrition tracking\n---\n\nLiftosaur can now import your sleep duration, dietary calories, and protein from Apple Health or Google Health Connect. To turn it on, go to the Me screen, then scroll to \"Apple Health\" (or \"Google Health Connect\" on Android), and there enable \"Sync Sleep & Nutrition\".\n\nThere's a new \"Sleep & Nutrition\" screen you can enter from the Me tab, with a trend graph and history for each metric. The import is read-only and happens on app open, daily aggregated. You can also soft-delete (hide) it from the list, and unhide if necessary.\n\nThe data also syncs to your account like the rest of your measurements, so it's available through the [REST API](internal:/docs/api) and the [MCP server](internal:/docs/mcp) as a new \\`health\\` measurements category. So you can e.g. ask an AI assistant to correlate your sleep or protein intake with your training performance.\n\nYou need an iOS/Android native app update (from App Store / Google Play) to get this feature.\n\n---\ndate: 2026-07-17\ntitle: Tap a crossed-out weight to see why it was rounded\n---\n\nWhen a set's target shows a crossed-out weight next to another one - that's the app rounding the program's exact weight to what you can actually load with your equipment. It's been a common source of confusion: why is my working weight different from the target? Why is it suddenly 0?\n\nNow the rounded weight is underlined, and you can tap it to get the full explanation: how the target was calculated (e.g. as a percentage of your 1RM), how it was converted between kg and lb, and how it was matched to your equipment - the bar weight, the plates per side, or the closest fixed dumbbell.\n\nIf the equipment is marked as \"Is Assisting\" (like an assisted pull-up machine, where added weight makes the exercise easier), the explanation will call that out too - accidentally enabling it is the usual reason weights unexpectedly drop to 0.\n\nHopefully that'll help to understand why it crosses out the weights!\n\n---\ndate: 2026-07-13\ntitle: More accurate volume for two-dumbbell exercises\n---\n\nVolume and total weight now count both dumbbells for exercises you load with a pair - like dumbbell shoulder press, bench press, rows, lunges, and split squats. The weight you enter for these is per-dumbbell, so previously we only counted one and undercounted the volume by half. Now it's doubled to reflect the real load moved.\n\nThis changes how numbers look in your volume graphs - your dumbbell volume will double compared to before. So, it's somewhat a breaking change.\n\nIf a particular exercise doesn't fit (say you do a single-dumbbell variation), you can turn this off per-exercise: go to Exercise Stats, and toggle \"Two weights (count both)\".\n\n---\ndate: 2026-07-10\ntitle: Added exercise variations (progression ladders)\n---\n\nA single program exercise can now hold multiple movements, and you can switch between them - either automatically as you progress, or by hand. Great for calisthenics progressions, where you graduate from an easier movement to a harder one once you can do enough reps.\n\nList the movements separated by \\`|\\` in the exercise name. The current one is marked with \\`!\\` (the first is current by default):\n\n\\`\\`\\`liftoscript\nSplit Squat | ! Bulgarian Split Squat | Pistol Squat / 3x8 0lb\n\\`\\`\\`\n\nTo advance automatically, use the new \\`exerciseVariationIndex\\` variable in a progress script - it moves to the next movement when your condition is met:\n\n\\`\\`\\`liftoscript\nSquat | Pistol Squat | Front Squat / 3x8 0lb / progress: custom() {~\n  if (completedReps >= reps) {\n    exerciseVariationIndex += 1\n  }\n~}\n\\`\\`\\`\n\nYou can also add, remove, reorder, and switch variations right from the Edit Program Exercise screen - enable \"Exercise Variations\" from the 3-dot menu. The sets, reps, and progress logic are shared across all movements; only the movement itself changes.\n\nNote that if you had a custom exercise with \\`|\\` or \\`!\\` in the name, it will be replaced to \\`-\\` character. If you program used \\`!\\` or \\`|\\` in the exercise names - you may need to tweak it, there's a migration that tries to fix it automatically, but it may miss some cases.\n\n---\ndate: 2026-07-01\ntitle: Added time-based exercises and intervals/circuits support\n---\n\nYou can now time the set itself, not just the rest after it. Great for planks, timed cardio, or any \"hold for X seconds\" exercise. Use the \\`setTimer|restTimer\\` syntax:\n\n\\`\\`\\`liftoscript\nPlank / 3x1 0lb 60s|30s\n\\`\\`\\`\n\nThat's 3 sets of plank, holding each for 60s, then resting 30s. Add \\`+\\` to count up past the target instead of stopping automatically (like \\`30s+|60s\\`). Add \\`auto\\` to auto-advance to the next set when the rest ends - which is how you build circuits like EMOM or Tabata:\n\n\\`\\`\\`liftoscript\n// EMOM - 5 rounds, 5 reps, 1-minute window\nPower Clean / 5x5 135lb 60s|0s auto\n// Tabata - 8 rounds of 20s work / 10s rest\nSquat, Bodyweight / 8x1+ 0lb 20s|10s auto\n\\`\\`\\`\n\nIn the UI (in the app, in Live Activity / Live Update, and in Apple Watch as well), you'll get a set timer modal if the current set has time.\n\nRead more in the [docs](internal:/docs/liftoscript). You need an iOS/Android native app update (from App Store / Google Play) to get this feature.\n\n---\ndate: 2026-06-17\ntitle: Added Apple Watch complications\n---\n\nTo get them - update the app from App Store\n\n---\ndate: 2026-06-15\ntitle: Added API / MCP for body measurements\n---\n\nNow you can manage your body measurements through the API and MCP server - bodyweight, bodyfat, and body parts (neck, chest, waist, biceps, thighs, and the rest).\n\nRead your full measurement history, record new values (with a custom date if you're backfilling), edit a value, or delete one - all from an AI assistant or directly over the REST API.\n\n---\ndate: 2026-06-14\ntitle: Added API / MCP for the equipment and exercise data\n---\n\nNow you can manage your gyms and equipment through API and MCP, as well as managing the exercise data:\n\n* 1RM value\n* Muscle overrides\n* Equipment assigned to exercises\n* Default rounding\n* Whether the exercise is unilateral\n* Exercise persistent notes\n\n---\ndate: 2026-06-13\ntitle: Added subscription management to the Account screen\n---\n\nIt was somewhat confusing that you couldn't see your current subscription status within the app, so I added it\nto the Account screen. So now you see what's your subscription status there, and can manage it from there as well.\n\n---\ndate: 2026-06-08\ntitle: Improved import history flow\n---\n\nImport history although a pretty rarely used feature - is one of the most dangerous. With slightly wrong CSV file,\nyou can massively mess up your workout history, and cleaning it up or restoring the account may be hard and painful.\n\nNow that functionality is way less destructive. When you import Liftosaur CSV or Hevy CSV, it'll show you\na preview screen, where it will display:\n\n* The workout history preview - the way you'd see it on the Home screen\n* Warnings - like if some weights or reps look suspicious, if there are duplicated workouts, if dates look wrong, etc\n* Summary stats - like how many workouts, exercises, sets, etc would be imported\n* The list of custom exercises that would be created by the import\n\nAnd after your import it - there's still a way to \"undo\" the import - you can go to Me -> Recent Imports, and there you'll see the list of 5 last imports, with the option to undo each of them. Undoing the import would remove all workouts that were imported in that import, as well as custom exercises that were created in that import (unless they already used in other workouts or programs).\n\n---\ndate: 2026-05-31\ntitle: New native iOS and Android apps\n---\n\nBefore, the iOS and Android Liftosaur apps were webapps. Basically, a site, that is rendered inside a little browser window, wrapped as a native app. It worked fine, but didn't have that native feeling, screen navigations, gestures, native-looking modals, etc.\n\nFrom now on, the new versions of the apps on App Store and Google Play are native apps. They look the same, but have smoother animations, native navigation and modals. Update and check them out!\n\nThat was a massive ground-up rewrite of Liftosaur, so in case you find any bugs - please let me know in Discord or at **info@liftosaur.com**!\n\n---\ndate: 2026-05-02\ntitle: Huge update where nothing changed\n---\n\nIn preparation for migrating the app from a webapp (like it is right now) to a native app, I had to do a massive rewrite of the whole codebase. But the functionality stays the same. The only difference is graphs look slightly different (had to rewrite the graphs engine from the scratch).\n\nSo, in case you find any new bugs after this - please let me know in Discord or at **info@liftosaur.com**. Thanks!\n\n---\ndate: 2026-03-16\ntitle: Added \"tour\" modals\n---\n\nIf you're a new user (did less than 4 workouts), you'll see a \"tour\" modal on key screens in the app - **workout screen**, **program editor**, and **program exercise editor**. It walks you through the key features of each screen, so you don't miss out on anything important. You can also access those tours anytime by tapping the ::icon-help:: in the top right corner of those screens.\n\n---\ndate: 2026-03-08\ntitle: MCP Server and REST API\n---\n\nLiftosaur now has an [MCP server](internal:/docs/mcp) - connect AI assistants like Claude, ChatGPT, or Gemini to manage your programs and workout history through natural conversation. Ask the AI to create programs, tweak progressions, log workouts, or analyze your training - it knows Liftoscript and can do it all for you.\n\nThere's also a [REST API](internal:/docs/api) - if you want direct programmatic access. Generate an API key in Settings and make HTTP requests to create programs, log workouts, simulate progressions, pull stats, etc.\n\nBoth require a premium subscription.\n\n---\ndate: 2026-03-03\ntitle: Export workouts as text\n---\n\nYou can now copy your workout as a compact text format. After finishing a workout, tap the \"Text\" button on the finish screen, or open any past workout from history and use the share menu to copy as text.\n\nThe text format is human-readable and can be pasted into notes, messages, or social media.\n\n---\ndate: 2026-02-28\ntitle: Improved Double Progression (dp) to support rep ranges\n---\n\nDouble Progression now properly handles rep range exercises (like 3x8-12). It auto-detects whether your exercise uses ranges, and progressively narrows the range from below until you hit the top, then increases weight and resets.\n\nFor non-range exercises (like 3x8), it works as before — increasing reps from min to max, then bumping weight and resetting reps.\n\nIf you adjust weight during a workout (e.g. the programmed weight wasn't available), the next weight increase will now be based on the weight you actually used, not the originally programmed weight.\n\n---\ndate: 2026-02-22\ntitle: New /programs page on the liftosaur.com site\n---\n\nNot the app, but the site update. There's now the /programs page on the liftosaur.com site, where you can find all the programs available in the app, along with full description (pros/cons, program philosophy, how to run it, etc), preview, Liftoscript code, etc.\n\nIf you're currently figuring out the next program, it could be a great resource to check it out, compare different programs, and pick the one that suits you the best.\n\n---\ndate: 2026-02-08\ntitle: Exerciser Picker by default now hides exercises with hidden equipment\n---\n\nIf you hide some equipment in the \"Available Equipment\" screen, it used to not affect exercise picker, it still was showing e.g. cable, smith machine, etc exercises even though you disabled them in the \"Available Equipment\".\n\nSo from now on, those exercises are hidden. You still can make them show if you tap the checkmark in the filter section inside the exercise picker.\n\nAlso, sorting order (by Name, by Similar Muscles) persists between picker opens from now on.\n\n---\ndate: 2026-01-29\ntitle: ⌚ Add Apple Watch Support\n---\n\nIf you have Premium and iPhone, you can now use Liftosaur on your Apple Watch to track your workouts. You can complete sets, see rest timers, view upcoming exercises, etc. You cannot modify the workout though (like change exercises or add sets, or change targets), for that you'll need to grab your phone.\n\nMake sure to update the native iOS app to >= 6.31 to get the Watch app as well.\n\nThat was a huge and complex project, so definitely let me know if you notice any bugs or issues - in Discord, Reddit, or by [info@liftosaur.com](mailto:info@liftosaur.com)\n\n---\ndate: 2026-01-24\ntitle: Workout now syncs to Apple/Google health when you finish a workout\n---\n\nPreviously, the workout would sync to Apple or Google health when you tap \"Continue\" on the \"Congratulations\" screen. But some users never did that, exiting the app right after they finished a workout, so the workout never got synced to Apple/Google Health.\n\nSo, now the workout syncs to Apple/Google Health right when you finish a workout. You can toggle \"Ask for confirmation\" in the Health settings, if you want. Without it, it just will always submit the workout right away.\n\nYou can also submit past workouts to Apple/Google Health - if you open a past workout, and tap the share icon - there'll be an option to \"Sync to Apple/Google Health\".\n\n---\ndate: 2026-01-20\ntitle: The current ongoing workout now syncs to the server\n---\n\nPreviously, if you start a workout e.g. on a phone, and then open a webapp, you won't be able to see it there. The ongoing workout would only exist locally, and syncs to the server when you finish it.\n\nFrom now on, the ongoing workout also syncs to the server. So, you can start a workout on a phone, but continue in the webapp, and then switch back to phone.\n\n---\ndate: 2026-01-03\ntitle: Changes in progress - lp() and dp() behavior\n---\n\nIf you omit the weight in the program initially, like this:\n\n\\`\\`\\`liftoscript\nSquat / 3x8 / progress: lp(5lb)\n\\`\\`\\`\n\nthe **lp** and **dp** behave weird. They consider the program weight as 0lb, add 5lb to it, and the program weight becomes 5lb. But user may entered e.g. 100lb there for each set, and then they see 5lb as the weight next time, and got confused.\n\nTo address that, there're 2 breaking changes in lp/dp built-in progressions:\n\n- If the weight wasn't specified in the program, it'll set the completed weights to the program.\n- It will increment based on the completed weight, not the target weight in the program from now on.\n\n---\ndate: 2025-11-25\ntitle: Added Live Updates on Android\n---\n\nSimilarly to iOS, there's now Live Updates notification on the lock screen, with the timer, next exercise, set, reps, weights, plates, etc.\n\nYou can adjust the rest timer from there, or complete a set.\n\nThere's also rest timer in the little chip near the clock, which is shown if you're currently in another app.\n\nIt's a **Premium feature**, so you'd need to have Premium subscription to use it.\n\n---\ndate: 2025-11-23\ntitle: Added Live Activity / Dynamic Island on iOS\n---\n\nOn the lock screen, it'll show Live Activity, with the timer, next exercise, set, reps, weights, plates, etc.\n\nYou can adjust the rest timer from there, or complete a set.\n\nThere's also rest timer in the **dynamic island**, and if you long press it - it'll expand into the same info as in the live activity.\n\nIt's a **Premium feature**, so you'd need to have Premium subscription to use it.\n\n---\ndate: 2025-11-09\ntitle: Added unilateral exercise support\n---\n\nFor unilateral exercises (like one-arm dumbbell rows, bicep curls, bulgarian split squats, etc) you can now specify reps per side. It's enabled by default for built-in unilateral exercises, but you can override it on the Exercise Stats screen, via \"Is Unilateral\" checkbox.\n\nThe volume is calculated by summing up reps from both sides. The e1RM is calculated by taking the average from reps of both sides.\n\n---\ndate: 2025-11-03\ntitle: Added ability to customize muscle groups\n---\n\nIf you don't like the current split by muscle group, you can customize it now! Go to Me -> Muscle Groups, and you can hide built-in muscle groups, and create new ones.\n\nFor example, you may want to have Front/Side/Rear delts instead of just \"Shoulders\", or Upper/Lower Back instead of just \"Back\".\n\nYou can also customize it through the \"Planner Settings\" modal (where you set up set ranges for muscle groups), both inside of the app, and in the web editor.\n\n---\ndate: 2025-11-01\ntitle: Add supersets\n---\n\nNow you can add exercises to superset groups, and within that group it will switch between exercises each time you finish a workout set. E.g. if you have 3 exercises in a superset group, you'd do 1 set of the first exercise, it'll switch to the seocond exercise, you finish a set there, it'll switch to the third exercise, and then back to the first one again.\n\nYou can set those groups both in a program and in a workout. In a program, you can do it both in the text and UI. In the text, it looks like this:\n\n\\`\\`\\`liftoscript\nSquat / 3x8 / superset: A\nDeadlift / 3x8 / superset: A\nBent Over Row / 3x8 / superset: A\n\\`\\`\\`\n\nSo, you add **superset: GROUP_NAME** to each exercise you want to be in a superset group. GROUP_NAME could be any string, e.g. A, B, ChestDay1, etc.\n\nThere's a new timer setting for the rest timers within supersets - in Me -> Timers. It takes precedence over the default rest timer, but the per-set rest timers take precedence over both.\n\nThe supersets will be highlighted by a colored line on the bottom side of exercise thumbnails during workout, as well as within the exercise card.\n\n---\ndate: 2025-10-13\ntitle: Override target/synergist muscles of exercises with custom synergist multipliers\n---\n\nIf you disagree with the built-in target/synergist muscles of some exercise, you can now override them! Go to the Exercise Stats screen (e.g. from Me - Exercises), and tap on \"Override Muscles\" at the very top. You can choose the muscles and the multiplier there. If it's **1** - it's a target muscle, if less than 1 - it's a synergist muscle. This will be taken into account in the week insights, in the week volume stats on the Program screen, on the graphs, etc.\n\n---\ndate: 2025-10-01\ntitle: Added estimated 1 Rep Max column to the workout screen\n---\n\nIf you tap on the swap icon at the second column header (where the \"Target\" is) - the last variant would be the estimated 1 Rep Max for the set. Would be semi-transparent for non-completed set, and solid for completed set. It uses completed reps/weight/RPE for calculation, but if not available yet - uses target reps/weight/RPE.\n\n---\ndate: 2025-09-24\ntitle: 🏋️‍♂️ Improved custom exercises\n---\n\nAdded a bunch of changes to address most requests/feedback about the custom exercises:\n\n- People noted it's hard to add target/synergist muscles because you don't know on the top of your head what muscles exercise works, and from what muscle group each muscle is. So now:\n  1. Each muscle has a **little image**\n  2. They're **grouped by a muscle group**\n  3. There's **\"Autofill\"** button, that tries to prefill all the muscles/types based on the exercise name using AI.\n- Added ability to **add exercise notes** to the custom exercise form as well\n- You now can **upload an image** for a custom exercise from your phone (it requires being signed up though, to avoid abusing API for uploading images).\n- You also can pick an image from **\"Image library\"** for your custom exercise. The Image Library has images of built-in exercises, as well as previously uploaded ones.\n- You can **clone from existing** built-in (or existing custom) exercises, and it will prefill the image, the muscles and the types of the cloned exercise to your custom one.\n\nThere's one **breaking change** though - you won't be able to specify URLs of images anymore for custom exercises. It was a temporary hack (which survived for like 2 years!), and external images sometimes don't work if you generate workout or program images. It still will work for existing exercises, but you won't be able to change their image URLs anymore. You can only change the image there by uploading a new one, or picking from a library.\n\n---\ndate: 2025-09-14\ntitle: Exercise and equipment notes\n---\n\nYou can now add exercise and equipment notes.\n\nThose are not tied to a program, those are associated with exercises or equipment. You can use exercise notes to e.g. list form cues for a specific exercise, and the equipment notes to e.g. list tweaks of equipment, e.g. bench angle, cable setup, etc.\n\nSo, this way you have 3 note types in the app:\n\n- **Program exercise description** - the ones you add right in the program text via **// comment**. You can use them to add program-specific details for the exercise, e.g. progression explanation.\n- **Exercise notes** - those would be not tied to a program, but to an exercise. You can use them to add general notes for the exercise, e.g. form cues. You can edit them on the Exercise Stats screen.\n- **Equipment notes** - those would be tied to a specific equipment. You can use them to add details about the equipment, e.g. bench angle, cable setup, etc. You can edit them on the Available Equipment screen.\n\nAll of them would be displayed on the workout screen.\n\nAlso, from now on the previous workout exercise note only would be displayed for two months on the workout screen.\n\n---\ndate: 2025-09-05\ntitle: Preview tab on the Program screen now changes 1RM/Equipment/State vars\n---\n\nIt used to be ephemeral like Playground, but it's non obvious that it behaves that way. Also, seems like a lot of people go there after cloning a program, so this is the place where they'd expect to configure equipment and 1RMs.\n\nSo, now you can change 1RM and Equipment there, adjust state variables, and all those changes would be persisted.\n\nTapping on the name or exercise image also goes to the Exercise Stats screen.\n\n---\ndate: 2025-09-04\ntitle: Add new variables - 'amraps', 'logrpes' and 'askweights'\n---\n\nThey allow to mark a set AMRAP, ask for actual RPE after completing a set or ask for actual weight. Basically the same as adding **+** after appropriate value.\n\nYou can use them in exactly the same way you use **reps** or **weights**.\n\nTo disable, assign 0 to them, to enable - assign any non-zero value. E.g.:\n\n\\`\\`\\`liftoscript\nSquat / 3x8 100lb / progress: custom() {~\n  amraps = 1  // Mark all sets AMRAP\n  askweights[ns] = 1 // Ask for the last set actual weight\n~}\n\\`\\`\\`\n\n---\ndate: 2025-08-30\ntitle: Bar == Bodyweight and \"Assisted\" equipment\n---\n\nYou can now set the bar == your current bodyweight, and also switch the equipment to \"Assisted\" mode.\n\nIf the equipment is in the \"Assisted\" mode, the plates calculator will show the plates you need to add to reduce the weight, not to add to it.\n\nThis is mostly useful for e.g. assisted pull ups or dips. You can set the bar to your bodyweight, check \"Is Assisted\", and enter the plates you have for the leverage machine. It will round to the weight to bodyweight minus plates, so properly would show what you need to load on the machine.\n\n---\ndate: 2025-08-26\ntitle: 🌑 Dark Theme\n---\n\nNow there's Dark Theme! By default it uses your phone's current system theme (Dark or Light), but you can override it in Me - Appearance - Dark mode.\n\nMake sure to update iOS or Android native apps too, otherwise there'll be some parts that are not dark.\n\nLet me know if some colors look weird or contrast is bad - info@liftosaur.com, or our Discord or /r/liftosaur subreddit.\n\n---\ndate: 2025-08-13\ntitle: Hiding equipment, and changes in default exercise equipment\n---\n\nNow you can hide the built-in equipment you don't have / not going to use on the \"Available Equipment\" screen.\n\nAlso **POTENTIALLY BREAKING CHANGE** - if you never ever set the equipment for some exercises, it will be automatically set to matching equipment now. E.g. the exercise is **Bench Press, Barbell** - it will have **Barbell** equipment set by default - only if you never set it before (and it was **None**).\n\nDid that because there was a lot of confusion for new users - like why they set up Barbell equipment, but it's not applied to barbell exercises by default.\n\n---\ndate: 2025-08-10\ntitle: Redesign of the exercise picker\n---\n\nRedesigned the exercise picker. The biggest change is that now you can add/edit not only ad-hoc, but also **program exercises from the current program**, both used and unused. They'll be added with all their sets, and will run the progression logic on workout completion.\n\nSo, now you can define a bunch of unused exercises you may want to switch to (e.g. if some machines are often busy in your gym - you can define alternatives), and quickly add / replace them during the workout.\n\nThere's also ability to \"star\" exercises, so you can quickly find them in the future. There're redesigned filters, with images for each muscle and muscle group. **Substitute** tab is gone, and replaced by sorting by similar muscles (which is exactly the same) in the filters section.\n\nWhen you add exercises to a workout, you can pick multiple exercises now. And when you start an ad-hoc workout, the picker will be open automatically, so you can add exercises right away.\n\nHopefully the whole experience now makes more sense, and it's more logical - you can either add an ad-hoc exercise (and then you set up the sets yourself), or you add program exercise, and it behaves like you defined it in the program.\n\n---\ndate: 2025-07-06\ntitle: Improved syncing mechanism\n---\n\nRewrote the syncing mechanism to make it more reliable, and resolve conflicts better. Ideally you shouldn't notice any changes, and hopefully it'll prevent rare cases when the app doesn't data sync properly between the web editor, web app, and phone app.\n\nIt's a HUGE under the hood change, so if you notice any issues with syncing - please let me know at **info@liftosaur.com** or via Discord/Reddit.\n\n---\ndate: 2025-06-22\ntitle: Added bodyweight varaible\n---\n\nNow there's a **bodyweight** variable that would return the latest bodyweight moving average from **Measurements** screen. You can use it e.g. for pull ups or some other bodyweight exercises.\n\n\\`\\`\\`liftoscript\nPull Up / 3x8 0lb / update: custom() {~\n  if (setIndex == 0) {\n    weights = bodyweight\n  }\n~}\n\\`\\`\\`\n\n---\ndate: 2025-06-21\ntitle: Added increment() and decrement() functions\n---\n\nThey'll accept a weight, and return the previous/next possible weight based on your equipment. E.g. if you have 2x2.5lb smallest plates, **increment()** would increase the weight by 5lb. Or if you have 10lb and then 20lb fixed dumbbells, it would increment by 10lb. Use it like this:\n\n\\`\\`\\`liftoscript\nSquat / 3x8 100lb / progress: custom() {~\n  weights = increment(weights[1])\n~}\n\\`\\`\\`\n\nSame thing for **decrement()**. They work exactly the same way as the +/- buttons on the weight keyboard\n\n---\ndate: 2025-06-19\ntitle: AI prompt generator\n---\n\nTo help you write Liftoscript, there's now a page - [liftosaur.com/ai/prompt](internal:/ai/prompt) - that you could use to generate a prompt e.g. for ChatGPT, Claude, Gemini, etc that would help you to write your program in Liftoscript. It combines all the documentation and a bunch of examples into that huge prompt, and you can copy it, and paste into AI or your choice, and it'll generate a program for you.\n\nIt's not perfect, and sometimes makes mistakes - in that case just copy the errors back to AI chat, and it should be able to fix them.\n\nYou can also paste a URL to some web page, or even a google sheet into the input field on that page, and it will try to generate a program from there.\n\nCurrently works best with Claude, but should provide decent results with ChatGPT too.\n\nYou can access it through the website, tap on \"AI Helper\" at the nav bar.\n\n---\ndate: 2025-06-13\ntitle: Suppressing progress\n---\n\nNow you can suppress progress for an exercise, if you won't want it to run the progress logic and updates weights/reps/etc after finishing a workout.\n\nFor that, after finishing all sets of an exercise, tap \"Suppress\" link near the progress changes info.\n\nSuper optional, but sometimes you may want to do it.\n\n---\ndate: 2025-06-07\ntitle: Redesigned the \"Program\" screen\n---\n\nMade the structure more logical - now there're very prominent tabs for Editing and for Playground, and also 4 icons/tabs to switch between sorting, UI mode, per day code mode and full code mode.\n\nAlso, when you edit a program exercise - it navigates to a separate \"Edit Program Exercise\" screen. On that screen you can edit everything related to the exercise - sets, warmups, descriptions, as well as progress and update logic.\n\nSo from now on, everything you could do in the full text mode is pretty much possible to do via UI, including custom progressions and updates.\n\nAlso, you can go straight to that \"Edit Program Exercise\" screen from the workout screen - so if you need to quickly tweak warmups or e.g. adjust weight for the program exercise during workout - it's now easier to do so.\n\nIt's a **VERY large and complex change**, so if you notice any issues / bugs / etc - don't hesitate to email me at **info@liftosaur.com**, or contact me via Discord/Reddit.\n\n---\ndate: 2025-04-24\ntitle: Redesigned \"Choose Program\" screen\n---\n\nIt now has filters (by frequency, duration of a workout, experience, etc) to help you find a suitable program.\n\nBuiltin and your programs are now separated into separate tabs, and the cards for your programs look similar to built-in programs.\n\nAlso, you can skip selecting a program now, and go without a program. Could be useful if you want to build a program iteratively over time from ad-hoc workouts.\n\n---\ndate: 2025-04-21\ntitle: Sets are now optional in the program\n---\n\nIf you don't specify any sets for an exercise - it won't be an error anymore. So, a program like this is a valid program now:\n\n\\`\\`\\`liftoscript\nSquat\nBench Press\nBicep Curl\n\\`\\`\\`\n\nIt could be also useful for \"templates\", where you could define a template without sets, but e.g. with progress and warmups:\n\n\\`\\`\\`liftoscript\nmain / used: none / warmup: 1x5 45lb, 1x5 135lb / progress: lp(5lb)\nSquat / 3x8 100lb / ...main\n\\`\\`\\`\n\nOne **BREAKING CHANGE** is that if you don't specify the weight - it won't add 1RM percentage anymore based on reps/RPE. It'd be just empty weight field now, and will ask you about the weight on completion.\n\n---\ndate: 2025-04-17\ntitle: Add a way to create program days from Ad-hoc workouts\n---\n\nIf you did an ad-hoc workout, you may want to create a program day from it (either in a new or existing program) - so you could do it again, or incorporate it into your programs.\n\nIt also lowers the barrier for creating programs - you don't have to create programs upfront, you can build them over time iteratively. You do ad-hoc workouts, then create program days from it, slap some progression logic on top of it, and you're good to go.\n\nYou can do that either after finishing the workout - from the congratulations screen, or if you tap on the past workout on Home screen.\n\n---\ndate: 2025-04-13\ntitle: Add \"programNumberOfSets\" and \"completedNumberOfSets\" read-only variables\n---\n\nThose could be useful for number of sets-based progressions.\n\nCurrently, there is **numberOfSets** variable, but it only shows how many sets currently in the workout total. There's currently no way to read how many sets are in the program for that week/day, or how many sets is currently completed.\n\nThose 2 new variables return that. You can use them both in the progress and update scripts.\n\n---\ndate: 2025-04-09\ntitle: 📅 Tweaked the Calendar (Home screen)\n---\n\nBringing back the infinite scroll to the Home screen!\n\nA few months ago I added calendar to the Home screen, and removed the infinite scroll, showing only the currently selected week workouts instead.\n\nThe downside of that was that now the scrolling happens in 2 directions - horizontally (switching weeks) and vertically (scrolling the workouts) - not as convenient. Also, it used to be nice to see the currently ongoing workout on the top of the screen - that was removed with per-week workouts.\n\nSo, now the infinite scroll is back, and it will show the currently ongoing workout (if any) at the top of home screen. While you're scrolling the list, it will update the week insights and week calendar on top. And if you open the month calendar (by tapping on the week calendar) and then tap on the workout there - it will scroll to that workout.\n\n---\ndate: 2025-03-30\ntitle: New Workout Screen!\n---\n\nWorkout screen was completely redesigned.\n\nIt now looks closer to all the rest of the workout apps, where each row is a set, and reps and weights are input fields. It still will prefill the fields with the values from the program, but you can change them if necessary. You don't need to change the fields though, just tap the checkmark if they already look right.\n\nThe **Target** column contains the requirements for the set - from the program. We still use the same color coding to distinguish between success sets (green), failed sets (red) and in-range sets (yellow).\n\nYou can swipe the sets, to edit the target, or delete the set.\n\nInstead of one long list with all exercises, now there're tabs for each exercise at the top, and you can see the progress of each exercise there. Under each exercise there's graphs and history for that exercise.\n\n🚨 **There's a breaking change!!!** 🚨. Completed weights now are contained in the **completedWeights** array var (used to be in **weights**). **weights** now contains the program weights. There's automated migration that should run and theoretically you don't need to do anything, but check your scripts to make sure it looks good.\n\n---\ndate: 2025-03-09\ntitle: Big changes in Liftoscript reuse syntax\n---\n\nThe reuse syntax like **Squat / ...Bench Press** just became way more powerful.\n\n- It now reuses **progress** and **update** scripts as well, including built-in like **lp** or **dp**.\n- For \"template\" exercises (the **/ used: none /** ones) it's not required to have a custom or built-in exercise matching the name anymore. So, you can name your templates like **T1** or something like that, and don't create custom exercises with **T1** name.\n- If you reuse **progress: custom()**, you don't have to list all the state variables again in the reusing **progress: custom()** arguments. They will be inherited, you only need to list the ones that have different value from the original ones.\n- You can reuse exercises with multiple set variations too now.\n\nIt's a slightly breaking change because if you previously used **...Squat** it didn't reuse progress and update scripts, and now it does. So, if you want to reuse everything except progress/update - you'd need to overwrite them in the reusing exercise, like:\n\n\\`\\`\\`liftoscript\nSquat / ...Bench Press / progress: custom() {~ ~}\n\\`\\`\\`\n\n---\ndate: 2025-03-05\ntitle: Added negative weights support\n---\n\nYou can now use negative values for weights, e.g. **-5lb**.\n\nThat could be useful e.g. for the assisted Pull Ups with Leverage Machine, e.g. you can define it as:\n\n\\`\\`\\`liftoscript\nPull Up / 3x8 40lb / progress: lp(-5lb)\n\\`\\`\\`\n\nand it will decrease the weight you load on the machine by 5lb each time you finish a workout.\n\nOr you could do it like:\n\n\\`\\`\\`liftoscript\nPull Up / 3x8 -40lb / progress: lp(5lb)\n\\`\\`\\`\n\ni.e. use negative weight as a base, and incrementing it over time.\n\n---\ndate: 2025-03-04\ntitle: Massive update where nothing is changed\n---\n\nI rewrote the Liftoscript engine from the ground up, to simplify it and remove the dependency on the old-style programs. It's now way easier to add new features to it, but that also means I'm replacing a system that was battle-tested for years with a new one. So, there could be bugs.\n\nIn case you see any issues with the Liftoscript or your programs - please please please let me know at **info@liftosaur.com**! Please include the account name (from Me -> Account) in the email. Thanks!\n\n---\ndate: 2025-02-10\ntitle: 📅 Added calendar\n---\n\nNow instead of a flat list of workouts on the Workout History screen, there's a calendar now.\n\nAt the top there's week calendar now, that you can swipe left and right to change the week. If you tap it - it opens monthly calendar.\n\nYou can switch whether a week starts from Monday or Sunday in Settings.\n\n---\ndate: 2025-02-02\ntitle: Redesigning the navigation\n---\n\nChanging the navigation quite drastically, to accomodate upcoming calendar. The following things changed:\n\n- Footer buttons got changed - now there's \"Home\" for the history, \"Settings\" is renamed to \"Me\", and **\"Measurements\" got moved into \"Me\"**.\n- To start a new workout, tap the Dumbbell button in the footer. **No way to start a workout from the history screen anymore!**\n- If there's ongoing workout, tap the Dumbbell button again to get back to it.\n- Each button in the footer resets the navigation stack. So if you go from Home to Program, there'd be no \"Back\" button. This is to make the app navigation more similar to other apps (like Instagram, Facebook, etc)\n\n---\ndate: 2025-01-19\ntitle: Redesigned the sets, and added PRs to history/exercise stats\n---\n\nChanged what the sets (on the history screen, in the program, etc) look like - now they laid out vertically, and it's easier to scan weight/reps for the sets.\n\nAlso added PRs indication to the history and to the exercise stats screens - highlighting if some set was a PR.\n\n---\ndate: 2025-01-17\ntitle: Share workouts on Social Media\n---\n\nYou can share your finished workouts on Instagram (and once Tiktok approves Liftosaur app - on Tiktok)\n\nYou can do it from the congratulations screen, or if you tap on one of the past workouts. This replaces outdated \"Share\" functionality where you could share via a post on Facebook or Twitter.\n\nIt generates an image of a workout that you could share on some default background, or use your photo as a background. Or you can just generate a workout image via \"... More\" menu, and share it through native share sheet.\n\n---\ndate: 2024-12-23\ntitle: Added a way to generate program images\n---\n\nYou can share them in the social media, chats, etc.\n\nYou can configure what the image would look like - how many columns (days) would it have, what days to include, etc.\n\nAvailable in the Web Editor (the picture icon on the right), or in the kebab menu in the top right corner on the Program screen in the app.\n\n---\ndate: 2024-12-14\ntitle: Added day/week descriptions\n---\n\nNow you can add week and day descriptions, in Markdown format. Current week description will be shown on the history screen, and the day description will be shown on the ongoing workout screen.\n\nYou can do that through UI, or in the full program mode you just add comments above the day or week, similarly how you do that for the exercises. Like:\n\n\\`\\`\\`liftoscript\n// This is a description for week 1\n// * Do this\n// * Then do that\n# Week 1\n\n// This is a description for day 1\n// **Do those exercises:**\n## Day 1\n\nSquat / 5x5 / progress: lp(5lb)\n\\`\\`\\`\n\n---\ndate: 2024-12-08\ntitle: Added \\`print\\` function\n---\n\nUseful for debugging your scripts. Use it like:\n\n\\`\\`\\`liftoscript\nSquat / 3x3 / progress: custom() {~\n  print(1, completedReps[1])\n~}\n\\`\\`\\`\n\nIt accepts any number of arguments, and outputs them in the playground or during a workout. Unfortunately Liftoscript still doesn't support strings, but you can use numbers to distinguish prints, like:\n\n\\`\\`\\`liftoscript\nSquat / 3x3 / progress: custom() {~\n  var.a = 10%\n  print(1, completedReps[1])\n  print(2, 30lb)\n  print(3, var.a)\n~}\n\\`\\`\\`\n\nYou can use them both in **progress** and **update** scripts.\n\n---\ndate: 2024-12-07\ntitle: Added ongoing workout reminder push notification\n---\n\nIn case you forget to finish the workout, there will be an additional push notification that will remind you that you have an ongoing workout.\n\nIt's mostly useful if you keep forgetting to finish it, and then you open it in like 5 hours, and it syncs to Apple/Google Health, and your calories stats go crazy.\n\nYou can control the delay when it will notify you on the Settings - Timers screen. By default it's set to 15 minutes.\n\nYou need to update the app from App Store or Google Play to get the feature.\n\n---\ndate: 2024-11-30\ntitle: Added Week Insights\n---\n\nAfter each week workouts on the Workout History screen - there'll be a card with \"Week Insights\".\n\nIt's pretty much the same as \"Week Stats\" on the Program screen, but for the actual week - it'll show how many sets total, hypertrophy/strength split, sets per muscle group you did with the workouts that week.\n\nIt can help you analyze your performace in case you skipped workouts, or did Ad-Hoc workouts, or mixed different programs.\n\nIt's a Premium-only feature! 💵\n\n---\ndate: 2024-11-17\ntitle: Added some convenience shortcuts\n---\n\nNow you can change the next day or start empty (\"Ad-Hoc\") workout from the history screen.\n\nOn the workout screen there's \"Equipment\" and (if exercises uses it) - \"1RM\" links. They open modal to edit those, and in Equipment you can define availables plates right from the modal.\n\nAdded big bold \"Start\" and \"Continue\" buttons to the start workout card, because some new users were confused how to start a workout.\n\n---\ndate: 2024-11-09\ntitle: Improve experience with kg units\n---\n\nNow all the newly cloned programs will be automatically converted to the unit (kg or lb) you have selected in Settings. And if you import a program via link, and it has different units from the Settings one, it'll ask you if you want to convert into the Settings units.\n\nAlso, for the new users the app will ask to pick your units before choosing a program.\n\n---\ndate: 2024-11-03\ntitle: Change numberOfSets in progress scripts\n---\n\nNow you can change **numberOfSets** in the progress scripts. So, sets based progressions just got way easier to do. Before you had to use either **numsets** state variable + update script, or use multiple set variations. Now you can just do **numberOfSets = 4** or **numberOfSets += 1** in your progress scripts.\n\n**numberOfSets** also behaves a bit differently now both in **progress** and **update** scripts - if you add sets, it'll add them the same as the last set you had before. So, most of the time you don't need to pair it with the **sets()** function anymore. E.g. if you have **2x4, 3x8 / 100lb** and you do **numberOfSets += 1** - you'll end up with **2x4, 4x8 / 100lb**.\n\nIn **progress** scripts you can also specify what week/day/set variation specifically you want to change number of sets for, by doing **numberOfSets[week:day:setvariation] = 3**, for example: **numberOfSets[2:*:2] = 3**.\n\n---\ndate: 2024-10-11\ntitle: Apple Health and Google Health Connect integration\n---\n\nNow you can submit workouts and body measurements to **Apple Health** and **Google Health Connect**.\n\nFor the body measurements - it will submit your bodyweight, body fat, and (Apple Health only) - waist circumference.\n\nIt will also read the bodyweight/bodyfat and (Apple Health only) waist circumference from Apple Health or Google Health Connect, and add them to the app.\n\nYou can enable that in the Settings - Sync - Apple (or Google) Health.\n\nIt's available for **Android 14** and for **iOS 15** and higher.\n\n---\ndate: 2024-09-22\ntitle: Pausing a workout\n---\n\nYou can now pause the workout, by tapping the pause button in the workout screen header. It'll stop the total workout timer.\n\nYou can unpause it the same way, or just log any set - it'll unpause it too.\n\n---\ndate: 2024-09-14\ntitle: Custom unit (lb/kg) for equipment\n---\n\nNow equipment can override the default unit (lb or kg).\n\nThe weight of an exercise would be converted to that unit if that equipment is attached to the exercise. You would see the weight in that unit in the history too, but not on graphs - graphs still use default unit.\n\nThat could be useful if you have equipment with different units in your gym - like some machines are in lb, some plates are in kg - that way you can properly track all of them.\n\nTo make it even better - you may want to use a matching unit in the program exercise as well, to avoid any conversions at all. Like if you live in the US, and you have default unit as lbs, but the gym you usually go has \"Lat Pulldown\" cable machine in kgs - it makes sense to specify weights in kg for Lat Pulldown, and set it to the kg-based equipment.\n\n---\ndate: 2024-08-25\ntitle: 💸 Introducing localized pricing\n---\n\nIt was a bit unfair to ask the same price for users from US and e.g. Afganistan or Phillipines, since the purchasing power is so different in those countries.\n\nSo now the pricing is adjusted according to the country GDP per capita. E.g. it now costs **$5/$40/$80** for monthly/yearly/lifetime in **US**, and **$2.5/$20/$40** in **Turkey**, and **$1/$8/$16** in **Phillipines**.\n\n---\ndate: 2024-08-10\ntitle: Custom Exercise Images\n---\n\nNow you can optionally set exercise images to your custom exercises. You can provide URLs for a small image (used across the workout screen/program preview/etc) and a large image (used on the exercise stats screen).\n\n---\ndate: 2024-08-08\ntitle: Settings - Exercises screen\n---\n\nA lot of users were finding it weird you can only make 1RM or equipment adjustments for exercises during a workout. Which makes sense, so I added a separate \"Exercises\" screen that you can access from the \"Settings\" screen (\"Workout\" section).\n\nYou can see exercises grouped by the ones used in your current program, and the ones you did previously, but not included into the current program. You can filter them by name, type, muscle groups, etc.\n\nAnd for each exercise you can see their 1RM and currently attached equipment (or default rounding if no equipment attached).\n\n---\ndate: 2024-08-03\ntitle: Program Version History\n---\n\nThere's still a way to lose your program changes you did e.g. in the Web Editor, if immediately after saving on the Web you change a program in the app (e.g. by finishing a workout, or changing a program weight) - then the changes from the app will overwrite the changes from the Web.\n\nThat could be super frustrating. So as a way to fix that, I'm adding **Program Version History**.\n\nNow each time you save a program (both on the web or in the app), it creates a snapshot of the program. You can access the history of all the snapshots in the Web Editor (there's **Versions** link there, that opens a modal with all the snapshots), and restore any of the past snapshots. I'll store up to 100 recent snapshots.\n\nHopefully it'll reduce the chances of losing your program changes, and make the process less frustrating!\n\n---\ndate: 2024-07-31\ntitle: Updates related to syncing and program saving\n---\n\nI did a massive under the hood update how the app syncs changes with the server, to ensure it only sends the necessary (that actually changed) data. Hopefully it'll make the data sync faster and more reliable. There're also some user-facing changes related to that:\n\n- The Web Editor now has the \"Save\" button, and the programs don't autosave anymore. Autosaving sometimes worked pretty inconsistently, and it wasn't clear whether the changes got saved or not, so I'm trying to solve it with explicit saving.\n- The app now has \"Pull-to-refresh\" functionality - pull the screen to the bottom to force fetch the data from the server. Could be useful if you make the changes on the Web Editor, and want to sync them immediately to the app.\n- The app also will try to sync when it goes from background to foreground.\n\n---\ndate: 2024-06-12\ntitle: Changed how equipment works and added multi-gym support\n---\n\n⚠️ This is a breaking change! Please read! ⚠️\n\nExercises in Liftosaur used to consist of 2 parts - exercise name and equipment. For example: **Bench Press** and **Dumbbell**, or **Squat** and **Barbell**. And when you select an exercise, you have to pick both equipment and name.\n\nThere were several issues with that, but mainly two:\n\n- It was confusing for new users to **pick the equipment AND exercise name**. The fact that you need to pick equipment first, and then tap on the exercise name, even if you just want to change the equipment for the current exercise was very weird.\n- **Equipment was tied to the available plates**. So, if you wanted to change bar/plates (like to a different barbell) - but keep the old ones - you'd get a new exercise, with the new history, graphs, etc - which sometimes was undesirable.\n\nIn this change I'm trying to simplify it - now exercise only consists of the exercise name. So, there're exercises like **Bench Press, Dumbbell** and **Bench Press, Barbell** - but those are 2 different exercises and exercise names.\n\nEquipment is separated from the exercise now, and it defines only the plates/bar/fixed weights. You can attach equipment to your exercises, and that will be used for rounding and plates calculator - but that's optional!\n\nSo, for example, you can have **Squat, Barbell** exercise, and attach e.g. **Olymplic Barbell** equipment with 45lb bar and one set of plates. Or attach **Standard Barbell** with 35lb bar, and a different set of plates. Or don't attach any equipment - and just specify the default rounding - but in that case you won't have plates calculated.\n\nOr you may have **Bicep Curl, Dumbbell**, and attach **Fixed Dumbbells** or **Loaded Dumbbells** to it for rounding and plates calculation.\n\nIt also changes how custom exercises work. You cannot choose equipment for custom exercises anymore - only the name. So, if you had custom exercises with different equipment or even custom equipment - they will be migrated to \"equipment-less\" new exercises.\n\nAnother new feature is **Gyms**. You can create another **Gym** and specify different set of equipment for it. For each exercise you can specify equipment from each gym. And you can change the current gym in Settings, and that will define what equipment would be used for exercises.\n\nGyms are totally optional, and by default you only have one. But it could be useful if you **go to multiple gyms**, or if you're **travelling** - then you can just create a new gym but don't attach equipment from it to exercises. In that case they'd just use default rounding, which could be good enough for travelling - you probably don't want to enter all the equipment details for temporary gyms.\n\nI know I say that a lot, but - that's a very big new feature, so could be bugs - so don't hesitate to email me at **info@liftosaur.com** or contact via Discord/Reddit if there're issues!\n\n---\ndate: 2024-05-25\ntitle: Add UI for tweaking programs\n---\n\nLiftoscript is an amazing way to define weightlifting programs, but typing on the phone could be tedious. Sometimes you need to tweak your program on a phone, while you're in a gym - adjust warmups, reps, weights, replace/add some exercises. But it's not very convenient to do it in a plain text editor on a phone.\n\nSo now there's a UI mode for editing the programs, which is the default mode on a phone. You can do almost anything you could do in a plain text editor except defining progress, update blocks, descriptions and tags.\n\nYou can still switch to the plain text mode by tapping on ::icon-doc::, and adjust the program text. Also, for the Web Editor the plain text mode is still the main way of editing programs.\n\nThat's a very big feature, so could be bugs - don't hesitate to email me at **info@liftosaur.com** or contact via Discord if there're issues.\n\n---\ndate: 2024-05-06\ntitle: \"Quick-add sets\" is now per set variations\n---\n\nIt used to be per whole exercise, so even if you add **1+x5** in one of the days/weeks for your exercise, it'd apply to ALL days/weeks (or set variations) in a program for that exercise.\n\nIt's a bit inconvenient if you only want to have this feature enabled on certain days/weeks. So, now \"Quick-add sets\" is per set variation - if you have **1+x5** on day 1, and **1x5** on day 2, you won't have \"Quick-add sets\" enabled on day 2.\n\n⚠️ This is a breaking change though! ⚠️ If you use this feature, you likely would need to change your program to enable it across all weeks/days where you want to have it, not only the first week/day of the exercise!!!\n\n---\ndate: 2024-04-21\ntitle: Added rich reps / weight / rpe inputs\n---\n\nNow all the modals (like modal when you edit a set for the current exercise, modal when you edit weights, or the AMRAP modal) have \"rich\" inputs for reps, weight and RPE. They have buttons allowing to adjust the values, weight inputs have a Rep Max Calculator, and the buttons increment and decrement various values properly.\n\nFor example, it'd increment/decrement weights according to available equipment - getting next possible weight with your plates. And for reps - it increments by 1, and for RPE - by 0.5\n\n---\ndate: 2024-04-20\ntitle: Added tags\n---\n\nNow you can add **id: tags(123)** to your exercises, and then change state variables of that exercise from a progress block of another exercise. For example:\n\n\\`\\`\\`liftoscript\nSquat / 3x8 / id: tags(123) / progress: custom(rating: 0) {~ ~}\nBench Press / 3x8 / progress: custom() {~\n  state[123].rating = 2\n~}\n\\`\\`\\`\n\nThat **state[123].rating = 2** will set state variable rating in **Squat** to **2**.\n\nIt's kinda a niche feature, but could be useful for some programs.\n\n---\ndate: 2024-04-17\ntitle: update - custom() improvements\n---\n\nYou can use state variables defined in **progress: custom()** in your **update: custom()** scripts.\n\nAlso kinda breaking change, but also now **update: custom()** script would run right after starting a workout. Before completing any sets. With **setIndex == 0**.\n\nYou can use that to programmatically configure your workout\n\n---\ndate: 2024-04-15\ntitle: Added a bunch of new programs\n---\n\nNamely:\n\n- 5/3/1: Boring But Big\n- 5/3/1: Building The Monolith\n- nSuns LP\n- Madcow 5x5\n- PHUL\n- Phrak's Greyskull LP\n\n---\ndate: 2024-04-13\ntitle: Quickly change weights in a program exercise\n---\n\nFor the old programs, it was pretty convenient to just change **state.weight** state variable to adjust the weight across the sets of the exercise.\n\nIn the new plain-text syntax, it got more complicated - if the program is not 1RM-based, you'd need to edit the absolute weight in the program text. Which could be quite cumbersome, especially if you have multiple weeks to adjust.\n\nSo I added a way to quickly change the weights in the program exercise, in the \"Edit\" modal on the workout screen. It lists all the weights used by the exercise in a program, and you can quickly adjust them, either by typing, or by buttons, and there's also a Rep Max Calculator for convenience.\n\n---\ndate: 2024-04-03\ntitle: All built-in programs are migrated to the new syntax\n---\n\nAll the built-in programs now use the new **Liftoscript 2.0 (aka Workout Planner)** syntax.\n\nAlso, by default you now create the programs with the new syntax.\n\n---\ndate: 2024-04-01\ntitle: Loops\n---\n\nYou can now write **for** loops in the Liftoscripts.\n\nLooks like this:\n\n\\`\\`\\`liftoscript\nBench Press / 3x8 / progress: custom() {~\n  for (var.i in completedReps) {\n    weights[var.i] = weights[var.i] + 5lb\n  }\n~}\n\\`\\`\\`\n\nIn this case, **var.i** would contain an index of a set, starting from 1.\n\n---\ndate: 2024-03-28\ntitle: Improved reusing of sets, reps, weight, RPE, timer and warmups\n---\n\nNow the **...Squat** syntax would also reuse the warmups.\n\nAlso, you can override the reused weights, RPE and timer. For example, if you do:\n\n\\`\\`\\`liftoscript\nSquat / ...Bench Press / 200lb\n\\`\\`\\`\n\nThen it would reuse sets x reps, timer, RPE and warmups from Bench Press - everything except the weight.\n\n---\ndate: 2024-03-18\ntitle: Redesigned exercise picker and ability to replace exercises from the workout and new editor screens.\n---\n\nThere's a new exercise picker modal, that now combines equipment selection + exercise selection, and also the \"Substitute\" feature.\n\nThere's also a new \"Swap\" exercise feature on the workout screen (the ::icon-swap:: icon), where you can replace exercise for this workout only, or for the whole program.\n\nAnd now you can replace the exercise across whole program in the new Liftoscript 2.0 editor, both in Web and app. You were able to do it before as well with Find & Replace, but now there's simpler UI for it.\n\n---\ndate: 2024-02-05\ntitle: New update - custom() syntax for updates after completed sets (in the \"Experimental\" programs)\n---\n\nNow you can dynamically make updates in reps, sets or weights. Like for example, if you want to have AMRAP on the first set, and then based on the completed reps of that set adjust the reps of the rest sets, you can do it now. Do something like:\n\n\\`\\`\\`liftoscript\nSquat / 1x6+, 3x3 / update: custom() {~\n    if (setIndex == 1) {\n      reps = floor(completedReps[1] / 2)\n    }\n  ~}\n\\`\\`\\`\n\nand that will make the rest of the sets update after finishing the first set.\n\nThat **update** script is run after completing every set or updating completed reps on the set. It's available only in the new \"Experimental\" programs.\n\nIn that script, you may change **reps**, **minReps**, **weights**, and **RPE** variables. It doesn't change a program, and you cannot access state variables, but you can access any other built-in variable.\n\nYou can target all incompleted sets (by using **reps = 3**, **weights = 40lb**, etc), or you can target specific sets (e.g. **reps[3] = 10**)\n\n---\ndate: 2024-01-27\ntitle: ✨ New \"Experimental\" programs (aka \"in-app Workout Planner\") ✨\n---\n\nMassive update - now there's a way to build Liftosaur programs using completely different syntax - the one that you used in the [Workout Planner](https://www.liftosaur.com/planner)\n\nThe syntax got extended with the new features, making it pretty much as powerful as a regular way of building programs. You now can use Liftoscript within the new syntax to describe the progressions.\n\nBasically, the new programs is just one blob of text, and it changes over time based on your progressions. You can define set variations, quick add sets, descriptions, ways to switch between them, etc - everything is possible!\n\nTo create that \"experimental\" program, just go to **\"Choose Program\"** screen, tap on **\"Create\"**, and tap the **\"Create experimental program\"** button.\n\nRead more about new syntax and how to write programs that way [in the blogpost.](https://www.liftosaur.com/blog/posts/new-experimental-program-editor/)\n\nIMHO it should be much easier to build programs this way. Eventually I'd like to make it a default way of writing programs in Liftosaur. So, check it out, and don't hesitate to ask questions in our Discord channel, subreddit, or just shooting email to **info@liftosaur.com**!\n\n---\ndate: 2024-01-06\ntitle: Added ability to set 1 Rep Max for exercises\n---\n\n1RM would be reused across programs, and is tied to exercise themselves, not programs. You still can access it in the Liftoscript scripts via **rm1** variable, and you can set it in the Finish Day Script too.\n\nI.e. you can do things like \\`rm1 * 0.9\\` in your Weight Liftoscript expressions, or things like \\`rm1 += 5lb\\` in your Finish Day Scripts\n\nYou can edit 1RM on the Exercise Stats screen (when you tap on the exercise name on the workout screen). Also, it'll show up on the \"Edit\" modal (when you tap on the Edit icon on the working screen) in case it was used anywhere in the program exercise scripts.\n\nThat should be a good way to make 1RM of the exercises transferrable between programs.\n\n---\ndate: 2024-01-03\ntitle: Added \"Full Program\" mode to the Workout Planner\n---\n\nNow there's a new \"Full Program\" mode in the [Workout Planner](https://www.liftosaur.com/planner). You can activate it by clicking on the ::icon-doc:: icon near the \"Convert to Liftosaur program\" button. It represents the planner program as one big text blob. That could be pretty convenient for editing programs, especially multi-week ones. You can save those programs as text files, edit them in any text editor, share them as text blobs.\n\nIt adds 2 new syntax constructions you need to use in the \"Full Program\" mode - for weeks and for days. To create a week, you type a week name from a new line, starting with a hash sign. Like **# Week 1**. To create a week - same thing, just starting with 2 hash signs, like **## Day 1**.\n\nThere's also a bunch of features built-in into the Workout Planner editor:\n\n**Find & Replace** - you can even use regular expressions for powerful replacing\n\n**Multicursor typing** - you can set several cursors (by Cmd+click or Ctrl+click), and type in multiple places simultaneously.\n\n---\ndate: 2023-12-25\ntitle: Improved Program Preview in the app and Web Editor\n---\n\n🎄 Merry Christmas! I tweaked the program preview page in the app (both for built-in and your programs), and also added Program Preview for the Web Editor.\n\nYou can use it to get a quick glance at the whole program, try your state var values (e.g. your weights) there. You can also enable \"Playground\" mode, and try how finish day scripts work for various exercises when you finish all sets.\n\nIt should be especially useful for the Web Editor, before it was sometimes pretty tricky to understand if your program works properly, especially if it has a bunch of set variations. There was Exercise-level Playground, but wasn't Program-level Playground, and now there is!\n\n---\ndate: 2023-12-07\ntitle: You can now fully delete your account\n---\n\nAdded deleting account on the cloud. It's available on the Settings - Account screen.\n\nNow you can be in control of your data, and fully wipe out all your data from the Liftosaur servers if necessary!\n\n---\ndate: 2023-10-16\ntitle: Changed how Web Editor program links work\n---\n\nIt used to be that when you edit a program in a web editor, it'd update the link right in the URL bar, and the short links like /p/123abc would just redirect to the long links with whole program presented into a URL.\n\nBut apprently there's 10K limit in the URL length, so it was breaking for some large programs. So, I had to change how it works. Now, when you edit a program, you need to generate a link to \"Save\" it, each change won't automatically update the browser history. It'll also show a warning (that you can close) when you change a linked program that in order to \"Save\" the changes, you need to generate a new link that'll represent a changed program.\n\n---\ndate: 2023-09-27\ntitle: Offline mode\n---\n\nLiftosaur now can work offline. If there's no Internet, it of course won't be able to load all the built-in programs, and it won't be able to sync your data to the server. But it'll still work, all your history and programs would be there, and it will just sync the data next time when Internet is available if you're logged in.\n\n---\ndate: 2023-09-22\ntitle: Moving Average on the Measurement Graphs\n---\n\nNow, on the Measurement screen, for the graphs there you can add moving average graph. It's super useful especially for tracking bodyweight or body fat, due to high volatility of those measurements. This was added by awesome [@123marvin123](https://github.com/123marvin123), thank you so so much for contributing and adding this feature! It'll help a lot of people tracking their weight, and it's a great addition to Liftosaur. Thank you very very much!\n\n---\ndate: 2023-09-20\ntitle: Added Rep Max Calculator\n---\n\nIt's located near weight state variables. You can enter the known weight, reps and RPE, and target reps and RPE, and it'll calculate the weight for you.\n\nFor actual Rep Max, use RPE = 10.\n\n---\ndate: 2023-09-02\ntitle: Added rep ranges support\n---\n\nThere's a new \"Extra Feature\" you can enable for exercises now - **Rep Ranges**. If you turn it on, you can specify optional **Min Reps** Liftoscript scripts for each set in an exercise. On the sets, you'll see rep ranges instead of just a single rep number.\n\nIf the reps are less than max reps, but more or equal than min reps, the set will be yellow, both in the workout and in the history.\n\nIf the min reps are enabled and provided, you'll have them available in the **minReps** variable in the Finish Day scripts. If they're not enabled or provided, they'll use **reps** (i.e. max reps) variable values. For example, you don't have min reps for the first set, but max reps are **5**. Then, \\`minReps[1]\\` would be **5**.\n\n---\ndate: 2023-08-31\ntitle: Added multi-week support\n---\n\nNow for programs you can enable \"Multi-week\" mode. That adds **Weeks** - they are similar to **Days**. Like you add exercises to Days and can reuse exercises between days - now you can add Days to Weeks and reuse Days between Weeks.\n\nThat makes it easier to create multi-week programs with mesocycles, deload weeks, 1RM testing weeks, etc. You can create regular days, deload days or testing RM days, and then create e.g. 6 weeks with regular days, and then 1 week with deload days.\n\nWhen multi-week mode is enabled, the program follows the order of days in weeks. I.e. when you finish a workout, it'll go to the next day in the week, or when it was the last day in the week - goes to the first day of the next week.\n\nThere are also new variables available for all the Liftoscript scripts - **week** and **dayInWeek**. You can use them to define logic based on the week number, or week day number.\n\n---\ndate: 2023-08-22\ntitle: Added visual cues when rounding weights\n---\n\nIt's currently very confusing when and why we round the weights, especially for the new users of the app. It looks like a bug in the app because it's unexpected, but it just tries to round the weights to your available equipment.\n\nSo, from now on, it'll show strikethrough original weights, and the weight it was rounded to. Also, will show a little help message, explaining where you can adjust the equipment.\n\nThe rounding logic is slightly different now - we round the weights only at the very end, during the workouts. State variable changes are not rounded at all.\n\nIf this change somehow breaks the rounding logic in your program, please contact in Discord or by [info@liftosaur.com](mailto:info@liftosaur.com). It shouldn't break anything, but I could miss some edge cases...\n\n---\ndate: 2023-08-04\ntitle: Added RPE support\n---\n\nRPE (Rating of Perceived Exertion) now is well supported in Liftosaur. It's how hard was the exercise, on the scale of 0-10, where 10 is the hardest (you couldn't make any more reps)\n\nNow you can enable RPE support for your exercises (in Extra Features section), and each set will have 2 additional fields: **RPE** and **Log RPE**.\n\nFor RPE, you can provide Liftoscript expression, that would define required RPE for that set.\n\nIf you enable \"Log RPE\", it'll ask you for YOUR perceived RPE value when you finish the set.\n\nYou can access the required RPE values via \\`RPE\\` and logged RPE in \\`completedRPE\\` variables in the Finish Day Script.\n\nUsing that, you can define progressions based on RPE, e.g. comparing if your RPE was lower than required RPE - then increase the weight, or something like that.\n\nOn the history and workout screens, we show required RPE like **@8** (gray color) and logged RPE like **@9** (orange color), prefixed by **@** sign.\n\n---\ndate: 2023-07-29\ntitle: Add better volume support\n---\n\nNow there's a switch between volume and max weight for exercise graphs.\n\nThere are also muscle group volume per week graphs\n\nThere's also volume in lbs added to the exercise stats screen and also previous workouts.\n\n---\ndate: 2023-07-27\ntitle: Import history from Hevy app\n---\n\nThere's a new item in Settings - \"Import history from other apps\". It opens a modal, where you can choose Hevy app, and upload CSV file - and it'll import the history from the file into Liftosaur.\n\n---\ndate: 2023-07-24\ntitle: Make the rest timer adjustable\n---\n\nNow you can adjust a running rest timer. Tap on the timer on the right bottom corner, it'll expand, and you can add time, reduce time, or cancel the timer completely.\n\n---\ndate: 2023-07-16\ntitle: Improve exercise selection modal\n---\n\nNow listing target, synergetic muscle groups, and also the \"type\" of the exercise (pull, push, upper, lower, etc) for each exercise.\n\nAlso, now you can filter by the \"type\" and by muscle groups. E.g. you can list all the pull exercises with the chest muscle group, or something like that.\n\nYou can assign the \"type\" to your custom exercises now too.\n\n---\ndate: 2023-07-12\ntitle: Add Custom Equipment\n---\n\nNow you can create your own **custom equipment** (in Settings -> Available Equipment).\n\nIt could be useful if you have multiple Cable machines with different plate weights for different exercises, or you want to create some custom equipment like \"Safety Squat Bar\", where the bar weights more than regular olympic bar.\n\nCustom Equipment has all the same properties as built-in equipment (fixed/non-fixed, plates configuration), but also additionally you can specify the name, and \"Similar To\" field.\n\n\"Similar To\" for now only used for the exercise images, so if you create new equipment \"Cable 2\", with different plates, you can set \"Similar To\" to \"Cable\", and it'll use cable exercise image.\n\nYou now also can edit equipment in the Web Editor's Settings modal. You can create new equipment there (e.g. Safety Squat Bar), and assign to your exercises there. Custom equipment is properly exported into a link when you create a link of a program to share.\n\n---\ndate: 2023-07-04\ntitle: Switched \"reps x sets\" to \"sets x reps\" on the history screen\n---\n\nIt was kinda confusing since widely used format is \"sets x reps\".\n\nSo now it's \"sets x reps\"\n\n---\ndate: 2023-06-30\ntitle: Bodyfat tracking\n---\n\nLiftosaur is [open-source](https://github.com/astashov/liftosaur), so anyone can see the code, and potentially add features. Amazing [@codymurdoc](https://github.com/codymurdoc) went ahead and added bodyfat tracking support to Liftosaur! This is so cool, thank you so much! It's really impressing you were able to figure out how to do that in pretty large codebase, and add it in a clean and nice way, it's a pretty big feature. I'm really impressed!\n\n---\ndate: 2023-06-25\ntitle: Added Long Press to edit the quickly edit the sets in current workout\n---\n\nNow, you can do long press on a set square (for 1 second), and it'll open the edit set modal - the same one that you get if you press on the Edit icon, choose \"Only in this workout\", and then tap on a set.\n\nThat works both on the workout screen, and also in playgrounds on the edit program exercise screen. But on the playground, it won't change the program! It's just to simulate the logic if you change the sets only in current running workout.\n\nHopefully that'll make it easier to handle the cases when you want to deviate from a program for some reason only for that workout (change the weight for some set, or number of required reps, etc).\n\n---\ndate: 2023-06-24\ntitle: Made \"Quick Add Set\" supported in playgrounds\n---\n\nSo it's easier to test your program exercise logic when you have \"Quick Add Set\" feature enabled.\n\n---\ndate: 2023-06-13\ntitle: Added sound controls to iOS / Android apps\n---\n\nIf the sound of the rest timer is too loud or too quiet, you can now adjust it in the app. There's a Volume slider now, as well as a toggle to enable vibration when rest timer ends.\n\nYou need to get the new version of the app from App Store / Google Play to get this feature.\n\n---\ndate: 2023-06-11\ntitle: Added a way to add labels to sets\n---\n\nSimilar like there's a label \"Warmup\" for the warmup sets, you can add short labels to workout sets as well. You can use it to mark sets as **\"Drop set\"**, or **\"RPE 7\"**, or **\"TM 70%\"**, or something like that. The space is limited, so the label is 8 characters max.\n\nYou can specify labels on the \"Edit Program Exercise\" screen, where you specify reps, weights and AMRAP.\n\n---\ndate: 2023-06-09\ntitle: Added new functions - sum, min and max\n---\n\nYou can use them in your scripts to find e.g. min or max completed reps, or sum of all reps. They work on variables that are arrays, like \\`reps\\`, \\`weights\\` and \\`completedReps\\`.\n\nLike this: \\`state.allCompletedReps = sum(completedReps)\\`\n\n---\ndate: 2023-05-24\ntitle: Added \"Always On Display\" in Settings\n---\n\nIf you want to keep your screen always on during the workouts, you can enable it in Settings. You need to update the app for that though.\n\n---\ndate: 2023-05-11\ntitle: Improved program exercise timer expressions\n---\n\nNow you can use not only state variables there, but also the workout variables. Like, \\`completedReps\\`, \\`weights\\`, \\`numberOfSets\\`, etc.\n\nAlso, added new variable specifically for the timer expression - \\`setIndex\\`. It contains the index of the just completed set. You can use it to change timer based on the set number. Or to set a timer between exercises (\\`setIndex == numberOfSets ? 90 : 180\\`).\n\n---\ndate: 2023-05-01\ntitle: More Liftoscript features\n---\n\nAdded modulo operator **%** to Liftoscript. I.e. **7 % 2 == 1**, or **5 % 5 == 0**. It's useful for creating programs with repeating patterns.\n\nThen, added functions **floor**, **ceil** and **round**. You use them like **state.foo = floor(23.4)**. Use them if you need rounding.\n\nAlso, finally added increment assignment operators, like **+=**, **-=**, **\\\\*=** and **/=**. Use them like **state.foo += 5lb** - that'd increase \\`foo\\` variable by 5lb.\n\n---\ndate: 2023-04-30\ntitle: New Liftoscript Engine\n---\n\nThe internals of Liftoscript are fully rewrote to a new engine. It's more strict, and it will better find syntax errors, missing variables, and it's generally more correct. Also, it will be way easier to add features to it now.\n\n⚠️ But because it's stricter, it may consider your previously valid scripts invalid now. **If you get an error - please go to edit exercise screen, and fix the errors!**. Otherwise, it may not calculate your reps/weights properly when you finish exercise.\n\n---\ndate: 2023-04-22\ntitle: Quick add sets\n---\n\nAdd a way to enable \"quick add sets\" feature for a program exercise. When enabled, there'll be a button on the workout screen after last set, that allows to add another set. On press, there'll be a modal, where you specify required sets and weight. It also is marked as completed automatically.\n\nAlso, there are 2 new variables available in Finish Day Script - **numberOfSets**, and an alias for it - **ns**. They contain the number of sets for the exercise at the end of the workout.\n\nYou can use this to create set-based programs. E.g. increase weight if you did more than 5 sets with 4 reps each, or if you did at least 5 sets, and last set reps were more than 8. To access last set weight or reps, you can use **weights[numberOfSets]** or **reps[numberOfSets]**.\n\n---\ndate: 2023-04-19\ntitle: Program Exercise Descriptions\n---\n\nYou can now add exercise descriptions when you edit a program exercise. You can add any tips how to do it, reminders, or some notes, that'll persist between workouts. You can use markdown for formatting.\n\n---\ndate: 2023-04-09\ntitle: Edit state variables from workout screen\n---\n\nYou don't need to go to the edit exercise screen to edit the state variables anymore. Now you can do it right from a modal that pops up when you tap \"edit\" icon on the exercise card, on the workout screen.\n\n---\ndate: 2023-03-30\ntitle: User entered state variables\n---\n\nNow you can make a user to provide a value for the state variable when they finish an exercise. For that, there's a checkbox when you create a state variable.\n\nThat's useful e.g. for the programs that use RPE (Rating of Perceived Exertion) or RIR (Reps in Reserve) for progressions. Or if you want to manually choose the weight for the next workout. Or something like that.\n\n---\ndate: 2023-03-24\ntitle: Per Exercise Rest Timers\n---\n\nNow you can specify custom exercise rest timers. By default it still would use your workout timer from Settings, but you can override it for some exercises. So now you can have different rest timers for Deadlift and Bicep Curls!\n\nYou specify timer as a Liftoscript expression, similar to reps and weight, so you can define logic there too, and use state variables. Progressive overload in your rest timer? Why not! :)\n\n---\ndate: 2023-03-19\ntitle: Discord Server\n---\n\nWe've got a Discord server now! You can join it here: [::icon-discord:: Discord Server](https://discord.com/invite/AAh3cvdBRs)\n\nJoin and ask questions there, suggest features, leave feedback, or just chat with other Liftosaur users.\n\n---\ndate: 2023-03-01\ntitle: Notes\n---\n\nAdded ability to add notes to the overall workouts and specific exercises during workout. You can then see those notes on the History screen, on the exercise details screen, and also on the Graphs.\n\nYou can also filter the history on the exercise details screen by whether the history record had notes for that exercise.\n\n---\ndate: 2023-02-24\ntitle: Inspirations in the Advanced Edit Mode\n---\n\nNow in the \"Advanced\" mode of the exercise editor (both on a phone and in the web editor), there's a link at the top that opens a modal with various examples of the reps/weight and finish day scripts.\n\nYou could use it for \"inspiration\", to reuse some of the recipes, or come up with your own based on those. Or just to see what you can do with **Liftoscript**.\n\n---\ndate: 2023-02-22\ntitle: Web Editor for programs\n---\n\nThere's a new web editor for programs, so you could edit the programs from a laptop - [liftosaur.com/program](internal:/program). You can create a program there, then copy the link, and paste it into the app (on the program selection screen). You can also generate a link for any of your programs (on the program edit screen), and open in the web editor, edit there, copy link again, and paste it into the app to import the changes.\n\nThose links are immutable - any change in the program would change the link. You can share those links if you want to share your program with somebody else, and they'll be able to import the program into their app.\n\n---\ndate: 2023-02-09\ntitle: Choose Programs screen redesign\n---\n\nNow it shows all the exercise images a built-in program contains, as well as the required equipment and approximate time to finish a workout from the program. Hopefully it'll help with choosing the right program.\n\n---\ndate: 2023-02-07\ntitle: Footer navigation\n---\n\nWe've got complains that the footer navigation is confusing. And indeed, the left part was different from screen to screen, and it sometimes was hard to understand where are you.\n\nSo, now the footer nav is always the same across all screens. The screen-based buttons got moved to either 3-dot menu in the navbar, or to regular buttons right on the screen.\n\nAlso, had to move the rest timer from the footer, now it's a floating timer, that is visible on all screens. If you tap on it, you will go to the currently ongoing workout.\n\n---\ndate: 2023-01-21\ntitle: Exercise Stats\n---\n\nAdded Exercise Stats - a new screen that shows various statistics for an exercise. It shows the graph, the personal records, the history of the exercise. You can switch between different exercises right on that screen.\n\nThe entrypoint to that screen is from the workout screen - when you tap on the exercise name, exercise image, or when you open the bottom sheet - there's an option \"Exercise Stats\"\n\n---\ndate: 2023-01-15\ntitle: Program Preview\n---\n\nAdded Program Preview, that shows the high-level overview of a program. It lists all the days and exercises, all the sets variations (sets/reps/weight), you could see the formulas/scripts for each exercise, and muscles for each day and the whole program. You can use it for 2 cases:\n\n- When you pick a built-in program, there's a \"Preview\" button in the modal with the program info. So you could see now what you sign up for.\n- When you build your own program, there's \"Preview\" footer button. If will give you high-level overview of the program, and could help to make sure everything works right there.\n\n---\ndate: 2023-01-11\ntitle: Graph Improvements\n---\n\n- Using 2 fingers, you can pinch-zoom graphs now.\n- Also using 2 fingers you can move the zoomed area.\n- By double-tapping a graph, you can reset the zoom and return to its original size.\n- Added vertical lines on the graphs when program was changed.\n- Added a link in the legend to the selected workout on the graph.\n- Removed the horizontal line on the cursor, since it was pretty useless.\n\n---\ndate: 2022-12-28\ntitle: Add Reuse Logic feature\n---\n\nIf you have multiple exercises in a program that share the same logic for sets, reps and weight, and also logic for updating those, you now can \"reuse logic\" from other exercises. This way you can avoid repeating the same logic over and over again, and you'll have a single source of truth for that logic (in the exercise you reuse).\n\nIt should be useful for most programs, since usually they have multiple exercises following the same progression/deload pattern.\n\nEach exercise still has its own state variables values, but it must have the same variable names and types.\n\n---\ndate: 2022-12-26\ntitle: New Account Management.\n---\n\nNow you can have multiple local accounts, and manage them and switch between them. Also, the whole Account screen was updated.\n\n---\ndate: 2022-12-25\ntitle: Redesign.\n---\n\nBig redesign of the whole app! Hopefully it's more visually pleasant, and makes more sense than the previous one.\n\n---\ndate: 2022-08-08\ntitle: Big changes in the equipment settings.\n---\n\nYou can now specify plates separately for each equipment type - barbell, dumbbell, cable, etc.\n\nEach equipment type now supports \"fixed\" weights, without plates, e.g. if you use fixed weight dumbbells.\n\n---\ndate: 2022-06-04\ntitle: Add 1 Rep Max line to the exercises graphs.\n---\n\nIt better shows the progress trend, since it combines weight and reps into one value. We use [Epley formula](https://en.wikipedia.org/wiki/One-repetition_maximum) to calculate it. It's enabled by default, but you can disable it in settings on Graphs screen.\n\n---\ndate: 2022-02-19\ntitle: Import/Export of all data and also specific programs.\n---\n\nYou can now export all your data into a file (history, settings, etc), and then import it later on.\n\nAlso can export and import programs. Could use it to e.g. share a workout program with a friend, or as a backup, or for some other reason.\n`;\n\nexport default content;\n","import { JSX, ReactNode } from \"react\";\nimport {\n  SendMessage_isIos,\n  SendMessage_iosAppVersion,\n  SendMessage_toIos,\n  SendMessage_isAndroid,\n  SendMessage_androidAppVersion,\n  SendMessage_toAndroid,\n} from \"./utils/sendMessage\";\nimport { UrlUtils_build } from \"./utils/url\";\n\ninterface IProps {\n  href: string;\n  className?: string;\n  children: ReactNode;\n  name: string;\n}\n\nexport function InternalLink(props: IProps): JSX.Element {\n  if (SendMessage_isIos()) {\n    if (SendMessage_iosAppVersion() > 4) {\n      return (\n        <button\n          className={`block w-full ${props.className} nm-${props.name}`}\n          onClick={() => {\n            const url = UrlUtils_build(props.href, window.location.href.replace(\"liftosaur://\", \"https://\"));\n            SendMessage_toIos({ type: \"openUrl\", url: url.toString() });\n          }}\n        >\n          {props.children}\n        </button>\n      );\n    } else {\n      return (\n        <a href={props.href} className={props.className}>\n          {props.children}\n        </a>\n      );\n    }\n  } else if (SendMessage_isAndroid() && SendMessage_androidAppVersion() > 11) {\n    return (\n      <button\n        className={`block w-full ${props.className} nm-${props.name}`}\n        onClick={() => {\n          const url = UrlUtils_build(props.href, window.location.href);\n          SendMessage_toAndroid({ type: \"openUrl\", url: url.toString() });\n        }}\n      >\n        {props.children}\n      </button>\n    );\n  } else {\n    return (\n      <a\n        href={props.href}\n        target=\"_blank\"\n        className={props.className}\n        onClick={(e) => {\n          // eslint-disable-next-line @typescript-eslint/no-explicit-any\n          if ((window.navigator as any).standalone) {\n            e.preventDefault();\n            window.open(`https://liftosaur.netlify.app${props.href}`, \"_blank\");\n          }\n        }}\n      >\n        {props.children}\n      </a>\n    );\n  }\n}\n","import { Platform } from \"react-native\";\nimport {\n  SendMessage_isIos,\n  SendMessage_iosAppVersion,\n  SendMessage_iosVersion,\n  SendMessage_isAndroid,\n  SendMessage_androidAppVersion,\n  SendMessage_androidVersion,\n} from \"../utils/sendMessage\";\n\nexport function HealthSync_eligibleForAppleHealth(): boolean {\n  if (SendMessage_isIos()) {\n    return SendMessage_iosAppVersion() >= 9 && SendMessage_iosVersion() >= 15;\n  }\n  return Platform.OS === \"ios\" && parseFloat(String(Platform.Version)) >= 15;\n}\n\nexport function HealthSync_eligibleForGoogleHealth(): boolean {\n  if (SendMessage_isAndroid()) {\n    return SendMessage_androidAppVersion() >= 18 && SendMessage_androidVersion() >= 14;\n  }\n  // Platform.Version on Android is the API level, not the user-facing version. 34 = Android 14 (UPSIDE_DOWN_CAKE),\n  // the minimum for Health Connect's runtime permission flow.\n  return Platform.OS === \"android\" && Number(Platform.Version) >= 34;\n}\n","import { ISettings, IStorage } from \"../types\";\nimport { Dialog_alert } from \"../utils/dialog\";\nimport { DateUtils_formatYYYYMMDD } from \"../utils/date\";\nimport { Exporter_toFile } from \"../utils/exporter\";\nimport { IExportedProgram } from \"../models/program\";\nimport { Storage_getDefault, Storage_get, Storage_setAffiliate } from \"../models/storage\";\nimport { IEither } from \"../utils/types\";\nimport { getLatestMigrationVersion } from \"../migrations/migrations\";\nimport { IDispatch } from \"../ducks/types\";\nimport { Thunk_importProgram } from \"../ducks/thunks\";\nimport { ObjectUtils_clone, ObjectUtils_pick } from \"../utils/object\";\nimport { ImportFromLink_importFromLink } from \"../utils/importFromLink\";\nimport { UrlUtils_build } from \"../utils/url\";\nimport { IExportedPlannerProgram } from \"../pages/planner/models/types\";\nimport { PlannerProgram_convertExportedPlannerToProgram } from \"../pages/planner/models/plannerProgram\";\nimport { Settings_build } from \"../models/settings\";\n\nexport function ImportExporter_exportStorage(storage: IStorage): void {\n  Exporter_toFile(`liftosaur-${DateUtils_formatYYYYMMDD(Date.now())}.json`, JSON.stringify(storage, null, 2));\n}\n\nfunction isPlanProgram(program: IExportedProgram | IExportedPlannerProgram): program is IExportedPlannerProgram {\n  return \"type\" in program && program.type === \"v2\";\n}\n\nexport async function ImportExporter_getExportedProgram(\n  client: Window[\"fetch\"],\n  maybeProgram: string,\n  settings?: ISettings\n): Promise<IEither<IExportedProgram, string[]>> {\n  let parsedMaybeProgram: IExportedProgram | IExportedPlannerProgram;\n  try {\n    parsedMaybeProgram = JSON.parse(maybeProgram);\n  } catch (e) {\n    return { success: false, error: [\"Couldn't parse the provided file\"] };\n  }\n  let exportedProgram: IExportedProgram;\n  if (isPlanProgram(parsedMaybeProgram)) {\n    exportedProgram = PlannerProgram_convertExportedPlannerToProgram(parsedMaybeProgram, settings || Settings_build());\n  } else {\n    exportedProgram = parsedMaybeProgram;\n  }\n  const payload = Storage_getDefault();\n  payload.settings = ObjectUtils_clone(settings || payload.settings);\n  payload.settings.timers.workout = exportedProgram.settings?.timers?.workout || payload.settings.timers.workout;\n  payload.settings.units = exportedProgram.settings?.units || payload.settings.units;\n  payload.settings.exercises = exportedProgram.customExercises;\n  payload.programs.push(exportedProgram.program);\n  payload.version = exportedProgram.version;\n  const result = Storage_get(payload, false);\n  if (result.success) {\n    const storage = result.data;\n    const customExercises = storage.settings.exercises;\n    const program = storage.programs.filter((p) => p.id === exportedProgram.program.id)[0];\n    return {\n      success: true,\n      data: {\n        customExercises,\n        program,\n        version: getLatestMigrationVersion(),\n        settings: ObjectUtils_pick(payload.settings, [\"timers\", \"units\"]),\n      },\n    };\n  } else {\n    return result;\n  }\n}\n\nexport async function ImportExporter_handleUniversalLink(\n  dispatch: IDispatch,\n  link: string,\n  client: Window[\"fetch\"]\n): Promise<void> {\n  const url = UrlUtils_build(link);\n  if ((url.pathname === \"/program\" && url.searchParams.has(\"data\")) || url.pathname.startsWith(\"/p/\")) {\n    const data = await ImportFromLink_importFromLink(link, client);\n    if (data.success) {\n      const source = data.data.source;\n      if (source) {\n        Storage_setAffiliate(dispatch, source, \"program\");\n      }\n      dispatch(Thunk_importProgram(data.data));\n    } else {\n      Dialog_alert(data.error.join(\"\\n\"));\n    }\n  }\n}\n","/* eslint-disable no-template-curly-in-string */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nimport { LRParser } from \"@lezer/lr\";\nconst spec_Keyword: any = { __proto__: null, if: 100, else: 102, for: 104 };\nexport const parser = LRParser.deserialize({\n  version: 14,\n  states:\n    \",fQcQPOOO!iQPO'#C}OOQO'#Cd'#CdO#cQPO'#CdO${QPO'#DXOcQPO'#CiO%SQPO'#CjO%ZQPO'#ClO%`QPO'#CnO%eQQO'#CrO%mQPO'#CuO'ZQPO'#DXOcQPO'#C{OOQO'#DX'#DXQcQPOOOcQPO,58yOcQPO,58yOcQPO,58yOcQPO,58yOcQPO,59VOOQO,59O,59OOOQO,59Q,59QO'eQPO,59TOOQO,59U,59UO'lQPO,59UO'sQPO,59WO'xQPO,59YO'}QPO,59^OcQPO,59^O(SQSO,59aO(ZQPO,59fOcQPO,59]OcQPO,59dOOQO,59g,59gOOQO-E6{-E6{O)uQPO1G.eOOQO1G.e1G.eO)|QPO1G.eO*TQPO1G.eO+hQPO1G.qOOQO1G.o1G.oOOQO1G.p1G.pO+oQPO1G.rO-VQQO1G.tOOQO1G.x1G.xO-[QPO'#CtO-cQPO1G.xO-hQPO'#CvOOQO'#Cw'#CwOOQO'#Cv'#CvO-rQPO1G.{O-zQPO1G/QOcQPO'#DQO.UQPO1G/QOOQO1G/Q1G/QO.^QPO1G.wO/dQPO1G/OOcQPO7+$]O0jQPO7+$^O0rQPO7+$^OcQPO7+$`O2YQQO7+$dO(SQSO'#DPO2_QPO7+$gOOQO7+$g7+$gO2gQPO7+$lOOQO7+$l7+$lO2oQPO,59lOOQO-E7O-E7OO2yQPO<<GwO%ZQPO,59jOOQO<<Gx<<GxO0jQPO<<GxOOQO-E6|-E6|O4PQPO'#CpO4WQPO<<GzO4]QPO<<HOOOQO,59k,59kOOQO-E6}-E6}OOQO<<HR<<HROOQO<<HW<<HWO'sQPO1G/UOOQOAN=dAN=dP0mQPO'#DOO'sQPOAN=fOOQOAN=jAN=jOOQO7+$p7+$pOOQOG23QG23Q\",\n  stateData:\n    \"4m~OwOSPOSxOSyOSzOS~OSROXQO[]OaYOcZOgXOp[O|TO!OUO!SVO!UWO~OS_OT`OUaOVbO!QcO~OXqX[qXaqXcqXgqXpqXuqX|qX!OqX!SqX!UqX!PqX~P!WOXdO~OS{XT{XU{XV{XX{X[{Xa{Xc{Xg{Xp{Xu{X|{X!O{X!Q{X!S{X!U{X}{X!P{X!R{X!X{X!]{X~OZeO~P#hO!PgO~PcO|TO~O|jO~O!WlO!YkO~O|nO!WmOSiXTiXUiXViXXiX[iXaiXciXgiXmiXpiXuiX!OiX!QiX!SiX!UiX![iX}iX!PiX!RiX!XiX!]iX~OmpO![oO~P#hO}xO~P!WO!PyO~PcO!OUO~Oc{O~Oa|O~O!Z!QO~PcO}!WO!]!UO~PcOT`OURiVRiXRi[RiaRicRigRipRiuRi|Ri!ORi!QRi!SRi!URi}Ri!PRi!RRi!XRi!]Ri~OSRi~P(eOS_O~P(eOS_OT`OUaOVRiXRi[RiaRicRigRipRiuRi|Ri!ORi!QRi!SRi!URi}Ri!PRi!RRi!XRi!]Ri~O!R!ZO~P!WO!T![OS`iT`iU`iV`iX`i[`ia`ic`ig`ip`iu`i|`i!O`i!Q`i!S`i!U`i}`i!P`i!R`i!X`i!]`i~O!V!^O~O!XhX~P!WO!X!_O~O!RjX!XjX~P!WO!R!`O!X!bO~O}!dO!]!UO~P!WO}!dO!]!UO~OXei[eiaeiceigeipeiuei|ei!Oei!Sei!Uei}ei!Pei!Rei!Xei!]ei~P!WOXli[lialicliglipliuli|li!Oli!Sli!Uli}li!Pli!Rli!Xli!]li~P!WO!OUO!S!hO~O!T!jOS`qT`qU`qV`qX`q[`qa`qc`qg`qp`qu`q|`q!O`q!Q`q!S`q!U`q}`q!P`q!R`q!X`q!]`q~O!Y!nO~O!R!`O!X!qO~O}!rO!]!UO~O}ta!]ta~P!WOX_y[_ya_yc_yg_yp_yu_y|_y!O_y!S_y!U_y}_y!P_y!R_y!X_y!]_y~P!WO}dX~P!WO}!vO~Oa!wO~OPTg[XScZaZ~\",\n  goto: \"'O|PPP}PPPP!eP}PP!{#i}}P}P$`}$cP$y$c$|%S}P}}P%W%b%h%nPPPPPP%xy]OTU[^_`abchlmnop!U!Z!^!`ySOTU[^_`abchlmnop!U!Z!^!`x]OTU[^_`abchlmnop!U!Z!^!`QiVR!s!hx]OTU[^_`abchlmnop!U!Z!^!`QziQ!i![Q!t!jQ!x!sR!y!vR!m!^yZOTU[^_`abchlmnop!U!Z!^!`R!OlQ!SmR!o!`T!Rm!`Q^OQhUTr^hQ!]zR!k!]Q!a!SR!p!aQ!VnQ!c!TT!f!V!cWPOU^hQfTQq[Qs_Qt`QuaQvbQwcQ}lS!Pm!`Q!TnQ!XoQ!YpQ!e!UQ!g!ZR!l!^\",\n  nodeNames:\n    \"⚠ LineComment Program BinaryExpression Plus Times Cmp AndOr NumberExpression Number WeightExpression Unit Percentage ParenthesisExpression BlockExpression Ternary IfExpression Keyword ForExpression Variable ForInExpression AssignmentExpression StateVariable StateKeyword StateVariableIndex VariableExpression VariableIndex Wildcard IncAssignmentExpression IncAssignment BuiltinFunctionExpression UnaryExpression Not\",\n  maxTerm: 59,\n  skippedNodes: [0, 1],\n  repeatNodeCount: 4,\n  tokenData:\n    \"1S~R}X^$Opq$Oqr$suv%Qvw%Vxy%byz%gz{%l{|%{|}&T}!O%{!O!P&Y!P!Q&r!Q!['f![!](e!]!^(j!^!_(o!_!`(w!`!a(o!a!b)P!c!})U!}#O)g#P#Q)l#T#])U#]#^)q#^#_)U#_#`*m#`#a+i#a#g)U#g#h,Q#h#j)U#j#k.b#k#o)U#o#p0_#p#q0l#q#r0r#r#s0w#y#z$O$f$g$O#BY#BZ$O$IS$I_$O$I|$JO$O$JT$JU$O$KV$KW$O&FU&FV$O~$TYw~X^$Opq$O#y#z$O$f$g$O#BY#BZ$O$IS$I_$O$I|$JO$O$JT$JU$O$KV$KW$O&FU&FV$O~$xPp~!_!`${~%QOU~P%VOTP~%YPvw%]~%bOV~~%gO|~~%lO}~T%sP!ZSTP!_!`%vP%{OmP~&QPS~!_!`%v~&YO!]~V&_P!YQ!Q![&bT&gQXTuv&m!Q![&bT&rO[T~&wQTP!P!Q&}!_!`%v~'SSP~OY&}Z;'S&};'S;=`'`<%lO&}~'cP;=`<%l&}T'kRXTuv&m!O!P't!Q!['fT'yQXTuv&m!Q![(PT(URXTuv&m!O!P(_!Q![(PT(bP!Q![(P~(jO!R~~(oOx~~(tPU~!_!`${~(|P![~!_!`${~)UO!Q~T)ZSaT!Q![)U!c!})U#R#S)U#T#o)U~)lO!W~~)qO!X~V)vUaT!Q![)U!c!})U#R#S)U#T#b)U#b#c*Y#c#o)UV*aS!VQaT!Q![)U!c!})U#R#S)U#T#o)U~*rUaT!Q![)U!c!})U#R#S)U#T#Z)U#Z#[+U#[#o)U~+]SZ~aT!Q![)U!c!})U#R#S)U#T#o)U~+nUaT!Q![)U!c!})U#R#S)U#T#U)U#U#V+U#V#o)U~,VUaT!Q![)U!c!})U#R#S)U#T#h)U#h#i,i#i#o)U~,nTaT!Q![)U!c!})U#R#S)U#T#U,}#U#o)U~-SUaT!Q![)U!c!})U#R#S)U#T#h)U#h#i-f#i#o)U~-kUaT!Q![)U!c!})U#R#S)U#T#X)U#X#Y-}#Y#o)U~.USg~aT!Q![)U!c!})U#R#S)U#T#o)U~.gTaT!Q![)U!c!})U#R#S)U#T#U.v#U#o)U~.{UaT!Q![)U!c!})U#R#S)U#T#f)U#f#g/_#g#o)U~/dTaT!O!P/s!Q![)U!c!})U#R#S)U#T#o)U~/vQ!c!}/|#T#o/|~0RSc~!Q![/|!c!}/|#R#S/|#T#o/|~0dP!O~#r#s0g~0lOy~~0oP#p#q%]~0wO!P~~0zP#q#r0}~1SOz~\",\n  tokenizers: [0, 1, 2],\n  topRules: { Program: [0, 2] },\n  specialized: [{ term: 17, get: (value: any) => spec_Keyword[value] || -1 }],\n  tokenPrec: 892,\n});\n","// import util from \"util\";\nimport { SyntaxNode } from \"@lezer/common\";\nimport { IScriptBindings, IScriptFnContext } from \"./models/progress\";\nimport {\n  IScriptFunctions,\n  IScriptFnName,\n  IScriptStaticType,\n  LiftoscriptFns_isFnName,\n  LiftoscriptFns_arity,\n  LiftoscriptFns_argSignature,\n  LiftoscriptFns_isValidArg,\n  LiftoscriptFns_acceptsTypeAt,\n  LiftoscriptFns_bindingStaticType,\n} from \"./liftoscriptFns\";\nimport {\n  Weight_gt,\n  Weight_lt,\n  Weight_gte,\n  Weight_lte,\n  Weight_eq,\n  Weight_build,\n  Weight_print,\n  Weight_smartConvert,\n  Weight_is,\n  Weight_isPct,\n  Weight_buildAny,\n  Weight_applyOp,\n  Weight_convertToWeight,\n  Weight_buildPct,\n  Weight_op,\n} from \"./models/weight\";\nimport { IProgramState, IWeight, IUnit, IPercentage } from \"./types\";\nimport { CollectionUtils_compact } from \"./utils/collection\";\nimport { MathUtils_applyOp, MathUtils_round, MathUtils_clamp, MathUtils_roundFloat } from \"./utils/math\";\nimport { IProgramMode } from \"./models/program\";\nimport { parser as LiftoscriptParser } from \"./liftoscript\";\n\nexport enum NodeName {\n  LineComment = \"LineComment\",\n  Program = \"Program\",\n  BinaryExpression = \"BinaryExpression\",\n  Plus = \"Plus\",\n  Times = \"Times\",\n  Cmp = \"Cmp\",\n  AndOr = \"AndOr\",\n  NumberExpression = \"NumberExpression\",\n  Number = \"Number\",\n  Percentage = \"Percentage\",\n  WeightExpression = \"WeightExpression\",\n  ParenthesisExpression = \"ParenthesisExpression\",\n  BlockExpression = \"BlockExpression\",\n  Ternary = \"Ternary\",\n  IfExpression = \"IfExpression\",\n  ForExpression = \"ForExpression\",\n  ForInExpression = \"ForInExpression\",\n  If = \"If\",\n  Else = \"Else\",\n  AssignmentExpression = \"AssignmentExpression\",\n  IncAssignmentExpression = \"IncAssignmentExpression\",\n  StateVariable = \"StateVariable\",\n  StateVariableIndex = \"StateVariableIndex\",\n  Variable = \"Variable\",\n  BuiltinFunctionExpression = \"BuiltinFunctionExpression\",\n  Keyword = \"Keyword\",\n  VariableExpression = \"VariableExpression\",\n  VariableIndex = \"VariableIndex\",\n  Current = \"Current\",\n  Wildcard = \"Wildcard\",\n  UnaryExpression = \"UnaryExpression\",\n  Not = \"Not\",\n  Unit = \"Unit\",\n}\n\nexport type IAssignmentOp = \"+=\" | \"-=\" | \"*=\" | \"/=\" | \"=\";\n\nexport class LiftoscriptSyntaxError extends SyntaxError {\n  public readonly line: number;\n  public readonly offset: number;\n  public readonly from: number;\n  public readonly to: number;\n\n  constructor(message: string, line: number, offset: number, from: number, to: number) {\n    super(message);\n    this.line = line;\n    this.offset = offset;\n    this.from = from;\n    this.to = to;\n  }\n}\n\nfunction getChildren(node: SyntaxNode): SyntaxNode[] {\n  const cur = node.cursor();\n  const result: SyntaxNode[] = [];\n  if (!cur.firstChild()) {\n    return result;\n  }\n  do {\n    result.push(cur.node);\n  } while (cur.nextSibling());\n  return result;\n}\n\nfunction comparing(\n  left: number | IWeight | IPercentage | (number | IWeight | IPercentage | undefined)[],\n  right: number | IWeight | IPercentage | (number | IWeight | IPercentage | undefined)[],\n  operator: \">\" | \"<\" | \">=\" | \"<=\" | \"==\" | \"!=\"\n): boolean {\n  function comparator(l: number | IWeight | IPercentage, r: number | IWeight | IPercentage): boolean {\n    switch (operator) {\n      case \">\":\n        return Weight_gt(l, r);\n      case \"<\":\n        return Weight_lt(l, r);\n      case \">=\":\n        return Weight_gte(l, r);\n      case \"<=\":\n        return Weight_lte(l, r);\n      case \"==\":\n        return Weight_eq(l, r);\n      case \"!=\":\n        return !Weight_eq(l, r);\n    }\n  }\n\n  if (Array.isArray(left) && Array.isArray(right)) {\n    return left.every((l, i) => comparator(l ?? 0, right[i] ?? 0));\n  } else if (Array.isArray(left) && !Array.isArray(right)) {\n    return left.every((l, i) => comparator(l ?? 0, right ?? 0));\n  } else if (!Array.isArray(left) && Array.isArray(right)) {\n    return right.every((r, i) => comparator(left ?? 0, r ?? 0));\n  } else if (!Array.isArray(left) && !Array.isArray(right)) {\n    return comparator(left ?? 0, right ?? 0);\n  } else {\n    throw new Error(\"Impossible case\");\n  }\n}\n\nfunction assert(name: string): never {\n  throw new SyntaxError(`Missing required nodes for ${name}, this should never happen`);\n}\n\nexport interface ILiftoscriptVariableValue<T> {\n  value: T;\n  op: IAssignmentOp;\n  target: (\"*\" | \"_\" | number)[];\n}\n\nexport type ILiftoscriptEvaluatorUpdate =\n  | { type: \"setVariationIndex\"; value: ILiftoscriptVariableValue<number> }\n  | { type: \"exerciseVariationIndex\"; value: ILiftoscriptVariableValue<number> }\n  | { type: \"descriptionIndex\"; value: ILiftoscriptVariableValue<number> }\n  | { type: \"reps\"; value: ILiftoscriptVariableValue<number> }\n  | { type: \"minReps\"; value: ILiftoscriptVariableValue<number> }\n  | { type: \"weights\"; value: ILiftoscriptVariableValue<number | IPercentage | IWeight> }\n  | { type: \"timers\"; value: ILiftoscriptVariableValue<number> }\n  | { type: \"setTime\"; value: ILiftoscriptVariableValue<number> }\n  | { type: \"RPE\"; value: ILiftoscriptVariableValue<number> }\n  | { type: \"logrpes\"; value: ILiftoscriptVariableValue<number> }\n  | { type: \"amraps\"; value: ILiftoscriptVariableValue<number> }\n  | { type: \"askweights\"; value: ILiftoscriptVariableValue<number> }\n  | { type: \"numberOfSets\"; value: ILiftoscriptVariableValue<number> };\n\nexport class LiftoscriptEvaluator {\n  private readonly script: string;\n  private readonly state: IProgramState;\n  private readonly otherStates: Record<number, IProgramState>;\n  private readonly bindings: IScriptBindings;\n  private readonly fns: IScriptFunctions;\n  private readonly fnContext: IScriptFnContext;\n  private readonly unit: IUnit;\n  private readonly mode: IProgramMode;\n  private readonly vars: IProgramState = {};\n  public readonly updates: ILiftoscriptEvaluatorUpdate[] = [];\n\n  constructor(\n    script: string,\n    state: IProgramState,\n    otherStates: Record<number, IProgramState>,\n    bindings: IScriptBindings,\n    fns: IScriptFunctions,\n    fnContext: IScriptFnContext,\n    unit: IUnit,\n    mode: IProgramMode\n  ) {\n    this.script = script;\n    this.state = state;\n    this.otherStates = otherStates;\n    this.bindings = bindings;\n    this.fns = fns;\n    this.fnContext = fnContext;\n    this.unit = unit;\n    this.mode = mode;\n  }\n\n  public static getValueRaw(script: string, node: SyntaxNode): string {\n    return script.slice(node.from, node.to);\n  }\n\n  public static getValue(script: string, node: SyntaxNode): string {\n    return this.getValueRaw(script, node).replace(/\\n/g, \"\\\\n\").replace(/\\t/g, \"\\\\t\");\n  }\n\n  private getValue(node: SyntaxNode): string {\n    return LiftoscriptEvaluator.getValue(this.script, node);\n  }\n\n  private error(message: string, node: SyntaxNode): never {\n    const [line, offset] = this.getLineAndOffset(node);\n    throw new LiftoscriptSyntaxError(`${message} (${line}:${offset})`, line, offset, node.from, node.to);\n  }\n\n  private staticTypeOfNode(node: SyntaxNode): IScriptStaticType | undefined {\n    if (node.type.name === NodeName.NumberExpression) {\n      return \"number\";\n    } else if (node.type.name === NodeName.WeightExpression) {\n      return \"weight\";\n    } else if (node.type.name === NodeName.Percentage) {\n      return \"percentage\";\n    } else if (node.type.name === NodeName.VariableExpression) {\n      if (node.getChildren(NodeName.VariableIndex).length > 0) {\n        return undefined;\n      }\n      const nameNode = node.getChild(NodeName.Keyword);\n      const name = nameNode != null ? this.getValue(nameNode) : undefined;\n      return name != null ? LiftoscriptFns_bindingStaticType(name) : undefined;\n    }\n    return undefined;\n  }\n\n  private validateFnArg(name: IScriptFnName, index: number, node: SyntaxNode, value: unknown): void {\n    if (LiftoscriptFns_isValidArg(name, index, value)) {\n      return;\n    }\n    if (Array.isArray(value) && !LiftoscriptFns_acceptsTypeAt(name, index, \"array\")) {\n      const argText = this.getValue(node);\n      this.error(\n        `Function '${name}' doesn't accept arrays. Use an index to pick one value, like '${argText}[1]'`,\n        node\n      );\n    }\n    const argSignature = LiftoscriptFns_argSignature(name, index);\n    const printedValue =\n      Weight_is(value) || Weight_isPct(value)\n        ? `${Weight_print(value)}`\n        : Array.isArray(value)\n          ? \"an array\"\n          : String(value);\n    this.error(\n      `Argument ${index + 1} (${argSignature?.name}) of '${name}' should be ${argSignature?.hint}, but got ${printedValue}`,\n      node\n    );\n  }\n\n  private getLineAndOffset(node: SyntaxNode): [number, number] {\n    const linesLengths = this.script.split(\"\\n\").map((l) => l.length + 1);\n    let offset = 0;\n    for (let i = 0; i < linesLengths.length; i++) {\n      const lineLength = linesLengths[i];\n      if (node.from > offset && node.from < offset + lineLength) {\n        return [i + 1, node.from - offset];\n      }\n      offset += lineLength;\n    }\n    return [linesLengths.length, linesLengths[linesLengths.length - 1]];\n  }\n\n  public hasKeyword(expr: SyntaxNode, name: string): boolean {\n    const cursor = expr.cursor();\n    do {\n      if (cursor.node.type.name === NodeName.Keyword) {\n        if (this.getValue(cursor.node) === name) {\n          return true;\n        }\n      }\n    } while (cursor.next());\n    return false;\n  }\n\n  private getWeight(expr?: SyntaxNode | null): IWeight | undefined {\n    if (expr?.type.name === NodeName.WeightExpression) {\n      const numberNode = expr.getChild(NodeName.NumberExpression);\n      const unitNode = expr.getChild(NodeName.Unit);\n      if (numberNode == null || unitNode == null) {\n        assert(NodeName.WeightExpression);\n      }\n      const num = this.evaluate(numberNode);\n      if (typeof num !== \"number\") {\n        this.error(\"WeightExpression must contain a number\", numberNode);\n      }\n      return Weight_build(num, this.getValue(unitNode) as IUnit);\n    } else {\n      return undefined;\n    }\n  }\n\n  public switchWeightsToUnit(programNode: SyntaxNode, toUnit: IUnit): string {\n    const cursor = programNode.cursor();\n    let script = this.script;\n    let shift = 0;\n    do {\n      if (cursor.node.type.name === NodeName.WeightExpression) {\n        const weight = this.getWeight(cursor.node);\n        if (weight != null) {\n          if (weight.unit !== toUnit) {\n            const from = cursor.node.from;\n            const to = cursor.node.to;\n            const oldWeightStr = Weight_print(weight);\n            const newWeightStr = Weight_print(Weight_smartConvert(weight, toUnit));\n            script = script.substring(0, from + shift) + newWeightStr + script.substring(to + shift);\n            shift = shift + newWeightStr.length - oldWeightStr.length;\n          }\n        }\n      }\n    } while (cursor.next());\n    return script;\n  }\n\n  public getStateVariableKeys(expr: SyntaxNode): Set<string> {\n    const cursor = expr.cursor();\n    const stateKeys: Set<string> = new Set();\n    do {\n      if (cursor.node.type.name === NodeName.StateVariable) {\n        const stateKey = this.getStateKey(cursor.node);\n        if (stateKey != null) {\n          stateKeys.add(stateKey);\n        }\n      }\n    } while (cursor.next());\n    return stateKeys;\n  }\n\n  private getStateKey(expr: SyntaxNode): string | undefined {\n    const index = expr.getChild(NodeName.StateVariableIndex);\n    if (index == null) {\n      const stateKeyNode = expr.getChild(NodeName.Keyword);\n      if (stateKeyNode != null) {\n        const stateKey = this.getValue(stateKeyNode);\n        return stateKey;\n      }\n    }\n    return undefined;\n  }\n\n  public parse(expr: SyntaxNode): void {\n    const cursor = expr.cursor();\n    const vars: IProgramState = {};\n    do {\n      if (cursor.node.type.isError) {\n        this.error(\"Syntax error\", cursor.node);\n      } else if (cursor.node.type.name === NodeName.BuiltinFunctionExpression) {\n        const [keyword, ...fnArgs] = getChildren(cursor.node);\n        if (keyword == null || keyword.type.name !== NodeName.Keyword) {\n          assert(NodeName.BuiltinFunctionExpression);\n        }\n        const name = this.getValue(keyword);\n        if (!LiftoscriptFns_isFnName(name)) {\n          this.error(`Unknown function '${name}'`, keyword);\n        }\n        const arity = LiftoscriptFns_arity(name);\n        if (fnArgs.length < arity.min || (arity.max != null && fnArgs.length > arity.max)) {\n          const expected = arity.max == null || arity.max === arity.min ? `${arity.min}` : `${arity.min}-${arity.max}`;\n          this.error(\n            `Function '${name}' expects ${expected} argument${arity.max === 1 ? \"\" : \"s\"}, but got ${fnArgs.length}`,\n            keyword\n          );\n        }\n        fnArgs.forEach((fnArg, index) => {\n          const staticType = this.staticTypeOfNode(fnArg);\n          if (staticType != null && !LiftoscriptFns_acceptsTypeAt(name, index, staticType)) {\n            if (staticType === \"array\") {\n              const argText = this.getValue(fnArg);\n              this.error(\n                `Function '${name}' doesn't accept arrays, and '${argText}' is an array. Use an index to pick one value, like '${argText}[1]'`,\n                fnArg\n              );\n            } else {\n              const argSignature = LiftoscriptFns_argSignature(name, index);\n              this.error(\n                `Argument ${index + 1} (${argSignature?.name}) of '${name}' should be ${argSignature?.hint}, but '${this.getValue(fnArg)}' is a ${staticType}`,\n                fnArg\n              );\n            }\n          }\n        });\n      } else if (cursor.node.type.name === NodeName.ForExpression) {\n        const variableNode = cursor.node.getChild(NodeName.Variable);\n        if (variableNode != null) {\n          vars[this.getValue(variableNode)] = 1;\n        }\n      } else if (cursor.node.type.name === NodeName.AssignmentExpression) {\n        const [variableNode] = getChildren(cursor.node);\n        if (variableNode.type.name === NodeName.Variable) {\n          vars[this.getValue(variableNode)] = 1;\n        } else if (variableNode.type.name === NodeName.VariableExpression) {\n          const nameNode = variableNode.getChild(NodeName.Keyword);\n          if (nameNode != null) {\n            const name = this.getValue(nameNode);\n            if (this.mode === \"update\") {\n              if (\n                [\n                  \"reps\",\n                  \"weights\",\n                  \"RPE\",\n                  \"minReps\",\n                  \"numberOfSets\",\n                  \"timers\",\n                  \"setTime\",\n                  \"askweights\",\n                  \"amraps\",\n                  \"logrpes\",\n                ].indexOf(name) === -1\n              ) {\n                this.error(`Cannot assign to '${name}'`, variableNode);\n              }\n              const indexExprs = variableNode.getChildren(NodeName.VariableIndex);\n              if (name === \"numberOfSets\" && indexExprs.length > 0) {\n                this.error(`${name} is not an array`, variableNode);\n              } else if (indexExprs.length > 1) {\n                this.error(`Can't assign to set variations, weeks or days here`, variableNode);\n              }\n            }\n          }\n        }\n      } else if (cursor.node.type.name === NodeName.StateVariable) {\n        const stateKey = this.getStateKey(cursor.node);\n        if (stateKey != null && !(stateKey in this.state)) {\n          this.error(`There's no state variable '${stateKey}'`, cursor.node);\n        }\n      } else if (cursor.node.type.name === NodeName.Variable) {\n        const variableKey = this.getValue(cursor.node);\n        if (!(variableKey in vars)) {\n          this.error(`There's no variable '${variableKey}'`, cursor.node);\n        }\n      } else if (cursor.node.type.name === NodeName.VariableExpression) {\n        const [nameNode, indexExpr] = getChildren(cursor.node);\n        if (nameNode == null) {\n          assert(NodeName.VariableExpression);\n        }\n        const name = this.getValue(nameNode);\n        if (indexExpr != null) {\n          const validNames: (keyof IScriptBindings)[] = [\n            \"originalWeights\",\n            \"weights\",\n            \"reps\",\n            \"minReps\",\n            \"completedReps\",\n            \"completedRepsLeft\",\n            \"completedWeights\",\n            \"timers\",\n            \"setTime\",\n            \"completedSetTime\",\n            \"w\",\n            \"r\",\n            \"cr\",\n            \"cw\",\n            \"mr\",\n            \"completedRPE\",\n            \"bodyweight\",\n            \"RPE\",\n            \"setVariationIndex\",\n            \"exerciseVariationIndex\",\n            \"descriptionIndex\",\n            \"numberOfSets\",\n            \"programNumberOfSets\",\n            \"completedNumberOfSets\",\n            \"amraps\",\n            \"logrpes\",\n            \"askweights\",\n          ];\n          if (validNames.indexOf(name as keyof IScriptBindings) === -1) {\n            this.error(`${name} is not an array variable`, nameNode);\n          }\n        } else if (!(name in this.bindings)) {\n          this.error(`${name} is not a valid variable`, nameNode);\n        }\n      }\n    } while (cursor.next());\n  }\n\n  public static changeWeightsToCompleteWeights(oldScript: string): string {\n    const node = LiftoscriptParser.parse(oldScript);\n    const cursor = node.cursor();\n    let script = oldScript;\n    let shift = 0;\n    do {\n      if (cursor.node.type.name === NodeName.VariableExpression) {\n        const keywordNode = cursor.node.getChild(NodeName.Keyword);\n        if (keywordNode) {\n          const keyword = LiftoscriptEvaluator.getValue(oldScript, keywordNode);\n          if (keyword === \"weights\") {\n            const parent = cursor.node.parent;\n            if (\n              parent != null &&\n              !(\n                (parent.type.name === NodeName.AssignmentExpression ||\n                  parent.type.name === NodeName.IncAssignmentExpression) &&\n                parent.firstChild?.from === cursor.node.from &&\n                parent.firstChild?.to === cursor.node.to\n              )\n            ) {\n              const from = keywordNode.from;\n              const to = keywordNode.to;\n              const oldWeightStr = keyword;\n              const newWeightStr = \"completedWeights\";\n              script = script.substring(0, from + shift) + newWeightStr + script.substring(to + shift);\n              shift = shift + newWeightStr.length - oldWeightStr.length;\n            }\n          }\n        }\n      }\n    } while (cursor.next());\n    return script;\n  }\n\n  private evaluateToNumber(expr: SyntaxNode): number {\n    const v = this.evaluate(expr);\n    const v1 = Array.isArray(v) ? v[0] : v;\n    return Weight_is(v1) ? v1.value : typeof v1 === \"number\" ? v1 : v1 ? 1 : 0;\n  }\n\n  private evaluateToNumberOrWeightOrPercentage(expr: SyntaxNode): number | IWeight | IPercentage {\n    const v = this.evaluate(expr);\n    const v1 = Array.isArray(v) ? v[0] : v;\n    return Weight_is(v1) || Weight_isPct(v1) ? v1 : typeof v1 === \"number\" ? v1 : v1 ? 1 : 0;\n  }\n\n  private changeNumberOfSets(expression: SyntaxNode, op: IAssignmentOp): number | IWeight | IPercentage {\n    const oldNumberOfSets = this.bindings.weights.length;\n    const evaluatedValue = MathUtils_applyOp(this.bindings.numberOfSets, this.evaluateToNumber(expression), op);\n\n    this.bindings.weights = this.bindings.weights.slice(0, evaluatedValue);\n    this.bindings.originalWeights = this.bindings.originalWeights.slice(0, evaluatedValue);\n    this.bindings.reps = this.bindings.reps.slice(0, evaluatedValue);\n    this.bindings.minReps = this.bindings.minReps.slice(0, evaluatedValue);\n    this.bindings.RPE = this.bindings.RPE.slice(0, evaluatedValue);\n    this.bindings.w = this.bindings.weights.slice(0, evaluatedValue);\n    this.bindings.r = this.bindings.reps.slice(0, evaluatedValue);\n    this.bindings.mr = this.bindings.minReps.slice(0, evaluatedValue);\n    this.bindings.timers = this.bindings.timers.slice(0, evaluatedValue);\n    this.bindings.setTime = this.bindings.setTime.slice(0, evaluatedValue);\n    this.bindings.amraps = this.bindings.amraps.slice(0, evaluatedValue);\n    this.bindings.logrpes = this.bindings.logrpes.slice(0, evaluatedValue);\n    this.bindings.askweights = this.bindings.askweights.slice(0, evaluatedValue);\n    this.bindings.completedReps = this.bindings.completedReps.slice(0, evaluatedValue);\n    this.bindings.completedRepsLeft = this.bindings.completedRepsLeft.slice(0, evaluatedValue);\n    this.bindings.cr = this.bindings.cr.slice(0, evaluatedValue);\n    this.bindings.cw = this.bindings.cw.slice(0, evaluatedValue);\n    this.bindings.completedWeights = this.bindings.completedWeights.slice(0, evaluatedValue);\n    this.bindings.completedRPE = this.bindings.completedRPE.slice(0, evaluatedValue);\n    this.bindings.isCompleted = this.bindings.isCompleted.slice(0, evaluatedValue);\n\n    const ns = oldNumberOfSets - 1;\n    for (let i = 0; i < evaluatedValue; i += 1) {\n      if (i > ns) {\n        this.bindings.weights[i] = Weight_build(\n          this.bindings.weights[ns]?.value ?? 0,\n          this.bindings.weights[ns]?.unit || \"lb\"\n        );\n        this.bindings.originalWeights[i] = Weight_buildAny(\n          this.bindings.originalWeights[ns]?.value ?? 0,\n          this.bindings.originalWeights[ns]?.unit || \"lb\"\n        );\n        this.bindings.reps[i] = this.bindings.reps[ns] ?? 0;\n        this.bindings.timers[i] = this.bindings.timers[ns];\n        this.bindings.setTime[i] = this.bindings.setTime[ns];\n        this.bindings.amraps[i] = this.bindings.amraps[ns];\n        this.bindings.logrpes[i] = this.bindings.logrpes[ns];\n        this.bindings.askweights[i] = this.bindings.askweights[ns];\n        this.bindings.minReps[i] = this.bindings.minReps[ns];\n        this.bindings.RPE[i] = this.bindings.RPE[ns];\n        this.bindings.w[i] = this.bindings.weights[i];\n        this.bindings.r[i] = this.bindings.reps[i];\n        this.bindings.mr[i] = this.bindings.minReps[i];\n        this.bindings.completedReps[i] = undefined;\n        this.bindings.completedRepsLeft[i] = undefined;\n        this.bindings.completedWeights[i] = undefined;\n        this.bindings.completedRPE[i] = undefined;\n        this.bindings.cr[i] = undefined;\n        this.bindings.cw[i] = undefined;\n        this.bindings.isCompleted[i] = 0;\n      }\n    }\n\n    this.bindings.numberOfSets = evaluatedValue;\n    this.bindings.ns = evaluatedValue;\n\n    return evaluatedValue;\n  }\n\n  private changeBinding(\n    key: \"reps\" | \"weights\" | \"RPE\" | \"minReps\" | \"timers\" | \"setTime\" | \"logrpes\" | \"amraps\" | \"askweights\",\n    expression: SyntaxNode,\n    indexExprs: SyntaxNode[],\n    op: IAssignmentOp\n  ): number | IWeight | IPercentage {\n    const indexes = indexExprs.map((ie) => getChildren(ie)[0]);\n    const maxTargetLength = 1;\n    if (indexes.length > maxTargetLength) {\n      this.error(`${key} can only have 1 value inside []`, expression);\n    }\n    const indexValues = this.calculateIndexValues(indexes);\n    const normalizedIndexValues = this.normalizeTarget(indexValues, maxTargetLength);\n    const [setIndex] = normalizedIndexValues;\n    let value: number | IWeight | IPercentage = 0;\n    if (key === \"weights\") {\n      for (let i = 0; i < this.bindings.weights.length; i += 1) {\n        if (!this.bindings.isCompleted[i] && (setIndex === \"*\" || setIndex === i + 1)) {\n          const evalutedValue = this.evaluateToNumberOrWeightOrPercentage(expression);\n          const newValue = Weight_applyOp(\n            this.bindings.rm1,\n            this.bindings.weights[i] ?? Weight_build(0, this.unit),\n            evalutedValue,\n            op\n          );\n          value = Weight_convertToWeight(this.bindings.rm1, newValue, this.unit);\n          this.bindings.originalWeights[i] = value;\n          this.bindings.weights[i] = this.fns.roundWeight([value], this.fnContext, this.bindings);\n        }\n      }\n    } else {\n      for (let i = 0; i < this.bindings[key].length; i += 1) {\n        if (!this.bindings.isCompleted[i] && (setIndex === \"*\" || setIndex === i + 1)) {\n          const evaluatedValue = this.evaluateToNumber(expression);\n          value = MathUtils_applyOp(this.bindings[key][i] ?? 0, evaluatedValue, op);\n          if (key === \"RPE\") {\n            value = MathUtils_round(MathUtils_clamp(value, 0, 10), 0.5);\n          }\n          if (key === \"amraps\" || key === \"logrpes\" || key === \"askweights\") {\n            value = Math.round(MathUtils_clamp(value, 0, 1));\n          }\n          this.bindings[key][i] = value;\n        }\n      }\n    }\n    return value;\n  }\n\n  private recordVariableUpdate(\n    key:\n      | \"reps\"\n      | \"weights\"\n      | \"timers\"\n      | \"setTime\"\n      | \"RPE\"\n      | \"minReps\"\n      | \"setVariationIndex\"\n      | \"exerciseVariationIndex\"\n      | \"descriptionIndex\"\n      | \"numberOfSets\"\n      | \"logrpes\"\n      | \"amraps\"\n      | \"askweights\",\n    expression: SyntaxNode,\n    indexExprs: SyntaxNode[],\n    op: IAssignmentOp\n  ): number | IWeight | IPercentage {\n    const indexes = indexExprs.map((ie) => getChildren(ie)[0]);\n    const maxTargetLength =\n      key === \"setVariationIndex\" || key === \"exerciseVariationIndex\" || key === \"descriptionIndex\"\n        ? 2\n        : key === \"numberOfSets\"\n          ? 3\n          : 4;\n    if (key === \"setVariationIndex\") {\n      if (indexes.length > maxTargetLength) {\n        this.error(`setVariationIndex can only have 2 values inside [*:*]`, expression);\n      }\n    } else if (key === \"exerciseVariationIndex\") {\n      if (indexes.length > maxTargetLength) {\n        this.error(`exerciseVariationIndex can only have 2 values inside [*:*]`, expression);\n      }\n    } else if (key === \"descriptionIndex\") {\n      if (indexes.length > maxTargetLength) {\n        this.error(`descriptionIndex can only have 2 values inside [*:*]`, expression);\n      }\n    } else if (key === \"numberOfSets\") {\n      if (indexes.length > maxTargetLength) {\n        this.error(`numberOfSets can only have 3 values inside [*:*:*]`, expression);\n      }\n    } else if (indexes.length > maxTargetLength) {\n      this.error(`${key} can only have 4 values inside [*:*:*:*]`, expression);\n    }\n    const indexValues = this.calculateIndexValues(indexes);\n    const normalizedIndexValues = this.normalizeTarget(indexValues, maxTargetLength);\n    let result: number | IWeight | IPercentage;\n    if (key === \"weights\") {\n      result = this.evaluateToNumberOrWeightOrPercentage(expression);\n      this.updates.push({ type: key, value: { value: result, op, target: normalizedIndexValues } });\n    } else {\n      result = this.evaluateToNumber(expression);\n      this.updates.push({ type: key, value: { value: result, op, target: normalizedIndexValues } });\n      if (key === \"setVariationIndex\") {\n        const [week, day] = normalizedIndexValues;\n        if ((week === \"*\" || week === this.bindings.week) && (day === \"*\" || day === this.bindings.day)) {\n          this.bindings.setVariationIndex = result;\n        }\n      } else if (key === \"exerciseVariationIndex\") {\n        const [week, day] = normalizedIndexValues;\n        if ((week === \"*\" || week === this.bindings.week) && (day === \"*\" || day === this.bindings.day)) {\n          this.bindings.exerciseVariationIndex = result;\n        }\n      } else if (key === \"descriptionIndex\") {\n        const [week, day] = normalizedIndexValues;\n        if ((week === \"*\" || week === this.bindings.week) && (day === \"*\" || day === this.bindings.day)) {\n          this.bindings.descriptionIndex = result;\n        }\n      } else if (key === \"numberOfSets\") {\n        const [week, day, setVariationIndex] = normalizedIndexValues;\n        if (\n          (week === \"*\" || week === this.bindings.week) &&\n          (day === \"*\" || day === this.bindings.day) &&\n          (setVariationIndex === \"*\" || setVariationIndex === this.bindings.setVariationIndex)\n        ) {\n          this.bindings.numberOfSets = result;\n          this.bindings.ns = result;\n        }\n      }\n    }\n\n    return result;\n  }\n\n  private calculateIndexValues(indexes: SyntaxNode[]): (number | \"*\")[] {\n    return CollectionUtils_compact(indexes).map((ie) => {\n      if (ie.type.name === NodeName.Wildcard) {\n        return \"*\" as const;\n      } else {\n        const v = this.evaluate(ie);\n        const v1 = Array.isArray(v) ? v[0] : v;\n        return Weight_is(v1) ? v1.value : typeof v1 === \"number\" ? v1 : v1 ? 1 : 0;\n      }\n    });\n  }\n\n  private normalizeTarget(target: (number | \"*\")[], length: number): (number | \"*\")[] {\n    const newTarget = [...target];\n    for (let i = 0; i < length - target.length; i += 1) {\n      newTarget.unshift(\"*\");\n    }\n    return newTarget;\n  }\n\n  private toNumber(\n    value: number | boolean | IWeight | IPercentage | (IWeight | IPercentage | number | undefined)[]\n  ): number {\n    if (typeof value === \"number\") {\n      return value;\n    } else if (typeof value === \"boolean\") {\n      return 0;\n    } else if (Weight_is(value)) {\n      return value.value;\n    } else if (Weight_isPct(value)) {\n      return value.value;\n    } else if (Array.isArray(value)) {\n      return this.toNumber(value[0] ?? 0);\n    } else {\n      return 0;\n    }\n  }\n\n  public evaluate(\n    expr: SyntaxNode\n  ): number | boolean | IWeight | IPercentage | (IWeight | IPercentage | number | undefined)[] {\n    if (expr.type.name === NodeName.Program || expr.type.name === NodeName.BlockExpression) {\n      let result: number | boolean | IWeight | (IWeight | IPercentage | number | undefined)[] | IPercentage = 0;\n      for (const child of getChildren(expr)) {\n        if (!child.type.isSkipped) {\n          result = this.evaluate(child);\n        }\n      }\n      return result;\n    } else if (expr.type.name === NodeName.BinaryExpression) {\n      const [left, operator, right] = getChildren(expr);\n      const evalLeft = this.evaluate(left);\n      const evalRight = this.evaluate(right);\n      const op = this.getValue(operator);\n      if (typeof evalLeft === \"boolean\" || typeof evalRight === \"boolean\") {\n        if (op === \"&&\") {\n          return evalLeft && evalRight;\n        } else if (op === \"||\") {\n          return evalLeft || evalRight;\n        } else {\n          this.error(`Unknown operator ${op}`, operator);\n        }\n      } else {\n        if (op === \">\") {\n          return comparing(evalLeft, evalRight, op);\n        } else if (op === \"<\") {\n          return comparing(evalLeft, evalRight, op);\n        } else if (op === \">=\") {\n          return comparing(evalLeft, evalRight, op);\n        } else if (op === \"<=\") {\n          return comparing(evalLeft, evalRight, op);\n        } else if (op === \"==\") {\n          return comparing(evalLeft, evalRight, op);\n        } else if (op === \"!=\") {\n          return comparing(evalLeft, evalRight, op);\n        } else {\n          if (Array.isArray(evalLeft) || Array.isArray(evalRight)) {\n            this.error(`You cannot apply ${op} to arrays`, operator);\n          }\n          if (op === \"+\") {\n            return this.add(evalLeft, evalRight);\n          } else if (op === \"-\") {\n            return this.subtract(evalLeft, evalRight);\n          } else if (op === \"*\") {\n            return this.multiply(evalLeft, evalRight);\n          } else if (op === \"/\") {\n            return this.divide(evalLeft, evalRight);\n          } else if (op === \"%\") {\n            return this.modulo(evalLeft, evalRight);\n          } else {\n            this.error(`Unknown operator ${op} between ${evalLeft} and ${evalRight}`, operator);\n          }\n        }\n      }\n    } else if (expr.type.name === NodeName.NumberExpression) {\n      const numberNode = expr.getChild(NodeName.Number);\n      if (numberNode == null) {\n        assert(NodeName.NumberExpression);\n      }\n      const value = parseFloat(this.getValue(numberNode));\n      const plusNode = expr.getChild(NodeName.Plus);\n      const sign = plusNode ? this.getValue(plusNode) : undefined;\n      return sign === \"-\" ? -value : value;\n    } else if (expr.type.name === NodeName.Percentage) {\n      const value = MathUtils_roundFloat(parseFloat(this.getValue(expr)), 2);\n      return Weight_buildPct(value);\n    } else if (expr.type.name === NodeName.Ternary) {\n      const [condition, then, or] = getChildren(expr);\n      return this.evaluate(condition) ? this.evaluate(then) : this.evaluate(or);\n    } else if (expr.type.name === NodeName.ForExpression) {\n      const variableNode = expr.getChild(NodeName.Variable);\n      const forInExpression = expr.getChild(NodeName.ForInExpression);\n      const blockNode = expr.getChild(NodeName.BlockExpression);\n      if (variableNode == null) {\n        assert(NodeName.ForExpression);\n      }\n      if (forInExpression == null) {\n        assert(NodeName.ForInExpression);\n      }\n      if (blockNode == null) {\n        assert(NodeName.BlockExpression);\n      }\n      const forIn = this.evaluate(forInExpression);\n      if (!Array.isArray(forIn)) {\n        this.error(`for in expression should return an array`, forInExpression);\n      }\n      const varKey = this.getValue(variableNode).replace(\"var.\", \"\");\n      for (let i = 1; i <= forIn.length; i += 1) {\n        this.vars[varKey] = i;\n        this.evaluate(blockNode);\n      }\n      return forIn.length;\n    } else if (expr.type.name === NodeName.IfExpression) {\n      const parenthesisNodes = expr.getChildren(NodeName.ParenthesisExpression);\n      const blockNodes = expr.getChildren(NodeName.BlockExpression);\n      while (parenthesisNodes.length > 0) {\n        const parenthesisNode = parenthesisNodes.shift()!;\n        const blockNode = blockNodes.shift()!;\n        const condition = this.evaluate(parenthesisNode);\n        if (condition) {\n          return this.evaluate(blockNode);\n        }\n      }\n      const lastBlock = blockNodes.shift();\n      if (lastBlock != null) {\n        return this.evaluate(lastBlock);\n      } else {\n        return 0;\n      }\n    } else if (expr.type.name === NodeName.ParenthesisExpression) {\n      const [node] = getChildren(expr);\n      if (node == null) {\n        assert(NodeName.ParenthesisExpression);\n      }\n      return this.evaluate(node);\n    } else if (expr.type.name === NodeName.StateVariableIndex) {\n      const [expression] = getChildren(expr);\n      return this.evaluate(expression);\n    } else if (expr.type.name === NodeName.AssignmentExpression) {\n      const [variableNode, expression] = getChildren(expr);\n      if (\n        variableNode == null ||\n        (variableNode.type.name !== NodeName.StateVariable &&\n          variableNode.type.name !== NodeName.VariableExpression &&\n          variableNode.type.name !== NodeName.Variable) ||\n        expression == null\n      ) {\n        assert(NodeName.AssignmentExpression);\n      }\n      if (variableNode.type.name === NodeName.VariableExpression) {\n        const nameNode = variableNode.getChild(NodeName.Keyword);\n        if (nameNode == null) {\n          this.error(`Missing variable name`, variableNode);\n        }\n        const indexExprs = variableNode.getChildren(NodeName.VariableIndex);\n        const variable = this.getValue(nameNode);\n        if (variable === \"rm1\") {\n          if (indexExprs.length > 0) {\n            this.error(`rm1 is not an array`, expr);\n          }\n          const evaluatedValue = this.evaluate(expression);\n          let value = Array.isArray(evaluatedValue) ? evaluatedValue[0] : evaluatedValue;\n          value = value ?? 0;\n          value = value === true ? 1 : value === false ? 0 : value;\n          value = Weight_convertToWeight(this.bindings.rm1, value, this.unit);\n          this.bindings.rm1 = value;\n          return value;\n        } else if (\n          this.mode === \"planner\" &&\n          (variable === \"reps\" ||\n            variable === \"weights\" ||\n            variable === \"RPE\" ||\n            variable === \"minReps\" ||\n            variable === \"timers\" ||\n            variable === \"setTime\" ||\n            variable === \"logrpes\" ||\n            variable === \"amraps\" ||\n            variable === \"askweights\" ||\n            variable === \"setVariationIndex\" ||\n            variable === \"exerciseVariationIndex\" ||\n            variable === \"descriptionIndex\" ||\n            variable === \"numberOfSets\")\n        ) {\n          return this.recordVariableUpdate(variable, expression, indexExprs, \"=\");\n        } else if (this.mode === \"update\" && variable === \"numberOfSets\") {\n          return this.changeNumberOfSets(expression, \"=\");\n        } else if (\n          this.mode === \"update\" &&\n          (variable === \"reps\" ||\n            variable === \"weights\" ||\n            variable === \"RPE\" ||\n            variable === \"amraps\" ||\n            variable === \"logrpes\" ||\n            variable === \"askweights\" ||\n            variable === \"minReps\" ||\n            variable === \"timers\" ||\n            variable === \"setTime\")\n        ) {\n          return this.changeBinding(variable, expression, indexExprs, \"=\");\n        } else {\n          this.error(`Unknown variable '${variable}'`, variableNode);\n        }\n      } else if (variableNode.type.name === NodeName.Variable) {\n        const varKey = this.getValue(variableNode).replace(\"var.\", \"\");\n        const value = this.evaluate(expression);\n        if (Weight_is(value) || Weight_isPct(value) || typeof value === \"number\") {\n          this.vars[varKey] = value;\n        } else {\n          this.vars[varKey] = value ? 1 : 0;\n        }\n        return this.vars[varKey];\n      } else {\n        const indexNode = variableNode.getChild(NodeName.StateVariableIndex);\n        const stateKeyNode = variableNode.getChild(NodeName.Keyword);\n        if (stateKeyNode != null) {\n          const stateKey = this.getValue(stateKeyNode);\n          let state: IProgramState | undefined;\n          if (indexNode == null) {\n            if (stateKey in this.state) {\n              state = this.state;\n            } else {\n              this.error(`There's no state variable '${stateKey}'`, variableNode);\n            }\n          } else {\n            const indexEval = this.evaluate(indexNode);\n            const index = this.toNumber(indexEval);\n            state = this.otherStates[index];\n          }\n          const value = this.evaluate(expression);\n          if (state != null) {\n            if (Weight_is(value) || Weight_isPct(value) || typeof value === \"number\") {\n              state[stateKey] = value;\n            } else {\n              state[stateKey] = value ? 1 : 0;\n            }\n          }\n          return value;\n        } else {\n          return 0;\n        }\n      }\n    } else if (expr.type.name === NodeName.IncAssignmentExpression) {\n      const [stateVar, incAssignmentExpr, expression] = getChildren(expr);\n      if (\n        stateVar == null ||\n        (stateVar.type.name !== NodeName.StateVariable &&\n          stateVar.type.name !== NodeName.VariableExpression &&\n          stateVar.type.name !== NodeName.Variable) ||\n        expression == null ||\n        incAssignmentExpr == null\n      ) {\n        assert(NodeName.IncAssignmentExpression);\n      }\n      if (stateVar.type.name === NodeName.VariableExpression) {\n        const nameNode = stateVar.getChild(NodeName.Keyword);\n        if (nameNode == null) {\n          this.error(`Missing variable name`, stateVar);\n        }\n        const indexExprs = stateVar.getChildren(NodeName.VariableIndex);\n        const variable = this.getValue(nameNode);\n        if (variable === \"rm1\") {\n          if (indexExprs.length > 0) {\n            this.error(`rm1 is not an array`, expr);\n          }\n          const evaluatedValue = this.evaluate(expression);\n          let value = Array.isArray(evaluatedValue) ? evaluatedValue[0] : evaluatedValue;\n          value = value ?? 0;\n          value = value === true ? 1 : value === false ? 0 : value;\n\n          const op = this.getValue(incAssignmentExpr);\n          if (op === \"+=\") {\n            this.bindings.rm1 = Weight_convertToWeight(\n              this.bindings.rm1,\n              this.add(this.bindings.rm1, value),\n              this.unit\n            );\n          } else if (op === \"-=\") {\n            this.bindings.rm1 = Weight_convertToWeight(\n              this.bindings.rm1,\n              this.subtract(this.bindings.rm1, value),\n              this.unit\n            );\n          } else if (op === \"*=\") {\n            this.bindings.rm1 = Weight_convertToWeight(\n              this.bindings.rm1,\n              this.multiply(this.bindings.rm1, value),\n              this.unit\n            );\n          } else if (op === \"/=\") {\n            this.bindings.rm1 = Weight_convertToWeight(\n              this.bindings.rm1,\n              this.divide(this.bindings.rm1, value),\n              this.unit\n            );\n          } else {\n            this.error(`Unknown operator ${op} after ${variable}`, incAssignmentExpr);\n          }\n          return this.bindings.rm1;\n        } else if (\n          this.mode === \"planner\" &&\n          (variable === \"reps\" ||\n            variable === \"weights\" ||\n            variable === \"RPE\" ||\n            variable === \"minReps\" ||\n            variable === \"timers\" ||\n            variable === \"setTime\" ||\n            variable === \"setVariationIndex\" ||\n            variable === \"exerciseVariationIndex\" ||\n            variable === \"descriptionIndex\" ||\n            variable === \"numberOfSets\")\n        ) {\n          const op = this.getValue(incAssignmentExpr);\n          if (op !== \"=\" && op !== \"+=\" && op !== \"-=\" && op !== \"*=\" && op !== \"/=\") {\n            this.error(`Unknown operator ${op} after ${variable}`, incAssignmentExpr);\n          }\n          return this.recordVariableUpdate(variable, expression, indexExprs, op);\n        } else if (this.mode === \"update\" && variable === \"numberOfSets\") {\n          const op = this.getValue(incAssignmentExpr);\n          if (op !== \"=\" && op !== \"+=\" && op !== \"-=\" && op !== \"*=\" && op !== \"/=\") {\n            this.error(`Unknown operator ${op} after ${variable}`, incAssignmentExpr);\n          }\n          return this.changeNumberOfSets(expression, op);\n        } else if (\n          this.mode === \"update\" &&\n          (variable === \"reps\" ||\n            variable === \"weights\" ||\n            variable === \"RPE\" ||\n            variable === \"minReps\" ||\n            variable === \"timers\" ||\n            variable === \"setTime\")\n        ) {\n          const op = this.getValue(incAssignmentExpr);\n          if (op !== \"=\" && op !== \"+=\" && op !== \"-=\" && op !== \"*=\" && op !== \"/=\") {\n            this.error(`Unknown operator ${op} after ${variable}`, incAssignmentExpr);\n          }\n          return this.changeBinding(variable, expression, indexExprs, op);\n        } else {\n          this.error(`Unknown variable '${variable}'`, stateVar);\n        }\n      } else if (stateVar.type.name === NodeName.Variable) {\n        const varKey = this.getValue(stateVar).replace(\"var.\", \"\");\n        let value = this.evaluate(expression);\n        if (!(Weight_is(value) || Weight_isPct(value) || typeof value === \"number\")) {\n          value = value ? 1 : 0;\n        }\n        const op = this.getValue(incAssignmentExpr);\n        if (op !== \"=\" && op !== \"+=\" && op !== \"-=\" && op !== \"*=\" && op !== \"/=\") {\n          this.error(`Unknown operator ${op} after ${varKey}`, incAssignmentExpr);\n        }\n        const currentValue = this.vars[varKey];\n        if (op === \"+=\") {\n          this.vars[varKey] = this.add(currentValue, value);\n        } else if (op === \"-=\") {\n          this.vars[varKey] = this.subtract(currentValue, value);\n        } else if (op === \"*=\") {\n          this.vars[varKey] = this.multiply(currentValue, value);\n        } else if (op === \"/=\") {\n          this.vars[varKey] = this.divide(currentValue, value);\n        } else {\n          this.error(`Unknown operator ${op} after ${varKey}`, incAssignmentExpr);\n        }\n        return this.vars[varKey];\n      } else {\n        const indexNode = stateVar.getChild(NodeName.StateVariableIndex);\n        const stateKeyNode = stateVar.getChild(NodeName.Keyword);\n        if (stateKeyNode != null) {\n          const stateKey = this.getValue(stateKeyNode);\n          let state: IProgramState | undefined;\n          if (indexNode == null) {\n            if (stateKey in this.state) {\n              state = this.state;\n            } else {\n              this.error(`There's no state variable '${stateKey}'`, stateVar);\n            }\n          } else {\n            const indexEval = this.evaluate(indexNode);\n            const index = this.toNumber(indexEval);\n            state = this.otherStates[index];\n          }\n\n          let value = this.evaluate(expression);\n          if (state != null) {\n            if (!(Weight_is(value) || Weight_isPct(value) || typeof value === \"number\")) {\n              value = value ? 1 : 0;\n            }\n            const op = this.getValue(incAssignmentExpr);\n            const currentValue = state[stateKey] ?? 0;\n            if (op === \"+=\") {\n              state[stateKey] = this.add(currentValue, value);\n            } else if (op === \"-=\") {\n              state[stateKey] = this.subtract(currentValue, value);\n            } else if (op === \"*=\") {\n              state[stateKey] = this.multiply(currentValue, value);\n            } else if (op === \"/=\") {\n              state[stateKey] = this.divide(currentValue, value);\n            } else {\n              this.error(`Unknown operator ${op} after state.${stateKey}`, incAssignmentExpr);\n            }\n            return state[stateKey];\n          } else {\n            return value;\n          }\n        } else {\n          return 0;\n        }\n      }\n    } else if (expr.type.name === NodeName.BuiltinFunctionExpression) {\n      const fns = this.fns;\n      const [keyword, ...args] = getChildren(expr);\n      if (keyword == null || keyword.type.name !== NodeName.Keyword) {\n        assert(NodeName.BuiltinFunctionExpression);\n      }\n      const name = this.getValue(keyword);\n      if (LiftoscriptFns_isFnName(name) && fns[name] != null) {\n        const argValues = args.map((a, index) => {\n          const value = this.evaluate(a);\n          this.validateFnArg(name, index, a, value);\n          return value;\n        });\n        const fn = fns[name];\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        return (fn as any)(argValues, this.fnContext, this.bindings);\n      } else {\n        this.error(`Unknown function '${name}'`, keyword);\n      }\n    } else if (expr.type.name === NodeName.UnaryExpression) {\n      const [, expression] = getChildren(expr);\n      if (expression == null) {\n        assert(NodeName.UnaryExpression);\n      }\n      const evaluated = this.evaluate(expression);\n      return !evaluated;\n    } else if (expr.type.name === NodeName.WeightExpression) {\n      return this.getWeight(expr) ?? Weight_build(0, this.unit);\n    } else if (expr.type.name === NodeName.VariableExpression) {\n      const [nameNode, ...indexExprs] = getChildren(expr);\n      if (nameNode == null) {\n        assert(NodeName.VariableExpression);\n      }\n      const name = this.getValue(nameNode) as keyof IScriptBindings;\n      if (indexExprs.some((e) => e.type.name !== NodeName.VariableIndex)) {\n        assert(NodeName.VariableIndex);\n      }\n      if (indexExprs.length === 0) {\n        let value = this.bindings[name];\n        if (Array.isArray(value) && name === \"minReps\") {\n          value = value.map((v, i) => (v as number) ?? this.bindings.reps[i]);\n        }\n        return value;\n      } else if (indexExprs.length === 1) {\n        const indexExpr = indexExprs[0];\n        const indexNode = getChildren(indexExpr)[0];\n        if (indexNode.type.name === NodeName.Wildcard || indexNode.type.name === NodeName.Current) {\n          this.error(`Can't use '*' or '_' as an index when reading from variables`, indexNode);\n        }\n        const indexEval = this.evaluate(indexNode);\n        let index: number;\n        if (Weight_is(indexEval) || Weight_isPct(indexEval)) {\n          index = indexEval.value;\n        } else if (typeof indexEval === \"number\") {\n          index = indexEval;\n        } else {\n          index = indexEval ? 1 : 0;\n        }\n        index -= 1;\n        const binding = this.bindings[name];\n        if (!Array.isArray(binding)) {\n          this.error(`Variable ${name} should be an array`, nameNode);\n        }\n        if (index >= binding.length) {\n          this.error(`Out of bounds index ${index + 1} for array ${name}`, nameNode);\n        }\n        let value = binding[index];\n        if (value == null) {\n          value = name === \"minReps\" ? (this.bindings.reps[index] ?? 0) : 0;\n        }\n        return value;\n      } else {\n        this.error(`Can't use [1:1] syntax when reading from the ${name} variable`, expr);\n      }\n    } else if (expr.type.name === NodeName.StateVariable) {\n      const stateKey = this.getStateKey(expr);\n      if (stateKey == null) {\n        this.error(`You cannot read from other exercises states, you can only write to them`, expr);\n      }\n      if (stateKey in this.state) {\n        return this.state[stateKey];\n      } else {\n        this.error(`There's no state variable '${stateKey}'`, expr);\n      }\n    } else if (expr.type.name === NodeName.Variable) {\n      const varKey = this.getValue(expr).replace(\"var.\", \"\");\n      if (varKey in this.vars) {\n        return this.vars[varKey];\n      } else {\n        this.error(`There's no variable '${varKey}'`, expr);\n      }\n    } else if (expr.type.name === NodeName.ForInExpression) {\n      const child = getChildren(expr)[0];\n      return this.evaluate(child);\n    } else {\n      this.error(`Unknown node type ${expr.node.type.name}`, expr);\n    }\n  }\n\n  private add(\n    one: IWeight | number | IPercentage,\n    two: IWeight | number | IPercentage\n  ): IWeight | number | IPercentage {\n    return this.operation(this.bindings.rm1, one, two, (a, b) => a + b);\n  }\n\n  private subtract(\n    one: IWeight | number | IPercentage,\n    two: IWeight | number | IPercentage\n  ): IWeight | number | IPercentage {\n    return this.operation(this.bindings.rm1, one, two, (a, b) => a - b);\n  }\n\n  private multiply(\n    one: IWeight | number | IPercentage,\n    two: IWeight | number | IPercentage\n  ): IWeight | number | IPercentage {\n    return this.operation(this.bindings.rm1, one, two, (a, b) => a * b);\n  }\n\n  // Division/modulo by zero returns 0 instead of NaN - NaN serializes to null in JSON\n  // and corrupts storage (fails schema validation on the server)\n  private divide(\n    one: IWeight | number | IPercentage,\n    two: IWeight | number | IPercentage\n  ): IWeight | number | IPercentage {\n    return this.operation(this.bindings.rm1, one, two, (a, b) => (b === 0 ? 0 : a / b));\n  }\n\n  private modulo(\n    one: IWeight | number | IPercentage,\n    two: IWeight | number | IPercentage\n  ): IWeight | number | IPercentage {\n    return this.operation(undefined, one, two, (a, b) => (b === 0 ? 0 : a % b));\n  }\n\n  private operation(\n    onerm: IWeight | undefined,\n    a: IWeight | number | IPercentage,\n    b: IWeight | number | IPercentage,\n    op: (x: number, y: number) => number\n  ): IWeight | number | IPercentage {\n    try {\n      return Weight_op(onerm, a, b, op);\n    } catch (error) {\n      const e = error as Error;\n      throw new LiftoscriptSyntaxError(e.message, 0, 0, 0, 0);\n    }\n  }\n}\n","import * as v from \"valibot\";\nimport { VWeight, VPercentage } from \"./types\";\nimport type { IScriptFnContext } from \"./models/progress\";\n\nconst optionalNumbers = v.array(v.optional(v.number()));\nconst optionalWeights = v.array(v.optional(VWeight));\n\nexport const VScriptBindings = v.object({\n  day: v.number(),\n  week: v.number(),\n  dayInWeek: v.number(),\n  originalWeights: v.array(v.union([VWeight, VPercentage])),\n  weights: optionalWeights,\n  completedWeights: optionalWeights,\n  rm1: VWeight,\n  reps: optionalNumbers,\n  minReps: optionalNumbers,\n  amraps: optionalNumbers,\n  askweights: optionalNumbers,\n  logrpes: optionalNumbers,\n  timers: optionalNumbers,\n  setTime: optionalNumbers,\n  completedSetTime: optionalNumbers,\n  RPE: optionalNumbers,\n  completedRPE: optionalNumbers,\n  completedReps: optionalNumbers,\n  completedRepsLeft: optionalNumbers,\n  isCompleted: v.array(v.picklist([0, 1])),\n  w: optionalWeights,\n  r: optionalNumbers,\n  mr: optionalNumbers,\n  cr: optionalNumbers,\n  cw: optionalWeights,\n  ns: v.number(),\n  programNumberOfSets: v.number(),\n  numberOfSets: v.number(),\n  completedNumberOfSets: v.number(),\n  setVariationIndex: v.number(),\n  exerciseVariationIndex: v.number(),\n  bodyweight: VWeight,\n  descriptionIndex: v.number(),\n  setIndex: v.number(),\n});\n\nexport type IScriptBindings = v.InferOutput<typeof VScriptBindings>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype IAnySchema = v.GenericSchema<any, any>;\n\nexport interface IScriptFnArgSignature {\n  readonly name: string;\n  readonly schema: IAnySchema;\n  readonly hint: string;\n  readonly optional?: boolean;\n}\n\nexport interface IScriptFnSignature {\n  readonly args?: readonly IScriptFnArgSignature[];\n  readonly variadic?: { readonly schema: IAnySchema; readonly hint: string };\n  readonly returns: IAnySchema;\n}\n\nconst scalar = v.union([v.number(), VWeight, VPercentage]);\nconst numberOrWeight = v.union([v.number(), VWeight]);\nconst numberOrWeightArray = v.array(v.nullish(numberOrWeight));\n// Booleans are allowed in aggregate fns because they historically were silently\n// ignored there, and erroring now would break existing user programs.\nconst aggregatable = v.union([scalar, v.boolean(), v.array(v.nullish(scalar))]);\n\nexport const liftoscriptFnSignatures = {\n  roundWeight: {\n    args: [{ name: \"weight\", schema: numberOrWeight, hint: \"a weight or a number\" }],\n    returns: VWeight,\n  },\n  roundConvertWeight: {\n    args: [{ name: \"weight\", schema: numberOrWeight, hint: \"a weight or a number\" }],\n    returns: VWeight,\n  },\n  calculateTrainingMax: {\n    args: [\n      { name: \"weight\", schema: numberOrWeight, hint: \"a weight or a number\" },\n      { name: \"reps\", schema: v.number(), hint: \"a number of reps\" },\n    ],\n    returns: VWeight,\n  },\n  calculate1RM: {\n    args: [\n      { name: \"weight\", schema: numberOrWeight, hint: \"a weight or a number\" },\n      { name: \"reps\", schema: v.number(), hint: \"a number of reps\" },\n    ],\n    returns: VWeight,\n  },\n  rpeMultiplier: {\n    args: [\n      { name: \"reps\", schema: numberOrWeight, hint: \"a number of reps\" },\n      { name: \"rpe\", schema: numberOrWeight, hint: \"an RPE value\", optional: true },\n    ],\n    returns: v.number(),\n  },\n  floor: {\n    args: [{ name: \"value\", schema: scalar, hint: \"a number, weight or percentage\" }],\n    returns: scalar,\n  },\n  ceil: {\n    args: [{ name: \"value\", schema: scalar, hint: \"a number, weight or percentage\" }],\n    returns: scalar,\n  },\n  round: {\n    args: [{ name: \"value\", schema: scalar, hint: \"a number, weight or percentage\" }],\n    returns: scalar,\n  },\n  sum: {\n    variadic: { schema: aggregatable, hint: \"numbers, weights, percentages or arrays of them\" },\n    returns: scalar,\n  },\n  min: {\n    variadic: { schema: aggregatable, hint: \"numbers, weights, percentages or arrays of them\" },\n    returns: scalar,\n  },\n  max: {\n    variadic: { schema: aggregatable, hint: \"numbers, weights, percentages or arrays of them\" },\n    returns: scalar,\n  },\n  zeroOrGte: {\n    args: [\n      { name: \"values\", schema: numberOrWeightArray, hint: \"an array, like 'completedReps'\" },\n      { name: \"targets\", schema: numberOrWeightArray, hint: \"an array, like 'reps'\" },\n    ],\n    returns: v.boolean(),\n  },\n  print: {\n    variadic: { schema: v.any(), hint: \"any values\" },\n    returns: v.any(),\n  },\n  increment: {\n    args: [{ name: \"value\", schema: scalar, hint: \"a number, weight or percentage\" }],\n    returns: scalar,\n  },\n  decrement: {\n    args: [{ name: \"value\", schema: scalar, hint: \"a number, weight or percentage\" }],\n    returns: scalar,\n  },\n  sets: {\n    args: [\n      { name: \"fromIndex\", schema: v.number(), hint: \"a number\" },\n      { name: \"toIndex\", schema: v.number(), hint: \"a number\" },\n      { name: \"minReps\", schema: v.number(), hint: \"a number\" },\n      { name: \"maxReps\", schema: v.number(), hint: \"a number\" },\n      { name: \"isAmrap\", schema: v.number(), hint: \"a number (0 or 1)\" },\n      { name: \"weight\", schema: scalar, hint: \"a weight, number or percentage\" },\n      { name: \"timer\", schema: v.number(), hint: \"a number of seconds\" },\n      { name: \"rpe\", schema: v.number(), hint: \"a number\" },\n      { name: \"shouldLogRpe\", schema: v.number(), hint: \"a number (0 or 1)\" },\n    ],\n    returns: v.number(),\n  },\n} as const satisfies Record<string, IScriptFnSignature>;\n\nexport type IScriptFnName = keyof typeof liftoscriptFnSignatures;\n\ntype IArgOutput<TArg> = TArg extends { schema: infer TSchema extends IAnySchema }\n  ? TArg extends { optional: true }\n    ? v.InferOutput<TSchema> | undefined\n    : v.InferOutput<TSchema>\n  : never;\n\ntype IFnArgs<TSig> = TSig extends { args: infer TArgs extends readonly unknown[] }\n  ? { -readonly [I in keyof TArgs]: IArgOutput<TArgs[I]> }\n  : TSig extends { variadic: { schema: infer TSchema extends IAnySchema } }\n    ? v.InferOutput<TSchema>[]\n    : never;\n\nexport type IScriptFunctions = {\n  [K in IScriptFnName]: (\n    args: IFnArgs<(typeof liftoscriptFnSignatures)[K]>,\n    context: IScriptFnContext,\n    bindings: IScriptBindings\n  ) => v.InferOutput<(typeof liftoscriptFnSignatures)[K][\"returns\"]>;\n};\n\nexport function LiftoscriptFns_isFnName(name: string): name is IScriptFnName {\n  return name in liftoscriptFnSignatures;\n}\n\nexport function LiftoscriptFns_arity(name: IScriptFnName): { min: number; max: number | undefined } {\n  const signature: IScriptFnSignature = liftoscriptFnSignatures[name];\n  if (signature.args == null) {\n    return { min: 0, max: undefined };\n  }\n  const min = signature.args.filter((a) => !a.optional).length;\n  return { min, max: signature.args.length };\n}\n\nexport function LiftoscriptFns_argSignature(name: IScriptFnName, index: number): IScriptFnArgSignature | undefined {\n  const signature: IScriptFnSignature = liftoscriptFnSignatures[name];\n  if (signature.variadic != null) {\n    return { name: \"values\", schema: signature.variadic.schema, hint: signature.variadic.hint };\n  }\n  return signature.args?.[index];\n}\n\nexport function LiftoscriptFns_isValidArg(name: IScriptFnName, index: number, value: unknown): boolean {\n  const argSignature = LiftoscriptFns_argSignature(name, index);\n  if (argSignature == null) {\n    return true;\n  }\n  if (argSignature.optional && value == null) {\n    return true;\n  }\n  return v.is(argSignature.schema, value);\n}\n\nexport type IScriptStaticType = \"number\" | \"weight\" | \"percentage\" | \"array\";\n\nexport function LiftoscriptFns_bindingStaticType(name: string): IScriptStaticType | undefined {\n  const schema = (VScriptBindings.entries as Record<string, IAnySchema | undefined>)[name];\n  if (schema == null) {\n    return undefined;\n  }\n  const samples: [IScriptStaticType, unknown][] = [\n    [\"array\", []],\n    [\"number\", 1],\n    [\"weight\", { value: 1, unit: \"lb\" }],\n    [\"percentage\", { value: 1, unit: \"%\" }],\n  ];\n  return samples.find(([, sample]) => v.is(schema, sample))?.[0];\n}\n\nexport function LiftoscriptFns_acceptsTypeAt(name: IScriptFnName, index: number, type: IScriptStaticType): boolean {\n  const samples: Record<IScriptStaticType, unknown[]> = {\n    number: [1],\n    weight: [{ value: 1, unit: \"lb\" }],\n    percentage: [{ value: 1, unit: \"%\" }],\n    array: [[1], [{ value: 1, unit: \"lb\" }], [{ value: 1, unit: \"%\" }], []],\n  };\n  return samples[type].some((sample) => LiftoscriptFns_isValidArg(name, index, sample));\n}\n","import { parser as liftoscriptParser } from \"./liftoscript\";\nimport { LRLanguage, indentNodeProp, foldNodeProp, foldInside } from \"@codemirror/language\";\nimport { styleTags, tags as t } from \"@lezer/highlight\";\n\nexport const liftoscriptParserWithMetadata = liftoscriptParser.configure({\n  props: [\n    styleTags({\n      StateVariable: t.variableName,\n      Number: t.number,\n      LineComment: t.lineComment,\n      Unit: t.unit,\n      Keyword: t.keyword,\n    }),\n    indentNodeProp.add({\n      IfExpression: (context) => context.column(context.node.from) + context.unit,\n    }),\n    foldNodeProp.add({\n      IfExpression: foldInside,\n    }),\n  ],\n});\n\nexport const liftoscriptLanguage = LRLanguage.define({\n  name: \"liftoscript\",\n  parser: liftoscriptParserWithMetadata,\n});\n","import { CollectionUtils_sort } from \"../utils/collection\";\nimport { Dialog_alert } from \"../utils/dialog\";\nimport { UidFactory_generateUid } from \"../utils/generator\";\nimport { ObjectUtils_clone, ObjectUtils_keys, ObjectUtils_values } from \"../utils/object\";\nimport { IGraph, IHistoryRecord, IMuscle, ISettings, IStorage } from \"../types\";\nimport { Weight_build } from \"../models/weight\";\nimport { PlannerExerciseEvaluator } from \"../pages/planner/plannerExerciseEvaluator\";\nimport { basicBeginnerProgram } from \"../programs/basicBeginnerProgram\";\nimport { IVersions } from \"../models/versionTracker\";\nimport { Settings_build } from \"../models/settings\";\nimport { Progress_getEntryId } from \"../models/progress\";\n\nlet latestMigrationVersion: number | undefined;\nexport function getLatestMigrationVersion(): string {\n  if (latestMigrationVersion == null) {\n    latestMigrationVersion = CollectionUtils_sort(\n      Object.keys(migrations).map((v) => parseInt(v, 10)),\n      (a, b) => b - a\n    )[0];\n  }\n  return latestMigrationVersion.toString();\n}\n\nexport const migrations = {\n  \"20240720152051_fix_null_entries_set_weights\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    for (const historyRecord of storage.history) {\n      for (const entry of historyRecord.entries) {\n        for (const set of entry.sets) {\n          if (set.weight?.value == null) {\n            set.weight = Weight_build(0, storage.settings.units || \"lb\");\n          }\n        }\n      }\n    }\n    return storage;\n  },\n  \"20240906074315_add_original_weight_to_sets\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    for (const historyRecord of storage.history) {\n      for (const entry of historyRecord.entries) {\n        for (const set of entry.sets) {\n          set.originalWeight = ObjectUtils_clone(set.weight);\n        }\n        for (const set of entry.warmupSets) {\n          set.originalWeight = ObjectUtils_clone(set.weight);\n        }\n      }\n    }\n    return storage;\n  },\n  \"20241101192254_add_deleted_gyms\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    storage.settings.deletedGyms = storage.settings.deletedGyms || [];\n    return storage;\n  },\n  \"20241207120042_add_reminder_timer\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    storage.settings.timers.reminder = storage.settings.timers.reminder ?? 900;\n    return storage;\n  },\n  \"20250211073832_switch_to_planner_programs\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    const currentProgram = storage.programs.find((p) => p.id === storage.currentProgramId);\n    if (currentProgram && currentProgram.planner == null) {\n      const plannerProgram = storage.programs.find((p) => p.planner != null) || {\n        ...basicBeginnerProgram,\n        id: UidFactory_generateUid(8),\n      };\n      storage.programs.push(plannerProgram);\n      storage.currentProgramId = plannerProgram.id;\n      Dialog_alert(\n        `Old-style programs are not supported anymore, your current program now is '${plannerProgram.name}'`\n      );\n    }\n    return storage;\n  },\n  \"20250305183455_cleanup_custom_exercises\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    for (const customExerciseKey of ObjectUtils_keys(storage.settings.exercises)) {\n      const customExercise = storage.settings.exercises[customExerciseKey]!;\n      delete customExercise.defaultEquipment;\n      for (const record of storage.history) {\n        for (const entry of record.entries) {\n          if (entry.exercise.id === customExerciseKey) {\n            entry.exercise = { id: customExerciseKey };\n            record.updatedAt = Date.now();\n          }\n        }\n      }\n      for (const key of ObjectUtils_keys(storage.settings.exerciseData)) {\n        if (key.includes(customExerciseKey)) {\n          if (!storage.settings.exerciseData[customExerciseKey]) {\n            const value = storage.settings.exerciseData[key];\n            delete storage.settings.exerciseData[key];\n            storage.settings.exerciseData[customExercise.id] = value;\n          }\n        }\n      }\n    }\n    return storage;\n  },\n  \"20250306192146_fix_empty_graphs\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    for (const customExerciseKey of ObjectUtils_keys(storage.settings.exercises)) {\n      if (Array.isArray(storage.settings.graphs)) {\n        for (const graph of storage.settings.graphs) {\n          if (graph.type === \"exercise\" && graph.id.includes(customExerciseKey) && graph.id !== customExerciseKey) {\n            graph.id = customExerciseKey;\n          }\n        }\n      }\n    }\n    return storage;\n  },\n  \"20250322014249_add_is_completed\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    for (const record of storage.history) {\n      for (const entry of record.entries) {\n        for (const set of entry.sets) {\n          if (set.completedReps != null) {\n            set.isCompleted = set.isCompleted ?? true;\n            set.completedWeight = set.completedWeight ?? ObjectUtils_clone(set.weight);\n          }\n        }\n      }\n    }\n    return storage;\n  },\n  \"20250329092730_add_workout_settings\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    storage.settings.workoutSettings = storage.settings.workoutSettings || {\n      targetType: \"target\",\n    };\n    return storage;\n  },\n  \"20250331001906_migrate_weights_to_completed_weights\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    for (const program of storage.programs) {\n      for (const week of program.planner?.weeks || []) {\n        for (const day of week.days) {\n          const newExerciseStr = PlannerExerciseEvaluator.changeWeightsToCompletedWeights(day.exerciseText);\n          if (newExerciseStr !== day.exerciseText) {\n            day.exerciseText = newExerciseStr;\n          }\n        }\n      }\n    }\n    return storage;\n  },\n  \"20250429083937_add_ids_to_planner_weeks_and_days\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    for (const program of storage.programs) {\n      for (const week of program.planner?.weeks || []) {\n        week.id = week.id || UidFactory_generateUid(8);\n        for (const day of week.days) {\n          day.id = day.id || UidFactory_generateUid(8);\n        }\n      }\n    }\n    return storage;\n  },\n  \"20250704123128_add_vtypes_and_restructure_subscriptions\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    if (storage.subscription) {\n      if (!Array.isArray(storage.subscription.apple)) {\n        storage.subscription.apple = ObjectUtils_keys(storage.subscription.apple as Record<string, null>).map(\n          (key) => ({\n            vtype: \"subscription_receipt\",\n            value: key,\n            id: UidFactory_generateUid(6),\n            createdAt: Date.now(),\n          })\n        );\n      }\n      if (!Array.isArray(storage.subscription.google)) {\n        storage.subscription.google = ObjectUtils_keys(storage.subscription.google as Record<string, null>).map(\n          (key) => ({\n            vtype: \"subscription_receipt\",\n            value: key,\n            id: UidFactory_generateUid(6),\n            createdAt: Date.now(),\n          })\n        );\n      }\n    }\n\n    for (const program of storage.programs) {\n      program.vtype = program.vtype ?? \"program\";\n      if (program.planner) {\n        program.planner.vtype = program.planner.vtype ?? \"planner\";\n      }\n    }\n    for (const record of storage.history) {\n      record.vtype = record.vtype ?? \"history_record\";\n    }\n    for (const key of ObjectUtils_keys(storage.stats?.weight || {})) {\n      for (const record of storage.stats?.weight[key] || []) {\n        record.vtype = record.vtype ?? \"stat\";\n      }\n    }\n    for (const key of ObjectUtils_keys(storage.stats?.length || {})) {\n      for (const record of storage.stats?.length[key] || []) {\n        record.vtype = record.vtype ?? \"stat\";\n      }\n    }\n    for (const key of ObjectUtils_keys(storage.stats?.percentage || {})) {\n      for (const record of storage.stats?.percentage[key] || []) {\n        record.vtype = record.vtype ?? \"stat\";\n      }\n    }\n    for (const gym of storage.settings.gyms || []) {\n      gym.vtype = gym.vtype ?? \"gym\";\n      for (const equipment of ObjectUtils_values(gym.equipment)) {\n        if (equipment) {\n          equipment.vtype = equipment.vtype ?? \"equipment_data\";\n        }\n      }\n    }\n    for (const exercise of ObjectUtils_values(storage.settings.exercises)) {\n      if (exercise) {\n        exercise.vtype = exercise.vtype ?? \"custom_exercise\";\n      }\n    }\n    if (Array.isArray(storage.settings.graphs || [])) {\n      // @ts-ignore\n      for (const graph of storage.settings.graphs || []) {\n        graph.vtype = graph.vtype ?? \"graph\";\n      }\n    }\n    return storage;\n  },\n  \"20250719104230_add_cloned_at_to_programs\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    for (const program of storage.programs) {\n      program.clonedAt = program.clonedAt ?? Date.now() - Math.round(Math.random() * 1000000);\n    }\n    return storage;\n  },\n  \"20250720120545_make_graphs_atomic_object\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    if (!storage.settings.graphs.vtype) {\n      storage.settings.graphs = {\n        vtype: \"graphs\",\n        graphs: storage.settings.graphs as unknown as IGraph[],\n      };\n      if ((storage._versions?.settings as IVersions<ISettings>)?.graphs) {\n        // @ts-ignore\n        storage._versions.settings.graphs = Date.now();\n      }\n    }\n    return storage;\n  },\n  \"20250815161850_add_gyms_if_empty\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    if (storage.settings.gyms && storage.settings.gyms.length === 0) {\n      storage.settings.gyms.push({\n        ...Settings_build().gyms[0],\n      });\n    }\n    return storage;\n  },\n  \"20251005115332_migrate_affiliates_to_affiliates_data\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    for (const key of Object.keys(storage.affiliates || {})) {\n      const value = storage.affiliates[key];\n      if (typeof value === \"number\") {\n        storage.affiliates[key] = { id: key, type: \"program\", timestamp: value, vtype: \"affiliate\" };\n      }\n    }\n    // @ts-ignore\n    if (storage._versions?.affiliates && !(\"items\" in storage._versions?.affiliates)) {\n      const items = storage._versions.affiliates;\n      storage._versions.affiliates = { items, deleted: {} };\n    }\n    return storage;\n  },\n  \"20251030203130_add_muscle_groups\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    storage.settings.muscleGroups = storage.settings.muscleGroups || { vtype: \"muscle_groups_settings\", data: {} };\n    return storage;\n  },\n  \"20251230101232_fix_gym_names\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    for (const gym of storage.settings.gyms || []) {\n      if (gym.name == null) {\n        gym.name = \"Main\";\n      }\n    }\n    return storage;\n  },\n  \"20251231182918_add_vtypes_and_indexes_to_entries_and_sets\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    for (const record of storage.history) {\n      record.vtype = record.vtype || \"history_record\";\n      const progressUi = record.ui;\n      if (progressUi) {\n        progressUi.vtype = progressUi.vtype || \"progress_ui\";\n        progressUi.id = UidFactory_generateUid(8);\n      }\n      for (let entryIndex = 0; entryIndex < record.entries.length; entryIndex++) {\n        const entry = record.entries[entryIndex];\n        entry.vtype = entry.vtype || \"history_entry\";\n        entry.index = entry.index ?? entryIndex;\n        for (let setIndex = 0; setIndex < entry.sets.length; setIndex++) {\n          const set = entry.sets[setIndex];\n          set.vtype = set.vtype || \"set\";\n          set.index = set.index ?? setIndex;\n        }\n        for (let setIndex = 0; setIndex < entry.warmupSets.length; setIndex++) {\n          const set = entry.warmupSets[setIndex];\n          set.vtype = set.vtype || \"set\";\n          set.index = set.index ?? setIndex;\n        }\n      }\n    }\n    return storage;\n  },\n  \"20260103180023_add_progress_array\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    storage.progress = storage.progress || [];\n    return storage;\n  },\n  \"20260124114134_convert_muscle_multipliers_to_object\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    for (const key of ObjectUtils_keys(storage.settings.exerciseData)) {\n      const exerciseData = storage.settings.exerciseData[key];\n      if (exerciseData?.muscleMultipliers && Array.isArray(exerciseData.muscleMultipliers)) {\n        const oldMultipliers = exerciseData.muscleMultipliers as Array<{ muscle: IMuscle; multiplier: number }>;\n        const newMultipliers: Partial<Record<IMuscle, number>> = {};\n        for (const mm of oldMultipliers) {\n          newMultipliers[mm.muscle] = mm.multiplier;\n        }\n        exerciseData.muscleMultipliers = newMultipliers;\n      }\n    }\n    return storage;\n  },\n  \"20260208210220_fill_sets_with_ids\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    for (const record of storage.history) {\n      for (const entry of record.entries) {\n        for (const set of entry.sets) {\n          if (!set.id) {\n            set.id = UidFactory_generateUid(6);\n          }\n        }\n        for (const set of entry.warmupSets) {\n          if (!set.id) {\n            set.id = UidFactory_generateUid(6);\n          }\n        }\n      }\n    }\n    for (const record of storage.progress || []) {\n      for (const entry of record.entries) {\n        for (const set of entry.sets) {\n          if (!set.id) {\n            set.id = UidFactory_generateUid(6);\n          }\n        }\n        for (const set of entry.warmupSets) {\n          if (!set.id) {\n            set.id = UidFactory_generateUid(6);\n          }\n        }\n      }\n    }\n    return storage;\n  },\n  \"20260304084247_fill_entries_with_ids\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    for (const record of storage.history) {\n      for (const entry of record.entries) {\n        if (!entry.id) {\n          entry.id = Progress_getEntryId(entry.exercise);\n        }\n      }\n    }\n    for (const record of storage.progress || []) {\n      for (const entry of record.entries) {\n        if (!entry.id) {\n          entry.id = Progress_getEntryId(entry.exercise);\n        }\n      }\n    }\n    return storage;\n  },\n  \"20260628120000_move_amrap_modal_to_progress\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    // amrapModal and currentEntryIndex moved from progress.ui to progress so they version-sync across devices\n    // like setTimer. Carry over the values from a workout left open across the upgrade.\n    for (const record of storage.progress || []) {\n      const legacyUi = record.ui as\n        | undefined\n        | { amrapModal?: IHistoryRecord[\"amrapModal\"]; currentEntryIndex?: number };\n      if (legacyUi?.amrapModal != null) {\n        if (record.amrapModal == null) {\n          record.amrapModal = legacyUi.amrapModal;\n        }\n        delete legacyUi.amrapModal;\n      }\n      if (legacyUi?.currentEntryIndex != null) {\n        if (record.currentEntryIndex == null) {\n          record.currentEntryIndex = legacyUi.currentEntryIndex;\n        }\n        delete legacyUi.currentEntryIndex;\n      }\n    }\n    return storage;\n  },\n  \"20260702120000_sanitize_pipe_bang_in_custom_exercise_names\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    // `|` now separates exercise variations and `!` marks the current one in Liftoscript, so custom\n    // exercise names can no longer contain them. Occurrence is near-zero (no built-in uses them).\n    const renames: { from: string; to: string }[] = [];\n    for (const customExerciseKey of ObjectUtils_keys(storage.settings.exercises)) {\n      const customExercise = storage.settings.exercises[customExerciseKey];\n      if (customExercise?.name != null && /[|!]/.test(customExercise.name)) {\n        const from = customExercise.name;\n        const to = from.replace(/[|!]/g, \"-\").replace(/\\s+/g, \" \").trim();\n        customExercise.name = to;\n        if (to !== from) {\n          renames.push({ from, to });\n        }\n      }\n    }\n    // Programs reference custom exercises by name in their planner text, so the same names must be\n    // rewritten there - otherwise the parser reads the old `|`/`!` as variation syntax and misparses.\n    if (renames.length > 0) {\n      renames.sort((a, b) => b.from.length - a.from.length);\n      const escapeRegExp = (s: string): string => s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n      for (const program of storage.programs || []) {\n        for (const week of program.planner?.weeks || []) {\n          for (const day of week.days || []) {\n            for (const rename of renames) {\n              day.exerciseText = day.exerciseText.replace(new RegExp(escapeRegExp(rename.from), \"gi\"), rename.to);\n            }\n          }\n        }\n      }\n    }\n    return storage;\n  },\n};\n","import { getLatestMigrationVersion, migrations } from \"./migrations\";\nimport { ObjectUtils_keys } from \"../utils/object\";\nimport { IPartialStorage, IStorage } from \"../types\";\nimport { Storage_partialStorageToStorage } from \"../models/storage\";\nimport RB from \"rollbar\";\ndeclare const Rollbar: RB;\n\nexport function unrunMigrations(storage: { version: string }, maxVersion?: string): Array<keyof typeof migrations> {\n  const currentVersion = storage.version != null ? parseInt(storage.version.toString(), 10) : 0;\n  const keys = ObjectUtils_keys(migrations);\n  keys.sort((a, b) => parseInt(a, 10) - parseInt(b, 10));\n  const maxVersionInt = maxVersion != null ? parseInt(maxVersion, 10) : undefined;\n  return keys.filter((versionStr) => {\n    const version = parseInt(versionStr, 10);\n    return version > currentVersion && (maxVersionInt != null ? version <= maxVersionInt : true);\n  });\n}\n\nexport function runMigrations(storage: IStorage | IPartialStorage, maxVersion?: string): IStorage {\n  const newVersions = unrunMigrations(storage, maxVersion);\n  let result = Storage_partialStorageToStorage(storage);\n  for (const version of newVersions) {\n    try {\n      result = migrations[version](result);\n    } catch (error) {\n      const e = error as Error;\n      console.error(`Error running migration ${version}: ${e}`);\n    }\n  }\n  result = { ...result, version: getLatestMigrationVersion() };\n  return result;\n}\n","import { IndexedDBUtils_get } from \"../utils/indexeddb\";\nimport { Persistence } from \"../utils/persistence\";\nimport { IPartialStorage } from \"../types\";\n\nexport interface IAccount {\n  id: string;\n  name?: string;\n  email?: string;\n  numberOfPrograms?: number;\n  numberOfWorkouts?: number;\n  affiliateEnabled?: boolean;\n  isCurrent: boolean;\n}\n\nexport function Account_getFromStorage(id: string, email: string, storage: IPartialStorage): IAccount {\n  return {\n    id,\n    email,\n    name: storage.settings.nickname,\n    numberOfPrograms: storage.programs?.length,\n    numberOfWorkouts: storage.history?.length,\n    affiliateEnabled: storage.settings.affiliateEnabled,\n    isCurrent: true,\n  };\n}\n\nexport async function Account_getAll(persistence: Persistence): Promise<IAccount[]> {\n  const currentAccount = (await IndexedDBUtils_get(\"current_account\")) as string;\n  const summaries = await persistence.getAccountSummaries();\n  return summaries.map((summary) => ({ ...summary, isCurrent: summary.id === currentAccount }));\n}\n","import { Service } from \"../api/service\";\nimport { IStorage } from \"../types\";\nimport { IEither } from \"../utils/types\";\n\n// The \"debug_\" prefix on tempUserId is the single source of truth for a debug session:\n// it forces nosync on every load (see getInitialState) and, since it's never a real\n// user's tempUserId, an accidental sync can only ever land on a throwaway account.\nexport const adminDebugPrefix = \"debug_\";\n\nexport function AdminDebug_scrambledTempUserId(userId: string): string {\n  return `${adminDebugPrefix}${userId}`;\n}\n\nexport function AdminDebug_isDebugAccountId(id: string | undefined): boolean {\n  return id != null && id.startsWith(adminDebugPrefix);\n}\n\nexport async function AdminDebug_fetchStorage(\n  service: Service,\n  tempUserId: string,\n  userId: string,\n  adminKey: string,\n  storageId?: string\n): Promise<IEither<IStorage, string>> {\n  try {\n    const response = await service.getStorage(tempUserId, userId, storageId, adminKey);\n    if (response.storage == null) {\n      return { success: false, error: \"User not found or invalid admin key\" };\n    }\n    const storage: IStorage = { ...response.storage, tempUserId: AdminDebug_scrambledTempUserId(userId) };\n    return { success: true, data: storage };\n  } catch (e) {\n    return { success: false, error: e instanceof Error ? e.message : String(e) };\n  }\n}\n\nexport async function AdminDebug_fetchDebugSnapshotStorage(\n  service: Service,\n  userId: string,\n  adminKey: string,\n  timestamp: string\n): Promise<IEither<IStorage, string>> {\n  try {\n    const snapshotStorage = await service.getDebugSnapshotStorage(userId, adminKey, timestamp);\n    if (snapshotStorage == null) {\n      return { success: false, error: \"Snapshot not found or invalid admin key\" };\n    }\n    const storage: IStorage = { ...snapshotStorage, tempUserId: AdminDebug_scrambledTempUserId(userId) };\n    return { success: true, data: storage };\n  } catch (e) {\n    return { success: false, error: e instanceof Error ? e.message : String(e) };\n  }\n}\n","import { lb } from \"lens-shmens\";\nimport {\n  emptyProgramId,\n  IEvaluatedProgram,\n  Program_evaluate,\n  Program_getFirstProgramExercise,\n  Program_create,\n  Program_createFromHistoryRecord,\n} from \"./program\";\nimport { IDispatch } from \"../ducks/types\";\nimport { ObjectUtils_diff, ObjectUtils_keys, ObjectUtils_clone, ObjectUtils_entries } from \"../utils/object\";\nimport { updateState, IState } from \"./state\";\nimport { IProgram, IDayData, IProgramState, ISettings, IHistoryRecord } from \"../types\";\nimport { Dialog_alert } from \"../utils/dialog\";\nimport { updateStateVariable } from \"./editProgramLenses\";\nimport { IPlannerProgramExercise, IPlannerExerciseState, IPlannerState } from \"../pages/planner/models/types\";\nimport { PP_iterate2 } from \"./pp\";\nimport { PlannerProgramExercise_getState } from \"../pages/planner/models/plannerProgramExercise\";\nimport { ProgramToPlanner } from \"./programToPlanner\";\nimport { Thunk_pushToEditProgram } from \"../ducks/thunks\";\n\nexport function EditProgram_properlyUpdateStateVariableInPlace(\n  program: IEvaluatedProgram,\n  programExercise: IPlannerProgramExercise,\n  values: Partial<IProgramState>\n): IEvaluatedProgram {\n  const state = PlannerProgramExercise_getState(programExercise);\n  values = ObjectUtils_diff(state, values);\n  if (ObjectUtils_keys(values).length === 0) {\n    return program;\n  }\n  if (!programExercise.progress) {\n    return program;\n  }\n  const newEvalutedProgram = ObjectUtils_clone(program);\n  PP_iterate2(newEvalutedProgram.weeks, (ex) => {\n    if (ex.key === programExercise.key) {\n      const progress = ex.progress;\n      if (progress) {\n        for (const [stateKey, newValue] of ObjectUtils_entries(values)) {\n          if (newValue == null) {\n            delete progress.stateMetadata?.[stateKey];\n          }\n          if (newValue == null || typeof newValue === \"string\") {\n            progress.state = updateStateVariable(state, stateKey, newValue);\n          } else {\n            progress.state = { ...progress.state, [stateKey]: newValue };\n          }\n        }\n      }\n    }\n  });\n  return newEvalutedProgram;\n}\n\nexport function EditProgram_deleteProgram(dispatch: IDispatch, program: IProgram, customPrograms: IProgram[]): void {\n  updateState(\n    dispatch,\n    [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"programs\")\n        .recordModify((pgms) => pgms.filter((p) => p.id !== program.id)),\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"currentProgramId\")\n        .recordModify((id) =>\n          id === program.id ? (customPrograms.filter((p) => p.id !== program.id)[0]?.id ?? emptyProgramId) : id\n        ),\n    ],\n    \"Delete program\"\n  );\n}\n\nexport function EditProgram_setName(dispatch: IDispatch, program: IProgram, name: string): void {\n  updateState(\n    dispatch,\n    [\n      lb<IState>().p(\"storage\").p(\"programs\").findBy(\"id\", program.id).p(\"name\").record(name),\n      lb<IState>().p(\"storage\").p(\"programs\").findBy(\"id\", program.id).pi(\"planner\").p(\"name\").record(name),\n    ],\n    \"Update program name\"\n  );\n}\n\nexport function EditProgram_setNextDay(dispatch: IDispatch, programId: string, nextDay: number): void {\n  updateState(\n    dispatch,\n    [lb<IState>().p(\"storage\").p(\"programs\").findBy(\"id\", programId).p(\"nextDay\").record(nextDay)],\n    \"Set next day\"\n  );\n}\n\nexport function EditProgram_initPlannerState(\n  id: string,\n  program: IProgram,\n  focusedDay?: IDayData,\n  key?: string\n): IPlannerState {\n  return {\n    id,\n    current: { program },\n    ui: {\n      weekIndex: focusedDay?.week != null ? focusedDay.week - 1 : 0,\n      focusedDay: focusedDay ? { ...focusedDay, key } : undefined,\n      mode: \"ui\",\n      exerciseUi: { edit: new Set(), collapsed: new Set() },\n      dayUi: { collapsed: new Set() },\n      weekUi: { collapsed: new Set() },\n    },\n    history: { past: [], future: [] },\n  };\n}\n\nexport function EditProgram_initPlannerProgramExerciseState(\n  program: IProgram,\n  settings: ISettings,\n  key: string,\n  dayData: Required<IDayData>,\n  fromWorkout: boolean\n): IPlannerExerciseState {\n  const evaluatedProgram = Program_evaluate(program, settings);\n  const programExercise = Program_getFirstProgramExercise(evaluatedProgram, key);\n  return {\n    current: { program },\n    history: { past: [], future: [] },\n    ui: {\n      weekIndex: dayData.week - 1,\n      isProgressEnabled: !!programExercise?.progress,\n      isUpdateEnabled: !!programExercise?.update,\n      isExerciseVariationsEnabled: (programExercise?.exerciseVariations?.length ?? 0) > 1,\n      modeTabIndex: fromWorkout ? 1 : 0,\n      acrossWeeksTabIndex: fromWorkout ? 1 : undefined,\n      fromWorkout,\n    },\n  };\n}\n\n// A composite-key change (exercise-type swap, or add/remove/reorder of exercise variations) re-keys the\n// exercise. The keyed edit state lives at `${programId}_${key}`, so we clone it to the new key, reset undo\n// history (the key boundary is a commit point undo can't cross), and stash `pendingNewKey` on the old\n// entry — NavScreenProgram reacts by re-pointing the route via setParams and dropping the orphan.\nexport function EditProgram_migrateExerciseStateKey(\n  dispatch: IDispatch,\n  programId: string,\n  oldStateKey: string,\n  newKey: string\n): void {\n  const newStateKey = `${programId}_${newKey}`;\n  updateState(\n    dispatch,\n    [\n      lb<IState>()\n        .p(\"editProgramExerciseStates\")\n        .recordModify((states) => {\n          const currentState = states[oldStateKey];\n          if (!currentState) {\n            return states;\n          }\n          return {\n            ...states,\n            [oldStateKey]: { ...currentState, ui: { ...currentState.ui, pendingNewKey: newKey } },\n            [newStateKey]: {\n              ...currentState,\n              history: { past: [], future: [] },\n              ui: {\n                ...currentState.ui,\n                exercisePickerState: undefined,\n                exercisePickerChange: undefined,\n                exercisePickerVariationIndex: undefined,\n              },\n            },\n          };\n        }),\n    ],\n    \"Update exercise key\"\n  );\n}\n\nexport function EditProgram_create(dispatch: IDispatch, name: string): void {\n  const newProgram: IProgram = {\n    ...Program_create(name),\n    planner: {\n      vtype: \"planner\",\n      name,\n      weeks: [{ name: \"Week 1\", days: [{ name: \"Day 1\", exerciseText: \"\" }] }],\n    },\n  };\n\n  updateState(\n    dispatch,\n    [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"programs\")\n        .recordModify((pgms) => [...pgms, newProgram]),\n      lb<IState>().p(\"storage\").p(\"currentProgramId\").record(newProgram.id),\n    ],\n    \"Create program\"\n  );\n  dispatch(Thunk_pushToEditProgram());\n}\n\nexport function EditProgram_createFromHistoryRecord(\n  dispatch: IDispatch,\n  name: string,\n  record: IHistoryRecord,\n  settings: ISettings\n): void {\n  const program = Program_createFromHistoryRecord(name, record, settings);\n  updateState(\n    dispatch,\n    [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"programs\")\n        .recordModify((pgms) => [...pgms, program]),\n    ],\n    \"Create program from adhoc\"\n  );\n  Dialog_alert(`Created new program '${program.name}' with this workout`);\n}\n\nexport function EditProgram_updateProgram(dispatch: IDispatch, program: IProgram): void {\n  updateState(\n    dispatch,\n    [lb<IState>().p(\"storage\").p(\"programs\").findBy(\"id\", program.id).record(program)],\n    \"Update program\"\n  );\n}\n\nexport function EditProgram_regenerateProgram(\n  program: IProgram,\n  evaluatedProgram: IEvaluatedProgram,\n  settings: ISettings\n): IProgram {\n  const newPlanner = new ProgramToPlanner(evaluatedProgram, settings).convertToPlanner();\n  return { ...program, planner: newPlanner };\n}\n","import { ILensRecordingPayload, LensBuilder } from \"lens-shmens\";\nimport { IExerciseType, IPercentage, IProgramExercise, IProgramState, ISettings, IWeight } from \"../types\";\nimport { ObjectUtils_entries } from \"../utils/object\";\nimport { Exercise_get } from \"./exercise\";\nimport { Weight_is, Weight_build, Weight_isPct, Weight_buildPct } from \"./weight\";\nimport { IPlannerProgramExercise } from \"../pages/planner/models/types\";\n\nexport function EditProgramLenses_changeExercise<T>(\n  prefix: LensBuilder<T, IProgramExercise, {}>,\n  settings: ISettings,\n  oldExerciseType: IExerciseType,\n  newExerciseType: IExerciseType\n): ILensRecordingPayload<T>[] {\n  const oldExercise = Exercise_get(oldExerciseType, settings.exercises);\n  const exercise = Exercise_get(newExerciseType, settings.exercises);\n  return [\n    prefix.p(\"exerciseType\").p(\"id\").record(exercise.id),\n    prefix.p(\"exerciseType\").p(\"equipment\").record(exercise.equipment),\n    prefix.p(\"state\").recordModify((oldState) => {\n      if (\"weight\" in oldState) {\n        return {\n          ...oldState,\n          weight: settings.units === \"kg\" ? exercise.startingWeightKg : exercise.startingWeightLb,\n        };\n      } else {\n        return oldState;\n      }\n    }),\n    prefix.p(\"name\").recordModify((oldName) => {\n      if (oldExercise != null) {\n        return oldName.replace(oldExercise.name, exercise.name);\n      } else {\n        return exercise.name;\n      }\n    }),\n  ];\n}\n\nfunction editStateVariable<T>(\n  prefix: LensBuilder<T, IPlannerProgramExercise, {}>,\n  stateKey: string,\n  newValue?: string | number | IWeight | IPercentage\n): ILensRecordingPayload<T> {\n  return prefix\n    .pi(\"progress\")\n    .p(\"state\")\n    .recordModify((state) => {\n      if (newValue == null || typeof newValue === \"string\") {\n        return updateStateVariable(state, stateKey, newValue);\n      } else {\n        return { ...state, [stateKey]: newValue };\n      }\n    });\n}\n\nfunction removeStateVariableMetadata<T>(\n  prefix: LensBuilder<T, IPlannerProgramExercise, {}>,\n  stateKey: string\n): ILensRecordingPayload<T> {\n  return prefix\n    .pi(\"progress\")\n    .p(\"stateMetadata\")\n    .recordModify((state) => {\n      const newState = { ...state };\n      delete newState[stateKey];\n      return newState;\n    });\n}\n\nexport function EditProgramLenses_properlyUpdateStateVariable<T>(\n  prefix: LensBuilder<T, IPlannerProgramExercise, {}>,\n  values: Partial<IProgramState>\n): ILensRecordingPayload<T>[] {\n  return ObjectUtils_entries(values).flatMap(([stateKey, newValue]) => {\n    if (newValue == null) {\n      return [removeStateVariableMetadata(prefix, stateKey), editStateVariable(prefix, stateKey, newValue)];\n    } else {\n      return [editStateVariable(prefix, stateKey, newValue)];\n    }\n  });\n}\n\nexport function updateStateVariable(state: IProgramState, stateKey: string, newValue?: string): IProgramState {\n  if (newValue === \"\") {\n    newValue = \"0\";\n  }\n  let v = newValue != null && newValue !== \"\" ? parseFloat(newValue) : null;\n  if (v != null && isNaN(v)) {\n    v = 0;\n  }\n  const newState = { ...state };\n  const value = state[stateKey];\n  if (Weight_is(value) && v != null && v < 0) {\n    v = 0;\n  }\n  if (v != null) {\n    newState[stateKey] = Weight_is(value)\n      ? Weight_build(v || 0, value.unit)\n      : Weight_isPct(value)\n        ? Weight_buildPct(v)\n        : v;\n  } else {\n    delete newState[stateKey];\n  }\n  return newState;\n}\n","import { IDispatch } from \"../ducks/types\";\nimport { lb } from \"lens-shmens\";\nimport { ISet, IHistoryRecord, IExerciseType, ISettings } from \"../types\";\nimport { IPlannerProgramExercise } from \"../pages/planner/models/types\";\nimport { ObjectUtils_clone } from \"../utils/object\";\nimport { Reps_newSet } from \"./set\";\nimport { Exercise_getIsUnilateral } from \"./exercise\";\n\nexport function EditProgressEntry_showEditSetModal(\n  dispatch: IDispatch,\n  settings: ISettings,\n  isWarmup: boolean,\n  entryIndex: number,\n  setIndex?: number,\n  programExercise?: IPlannerProgramExercise,\n  exerciseType?: IExerciseType,\n  set?: ISet\n): void {\n  const isUnilateral = exerciseType ? Exercise_getIsUnilateral(exerciseType, settings) : false;\n  dispatch({\n    type: \"UpdateProgress\",\n    lensRecordings: [\n      lb<IHistoryRecord>()\n        .pi(\"ui\", {})\n        .p(\"editSetModal\")\n        .record({\n          programExerciseId: programExercise?.key,\n          set: set ? ObjectUtils_clone(set) : Reps_newSet(isUnilateral, setIndex ?? 0),\n          isWarmup,\n          entryIndex,\n          setIndex,\n          exerciseType,\n        }),\n    ],\n    desc: \"show-target-bottomsheet\",\n  });\n}\n","import { IDispatch } from \"../ducks/types\";\nimport { lb } from \"lens-shmens\";\nimport {\n  ILength,\n  IPercentage,\n  ISettings,\n  IStatsHealth,\n  IStatsHealthKey,\n  IStatsHealthValue,\n  IStatsLength,\n  IStatsLengthValue,\n  IStatsPercentage,\n  IStatsPercentageValue,\n  IStatsWeight,\n  IStatsWeightValue,\n  IWeight,\n  statsHealthDef,\n} from \"../types\";\nimport { IHealthDailyResult, IHealthDailyValue } from \"../utils/healthAdapter\";\nimport { IState } from \"./state\";\nimport { ObjectUtils_keys } from \"../utils/object\";\nimport { CollectionUtils_sort, CollectionUtils_sortBy, CollectionUtils_uniqBy } from \"../utils/collection\";\nimport { Weight_roundTo005, Weight_convertTo } from \"./weight\";\nimport { Length_convertTo } from \"./length\";\n\nexport interface IHealthResponse {\n  added: {\n    timestamp: number;\n    type: \"bodyweight\" | \"bodyfat\" | \"waist\";\n    uuid: string;\n    value: IWeight | IPercentage | ILength;\n  }[];\n  anchor: string;\n  deleted: string[];\n}\n\nexport function EditStats_toggleWeightStats(dispatch: IDispatch, name: keyof IStatsWeight, value: boolean): void {\n  dispatch({\n    type: \"UpdateSettings\",\n    lensRecording: lb<ISettings>().p(\"statsEnabled\").p(\"weight\").p(name).record(value),\n    desc: `Toggle ${name} weight stat`,\n  });\n}\n\nexport function EditStats_toggleLengthStats(dispatch: IDispatch, name: keyof IStatsLength, value: boolean): void {\n  dispatch({\n    type: \"UpdateSettings\",\n    lensRecording: lb<ISettings>().p(\"statsEnabled\").p(\"length\").p(name).record(value),\n    desc: `Toggle ${name} length stat`,\n  });\n}\n\nexport function EditStats_togglePercentageStats(\n  dispatch: IDispatch,\n  name: keyof IStatsPercentage,\n  value: boolean\n): void {\n  dispatch({\n    type: \"UpdateSettings\",\n    lensRecording: lb<ISettings>().p(\"statsEnabled\").p(\"percentage\").p(name).record(value),\n    desc: `Toggle ${name} percentage stat`,\n  });\n}\n\nexport function EditStats_addWeightStats(\n  dispatch: IDispatch,\n  payload: Partial<Record<keyof IStatsWeight, IWeight>>,\n  timestamp?: number\n): void {\n  const sharedTime = timestamp ?? Date.now();\n  dispatch({\n    type: \"UpdateState\",\n    lensRecording: [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"stats\")\n        .p(\"weight\")\n        .recordModify((st) => {\n          return ObjectUtils_keys(payload).reduce(\n            (memo, key) => {\n              memo[key] = [\n                { vtype: \"stat\", value: payload[key]!, timestamp: sharedTime, updatedAt: sharedTime },\n                ...(memo[key] || []),\n              ];\n              return memo;\n            },\n            { ...st }\n          );\n        }),\n    ],\n    desc: \"Add weight stats\",\n  });\n}\n\nexport function EditStats_addLengthStats(\n  dispatch: IDispatch,\n  payload: Partial<Record<keyof IStatsLength, ILength>>,\n  timestamp?: number\n): void {\n  const sharedTime = timestamp ?? Date.now();\n  dispatch({\n    type: \"UpdateState\",\n    lensRecording: [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"stats\")\n        .p(\"length\")\n        .recordModify((st) => {\n          return ObjectUtils_keys(payload).reduce(\n            (memo, key) => {\n              memo[key] = [\n                { vtype: \"stat\", value: payload[key]!, timestamp: sharedTime, updatedAt: sharedTime },\n                ...(memo[key] || []),\n              ];\n              return memo;\n            },\n            { ...st }\n          );\n        }),\n    ],\n    desc: \"Add length stats\",\n  });\n}\n\nexport function EditStats_addPercentageStats(\n  dispatch: IDispatch,\n  payload: Partial<Record<keyof IStatsPercentage, IPercentage>>,\n  timestamp?: number\n): void {\n  const sharedTime = timestamp ?? Date.now();\n  dispatch({\n    type: \"UpdateState\",\n    lensRecording: [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"stats\")\n        .p(\"percentage\")\n        .recordModify((st) => {\n          return ObjectUtils_keys(payload).reduce(\n            (memo, key) => {\n              memo[key] = [\n                {\n                  vtype: \"stat\",\n                  value: payload[key]!,\n                  timestamp: sharedTime,\n                  updatedAt: sharedTime,\n                },\n                ...(memo[key] || []),\n              ];\n              return memo;\n            },\n            { ...st }\n          );\n        }),\n    ],\n    desc: \"Add percentage stats\",\n  });\n}\n\nexport function EditStats_changeStatWeightValue(\n  dispatch: IDispatch,\n  key: keyof IStatsWeight,\n  index: number,\n  value: IWeight\n): void {\n  dispatch({\n    type: \"UpdateState\",\n    lensRecording: [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"stats\")\n        .p(\"weight\")\n        .p(key)\n        .i(index)\n        .recordModify((v) => ({ ...v, value, updatedAt: Date.now() })),\n    ],\n    desc: `Change weight stat ${key} at index ${index} to ${value?.value}`,\n  });\n}\n\nexport function EditStats_changeStatLengthValue(\n  dispatch: IDispatch,\n  key: keyof IStatsLength,\n  index: number,\n  value: ILength\n): void {\n  dispatch({\n    type: \"UpdateState\",\n    lensRecording: [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"stats\")\n        .p(\"length\")\n        .p(key)\n        .i(index)\n        .recordModify((v) => ({ ...v, value, updatedAt: Date.now() })),\n    ],\n    desc: `Change length stat ${key} at index ${index} to ${value?.value}`,\n  });\n}\n\nexport function EditStats_changeStatPercentageValue(\n  dispatch: IDispatch,\n  key: keyof IStatsPercentage,\n  index: number,\n  value: IPercentage\n): void {\n  dispatch({\n    type: \"UpdateState\",\n    lensRecording: [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"stats\")\n        .p(\"percentage\")\n        .p(key)\n        .i(index)\n        .recordModify((v) => ({ ...v, value, updatedAt: Date.now() })),\n    ],\n    desc: `Change percentage stat ${key} at index ${index} to ${value?.value}`,\n  });\n}\n\nexport function EditStats_changeStatWeightTimestamp(\n  dispatch: IDispatch,\n  key: keyof IStatsWeight,\n  index: number,\n  timestamp: number\n): void {\n  dispatch({\n    type: \"UpdateState\",\n    lensRecording: [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"stats\")\n        .p(\"weight\")\n        .p(key)\n        .recordModify((coll) => {\n          return CollectionUtils_sort(\n            [...(coll || [])].map((v, i) => (i === index ? { ...v, timestamp, updatedAt: Date.now() } : v)),\n            (a, b) => b.timestamp - a.timestamp\n          );\n        }),\n    ],\n    desc: `Change weight stat ${key} timestamp at index ${index} to ${timestamp}`,\n  });\n}\n\nexport function EditStats_changeStatLengthTimestamp(\n  dispatch: IDispatch,\n  key: keyof IStatsLength,\n  index: number,\n  timestamp: number\n): void {\n  dispatch({\n    type: \"UpdateState\",\n    lensRecording: [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"stats\")\n        .p(\"length\")\n        .p(key)\n        .recordModify((coll) => {\n          return CollectionUtils_sort(\n            [...(coll || [])].map((v, i) => (i === index ? { ...v, timestamp, updatedAt: Date.now() } : v)),\n            (a, b) => b.timestamp - a.timestamp\n          );\n        }),\n    ],\n    desc: `Change length stat ${key} timestamp at index ${index} to ${timestamp}`,\n  });\n}\n\nexport function EditStats_changeStatPercentageTimestamp(\n  dispatch: IDispatch,\n  key: keyof IStatsPercentage,\n  index: number,\n  timestamp: number\n): void {\n  dispatch({\n    type: \"UpdateState\",\n    lensRecording: [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"stats\")\n        .p(\"percentage\")\n        .p(key)\n        .recordModify((coll) => {\n          return CollectionUtils_sort(\n            [...(coll || [])].map((v, i) => (i === index ? { ...v, timestamp, updatedAt: Date.now() } : v)),\n            (a, b) => b.timestamp - a.timestamp\n          );\n        }),\n    ],\n    desc: `Change percentage stat ${key} timestamp at index ${index} to ${timestamp}`,\n  });\n}\n\nexport function EditStats_deleteWeightStat(\n  dispatch: IDispatch,\n  key: keyof IStatsWeight,\n  index: number,\n  ts: number\n): void {\n  dispatch({\n    type: \"UpdateState\",\n    desc: \"Delete weight stat\",\n    lensRecording: [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"stats\")\n        .p(\"weight\")\n        .p(key)\n        .recordModify((s) => [...(s || [])].filter((_, i) => i !== index)),\n    ],\n  });\n}\n\nexport function EditStats_deleteLengthStat(\n  dispatch: IDispatch,\n  key: keyof IStatsLength,\n  index: number,\n  ts: number\n): void {\n  dispatch({\n    type: \"UpdateState\",\n    desc: \"Delete length stat\",\n    lensRecording: [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"stats\")\n        .p(\"length\")\n        .p(key)\n        .recordModify((s) => [...(s || [])].filter((_, i) => i !== index)),\n    ],\n  });\n}\n\nexport function EditStats_deletePercentageStat(\n  dispatch: IDispatch,\n  key: keyof IStatsPercentage,\n  index: number,\n  ts: number\n): void {\n  dispatch({\n    type: \"UpdateState\",\n    desc: \"Delete percentage stat\",\n    lensRecording: [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"stats\")\n        .p(\"percentage\")\n        .p(key)\n        .recordModify((s) => [...(s || [])].filter((_, i) => i !== index)),\n    ],\n  });\n}\n\nexport function EditStats_uploadHealthStats(\n  platform: \"ios\" | \"android\",\n  dispatch: IDispatch,\n  dataAny: unknown,\n  settings: ISettings,\n  deletedStatsArr: number[]\n): void {\n  const deletedStats = new Set(deletedStatsArr);\n  const response = dataAny as { data: IHealthResponse };\n  const data = response.data;\n  if (!data.added) {\n    return;\n  }\n  const weightValues: IStatsWeightValue[] = [];\n  const bodyfatValues: IStatsPercentageValue[] = [];\n  const waistValues: IStatsLengthValue[] = [];\n\n  for (const d of data.added) {\n    if (deletedStats.has(d.timestamp)) {\n      continue;\n    }\n    if (d.type === \"bodyweight\") {\n      weightValues.push({\n        vtype: \"stat\",\n        value: Weight_roundTo005(Weight_convertTo(d.value as IWeight, settings.units)),\n        timestamp: d.timestamp,\n        updatedAt: Date.now(),\n        ...(platform === \"ios\" ? { appleUuid: d.uuid } : { googleUuid: d.uuid }),\n      });\n    } else if (d.type === \"bodyfat\") {\n      if (d.value.value > 0) {\n        bodyfatValues.push({\n          vtype: \"stat\",\n          value: d.value as IPercentage,\n          timestamp: d.timestamp,\n          updatedAt: Date.now(),\n          ...(platform === \"ios\" ? { appleUuid: d.uuid } : { googleUuid: d.uuid }),\n        });\n      }\n    } else if (d.type === \"waist\") {\n      waistValues.push({\n        vtype: \"stat\",\n        value: Length_convertTo(d.value as ILength, settings.lengthUnits),\n        timestamp: d.timestamp,\n        updatedAt: Date.now(),\n        ...(platform === \"ios\" ? { appleUuid: d.uuid } : { googleUuid: d.uuid }),\n      });\n    }\n  }\n\n  const applyValues = <T extends { timestamp: number }>(st: T[] | undefined, values: T[]): T[] | undefined => {\n    if (values.length === 0) {\n      return st;\n    }\n    const merged = CollectionUtils_uniqBy([...(st || []), ...values], \"timestamp\");\n    if (st != null && merged.length === st.length) {\n      return st;\n    }\n    return CollectionUtils_sortBy(merged, \"timestamp\", true);\n  };\n\n  dispatch({\n    type: \"UpdateState\",\n    lensRecording: [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"stats\")\n        .p(\"weight\")\n        .p(\"weight\")\n        .recordModify((st) => applyValues(st, weightValues)),\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"stats\")\n        .p(\"percentage\")\n        .p(\"bodyfat\")\n        .recordModify((st) => applyValues(st, bodyfatValues)),\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"stats\")\n        .p(\"length\")\n        .p(\"waist\")\n        .recordModify((st) => applyValues(st, waistValues)),\n      platform === \"ios\"\n        ? lb<IState>().p(\"storage\").p(\"settings\").p(\"appleHealthAnchor\").record(data.anchor)\n        : lb<IState>().p(\"storage\").p(\"settings\").p(\"googleHealthAnchor\").record(data.anchor),\n    ],\n    desc: `Upload health stats from ${platform}`,\n  });\n}\n\nexport function EditStats_setHealthStatHidden(\n  dispatch: IDispatch,\n  key: IStatsHealthKey,\n  timestamp: number,\n  hidden: boolean\n): void {\n  dispatch({\n    type: \"UpdateState\",\n    desc: hidden ? \"Hide health stat\" : \"Unhide health stat\",\n    lensRecording: [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"stats\")\n        .p(\"health\")\n        .recordModify((health) => {\n          const next: IStatsHealth = { ...(health || {}) };\n          next[key] = [...(next[key] || [])].map((v) => (v.timestamp === timestamp ? { ...v, hidden } : v));\n          return next;\n        }),\n    ],\n  });\n}\n\nexport function EditStats_uploadDailyMetrics(\n  platform: \"ios\" | \"android\",\n  dispatch: IDispatch,\n  result: IHealthDailyResult\n): void {\n  const byKey: Record<IStatsHealthKey, IHealthDailyValue[]> = { sleep: [], calories: [], protein: [] };\n  for (const v of result.values) {\n    byKey[v.type].push(v);\n  }\n  const now = Date.now();\n\n  // Daily aggregates are re-read over a rolling window each sync, so a day's total can change.\n  // Upsert by timestamp (replace same-day) rather than dedup-keep-first like measurements, carrying\n  // the user's `hidden` flag forward so hidden records stay hidden across re-syncs. When a day's value\n  // and source uuid are unchanged we keep the exact previous object (with its `updatedAt`) so\n  // VersionTracker doesn't treat the whole rolling window as changed on every sync.\n  //\n  // We intentionally KEEP existing days that are absent from the latest read rather than treating\n  // absence as a source-side deletion. HealthKit doesn't expose read-authorization status, so an\n  // empty/partial read is indistinguishable from revoked permission - auto-deleting on absence would\n  // risk silently wiping a user's history. Edits to a day ARE mirrored (same-day replace); a fully\n  // deleted source day lingers until the user hides it in the app.\n  const upsert = (\n    existing: IStatsHealthValue[] | undefined,\n    incoming: IHealthDailyValue[]\n  ): IStatsHealthValue[] | undefined => {\n    if (incoming.length === 0) {\n      return existing;\n    }\n    const existingByTimestamp = new Map((existing || []).map((v) => [v.timestamp, v]));\n    const incomingByTimestamp = new Set(incoming.map((v) => v.timestamp));\n    const merged = incoming.map((inc): IStatsHealthValue => {\n      const prev = existingByTimestamp.get(inc.timestamp);\n      const prevUuid = platform === \"ios\" ? prev?.appleUuid : prev?.googleUuid;\n      if (prev != null && prev.value === inc.value && prevUuid === inc.uuid) {\n        return prev;\n      }\n      const next: IStatsHealthValue = {\n        vtype: \"stat\",\n        value: inc.value,\n        timestamp: inc.timestamp,\n        updatedAt: now,\n        ...(platform === \"ios\" ? { appleUuid: inc.uuid } : { googleUuid: inc.uuid }),\n      };\n      if (prev?.hidden) {\n        next.hidden = true;\n      }\n      return next;\n    });\n    const kept = (existing || []).filter((v) => !incomingByTimestamp.has(v.timestamp));\n    return CollectionUtils_sortBy([...kept, ...merged], \"timestamp\", true);\n  };\n\n  dispatch({\n    type: \"UpdateState\",\n    lensRecording: [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"stats\")\n        .p(\"health\")\n        .recordModify((health) => {\n          const next: IStatsHealth = { ...(health || {}) };\n          for (const key of statsHealthDef) {\n            const upserted = upsert(next[key], byKey[key]);\n            if (upserted != null) {\n              next[key] = upserted;\n            }\n          }\n          return next;\n        }),\n    ],\n    desc: `Upload daily health metrics from ${platform}`,\n  });\n}\n","import {\n  IEquipment,\n  IEquipmentData,\n  equipments,\n  IAllEquipment,\n  ISettings,\n  IWeight,\n  IUnit,\n  IExerciseType,\n  IGym,\n} from \"../types\";\nimport { CollectionUtils_sort, CollectionUtils_concatBy } from \"../utils/collection\";\nimport { ObjectUtils_keys, ObjectUtils_filter } from \"../utils/object\";\nimport { equipmentName, Exercise_toKey } from \"./exercise\";\nimport { Weight_build, Weight_compare } from \"./weight\";\n\nexport function Equipment_build(name: string): IEquipmentData {\n  return {\n    vtype: \"equipment_data\",\n    name,\n    multiplier: 1,\n    bar: {\n      lb: Weight_build(0, \"lb\"),\n      kg: Weight_build(0, \"kg\"),\n    },\n    plates: [\n      { weight: Weight_build(10, \"lb\"), num: 4 },\n      { weight: Weight_build(5, \"kg\"), num: 4 },\n    ],\n    fixed: [],\n    isFixed: false,\n  };\n}\n\nexport function Equipment_getEquipmentOfGym(settings: ISettings, key?: string): IAllEquipment {\n  const firstEquipment = settings.gyms[0].equipment;\n  if (key != null) {\n    return settings.gyms.find((g) => g.id === key)?.equipment ?? firstEquipment;\n  } else {\n    return firstEquipment;\n  }\n}\n\nexport function Equipment_getGymByIdOrCurrent(settings: ISettings, gymId?: string): IGym {\n  return settings.gyms.find((g) => g.id === (gymId ?? settings.currentGymId)) ?? settings.gyms[0];\n}\n\nexport function Equipment_getCurrentGym(settings: ISettings): IGym {\n  return settings.gyms.find((g) => g.id === settings.currentGymId) ?? settings.gyms[0];\n}\n\nexport function Equipment_getEquipmentIdForExerciseType(\n  settings: ISettings,\n  exerciseType?: IExerciseType,\n  gymId?: string\n): string | undefined {\n  if (exerciseType == null) {\n    return undefined;\n  }\n\n  const key = Exercise_toKey(exerciseType);\n  if (\n    !(\n      settings.exerciseData[key] &&\n      (\"equipment\" in settings.exerciseData[key] || \"rounding\" in settings.exerciseData[key])\n    )\n  ) {\n    return exerciseType.equipment;\n  }\n  const exerciseData = settings.exerciseData[key];\n  const exerciseEquipment = exerciseData?.equipment;\n  if (exerciseEquipment == null) {\n    return undefined;\n  }\n\n  const currentGym = Equipment_getGymByIdOrCurrent(settings, gymId);\n  return exerciseEquipment[currentGym.id];\n}\n\nexport function Equipment_getEquipmentNameForExerciseType(\n  settings: ISettings,\n  exerciseType?: IExerciseType\n): string | undefined {\n  const equipment = Equipment_getEquipmentIdForExerciseType(settings, exerciseType);\n  if (equipment == null) {\n    return undefined;\n  }\n  const currentGym = Equipment_getCurrentGym(settings);\n  const gymEquipment = currentGym.equipment[equipment];\n  if (gymEquipment == null || gymEquipment.isDeleted) {\n    return undefined;\n  }\n  const name = gymEquipment.name;\n  return name || equipmentName(equipment);\n}\n\nexport function Equipment_getEquipmentDataForExerciseType(\n  settings: ISettings,\n  exerciseType?: IExerciseType\n): IEquipmentData | undefined {\n  const equipment = Equipment_getEquipmentIdForExerciseType(settings, exerciseType);\n  const currentGym = Equipment_getCurrentGym(settings);\n  return equipment ? currentGym.equipment[equipment] : undefined;\n}\n\nexport function Equipment_getUnitOrDefaultForExerciseType(settings: ISettings, exerciseType?: IExerciseType): IUnit {\n  const equipment = Equipment_getEquipmentDataForExerciseType(settings, exerciseType);\n  return equipment?.unit ?? settings.units;\n}\n\nexport function Equipment_getUnitForExerciseType(settings: ISettings, exerciseType?: IExerciseType): IUnit | undefined {\n  const equipment = Equipment_getEquipmentDataForExerciseType(settings, exerciseType);\n  const equipmentUnit = equipment?.unit;\n  return equipmentUnit == null || equipmentUnit === settings.units ? undefined : equipmentUnit;\n}\n\nexport function Equipment_getEquipmentData(settings: ISettings, key: string): IEquipmentData | undefined {\n  return Equipment_currentEquipment(settings)?.[key];\n}\n\nexport function Equipment_currentEquipment(settings: ISettings): IAllEquipment {\n  const currentGym = settings.gyms.find((g) => g.id === settings.currentGymId) ?? settings.gyms[0];\n  return currentGym?.equipment;\n}\n\nexport function Equipment_smallestPlate(equipmentData: IEquipmentData, unit: IUnit): IWeight {\n  return (\n    CollectionUtils_sort(\n      equipmentData.plates.filter((p) => p.weight.unit === unit),\n      (a, b) => Weight_compare(a.weight, b.weight)\n    )[0]?.weight || Weight_build(1, unit)\n  );\n}\n\nexport function Equipment_mergeEquipment(\n  oldEquipment: { [key in IEquipment]?: IEquipmentData },\n  newEquipment: { [key in IEquipment]?: IEquipmentData }\n): { [key in IEquipment]?: IEquipmentData } {\n  const newKeys = Array.from(new Set([...ObjectUtils_keys(newEquipment), ...ObjectUtils_keys(oldEquipment)]));\n  return newKeys.reduce<{ [key in IEquipment]?: IEquipmentData }>((acc, name) => {\n    const newEquipmentData = newEquipment[name];\n    const oldEquipmentData = oldEquipment[name];\n    if (newEquipmentData != null && oldEquipmentData == null) {\n      acc[name] = newEquipmentData;\n    } else if (newEquipmentData == null && oldEquipmentData != null) {\n      acc[name] = oldEquipmentData;\n    } else if (newEquipmentData != null && oldEquipmentData != null) {\n      acc[name] = {\n        ...oldEquipmentData,\n        bar: newEquipmentData.bar,\n        isFixed: newEquipmentData.isFixed,\n        plates: CollectionUtils_concatBy(\n          oldEquipmentData.plates,\n          newEquipmentData.plates,\n          (el) => `${el.weight.value}${el.weight.unit}`\n        ),\n        multiplier: newEquipmentData.multiplier,\n        fixed: CollectionUtils_concatBy(\n          oldEquipmentData.fixed,\n          newEquipmentData.fixed,\n          (el) => `${el.value}${el.unit}`\n        ),\n      };\n    }\n    return acc;\n  }, {});\n}\n\nexport function Equipment_isBuiltIn(key: string): boolean {\n  return (equipments as unknown as string[]).indexOf(key) !== -1;\n}\n\nexport function Equipment_customEquipment(equipmentSettings?: IAllEquipment): IAllEquipment {\n  return ObjectUtils_filter(equipmentSettings || {}, (key) => !Equipment_isBuiltIn(key));\n}\n\nexport function Equipment_equipmentKeyByName(name: string, equipmentSettings?: IAllEquipment): string | undefined {\n  const builtInEquipmentKey = equipments.find((eq) => eq === name.toLowerCase());\n  if (builtInEquipmentKey) {\n    return builtInEquipmentKey;\n  }\n\n  const builtInEquipmentName = equipments.find((eq) => equipmentName(eq).toLowerCase() === name.toLowerCase());\n  if (builtInEquipmentName) {\n    return builtInEquipmentName;\n  }\n\n  const customEquipmentKey = ObjectUtils_keys(equipmentSettings || {}).find((eq) => {\n    return equipmentName(eq).toLowerCase() === name.toLowerCase();\n  });\n  return customEquipmentKey;\n}\n","import { ObjectUtils_keys, ObjectUtils_values, ObjectUtils_filter } from \"../utils/object\";\nimport { Weight_build, Weight_gt, Weight_multiply, Weight_roundConvertTo, Weight_convertTo } from \"./weight\";\nimport {\n  IExerciseId,\n  IEquipment,\n  IBarKey,\n  IWeight,\n  ISet,\n  IExerciseType,\n  equipments,\n  ISettings,\n  IAllCustomExercises,\n  IMuscle,\n  IMetaExercises,\n  IProgramExerciseWarmupSet,\n  IUnit,\n  ICustomExercise,\n  IScreenMuscle,\n  IAllEquipment,\n  IProgram,\n  IMuscleMultiplier,\n} from \"../types\";\nimport {\n  Muscle_getScreenMusclesFromMuscle,\n  Muscle_getMusclesFromScreenMuscle,\n  Muscle_getAvailableMuscleGroups,\n  Muscle_getMuscleGroupName,\n} from \"./muscle\";\nimport {\n  StringUtils_fuzzySearch,\n  StringUtils_dashcase,\n  StringUtils_uncamelCase,\n  StringUtils_camelCase,\n  StringUtils_undashcase,\n  StringUtils_capitalize,\n} from \"../utils/string\";\nimport { UidFactory_generateUid } from \"../utils/generator\";\nimport { CollectionUtils_compact, CollectionUtils_sort, CollectionUtils_flat } from \"../utils/collection\";\nimport { ExerciseImageUtils_exists } from \"./exerciseImage\";\nimport { Equipment_getUnitOrDefaultForExerciseType, Equipment_currentEquipment } from \"./equipment\";\nimport { IDispatch } from \"../ducks/types\";\nimport { Program_changeExerciseName } from \"./program\";\nimport { EditProgram_updateProgram } from \"./editProgram\";\nimport { lb } from \"lens-shmens\";\nimport { updateSettings } from \"./state\";\n\nexport const allExercisesList: Record<IExerciseId, IExercise> = {\n  abWheel: {\n    id: \"abWheel\",\n    name: \"Ab Wheel\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  arnoldPress: {\n    id: \"arnoldPress\",\n    name: \"Arnold Press\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 20, unit: \"lb\" },\n    startingWeightKg: { value: 7.5, unit: \"kg\" },\n  },\n  aroundTheWorld: {\n    id: \"aroundTheWorld\",\n    name: \"Around The World\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"core\"],\n    startingWeightLb: { value: 15, unit: \"lb\" },\n    startingWeightKg: { value: 5, unit: \"kg\" },\n  },\n  backExtension: {\n    id: \"backExtension\",\n    name: \"Back Extension\",\n    defaultWarmup: 10,\n    defaultEquipment: \"leverageMachine\",\n    types: [\"lower\", \"core\"],\n    startingWeightLb: { value: 50, unit: \"lb\" },\n    startingWeightKg: { value: 22.5, unit: \"kg\" },\n  },\n  ballSlams: {\n    id: \"ballSlams\",\n    name: \"Ball Slams\",\n    defaultEquipment: \"medicineball\",\n    types: [\"core\", \"upper\"],\n    startingWeightLb: { value: 10, unit: \"lb\" },\n    startingWeightKg: { value: 4.5, unit: \"kg\" },\n  },\n  battleRopes: {\n    id: \"battleRopes\",\n    name: \"Battle Ropes\",\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  behindTheNeckPress: {\n    id: \"behindTheNeckPress\",\n    name: \"Behind The Neck Press\",\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 65, unit: \"lb\" },\n    startingWeightKg: { value: 27.5, unit: \"kg\" },\n  },\n  benchDip: {\n    id: \"benchDip\",\n    name: \"Bench Dip\",\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  benchPress: {\n    id: \"benchPress\",\n    name: \"Bench Press\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 135, unit: \"lb\" },\n    startingWeightKg: { value: 60, unit: \"kg\" },\n  },\n  benchPressCloseGrip: {\n    id: \"benchPressCloseGrip\",\n    name: \"Bench Press Close Grip\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 115, unit: \"lb\" },\n    startingWeightKg: { value: 50, unit: \"kg\" },\n  },\n  benchPressWideGrip: {\n    id: \"benchPressWideGrip\",\n    name: \"Bench Press Wide Grip\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 135, unit: \"lb\" },\n    startingWeightKg: { value: 60, unit: \"kg\" },\n  },\n  bentOverOneArmRow: {\n    id: \"bentOverOneArmRow\",\n    name: \"Bent Over One Arm Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 30, unit: \"lb\" },\n    startingWeightKg: { value: 12.5, unit: \"kg\" },\n  },\n  bentOverRow: {\n    id: \"bentOverRow\",\n    name: \"Bent Over Row\",\n    defaultWarmup: 95,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 95, unit: \"lb\" },\n    startingWeightKg: { value: 42.5, unit: \"kg\" },\n  },\n  bicepCurl: {\n    id: \"bicepCurl\",\n    name: \"Bicep Curl\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 20, unit: \"lb\" },\n    startingWeightKg: { value: 7.5, unit: \"kg\" },\n  },\n  bicycleCrunch: {\n    id: \"bicycleCrunch\",\n    name: \"Bicycle Crunch\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  boxJump: {\n    id: \"boxJump\",\n    name: \"Box Jump\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  boxSquat: {\n    id: \"boxSquat\",\n    name: \"Box Squat\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 155, unit: \"lb\" },\n    startingWeightKg: { value: 70, unit: \"kg\" },\n  },\n  bulgarianSplitSquat: {\n    id: \"bulgarianSplitSquat\",\n    name: \"Bulgarian Split Squat\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 25, unit: \"lb\" },\n    startingWeightKg: { value: 10, unit: \"kg\" },\n  },\n  burpee: {\n    id: \"burpee\",\n    name: \"Burpee\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"lower\", \"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  cableCrossover: {\n    id: \"cableCrossover\",\n    name: \"Cable Crossover\",\n    defaultWarmup: 10,\n    defaultEquipment: \"cable\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 20, unit: \"lb\" },\n    startingWeightKg: { value: 7.5, unit: \"kg\" },\n  },\n  cableCrunch: {\n    id: \"cableCrunch\",\n    name: \"Cable Crunch\",\n    defaultWarmup: 10,\n    defaultEquipment: \"cable\",\n    types: [\"core\"],\n    startingWeightLb: { value: 50, unit: \"lb\" },\n    startingWeightKg: { value: 22.5, unit: \"kg\" },\n  },\n  cableKickback: {\n    id: \"cableKickback\",\n    name: \"Cable Kickback\",\n    defaultWarmup: 10,\n    defaultEquipment: \"cable\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 20, unit: \"lb\" },\n    startingWeightKg: { value: 7.5, unit: \"kg\" },\n  },\n  cablePullThrough: {\n    id: \"cablePullThrough\",\n    name: \"Cable Pull Through\",\n    defaultWarmup: 10,\n    defaultEquipment: \"cable\",\n    types: [\"lower\", \"pull\"],\n    startingWeightLb: { value: 70, unit: \"lb\" },\n    startingWeightKg: { value: 30, unit: \"kg\" },\n  },\n  cableTwist: {\n    id: \"cableTwist\",\n    name: \"Cable Twist\",\n    defaultWarmup: 10,\n    defaultEquipment: \"cable\",\n    types: [\"core\"],\n    startingWeightLb: { value: 30, unit: \"lb\" },\n    startingWeightKg: { value: 12.5, unit: \"kg\" },\n  },\n  calfPressOnLegPress: {\n    id: \"calfPressOnLegPress\",\n    name: \"Calf Press on Leg Press\",\n    defaultWarmup: 10,\n    defaultEquipment: \"leverageMachine\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 150, unit: \"lb\" },\n    startingWeightKg: { value: 67.5, unit: \"kg\" },\n  },\n  calfPressOnSeatedLegPress: {\n    id: \"calfPressOnSeatedLegPress\",\n    name: \"Calf Press on Seated Leg Press\",\n    defaultWarmup: 10,\n    defaultEquipment: \"leverageMachine\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 120, unit: \"lb\" },\n    startingWeightKg: { value: 53.75, unit: \"kg\" },\n  },\n  chestDip: {\n    id: \"chestDip\",\n    name: \"Chest Dip\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  chestFly: {\n    id: \"chestFly\",\n    name: \"Chest Fly\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 20, unit: \"lb\" },\n    startingWeightKg: { value: 7.5, unit: \"kg\" },\n  },\n  chestPress: {\n    id: \"chestPress\",\n    name: \"Chest Press\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 30, unit: \"lb\" },\n    startingWeightKg: { value: 12.5, unit: \"kg\" },\n  },\n  chestSupportedRow: {\n    id: \"chestSupportedRow\",\n    name: \"Chest-Supported Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 85, unit: \"lb\" },\n    startingWeightKg: { value: 37.5, unit: \"kg\" },\n  },\n  chinUp: {\n    id: \"chinUp\",\n    name: \"Chin Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  clean: {\n    id: \"clean\",\n    name: \"Clean\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"lower\", \"push\"],\n    startingWeightLb: { value: 95, unit: \"lb\" },\n    startingWeightKg: { value: 42.5, unit: \"kg\" },\n  },\n  cleanandJerk: {\n    id: \"cleanandJerk\",\n    name: \"Clean and Jerk\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"lower\", \"push\"],\n    startingWeightLb: { value: 95, unit: \"lb\" },\n    startingWeightKg: { value: 42.5, unit: \"kg\" },\n  },\n  concentrationCurl: {\n    id: \"concentrationCurl\",\n    name: \"Concentration Curl\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 20, unit: \"lb\" },\n    startingWeightKg: { value: 7.5, unit: \"kg\" },\n  },\n  crossBodyCrunch: {\n    id: \"crossBodyCrunch\",\n    name: \"Cross Body Crunch\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  crunch: {\n    id: \"crunch\",\n    name: \"Crunch\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  cycling: {\n    id: \"cycling\",\n    name: \"Cycling\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  deadlift: {\n    id: \"deadlift\",\n    name: \"Deadlift\",\n    defaultWarmup: 95,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"pull\"],\n    startingWeightLb: { value: 185, unit: \"lb\" },\n    startingWeightKg: { value: 82.5, unit: \"kg\" },\n  },\n  deadliftHighPull: {\n    id: \"deadliftHighPull\",\n    name: \"Deadlift High Pull\",\n    defaultWarmup: 95,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"lower\", \"pull\"],\n    startingWeightLb: { value: 75, unit: \"lb\" },\n    startingWeightKg: { value: 32.5, unit: \"kg\" },\n  },\n  declineBenchPress: {\n    id: \"declineBenchPress\",\n    name: \"Decline Bench Press\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 125, unit: \"lb\" },\n    startingWeightKg: { value: 55, unit: \"kg\" },\n  },\n  declineCrunch: {\n    id: \"declineCrunch\",\n    name: \"Decline Crunch\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  deficitDeadlift: {\n    id: \"deficitDeadlift\",\n    name: \"Deficit Deadlift\",\n    defaultWarmup: 95,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"pull\"],\n    startingWeightLb: { value: 165, unit: \"lb\" },\n    startingWeightKg: { value: 75, unit: \"kg\" },\n  },\n  ellipticalMachine: {\n    id: \"ellipticalMachine\",\n    name: \"Elliptical Machine\",\n    defaultWarmup: 10,\n    defaultEquipment: \"leverageMachine\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  facePull: {\n    id: \"facePull\",\n    name: \"Face Pull\",\n    defaultWarmup: 10,\n    defaultEquipment: \"band\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  flatKneeRaise: {\n    id: \"flatKneeRaise\",\n    name: \"Flat Knee Raise\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  flatLegRaise: {\n    id: \"flatLegRaise\",\n    name: \"Flat Leg Raise\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  frontRaise: {\n    id: \"frontRaise\",\n    name: \"Front Raise\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 15, unit: \"lb\" },\n    startingWeightKg: { value: 5, unit: \"kg\" },\n  },\n  frontSquat: {\n    id: \"frontSquat\",\n    name: \"Front Squat\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 95, unit: \"lb\" },\n    startingWeightKg: { value: 42.5, unit: \"kg\" },\n  },\n  gobletSquat: {\n    id: \"gobletSquat\",\n    name: \"Goblet Squat\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 35, unit: \"lb\" },\n    startingWeightKg: { value: 15, unit: \"kg\" },\n  },\n  goodMorning: {\n    id: \"goodMorning\",\n    name: \"Good Morning\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 65, unit: \"lb\" },\n    startingWeightKg: { value: 27.5, unit: \"kg\" },\n  },\n  gluteBridge: {\n    id: \"gluteBridge\",\n    name: \"Glute Bridge\",\n    defaultWarmup: 45,\n    defaultEquipment: \"dumbbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 35, unit: \"lb\" },\n    startingWeightKg: { value: 15, unit: \"kg\" },\n  },\n  gluteBridgeMarch: {\n    id: \"gluteBridgeMarch\",\n    name: \"Glute Bridge March\",\n    defaultWarmup: 45,\n    defaultEquipment: \"bodyweight\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  gluteKickback: {\n    id: \"gluteKickback\",\n    name: \"Glute Kickback\",\n    defaultWarmup: 45,\n    defaultEquipment: \"cable\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 35, unit: \"lb\" },\n    startingWeightKg: { value: 15, unit: \"kg\" },\n  },\n  hackSquat: {\n    id: \"hackSquat\",\n    name: \"Hack Squat\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 115, unit: \"lb\" },\n    startingWeightKg: { value: 50, unit: \"kg\" },\n  },\n  hammerCurl: {\n    id: \"hammerCurl\",\n    name: \"Hammer Curl\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 25, unit: \"lb\" },\n    startingWeightKg: { value: 10, unit: \"kg\" },\n  },\n  handstandPushUp: {\n    id: \"handstandPushUp\",\n    name: \"Handstand Push Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  hangClean: {\n    id: \"hangClean\",\n    name: \"Hang Clean\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"lower\", \"pull\"],\n    startingWeightLb: { value: 85, unit: \"lb\" },\n    startingWeightKg: { value: 37.5, unit: \"kg\" },\n  },\n  hangSnatch: {\n    id: \"hangSnatch\",\n    name: \"Hang Snatch\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"lower\", \"pull\"],\n    startingWeightLb: { value: 65, unit: \"lb\" },\n    startingWeightKg: { value: 27.5, unit: \"kg\" },\n  },\n  hangingLegRaise: {\n    id: \"hangingLegRaise\",\n    name: \"Hanging Leg Raise\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  highKneeSkips: {\n    id: \"highKneeSkips\",\n    name: \"High Knee Skips\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  highRow: {\n    id: \"highRow\",\n    name: \"High Row\",\n    defaultWarmup: 45,\n    defaultEquipment: \"leverageMachine\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 65, unit: \"lb\" },\n    startingWeightKg: { value: 27.5, unit: \"kg\" },\n  },\n  hipAbductor: {\n    id: \"hipAbductor\",\n    name: \"Hip Abductor\",\n    defaultWarmup: 10,\n    defaultEquipment: \"leverageMachine\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 60, unit: \"lb\" },\n    startingWeightKg: { value: 26.25, unit: \"kg\" },\n  },\n  hipAdductor: {\n    id: \"hipAdductor\",\n    name: \"Hip Adductor\",\n    defaultWarmup: 10,\n    defaultEquipment: \"leverageMachine\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 60, unit: \"lb\" },\n    startingWeightKg: { value: 26.25, unit: \"kg\" },\n  },\n  hipThrust: {\n    id: \"hipThrust\",\n    name: \"Hip Thrust\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 95, unit: \"lb\" },\n    startingWeightKg: { value: 42.5, unit: \"kg\" },\n  },\n  inclineBenchPress: {\n    id: \"inclineBenchPress\",\n    name: \"Incline Bench Press\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 115, unit: \"lb\" },\n    startingWeightKg: { value: 50, unit: \"kg\" },\n  },\n  inclineBenchPressWideGrip: {\n    id: \"inclineBenchPressWideGrip\",\n    name: \"Incline Bench Press Wide Grip\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 110, unit: \"lb\" },\n    startingWeightKg: { value: 50, unit: \"kg\" },\n  },\n  inclineChestFly: {\n    id: \"inclineChestFly\",\n    name: \"Incline Chest Fly\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 20, unit: \"lb\" },\n    startingWeightKg: { value: 7.5, unit: \"kg\" },\n  },\n  inclineChestPress: {\n    id: \"inclineChestPress\",\n    name: \"Incline Chest Press\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 25, unit: \"lb\" },\n    startingWeightKg: { value: 10, unit: \"kg\" },\n  },\n  inclineCurl: {\n    id: \"inclineCurl\",\n    name: \"Incline Curl\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 20, unit: \"lb\" },\n    startingWeightKg: { value: 7.5, unit: \"kg\" },\n  },\n  inclineRow: {\n    id: \"inclineRow\",\n    name: \"Incline Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 30, unit: \"lb\" },\n    startingWeightKg: { value: 12.5, unit: \"kg\" },\n  },\n  invertedRow: {\n    id: \"invertedRow\",\n    name: \"Inverted Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  isoLateralChestPress: {\n    id: \"isoLateralChestPress\",\n    name: \"Iso-Lateral Chest Press\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 30, unit: \"lb\" },\n    startingWeightKg: { value: 12.5, unit: \"kg\" },\n  },\n  isoLateralRow: {\n    id: \"isoLateralRow\",\n    name: \"Iso-Lateral Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 30, unit: \"lb\" },\n    startingWeightKg: { value: 12.5, unit: \"kg\" },\n  },\n  jackknifeSitUp: {\n    id: \"jackknifeSitUp\",\n    name: \"Jackknife Sit Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  jumpRope: {\n    id: \"jumpRope\",\n    name: \"Jump Rope\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  jumpSquat: {\n    id: \"jumpSquat\",\n    name: \"Jump Squat\",\n    defaultWarmup: 10,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 65, unit: \"lb\" },\n    startingWeightKg: { value: 27.5, unit: \"kg\" },\n  },\n  jumpingJack: {\n    id: \"jumpingJack\",\n    name: \"Jumping Jack\",\n    defaultWarmup: 10,\n    defaultEquipment: undefined,\n    types: [\"upper\", \"lower\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  kettlebellSwing: {\n    id: \"kettlebellSwing\",\n    name: \"Kettlebell Swing\",\n    defaultWarmup: 10,\n    defaultEquipment: \"kettlebell\",\n    types: [\"upper\", \"lower\", \"core\"],\n    startingWeightLb: { value: 35, unit: \"lb\" },\n    startingWeightKg: { value: 16, unit: \"kg\" },\n  },\n  kettlebellTurkishGetUp: {\n    id: \"kettlebellTurkishGetUp\",\n    name: \"Kettlebell Turkish Get Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"kettlebell\",\n    types: [\"upper\", \"lower\", \"core\"],\n    startingWeightLb: { value: 25, unit: \"lb\" },\n    startingWeightKg: { value: 8, unit: \"kg\" },\n  },\n  kippingPullUp: {\n    id: \"kippingPullUp\",\n    name: \"Kipping Pull Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  kneeRaise: {\n    id: \"kneeRaise\",\n    name: \"Knee Raise\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  kneelingPulldown: {\n    id: \"kneelingPulldown\",\n    name: \"Kneeling Pulldown\",\n    defaultWarmup: 10,\n    defaultEquipment: \"band\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  kneestoElbows: {\n    id: \"kneestoElbows\",\n    name: \"Knees to Elbows\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  latPulldown: {\n    id: \"latPulldown\",\n    name: \"Lat Pulldown\",\n    defaultWarmup: 10,\n    defaultEquipment: \"cable\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 70, unit: \"lb\" },\n    startingWeightKg: { value: 30, unit: \"kg\" },\n  },\n  lateralBoxJump: {\n    id: \"lateralBoxJump\",\n    name: \"Lateral Box Jump\",\n    defaultWarmup: 10,\n    defaultEquipment: undefined,\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  lateralRaise: {\n    id: \"lateralRaise\",\n    name: \"Lateral Raise\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 15, unit: \"lb\" },\n    startingWeightKg: { value: 5, unit: \"kg\" },\n  },\n  legsUpBenchPress: {\n    id: \"legsUpBenchPress\",\n    name: \"Legs Up Bench Press\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 135, unit: \"lb\" },\n    startingWeightKg: { value: 60, unit: \"kg\" },\n  },\n  legCurl: {\n    id: \"legCurl\",\n    name: \"Leg Curl\",\n    defaultWarmup: 10,\n    defaultEquipment: \"leverageMachine\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 60, unit: \"lb\" },\n    startingWeightKg: { value: 26.25, unit: \"kg\" },\n  },\n  legExtension: {\n    id: \"legExtension\",\n    name: \"Leg Extension\",\n    defaultWarmup: 10,\n    defaultEquipment: \"leverageMachine\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 60, unit: \"lb\" },\n    startingWeightKg: { value: 26.25, unit: \"kg\" },\n  },\n  legPress: {\n    id: \"legPress\",\n    name: \"Leg Press\",\n    defaultWarmup: 10,\n    defaultEquipment: \"leverageMachine\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 250, unit: \"lb\" },\n    startingWeightKg: { value: 112.5, unit: \"kg\" },\n  },\n  lunge: {\n    id: \"lunge\",\n    name: \"Lunge\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 75, unit: \"lb\" },\n    startingWeightKg: { value: 32.5, unit: \"kg\" },\n  },\n  lyingBicepCurl: {\n    id: \"lyingBicepCurl\",\n    name: \"Lying Bicep Curl\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 15, unit: \"lb\" },\n    startingWeightKg: { value: 5, unit: \"kg\" },\n  },\n  lyingLegCurl: {\n    id: \"lyingLegCurl\",\n    name: \"Lying Leg Curl\",\n    defaultWarmup: 10,\n    defaultEquipment: \"leverageMachine\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 60, unit: \"lb\" },\n    startingWeightKg: { value: 26.25, unit: \"kg\" },\n  },\n  mountainClimber: {\n    id: \"mountainClimber\",\n    name: \"Mountain Climber\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\", \"lower\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  muscleUp: {\n    id: \"muscleUp\",\n    name: \"Muscle Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  obliqueCrunch: {\n    id: \"obliqueCrunch\",\n    name: \"Oblique Crunch\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  overheadPress: {\n    id: \"overheadPress\",\n    name: \"Overhead Press\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 75, unit: \"lb\" },\n    startingWeightKg: { value: 32.5, unit: \"kg\" },\n  },\n  overheadSquat: {\n    id: \"overheadSquat\",\n    name: \"Overhead Squat\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 55, unit: \"lb\" },\n    startingWeightKg: { value: 25, unit: \"kg\" },\n  },\n  pecDeck: {\n    id: \"pecDeck\",\n    name: \"Pec Deck\",\n    defaultWarmup: 10,\n    defaultEquipment: \"leverageMachine\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 50, unit: \"lb\" },\n    startingWeightKg: { value: 22.5, unit: \"kg\" },\n  },\n  pendlayRow: {\n    id: \"pendlayRow\",\n    name: \"Pendlay Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 95, unit: \"lb\" },\n    startingWeightKg: { value: 42.5, unit: \"kg\" },\n  },\n  pistolSquat: {\n    id: \"pistolSquat\",\n    name: \"Pistol Squat\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  plank: {\n    id: \"plank\",\n    name: \"Plank\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  powerClean: {\n    id: \"powerClean\",\n    name: \"Power Clean\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"lower\", \"pull\"],\n    startingWeightLb: { value: 95, unit: \"lb\" },\n    startingWeightKg: { value: 42.5, unit: \"kg\" },\n  },\n  powerSnatch: {\n    id: \"powerSnatch\",\n    name: \"Power Snatch\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"lower\", \"pull\"],\n    startingWeightLb: { value: 65, unit: \"lb\" },\n    startingWeightKg: { value: 27.5, unit: \"kg\" },\n  },\n  preacherCurl: {\n    id: \"preacherCurl\",\n    name: \"Preacher Curl\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 20, unit: \"lb\" },\n    startingWeightKg: { value: 7.5, unit: \"kg\" },\n  },\n  pressUnder: {\n    id: \"pressUnder\",\n    name: \"Press Under\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 65, unit: \"lb\" },\n    startingWeightKg: { value: 27.5, unit: \"kg\" },\n  },\n  pullUp: {\n    id: \"pullUp\",\n    name: \"Pull Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  pullover: {\n    id: \"pullover\",\n    name: \"Pullover\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 25, unit: \"lb\" },\n    startingWeightKg: { value: 10, unit: \"kg\" },\n  },\n  pushPress: {\n    id: \"pushPress\",\n    name: \"Push Press\",\n    defaultWarmup: 45,\n    defaultEquipment: \"kettlebell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 35, unit: \"lb\" },\n    startingWeightKg: { value: 16, unit: \"kg\" },\n  },\n  pushUp: {\n    id: \"pushUp\",\n    name: \"Push Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  reverseCrunch: {\n    id: \"reverseCrunch\",\n    name: \"Reverse Crunch\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  reverseCurl: {\n    id: \"reverseCurl\",\n    name: \"Reverse Curl\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 15, unit: \"lb\" },\n    startingWeightKg: { value: 5, unit: \"kg\" },\n  },\n  reverseFly: {\n    id: \"reverseFly\",\n    name: \"Reverse Fly\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 15, unit: \"lb\" },\n    startingWeightKg: { value: 5, unit: \"kg\" },\n  },\n  reverseGripConcentrationCurl: {\n    id: \"reverseGripConcentrationCurl\",\n    name: \"Reverse Grip Concentration Curl\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 20, unit: \"lb\" },\n    startingWeightKg: { value: 7.5, unit: \"kg\" },\n  },\n  reversePlank: {\n    id: \"reversePlank\",\n    name: \"Reverse Plank\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  reverseLatPulldown: {\n    id: \"reverseLatPulldown\",\n    name: \"Reverse Lat Pulldown\",\n    defaultWarmup: 10,\n    defaultEquipment: \"cable\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 70, unit: \"lb\" },\n    startingWeightKg: { value: 30, unit: \"kg\" },\n  },\n  reverseLunge: {\n    id: \"reverseLunge\",\n    name: \"Reverse Lunge\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 25, unit: \"lb\" },\n    startingWeightKg: { value: 10, unit: \"kg\" },\n  },\n  reverseWristCurl: {\n    id: \"reverseWristCurl\",\n    name: \"Reverse Wrist Curl\",\n    defaultWarmup: 10,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 25, unit: \"lb\" },\n    startingWeightKg: { value: 10, unit: \"kg\" },\n  },\n  romanianDeadlift: {\n    id: \"romanianDeadlift\",\n    name: \"Romanian Deadlift\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 40, unit: \"lb\" },\n    startingWeightKg: { value: 17.5, unit: \"kg\" },\n  },\n  reverseHyperextension: {\n    id: \"reverseHyperextension\",\n    name: \"Reverse Hyperextension\",\n    defaultWarmup: 45,\n    defaultEquipment: \"band\",\n    types: [\"core\", \"lower\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  rowing: {\n    id: \"rowing\",\n    name: \"Rowing\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  russianTwist: {\n    id: \"russianTwist\",\n    name: \"Russian Twist\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  safetySquatBarSquat: {\n    id: \"safetySquatBarSquat\",\n    name: \"Safety Squat Bar Squat\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 145, unit: \"lb\" },\n    startingWeightKg: { value: 65, unit: \"kg\" },\n  },\n  seatedCalfRaise: {\n    id: \"seatedCalfRaise\",\n    name: \"Seated Calf Raise\",\n    defaultWarmup: 10,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 90, unit: \"lb\" },\n    startingWeightKg: { value: 40, unit: \"kg\" },\n  },\n  seatedFrontRaise: {\n    id: \"seatedFrontRaise\",\n    name: \"Seated Front Raise\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 15, unit: \"lb\" },\n    startingWeightKg: { value: 5, unit: \"kg\" },\n  },\n  seatedLegCurl: {\n    id: \"seatedLegCurl\",\n    name: \"Seated Leg Curl\",\n    defaultWarmup: 10,\n    defaultEquipment: \"leverageMachine\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 60, unit: \"lb\" },\n    startingWeightKg: { value: 26.25, unit: \"kg\" },\n  },\n  seatedLegPress: {\n    id: \"seatedLegPress\",\n    name: \"Seated Leg Press\",\n    defaultWarmup: 10,\n    defaultEquipment: \"leverageMachine\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 200, unit: \"lb\" },\n    startingWeightKg: { value: 90, unit: \"kg\" },\n  },\n  seatedOverheadPress: {\n    id: \"seatedOverheadPress\",\n    name: \"Seated Overhead Press\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 75, unit: \"lb\" },\n    startingWeightKg: { value: 32.5, unit: \"kg\" },\n  },\n  seatedPalmsUpWristCurl: {\n    id: \"seatedPalmsUpWristCurl\",\n    name: \"Seated Palms Up Wrist Curl\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 15, unit: \"lb\" },\n    startingWeightKg: { value: 5, unit: \"kg\" },\n  },\n  seatedRow: {\n    id: \"seatedRow\",\n    name: \"Seated Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"cable\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 70, unit: \"lb\" },\n    startingWeightKg: { value: 30, unit: \"kg\" },\n  },\n  seatedWideGripRow: {\n    id: \"seatedWideGripRow\",\n    name: \"Seated Wide Grip Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"cable\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 65, unit: \"lb\" },\n    startingWeightKg: { value: 27.5, unit: \"kg\" },\n  },\n  shoulderPress: {\n    id: \"shoulderPress\",\n    name: \"Shoulder Press\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 25, unit: \"lb\" },\n    startingWeightKg: { value: 10, unit: \"kg\" },\n  },\n  shoulderPressParallelGrip: {\n    id: \"shoulderPressParallelGrip\",\n    name: \"Shoulder Press Parallel Grip\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 25, unit: \"lb\" },\n    startingWeightKg: { value: 10, unit: \"kg\" },\n  },\n  shrug: {\n    id: \"shrug\",\n    name: \"Shrug\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 45, unit: \"lb\" },\n    startingWeightKg: { value: 20, unit: \"kg\" },\n  },\n  sideBend: {\n    id: \"sideBend\",\n    name: \"Side Bend\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"core\"],\n    startingWeightLb: { value: 30, unit: \"lb\" },\n    startingWeightKg: { value: 12.5, unit: \"kg\" },\n  },\n  sideCrunch: {\n    id: \"sideCrunch\",\n    name: \"Side Crunch\",\n    defaultWarmup: 45,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  sideHipAbductor: {\n    id: \"sideHipAbductor\",\n    name: \"Side Hip Abductor\",\n    defaultWarmup: 45,\n    defaultEquipment: \"bodyweight\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  sideLyingClam: {\n    id: \"sideLyingClam\",\n    name: \"Side Lying Clam\",\n    defaultWarmup: 45,\n    defaultEquipment: \"bodyweight\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  sidePlank: {\n    id: \"sidePlank\",\n    name: \"Side Plank\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  singleLegBridge: {\n    id: \"singleLegBridge\",\n    name: \"Single Leg Bridge\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  singleLegCalfRaise: {\n    id: \"singleLegCalfRaise\",\n    name: \"Single Leg Calf Raise\",\n    defaultWarmup: 10,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 85, unit: \"lb\" },\n    startingWeightKg: { value: 37.5, unit: \"kg\" },\n  },\n  singleLegDeadlift: {\n    id: \"singleLegDeadlift\",\n    name: \"Single Leg Deadlift\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 30, unit: \"lb\" },\n    startingWeightKg: { value: 12.5, unit: \"kg\" },\n  },\n  singleLegGluteBridgeBench: {\n    id: \"singleLegGluteBridgeBench\",\n    name: \"Single Leg Glute Bridge On Bench\",\n    defaultWarmup: 45,\n    defaultEquipment: \"bodyweight\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  singleLegGluteBridgeStraight: {\n    id: \"singleLegGluteBridgeStraight\",\n    name: \"Single Leg Glute Bridge Straight Leg\",\n    defaultWarmup: 45,\n    defaultEquipment: \"bodyweight\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  singleLegGluteBridgeBentKnee: {\n    id: \"singleLegGluteBridgeBentKnee\",\n    name: \"Single Leg Glute Bridge Bent Knee\",\n    defaultWarmup: 45,\n    defaultEquipment: \"bodyweight\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  singleLegHipThrust: {\n    id: \"singleLegHipThrust\",\n    name: \"Single Leg Hip Thrust\",\n    defaultWarmup: 45,\n    defaultEquipment: \"bodyweight\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  sissySquat: {\n    id: \"sissySquat\",\n    name: \"Sissy Squat\",\n    defaultWarmup: 45,\n    defaultEquipment: \"bodyweight\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  sitUp: {\n    id: \"sitUp\",\n    name: \"Sit Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  skullcrusher: {\n    id: \"skullcrusher\",\n    name: \"Skullcrusher\",\n    defaultWarmup: 10,\n    defaultEquipment: \"ezbar\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 45, unit: \"lb\" },\n    startingWeightKg: { value: 20, unit: \"kg\" },\n  },\n  slingShotBenchPress: {\n    id: \"slingShotBenchPress\",\n    name: \"Sling Shot Bench Press\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 140, unit: \"lb\" },\n    startingWeightKg: { value: 62.5, unit: \"kg\" },\n  },\n  snatch: {\n    id: \"snatch\",\n    name: \"Snatch\",\n    defaultWarmup: 45,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"lower\", \"pull\"],\n    startingWeightLb: { value: 25, unit: \"lb\" },\n    startingWeightKg: { value: 10, unit: \"kg\" },\n  },\n  snatchPull: {\n    id: \"snatchPull\",\n    name: \"Snatch Pull\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 85, unit: \"lb\" },\n    startingWeightKg: { value: 37.5, unit: \"kg\" },\n  },\n  splitSquat: {\n    id: \"splitSquat\",\n    name: \"Split Squat\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 25, unit: \"lb\" },\n    startingWeightKg: { value: 10, unit: \"kg\" },\n  },\n  splitJerk: {\n    id: \"splitJerk\",\n    name: \"Split Jerk\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"lower\", \"push\"],\n    startingWeightLb: { value: 95, unit: \"lb\" },\n    startingWeightKg: { value: 42.5, unit: \"kg\" },\n  },\n  squat: {\n    id: \"squat\",\n    name: \"Squat\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 135, unit: \"lb\" },\n    startingWeightKg: { value: 60, unit: \"kg\" },\n  },\n  squatRow: {\n    id: \"squatRow\",\n    name: \"Squat Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"band\",\n    types: [\"upper\", \"lower\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  standingCalfRaise: {\n    id: \"standingCalfRaise\",\n    name: \"Standing Calf Raise\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 35, unit: \"lb\" },\n    startingWeightKg: { value: 15, unit: \"kg\" },\n  },\n  standingRow: {\n    id: \"standingRow\",\n    name: \"Standing Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"cable\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 70, unit: \"lb\" },\n    startingWeightKg: { value: 30, unit: \"kg\" },\n  },\n  standingRowCloseGrip: {\n    id: \"standingRowCloseGrip\",\n    name: \"Standing Row Close Grip\",\n    defaultWarmup: 10,\n    defaultEquipment: \"cable\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 65, unit: \"lb\" },\n    startingWeightKg: { value: 27.5, unit: \"kg\" },\n  },\n  standingRowRearDeltWithRope: {\n    id: \"standingRowRearDeltWithRope\",\n    name: \"Standing Row Rear Delt With Rope\",\n    defaultWarmup: 10,\n    defaultEquipment: \"cable\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 30, unit: \"lb\" },\n    startingWeightKg: { value: 12.5, unit: \"kg\" },\n  },\n  standingRowRearHorizontalDeltWithRope: {\n    id: \"standingRowRearHorizontalDeltWithRope\",\n    name: \"Standing Row Rear Delt, Horizontal, With Rope\",\n    defaultWarmup: 10,\n    defaultEquipment: \"cable\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 30, unit: \"lb\" },\n    startingWeightKg: { value: 12.5, unit: \"kg\" },\n  },\n  standingRowVBar: {\n    id: \"standingRowVBar\",\n    name: \"Standing Row V-Bar\",\n    defaultWarmup: 10,\n    defaultEquipment: \"cable\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 70, unit: \"lb\" },\n    startingWeightKg: { value: 30, unit: \"kg\" },\n  },\n  stepUp: {\n    id: \"stepUp\",\n    name: \"Step up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 25, unit: \"lb\" },\n    startingWeightKg: { value: 10, unit: \"kg\" },\n  },\n  stiffLegDeadlift: {\n    id: \"stiffLegDeadlift\",\n    name: \"Stiff Leg Deadlift\",\n    defaultWarmup: 95,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 115, unit: \"lb\" },\n    startingWeightKg: { value: 50, unit: \"kg\" },\n  },\n  straightLegDeadlift: {\n    id: \"straightLegDeadlift\",\n    name: \"Straight Leg Deadlift\",\n    defaultWarmup: 10,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 110, unit: \"lb\" },\n    startingWeightKg: { value: 50, unit: \"kg\" },\n  },\n  sumoDeadlift: {\n    id: \"sumoDeadlift\",\n    name: \"Sumo Deadlift\",\n    defaultWarmup: 95,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 175, unit: \"lb\" },\n    startingWeightKg: { value: 77.5, unit: \"kg\" },\n  },\n  sumoDeadliftHighPull: {\n    id: \"sumoDeadliftHighPull\",\n    name: \"Sumo Deadlift High Pull\",\n    defaultWarmup: 95,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"lower\", \"pull\"],\n    startingWeightLb: { value: 85, unit: \"lb\" },\n    startingWeightKg: { value: 37.5, unit: \"kg\" },\n  },\n  superman: {\n    id: \"superman\",\n    name: \"Superman\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  tBarRow: {\n    id: \"tBarRow\",\n    name: \"T Bar Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"leverageMachine\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 90, unit: \"lb\" },\n    startingWeightKg: { value: 40, unit: \"kg\" },\n  },\n  thruster: {\n    id: \"thruster\",\n    name: \"Thruster\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"lower\", \"push\"],\n    startingWeightLb: { value: 65, unit: \"lb\" },\n    startingWeightKg: { value: 27.5, unit: \"kg\" },\n  },\n  toesToBar: {\n    id: \"toesToBar\",\n    name: \"Toes To Bar\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  torsoRotation: {\n    id: \"torsoRotation\",\n    name: \"Torso Rotation\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  trapBarDeadlift: {\n    id: \"trapBarDeadlift\",\n    name: \"Trap Bar Deadlift\",\n    defaultWarmup: 10,\n    defaultEquipment: \"trapbar\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 185, unit: \"lb\" },\n    startingWeightKg: { value: 82.5, unit: \"kg\" },\n  },\n  tricepsDip: {\n    id: \"tricepsDip\",\n    name: \"Triceps Dip\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  tricepsExtension: {\n    id: \"tricepsExtension\",\n    name: \"Triceps Extension\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 20, unit: \"lb\" },\n    startingWeightKg: { value: 7.5, unit: \"kg\" },\n  },\n  tricepsPushdown: {\n    id: \"tricepsPushdown\",\n    name: \"Triceps Pushdown\",\n    defaultWarmup: 10,\n    defaultEquipment: \"cable\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 40, unit: \"lb\" },\n    startingWeightKg: { value: 17.5, unit: \"kg\" },\n  },\n  uprightRow: {\n    id: \"uprightRow\",\n    name: \"Upright Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 20, unit: \"lb\" },\n    startingWeightKg: { value: 7.5, unit: \"kg\" },\n  },\n  vUp: {\n    id: \"vUp\",\n    name: \"V Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  widePullUp: {\n    id: \"widePullUp\",\n    name: \"Wide Pull Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  wristCurl: {\n    id: \"wristCurl\",\n    name: \"Wrist Curl\",\n    defaultWarmup: 10,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 25, unit: \"lb\" },\n    startingWeightKg: { value: 10, unit: \"kg\" },\n  },\n  wristRoller: {\n    id: \"wristRoller\",\n    name: \"Wrist Roller\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  zercherSquat: {\n    id: \"zercherSquat\",\n    name: \"Zercher Squat\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 105, unit: \"lb\" },\n    startingWeightKg: { value: 47.5, unit: \"kg\" },\n  },\n  wallPushup: {\n    id: \"wallPushup\",\n    name: \"Wall Push Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  inclinePushup: {\n    id: \"inclinePushup\",\n    name: \"Incline Push Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  kneePushup: {\n    id: \"kneePushup\",\n    name: \"Knee Push Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  diamondPushup: {\n    id: \"diamondPushup\",\n    name: \"Diamond Push Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  pseudoPlanchePushup: {\n    id: \"pseudoPlanchePushup\",\n    name: \"Pseudo Planche Push Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  pikePushup: {\n    id: \"pikePushup\",\n    name: \"Pike Push Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  ringDip: {\n    id: \"ringDip\",\n    name: \"Ring Dip\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  negativeDip: {\n    id: \"negativeDip\",\n    name: \"Negative Dip\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  verticalRow: {\n    id: \"verticalRow\",\n    name: \"Vertical Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  wideRow: {\n    id: \"wideRow\",\n    name: \"Wide Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  ringRow: {\n    id: \"ringRow\",\n    name: \"Ring Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  tuckFrontLeverRow: {\n    id: \"tuckFrontLeverRow\",\n    name: \"Tuck Front Lever Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  frontLeverRow: {\n    id: \"frontLeverRow\",\n    name: \"Front Lever Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  scapularPullUp: {\n    id: \"scapularPullUp\",\n    name: \"Scapular Pull Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  deadHang: {\n    id: \"deadHang\",\n    name: \"Dead Hang\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  negativePullup: {\n    id: \"negativePullup\",\n    name: \"Negative Pull Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  assistedSquat: {\n    id: \"assistedSquat\",\n    name: \"Assisted Squat\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  shrimpSquat: {\n    id: \"shrimpSquat\",\n    name: \"Shrimp Squat\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  nordicCurl: {\n    id: \"nordicCurl\",\n    name: \"Nordic Curl\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  handstand: {\n    id: \"handstand\",\n    name: \"Handstand\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  wallHandstand: {\n    id: \"wallHandstand\",\n    name: \"Wall Handstand\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  crowPose: {\n    id: \"crowPose\",\n    name: \"Crow Pose\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  dragonFlag: {\n    id: \"dragonFlag\",\n    name: \"Dragon Flag\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  copenhagenPlank: {\n    id: \"copenhagenPlank\",\n    name: \"Copenhagen Plank\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  hangingKneeRaise: {\n    id: \"hangingKneeRaise\",\n    name: \"Hanging Knee Raise\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  archHang: {\n    id: \"archHang\",\n    name: \"Arch Hang\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  supportHold: {\n    id: \"supportHold\",\n    name: \"Support Hold\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  pallofPress: {\n    id: \"pallofPress\",\n    name: \"Pallof Press\",\n    defaultWarmup: 10,\n    defaultEquipment: \"band\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  renegadeRow: {\n    id: \"renegadeRow\",\n    name: \"Renegade Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"pull\", \"core\"],\n    startingWeightLb: { value: 20, unit: \"lb\" },\n    startingWeightKg: { value: 10, unit: \"kg\" },\n  },\n};\n\nconst nameToIdMapping = ObjectUtils_keys(allExercisesList).reduce<Partial<Record<string, IExerciseId>>>(\n  (acc, key) => {\n    acc[allExercisesList[key].name.toLowerCase()] = allExercisesList[key].id;\n    return acc;\n  },\n  // Null-prototype so arbitrary exercise names (e.g. \"constructor\", \"__proto__\") can't resolve to inherited props.\n  Object.create(null) as Partial<Record<string, IExerciseId>>\n);\n\nexport const metadata: Record<IExerciseId, IMetaExercises> = {\n  abWheel: {\n    targetMuscles: [\"Iliopsoas\"],\n    synergistMuscles: [\n      \"Adductor Brevis\",\n      \"Adductor Longus\",\n      \"Deltoid Posterior\",\n      \"Latissimus Dorsi\",\n      \"Pectineous\",\n      \"Pectoralis Major Sternal Head\",\n      \"Sartorius\",\n      \"Serratus Anterior\",\n      \"Tensor Fasciae Latae\",\n      \"Teres Major\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  arnoldPress: {\n    targetMuscles: [\"Deltoid Anterior\"],\n    synergistMuscles: [\n      \"Deltoid Lateral\",\n      \"Serratus Anterior\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n      \"Triceps Brachii\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"dumbbell\", \"kettlebell\"],\n  },\n  aroundTheWorld: {\n    targetMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\", \"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\"Deltoid Lateral\", \"Deltoid Posterior\", \"Latissimus Dorsi\", \"Serratus Anterior\"],\n    bodyParts: [\"Chest\", \"Shoulders\"],\n    sortedEquipment: [\"dumbbell\"],\n  },\n  backExtension: {\n    targetMuscles: [\"Erector Spinae\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Gluteus Maximus\", \"Hamstrings\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"bodyweight\", \"leverageMachine\"],\n  },\n  ballSlams: {\n    targetMuscles: [\n      \"Infraspinatus\",\n      \"Latissimus Dorsi\",\n      \"Teres Major\",\n      \"Teres Minor\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\", \"Rectus Abdominis\"],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"medicineball\"],\n  },\n  battleRopes: {\n    targetMuscles: [\"Deltoid Posterior\"],\n    synergistMuscles: [\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Lateral\",\n      \"Infraspinatus\",\n      \"Teres Minor\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  behindTheNeckPress: {\n    targetMuscles: [\"Deltoid Anterior\"],\n    synergistMuscles: [\n      \"Deltoid Lateral\",\n      \"Serratus Anterior\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n      \"Triceps Brachii\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  benchDip: {\n    targetMuscles: [\"Triceps Brachii\"],\n    synergistMuscles: [\n      \"Deltoid Anterior\",\n      \"Latissimus Dorsi\",\n      \"Levator Scapulae\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Pectoralis Major Sternal Head\",\n      \"Serratus Anterior\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Upper Arms\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  benchPress: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\", \"Triceps Brachii\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"barbell\", \"cable\", \"dumbbell\", \"smith\", \"band\", \"kettlebell\"],\n  },\n  benchPressCloseGrip: {\n    targetMuscles: [\"Triceps Brachii\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\", \"Pectoralis Major Sternal Head\"],\n    bodyParts: [\"Upper Arms\"],\n    sortedEquipment: [\"barbell\", \"ezbar\", \"smith\"],\n  },\n  benchPressWideGrip: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\", \"Triceps Brachii\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"barbell\", \"smith\"],\n  },\n  bentOverOneArmRow: {\n    targetMuscles: [\"Latissimus Dorsi\", \"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\n      \"Infraspinatus\",\n      \"Teres Major\",\n      \"Teres Minor\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Pectoralis Major Sternal Head\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"dumbbell\"],\n  },\n  bentOverRow: {\n    targetMuscles: [\"Latissimus Dorsi\", \"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Infraspinatus\",\n      \"Pectoralis Major Sternal Head\",\n      \"Teres Major\",\n      \"Teres Minor\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"barbell\", \"cable\", \"dumbbell\", \"band\", \"leverageMachine\", \"smith\"],\n  },\n  bicepCurl: {\n    targetMuscles: [\"Biceps Brachii\"],\n    synergistMuscles: [\"Brachialis\", \"Brachioradialis\"],\n    bodyParts: [\"Upper Arms\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\", \"band\", \"leverageMachine\", \"cable\", \"ezbar\"],\n  },\n  bicycleCrunch: {\n    targetMuscles: [\"Obliques\", \"Rectus Abdominis\"],\n    synergistMuscles: [\"Gluteus Maximus\", \"Iliopsoas\", \"Quadriceps\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  boxJump: {\n    targetMuscles: [\"Quadriceps\", \"Gluteus Maximus\", \"Gastrocnemius\", \"Soleus\"],\n    synergistMuscles: [\"Hamstrings\", \"Adductor Magnus\", \"Erector Spinae\", \"Rectus Abdominis\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  boxSquat: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Quadriceps\", \"Soleus\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\"],\n  },\n  bulgarianSplitSquat: {\n    targetMuscles: [\"Quadriceps\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Gluteus Maximus\", \"Soleus\"],\n    bodyParts: [\"Hips\", \"Thighs\"],\n    sortedEquipment: [\"dumbbell\"],\n  },\n  burpee: {\n    targetMuscles: [\n      \"Quadriceps\",\n      \"Gluteus Maximus\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Pectoralis Major Sternal Head\",\n      \"Triceps Brachii\",\n      \"Deltoid Anterior\",\n      \"Deltoid Lateral\",\n      \"Deltoid Posterior\",\n      \"Rectus Abdominis\",\n    ],\n    synergistMuscles: [\n      \"Hamstrings\",\n      \"Biceps Brachii\",\n      \"Brachialis\",\n      \"Latissimus Dorsi\",\n      \"Obliques\",\n      \"Erector Spinae\",\n      \"Obliques\",\n      \"Soleus\",\n      \"Gastrocnemius\",\n      \"Tibialis Anterior\",\n    ],\n    bodyParts: [\"Chest\", \"Shoulders\", \"Upper Arms\", \"Waist\", \"Thighs\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  cableCrossover: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Latissimus Dorsi\", \"Levator Scapulae\", \"Pectoralis Major Clavicular Head\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"cable\"],\n  },\n  cableCrunch: {\n    targetMuscles: [\"Rectus Abdominis\"],\n    synergistMuscles: [\"Obliques\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"cable\"],\n  },\n  cableKickback: {\n    targetMuscles: [\"Triceps Brachii\"],\n    synergistMuscles: [],\n    bodyParts: [\"Upper Arms\"],\n    sortedEquipment: [\"cable\"],\n  },\n  cablePullThrough: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Hamstrings\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"cable\"],\n  },\n  cableTwist: {\n    targetMuscles: [\"Obliques\"],\n    synergistMuscles: [\n      \"Adductor Brevis\",\n      \"Adductor Longus\",\n      \"Adductor Magnus\",\n      \"Erector Spinae\",\n      \"Gluteus Medius\",\n      \"Iliopsoas\",\n      \"Tensor Fasciae Latae\",\n    ],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"barbell\", \"bodyweight\", \"cable\", \"leverageMachine\", \"band\"],\n  },\n  calfPressOnLegPress: {\n    targetMuscles: [\"Gastrocnemius\"],\n    synergistMuscles: [\"Soleus\"],\n    bodyParts: [\"Calves\"],\n    sortedEquipment: [\"leverageMachine\"],\n  },\n  calfPressOnSeatedLegPress: {\n    targetMuscles: [\"Gastrocnemius\"],\n    synergistMuscles: [\"Soleus\"],\n    bodyParts: [\"Calves\"],\n    sortedEquipment: [\"leverageMachine\"],\n  },\n  chestDip: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\n      \"Deltoid Anterior\",\n      \"Latissimus Dorsi\",\n      \"Levator Scapulae\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Serratus Anterior\",\n      \"Teres Major\",\n      \"Trapezius Middle Fibers\",\n      \"Triceps Brachii\",\n    ],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  chestFly: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\"Biceps Brachii\", \"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"barbell\", \"cable\", \"dumbbell\", \"leverageMachine\"],\n  },\n  chestPress: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\", \"Triceps Brachii\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"leverageMachine\", \"band\"],\n  },\n  chestSupportedRow: {\n    targetMuscles: [\"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Infraspinatus\",\n      \"Latissimus Dorsi\",\n      \"Pectoralis Major Sternal Head\",\n      \"Teres Major\",\n      \"Teres Minor\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\"],\n  },\n  chinUp: {\n    targetMuscles: [\"Latissimus Dorsi\"],\n    synergistMuscles: [\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Levator Scapulae\",\n      \"Pectoralis Major Sternal Head\",\n      \"Teres Major\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"leverageMachine\", \"bodyweight\"],\n  },\n  clean: {\n    targetMuscles: [\n      \"Gluteus Maximus\",\n      \"Hamstrings\",\n      \"Quadriceps\",\n      \"Latissimus Dorsi\",\n      \"Trapezius Lower Fibers\",\n      \"Deltoid Anterior\",\n      \"Deltoid Lateral\",\n    ],\n    synergistMuscles: [\n      \"Adductor Magnus\",\n      \"Gastrocnemius\",\n      \"Soleus\",\n      \"Erector Spinae\",\n      \"Biceps Brachii\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Pectoralis Major Sternal Head\",\n      \"Wrist Flexors\",\n    ],\n    bodyParts: [\"Hips\", \"Thighs\", \"Back\", \"Shoulders\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  cleanandJerk: {\n    targetMuscles: [\n      \"Gluteus Maximus\",\n      \"Hamstrings\",\n      \"Quadriceps\",\n      \"Latissimus Dorsi\",\n      \"Trapezius Lower Fibers\",\n      \"Deltoid Anterior\",\n      \"Deltoid Lateral\",\n    ],\n    synergistMuscles: [\n      \"Adductor Magnus\",\n      \"Gastrocnemius\",\n      \"Soleus\",\n      \"Erector Spinae\",\n      \"Biceps Brachii\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Pectoralis Major Sternal Head\",\n      \"Wrist Flexors\",\n    ],\n    bodyParts: [\"Hips\", \"Thighs\", \"Back\", \"Shoulders\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  concentrationCurl: {\n    targetMuscles: [\"Brachialis\"],\n    synergistMuscles: [\"Biceps Brachii\", \"Brachioradialis\"],\n    bodyParts: [\"Upper Arms\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\", \"band\", \"cable\"],\n  },\n  crossBodyCrunch: {\n    targetMuscles: [\"Obliques\"],\n    synergistMuscles: [\"Iliopsoas\", \"Rectus Abdominis\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  crunch: {\n    targetMuscles: [\"Rectus Abdominis\"],\n    synergistMuscles: [\"Obliques\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"cable\", \"bodyweight\", \"leverageMachine\"],\n  },\n  cycling: {\n    targetMuscles: [\"Quadriceps\", \"Hamstrings\", \"Gluteus Maximus\", \"Gastrocnemius\", \"Soleus\", \"Tibialis Anterior\"],\n    synergistMuscles: [\n      \"Adductor Magnus\",\n      \"Adductor Longus\",\n      \"Adductor Brevis\",\n      \"Iliopsoas\",\n      \"Erector Spinae\",\n      \"Rectus Abdominis\",\n      \"Obliques\",\n    ],\n    bodyParts: [\"Hips\", \"Thighs\", \"Calves\", \"Shins\", \"Back\", \"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  deadlift: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Hamstrings\", \"Quadriceps\", \"Soleus\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"barbell\", \"cable\", \"dumbbell\", \"leverageMachine\", \"smith\", \"band\", \"kettlebell\", \"bodyweight\"],\n  },\n  deadliftHighPull: {\n    targetMuscles: [\"Deltoid Lateral\", \"Gluteus Maximus\", \"Quadriceps\"],\n    synergistMuscles: [\n      \"Adductor Magnus\",\n      \"Biceps Brachii\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Anterior\",\n      \"Gastrocnemius\",\n      \"Infraspinatus\",\n      \"Soleus\",\n      \"Teres Minor\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  declineBenchPress: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\", \"Triceps Brachii\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"dumbbell\", \"smith\"],\n  },\n  declineCrunch: {\n    targetMuscles: [\"Rectus Abdominis\"],\n    synergistMuscles: [\"Obliques\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  deficitDeadlift: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Erector Spinae\", \"Hamstrings\", \"Quadriceps\", \"Soleus\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"barbell\", \"trapbar\"],\n  },\n  ellipticalMachine: {\n    targetMuscles: [],\n    synergistMuscles: [\n      \"Biceps Brachii\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Anterior\",\n      \"Deltoid Lateral\",\n      \"Deltoid Posterior\",\n      \"Gluteus Maximus\",\n      \"Hamstrings\",\n      \"Latissimus Dorsi\",\n      \"Levator Scapulae\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Pectoralis Major Sternal Head\",\n      \"Quadriceps\",\n      \"Serratus Anterior\",\n    ],\n    bodyParts: [\"Hips\", \"Thighs\", \"Back\", \"Shoulders\"],\n    sortedEquipment: [\"leverageMachine\"],\n  },\n  facePull: {\n    targetMuscles: [\"Deltoid Posterior\"],\n    synergistMuscles: [\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Lateral\",\n      \"Infraspinatus\",\n      \"Teres Minor\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"band\"],\n  },\n  flatKneeRaise: {\n    targetMuscles: [\"Iliopsoas\"],\n    synergistMuscles: [\"Adductor Brevis\", \"Adductor Longus\", \"Pectineous\", \"Sartorius\", \"Tensor Fasciae Latae\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  flatLegRaise: {\n    targetMuscles: [\"Iliopsoas\"],\n    synergistMuscles: [\n      \"Adductor Brevis\",\n      \"Adductor Longus\",\n      \"Pectineous\",\n      \"Quadriceps\",\n      \"Sartorius\",\n      \"Tensor Fasciae Latae\",\n    ],\n    bodyParts: [\"Hips\", \"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  frontRaise: {\n    targetMuscles: [\"Deltoid Anterior\"],\n    synergistMuscles: [\n      \"Deltoid Lateral\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Serratus Anterior\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"barbell\", \"cable\", \"dumbbell\", \"bodyweight\", \"band\"],\n  },\n  gluteBridge: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [\"Quadriceps\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"band\", \"barbell\", \"dumbbell\"],\n  },\n  gluteBridgeMarch: {\n    targetMuscles: [\"Gluteus Maximus\", \"Rectus Abdominis\"],\n    synergistMuscles: [\"Hamstrings\", \"Quadriceps\", \"Sartorius\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  gluteKickback: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [\"Adductor Magnus\"],\n    bodyParts: [\"Glute\"],\n    sortedEquipment: [\"leverageMachine\", \"bodyweight\", \"cable\", \"band\"],\n  },\n  frontSquat: {\n    targetMuscles: [\"Quadriceps\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Gluteus Maximus\", \"Soleus\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"barbell\", \"kettlebell\", \"dumbbell\", \"cable\", \"smith\"],\n  },\n  gobletSquat: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Quadriceps\", \"Soleus\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"kettlebell\", \"dumbbell\"],\n  },\n  goodMorning: {\n    targetMuscles: [\"Hamstrings\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Gluteus Maximus\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"barbell\", \"smith\", \"leverageMachine\"],\n  },\n  hackSquat: {\n    targetMuscles: [\"Quadriceps\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Gluteus Maximus\", \"Soleus\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"barbell\", \"smith\"],\n  },\n  hammerCurl: {\n    targetMuscles: [\"Brachioradialis\"],\n    synergistMuscles: [\"Biceps Brachii\", \"Brachialis\"],\n    bodyParts: [\"Forearms\"],\n    sortedEquipment: [\"cable\", \"dumbbell\", \"band\"],\n  },\n  handstandPushUp: {\n    targetMuscles: [\"Deltoid Anterior\"],\n    synergistMuscles: [\n      \"Deltoid Lateral\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Serratus Anterior\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n      \"Triceps Brachii\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  hangClean: {\n    targetMuscles: [\"Biceps Brachii\", \"Brachialis\", \"Brachioradialis\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\"],\n    bodyParts: [\"Forearms\"],\n    sortedEquipment: [\"kettlebell\"],\n  },\n  hangSnatch: {\n    targetMuscles: [\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n      \"Trapezius Upper Fibers\",\n      \"Quadriceps\",\n      \"Gluteus Maximus\",\n    ],\n    synergistMuscles: [\n      \"Hamstrings\",\n      \"Erector Spinae\",\n      \"Deltoid Anterior\",\n      \"Deltoid Lateral\",\n      \"Deltoid Posterior\",\n      \"Latissimus Dorsi\",\n      \"Biceps Brachii\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Gastrocnemius\",\n      \"Soleus\",\n      \"Obliques\",\n      \"Rectus Abdominis\",\n    ],\n    bodyParts: [\"Thighs\", \"Back\", \"Shoulders\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  hangingLegRaise: {\n    targetMuscles: [\"Iliopsoas\"],\n    synergistMuscles: [\"Adductor Brevis\", \"Adductor Longus\", \"Pectineous\", \"Sartorius\", \"Tensor Fasciae Latae\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\", \"cable\"],\n  },\n  highKneeSkips: {\n    targetMuscles: [\"Quadriceps\", \"Hamstrings\", \"Gluteus Maximus\"],\n    synergistMuscles: [\n      \"Iliopsoas\",\n      \"Gastrocnemius\",\n      \"Soleus\",\n      \"Tibialis Anterior\",\n      \"Rectus Abdominis\",\n      \"Obliques\",\n      \"Adductor Magnus\",\n      \"Adductor Brevis\",\n      \"Adductor Longus\",\n    ],\n    bodyParts: [\"Thighs\", \"Hips\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  highRow: {\n    targetMuscles: [\"Latissimus Dorsi\", \"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Erector Spinae\",\n      \"Infraspinatus\",\n      \"Pectoralis Major Sternal Head\",\n      \"Teres Major\",\n      \"Teres Minor\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"leverageMachine\"],\n  },\n  hipAbductor: {\n    targetMuscles: [\"Gluteus Maximus\", \"Gluteus Medius\"],\n    synergistMuscles: [\"Tensor Fasciae Latae\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"leverageMachine\", \"bodyweight\", \"cable\", \"band\"],\n  },\n  hipAdductor: {\n    targetMuscles: [\"Adductor Brevis\", \"Adductor Longus\", \"Adductor Magnus\"],\n    synergistMuscles: [\"Pectineous\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"leverageMachine\", \"cable\", \"band\", \"bodyweight\"],\n  },\n  hipThrust: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [\"Quadriceps\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"barbell\", \"leverageMachine\", \"band\", \"bodyweight\"],\n  },\n  inclineBenchPress: {\n    targetMuscles: [\"Pectoralis Major Clavicular Head\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Sternal Head\", \"Triceps Brachii\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"barbell\", \"cable\", \"dumbbell\", \"smith\"],\n  },\n  inclineBenchPressWideGrip: {\n    targetMuscles: [\"Pectoralis Major Clavicular Head\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Sternal Head\", \"Triceps Brachii\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  inclineChestFly: {\n    targetMuscles: [\"Pectoralis Major Clavicular Head\"],\n    synergistMuscles: [\"Biceps Brachii\", \"Deltoid Anterior\", \"Pectoralis Major Sternal Head\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"cable\", \"dumbbell\"],\n  },\n  inclineChestPress: {\n    targetMuscles: [\"Pectoralis Major Clavicular Head\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Sternal Head\", \"Triceps Brachii\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"leverageMachine\", \"band\", \"dumbbell\"],\n  },\n  inclineCurl: {\n    targetMuscles: [\"Biceps Brachii\"],\n    synergistMuscles: [\"Brachialis\", \"Brachioradialis\"],\n    bodyParts: [\"Upper Arms\"],\n    sortedEquipment: [\"dumbbell\"],\n  },\n  inclineRow: {\n    targetMuscles: [\"Latissimus Dorsi\", \"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Infraspinatus\",\n      \"Pectoralis Major Sternal Head\",\n      \"Teres Major\",\n      \"Teres Minor\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\"],\n  },\n  invertedRow: {\n    targetMuscles: [\"Latissimus Dorsi\", \"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\n      \"Infraspinatus\",\n      \"Teres Major\",\n      \"Teres Minor\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Pectoralis Major Sternal Head\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  isoLateralChestPress: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\", \"Triceps Brachii\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"dumbbell\"],\n  },\n  isoLateralRow: {\n    targetMuscles: [\"Latissimus Dorsi\", \"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Infraspinatus\",\n      \"Pectoralis Major Sternal Head\",\n      \"Teres Major\",\n      \"Teres Minor\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"dumbbell\"],\n  },\n  jackknifeSitUp: {\n    targetMuscles: [\"Rectus Abdominis\"],\n    synergistMuscles: [\"Iliopsoas\", \"Obliques\", \"Quadriceps\", \"Sartorius\", \"Tensor Fasciae Latae\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  jumpRope: {\n    targetMuscles: [\"Soleus\", \"Gastrocnemius\", \"Quadriceps\", \"Hamstrings\"],\n    synergistMuscles: [\"Gluteus Maximus\", \"Rectus Abdominis\", \"Obliques\", \"Tibialis Anterior\"],\n    bodyParts: [\"Thighs\", \"Calves\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  jumpSquat: {\n    targetMuscles: [\"Gluteus Maximus\", \"Quadriceps\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Gastrocnemius\", \"Soleus\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"barbell\", \"bodyweight\"],\n  },\n  jumpingJack: {\n    targetMuscles: [\n      \"Gluteus Maximus\",\n      \"Quadriceps\",\n      \"Adductor Brevis\",\n      \"Adductor Longus\",\n      \"Adductor Magnus\",\n      \"Deltoid Anterior\",\n      \"Deltoid Lateral\",\n      \"Deltoid Posterior\",\n    ],\n    synergistMuscles: [\n      \"Gastrocnemius\",\n      \"Soleus\",\n      \"Hamstrings\",\n      \"Rectus Abdominis\",\n      \"Obliques\",\n      \"Trapezius Upper Fibers\",\n      \"Serratus Anterior\",\n    ],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  kettlebellSwing: {\n    targetMuscles: [\"Deltoid Anterior\", \"Gluteus Maximus\"],\n    synergistMuscles: [\n      \"Adductor Magnus\",\n      \"Hamstrings\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Serratus Anterior\",\n      \"Soleus\",\n    ],\n    bodyParts: [\"Hips\", \"Shoulders\"],\n    sortedEquipment: [\"dumbbell\", \"kettlebell\"],\n  },\n  kettlebellTurkishGetUp: {\n    targetMuscles: [\"Deltoid Anterior\", \"Deltoid Lateral\", \"Deltoid Posterior\", \"Quadriceps\", \"Gluteus Maximus\"],\n    synergistMuscles: [\n      \"Obliques\",\n      \"Rectus Abdominis\",\n      \"Latissimus Dorsi\",\n      \"Hamstrings\",\n      \"Adductor Brevis\",\n      \"Adductor Longus\",\n      \"Adductor Magnus\",\n      \"Triceps Brachii\",\n      \"Erector Spinae\",\n      \"Serratus Anterior\",\n    ],\n    bodyParts: [\"Hips\", \"Shoulders\"],\n    sortedEquipment: [\"kettlebell\"],\n  },\n  kippingPullUp: {\n    targetMuscles: [\n      \"Latissimus Dorsi\",\n      \"Brachialis\",\n      \"Biceps Brachii\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    synergistMuscles: [\n      \"Deltoid Posterior\",\n      \"Brachioradialis\",\n      \"Pectoralis Major Sternal Head\",\n      \"Rectus Abdominis\",\n      \"Obliques\",\n      \"Iliopsoas\",\n      \"Tensor Fasciae Latae\",\n      \"Adductor Longus\",\n      \"Adductor Brevis\",\n      \"Erector Spinae\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  kneeRaise: {\n    targetMuscles: [\"Iliopsoas\"],\n    synergistMuscles: [\"Adductor Brevis\", \"Adductor Longus\", \"Pectineous\", \"Sartorius\", \"Tensor Fasciae Latae\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  kneelingPulldown: {\n    targetMuscles: [\"Latissimus Dorsi\"],\n    synergistMuscles: [\n      \"Biceps Brachii\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Levator Scapulae\",\n      \"Pectoralis Major Sternal Head\",\n      \"Serratus Anterior\",\n      \"Teres Major\",\n      \"Trapezius Middle Fibers\",\n      \"Triceps Brachii\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"band\"],\n  },\n  kneestoElbows: {\n    targetMuscles: [\"Rectus Abdominis\"],\n    synergistMuscles: [\n      \"Adductor Brevis\",\n      \"Adductor Longus\",\n      \"Iliopsoas\",\n      \"Obliques\",\n      \"Pectineous\",\n      \"Sartorius\",\n      \"Tensor Fasciae Latae\",\n    ],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  latPulldown: {\n    targetMuscles: [\"Latissimus Dorsi\"],\n    synergistMuscles: [\n      \"Biceps Brachii\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Infraspinatus\",\n      \"Levator Scapulae\",\n      \"Teres Major\",\n      \"Teres Minor\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"cable\"],\n  },\n  lateralBoxJump: {\n    targetMuscles: [\"Gluteus Maximus\", \"Quadriceps\", \"Hamstrings\"],\n    synergistMuscles: [\n      \"Adductor Brevis\",\n      \"Adductor Longus\",\n      \"Adductor Magnus\",\n      \"Gluteus Medius\",\n      \"Tensor Fasciae Latae\",\n      \"Rectus Abdominis\",\n      \"Obliques\",\n      \"Deltoid Anterior\",\n      \"Deltoid Posterior\",\n      \"Deltoid Lateral\",\n    ],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  lateralRaise: {\n    targetMuscles: [\"Deltoid Lateral\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Serratus Anterior\", \"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"cable\", \"dumbbell\", \"leverageMachine\", \"band\", \"kettlebell\"],\n  },\n  legsUpBenchPress: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\", \"Triceps Brachii\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  legCurl: {\n    targetMuscles: [\"Hamstrings\"],\n    synergistMuscles: [\"Gastrocnemius\", \"Sartorius\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"leverageMachine\"],\n  },\n  legExtension: {\n    targetMuscles: [\"Quadriceps\"],\n    synergistMuscles: [],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"leverageMachine\", \"band\"],\n  },\n  legPress: {\n    targetMuscles: [\"Quadriceps\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Gluteus Maximus\", \"Soleus\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"smith\", \"leverageMachine\"],\n  },\n  lunge: {\n    targetMuscles: [\"Quadriceps\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Gluteus Maximus\", \"Soleus\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\", \"bodyweight\", \"cable\"],\n  },\n  lyingBicepCurl: {\n    targetMuscles: [\"Biceps Brachii\"],\n    synergistMuscles: [\"Brachialis\", \"Brachioradialis\"],\n    bodyParts: [\"Upper Arms\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\", \"band\", \"leverageMachine\", \"cable\", \"ezbar\"],\n  },\n  lyingLegCurl: {\n    targetMuscles: [\"Hamstrings\"],\n    synergistMuscles: [\"Gastrocnemius\", \"Sartorius\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"leverageMachine\", \"band\"],\n  },\n  mountainClimber: {\n    targetMuscles: [\"Iliopsoas\"],\n    synergistMuscles: [\"Adductor Brevis\", \"Adductor Longus\", \"Pectineous\", \"Sartorius\", \"Tensor Fasciae Latae\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  muscleUp: {\n    targetMuscles: [\n      \"Biceps Brachii\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Infraspinatus\",\n      \"Latissimus Dorsi\",\n      \"Pectoralis Major Sternal Head\",\n      \"Teres Major\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n      \"Triceps Brachii\",\n    ],\n    synergistMuscles: [],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  obliqueCrunch: {\n    targetMuscles: [\"Obliques\"],\n    synergistMuscles: [\"Rectus Abdominis\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  overheadPress: {\n    targetMuscles: [\"Deltoid Anterior\"],\n    synergistMuscles: [\n      \"Deltoid Lateral\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Serratus Anterior\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n      \"Triceps Brachii\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\", \"ezbar\"],\n  },\n  overheadSquat: {\n    targetMuscles: [\"Quadriceps\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Gluteus Maximus\", \"Soleus\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\"],\n  },\n  pecDeck: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\"Pectoralis Major Clavicular Head\", \"Serratus Anterior\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"leverageMachine\"],\n  },\n  pendlayRow: {\n    targetMuscles: [\n      \"Deltoid Posterior\",\n      \"Infraspinatus\",\n      \"Latissimus Dorsi\",\n      \"Teres Major\",\n      \"Teres Minor\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    synergistMuscles: [\"Brachialis\", \"Brachioradialis\", \"Pectoralis Major Sternal Head\"],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  pistolSquat: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Quadriceps\", \"Soleus\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"kettlebell\", \"leverageMachine\", \"bodyweight\"],\n  },\n  plank: {\n    targetMuscles: [\"Rectus Abdominis\"],\n    synergistMuscles: [],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  powerClean: {\n    targetMuscles: [\"Quadriceps\", \"Gluteus Maximus\", \"Deltoid Anterior\"],\n    synergistMuscles: [\n      \"Hamstrings\",\n      \"Gastrocnemius\",\n      \"Soleus\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n      \"Trapezius Upper Fibers\",\n      \"Latissimus Dorsi\",\n      \"Erector Spinae\",\n      \"Biceps Brachii\",\n      \"Wrist Flexors\",\n      \"Rectus Abdominis\",\n      \"Obliques\",\n    ],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  powerSnatch: {\n    targetMuscles: [\"Quadriceps\", \"Gluteus Maximus\", \"Deltoid Anterior\", \"Deltoid Lateral\", \"Deltoid Posterior\"],\n    synergistMuscles: [\n      \"Hamstrings\",\n      \"Gastrocnemius\",\n      \"Soleus\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n      \"Trapezius Upper Fibers\",\n      \"Latissimus Dorsi\",\n      \"Erector Spinae\",\n      \"Biceps Brachii\",\n      \"Wrist Flexors\",\n      \"Rectus Abdominis\",\n      \"Obliques\",\n    ],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  preacherCurl: {\n    targetMuscles: [\"Brachialis\"],\n    synergistMuscles: [\"Biceps Brachii\", \"Brachioradialis\"],\n    bodyParts: [\"Upper Arms\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\", \"ezbar\", \"leverageMachine\"],\n  },\n  pressUnder: {\n    targetMuscles: [\"Quadriceps\", \"Deltoid Anterior\", \"Deltoid Lateral\", \"Deltoid Posterior\"],\n    synergistMuscles: [\n      \"Gluteus Maximus\",\n      \"Hamstrings\",\n      \"Erector Spinae\",\n      \"Rectus Abdominis\",\n      \"Obliques\",\n      \"Triceps Brachii\",\n      \"Biceps Brachii\",\n    ],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  pullUp: {\n    targetMuscles: [\"Latissimus Dorsi\"],\n    synergistMuscles: [\n      \"Biceps Brachii\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Infraspinatus\",\n      \"Levator Scapulae\",\n      \"Teres Major\",\n      \"Teres Minor\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"leverageMachine\", \"bodyweight\", \"band\"],\n  },\n  pullover: {\n    targetMuscles: [\"Latissimus Dorsi\"],\n    synergistMuscles: [\n      \"Deltoid Posterior\",\n      \"Levator Scapulae\",\n      \"Pectoralis Major Sternal Head\",\n      \"Serratus Anterior\",\n      \"Teres Major\",\n      \"Trapezius Middle Fibers\",\n      \"Triceps Brachii\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\"],\n  },\n  pushPress: {\n    targetMuscles: [\"Deltoid Anterior\"],\n    synergistMuscles: [\n      \"Biceps Brachii\",\n      \"Brachialis\",\n      \"Deltoid Lateral\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Serratus Anterior\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"bodyweight\", \"kettlebell\"],\n  },\n  pushUp: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\", \"Triceps Brachii\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"bodyweight\", \"band\"],\n  },\n  reverseCrunch: {\n    targetMuscles: [\"Rectus Abdominis\"],\n    synergistMuscles: [\"Iliopsoas\", \"Obliques\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\", \"cable\"],\n  },\n  reverseCurl: {\n    targetMuscles: [\"Brachioradialis\"],\n    synergistMuscles: [\"Biceps Brachii\", \"Brachialis\"],\n    bodyParts: [\"Forearms\"],\n    sortedEquipment: [\"barbell\", \"cable\", \"dumbbell\", \"band\"],\n  },\n  reverseFly: {\n    targetMuscles: [\"Deltoid Posterior\"],\n    synergistMuscles: [\n      \"Deltoid Lateral\",\n      \"Infraspinatus\",\n      \"Teres Minor\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"dumbbell\", \"leverageMachine\", \"band\"],\n  },\n  reverseGripConcentrationCurl: {\n    targetMuscles: [\"Brachialis\", \"Brachioradialis\"],\n    synergistMuscles: [\"Biceps Brachii\", \"Wrist Flexors\"],\n    bodyParts: [\"Upper Arms\"],\n    sortedEquipment: [\"dumbbell\"],\n  },\n  reverseLatPulldown: {\n    targetMuscles: [\"Latissimus Dorsi\"],\n    synergistMuscles: [\n      \"Biceps Brachii\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Levator Scapulae\",\n      \"Pectoralis Major Sternal Head\",\n      \"Teres Major\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"cable\"],\n  },\n  reverseLunge: {\n    targetMuscles: [\"Quadriceps\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Soleus\", \"Gluteus Maximus\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\", \"bodyweight\", \"cable\"],\n  },\n  reverseWristCurl: {\n    targetMuscles: [\"Wrist Extensors\"],\n    synergistMuscles: [],\n    bodyParts: [\"Forearms\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  reversePlank: {\n    targetMuscles: [\"Gluteus Maximus\", \"Rectus Abdominis\", \"Erector Spinae\"],\n    synergistMuscles: [\n      \"Hamstrings\",\n      \"Quadriceps\",\n      \"Deltoid Anterior\",\n      \"Deltoid Lateral\",\n      \"Deltoid Posterior\",\n      \"Triceps Brachii\",\n      \"Latissimus Dorsi\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  romanianDeadlift: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Erector Spinae\", \"Hamstrings\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\"],\n  },\n  reverseHyperextension: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [\"Hamstrings\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"band\", \"leverageMachine\"],\n  },\n  rowing: {\n    targetMuscles: [\"Quadriceps\", \"Latissimus Dorsi\", \"Erector Spinae\"],\n    synergistMuscles: [\n      \"Hamstrings\",\n      \"Gluteus Maximus\",\n      \"Biceps Brachii\",\n      \"Deltoid Anterior\",\n      \"Deltoid Lateral\",\n      \"Deltoid Posterior\",\n      \"Wrist Flexors\",\n      \"Rectus Abdominis\",\n      \"Obliques\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"cable\"],\n  },\n  russianTwist: {\n    targetMuscles: [\"Obliques\"],\n    synergistMuscles: [\"Erector Spinae\", \"Iliopsoas\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\", \"dumbbell\", \"cable\"],\n  },\n  safetySquatBarSquat: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Quadriceps\", \"Soleus\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  seatedCalfRaise: {\n    targetMuscles: [\"Soleus\"],\n    synergistMuscles: [\"Gastrocnemius\"],\n    bodyParts: [\"Calves\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\", \"leverageMachine\"],\n  },\n  seatedFrontRaise: {\n    targetMuscles: [\"Deltoid Anterior\"],\n    synergistMuscles: [\n      \"Deltoid Lateral\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Serratus Anterior\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\"],\n  },\n  seatedLegCurl: {\n    targetMuscles: [\"Hamstrings\"],\n    synergistMuscles: [\"Gastrocnemius\", \"Sartorius\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"leverageMachine\"],\n  },\n  seatedLegPress: {\n    targetMuscles: [\"Gluteus Maximus\", \"Quadriceps\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Soleus\"],\n    bodyParts: [\"Hips\", \"Thighs\"],\n    sortedEquipment: [\"leverageMachine\"],\n  },\n  seatedOverheadPress: {\n    targetMuscles: [\"Deltoid Anterior\"],\n    synergistMuscles: [\n      \"Deltoid Lateral\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Serratus Anterior\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n      \"Triceps Brachii\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  seatedPalmsUpWristCurl: {\n    targetMuscles: [\"Wrist Flexors\"],\n    synergistMuscles: [],\n    bodyParts: [\"Forearms\"],\n    sortedEquipment: [\"dumbbell\"],\n  },\n  seatedRow: {\n    targetMuscles: [\"Latissimus Dorsi\", \"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Erector Spinae\",\n      \"Infraspinatus\",\n      \"Pectoralis Major Sternal Head\",\n      \"Teres Major\",\n      \"Teres Minor\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"cable\", \"band\", \"leverageMachine\"],\n  },\n  seatedWideGripRow: {\n    targetMuscles: [\"Latissimus Dorsi\", \"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Erector Spinae\",\n      \"Infraspinatus\",\n      \"Pectoralis Major Sternal Head\",\n      \"Teres Major\",\n      \"Teres Minor\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"cable\"],\n  },\n  shoulderPress: {\n    targetMuscles: [\"Deltoid Anterior\"],\n    synergistMuscles: [\n      \"Deltoid Lateral\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Serratus Anterior\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n      \"Triceps Brachii\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"cable\", \"dumbbell\", \"leverageMachine\", \"band\", \"smith\"],\n  },\n  shoulderPressParallelGrip: {\n    targetMuscles: [\"Deltoid Anterior\"],\n    synergistMuscles: [\n      \"Deltoid Lateral\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Serratus Anterior\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n      \"Triceps Brachii\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"dumbbell\"],\n  },\n  shrug: {\n    targetMuscles: [\"Trapezius Upper Fibers\"],\n    synergistMuscles: [\"Levator Scapulae\", \"Trapezius Middle Fibers\"],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"barbell\", \"cable\", \"dumbbell\", \"leverageMachine\", \"band\", \"smith\"],\n  },\n  sideBend: {\n    targetMuscles: [\"Obliques\"],\n    synergistMuscles: [\"Erector Spinae\", \"Iliopsoas\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"cable\", \"dumbbell\", \"band\"],\n  },\n  sideCrunch: {\n    targetMuscles: [\"Obliques\"],\n    synergistMuscles: [\"Rectus Abdominis\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\", \"band\", \"cable\"],\n  },\n  sideHipAbductor: {\n    targetMuscles: [\"Gluteus Medius\", \"Tensor Fasciae Latae\"],\n    synergistMuscles: [],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"bodyweight\", \"barbell\", \"leverageMachine\"],\n  },\n  sideLyingClam: {\n    targetMuscles: [\"Gluteus Medius\"],\n    synergistMuscles: [\"Tensor Fasciae Latae\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  sidePlank: {\n    targetMuscles: [\"Obliques\"],\n    synergistMuscles: [],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  singleLegBridge: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [\"Hamstrings\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  singleLegCalfRaise: {\n    targetMuscles: [\"Gastrocnemius\"],\n    synergistMuscles: [\"Soleus\"],\n    bodyParts: [\"Calves\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\", \"leverageMachine\", \"bodyweight\", \"cable\"],\n  },\n  singleLegDeadlift: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Hamstrings\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"dumbbell\", \"bodyweight\"],\n  },\n  singleLegGluteBridgeBench: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  singleLegGluteBridgeStraight: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  singleLegGluteBridgeBentKnee: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  singleLegHipThrust: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [\"Quadriceps\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"barbell\", \"bodyweight\", \"leverageMachine\"],\n  },\n  sissySquat: {\n    targetMuscles: [\"Quadriceps\"],\n    synergistMuscles: [\"Adductor Magnus\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  sitUp: {\n    targetMuscles: [\"Rectus Abdominis\"],\n    synergistMuscles: [\"Iliopsoas\", \"Obliques\", \"Quadriceps\", \"Sartorius\", \"Tensor Fasciae Latae\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\", \"kettlebell\"],\n  },\n  slingShotBenchPress: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\", \"Triceps Brachii\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  skullcrusher: {\n    targetMuscles: [\"Triceps Brachii\"],\n    synergistMuscles: [],\n    bodyParts: [\"Upper Arms\"],\n    sortedEquipment: [\"barbell\", \"cable\", \"dumbbell\", \"ezbar\"],\n  },\n  snatch: {\n    targetMuscles: [\"Deltoid Anterior\", \"Erector Spinae\", \"Gluteus Maximus\", \"Quadriceps\"],\n    synergistMuscles: [\n      \"Adductor Magnus\",\n      \"Deltoid Lateral\",\n      \"Gastrocnemius\",\n      \"Serratus Anterior\",\n      \"Soleus\",\n      \"Triceps Brachii\",\n    ],\n    bodyParts: [\"Hips\", \"Shoulders\", \"Thighs\"],\n    sortedEquipment: [\"dumbbell\"],\n  },\n  snatchPull: {\n    targetMuscles: [\n      \"Erector Spinae\",\n      \"Gluteus Maximus\",\n      \"Hamstrings\",\n      \"Quadriceps\",\n      \"Latissimus Dorsi\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n      \"Trapezius Upper Fibers\",\n    ],\n    synergistMuscles: [\n      \"Adductor Magnus\",\n      \"Deltoid Anterior\",\n      \"Deltoid Posterior\",\n      \"Deltoid Lateral\",\n      \"Biceps Brachii\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Triceps Brachii\",\n      \"Wrist Flexors\",\n      \"Wrist Extensors\",\n    ],\n    bodyParts: [\"Back\", \"Hips\", \"Thighs\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  splitSquat: {\n    targetMuscles: [\"Quadriceps\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Gluteus Maximus\", \"Soleus\"],\n    bodyParts: [\"Hips\", \"Thighs\"],\n    sortedEquipment: [\"dumbbell\"],\n  },\n  splitJerk: {\n    targetMuscles: [\n      \"Deltoid Anterior\",\n      \"Deltoid Posterior\",\n      \"Deltoid Lateral\",\n      \"Triceps Brachii\",\n      \"Quadriceps\",\n      \"Gluteus Maximus\",\n      \"Erector Spinae\",\n    ],\n    synergistMuscles: [\n      \"Pectoralis Major Sternal Head\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Latissimus Dorsi\",\n      \"Hamstrings\",\n      \"Obliques\",\n      \"Rectus Abdominis\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n      \"Trapezius Upper Fibers\",\n      \"Adductor Magnus\",\n      \"Tensor Fasciae Latae\",\n      \"Wrist Extensors\",\n      \"Wrist Flexors\",\n    ],\n    bodyParts: [\"Hips\", \"Shoulders\", \"Thighs\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  squat: {\n    targetMuscles: [\"Quadriceps\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Gluteus Maximus\", \"Soleus\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\", \"bodyweight\", \"smith\", \"leverageMachine\"],\n  },\n  squatRow: {\n    targetMuscles: [\"Gluteus Maximus\", \"Latissimus Dorsi\", \"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\n      \"Infraspinatus\",\n      \"Teres Major\",\n      \"Teres Minor\",\n      \"Adductor Magnus\",\n      \"Deltoid Posterior\",\n      \"Pectoralis Major Sternal Head\",\n      \"Quadriceps\",\n      \"Soleus\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"band\"],\n  },\n  standingCalfRaise: {\n    targetMuscles: [\"Gastrocnemius\"],\n    synergistMuscles: [\"Soleus\"],\n    bodyParts: [\"Calves\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\", \"leverageMachine\", \"bodyweight\", \"cable\"],\n  },\n  standingRow: {\n    targetMuscles: [\"Latissimus Dorsi\", \"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Infraspinatus\",\n      \"Pectoralis Major Sternal Head\",\n      \"Teres Major\",\n      \"Teres Minor\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"cable\"],\n  },\n  standingRowCloseGrip: {\n    targetMuscles: [\"Latissimus Dorsi\", \"Trapezius Upper Fibers\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\n      \"Infraspinatus\",\n      \"Teres Major\",\n      \"Teres Minor\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"cable\"],\n  },\n  standingRowRearDeltWithRope: {\n    targetMuscles: [\"Deltoid Posterior\"],\n    synergistMuscles: [\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Lateral\",\n      \"Infraspinatus\",\n      \"Teres Minor\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"cable\"],\n  },\n  standingRowRearHorizontalDeltWithRope: {\n    targetMuscles: [\"Deltoid Posterior\"],\n    synergistMuscles: [\"Infraspinatus\", \"Teres Minor\", \"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"cable\"],\n  },\n  standingRowVBar: {\n    targetMuscles: [\"Latissimus Dorsi\", \"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\n      \"Infraspinatus\",\n      \"Teres Major\",\n      \"Teres Minor\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Pectoralis Major Sternal Head\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"cable\"],\n  },\n  stepUp: {\n    targetMuscles: [\"Quadriceps\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Gluteus Maximus\", \"Soleus\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\", \"bodyweight\", \"band\"],\n  },\n  stiffLegDeadlift: {\n    targetMuscles: [\"Erector Spinae\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Gluteus Maximus\", \"Hamstrings\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\", \"band\"],\n  },\n  straightLegDeadlift: {\n    targetMuscles: [\"Hamstrings\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Erector Spinae\", \"Gluteus Maximus\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\", \"band\", \"kettlebell\"],\n  },\n  sumoDeadlift: {\n    targetMuscles: [\"Erector Spinae\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Gluteus Maximus\", \"Quadriceps\", \"Soleus\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  sumoDeadliftHighPull: {\n    targetMuscles: [\"Deltoid Lateral\", \"Gluteus Maximus\", \"Quadriceps\"],\n    synergistMuscles: [\n      \"Adductor Magnus\",\n      \"Biceps Brachii\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Anterior\",\n      \"Gastrocnemius\",\n      \"Infraspinatus\",\n      \"Soleus\",\n      \"Teres Minor\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  superman: {\n    targetMuscles: [\"Erector Spinae\"],\n    synergistMuscles: [\"Gluteus Maximus\", \"Hamstrings\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\", \"dumbbell\"],\n  },\n  tBarRow: {\n    targetMuscles: [\"Latissimus Dorsi\", \"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Infraspinatus\",\n      \"Pectoralis Major Sternal Head\",\n      \"Teres Major\",\n      \"Teres Minor\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"leverageMachine\"],\n  },\n  thruster: {\n    targetMuscles: [\"Deltoid Anterior\", \"Gluteus Maximus\", \"Quadriceps\"],\n    synergistMuscles: [\n      \"Adductor Magnus\",\n      \"Deltoid Lateral\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Serratus Anterior\",\n      \"Soleus\",\n      \"Triceps Brachii\",\n    ],\n    bodyParts: [\"Shoulders\", \"Thighs\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  toesToBar: {\n    targetMuscles: [\"Rectus Abdominis\"],\n    synergistMuscles: [\"Iliopsoas\", \"Obliques\", \"Quadriceps\", \"Sartorius\", \"Tensor Fasciae Latae\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  torsoRotation: {\n    targetMuscles: [\"Obliques\"],\n    synergistMuscles: [\"Erector Spinae\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"cable\"],\n  },\n  trapBarDeadlift: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Quadriceps\", \"Soleus\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"trapbar\"],\n  },\n  tricepsDip: {\n    targetMuscles: [\"Triceps Brachii\"],\n    synergistMuscles: [\n      \"Deltoid Anterior\",\n      \"Latissimus Dorsi\",\n      \"Levator Scapulae\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Pectoralis Major Sternal Head\",\n    ],\n    bodyParts: [\"Upper Arms\"],\n    sortedEquipment: [\"bodyweight\", \"leverageMachine\"],\n  },\n  tricepsExtension: {\n    targetMuscles: [\"Triceps Brachii\"],\n    synergistMuscles: [],\n    bodyParts: [\"Upper Arms\"],\n    sortedEquipment: [\"barbell\", \"cable\", \"band\", \"dumbbell\"],\n  },\n  tricepsPushdown: {\n    targetMuscles: [\"Triceps Brachii\"],\n    synergistMuscles: [],\n    bodyParts: [\"Upper Arms\"],\n    sortedEquipment: [\"cable\"],\n  },\n  uprightRow: {\n    targetMuscles: [\"Deltoid Lateral\"],\n    synergistMuscles: [\n      \"Biceps Brachii\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Anterior\",\n      \"Infraspinatus\",\n      \"Serratus Anterior\",\n      \"Teres Minor\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"barbell\", \"cable\", \"dumbbell\", \"band\"],\n  },\n  vUp: {\n    targetMuscles: [\"Rectus Abdominis\"],\n    synergistMuscles: [\"Iliopsoas\", \"Obliques\", \"Pectineous\", \"Quadriceps\", \"Sartorius\", \"Tensor Fasciae Latae\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\", \"band\", \"dumbbell\"],\n  },\n  widePullUp: {\n    targetMuscles: [\"Latissimus Dorsi\"],\n    synergistMuscles: [\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Infraspinatus\",\n      \"Levator Scapulae\",\n      \"Serratus Anterior\",\n      \"Teres Major\",\n      \"Teres Minor\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  wristCurl: {\n    targetMuscles: [\"Wrist Flexors\"],\n    synergistMuscles: [],\n    bodyParts: [\"Forearms\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  wristRoller: {\n    targetMuscles: [\"Wrist Extensors\", \"Wrist Flexors\"],\n    synergistMuscles: [],\n    bodyParts: [\"Forearms\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  zercherSquat: {\n    targetMuscles: [\"Quadriceps\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Gluteus Maximus\", \"Soleus\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  wallPushup: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\", \"Triceps Brachii\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  inclinePushup: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\", \"Triceps Brachii\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  kneePushup: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\", \"Triceps Brachii\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  diamondPushup: {\n    targetMuscles: [\"Triceps Brachii\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\", \"Pectoralis Major Sternal Head\"],\n    bodyParts: [\"Upper Arms\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  pseudoPlanchePushup: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\", \"Serratus Anterior\", \"Triceps Brachii\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  pikePushup: {\n    targetMuscles: [\"Deltoid Anterior\"],\n    synergistMuscles: [\"Deltoid Lateral\", \"Pectoralis Major Clavicular Head\", \"Serratus Anterior\", \"Triceps Brachii\"],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  ringDip: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\n      \"Deltoid Anterior\",\n      \"Latissimus Dorsi\",\n      \"Levator Scapulae\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Serratus Anterior\",\n      \"Teres Major\",\n      \"Trapezius Middle Fibers\",\n      \"Triceps Brachii\",\n    ],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  negativeDip: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\n      \"Deltoid Anterior\",\n      \"Latissimus Dorsi\",\n      \"Levator Scapulae\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Serratus Anterior\",\n      \"Teres Major\",\n      \"Trapezius Middle Fibers\",\n      \"Triceps Brachii\",\n    ],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  verticalRow: {\n    targetMuscles: [\"Latissimus Dorsi\", \"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\n      \"Infraspinatus\",\n      \"Teres Major\",\n      \"Teres Minor\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Pectoralis Major Sternal Head\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  wideRow: {\n    targetMuscles: [\"Latissimus Dorsi\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\n      \"Deltoid Posterior\",\n      \"Infraspinatus\",\n      \"Teres Major\",\n      \"Teres Minor\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  ringRow: {\n    targetMuscles: [\"Latissimus Dorsi\", \"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\n      \"Infraspinatus\",\n      \"Teres Major\",\n      \"Teres Minor\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Pectoralis Major Sternal Head\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  tuckFrontLeverRow: {\n    targetMuscles: [\"Latissimus Dorsi\"],\n    synergistMuscles: [\n      \"Teres Major\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n      \"Deltoid Posterior\",\n      \"Rectus Abdominis\",\n      \"Brachialis\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  frontLeverRow: {\n    targetMuscles: [\"Latissimus Dorsi\"],\n    synergistMuscles: [\n      \"Teres Major\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n      \"Deltoid Posterior\",\n      \"Rectus Abdominis\",\n      \"Brachialis\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  scapularPullUp: {\n    targetMuscles: [\"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\"Latissimus Dorsi\", \"Levator Scapulae\", \"Serratus Anterior\", \"Teres Major\"],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  deadHang: {\n    targetMuscles: [\"Latissimus Dorsi\", \"Wrist Flexors\"],\n    synergistMuscles: [\"Teres Major\", \"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  negativePullup: {\n    targetMuscles: [\"Latissimus Dorsi\"],\n    synergistMuscles: [\n      \"Biceps Brachii\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Infraspinatus\",\n      \"Levator Scapulae\",\n      \"Teres Major\",\n      \"Teres Minor\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  assistedSquat: {\n    targetMuscles: [\"Quadriceps\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Gluteus Maximus\", \"Soleus\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  shrimpSquat: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Quadriceps\", \"Soleus\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  nordicCurl: {\n    targetMuscles: [\"Hamstrings\"],\n    synergistMuscles: [\"Gastrocnemius\", \"Gluteus Maximus\", \"Erector Spinae\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  handstand: {\n    targetMuscles: [\"Deltoid Anterior\"],\n    synergistMuscles: [\n      \"Deltoid Lateral\",\n      \"Trapezius Upper Fibers\",\n      \"Triceps Brachii\",\n      \"Serratus Anterior\",\n      \"Rectus Abdominis\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  wallHandstand: {\n    targetMuscles: [\"Deltoid Anterior\"],\n    synergistMuscles: [\n      \"Deltoid Lateral\",\n      \"Trapezius Upper Fibers\",\n      \"Triceps Brachii\",\n      \"Serratus Anterior\",\n      \"Rectus Abdominis\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  crowPose: {\n    targetMuscles: [\"Deltoid Anterior\"],\n    synergistMuscles: [\"Triceps Brachii\", \"Serratus Anterior\", \"Rectus Abdominis\", \"Wrist Flexors\"],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  dragonFlag: {\n    targetMuscles: [\"Rectus Abdominis\"],\n    synergistMuscles: [\"Obliques\", \"Iliopsoas\", \"Erector Spinae\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  copenhagenPlank: {\n    targetMuscles: [\"Adductor Magnus\"],\n    synergistMuscles: [\"Adductor Brevis\", \"Adductor Longus\", \"Obliques\", \"Gluteus Medius\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  hangingKneeRaise: {\n    targetMuscles: [\"Iliopsoas\"],\n    synergistMuscles: [\n      \"Adductor Brevis\",\n      \"Adductor Longus\",\n      \"Pectineous\",\n      \"Rectus Abdominis\",\n      \"Sartorius\",\n      \"Tensor Fasciae Latae\",\n    ],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  archHang: {\n    targetMuscles: [\"Latissimus Dorsi\"],\n    synergistMuscles: [\n      \"Teres Major\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n      \"Deltoid Posterior\",\n      \"Wrist Flexors\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  supportHold: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\n      \"Deltoid Anterior\",\n      \"Latissimus Dorsi\",\n      \"Serratus Anterior\",\n      \"Triceps Brachii\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  pallofPress: {\n    targetMuscles: [\"Obliques\"],\n    synergistMuscles: [\"Rectus Abdominis\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"band\"],\n  },\n  renegadeRow: {\n    targetMuscles: [\"Latissimus Dorsi\", \"Obliques\"],\n    synergistMuscles: [\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n      \"Teres Major\",\n      \"Deltoid Posterior\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Rectus Abdominis\",\n    ],\n    bodyParts: [\"Back\", \"Waist\"],\n    sortedEquipment: [\"dumbbell\"],\n  },\n};\n\nexport function equipmentToBarKey(equipment?: IEquipment): IBarKey | undefined {\n  switch (equipment) {\n    case \"barbell\":\n      return \"barbell\";\n    case \"dumbbell\":\n      return \"dumbbell\";\n    case \"ezbar\":\n      return \"ezbar\";\n    default:\n      return undefined;\n  }\n}\n\nexport function equipmentName(equipment: IEquipment | undefined, equipmentSettings?: IAllEquipment): string {\n  const equipmentData = equipment && equipmentSettings ? equipmentSettings[equipment] : undefined;\n  if (equipmentData?.name) {\n    return equipmentData.name.trim();\n  }\n  switch (equipment) {\n    case \"barbell\":\n      return \"Barbell\";\n    case \"cable\":\n      return \"Cable\";\n    case \"dumbbell\":\n      return \"Dumbbell\";\n    case \"smith\":\n      return \"Smith Machine\";\n    case \"band\":\n      return \"Band\";\n    case \"kettlebell\":\n      return \"Kettlebell\";\n    case \"bodyweight\":\n      return \"Bodyweight\";\n    case \"leverageMachine\":\n      return \"Leverage Machine\";\n    case \"medicineball\":\n      return \"Medicine Ball\";\n    case \"ezbar\":\n      return \"EZ Bar\";\n    case \"trapbar\":\n      return \"Trap Bar\";\n    default:\n      return \"\";\n  }\n}\n\nexport type IExerciseKind = \"core\" | \"pull\" | \"push\" | \"legs\" | \"upper\" | \"lower\";\n\nexport type IExercise = {\n  id: IExerciseId;\n  name: string;\n  defaultWarmup?: number;\n  equipment?: IEquipment;\n  defaultEquipment?: IEquipment;\n  types: IExerciseKind[];\n  onerm?: number;\n  startingWeightLb: IWeight;\n  startingWeightKg: IWeight;\n};\n\nexport function warmupValues(units: IUnit): Partial<Record<number, IProgramExerciseWarmupSet[]>> {\n  return {\n    10: [\n      {\n        reps: 5,\n        threshold: units === \"lb\" ? Weight_build(60, \"lb\") : Weight_build(30, \"kg\"),\n        value: 0.3,\n      },\n      {\n        reps: 5,\n        threshold: units === \"lb\" ? Weight_build(30, \"lb\") : Weight_build(15, \"kg\"),\n        value: 0.5,\n      },\n      {\n        reps: 5,\n        threshold: units === \"lb\" ? Weight_build(10, \"lb\") : Weight_build(5, \"kg\"),\n        value: 0.8,\n      },\n    ],\n    45: [\n      {\n        reps: 5,\n        threshold: units === \"lb\" ? Weight_build(120, \"lb\") : Weight_build(60, \"kg\"),\n        value: 0.3,\n      },\n      {\n        reps: 5,\n        threshold: units === \"lb\" ? Weight_build(90, \"lb\") : Weight_build(45, \"kg\"),\n        value: 0.5,\n      },\n      {\n        reps: 5,\n        threshold: units === \"lb\" ? Weight_build(45, \"lb\") : Weight_build(20, \"kg\"),\n        value: 0.8,\n      },\n    ],\n    95: [\n      {\n        reps: 5,\n        threshold: units === \"lb\" ? Weight_build(150, \"lb\") : Weight_build(70, \"kg\"),\n        value: 0.3,\n      },\n      {\n        reps: 5,\n        threshold: units === \"lb\" ? Weight_build(125, \"lb\") : Weight_build(60, \"kg\"),\n        value: 0.5,\n      },\n      {\n        reps: 5,\n        threshold: units === \"lb\" ? Weight_build(95, \"lb\") : Weight_build(40, \"kg\"),\n        value: 0.8,\n      },\n    ],\n  };\n}\n\nfunction warmup45(weight: IWeight | undefined, settings: ISettings, exerciseType?: IExerciseType): ISet[] {\n  return warmup(warmupValues(settings.units)[45] || [])(weight, settings, exerciseType);\n}\n\nfunction warmup95(weight: IWeight | undefined, settings: ISettings, exerciseType?: IExerciseType): ISet[] {\n  return warmup(warmupValues(settings.units)[95] || [])(weight, settings, exerciseType);\n}\n\nfunction warmup10(weight: IWeight | undefined, settings: ISettings, exerciseType?: IExerciseType): ISet[] {\n  return warmup(warmupValues(settings.units)[10] || [])(weight, settings, exerciseType);\n}\n\nfunction warmup(\n  programExerciseWarmupSets: IProgramExerciseWarmupSet[],\n  shouldSkipThreshold: boolean = false\n): (weight: IWeight | undefined, settings: ISettings, exerciseType?: IExerciseType) => ISet[] {\n  return (weight: IWeight | undefined, settings: ISettings, exerciseType?: IExerciseType): ISet[] => {\n    let index = 0;\n    return programExerciseWarmupSets.reduce<ISet[]>((memo, programExerciseWarmupSet) => {\n      if (shouldSkipThreshold || (weight != null && Weight_gt(weight, programExerciseWarmupSet.threshold))) {\n        const value = programExerciseWarmupSet.value;\n        const unit = Equipment_getUnitOrDefaultForExerciseType(settings, exerciseType);\n        if (typeof value !== \"number\" || weight != null) {\n          const warmupWeight = typeof value === \"number\" ? Weight_multiply(weight!, value) : value;\n          const roundedWeight = Weight_roundConvertTo(warmupWeight, settings, unit, exerciseType);\n          memo.push({\n            vtype: \"set\",\n            index,\n            id: UidFactory_generateUid(6),\n            reps: programExerciseWarmupSet.reps,\n            isUnilateral: exerciseType ? Exercise_getIsUnilateral(exerciseType, settings) : false,\n            weight: roundedWeight,\n            originalWeight: warmupWeight,\n            isCompleted: false,\n          });\n          index += 1;\n        }\n      }\n      return memo;\n    }, []);\n  };\n}\n\nfunction warmupEmpty(weight: IWeight | undefined): ISet[] {\n  return [];\n}\n\nfunction maybeGetExercise(id: IExerciseId, customExercises: IAllCustomExercises): IExercise | undefined {\n  const custom = customExercises[id];\n  return custom != null\n    ? {\n        ...custom,\n        defaultWarmup: 45,\n        types: custom.types || [],\n        startingWeightKg: Weight_build(0, \"kg\"),\n        startingWeightLb: Weight_build(0, \"lb\"),\n      }\n    : allExercisesList[id];\n}\n\nfunction getExercise(id: IExerciseId, customExercises: IAllCustomExercises): IExercise {\n  const exercise = maybeGetExercise(id, customExercises);\n  return exercise != null ? exercise : allExercisesList.squat;\n}\n\nexport function Exercise_getMetadata(id: IExerciseId): IMetaExercises {\n  return metadata[id] || {};\n}\n\nexport function Exercise_exists(name: string, customExercises: IAllCustomExercises): boolean {\n  let exercise = ObjectUtils_keys(allExercisesList).filter((k) => allExercisesList[k].name === name)[0];\n  if (exercise == null) {\n    exercise = ObjectUtils_keys(customExercises).filter(\n      (k) => !customExercises[k]!.isDeleted && customExercises[k]!.name === name\n    )[0];\n  }\n  return !!exercise;\n}\n\nexport function Exercise_isCustom(id: string, customExercises: IAllCustomExercises): boolean {\n  return customExercises[id] != null;\n}\n\nexport function Exercise_buildName(name: string, settings: ISettings, label?: string, equipment?: IEquipment): string {\n  let str = name;\n  if (equipment) {\n    const allEquipment = Equipment_currentEquipment(settings);\n    str = `${name}, ${equipmentName(equipment, allEquipment)}`;\n  }\n  if (label) {\n    str = `${label}: ${str}`;\n  }\n  return str;\n}\n\nexport function Exercise_fullName(exercise: IExercise, settings: ISettings, label?: string): string {\n  const equipment =\n    exercise.equipment && exercise.defaultEquipment !== exercise.equipment ? exercise.equipment : undefined;\n  return Exercise_buildName(exercise.name, settings, label, equipment);\n}\n\nexport function Exercise_reverseName(exercise: IExercise, settings?: ISettings): string {\n  if (exercise.equipment) {\n    const allEquipment = settings ? Equipment_currentEquipment(settings) : {};\n    const equipment = equipmentName(exercise.equipment, allEquipment);\n    return `${equipment} ${exercise.name}`;\n  } else {\n    return exercise.name;\n  }\n}\n\nexport function Exercise_nameWithEquipment(exercise: IExercise, settings?: ISettings): string {\n  if (exercise.equipment) {\n    const allEquipment = settings ? Equipment_currentEquipment(settings) : {};\n    const equipment = equipmentName(exercise.equipment, allEquipment);\n    return `${exercise.name}, ${equipment}`;\n  } else {\n    return exercise.name;\n  }\n}\n\nexport function Exercise_searchNames(query: string, customExercises: IAllCustomExercises): string[] {\n  const allExercises = Exercise_allExpanded({});\n  const exerciseNames = allExercises\n    .filter((e) =>\n      StringUtils_fuzzySearch(\n        query.toLowerCase(),\n        `${e.name}${e.equipment ? `, ${equipmentName(e.equipment)}` : \"\"}`.toLowerCase()\n      )\n    )\n    .map((e) => `${e.name}${e.equipment ? `, ${equipmentName(e.equipment)}` : \"\"}`);\n  const customExerciseNames = ObjectUtils_values(customExercises)\n    .filter((ce) => (ce && !ce.isDeleted ? StringUtils_fuzzySearch(query.toLowerCase(), ce.name.toLowerCase()) : false))\n    .map((e) => e!.name);\n  const names = [...exerciseNames, ...customExerciseNames];\n  names.sort();\n  return names;\n}\n\nexport function Exercise_findById(id: IExerciseId, customExercises: IAllCustomExercises): IExercise | undefined {\n  return maybeGetExercise(id, customExercises);\n}\n\nfunction normalizeExerciseName(name: string): string {\n  return name.toLowerCase().replace(/\\s*,\\s*/g, \",\");\n}\n\ninterface ICustomExercisesNameIndex {\n  live: Map<string, IExerciseId>;\n  deleted: Map<string, IExerciseId>;\n}\n\n// Cache a normalized-name -> id index per customExercises object, since Exercise_findIdByName is called\n// once per exercise reference during program evaluation, and accounts can have hundreds of custom exercises.\nconst customExercisesNameIndexCache = new WeakMap<IAllCustomExercises, ICustomExercisesNameIndex>();\nfunction getCustomExercisesNameIndex(customExercises: IAllCustomExercises): ICustomExercisesNameIndex {\n  let index = customExercisesNameIndexCache.get(customExercises);\n  if (index == null) {\n    index = { live: new Map(), deleted: new Map() };\n    for (const ce of ObjectUtils_values(customExercises)) {\n      if (ce?.name && ce.id) {\n        const key = normalizeExerciseName(ce.name);\n        const map = ce.isDeleted ? index.deleted : index.live;\n        if (!map.has(key)) {\n          map.set(key, ce.id);\n        }\n      }\n    }\n    customExercisesNameIndexCache.set(customExercises, index);\n  }\n  return index;\n}\n\n// These characters are Liftoscript syntax — grammar separators (/{}()#[]|!) or the label\n// delimiter (:) — so a name containing them can't round-trip through planner text: replacing\n// an exercise with it would leave the program with a syntax error.\nconst forbiddenExerciseNameChars = /[/{}()#[\\]|!:\\t\\n\\r]/;\nconst forbiddenExerciseNameCharsAll = new RegExp(forbiddenExerciseNameChars.source, \"g\");\n\nexport function Exercise_nameError(name: string): string | undefined {\n  const trimmed = name.trim();\n  if (trimmed.length === 0) {\n    return \"Name cannot be empty\";\n  }\n  if (forbiddenExerciseNameChars.test(trimmed)) {\n    return \"Name cannot contain special characters: / { } ( ) # [ ] | ! :\";\n  }\n  return undefined;\n}\n\nexport function Exercise_sanitizeName(name: string): string {\n  const sanitized = name.replace(forbiddenExerciseNameCharsAll, \" \").replace(/\\s+/g, \" \").trim();\n  return sanitized || \"Exercise\";\n}\n\nexport function Exercise_findIdByName(name: string, customExercises: IAllCustomExercises): IExerciseId | undefined {\n  const index = getCustomExercisesNameIndex(customExercises);\n  const key = normalizeExerciseName(name);\n  // Live customs win over built-ins on name collision, so shipping a built-in with the same\n  // name as a user's existing custom exercise never silently re-points their programs/history.\n  // Deleted customs resolve last: they must not shadow a built-in (deleting the custom is the\n  // user's only way back to it), but a name matching nothing else should still resolve so\n  // history records and planner text referencing it keep displaying.\n  return index.live.get(key) || nameToIdMapping[name.toLowerCase()] || index.deleted.get(key);\n}\n\nexport function Exercise_get(type: IExerciseType, customExercises: IAllCustomExercises): IExercise {\n  const exercise = getExercise(type.id, customExercises);\n  return { ...exercise, equipment: type.equipment };\n}\n\nexport function Exercise_getNotes(type: IExerciseType, settings: ISettings): string | undefined {\n  return settings.exerciseData[Exercise_toKey(type)]?.notes;\n}\n\nexport function Exercise_onerm(type: IExerciseType, settings: ISettings): IWeight {\n  const rm = settings.exerciseData[Exercise_toKey(type)]?.rm1;\n  if (rm) {\n    return Weight_convertTo(rm, settings.units);\n  }\n  const exercise = Exercise_get(type, settings.exercises);\n  return settings.units === \"kg\" ? exercise.startingWeightKg : exercise.startingWeightLb;\n}\n\nexport function Exercise_defaultRounding(type: IExerciseType, settings: ISettings): number {\n  const units = Equipment_getUnitOrDefaultForExerciseType(settings, type);\n  return Math.max(0.1, settings.exerciseData[Exercise_toKey(type)]?.rounding ?? (units === \"kg\" ? 2.5 : 5));\n}\n\nexport function Exercise_find(type: IExerciseType, customExercises: IAllCustomExercises): IExercise | undefined {\n  const exercise = maybeGetExercise(type.id, customExercises);\n  return exercise ? { ...exercise, equipment: type.equipment } : undefined;\n}\n\nexport function Exercise_getById(id: IExerciseId, customExercises: IAllCustomExercises): IExercise {\n  const exercise = getExercise(id, customExercises);\n  return { ...exercise, equipment: exercise.defaultEquipment };\n}\n\nexport function Exercise_findByNameEquipment(\n  customExercises: IAllCustomExercises,\n  name: string,\n  equipment?: string\n): IExercise | undefined {\n  const exerciseId = Exercise_findIdByName(name, customExercises);\n  const exercise = exerciseId ? Exercise_findById(exerciseId, customExercises) : undefined;\n  if (exercise == null) {\n    return undefined;\n  }\n  return { ...exercise, equipment };\n}\n\nexport function Exercise_findByNameAndEquipment(\n  nameAndEquipment: string,\n  customExercises: IAllCustomExercises\n): IExercise | undefined {\n  const parts = nameAndEquipment.split(\",\").map((p) => p.trim());\n  let name: string | undefined;\n  let equipment: IEquipment | undefined | null;\n  if (parts.length > 1) {\n    const foundEquipment = equipments.filter(\n      (e) => equipmentName(e).toLowerCase() === parts[parts.length - 1].toLowerCase()\n    )[0];\n    if (foundEquipment != null) {\n      equipment = foundEquipment;\n      name = parts.slice(0, parts.length - 1).join(\", \");\n    } else {\n      equipment = null;\n    }\n  }\n  if (name == null) {\n    name = nameAndEquipment;\n  }\n  let exerciseId = Exercise_findIdByName(name, customExercises);\n  if (exerciseId != null && equipment !== null) {\n    // Users can have both \"X\" and \"X, <Equipment>\" custom exercises. Before custom exercises\n    // were included in the split-name lookup, \"X, <Equipment>\" resolved to the custom of that\n    // exact name (history is keyed by it), so an exact full-string custom match must beat the\n    // bare-name custom + parsed equipment interpretation. Built-in bare-name matches keep\n    // winning as they always did — flipping those would re-key history too.\n    const bareNameCustom = customExercises[exerciseId];\n    if (bareNameCustom != null) {\n      const index = getCustomExercisesNameIndex(customExercises);\n      const fullNameKey = normalizeExerciseName(nameAndEquipment);\n      // A deleted full-name custom loses only to a live bare-name custom; when the bare match\n      // is itself a tombstone, the exact full-name tombstone still wins so history keyed by it\n      // doesn't re-point.\n      const fullNameExerciseId =\n        index.live.get(fullNameKey) ?? (bareNameCustom.isDeleted ? index.deleted.get(fullNameKey) : undefined);\n      if (fullNameExerciseId != null && fullNameExerciseId !== exerciseId) {\n        const fullNameExercise = Exercise_findById(fullNameExerciseId, customExercises);\n        if (fullNameExercise != null) {\n          return { ...fullNameExercise };\n        }\n      }\n    }\n    const exercise = Exercise_findById(exerciseId, customExercises);\n    if (exercise != null) {\n      return { ...exercise, equipment: equipment || exercise.defaultEquipment };\n    }\n  } else {\n    exerciseId = Exercise_findIdByName(nameAndEquipment, customExercises);\n    if (exerciseId != null) {\n      const exercise = Exercise_findById(exerciseId, customExercises);\n      if (exercise != null) {\n        return { ...exercise };\n      }\n    }\n  }\n  return undefined;\n}\n\nexport function Exercise_getIsUnilateral(exerciseType: IExerciseType, settings: ISettings): boolean {\n  const key = Exercise_toKey(exerciseType);\n  const exerciseData = settings.exerciseData[key];\n  if (exerciseData?.isUnilateral !== undefined) {\n    return exerciseData.isUnilateral;\n  }\n\n  switch (exerciseType.id) {\n    case \"bulgarianSplitSquat\":\n    case \"concentrationCurl\":\n    case \"reverseGripConcentrationCurl\":\n    case \"bentOverOneArmRow\":\n    case \"cableKickback\":\n    case \"cableTwist\":\n    case \"russianTwist\":\n    case \"lunge\":\n    case \"reverseLunge\":\n    case \"splitSquat\":\n    case \"stepUp\":\n    case \"pistolSquat\":\n    case \"singleLegBridge\":\n    case \"singleLegDeadlift\":\n    case \"sideBend\":\n    case \"sideCrunch\":\n    case \"sideHipAbductor\":\n    case \"sideLyingClam\":\n    case \"sidePlank\":\n    case \"singleLegBridge\":\n    case \"singleLegCalfRaise\":\n    case \"singleLegDeadlift\":\n    case \"singleLegGluteBridgeBench\":\n    case \"singleLegGluteBridgeStraight\":\n    case \"singleLegGluteBridgeBentKnee\":\n    case \"singleLegHipThrust\":\n      return true;\n    case \"bicepCurl\":\n    case \"wristCurl\":\n    case \"reverseWristCurl\":\n    case \"seatedPalmsUpWristCurl\":\n    case \"hammerCurl\":\n    case \"preacherCurl\":\n    case \"reverseCurl\":\n    case \"lyingBicepCurl\":\n    case \"inclineCurl\":\n      return exerciseType.equipment === \"dumbbell\";\n    default:\n      return false;\n  }\n}\n\n// The number of implements loaded per rep — orthogonal to unilaterality. Unilateral rep-summing\n// (left+right) accounts for the *sides*; this accounts for the *implements*. A dumbbell lunge is\n// both: worked one leg at a time (reps summed) AND holding two dumbbells (multiplier 2).\nexport function Exercise_getVolumeMultiplier(exerciseType: IExerciseType, settings: ISettings): number {\n  const key = Exercise_toKey(exerciseType);\n  const override = settings.exerciseData[key]?.volumeMultiplier;\n  if (override !== undefined) {\n    return override;\n  }\n  // Only dumbbells load two implements per rep at a per-implement displayed weight.\n  // Kettlebell is excluded on purpose: the default is a single bell (swing, goblet,\n  // turkish get up) — double-kettlebell users can override.\n  if (exerciseType.equipment !== \"dumbbell\") {\n    return 1;\n  }\n  switch (exerciseType.id) {\n    case \"arnoldPress\":\n    case \"overheadPress\":\n    case \"shoulderPress\":\n    case \"shoulderPressParallelGrip\":\n    case \"lateralRaise\":\n    case \"frontRaise\":\n    case \"seatedFrontRaise\":\n    case \"reverseFly\":\n    case \"uprightRow\":\n    case \"benchPress\":\n    case \"inclineBenchPress\":\n    case \"declineBenchPress\":\n    case \"inclineChestPress\":\n    case \"chestFly\":\n    case \"inclineChestFly\":\n    case \"aroundTheWorld\":\n    case \"bentOverRow\":\n    case \"chestSupportedRow\":\n    case \"inclineRow\":\n    case \"renegadeRow\":\n    case \"deadlift\":\n    case \"romanianDeadlift\":\n    case \"straightLegDeadlift\":\n    case \"stiffLegDeadlift\":\n    case \"shrug\":\n    case \"skullcrusher\":\n    // unilateral, but both dumbbells are loaded through the whole rep (reps are summed left+right on top)\n    case \"lunge\":\n    case \"reverseLunge\":\n    case \"splitSquat\":\n    case \"bulgarianSplitSquat\":\n    case \"stepUp\":\n      return 2;\n    default:\n      return 1;\n  }\n}\n\nexport function Exercise_findByName(name: string, customExercises: IAllCustomExercises): IExercise | undefined {\n  const exerciseId = Exercise_findIdByName(name.trim(), customExercises);\n  if (exerciseId != null) {\n    const exercise = Exercise_findById(exerciseId, customExercises);\n    if (exercise != null) {\n      return { ...exercise, equipment: exercise.defaultEquipment };\n    }\n  }\n  return undefined;\n}\n\nexport function Exercise_getByIds(ids: IExerciseId[], customExercises: IAllCustomExercises): IExercise[] {\n  return ids.map((id) => {\n    const exercise = getExercise(id, customExercises);\n    return { ...exercise, equipment: exercise.defaultEquipment };\n  });\n}\n\nexport function Exercise_all(customExercises: IAllCustomExercises): IExercise[] {\n  return ObjectUtils_keys(customExercises)\n    .filter((id) => !customExercises[id]?.isDeleted)\n    .map((id) => getExercise(id, customExercises))\n    .concat(\n      ObjectUtils_keys(allExercisesList).map((k) => ({\n        ...allExercisesList[k],\n        equipment: allExercisesList[k].defaultEquipment,\n      }))\n    );\n}\n\nexport function Exercise_allExpanded(customExercises: IAllCustomExercises): IExercise[] {\n  return ObjectUtils_keys(customExercises)\n    .filter((id) => !customExercises[id]?.isDeleted)\n    .map((id) => getExercise(id, customExercises))\n    .concat(\n      ObjectUtils_keys(allExercisesList).flatMap((k) => {\n        return CollectionUtils_compact(\n          equipments.map((equipment) => {\n            const exerciseType = { id: k, equipment };\n            return ExerciseImageUtils_exists(exerciseType, \"small\") ? { ...allExercisesList[k], equipment } : undefined;\n          })\n        );\n      })\n    );\n}\n\nexport function Exercise_toExternalUrl(type: IExerciseType): string {\n  return `/exercises/${Exercise_toUrlSlug(type)}`;\n}\n\nexport function Exercise_toUrlSlug(type: IExerciseType): string {\n  const possibleEquipments: Record<string, IEquipment> = {\n    barbell: \"barbell\",\n    cable: \"cable\",\n    dumbbell: \"dumbbell\",\n    smith: \"smith\",\n    band: \"band\",\n    kettlebell: \"kettlebell\",\n    bodyweight: \"bodyweight\",\n    leverageMachine: \"leverage-machine\",\n    medicineball: \"medicine-ball\",\n    ezbar: \"ez-bar\",\n    trapbar: \"trap-bar\",\n  };\n\n  const equipment = type.equipment ? possibleEquipments[type.equipment] : undefined;\n  const equipmentSlug = equipment ? `${equipment}-` : \"\";\n  return `${equipmentSlug}${StringUtils_dashcase(StringUtils_uncamelCase(type.id))}`;\n}\n\nexport function Exercise_fromUrlSlug(slug: string): IExerciseType | undefined {\n  // slug looks like leverage-machine-squat or barbell-bench-press\n  const possibleEquipments: Record<string, IEquipment> = {\n    barbell: \"barbell\",\n    cable: \"cable\",\n    dumbbell: \"dumbbell\",\n    smith: \"smith\",\n    band: \"band\",\n    kettlebell: \"kettlebell\",\n    bodyweight: \"bodyweight\",\n    \"leverage-machine\": \"leverageMachine\",\n    \"medicine-ball\": \"medicineball\",\n    \"ez-bar\": \"ezbar\",\n    \"trap-bar\": \"trapbar\",\n  };\n  let equipment: IEquipment | undefined = undefined;\n  const equipmentKey = ObjectUtils_keys(possibleEquipments).find((e) => slug.startsWith(e));\n  if (equipmentKey != null) {\n    equipment = possibleEquipments[equipmentKey];\n    slug = slug.slice(equipmentKey.length + 1);\n  }\n  const exerciseId = StringUtils_camelCase(StringUtils_undashcase(slug));\n  if (allExercisesList[exerciseId]) {\n    return { id: exerciseId as IExerciseId, equipment };\n  } else {\n    return undefined;\n  }\n}\n\nexport function Exercise_eq(a: IExerciseType, b: IExerciseType): boolean {\n  return a.id === b.id && a.equipment === b.equipment;\n}\n\nexport function Exercise_filterExercisesByNameAndType(\n  settings: ISettings,\n  filter: string,\n  filterTypes: string[],\n  isSubstitute: boolean,\n  exerciseType?: IExerciseType,\n  length?: number\n): IExercise[] {\n  let allExercises = Exercise_allExpanded({});\n  if (filter) {\n    allExercises = Exercise_filterExercises(allExercises, filter);\n  }\n  if (filterTypes && filterTypes.length > 0) {\n    allExercises = Exercise_filterExercisesByType(allExercises, filterTypes, settings);\n  }\n  allExercises = Exercise_sortExercises(allExercises, isSubstitute, settings, filterTypes, exerciseType);\n  if (length != null) {\n    allExercises = allExercises.slice(0, length);\n  }\n  return allExercises;\n}\n\nexport function Exercise_getWarmupSets(\n  exercise: IExerciseType,\n  weight: IWeight | undefined,\n  settings: ISettings,\n  programExerciseWarmupSets?: IProgramExerciseWarmupSet[]\n): ISet[] {\n  const ex = Exercise_get(exercise, settings.exercises);\n  if (programExerciseWarmupSets != null) {\n    return warmup(programExerciseWarmupSets, true)(weight, settings, exercise);\n  } else {\n    let warmupSets = warmupEmpty(weight);\n    if (ex.defaultWarmup === 10) {\n      warmupSets = warmup10(weight, settings, exercise);\n    } else if (ex.defaultWarmup === 45) {\n      warmupSets = warmup45(weight, settings, exercise);\n    } else if (ex.defaultWarmup === 95) {\n      warmupSets = warmup95(weight, settings, exercise);\n    }\n    return warmupSets;\n  }\n}\n\nexport function Exercise_defaultTargetMuscles(type: IExerciseType, settings: ISettings): IMuscle[] {\n  const customExercise = settings.exercises[type.id];\n  if (customExercise) {\n    return customExercise.meta.targetMuscles;\n  } else {\n    const meta = Exercise_getMetadata(type.id);\n    return meta?.targetMuscles != null ? meta.targetMuscles : [];\n  }\n}\n\nexport function Exercise_targetMuscles(type: IExerciseType, settings: ISettings): IMuscle[] {\n  const muscleMultipliers = settings.exerciseData[Exercise_toKey(type)]?.muscleMultipliers;\n  if (muscleMultipliers) {\n    return (ObjectUtils_keys(muscleMultipliers) as IMuscle[]).filter((m) => muscleMultipliers[m] === 1);\n  } else {\n    return Exercise_defaultTargetMuscles(type, settings);\n  }\n}\n\nexport function Exercise_defaultTargetMusclesGroups(type: IExerciseType, settings: ISettings): IScreenMuscle[] {\n  const muscles = Exercise_defaultTargetMuscles(type, settings);\n  const allMuscleGroups = new Set<IScreenMuscle>();\n  for (const muscle of muscles) {\n    const muscleGroups = Muscle_getScreenMusclesFromMuscle(muscle, settings);\n    for (const muscleGroup of muscleGroups) {\n      allMuscleGroups.add(muscleGroup);\n    }\n  }\n  return Array.from(allMuscleGroups);\n}\n\nexport function Exercise_targetMusclesGroups(type: IExerciseType, settings: ISettings): IScreenMuscle[] {\n  const muscles = Exercise_targetMuscles(type, settings);\n  const allMuscleGroups = new Set<IScreenMuscle>();\n  for (const muscle of muscles) {\n    const muscleGroups = Muscle_getScreenMusclesFromMuscle(muscle, settings);\n    for (const muscleGroup of muscleGroups) {\n      allMuscleGroups.add(muscleGroup);\n    }\n  }\n  return Array.from(allMuscleGroups);\n}\n\nexport function Exercise_defaultSynergistMuscleMultipliers(\n  type: IExerciseType,\n  settings: ISettings\n): IMuscleMultiplier[] {\n  const customExercise = settings.exercises[type.id];\n  if (customExercise) {\n    return customExercise.meta.synergistMuscles.map((m) => ({\n      muscle: m,\n      multiplier: settings.planner.synergistMultiplier,\n    }));\n  } else {\n    const meta = Exercise_getMetadata(type.id);\n    return meta?.synergistMuscles != null\n      ? meta.synergistMuscles.map((m) => {\n          return { muscle: m, multiplier: settings.planner.synergistMultiplier };\n        })\n      : [];\n  }\n}\n\nexport function Exercise_defaultSynergistMuscles(type: IExerciseType, settings: ISettings): IMuscle[] {\n  return Exercise_defaultSynergistMuscleMultipliers(type, settings).map((m) => m.muscle);\n}\n\nexport function Exercise_synergistMuscleMultipliers(type: IExerciseType, settings: ISettings): IMuscleMultiplier[] {\n  const muscleMultipliers = settings.exerciseData[Exercise_toKey(type)]?.muscleMultipliers;\n  if (muscleMultipliers) {\n    return (ObjectUtils_keys(muscleMultipliers) as IMuscle[])\n      .filter((m) => (muscleMultipliers[m] ?? 0) < 1)\n      .map((m) => ({ muscle: m, multiplier: muscleMultipliers[m] ?? 0 }));\n  } else {\n    return Exercise_defaultSynergistMuscleMultipliers(type, settings);\n  }\n}\n\nexport function Exercise_synergistMuscles(type: IExerciseType, settings: ISettings): IMuscle[] {\n  const muscleMultipliers = settings.exerciseData[Exercise_toKey(type)]?.muscleMultipliers;\n  if (muscleMultipliers) {\n    return (ObjectUtils_keys(muscleMultipliers) as IMuscle[]).filter((m) => (muscleMultipliers[m] ?? 0) < 1);\n  } else {\n    return Exercise_defaultSynergistMuscles(type, settings);\n  }\n}\n\nexport function Exercise_defaultSynergistMusclesGroups(type: IExerciseType, settings: ISettings): IScreenMuscle[] {\n  const muscles = Exercise_defaultSynergistMuscles(type, settings);\n  const allMuscleGroups = new Set<IScreenMuscle>();\n  for (const muscle of muscles) {\n    const muscleGroups = Muscle_getScreenMusclesFromMuscle(muscle, settings);\n    for (const muscleGroup of muscleGroups) {\n      allMuscleGroups.add(muscleGroup);\n    }\n  }\n  return Array.from(allMuscleGroups);\n}\n\nexport function Exercise_synergistMusclesGroupMultipliers(\n  type: IExerciseType,\n  settings: ISettings\n): Partial<Record<IScreenMuscle, number>> {\n  return Exercise_synergistMuscleMultipliers(type, settings).reduce<Partial<Record<IScreenMuscle, number>>>(\n    (memo, m) => {\n      for (const muscleGroup of Muscle_getScreenMusclesFromMuscle(m.muscle, settings)) {\n        if (memo[muscleGroup] == null || memo[muscleGroup] < m.multiplier) {\n          memo[muscleGroup] = m.multiplier;\n        }\n      }\n      return memo;\n    },\n    {}\n  );\n}\n\nexport function Exercise_synergistMusclesGroups(type: IExerciseType, settings: ISettings): IScreenMuscle[] {\n  const muscles = Exercise_synergistMuscles(type, settings);\n  const allMuscleGroups = new Set<IScreenMuscle>();\n  for (const muscle of muscles) {\n    const muscleGroups = Muscle_getScreenMusclesFromMuscle(muscle, settings);\n    for (const muscleGroup of muscleGroups) {\n      allMuscleGroups.add(muscleGroup);\n    }\n  }\n  return Array.from(allMuscleGroups);\n}\n\nexport function Exercise_toKey(type: IExerciseType): string {\n  return `${type.id}${type.equipment ? `_${type.equipment}` : \"\"}`;\n}\n\nexport function Exercise_fromKey(type: string): IExerciseType {\n  const [id, equipment] = type.split(\"_\");\n  return { id: id as IExerciseId, equipment: equipment };\n}\n\nexport function Exercise_defaultEquipment(\n  type: IExerciseId,\n  customExercises: IAllCustomExercises\n): IEquipment | undefined {\n  const priorities: Record<IEquipment, IEquipment[]> = {\n    barbell: [\"ezbar\", \"trapbar\", \"dumbbell\", \"kettlebell\"],\n    cable: [\"band\", \"leverageMachine\"],\n    dumbbell: [\"barbell\", \"kettlebell\", \"bodyweight\"],\n    smith: [\"leverageMachine\", \"dumbbell\", \"barbell\", \"kettlebell\", \"cable\"],\n    band: [\"cable\", \"bodyweight\", \"leverageMachine\", \"smith\"],\n    kettlebell: [\"dumbbell\", \"barbell\", \"cable\"],\n    bodyweight: [\"cable\", \"dumbbell\", \"barbell\", \"band\"],\n    leverageMachine: [\"smith\", \"cable\", \"dumbbell\", \"barbell\", \"kettlebell\"],\n    medicineball: [\"bodyweight\", \"cable\"],\n    ezbar: [\"barbell\", \"dumbbell\", \"cable\"],\n    trapbar: [\"barbell\", \"dumbbell\", \"cable\"],\n  };\n\n  const exercise = Exercise_getById(type, customExercises);\n  const bar = exercise.defaultEquipment || \"bodyweight\";\n  const sortedEquipment = Exercise_getMetadata(type).sortedEquipment || [];\n  let equipment: IEquipment | undefined = sortedEquipment.find((b) => b === bar);\n  equipment = equipment || (priorities[bar] || []).find((eqp) => sortedEquipment.indexOf(eqp) !== -1);\n  equipment = equipment || sortedEquipment[0];\n  return equipment;\n}\n\nexport function Exercise_similarRating(current: IExerciseType, e: IExercise, settings: ISettings): number {\n  const tm = Exercise_targetMuscles(current, settings);\n  const sm = Exercise_synergistMuscles(current, settings);\n  const etm = Exercise_targetMuscles(e, settings);\n  const esm = Exercise_synergistMuscles(e, settings);\n  let rating = 0;\n  if (e.id === current.id || (etm.length === 0 && esm.length === 0)) {\n    rating = -Infinity;\n  } else {\n    for (const muscle of etm) {\n      if (tm.indexOf(muscle) !== -1) {\n        rating += 60;\n      } else {\n        rating -= 30;\n      }\n      if (sm.indexOf(muscle) !== -1) {\n        rating += 20;\n      }\n    }\n    for (const muscle of tm) {\n      if (etm.indexOf(muscle) === -1) {\n        rating -= 30;\n      }\n    }\n    for (const muscle of esm) {\n      if (sm.indexOf(muscle) !== -1) {\n        rating += 30;\n      } else {\n        rating -= 15;\n      }\n      if (tm.indexOf(muscle) !== -1) {\n        rating += 10;\n      }\n    }\n    for (const muscle of sm) {\n      if (esm.indexOf(muscle) === -1) {\n        rating -= 15;\n      }\n    }\n    if (e.defaultEquipment === \"cable\" || e.defaultEquipment === \"leverageMachine\") {\n      rating -= 20;\n    }\n  }\n  return rating;\n}\n\nexport function Exercise_similar(type: IExerciseType, settings: ISettings): [IExercise, number][] {\n  const tm = Exercise_targetMuscles(type, settings);\n  const sm = Exercise_synergistMuscles(type, settings);\n  if (tm.length === 0 && sm.length === 0) {\n    return [];\n  }\n  const rated = Exercise_all(settings.exercises).map<[IExercise, number]>((e) => {\n    const rating = Exercise_similarRating(type, e, settings);\n    return [e, rating];\n  });\n  rated.sort((a, b) => b[1] - a[1]);\n  return rated.filter(([, r]) => r > 0);\n}\n\nexport function Exercise_sortedByScreenMuscle(muscle: IScreenMuscle, settings: ISettings): [IExercise, number][] {\n  const muscles = Muscle_getMusclesFromScreenMuscle(muscle, settings);\n\n  const rated = Exercise_all(settings.exercises).map<[IExercise, number]>((e) => {\n    let rating = 0;\n    const tm = Exercise_targetMuscles(e, settings);\n    const sm = Exercise_synergistMuscles(e, settings);\n    for (const m of tm) {\n      if (muscles.indexOf(m) !== -1) {\n        rating += 100;\n      }\n    }\n    for (const m of sm) {\n      if (muscles.indexOf(m) !== -1) {\n        rating += 10;\n      }\n    }\n    return [e, rating];\n  });\n  rated.sort((a, b) => b[1] - a[1]);\n  return rated.filter(([, r]) => r > 0);\n}\n\nexport function Exercise_createCustomExercise(\n  name: string,\n  tMuscles: IMuscle[],\n  sMuscles: IMuscle[],\n  types: IExerciseKind[],\n  smallImageUrl?: string,\n  largeImageUrl?: string\n): ICustomExercise {\n  const id = UidFactory_generateUid(8);\n  const newExercise: ICustomExercise = {\n    vtype: \"custom_exercise\",\n    id,\n    name,\n    isDeleted: false,\n    types,\n    smallImageUrl,\n    largeImageUrl,\n    meta: {\n      targetMuscles: tMuscles,\n      synergistMuscles: sMuscles,\n      bodyParts: [],\n      sortedEquipment: [],\n    },\n  };\n  return newExercise;\n}\n\nexport function Exercise_editCustomExercise(\n  exercise: ICustomExercise,\n  name: string,\n  tMuscles: IMuscle[],\n  sMuscles: IMuscle[],\n  types: IExerciseKind[],\n  smallImageUrl?: string,\n  largeImageUrl?: string\n): ICustomExercise {\n  const newExercise: ICustomExercise = {\n    ...exercise,\n    name,\n    types,\n    smallImageUrl,\n    largeImageUrl,\n    meta: { ...exercise.meta, targetMuscles: tMuscles, synergistMuscles: sMuscles },\n  };\n  return newExercise;\n}\n\nexport function Exercise_deleteCustomExercise(\n  allExercises: IAllCustomExercises,\n  exerciseId: IExerciseId\n): IAllCustomExercises {\n  const existingExercise = allExercises[exerciseId];\n  if (existingExercise) {\n    return { ...allExercises, [exerciseId]: { ...existingExercise, isDeleted: true } };\n  }\n  return allExercises;\n}\n\nexport function Exercise_upsertCustomExercise(\n  allExercises: IAllCustomExercises,\n  exercise: ICustomExercise\n): IAllCustomExercises {\n  exercise = { ...exercise, name: exercise.name.trim() };\n  const existingExercise = allExercises[exercise.id];\n  if (existingExercise) {\n    return { ...allExercises, [exercise.id]: { ...existingExercise, ...exercise, isDeleted: false } };\n  } else {\n    const sameNameDeletedExercise = ObjectUtils_values(allExercises).find(\n      (e) => e?.name === exercise.name && e.isDeleted\n    );\n    if (sameNameDeletedExercise) {\n      return {\n        ...allExercises,\n        [sameNameDeletedExercise.id]: {\n          ...sameNameDeletedExercise,\n          ...exercise,\n          id: sameNameDeletedExercise.id,\n          isDeleted: false,\n        },\n      };\n    } else {\n      return { ...allExercises, [exercise.id]: exercise };\n    }\n  }\n}\n\nexport function Exercise_handleCustomExerciseChange(\n  dispatch: IDispatch,\n  action: \"upsert\" | \"delete\",\n  exercise: ICustomExercise,\n  notes: string | undefined,\n  settings: ISettings,\n  program?: IProgram\n): void {\n  const oldExercise = settings.exercises[exercise.id];\n  const ex =\n    action === \"upsert\"\n      ? Exercise_upsertCustomExercise(settings.exercises, exercise)\n      : Exercise_deleteCustomExercise(settings.exercises, exercise.id);\n  updateSettings(dispatch, lb<ISettings>().p(\"exercises\").record(ex), \"Create custom exercise\");\n  updateSettings(dispatch, lb<ISettings>().p(\"exerciseData\").pi(exercise.id).p(\"notes\").record(notes), \"Update notes\");\n  if (program && oldExercise && oldExercise.name !== exercise.name) {\n    const newProgram = Program_changeExerciseName(oldExercise.name, exercise.name, program, {\n      ...settings,\n      exercises: ex,\n    });\n    EditProgram_updateProgram(dispatch, newProgram);\n  }\n}\n\nexport function Exercise_createOrUpdateCustomExercise(\n  allExercises: IAllCustomExercises,\n  name: string,\n  tMuscles: IMuscle[],\n  sMuscles: IMuscle[],\n  types: IExerciseKind[],\n  smallImageUrl?: string,\n  largeImageUrl?: string,\n  exercise?: ICustomExercise\n): IAllCustomExercises {\n  if (exercise != null) {\n    const newExercise = Exercise_editCustomExercise(\n      exercise,\n      name,\n      tMuscles,\n      sMuscles,\n      types,\n      smallImageUrl,\n      largeImageUrl\n    );\n    return { ...allExercises, [newExercise.id]: newExercise };\n  } else {\n    const deletedExerciseKey = ObjectUtils_keys(allExercises).find(\n      (k) => allExercises[k]?.isDeleted && allExercises[k]?.name === name\n    );\n    const deletedExercise = deletedExerciseKey != null ? allExercises[deletedExerciseKey] : undefined;\n    if (deletedExercise) {\n      return {\n        ...allExercises,\n        [deletedExercise.id]: {\n          ...deletedExercise,\n          name,\n          types,\n          smallImageUrl,\n          largeImageUrl,\n          isDeleted: false,\n          meta: {\n            targetMuscles: tMuscles,\n            bodyParts: [],\n            synergistMuscles: sMuscles,\n          },\n        },\n      };\n    } else {\n      const newExercise = Exercise_createCustomExercise(name, tMuscles, sMuscles, types, smallImageUrl, largeImageUrl);\n      return { ...allExercises, [newExercise.id]: newExercise };\n    }\n  }\n}\n\nexport function Exercise_filterExercises<T extends { name: string }>(allExercises: T[], filter: string): T[] {\n  return allExercises.filter((e) => StringUtils_fuzzySearch(filter.toLowerCase(), e.name.toLowerCase()));\n}\n\nfunction scoreTokenAgainstWords(\n  token: string,\n  words: string[],\n  fullText: string,\n  weights: [number, number, number]\n): number {\n  if (words.indexOf(token) !== -1) {\n    return weights[0];\n  }\n  for (const w of words) {\n    if (w.startsWith(token)) {\n      return weights[1];\n    }\n  }\n  if (fullText.indexOf(token) !== -1) {\n    return weights[2];\n  }\n  return 0;\n}\n\nfunction tokenizeQuery(query: string): { normalized: string; tokens: string[] } | undefined {\n  const tokens = query\n    .toLowerCase()\n    .split(/[^a-z0-9]+/)\n    .filter((t) => t.length > 0);\n  if (tokens.length === 0) {\n    return undefined;\n  }\n  return { normalized: tokens.join(\" \"), tokens };\n}\n\nfunction scoreExerciseAgainstTokens(\n  name: string,\n  equipment: string,\n  isDefaultEquipment: boolean,\n  normalizedQuery: string,\n  tokens: string[]\n): number | undefined {\n  const nameWords = name.split(/[\\s,]+/).filter((w) => w.length > 0);\n  const equipmentWords = equipment.split(/[\\s,]+/).filter((w) => w.length > 0);\n  const normalizedFullName = equipment ? `${nameWords.join(\" \")} ${equipmentWords.join(\" \")}` : nameWords.join(\" \");\n\n  let totalScore = 0;\n  for (const token of tokens) {\n    const nameScore = scoreTokenAgainstWords(token, nameWords, name, [1000, 500, 200]);\n    const equipmentScore = equipment ? scoreTokenAgainstWords(token, equipmentWords, equipment, [800, 400, 150]) : 0;\n    const best = Math.max(nameScore, equipmentScore);\n    if (best === 0) {\n      return undefined;\n    }\n    totalScore += best;\n  }\n\n  if (name === normalizedQuery || normalizedFullName === normalizedQuery) {\n    totalScore += 10000;\n  }\n  if (name.startsWith(normalizedQuery)) {\n    totalScore += 300;\n  }\n  if (tokens.indexOf(name) !== -1) {\n    totalScore += 1000;\n  }\n  if (equipment && isDefaultEquipment) {\n    totalScore += 50;\n  }\n  return totalScore;\n}\n\nexport function Exercise_matchesQuery<T extends { name: string; equipment?: IEquipment }>(\n  exercise: T,\n  query: string\n): boolean {\n  const parsed = tokenizeQuery(query);\n  if (!parsed) {\n    return true;\n  }\n  const name = exercise.name.toLowerCase();\n  const equipment = exercise.equipment ? equipmentName(exercise.equipment).toLowerCase() : \"\";\n  return scoreExerciseAgainstTokens(name, equipment, false, parsed.normalized, parsed.tokens) != null;\n}\n\nexport function Exercise_filterAndRankByQuery<\n  T extends { name: string; equipment?: IEquipment; defaultEquipment?: IEquipment },\n>(allExercises: T[], query: string): T[] {\n  const parsed = tokenizeQuery(query);\n  if (!parsed) {\n    return allExercises;\n  }\n  const { normalized, tokens } = parsed;\n\n  const scored: Array<{ exercise: T; score: number; name: string; fullName: string }> = [];\n  for (const e of allExercises) {\n    const name = e.name.toLowerCase();\n    const equipment = e.equipment ? equipmentName(e.equipment).toLowerCase() : \"\";\n    const isDefaultEquipment = !!e.equipment && !!e.defaultEquipment && e.equipment === e.defaultEquipment;\n    const score = scoreExerciseAgainstTokens(name, equipment, isDefaultEquipment, normalized, tokens);\n    if (score == null) {\n      continue;\n    }\n    const fullName = equipment ? `${name}, ${equipment}` : name;\n    scored.push({ exercise: e, score, name, fullName });\n  }\n\n  scored.sort((a, b) => {\n    if (b.score !== a.score) {\n      return b.score - a.score;\n    }\n    const byName = a.name.localeCompare(b.name);\n    if (byName !== 0) {\n      return byName;\n    }\n    return a.fullName.localeCompare(b.fullName);\n  });\n  return scored.map((s) => s.exercise);\n}\n\nexport function Exercise_filterAndRankCustomByQuery(\n  customExercises: IAllCustomExercises,\n  query: string\n): ICustomExercise[] {\n  const list = CollectionUtils_compact(ObjectUtils_values(customExercises)).filter((e) => !e.isDeleted);\n  const parsed = tokenizeQuery(query);\n  if (!parsed) {\n    return list;\n  }\n  const { normalized, tokens } = parsed;\n\n  const scored: Array<{ exercise: ICustomExercise; score: number; name: string }> = [];\n  for (const e of list) {\n    const name = e.name.toLowerCase();\n    const score = scoreExerciseAgainstTokens(name, \"\", false, normalized, tokens);\n    if (score == null) {\n      continue;\n    }\n    scored.push({ exercise: e, score, name });\n  }\n\n  scored.sort((a, b) => (b.score !== a.score ? b.score - a.score : a.name.localeCompare(b.name)));\n  return scored.map((s) => s.exercise);\n}\n\nexport function Exercise_sortExercises(\n  allExercises: IExercise[],\n  isSubstitute: boolean,\n  settings: ISettings,\n  filterTypes?: string[],\n  currentExerciseType?: IExerciseType\n): IExercise[] {\n  return CollectionUtils_sort(allExercises, (a, b) => {\n    const exerciseType = currentExerciseType;\n    if (isSubstitute && exerciseType) {\n      const aRating = Exercise_similarRating(exerciseType, a, settings);\n      const bRating = Exercise_similarRating(exerciseType, b, settings);\n      return bRating - aRating;\n    } else if (\n      filterTypes &&\n      Muscle_getAvailableMuscleGroups(settings)\n        .map((m) => m.toLowerCase())\n        .some((t) => filterTypes.map((ft) => ft.toLowerCase()).indexOf(t) !== -1)\n    ) {\n      const lowercaseFilterTypes = filterTypes.map((t) => t.toLowerCase());\n      const aTargetMuscleGroups = Exercise_targetMusclesGroups(a, settings);\n      const bTargetMuscleGroups = Exercise_targetMusclesGroups(b, settings);\n      if (\n        aTargetMuscleGroups.some((m) => lowercaseFilterTypes.indexOf(m) !== -1) &&\n        bTargetMuscleGroups.every((m) => lowercaseFilterTypes.indexOf(m) === -1)\n      ) {\n        return -1;\n      } else if (\n        bTargetMuscleGroups.some((m) => lowercaseFilterTypes.indexOf(m) !== -1) &&\n        aTargetMuscleGroups.every((m) => lowercaseFilterTypes.indexOf(m) === -1)\n      ) {\n        return 1;\n      } else {\n        return a.name.localeCompare(b.name);\n      }\n    } else {\n      return a.name.localeCompare(b.name);\n    }\n  });\n}\n\nexport function Exercise_filterExercisesByType<T extends IExerciseType>(\n  allExercises: T[],\n  filterTypes: string[],\n  settings: ISettings\n): T[] {\n  return allExercises.filter((e) => {\n    const exercise = Exercise_get(e, settings.exercises);\n    const targetMuscleGroups = Exercise_targetMusclesGroups(e, settings).map((m) => m.toLowerCase());\n    const synergistMuscleGroups = Exercise_synergistMusclesGroups(e, settings).map((m) => m.toLowerCase());\n    return filterTypes\n      .map((ft) => ft.toLowerCase())\n      .every((ft) => {\n        return (\n          targetMuscleGroups.indexOf(ft) !== -1 ||\n          synergistMuscleGroups.indexOf(ft) !== -1 ||\n          exercise.types.map((t) => t.toLowerCase()).indexOf(ft) !== -1 ||\n          equipmentName(e.equipment).toLowerCase() === ft\n        );\n      });\n  });\n}\n\nexport function Exercise_filterCustomExercises(\n  customExercises: IAllCustomExercises,\n  filter: string\n): IAllCustomExercises {\n  return ObjectUtils_filter(customExercises, (e, v) =>\n    v && !v.isDeleted ? StringUtils_fuzzySearch(filter.toLowerCase(), v.name.toLowerCase()) : false\n  );\n}\n\nexport function Exercise_filterCustomExercisesByType(filterTypes: string[], settings: ISettings): IAllCustomExercises {\n  return ObjectUtils_filter(settings.exercises, (_id, exercise) => {\n    if (!exercise || exercise.isDeleted) {\n      return false;\n    }\n    const targetMuscleGroups = Array.from(\n      new Set(\n        CollectionUtils_flat(exercise.meta.targetMuscles.map((m) => Muscle_getScreenMusclesFromMuscle(m, settings)))\n      )\n    ).map((m) => Muscle_getMuscleGroupName(m, settings));\n    const synergistMuscleGroups = Array.from(\n      new Set(\n        CollectionUtils_flat(exercise.meta.synergistMuscles.map((m) => Muscle_getScreenMusclesFromMuscle(m, settings)))\n      )\n    ).map((m) => Muscle_getMuscleGroupName(m, settings));\n    return filterTypes.every((ft) => {\n      return (\n        targetMuscleGroups.indexOf(ft) !== -1 ||\n        synergistMuscleGroups.indexOf(ft) !== -1 ||\n        (exercise.types || []).map(StringUtils_capitalize).indexOf(ft) !== -1\n      );\n    });\n  });\n}\n","import { IExerciseType, ISettings } from \"../types\";\nimport { Exercise_toUrlSlug } from \"./exercise\";\nconst availableSmallImages = new Set([\n  \"abwheel_bodyweight\",\n  \"arnoldpress_dumbbell\",\n  \"arnoldpress_kettlebell\",\n  \"aroundtheworld_dumbbell\",\n  \"backextension_bodyweight\",\n  \"backextension_leveragemachine\",\n  \"ballslams_medicineball\",\n  \"battleropes_bodyweight\",\n  \"behindtheneckpress_band\",\n  \"behindtheneckpress_barbell\",\n  \"behindtheneckpress_smith\",\n  \"benchdip_bodyweight\",\n  \"benchpress_band\",\n  \"benchpress_barbell\",\n  \"benchpress_cable\",\n  \"benchpress_dumbbell\",\n  \"benchpress_kettlebell\",\n  \"benchpress_smith\",\n  \"benchpressclosegrip_barbell\",\n  \"benchpressclosegrip_ezbar\",\n  \"benchpressclosegrip_smith\",\n  \"benchpresswidegrip_barbell\",\n  \"benchpresswidegrip_smith\",\n  \"bentoveronearmrow_dumbbell\",\n  \"bentoverrow_band\",\n  \"bentoverrow_barbell\",\n  \"bentoverrow_cable\",\n  \"bentoverrow_dumbbell\",\n  \"bentoverrow_leveragemachine\",\n  \"bentoverrow_smith\",\n  \"bicepcurl_band\",\n  \"bicepcurl_barbell\",\n  \"bicepcurl_cable\",\n  \"bicepcurl_dumbbell\",\n  \"bicepcurl_ezbar\",\n  \"bicepcurl_leveragemachine\",\n  \"bicyclecrunch_bodyweight\",\n  \"boxsquat_barbell\",\n  \"boxsquat_dumbbell\",\n  \"bulgariansplitsquat_dumbbell\",\n  \"cablecrossover_cable\",\n  \"cablecrunch_cable\",\n  \"cablekickback_cable\",\n  \"cablepullthrough_cable\",\n  \"cabletwist_band\",\n  \"cabletwist_barbell\",\n  \"cabletwist_bodyweight\",\n  \"cabletwist_cable\",\n  \"cabletwist_leveragemachine\",\n  \"calfpressonlegpress_leveragemachine\",\n  \"calfpressonseatedlegpress_leveragemachine\",\n  \"chestdip_bodyweight\",\n  \"chestfly_barbell\",\n  \"chestfly_cable\",\n  \"chestfly_dumbbell\",\n  \"chestfly_leveragemachine\",\n  \"chestpress_band\",\n  \"chestpress_leveragemachine\",\n  \"chinup_bodyweight\",\n  \"chinup_leveragemachine\",\n  \"clean_barbell\",\n  \"cleanandjerk_barbell\",\n  \"concentrationcurl_band\",\n  \"concentrationcurl_barbell\",\n  \"concentrationcurl_cable\",\n  \"concentrationcurl_dumbbell\",\n  \"crossbodycrunch_bodyweight\",\n  \"crunch_bodyweight\",\n  \"crunch_cable\",\n  \"crunch_leveragemachine\",\n  \"deadlift_band\",\n  \"deadlift_barbell\",\n  \"deadlift_cable\",\n  \"deadlift_dumbbell\",\n  \"deadlift_kettlebell\",\n  \"deadlift_leveragemachine\",\n  \"deadlift_smith\",\n  \"deadlifthighpull_barbell\",\n  \"declinebenchpress_dumbbell\",\n  \"declinebenchpress_smith\",\n  \"deficitdeadlift_barbell\",\n  \"deficitdeadlift_trapbar\",\n  \"ellipticalmachine_leveragemachine\",\n  \"facepull_band\",\n  \"flatkneeraise_bodyweight\",\n  \"flatlegraise_bodyweight\",\n  \"frontraise_band\",\n  \"frontraise_barbell\",\n  \"frontraise_bodyweight\",\n  \"frontraise_cable\",\n  \"frontraise_dumbbell\",\n  \"frontsquat_barbell\",\n  \"frontsquat_cable\",\n  \"frontsquat_dumbbell\",\n  \"frontsquat_kettlebell\",\n  \"frontsquat_smith\",\n  \"glutebridge_band\",\n  \"glutebridge_barbell\",\n  \"glutebridge_dumbbell\",\n  \"glutebridgemarch_bodyweight\",\n  \"glutekickback_band\",\n  \"glutekickback_cable\",\n  \"gobletsquat_dumbbell\",\n  \"gobletsquat_kettlebell\",\n  \"goodmorning_barbell\",\n  \"goodmorning_leveragemachine\",\n  \"goodmorning_smith\",\n  \"hacksquat_barbell\",\n  \"hacksquat_smith\",\n  \"hammercurl_band\",\n  \"hammercurl_cable\",\n  \"hammercurl_dumbbell\",\n  \"handstandpushup_bodyweight\",\n  \"hangclean_kettlebell\",\n  \"hanginglegraise_bodyweight\",\n  \"hanginglegraise_cable\",\n  \"highrow_cable\",\n  \"highrow_leveragemachine\",\n  \"hipabductor_band\",\n  \"hipabductor_bodyweight\",\n  \"hipabductor_cable\",\n  \"hipabductor_leveragemachine\",\n  \"hipadductor_leveragemachine\",\n  \"hipthrust_band\",\n  \"hipthrust_barbell\",\n  \"hipthrust_bodyweight\",\n  \"hipthrust_leveragemachine\",\n  \"inclinebenchpress_barbell\",\n  \"inclinebenchpress_cable\",\n  \"inclinebenchpress_dumbbell\",\n  \"inclinebenchpress_smith\",\n  \"inclinebenchpresswidegrip_barbell\",\n  \"inclinechestfly_cable\",\n  \"inclinechestfly_dumbbell\",\n  \"inclinechestpress_band\",\n  \"inclinechestpress_dumbbell\",\n  \"inclinechestpress_leveragemachine\",\n  \"inclinecurl_dumbbell\",\n  \"inclinerow_barbell\",\n  \"inclinerow_dumbbell\",\n  \"invertedrow_bodyweight\",\n  \"jackknifesitup_bodyweight\",\n  \"jumpsquat_barbell\",\n  \"jumpsquat_bodyweight\",\n  \"kettlebellswing_dumbbell\",\n  \"kettlebellswing_kettlebell\",\n  \"kneelingpulldown_band\",\n  \"kneestoelbows_bodyweight\",\n  \"lateralraise_band\",\n  \"lateralraise_cable\",\n  \"lateralraise_dumbbell\",\n  \"lateralraise_kettlebell\",\n  \"lateralraise_leveragemachine\",\n  \"latpulldown_cable\",\n  \"latpulldown_leveragemachine\",\n  \"legextension_band\",\n  \"legextension_leveragemachine\",\n  \"legpress_leveragemachine\",\n  \"legpress_smith\",\n  \"legsupbenchpress_barbell\",\n  \"lunge_barbell\",\n  \"lunge_bodyweight\",\n  \"lunge_cable\",\n  \"lunge_dumbbell\",\n  \"lyingbicepcurl_cable\",\n  \"lyingbicepcurl_dumbbell\",\n  \"lyinglegcurl_band\",\n  \"lyinglegcurl_leveragemachine\",\n  \"muscleup_bodyweight\",\n  \"obliquecrunch_bodyweight\",\n  \"overheadpress_barbell\",\n  \"overheadpress_dumbbell\",\n  \"overheadpress_ezbar\",\n  \"overheadsquat_barbell\",\n  \"overheadsquat_dumbbell\",\n  \"pecdeck_leveragemachine\",\n  \"pendlayrow_barbell\",\n  \"pistolsquat_bodyweight\",\n  \"pistolsquat_kettlebell\",\n  \"pistolsquat_leveragemachine\",\n  \"plank_bodyweight\",\n  \"preachercurl_barbell\",\n  \"preachercurl_dumbbell\",\n  \"preachercurl_ezbar\",\n  \"preachercurl_leveragemachine\",\n  \"pullover_barbell\",\n  \"pullover_dumbbell\",\n  \"pullup_band\",\n  \"pullup_bodyweight\",\n  \"pullup_leveragemachine\",\n  \"pushpress_barbell\",\n  \"pushpress_bodyweight\",\n  \"pushpress_dumbbell\",\n  \"pushpress_kettlebell\",\n  \"pushup_band\",\n  \"pushup_bodyweight\",\n  \"reversecrunch_bodyweight\",\n  \"reversecrunch_cable\",\n  \"reversecurl_band\",\n  \"reversecurl_barbell\",\n  \"reversecurl_cable\",\n  \"reversecurl_dumbbell\",\n  \"reversefly_band\",\n  \"reversefly_dumbbell\",\n  \"reversefly_leveragemachine\",\n  \"reversehyperextension_band\",\n  \"reversehyperextension_leveragemachine\",\n  \"reverselunge_barbell\",\n  \"reverselunge_bodyweight\",\n  \"reverselunge_dumbbell\",\n  \"reverselunge_kettlebell\",\n  \"reversewristcurl_barbell\",\n  \"reversewristcurl_dumbbell\",\n  \"reversewristcurl_ezbar\",\n  \"romaniandeadlift_barbell\",\n  \"romaniandeadlift_dumbbell\",\n  \"russiantwist_bodyweight\",\n  \"russiantwist_cable\",\n  \"russiantwist_dumbbell\",\n  \"safetysquatbarsquat_barbell\",\n  \"seatedcalfraise_barbell\",\n  \"seatedcalfraise_dumbbell\",\n  \"seatedcalfraise_leveragemachine\",\n  \"seatedfrontraise_barbell\",\n  \"seatedfrontraise_dumbbell\",\n  \"seatedlegcurl_leveragemachine\",\n  \"seatedlegpress_leveragemachine\",\n  \"seatedoverheadpress_barbell\",\n  \"seatedpalmsupwristcurl_dumbbell\",\n  \"seatedrow_band\",\n  \"seatedrow_cable\",\n  \"seatedrow_leveragemachine\",\n  \"seatedwidegriprow_cable\",\n  \"shoulderpress_band\",\n  \"shoulderpress_cable\",\n  \"shoulderpress_dumbbell\",\n  \"shoulderpress_leveragemachine\",\n  \"shoulderpress_smith\",\n  \"shoulderpressparallelgrip_dumbbell\",\n  \"shrug_band\",\n  \"shrug_barbell\",\n  \"shrug_cable\",\n  \"shrug_dumbbell\",\n  \"shrug_leveragemachine\",\n  \"shrug_smith\",\n  \"sidebend_band\",\n  \"sidebend_cable\",\n  \"sidebend_dumbbell\",\n  \"sidecrunch_band\",\n  \"sidecrunch_bodyweight\",\n  \"sidecrunch_cable\",\n  \"sidehipabductor_barbell\",\n  \"sidehipabductor_bodyweight\",\n  \"sidehipabductor_leveragemachine\",\n  \"sidelyingclam_bodyweight\",\n  \"sideplank_bodyweight\",\n  \"singlelegbridge_bodyweight\",\n  \"singlelegdeadlift_bodyweight\",\n  \"singlelegdeadlift_dumbbell\",\n  \"singlelegglutebridgebench_bodyweight\",\n  \"singlelegglutebridgebentknee_bodyweight\",\n  \"singlelegglutebridgestraight_bodyweight\",\n  \"singleleghipthrust_barbell\",\n  \"singleleghipthrust_bodyweight\",\n  \"singleleghipthrust_leveragemachine\",\n  \"sissysquat_bodyweight\",\n  \"situp_bodyweight\",\n  \"situp_kettlebell\",\n  \"skullcrusher_barbell\",\n  \"skullcrusher_cable\",\n  \"skullcrusher_dumbbell\",\n  \"skullcrusher_ezbar\",\n  \"snatch_dumbbell\",\n  \"splitsquat_band\",\n  \"splitsquat_barbell\",\n  \"splitsquat_bodyweight\",\n  \"splitsquat_dumbbell\",\n  \"splitsquat_kettlebell\",\n  \"squat_barbell\",\n  \"squat_bodyweight\",\n  \"squat_dumbbell\",\n  \"squat_leveragemachine\",\n  \"squat_smith\",\n  \"squatrow_band\",\n  \"standingcalfraise_barbell\",\n  \"standingcalfraise_bodyweight\",\n  \"standingcalfraise_cable\",\n  \"standingcalfraise_dumbbell\",\n  \"standingcalfraise_leveragemachine\",\n  \"standingrow_cable\",\n  \"standingrowclosegrip_cable\",\n  \"standingrowreardeltwithrope_cable\",\n  \"standingrowrearhorizontaldeltwithrope_cable\",\n  \"standingrowvbar_cable\",\n  \"stepup_band\",\n  \"stepup_barbell\",\n  \"stepup_bodyweight\",\n  \"stepup_dumbbell\",\n  \"stifflegdeadlift_band\",\n  \"stifflegdeadlift_barbell\",\n  \"stifflegdeadlift_dumbbell\",\n  \"straightlegdeadlift_band\",\n  \"straightlegdeadlift_barbell\",\n  \"straightlegdeadlift_dumbbell\",\n  \"straightlegdeadlift_kettlebell\",\n  \"sumodeadlift_barbell\",\n  \"sumodeadlifthighpull_barbell\",\n  \"superman_bodyweight\",\n  \"superman_dumbbell\",\n  \"tbarrow_leveragemachine\",\n  \"thruster_barbell\",\n  \"toestobar_bodyweight\",\n  \"trapbardeadlift_trapbar\",\n  \"tricepsdip_bodyweight\",\n  \"tricepsdip_leveragemachine\",\n  \"tricepsextension_band\",\n  \"tricepsextension_barbell\",\n  \"tricepsextension_cable\",\n  \"tricepsextension_dumbbell\",\n  \"tricepspushdown_cable\",\n  \"uprightrow_band\",\n  \"uprightrow_barbell\",\n  \"uprightrow_cable\",\n  \"uprightrow_dumbbell\",\n  \"vup_band\",\n  \"vup_bodyweight\",\n  \"vup_dumbbell\",\n  \"widepullup_bodyweight\",\n  \"wristcurl_barbell\",\n  \"wristcurl_dumbbell\",\n  \"wristcurl_ezbar\",\n  \"wristroller_bodyweight\",\n  \"zerchersquat_barbell\",\n  \"wallpushup_bodyweight\",\n  \"inclinepushup_bodyweight\",\n  \"kneepushup_bodyweight\",\n  \"diamondpushup_bodyweight\",\n  \"pseudoplanchepushup_bodyweight\",\n  \"pikepushup_bodyweight\",\n  \"ringdip_bodyweight\",\n  \"negativedip_bodyweight\",\n  \"verticalrow_bodyweight\",\n  \"widerow_bodyweight\",\n  \"ringrow_bodyweight\",\n  \"tuckfrontleverrow_bodyweight\",\n  \"frontleverrow_bodyweight\",\n  \"scapularpullup_bodyweight\",\n  \"deadhang_bodyweight\",\n  \"negativepullup_bodyweight\",\n  \"assistedsquat_bodyweight\",\n  \"shrimpsquat_bodyweight\",\n  \"nordiccurl_bodyweight\",\n  \"handstand_bodyweight\",\n  \"wallhandstand_bodyweight\",\n  \"crowpose_bodyweight\",\n  \"dragonflag_bodyweight\",\n  \"copenhagenplank_bodyweight\",\n  \"hangingkneeraise_bodyweight\",\n  \"archhang_bodyweight\",\n  \"supporthold_bodyweight\",\n  \"pallofpress_band\",\n  \"renegaderow_dumbbell\",\n  \"romaniandeadlift_bodyweight\",\n  \"bulgariansplitsquat_bodyweight\",\n]);\n\nconst availableLargeImages = new Set([\n  \"abwheel_bodyweight\",\n  \"arnoldpress_dumbbell\",\n  \"arnoldpress_kettlebell\",\n  \"aroundtheworld_dumbbell\",\n  \"backextension_bodyweight\",\n  \"backextension_leveragemachine\",\n  \"ballslams_medicineball\",\n  \"battleropes_bodyweight\",\n  \"behindtheneckpress_band\",\n  \"behindtheneckpress_barbell\",\n  \"behindtheneckpress_smith\",\n  \"benchdip_bodyweight\",\n  \"benchpress_band\",\n  \"benchpress_barbell\",\n  \"benchpress_cable\",\n  \"benchpress_dumbbell\",\n  \"benchpress_kettlebell\",\n  \"benchpress_smith\",\n  \"benchpressclosegrip_barbell\",\n  \"benchpressclosegrip_ezbar\",\n  \"benchpressclosegrip_smith\",\n  \"benchpresswidegrip_barbell\",\n  \"benchpresswidegrip_smith\",\n  \"bentoveronearmrow_dumbbell\",\n  \"bentoverrow_band\",\n  \"bentoverrow_barbell\",\n  \"bentoverrow_cable\",\n  \"bentoverrow_dumbbell\",\n  \"bentoverrow_leveragemachine\",\n  \"bentoverrow_smith\",\n  \"bicepcurl_band\",\n  \"bicepcurl_barbell\",\n  \"bicepcurl_cable\",\n  \"bicepcurl_dumbbell\",\n  \"bicepcurl_ezbar\",\n  \"bicepcurl_leveragemachine\",\n  \"bicyclecrunch_bodyweight\",\n  \"boxsquat_barbell\",\n  \"boxsquat_dumbbell\",\n  \"bulgariansplitsquat_dumbbell\",\n  \"cablecrossover_cable\",\n  \"cablecrunch_cable\",\n  \"cablekickback_cable\",\n  \"cablepullthrough_cable\",\n  \"cabletwist_band\",\n  \"cabletwist_barbell\",\n  \"cabletwist_bodyweight\",\n  \"cabletwist_cable\",\n  \"cabletwist_leveragemachine\",\n  \"calfpressonlegpress_leveragemachine\",\n  \"calfpressonseatedlegpress_leveragemachine\",\n  \"chestdip_bodyweight\",\n  \"chestfly_barbell\",\n  \"chestfly_cable\",\n  \"chestfly_dumbbell\",\n  \"chestfly_leveragemachine\",\n  \"chestpress_band\",\n  \"chestpress_leveragemachine\",\n  \"chinup_bodyweight\",\n  \"chinup_leveragemachine\",\n  \"clean_barbell\",\n  \"cleanandjerk_barbell\",\n  \"concentrationcurl_band\",\n  \"concentrationcurl_barbell\",\n  \"concentrationcurl_cable\",\n  \"concentrationcurl_dumbbell\",\n  \"crossbodycrunch_bodyweight\",\n  \"crunch_bodyweight\",\n  \"crunch_cable\",\n  \"crunch_leveragemachine\",\n  \"deadlift_band\",\n  \"deadlift_barbell\",\n  \"deadlift_cable\",\n  \"deadlift_dumbbell\",\n  \"deadlift_kettlebell\",\n  \"deadlift_leveragemachine\",\n  \"deadlift_smith\",\n  \"deadlifthighpull_barbell\",\n  \"declinebenchpress_dumbbell\",\n  \"declinebenchpress_smith\",\n  \"deficitdeadlift_barbell\",\n  \"deficitdeadlift_trapbar\",\n  \"ellipticalmachine_leveragemachine\",\n  \"facepull_band\",\n  \"flatkneeraise_bodyweight\",\n  \"flatlegraise_bodyweight\",\n  \"frontraise_band\",\n  \"frontraise_barbell\",\n  \"frontraise_bodyweight\",\n  \"frontraise_cable\",\n  \"frontraise_dumbbell\",\n  \"frontsquat_barbell\",\n  \"frontsquat_cable\",\n  \"frontsquat_dumbbell\",\n  \"frontsquat_kettlebell\",\n  \"frontsquat_smith\",\n  \"glutebridge_band\",\n  \"glutebridge_barbell\",\n  \"glutebridge_dumbbell\",\n  \"glutebridgemarch_bodyweight\",\n  \"glutekickback_band\",\n  \"glutekickback_cable\",\n  \"gobletsquat_dumbbell\",\n  \"gobletsquat_kettlebell\",\n  \"goodmorning_barbell\",\n  \"goodmorning_leveragemachine\",\n  \"goodmorning_smith\",\n  \"hacksquat_barbell\",\n  \"hacksquat_smith\",\n  \"hammercurl_band\",\n  \"hammercurl_cable\",\n  \"hammercurl_dumbbell\",\n  \"handstandpushup_bodyweight\",\n  \"hangclean_kettlebell\",\n  \"hanginglegraise_bodyweight\",\n  \"hanginglegraise_cable\",\n  \"highrow_cable\",\n  \"highrow_leveragemachine\",\n  \"hipabductor_band\",\n  \"hipabductor_bodyweight\",\n  \"hipabductor_cable\",\n  \"hipabductor_leveragemachine\",\n  \"hipadductor_leveragemachine\",\n  \"hipthrust_band\",\n  \"hipthrust_barbell\",\n  \"hipthrust_bodyweight\",\n  \"hipthrust_leveragemachine\",\n  \"inclinebenchpress_barbell\",\n  \"inclinebenchpress_cable\",\n  \"inclinebenchpress_dumbbell\",\n  \"inclinebenchpress_smith\",\n  \"inclinebenchpresswidegrip_barbell\",\n  \"inclinechestfly_cable\",\n  \"inclinechestfly_dumbbell\",\n  \"inclinechestpress_band\",\n  \"inclinechestpress_dumbbell\",\n  \"inclinechestpress_leveragemachine\",\n  \"inclinecurl_dumbbell\",\n  \"inclinerow_barbell\",\n  \"inclinerow_dumbbell\",\n  \"invertedrow_bodyweight\",\n  \"jackknifesitup_bodyweight\",\n  \"jumpsquat_barbell\",\n  \"jumpsquat_bodyweight\",\n  \"kettlebellswing_dumbbell\",\n  \"kettlebellswing_kettlebell\",\n  \"kneelingpulldown_band\",\n  \"kneestoelbows_bodyweight\",\n  \"lateralraise_band\",\n  \"lateralraise_cable\",\n  \"lateralraise_dumbbell\",\n  \"lateralraise_kettlebell\",\n  \"lateralraise_leveragemachine\",\n  \"latpulldown_cable\",\n  \"latpulldown_leveragemachine\",\n  \"legextension_band\",\n  \"legextension_leveragemachine\",\n  \"legpress_leveragemachine\",\n  \"legpress_smith\",\n  \"legsupbenchpress_barbell\",\n  \"lunge_barbell\",\n  \"lunge_bodyweight\",\n  \"lunge_cable\",\n  \"lunge_dumbbell\",\n  \"lyingbicepcurl_cable\",\n  \"lyingbicepcurl_dumbbell\",\n  \"lyinglegcurl_band\",\n  \"lyinglegcurl_leveragemachine\",\n  \"muscleup_bodyweight\",\n  \"obliquecrunch_bodyweight\",\n  \"overheadpress_barbell\",\n  \"overheadpress_dumbbell\",\n  \"overheadpress_ezbar\",\n  \"overheadsquat_barbell\",\n  \"overheadsquat_dumbbell\",\n  \"pecdeck_leveragemachine\",\n  \"pendlayrow_barbell\",\n  \"pistolsquat_bodyweight\",\n  \"pistolsquat_kettlebell\",\n  \"pistolsquat_leveragemachine\",\n  \"plank_bodyweight\",\n  \"preachercurl_barbell\",\n  \"preachercurl_dumbbell\",\n  \"preachercurl_ezbar\",\n  \"preachercurl_leveragemachine\",\n  \"pullover_barbell\",\n  \"pullover_dumbbell\",\n  \"pullup_band\",\n  \"pullup_bodyweight\",\n  \"pullup_leveragemachine\",\n  \"pushpress_barbell\",\n  \"pushpress_bodyweight\",\n  \"pushpress_dumbbell\",\n  \"pushpress_kettlebell\",\n  \"pushup_band\",\n  \"pushup_bodyweight\",\n  \"reversecrunch_bodyweight\",\n  \"reversecrunch_cable\",\n  \"reversecurl_band\",\n  \"reversecurl_barbell\",\n  \"reversecurl_cable\",\n  \"reversecurl_dumbbell\",\n  \"reversefly_band\",\n  \"reversefly_dumbbell\",\n  \"reversefly_leveragemachine\",\n  \"reversehyperextension_band\",\n  \"reversehyperextension_leveragemachine\",\n  \"reverselunge_barbell\",\n  \"reverselunge_bodyweight\",\n  \"reverselunge_dumbbell\",\n  \"reverselunge_kettlebell\",\n  \"reversewristcurl_barbell\",\n  \"reversewristcurl_dumbbell\",\n  \"reversewristcurl_ezbar\",\n  \"romaniandeadlift_barbell\",\n  \"romaniandeadlift_dumbbell\",\n  \"russiantwist_bodyweight\",\n  \"russiantwist_cable\",\n  \"russiantwist_dumbbell\",\n  \"safetysquatbarsquat_barbell\",\n  \"seatedcalfraise_barbell\",\n  \"seatedcalfraise_dumbbell\",\n  \"seatedcalfraise_leveragemachine\",\n  \"seatedfrontraise_barbell\",\n  \"seatedfrontraise_dumbbell\",\n  \"seatedlegcurl_leveragemachine\",\n  \"seatedlegpress_leveragemachine\",\n  \"seatedoverheadpress_barbell\",\n  \"seatedpalmsupwristcurl_dumbbell\",\n  \"seatedrow_band\",\n  \"seatedrow_cable\",\n  \"seatedrow_leveragemachine\",\n  \"seatedwidegriprow_cable\",\n  \"shoulderpress_band\",\n  \"shoulderpress_cable\",\n  \"shoulderpress_dumbbell\",\n  \"shoulderpress_leveragemachine\",\n  \"shoulderpress_smith\",\n  \"shoulderpressparallelgrip_dumbbell\",\n  \"shrug_band\",\n  \"shrug_barbell\",\n  \"shrug_cable\",\n  \"shrug_dumbbell\",\n  \"shrug_leveragemachine\",\n  \"shrug_smith\",\n  \"sidebend_band\",\n  \"sidebend_cable\",\n  \"sidebend_dumbbell\",\n  \"sidecrunch_band\",\n  \"sidecrunch_bodyweight\",\n  \"sidecrunch_cable\",\n  \"sidehipabductor_barbell\",\n  \"sidehipabductor_bodyweight\",\n  \"sidehipabductor_leveragemachine\",\n  \"sidelyingclam_bodyweight\",\n  \"sideplank_bodyweight\",\n  \"singlelegbridge_bodyweight\",\n  \"singlelegdeadlift_bodyweight\",\n  \"singlelegdeadlift_dumbbell\",\n  \"singlelegglutebridgebench_bodyweight\",\n  \"singlelegglutebridgebentknee_bodyweight\",\n  \"singlelegglutebridgestraight_bodyweight\",\n  \"singleleghipthrust_barbell\",\n  \"singleleghipthrust_bodyweight\",\n  \"singleleghipthrust_leveragemachine\",\n  \"sissysquat_bodyweight\",\n  \"situp_bodyweight\",\n  \"situp_kettlebell\",\n  \"skullcrusher_barbell\",\n  \"skullcrusher_cable\",\n  \"skullcrusher_dumbbell\",\n  \"skullcrusher_ezbar\",\n  \"snatch_dumbbell\",\n  \"splitsquat_band\",\n  \"splitsquat_barbell\",\n  \"splitsquat_bodyweight\",\n  \"splitsquat_dumbbell\",\n  \"splitsquat_kettlebell\",\n  \"squat_barbell\",\n  \"squat_bodyweight\",\n  \"squat_dumbbell\",\n  \"squat_leveragemachine\",\n  \"squat_smith\",\n  \"squatrow_band\",\n  \"standingcalfraise_barbell\",\n  \"standingcalfraise_bodyweight\",\n  \"standingcalfraise_cable\",\n  \"standingcalfraise_dumbbell\",\n  \"standingcalfraise_leveragemachine\",\n  \"standingrow_cable\",\n  \"standingrowclosegrip_cable\",\n  \"standingrowreardeltwithrope_cable\",\n  \"standingrowrearhorizontaldeltwithrope_cable\",\n  \"standingrowvbar_cable\",\n  \"stepup_band\",\n  \"stepup_barbell\",\n  \"stepup_bodyweight\",\n  \"stepup_dumbbell\",\n  \"stifflegdeadlift_band\",\n  \"stifflegdeadlift_barbell\",\n  \"stifflegdeadlift_dumbbell\",\n  \"straightlegdeadlift_band\",\n  \"straightlegdeadlift_barbell\",\n  \"straightlegdeadlift_dumbbell\",\n  \"straightlegdeadlift_kettlebell\",\n  \"sumodeadlift_barbell\",\n  \"sumodeadlifthighpull_barbell\",\n  \"superman_bodyweight\",\n  \"superman_dumbbell\",\n  \"tbarrow_leveragemachine\",\n  \"thruster_barbell\",\n  \"toestobar_bodyweight\",\n  \"trapbardeadlift_trapbar\",\n  \"tricepsdip_bodyweight\",\n  \"tricepsdip_leveragemachine\",\n  \"tricepsextension_band\",\n  \"tricepsextension_barbell\",\n  \"tricepsextension_cable\",\n  \"tricepsextension_dumbbell\",\n  \"tricepspushdown_cable\",\n  \"uprightrow_band\",\n  \"uprightrow_barbell\",\n  \"uprightrow_cable\",\n  \"uprightrow_dumbbell\",\n  \"vup_band\",\n  \"vup_bodyweight\",\n  \"vup_dumbbell\",\n  \"widepullup_bodyweight\",\n  \"wristcurl_barbell\",\n  \"wristcurl_dumbbell\",\n  \"wristcurl_ezbar\",\n  \"wristroller_bodyweight\",\n  \"zerchersquat_barbell\",\n  \"wallpushup_bodyweight\",\n  \"inclinepushup_bodyweight\",\n  \"kneepushup_bodyweight\",\n  \"diamondpushup_bodyweight\",\n  \"pseudoplanchepushup_bodyweight\",\n  \"pikepushup_bodyweight\",\n  \"ringdip_bodyweight\",\n  \"negativedip_bodyweight\",\n  \"verticalrow_bodyweight\",\n  \"widerow_bodyweight\",\n  \"ringrow_bodyweight\",\n  \"tuckfrontleverrow_bodyweight\",\n  \"frontleverrow_bodyweight\",\n  \"scapularpullup_bodyweight\",\n  \"deadhang_bodyweight\",\n  \"negativepullup_bodyweight\",\n  \"assistedsquat_bodyweight\",\n  \"shrimpsquat_bodyweight\",\n  \"nordiccurl_bodyweight\",\n  \"handstand_bodyweight\",\n  \"wallhandstand_bodyweight\",\n  \"crowpose_bodyweight\",\n  \"dragonflag_bodyweight\",\n  \"copenhagenplank_bodyweight\",\n  \"hangingkneeraise_bodyweight\",\n  \"archhang_bodyweight\",\n  \"supporthold_bodyweight\",\n  \"pallofpress_band\",\n  \"renegaderow_dumbbell\",\n  \"romaniandeadlift_bodyweight\",\n  \"bulgariansplitsquat_bodyweight\",\n]);\n\nexport function ExerciseImageUtils_id(type: IExerciseType): string {\n  const equipment = type.equipment || \"bodyweight\";\n  return `${type.id.toLowerCase()}_${(equipment || \"bodyweight\").toLowerCase()}`;\n}\n\nexport function ExerciseImageUtils_exists(type: IExerciseType, size: \"small\" | \"large\"): boolean {\n  return size === \"small\"\n    ? availableSmallImages.has(ExerciseImageUtils_id(type))\n    : availableLargeImages.has(ExerciseImageUtils_id(type));\n}\n\nexport function ExerciseImageUtils_existsCustom(\n  type: IExerciseType,\n  size: \"small\" | \"large\",\n  checkDomain: boolean,\n  settings?: ISettings\n): boolean {\n  const customExercise = settings?.exercises?.[type.id];\n  const imageUrl =\n    size === \"small\" ? customExercise?.smallImageUrl : (customExercise?.largeImageUrl ?? customExercise?.smallImageUrl);\n  return checkDomain ? !!(imageUrl?.startsWith(\"/\") || imageUrl?.includes(\"liftosaur.com\")) : !!imageUrl;\n}\n\nexport function ExerciseImageUtils_ogImageUrl(type: IExerciseType): string {\n  const key = Exercise_toUrlSlug(type);\n  return `/externalimages/exercises/ogimages/${key}.png`;\n}\n\nexport function ExerciseImageUtils_url(\n  type: IExerciseType,\n  size: \"small\" | \"large\",\n  settings?: ISettings\n): string | undefined {\n  if (ExerciseImageUtils_exists(type, size)) {\n    const src =\n      size === \"large\"\n        ? `/externalimages/exercises/full/large/${ExerciseImageUtils_id(type)}_full_large.png`\n        : `/externalimages/exercises/single/small/${ExerciseImageUtils_id(type)}_single_small.png`;\n    return src;\n  } else if (ExerciseImageUtils_existsCustom(type, size, false, settings)) {\n    const customExercise = settings?.exercises?.[type.id];\n    return size === \"large\"\n      ? (customExercise?.largeImageUrl ?? customExercise?.smallImageUrl)\n      : customExercise?.smallImageUrl;\n  } else {\n    return undefined;\n  }\n}\n","import {\n  Exercise_getIsUnilateral,\n  Exercise_getVolumeMultiplier,\n  Exercise_onerm,\n  Exercise_toKey,\n  Exercise_get,\n  Exercise_targetMusclesGroups,\n  Exercise_synergistMusclesGroups,\n  Exercise_synergistMusclesGroupMultipliers,\n  Exercise_eq,\n  Exercise_fullName,\n  Exercise_targetMuscles,\n  Exercise_synergistMuscles,\n} from \"./exercise\";\nimport { Progress_getEntryId, Progress_isCurrent, Progress_lbProgress } from \"./progress\";\nimport { CollectionUtils_sort, CollectionUtils_sortByExpr } from \"../utils/collection\";\n\nimport {\n  Weight_compare,\n  Weight_build,\n  Weight_getOneRepMax,\n  Weight_gt,\n  Weight_lt,\n  Weight_gte,\n  Weight_add,\n  Weight_eq,\n  Weight_multiply,\n} from \"./weight\";\nimport {\n  IHistoryEntry,\n  IHistoryEntryProgressSnapshot,\n  IHistoryRecord,\n  ISet,\n  IExerciseType,\n  IUnit,\n  IWeight,\n  IPercentage,\n  ISettings,\n  IScreenMuscle,\n  IIntervals,\n  IStorage,\n  IStats,\n  IProgramState,\n} from \"../types\";\nimport { Collector, ICollectorFn } from \"../utils/collector\";\nimport {\n  Reps_avgUnilateralCompletedReps,\n  Reps_volume,\n  Reps_isStarted,\n  Reps_setVolume,\n  Reps_isFinishedSet,\n} from \"./set\";\nimport { ProgramExercise_isUsingVariable } from \"./programExercise\";\nimport { IState, updateState } from \"./state\";\nimport { lb, lbu } from \"lens-shmens\";\nimport { ObjectUtils_keys, ObjectUtils_clone, ObjectUtils_isNotEmpty } from \"../utils/object\";\nimport { IDispatch } from \"../ducks/types\";\nimport { NativeWorkoutBridge_pauseWorkout, NativeWorkoutBridge_resumeWorkout } from \"../utils/nativeWorkoutBridge\";\nimport memoize from \"micro-memoize\";\nimport { DateUtils_firstDayOfWeekTimestamp, DateUtils_formatYYYYMMDD } from \"../utils/date\";\nimport {\n  IEvaluatedProgram,\n  Program_getProgramExerciseForKeyAndDay,\n  Program_computeProgressStateChanges,\n} from \"./program\";\nimport {\n  PlannerProgramExercise_getState,\n  PlannerProgramExercise_currentDescription,\n} from \"../pages/planner/models/plannerProgramExercise\";\nimport { IPlannerProgramExercise } from \"../pages/planner/models/types\";\nimport { Muscle_getAvailableMuscleGroups } from \"./muscle\";\n\nexport interface IHistoricalEntries {\n  last: { entry: IHistoryEntry; time: number };\n  max: { entry: IHistoryEntry; time: number };\n}\n\nexport interface IHistoryRecordAndEntry {\n  record: IHistoryRecord;\n  entry: IHistoryEntry;\n}\n\n// history id -> exercise key -> personal records\nexport type IPersonalRecords = Partial<Record<string, Partial<Record<string, IHistoryEntryPersonalRecords>>>>;\n\nexport interface IHistoryEntryPersonalRecords {\n  maxWeightSet?: ISet;\n  prevMaxWeightSet?: ISet;\n  max1RMSet?: ISet;\n  prevMax1RMSet?: ISet;\n}\n\nexport function History_generateId(timestamp: number): number {\n  return timestamp + Math.floor(Math.random() * 1000);\n}\n\nexport function History_deleteRecords(storage: IStorage, ids: number[]): IStorage {\n  const idSet = new Set(ids);\n  return { ...storage, history: storage.history.filter((h) => !idSet.has(h.id)) };\n}\n\nexport function History_createCustomEntry(exerciseType: IExerciseType, index: number): IHistoryEntry {\n  return {\n    vtype: \"history_entry\",\n    id: Progress_getEntryId(exerciseType),\n    index,\n    exercise: exerciseType,\n    sets: [],\n    warmupSets: [],\n  };\n}\n\nexport function History_finishProgramDay(\n  progress: IHistoryRecord,\n  settings: ISettings,\n  day: number,\n  program?: IEvaluatedProgram,\n  stats?: IStats,\n  forceEndTime: number = Date.now()\n): IHistoryRecord {\n  const { deletedProgramExercises, ui, ...historyRecord } = progress;\n  const updatedAt = forceEndTime;\n  const endTime = Progress_isCurrent(progress) ? forceEndTime : (progress.endTime ?? forceEndTime);\n  return {\n    ...historyRecord,\n    entries: historyRecord.entries.map((entry) => {\n      const originalUpdatePrints = entry.updatePrints;\n      const programExercise =\n        program && entry.programExerciseId\n          ? Program_getProgramExerciseForKeyAndDay(program, day, entry.programExerciseId)\n          : undefined;\n      if (Progress_isCurrent(progress)) {\n        const isUnilateral = Exercise_getIsUnilateral(entry.exercise, settings);\n        const { updatePrints, ...entryWithoutPrints } = entry;\n        entry = {\n          ...entryWithoutPrints,\n          sets: entry.sets.map((set) => {\n            return {\n              ...set,\n              completedReps: set.isCompleted ? set.completedReps : undefined,\n              completedRepsLeft: isUnilateral && set.isCompleted ? set.completedRepsLeft : undefined,\n              completedRpe: set.isCompleted ? set.completedRpe : undefined,\n              completedWeight: set.isCompleted ? set.completedWeight : undefined,\n            };\n          }),\n        };\n        if (programExercise != null) {\n          const state = PlannerProgramExercise_getState(programExercise);\n          const useRm1 = ProgramExercise_isUsingVariable(programExercise, \"rm1\");\n          const descriptionSnapshot = PlannerProgramExercise_currentDescription(programExercise);\n          const progressSnapshot = History_buildProgressSnapshot(\n            entry,\n            settings,\n            programExercise,\n            program,\n            stats,\n            progress.userPromptedStateVars?.[entry.programExerciseId ?? \"\"],\n            originalUpdatePrints\n          );\n          entry = {\n            ...entry,\n            state: { ...state },\n            vars: useRm1 ? { rm1: Exercise_onerm(programExercise.exerciseType, settings) } : {},\n            ...(descriptionSnapshot != null ? { descriptionSnapshot } : {}),\n            ...(progressSnapshot != null ? { progressSnapshot } : {}),\n          };\n        }\n      }\n      return entry;\n    }),\n    vtype: \"history_record\",\n    id: Progress_isCurrent(progress) ? progress.startTime : progress.id,\n    updatedAt: updatedAt,\n    timerSince: undefined,\n    timerMode: undefined,\n    intervals: History_pauseWorkout(progress.intervals),\n    ...(Progress_isCurrent(progress) ? { endTime } : {}),\n  };\n}\n\nfunction History_buildProgressSnapshot(\n  entry: IHistoryEntry,\n  settings: ISettings,\n  programExercise: IPlannerProgramExercise,\n  program?: IEvaluatedProgram,\n  stats?: IStats,\n  userPromptedStateVars?: IProgramState,\n  updatePrints?: (number | IWeight | IPercentage)[][]\n): IHistoryEntryProgressSnapshot | undefined {\n  const snapshot: IHistoryEntryProgressSnapshot = {};\n  if (program && stats) {\n    const changes = Program_computeProgressStateChanges(\n      entry,\n      programExercise.dayData,\n      settings,\n      programExercise,\n      program,\n      stats,\n      userPromptedStateVars\n    );\n    if (changes) {\n      const diffState = History_compactDiff(changes.diffState);\n      const diffVars = History_compactDiff(changes.diffVars);\n      if (ObjectUtils_isNotEmpty(diffState)) {\n        snapshot.diffState = diffState;\n      }\n      if (ObjectUtils_isNotEmpty(diffVars)) {\n        snapshot.diffVars = diffVars;\n      }\n      if (changes.prints.length > 0) {\n        snapshot.prints = changes.prints;\n      }\n    }\n  }\n  if (updatePrints && updatePrints.length > 0) {\n    snapshot.updatePrints = updatePrints;\n  }\n  return ObjectUtils_isNotEmpty(snapshot) ? snapshot : undefined;\n}\n\nfunction History_compactDiff(diff: Record<string, string | undefined>): Record<string, string> {\n  return ObjectUtils_keys(diff).reduce<Record<string, string>>((memo, key) => {\n    const value = diff[key];\n    if (value != null) {\n      memo[key] = value;\n    }\n    return memo;\n  }, {});\n}\n\nexport function History_getMaxWeightSetFromEntry(entry: IHistoryEntry): ISet | undefined {\n  return History_getMaxWeightSet(entry.sets);\n}\n\nexport function History_getMax1RMSetFromEntry(entry: IHistoryEntry): ISet | undefined {\n  return History_getMax1RMSet(entry.sets);\n}\n\nexport function History_getMaxWeightSet(sets: ISet[]): ISet | undefined {\n  return CollectionUtils_sort(\n    sets.filter((s) => (s.completedReps || 0) > 0),\n    (a, b) => {\n      const weightDiff = Weight_compare(\n        b.completedWeight ?? b.weight ?? Weight_build(0, \"lb\"),\n        a.completedWeight ?? a.weight ?? Weight_build(0, \"lb\")\n      );\n      if (weightDiff === 0 && a.completedReps && b.completedReps) {\n        return b.completedReps - a.completedReps;\n      }\n      return weightDiff;\n    }\n  )[0];\n}\n\nexport function History_getMax1RMSet(sets: ISet[]): ISet | undefined {\n  return CollectionUtils_sort(\n    sets.filter((s) => (s.completedReps || 0) > 0),\n    (a, b) => {\n      const weightDiff = Weight_compare(\n        Weight_getOneRepMax(\n          b.completedWeight ?? b.weight ?? Weight_build(0, \"lb\"),\n          Reps_avgUnilateralCompletedReps(b) || 0,\n          b.completedRpe ?? b.rpe ?? 10\n        ),\n        Weight_getOneRepMax(\n          a.completedWeight ?? a.weight ?? Weight_build(0, \"lb\"),\n          Reps_avgUnilateralCompletedReps(a) || 0,\n          a.completedRpe ?? a.rpe ?? 10\n        )\n      );\n      if (weightDiff === 0 && a.completedReps && b.completedReps) {\n        return b.completedReps - a.completedReps;\n      }\n      return weightDiff;\n    }\n  )[0];\n}\n\nexport function History_findAllPersonalRecords(\n  record: IHistoryRecord,\n  history: IHistoryRecord[]\n): Map<IExerciseType, ISet> {\n  const prs: Map<IExerciseType, ISet> = new Map();\n  for (const entry of record.entries) {\n    const set = History_findPersonalRecord(record.id, entry, history);\n    if (set != null) {\n      prs.set(entry.exercise, set);\n    }\n  }\n  return prs;\n}\n\nexport function History_findAllUsedExerciseTypes(history: IHistoryRecord[]): Partial<Record<string, IExerciseType>> {\n  const set: Partial<Record<string, IExerciseType>> = {};\n  for (const record of history) {\n    for (const entry of record.entries) {\n      set[Exercise_toKey(entry.exercise)] = entry.exercise;\n    }\n  }\n  return set;\n}\n\nexport function History_collectMinAndMaxTime(): ICollectorFn<IHistoryRecord, { minTime: number; maxTime: number }> {\n  return {\n    fn: (acc, hr) => {\n      if (acc.maxTime < hr.startTime) {\n        acc.maxTime = hr.startTime;\n      }\n      if (acc.minTime > hr.startTime) {\n        acc.minTime = hr.startTime;\n      }\n      return acc;\n    },\n    initial: { maxTime: 0, minTime: Infinity },\n  };\n}\n\nexport function History_collectProgramChangeTimes(): ICollectorFn<\n  IHistoryRecord,\n  {\n    currentProgram?: string;\n    changeProgramTimes: [number, string][];\n  }\n> {\n  return {\n    fn: (acc, hr) => {\n      if (!acc.currentProgram || acc.currentProgram !== hr.programName) {\n        acc.currentProgram = hr.programName;\n        acc.changeProgramTimes.push([new Date(Date.parse(hr.date)).getTime() / 1000, acc.currentProgram]);\n      }\n      return acc;\n    },\n    initial: { changeProgramTimes: [] },\n  };\n}\n\nexport function History_collectMuscleGroups(\n  settings: ISettings\n): ICollectorFn<IHistoryRecord, Record<IScreenMuscle | \"total\", [number[], number[], number[]]>> {\n  return {\n    fn: (acc, hr) => {\n      for (const entry of hr.entries) {\n        const exercise = Exercise_get(entry.exercise, settings.exercises);\n        const targetMuscleGroups = Exercise_targetMusclesGroups(exercise, settings);\n        const synergistMuscleGroups = Exercise_synergistMusclesGroups(exercise, settings);\n        const synergistMuscleGroupToMultiplier = Exercise_synergistMusclesGroupMultipliers(exercise, settings);\n        for (const muscleGroup of [...Muscle_getAvailableMuscleGroups(settings), \"total\"] as const) {\n          let multiplier = 0;\n          if (muscleGroup === \"total\") {\n            multiplier = 1;\n          } else if (targetMuscleGroups.indexOf(muscleGroup) !== -1) {\n            multiplier = 1;\n          } else if (synergistMuscleGroups.indexOf(muscleGroup) !== -1) {\n            multiplier = synergistMuscleGroupToMultiplier[muscleGroup] ?? settings.planner.synergistMultiplier;\n          }\n          if (multiplier === 0) {\n            continue;\n          }\n          acc[muscleGroup] = acc[muscleGroup] || [[], [], []];\n          const muscleGroupAcc = acc[muscleGroup];\n          const date = new Date(hr.startTime);\n          const lastTs = muscleGroupAcc[0][muscleGroupAcc[0]?.length - 1];\n          const finishedSets = entry.sets.filter((s) => (s.completedReps || 0) > 0);\n          if (lastTs == null) {\n            muscleGroupAcc[0].push(Math.round(date.getTime() / 1000));\n            muscleGroupAcc[1].push(0);\n            muscleGroupAcc[2].push(0);\n          } else {\n            const lastDate = new Date(lastTs * 1000);\n            const beginningOfWeekForDate = DateUtils_firstDayOfWeekTimestamp(date, settings.startWeekFromMonday);\n            const beginningOfWeekForLastDate = DateUtils_firstDayOfWeekTimestamp(\n              lastDate,\n              settings.startWeekFromMonday\n            );\n            if (beginningOfWeekForDate !== beginningOfWeekForLastDate) {\n              muscleGroupAcc[0].push(Math.round(date.getTime() / 1000));\n              muscleGroupAcc[1].push(0);\n              muscleGroupAcc[2].push(0);\n            }\n          }\n          muscleGroupAcc[1][muscleGroupAcc[1].length - 1] +=\n            Reps_volume(finishedSets, settings.units).value *\n            multiplier *\n            Exercise_getVolumeMultiplier(entry.exercise, settings);\n          muscleGroupAcc[2][muscleGroupAcc[2].length - 1] += finishedSets.length * multiplier;\n        }\n      }\n      return acc;\n    },\n    initial: {},\n  };\n}\n\nexport function History_collectAllUsedExerciseTypes(): ICollectorFn<\n  IHistoryRecord,\n  Partial<Record<string, IExerciseType>>\n> {\n  return {\n    fn: (acc, hr) => {\n      for (const entry of hr.entries) {\n        acc[Exercise_toKey(entry.exercise)] = entry.exercise;\n      }\n      return acc;\n    },\n    initial: {},\n  };\n}\n\nexport function History_collectAllHistoryRecordsOfExerciseType(\n  exerciseType: IExerciseType\n): ICollectorFn<IHistoryRecord, IHistoryRecord[]> {\n  return {\n    fn: (acc, hr) => {\n      const hasExercise = hr.entries.some((e) => Exercise_eq(e.exercise, exerciseType));\n      if (hasExercise) {\n        acc.push(hr);\n      }\n      return acc;\n    },\n    initial: [],\n  };\n}\n\nexport function History_collectLastEntry(\n  startTime: number,\n  exerciseType: IExerciseType\n): ICollectorFn<\n  IHistoryRecord,\n  { lastHistoryEntry?: IHistoryEntry; lastHistoryRecord?: IHistoryRecord; timestamp?: number }\n> {\n  return {\n    fn: (acc, hr) => {\n      const time = hr.endTime ?? hr.startTime;\n      if (time < startTime && (acc.timestamp == null || time > acc.timestamp)) {\n        const entry = hr.entries.find((e) => Exercise_eq(e.exercise, exerciseType) && Reps_isStarted(e.sets));\n        if (entry) {\n          acc = { lastHistoryEntry: entry, lastHistoryRecord: hr, timestamp: time };\n        }\n      }\n      return acc;\n    },\n    initial: {},\n  };\n}\n\nexport function History_collectLastNote(\n  startTime: number,\n  exerciseType: IExerciseType\n): ICollectorFn<IHistoryRecord, { lastNote?: string; timestamp?: number }> {\n  return {\n    fn: (acc, hr) => {\n      const time = hr.endTime ?? hr.startTime;\n      const twoMonthsAgo = startTime - 60 * 24 * 60 * 60 * 1000;\n      if (time < startTime && time > twoMonthsAgo && (acc.timestamp == null || time > acc.timestamp)) {\n        const entry = hr.entries.find((e) => Exercise_eq(e.exercise, exerciseType));\n        if (entry && entry.notes) {\n          acc = { lastNote: entry.notes, timestamp: time };\n        }\n      }\n      return acc;\n    },\n    initial: {},\n  };\n}\n\nexport interface IPrevExerciseData {\n  lastEntry?: IHistoryEntry;\n  lastEntryTimestamp?: number;\n  lastNote?: string;\n  lastNoteTimestamp?: number;\n  count: number;\n}\n\n// One pass over the whole history producing, per exercise key, the data each workout-exercise card\n// needs for its first paint: the previous started entry (for \"last time\" set values), the recent\n// note, and how many past records contain the exercise. The workout screen builds this once and\n// shares it across all exercise tabs — replacing the per-card O(total history) scans (collectLastEntry\n// + collectLastNote + collectAllHistoryRecordsOfExerciseType) that were the dominant source of\n// mount-frame jank for users with large histories. Mirrors the semantics of those three collectors.\nexport function History_buildPrevExerciseData(\n  history: IHistoryRecord[],\n  beforeTime: number\n): Record<string, IPrevExerciseData> {\n  const twoMonthsAgo = beforeTime - 60 * 24 * 60 * 60 * 1000;\n  const result: Record<string, IPrevExerciseData> = {};\n  for (const hr of history) {\n    const time = hr.endTime ?? hr.startTime;\n    const isBefore = time < beforeTime;\n    const seenKeys = new Set<string>();\n    for (const entry of hr.entries) {\n      const key = Exercise_toKey(entry.exercise);\n      let data = result[key];\n      if (data == null) {\n        data = { count: 0 };\n        result[key] = data;\n      }\n      if (!seenKeys.has(key)) {\n        seenKeys.add(key);\n        data.count += 1;\n      }\n      if (\n        isBefore &&\n        Reps_isStarted(entry.sets) &&\n        (data.lastEntryTimestamp == null || time > data.lastEntryTimestamp)\n      ) {\n        data.lastEntry = entry;\n        data.lastEntryTimestamp = time;\n      }\n      if (\n        isBefore &&\n        entry.notes &&\n        time > twoMonthsAgo &&\n        (data.lastNoteTimestamp == null || time > data.lastNoteTimestamp)\n      ) {\n        data.lastNote = entry.notes;\n        data.lastNoteTimestamp = time;\n      }\n    }\n  }\n  return result;\n}\n\n// Same \"last started entry for this exercise\" question History_buildPrevExerciseData answers, but for\n// a single exercise the user just picked, so it doesn't pay for a map over every exercise they've ever\n// done. `excludeRecordId` skips the record being edited — when you edit a past workout, `progress` is\n// itself a history record, and without this it would seed its own weights from itself.\nexport function History_findLastEntryForExerciseType(\n  history: IHistoryRecord[],\n  exerciseType: IExerciseType,\n  excludeRecordId?: number\n): IHistoryEntry | undefined {\n  let result: IHistoryEntry | undefined;\n  let resultTime: number | undefined;\n  for (const hr of history) {\n    if (hr.id === excludeRecordId) {\n      continue;\n    }\n    const time = hr.endTime ?? hr.startTime;\n    if (resultTime != null && time <= resultTime) {\n      continue;\n    }\n    const entry = hr.entries.find((e) => Exercise_eq(e.exercise, exerciseType) && Reps_isStarted(e.sets));\n    if (entry != null) {\n      result = entry;\n      resultTime = time;\n    }\n  }\n  return result;\n}\n\nexport function History_collectWeightPersonalRecord(\n  exerciseType: IExerciseType,\n  unit: IUnit\n): ICollectorFn<IHistoryRecord, { maxWeight: IWeight; maxWeightHistoryRecord?: IHistoryRecord }> {\n  return {\n    fn: (acc, hr) => {\n      const entries = hr.entries.filter((e) => Exercise_eq(e.exercise, exerciseType));\n      const maxSet = History_getMaxWeightSet(entries.flatMap((e) => e.sets));\n      if (maxSet != null) {\n        const weight = maxSet.completedWeight ?? maxSet.weight ?? Weight_build(0, unit);\n        if (Weight_gt(weight, acc.maxWeight)) {\n          acc = { maxWeight: weight, maxWeightHistoryRecord: hr };\n        }\n      }\n      return acc;\n    },\n    initial: { maxWeight: Weight_build(0, unit) },\n  };\n}\n\nexport function History_collect1RMPersonalRecord(\n  exerciseType: IExerciseType,\n  unit: IUnit\n): ICollectorFn<IHistoryRecord, { max1RM: IWeight; max1RMHistoryRecord?: IHistoryRecord; max1RMSet?: ISet }> {\n  return {\n    fn: (acc, hr) => {\n      const entries = hr.entries.filter((e) => Exercise_eq(e.exercise, exerciseType));\n      const allSets = entries.flatMap((e) => e.sets);\n      const all1RMs = allSets.map<[ISet, IWeight]>((s) => [\n        s,\n        Weight_getOneRepMax(s.completedWeight ?? s.weight ?? Weight_build(0, unit), s.completedReps || 0),\n      ]);\n      const max1RM = CollectionUtils_sort(all1RMs, (a, b) => Weight_compare(b[1], a[1]))[0];\n      if (max1RM != null && Weight_gt(max1RM[1], acc.max1RM)) {\n        acc = { max1RM: max1RM[1], max1RMHistoryRecord: hr, max1RMSet: max1RM[0] };\n      }\n      return acc;\n    },\n    initial: { max1RM: Weight_build(0, unit) },\n  };\n}\n\nexport function History_findAllMaxSetsPerId(history: IHistoryRecord[]): Partial<Record<string, ISet>> {\n  const maxSets: Partial<Record<string, ISet>> = {};\n  for (const r of history) {\n    for (const e of r.entries) {\n      const entryMaxSet = History_getMaxWeightSetFromEntry(e);\n      const key = Exercise_toKey(e.exercise);\n      if (entryMaxSet != null && (entryMaxSet.completedReps || 0) > 0) {\n        if (maxSets[key] == null || Weight_lt(maxSets[key].weight || 0, entryMaxSet.weight ?? Weight_build(0, \"lb\"))) {\n          maxSets[key] = entryMaxSet;\n        }\n      }\n    }\n  }\n  return maxSets;\n}\n\nexport function History_getHistoryRecordsForTimerange(\n  history: IHistoryRecord[],\n  date: number,\n  type: \"month\" | \"week\" | \"day\",\n  startWeekFromMonday?: boolean\n): IHistoryRecord[] {\n  // For given date, get the start and end of the timerange, and return history records that fall within that range\n  const start = new Date(date);\n  const end = new Date(date);\n  if (type === \"month\") {\n    start.setDate(1);\n    end.setMonth(end.getMonth() + 1);\n    end.setDate(0);\n  } else if (type === \"week\") {\n    start.setDate(start.getDate() - start.getDay() + (startWeekFromMonday ? 1 : 0));\n    end.setDate(start.getDate() + 6);\n  } else if (type === \"day\") {\n    start.setHours(0, 0, 0, 0);\n  }\n  end.setHours(23, 59, 59, 999);\n  return history.filter((hr) => {\n    if (Progress_isCurrent(hr)) {\n      return false;\n    }\n    const recordDate = Date.parse(hr.date);\n    const startTime = new Date(recordDate);\n    return startTime >= start && startTime < end;\n  });\n}\n\nexport function History_getNumberOfPersonalRecords(history: IHistoryRecord[], prs: IPersonalRecords): number {\n  return history.reduce((memo, r) => {\n    return memo + ObjectUtils_keys(prs[r.id] || {})?.length;\n  }, 0);\n}\n\nexport function History_findMaxSet(exerciseType: IExerciseType, history: IHistoryRecord[]): ISet | undefined {\n  let maxSet: ISet | undefined = undefined;\n  for (const r of history) {\n    for (const e of r.entries) {\n      if (Exercise_eq(e.exercise, exerciseType)) {\n        const entryMaxSet = History_getMaxWeightSetFromEntry(e);\n        if (entryMaxSet != null && (entryMaxSet.completedReps || 0) > 0) {\n          if (\n            maxSet == null ||\n            Weight_gt(entryMaxSet.weight ?? Weight_build(0, \"lb\"), maxSet.weight ?? Weight_build(0, \"lb\"))\n          ) {\n            maxSet = entryMaxSet;\n          }\n        }\n      }\n    }\n  }\n  return maxSet;\n}\n\nexport function History_findPersonalRecord(\n  id: number,\n  entry: IHistoryEntry,\n  history: IHistoryRecord[]\n): ISet | undefined {\n  let isMax: boolean | undefined;\n  const entryMaxSet = History_getMaxWeightSetFromEntry(entry);\n  if (entryMaxSet != null && (entryMaxSet.completedReps || 0) > 0) {\n    for (const r of history) {\n      if (r.id < id) {\n        for (const e of r.entries) {\n          if (e.exercise.id === entry.exercise.id && e.exercise.equipment === entry.exercise.equipment) {\n            if (isMax == null) {\n              isMax = true;\n            }\n            const maxSet = History_getMaxWeightSetFromEntry(e);\n            if (\n              maxSet != null &&\n              Weight_gte(maxSet.weight ?? Weight_build(0, \"lb\"), entryMaxSet.weight ?? Weight_build(0, \"lb\"))\n            ) {\n              isMax = false;\n            }\n          }\n        }\n      }\n    }\n  } else {\n    isMax = false;\n  }\n  if (isMax == null || isMax === true) {\n    return entryMaxSet;\n  } else {\n    return undefined;\n  }\n}\n\nexport function History_totalRecordWeight(record: IHistoryRecord, settings: ISettings): IWeight {\n  return record.entries.reduce(\n    (memo, e) => Weight_add(memo, History_totalEntryWeight(e, settings)),\n    Weight_build(0, settings.units)\n  );\n}\n\nexport function History_totalRecordReps(record: IHistoryRecord): number {\n  return record.entries.reduce((memo, e) => memo + History_totalEntryReps(e), 0);\n}\n\nexport function History_totalRecordSets(record: IHistoryRecord): number {\n  return record.entries.reduce((memo, e) => memo + History_totalEntrySets(e), 0);\n}\n\nexport function History_totalEntryWeight(entry: IHistoryEntry, settings: ISettings): IWeight {\n  const unit = settings.units;\n  const volume = entry.sets\n    .filter((s) => (s.completedReps || 0) > 0)\n    .reduce((memo, set) => Weight_add(memo, Reps_setVolume(set, unit)), Weight_build(0, unit));\n  return Weight_multiply(volume, Exercise_getVolumeMultiplier(entry.exercise, settings));\n}\n\nexport function History_totalEntryReps(entry: IHistoryEntry): number {\n  return entry.sets.reduce((memo, set) => memo + (set.completedReps || 0), 0);\n}\n\nexport function History_totalEntrySets(entry: IHistoryEntry): number {\n  return History_getFinishedSets(entry).length;\n}\n\nexport function History_getStartedEntries(record: IHistoryRecord): IHistoryEntry[] {\n  return record.entries.filter((e) => e.sets.filter((s) => (s.completedReps || 0) > 0).length > 0);\n}\n\nexport function History_getFinishedSets(entry: IHistoryEntry): ISet[] {\n  return entry.sets.filter((s) => Reps_isFinishedSet(s));\n}\n\nexport function History_getHistoricalSameDay(\n  history: IHistoryRecord[],\n  progress: IHistoryRecord,\n  currentEntry: IHistoryEntry\n): IHistoryRecordAndEntry | undefined {\n  for (const record of history) {\n    if (record.day === progress.day) {\n      for (const entry of record.entries) {\n        if (\n          Exercise_eq(currentEntry.exercise, entry.exercise) &&\n          entry.sets.length > 0 &&\n          entry.sets.some((s) => (s.completedReps || 0) > 0)\n        ) {\n          return { record, entry };\n        }\n      }\n    }\n  }\n  return undefined;\n}\n\nexport function History_getHistoricalLastDay(\n  history: IHistoryRecord[],\n  currentEntry: IHistoryEntry\n): IHistoryRecordAndEntry | undefined {\n  for (const record of history) {\n    for (const entry of record.entries) {\n      if (\n        Exercise_eq(currentEntry.exercise, entry.exercise) &&\n        entry.sets.length > 0 &&\n        entry.sets.some((s) => (s.completedReps || 0) > 0)\n      ) {\n        return { record, entry };\n      }\n    }\n  }\n  return undefined;\n}\n\nexport function History_calories(historyRecord: IHistoryRecord): number {\n  const timeMs = History_workoutTime(historyRecord);\n  const minutes = Math.floor(timeMs / 60000);\n  return minutes * 6;\n}\n\nexport function History_getHistoricalAmrapSets(\n  history: IHistoryRecord[],\n  currentEntry: IHistoryEntry,\n  nextSet?: ISet\n): { last: [ISet, number]; max: [ISet, number] } | undefined {\n  if (!nextSet?.isAmrap) {\n    return undefined;\n  }\n  let last: [ISet, number] | undefined;\n  let max: [ISet, number] | undefined;\n  for (const record of history) {\n    for (const entry of record.entries) {\n      if (Exercise_eq(currentEntry.exercise, entry.exercise)) {\n        for (const set of entry.sets) {\n          if (\n            set.isAmrap &&\n            set.reps === nextSet.reps &&\n            Weight_eq(set.weight ?? Weight_build(0, \"lb\"), nextSet.weight ?? Weight_build(0, \"lb\"))\n          ) {\n            if (last == null) {\n              last = [set, record.startTime];\n            }\n            if (max == null || (set.completedReps || 0) > (max[0].completedReps || 0)) {\n              max = [set, record.startTime];\n            }\n          }\n        }\n      }\n    }\n  }\n  return last != null && max != null ? { last, max } : undefined;\n}\n\nexport function History_exportAsCSV(history: IHistoryRecord[], settings: ISettings): (string | number | null)[][] {\n  const lines: (string | number | null)[][] = [\n    [\n      \"Workout DateTime\",\n      \"Program\",\n      \"Day Name\",\n      \"Exercise\",\n      \"Is Warmup Set?\",\n      \"Required Reps\",\n      \"Completed Reps\",\n      \"Is AMRAP?\",\n      \"Required RPE\",\n      \"Completed RPE\",\n      \"Log RPE?\",\n      \"Required Weight Value\",\n      \"Required Weight Unit\",\n      \"Completed Weight Value\",\n      \"Completed Weight Unit\",\n      \"Ask Weight?\",\n      \"Completed Reps Time\",\n      \"Target Muscles\",\n      \"Synergist Muscles\",\n      \"Notes\",\n    ],\n  ];\n\n  for (const historyRecord of history) {\n    for (const entry of historyRecord.entries) {\n      const exercise = Exercise_get(entry.exercise, settings.exercises);\n      for (const warmupSet of entry.warmupSets) {\n        lines.push([\n          historyRecord.date,\n          historyRecord.programName,\n          historyRecord.dayName,\n          Exercise_fullName(exercise, settings),\n          1,\n          warmupSet.reps ?? null,\n          warmupSet.completedReps ?? null,\n          warmupSet.isAmrap ? 1 : 0,\n          warmupSet.rpe ?? null,\n          warmupSet.completedRpe ?? null,\n          warmupSet.logRpe ? 1 : 0,\n          warmupSet.weight?.value ?? null,\n          warmupSet.weight?.unit ?? null,\n          warmupSet.completedWeight?.value ?? null,\n          warmupSet.completedWeight?.unit ?? null,\n          warmupSet.askWeight ? 1 : 0,\n          warmupSet.timestamp != null ? new Date(warmupSet.timestamp || 0).toISOString() : null,\n          Exercise_targetMuscles(exercise, settings).join(\",\"),\n          Exercise_synergistMuscles(exercise, settings).join(\",\"),\n          entry.notes ?? \"\",\n        ]);\n      }\n      for (const set of entry.sets) {\n        lines.push([\n          historyRecord.date,\n          historyRecord.programName,\n          historyRecord.dayName,\n          Exercise_fullName(exercise, settings),\n          0,\n          set.reps ?? null,\n          set.completedReps ?? null,\n          set.isAmrap ? 1 : 0,\n          set.rpe ?? null,\n          set.completedRpe ?? null,\n          set.logRpe ? 1 : 0,\n          set.weight?.value ?? null,\n          set.weight?.unit ?? null,\n          set.completedWeight?.value ?? null,\n          set.completedWeight?.unit ?? null,\n          set.askWeight ? 1 : 0,\n          set.timestamp != null ? new Date(set.timestamp || 0).toISOString() : null,\n          Exercise_targetMuscles(exercise, settings).join(\",\"),\n          Exercise_synergistMuscles(exercise, settings).join(\",\"),\n          entry.notes ?? \"\",\n        ]);\n      }\n    }\n  }\n\n  return lines;\n}\n\nexport function History_pauseWorkoutAction(dispatch: IDispatch): void {\n  const lensGetters = { progress: lb<IState>().p(\"storage\").pi(\"progress\").get() };\n  NativeWorkoutBridge_pauseWorkout();\n  updateState(\n    dispatch,\n    [\n      lbu<IState, typeof lensGetters>(lensGetters)\n        .p(\"storage\")\n        .pi(\"progress\")\n        .i(0)\n        .p(\"intervals\")\n        .recordModify((intervals, getters) => History_pauseWorkout(getters.progress?.[0].intervals)),\n    ],\n    \"Pause workout\"\n  );\n}\n\nexport function History_pauseWorkout(intervals?: IIntervals): IIntervals | undefined {\n  if (intervals && !History_isPaused(intervals)) {\n    const newIntervals = intervals ? ObjectUtils_clone(intervals) : [];\n    let lastInterval = newIntervals[newIntervals.length - 1];\n    if (lastInterval == null) {\n      lastInterval = [Date.now(), undefined];\n      newIntervals.push(lastInterval);\n    }\n    lastInterval[1] = Date.now();\n    return newIntervals;\n  } else {\n    return intervals;\n  }\n}\n\nexport function History_resumeWorkoutAction(\n  dispatch: IDispatch,\n  isPlayground: boolean,\n  settings: ISettings,\n  hasSubscription: boolean\n): void {\n  updateState(\n    dispatch,\n    [\n      Progress_lbProgress().recordModify((progress) => {\n        const intervals = History_resumeWorkout(progress, isPlayground, settings.timers.reminder, hasSubscription);\n        return { ...progress, intervals };\n      }),\n    ],\n    \"Resume workout\"\n  );\n}\n\nexport function History_isPaused(intervals?: IIntervals): boolean {\n  return intervals ? intervals.length === 0 || intervals[intervals.length - 1][1] != null : false;\n}\n\nexport function History_resumeWorkout(\n  historyRecord: IHistoryRecord,\n  isPlayground: boolean,\n  reminder: number | undefined,\n  hasSubscription: boolean\n): IIntervals | undefined {\n  const intervals = historyRecord.intervals;\n  if (History_isPaused(intervals)) {\n    const isStart = !intervals || intervals.length === 0;\n    if (!isPlayground && Progress_isCurrent(historyRecord)) {\n      NativeWorkoutBridge_resumeWorkout({\n        reminder: reminder || 0,\n        isStart,\n        hasSubscription,\n      });\n    }\n    const newIntervals = intervals ? ObjectUtils_clone(intervals) : [];\n    newIntervals.push([Date.now(), undefined]);\n    return newIntervals;\n  } else {\n    return intervals;\n  }\n}\n\nexport function History_workoutTime(historyRecord: IHistoryRecord): number {\n  const intervals = historyRecord.intervals || [[historyRecord.startTime, historyRecord.endTime || Date.now()]];\n  return intervals.reduce((memo, interval) => {\n    return memo + ((interval[1] || Date.now()) - interval[0]);\n  }, 0);\n}\n\nexport const History_getDateToHistory = memoize(\n  (history: IHistoryRecord[]): Partial<Record<string, IHistoryRecord>> => {\n    return history.reduce<Partial<Record<string, IHistoryRecord>>>((memo, hr) => {\n      memo[DateUtils_formatYYYYMMDD(hr.date)] = hr;\n      return memo;\n    }, {});\n  },\n  { maxSize: 10 }\n);\n\nexport const History_getPersonalRecords = memoize(\n  (history: IHistoryRecord[]): IPersonalRecords => {\n    const result: IPersonalRecords = {};\n    const sortedHistory = CollectionUtils_sortByExpr(history, (hr) => hr.endTime ?? hr.startTime);\n    const max1RMSets: Partial<Record<string, ISet | undefined>> = {};\n    const maxWeightSets: Partial<Record<string, ISet | undefined>> = {};\n    for (const record of sortedHistory) {\n      for (const entry of record.entries) {\n        const key = Exercise_toKey(entry.exercise);\n\n        const thisMaxWeightSet = History_getMaxWeightSetFromEntry(entry);\n        const thisMaxWeight = thisMaxWeightSet\n          ? (thisMaxWeightSet.completedWeight ?? thisMaxWeightSet.weight)\n          : undefined;\n        const lastMaxWeight = maxWeightSets[key]?.completedWeight ?? maxWeightSets[key]?.weight;\n        if (thisMaxWeight != null && (lastMaxWeight == null || Weight_gt(thisMaxWeight, lastMaxWeight))) {\n          const prevMaxWeightSet = maxWeightSets[key];\n          maxWeightSets[key] = thisMaxWeightSet;\n          result[record.id] = result[record.id] || {};\n          result[record.id]![key] = result[record.id]![key] || {};\n          result[record.id]![key]!.prevMaxWeightSet = prevMaxWeightSet;\n          result[record.id]![key]!.maxWeightSet = thisMaxWeightSet;\n        }\n\n        const thisMax1RMSet = History_getMax1RMSetFromEntry(entry);\n        const thisMax1RM = thisMax1RMSet\n          ? Weight_getOneRepMax(\n              thisMax1RMSet.completedWeight ?? thisMax1RMSet.weight ?? Weight_build(0, \"lb\"),\n              Reps_avgUnilateralCompletedReps(thisMax1RMSet) || 0,\n              thisMax1RMSet.completedRpe ?? thisMax1RMSet.rpe\n            )\n          : undefined;\n        const lastMax1RMSet = max1RMSets[key];\n        const lastMax1RM = lastMax1RMSet\n          ? Weight_getOneRepMax(\n              lastMax1RMSet.completedWeight ?? lastMax1RMSet.weight ?? Weight_build(0, \"lb\"),\n              lastMax1RMSet ? Reps_avgUnilateralCompletedReps(lastMax1RMSet) || 0 : 0,\n              lastMax1RMSet.completedRpe ?? lastMax1RMSet.rpe\n            )\n          : undefined;\n        if (thisMax1RM != null && (lastMax1RM == null || Weight_gt(thisMax1RM, lastMax1RM))) {\n          const prevMax1RMSet = max1RMSets[key];\n          max1RMSets[key] = thisMax1RMSet;\n          result[record.id] = result[record.id] || {};\n          result[record.id]![key] = result[record.id]![key] || {};\n          result[record.id]![key]!.prevMax1RMSet = prevMax1RMSet;\n          result[record.id]![key]!.max1RMSet = thisMax1RMSet;\n        }\n      }\n    }\n    return result;\n  },\n  { maxSize: 10 }\n);\n\nexport interface IGraphsAggregates {\n  sortedHistory: IHistoryRecord[];\n  muscleGroupsData: Record<IScreenMuscle | \"total\", [number[], number[], number[]]>;\n  programChangeTimes: { currentProgram?: string; changeProgramTimes: [number, string][] };\n}\n\n// Aggregates used by the Graphs screen. Memoized by history+settings refs (lens-shmens\n// gives us stable refs for unchanged subtrees), so this returns instantly across screen\n// mount/unmount cycles. Also called from App.native.tsx during idle time to warm the\n// cache so the first Graphs visit is fast.\nexport const History_getGraphsAggregates = memoize(\n  (history: IHistoryRecord[], settings: ISettings): IGraphsAggregates => {\n    const sortedHistory = CollectionUtils_sort(history, (a, b) => {\n      return new Date(Date.parse(a.date)).getTime() - new Date(Date.parse(b.date)).getTime();\n    });\n    const [muscleGroupsData, programChangeTimes] = Collector.build(sortedHistory)\n      .addFn(History_collectMuscleGroups(settings))\n      .addFn(History_collectProgramChangeTimes())\n      .run();\n    return { sortedHistory, muscleGroupsData, programChangeTimes };\n  },\n  { maxSize: 5 }\n);\n\nexport interface IHomeWeekData {\n  firstDayOfWeeks: number[];\n  firstDayOfWeekToHistoryRecord: Partial<Record<number, IHistoryRecord>>;\n  historyRecordDateToFirstDayOfWeek: Partial<Record<number, number>>;\n}\n\nfunction buildHomeWeekData(history: IHistoryRecord[], startWeekFromMonday: boolean): IHomeWeekData {\n  const firstDayOfWeeksSet: Set<number> = new Set();\n  const historyRecordDateToFirstDayOfWeek: Partial<Record<number, number>> = {};\n  const firstDayOfWeekToHistoryRecord: Partial<Record<number, IHistoryRecord>> = {};\n  for (const record of history) {\n    if (!Progress_isCurrent(record)) {\n      const firstDayOfWeek = DateUtils_firstDayOfWeekTimestamp(record.endTime ?? record.startTime, startWeekFromMonday);\n      if (firstDayOfWeekToHistoryRecord[firstDayOfWeek] == null) {\n        firstDayOfWeekToHistoryRecord[firstDayOfWeek] = record;\n      }\n      firstDayOfWeeksSet.add(firstDayOfWeek);\n      historyRecordDateToFirstDayOfWeek[record.id] = firstDayOfWeek;\n    }\n  }\n  if (firstDayOfWeeksSet.size === 0) {\n    const today = new Date();\n    const firstDayOfWeek = DateUtils_firstDayOfWeekTimestamp(today.getTime(), startWeekFromMonday);\n    firstDayOfWeeksSet.add(firstDayOfWeek);\n  }\n  return {\n    firstDayOfWeeks: CollectionUtils_sort(Array.from(firstDayOfWeeksSet)),\n    historyRecordDateToFirstDayOfWeek,\n    firstDayOfWeekToHistoryRecord,\n  };\n}\n\nexport interface IHomeAggregates {\n  sortedHistoryDesc: IHistoryRecord[];\n  weeksData: IHomeWeekData;\n  prs: IPersonalRecords;\n}\n\nexport const History_getHomeAggregates = memoize(\n  (history: IHistoryRecord[], startWeekFromMonday: boolean): IHomeAggregates => {\n    const sortedHistoryDesc = CollectionUtils_sort(history, (a, b) => {\n      return new Date(Date.parse(b.date)).getTime() - new Date(Date.parse(a.date)).getTime();\n    });\n    const weeksData = buildHomeWeekData(sortedHistoryDesc, startWeekFromMonday);\n    const prs = History_getPersonalRecords(history);\n    return { sortedHistoryDesc, weeksData, prs };\n  },\n  { maxSize: 3 }\n);\n","import { IAllCustomExercises, ICustomExercise, IHistoryRecord, IImportSession, IStorage } from \"../types\";\nimport { CollectionUtils_sortBy, CollectionUtils_uniqBy } from \"../utils/collection\";\nimport { UidFactory_generateUid } from \"../utils/generator\";\nimport { Exercise_deleteCustomExercise } from \"./exercise\";\nimport { History_deleteRecords } from \"./history\";\n\nconst maxImportSessions = 5;\n\nexport interface IAppliedImport {\n  history: IHistoryRecord[];\n  exercises: IAllCustomExercises;\n  importSessions: IImportSession[];\n}\n\nexport function ImportSession_apply(\n  storage: IStorage,\n  historyRecords: IHistoryRecord[],\n  customExercises: Record<string, ICustomExercise>,\n  source: IImportSession[\"source\"]\n): IAppliedImport {\n  const existingIds = new Set(storage.history.map((r) => r.id));\n  const history = CollectionUtils_sortBy(CollectionUtils_uniqBy(storage.history.concat(historyRecords), \"id\"), \"id\");\n  const addedHistoryIds = history.filter((r) => !existingIds.has(r.id)).map((r) => r.id);\n  const addedCustomExerciseIds = Object.keys(customExercises).filter((k) => storage.settings.exercises[k] == null);\n  // Only add custom exercises that don't already exist - an existing one with the same id may have\n  // been renamed/edited locally, and overwriting it would be silent and unrecoverable (undo can't\n  // restore it because it's excluded from the receipt as a pre-existing id).\n  const exercises = { ...storage.settings.exercises };\n  for (const id of addedCustomExerciseIds) {\n    exercises[id] = customExercises[id];\n  }\n  const session: IImportSession = {\n    vtype: \"import_session\",\n    id: UidFactory_generateUid(8),\n    timestamp: Date.now(),\n    source,\n    historyRecordIds: addedHistoryIds,\n    customExerciseIds: addedCustomExerciseIds,\n    workoutCount: addedHistoryIds.length,\n  };\n  return {\n    history,\n    exercises,\n    importSessions: [...(storage.importSessions ?? []), session].slice(-maxImportSessions),\n  };\n}\n\nexport function ImportSession_findEditedRecordIds(storage: IStorage, session: IImportSession): number[] {\n  const importedIds = new Set(session.historyRecordIds);\n  return storage.history\n    .filter((r) => importedIds.has(r.id) && r.updatedAt != null && r.updatedAt > session.timestamp)\n    .map((r) => r.id);\n}\n\nexport function ImportSession_undo(storage: IStorage, sessionId: string): IStorage | undefined {\n  const session = (storage.importSessions ?? []).find((s) => s.id === sessionId);\n  if (session == null) {\n    return undefined;\n  }\n  const undone = History_deleteRecords(storage, session.historyRecordIds);\n  let exercises = undone.settings.exercises;\n  for (const exerciseId of session.customExerciseIds) {\n    if (!isExerciseReferenced(undone, exerciseId)) {\n      exercises = Exercise_deleteCustomExercise(exercises, exerciseId);\n    }\n  }\n  return {\n    ...undone,\n    settings: { ...undone.settings, exercises },\n    importSessions: (undone.importSessions ?? []).filter((s) => s.id !== sessionId),\n  };\n}\n\nfunction isExerciseReferenced(storage: IStorage, exerciseId: string): boolean {\n  const exercise = storage.settings.exercises[exerciseId];\n  if (exercise == null) {\n    return false;\n  }\n  if (storage.history.concat(storage.progress).some((r) => r.entries.some((e) => e.exercise.id === exerciseId))) {\n    return true;\n  }\n  const name = exercise.name.toLowerCase();\n  return storage.programs.some((p) =>\n    (p.planner?.weeks ?? []).some((w) => w.days.some((d) => d.exerciseText.toLowerCase().includes(name)))\n  );\n}\n","import { ILength, ILengthUnit } from \"../types\";\n\nconst prebuiltLengths: Partial<Record<string, ILength>> = {};\n\nexport function Length_print(length: ILength): string {\n  return `${length.value}${Length_printUnit(length.unit)}`;\n}\n\nexport function Length_printUnit(lengthUnit: ILengthUnit): string {\n  return lengthUnit === \"in\" ? '\"' : lengthUnit;\n}\n\nexport function Length_build(value: number, unit: ILengthUnit): ILength {\n  const key = `${value}_${unit}`;\n  const prebuiltLength = prebuiltLengths[key];\n  if (prebuiltLength != null) {\n    return prebuiltLength;\n  } else {\n    const v = { value: typeof value === \"string\" ? parseFloat(value) : value, unit };\n    prebuiltLengths[`${value}_${unit}`] = v;\n    return v;\n  }\n}\n\nexport function Length_is(object: unknown): object is ILength {\n  const objLen = object as ILength;\n  return (\n    objLen &&\n    typeof objLen === \"object\" &&\n    \"unit\" in objLen &&\n    \"value\" in objLen &&\n    (objLen.unit === \"cm\" || objLen.unit === \"in\")\n  );\n}\n\nexport function Length_add(length: ILength, value: ILength): ILength {\n  return Length_operation(length, value, (a, b) => a + b);\n}\n\nexport function Length_subtract(length: ILength, value: ILength): ILength {\n  return Length_operation(length, value, (a, b) => a - b);\n}\n\nexport function Length_multiply(length: ILength, value: ILength): ILength {\n  return Length_operation(length, value, (a, b) => a * b);\n}\n\nexport function Length_divide(length: ILength, value: ILength): ILength {\n  return Length_operation(length, value, (a, b) => a / b);\n}\n\nexport function Length_gt(length: ILength, value: ILength): boolean {\n  return comparison(length, value, (a, b) => a > b);\n}\n\nexport function Length_lt(length: ILength, value: ILength): boolean {\n  return comparison(length, value, (a, b) => a < b);\n}\n\nexport function Length_gte(length: ILength, value: ILength): boolean {\n  return comparison(length, value, (a, b) => a >= b);\n}\n\nexport function Length_lte(length: ILength, value: ILength): boolean {\n  return comparison(length, value, (a, b) => a <= b);\n}\n\nexport function Length_eq(length: ILength, value: ILength): boolean {\n  return comparison(length, value, (a, b) => a === b);\n}\n\nexport function Length_eqeq(length: ILength, value: ILength): boolean {\n  return length.value === value.value && length.unit === value.unit;\n}\n\nexport function Length_convertTo(length: ILength, unit: ILengthUnit): ILength {\n  if (length.unit === unit) {\n    return length;\n  } else if (length.unit === \"in\" && unit === \"cm\") {\n    return Length_build(parseFloat((length.value * 2.54).toFixed(2)), unit);\n  } else {\n    return Length_build(parseFloat((length.value / 2.54).toFixed(2)), unit);\n  }\n}\n\nexport function Length_compare(a: ILength, b: ILength): number {\n  return a.value - Length_convertTo(b, a.unit).value;\n}\n\nexport function Length_compareReverse(a: ILength, b: ILength): number {\n  return Length_convertTo(b, a.unit).value - a.value;\n}\n\nfunction comparison(length: ILength, value: ILength, op: (a: number, b: number) => boolean): boolean {\n  return op(length.value, Length_convertTo(value, length.unit).value);\n}\n\nexport function Length_operation(length: ILength, value: ILength, op: (a: number, b: number) => number): ILength {\n  return Length_build(op(length.value, Length_convertTo(value, length.unit).value), length.unit);\n}\n","import {\n  IEvaluatedProgram,\n  IEvaluatedProgramDay,\n  Program_getProgramDayUsedExercises,\n  Program_nextHistoryEntry,\n} from \"./program\";\nimport {\n  Exercise_toKey,\n  Exercise_targetMuscles,\n  Exercise_synergistMuscles,\n  Exercise_synergistMusclesGroupMultipliers,\n} from \"./exercise\";\nimport {\n  ObjectUtils_keys,\n  ObjectUtils_findMaxValue,\n  ObjectUtils_combinedKeys,\n  ObjectUtils_clone,\n} from \"../utils/object\";\nimport { ISettings, IMuscle, IDayData, IScreenMuscle, IStats, screenMuscles, IMuscleGroupsSettings } from \"../types\";\nimport { StringUtils_dashcase, StringUtils_capitalize } from \"../utils/string\";\nimport { IPlannerProgramExerciseWithType } from \"../pages/planner/models/types\";\nimport { SetUtils_areEqual } from \"../utils/setUtils\";\nimport { UidFactory_generateUid } from \"../utils/generator\";\n\nexport type IScreenMusclePointsColl = Partial<Record<IScreenMuscle, number>>;\n\nexport interface IScreenMusclePoints {\n  strength: IScreenMusclePointsColl;\n  hypertrophy: IScreenMusclePointsColl;\n}\n\nexport type IExercisePointsColl = Partial<Record<string, IScreenMusclePointsColl>>;\n\nexport interface IExercisePoints {\n  strength: IExercisePointsColl;\n  hypertrophy: IExercisePointsColl;\n}\n\nexport interface IUnifiedPoints {\n  screenMusclePoints: IScreenMusclePointsColl;\n  exercisePoints: IExercisePointsColl;\n}\n\nexport interface IPoints {\n  screenMusclePoints: IScreenMusclePoints;\n  exercisePoints: IExercisePoints;\n}\n\nconst screenMuscleToMuscleMapping: Record<IScreenMuscle, IMuscle[]> = {\n  shoulders: [\n    \"Deltoid Anterior\",\n    \"Deltoid Lateral\",\n    \"Deltoid Posterior\",\n    \"Infraspinatus\",\n    \"Teres Major\",\n    \"Teres Minor\",\n  ],\n  triceps: [\"Triceps Brachii\"],\n  back: [\n    \"Erector Spinae\",\n    \"Latissimus Dorsi\",\n    \"Levator Scapulae\",\n    \"Trapezius Lower Fibers\",\n    \"Trapezius Middle Fibers\",\n    \"Trapezius Upper Fibers\",\n    \"Sternocleidomastoid\",\n    \"Splenius\",\n  ],\n  abs: [\"Obliques\", \"Rectus Abdominis\", \"Iliopsoas\"],\n  glutes: [\"Gluteus Maximus\", \"Gluteus Medius\", \"Tensor Fasciae Latae\"],\n  hamstrings: [\"Adductor Magnus\", \"Adductor Brevis\", \"Adductor Longus\", \"Hamstrings\"],\n  quadriceps: [\"Adductor Brevis\", \"Adductor Longus\", \"Pectineous\", \"Quadriceps\", \"Sartorius\"],\n  chest: [\"Pectoralis Major Clavicular Head\", \"Pectoralis Major Sternal Head\", \"Serratus Anterior\"],\n  biceps: [\"Biceps Brachii\", \"Brachialis\"],\n  calves: [\"Gastrocnemius\", \"Soleus\", \"Tibialis Anterior\"],\n  forearms: [\"Brachioradialis\", \"Wrist Extensors\", \"Wrist Flexors\"],\n};\n\nconst muscleToScreenMuscleMapping = ObjectUtils_keys(screenMuscleToMuscleMapping).reduce<\n  Record<IMuscle, IScreenMuscle[]>\n>((memo, screenMuscle) => {\n  const muscles = screenMuscleToMuscleMapping[screenMuscle];\n  for (const muscle of muscles) {\n    memo[muscle] = memo[muscle] || [];\n    memo[muscle].push(screenMuscle);\n  }\n  return memo;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n}, {} as any);\n\nexport function Muscle_getEmptyScreenMusclesPoints(): IScreenMusclePointsColl {\n  return {\n    shoulders: 0,\n    triceps: 0,\n    back: 0,\n    abs: 0,\n    glutes: 0,\n    hamstrings: 0,\n    quadriceps: 0,\n    chest: 0,\n    biceps: 0,\n    calves: 0,\n    forearms: 0,\n  };\n}\n\nexport function Muscle_imageUrl(muscle: IMuscle): string {\n  return `/externalimages/muscles/muscle-${StringUtils_dashcase(muscle)}.jpeg`;\n}\n\nfunction normalize(obj: IScreenMusclePointsColl, maxValue: number): IScreenMusclePointsColl {\n  return ObjectUtils_keys(obj).reduce<IScreenMusclePointsColl>((memo, key) => {\n    memo[key] = (obj[key] || 0) / maxValue;\n    return memo;\n  }, {});\n}\n\nexport function Muscle_normalizePoints(points: IPoints): IPoints {\n  const maxValues = {\n    strength: ObjectUtils_findMaxValue(points.screenMusclePoints.strength),\n    hypertrophy: ObjectUtils_findMaxValue(points.screenMusclePoints.hypertrophy),\n  };\n  return {\n    screenMusclePoints: {\n      strength: normalize(points.screenMusclePoints.strength, maxValues.strength),\n      hypertrophy: normalize(points.screenMusclePoints.hypertrophy, maxValues.hypertrophy),\n    },\n    exercisePoints: {\n      strength: ObjectUtils_keys(points.exercisePoints.strength).reduce<IExercisePointsColl>((memo, key) => {\n        memo[key] = normalize(points.exercisePoints.strength[key]!, maxValues.strength);\n        return memo;\n      }, {}),\n      hypertrophy: ObjectUtils_keys(points.exercisePoints.hypertrophy).reduce<IExercisePointsColl>((memo, key) => {\n        memo[key] = normalize(points.exercisePoints.hypertrophy[key]!, maxValues.hypertrophy);\n        return memo;\n      }, {}),\n    },\n  };\n}\n\nexport function Muscle_normalizeUnifiedPoints(points: IUnifiedPoints): IUnifiedPoints {\n  const maxValues = ObjectUtils_findMaxValue(points.screenMusclePoints);\n  return {\n    screenMusclePoints: normalize(points.screenMusclePoints, maxValues),\n    exercisePoints: ObjectUtils_keys(points.exercisePoints).reduce<IExercisePointsColl>((memo, key) => {\n      memo[key] = normalize(points.exercisePoints[key]!, maxValues);\n      return memo;\n    }, {}),\n  };\n}\n\nexport function Muscle_combinePoints(points: IPoints): IPoints {\n  return {\n    screenMusclePoints: {\n      strength: ObjectUtils_keys(points.screenMusclePoints.strength).reduce<IScreenMusclePointsColl>((memo, key) => {\n        memo[key] = (memo[key] || 0) + points.screenMusclePoints.strength[key]!;\n        return memo;\n      }, {}),\n      hypertrophy: {},\n    },\n    exercisePoints: {\n      strength: {},\n      hypertrophy: {},\n    },\n  };\n}\n\nexport function Muscle_getScreenMusclesFromMuscle(muscle: IMuscle, settings: ISettings): (IScreenMuscle | string)[] {\n  const availableMuscleGroups = Muscle_getAvailableMuscleGroups(settings);\n  const matchingMuscleGroups = availableMuscleGroups.filter((mg) => {\n    const muscles = settings.muscleGroups.data[mg]?.muscles ?? screenMuscleToMuscleMapping[mg as IScreenMuscle] ?? [];\n    return muscles.includes(muscle);\n  });\n  return matchingMuscleGroups;\n}\n\nexport function Muscle_getMuscleGroupName(muscleGroup: IScreenMuscle, settings: ISettings): string {\n  return settings.muscleGroups.data[muscleGroup]?.name ?? StringUtils_capitalize(muscleGroup);\n}\n\nexport function Muscle_isDefaultMuscles(muscleGroup: IScreenMuscle, muscles: IMuscle[]): boolean {\n  const defaultMuscles = screenMuscleToMuscleMapping[muscleGroup as IScreenMuscle] ?? [];\n  return SetUtils_areEqual(new Set(defaultMuscles), new Set(muscles));\n}\n\nexport function Muscle_getAvailableMuscleGroups(settings: ISettings): IScreenMuscle[] {\n  return [\n    ...screenMuscles.filter((sm) => !settings.muscleGroups.data[sm]?.isHidden),\n    ...Object.keys(settings.muscleGroups.data).filter((k) => !(screenMuscles as readonly string[]).includes(k)),\n  ];\n}\n\nexport function Muscle_getBuiltinMuscleGroups(): IScreenMuscle[] {\n  return screenMuscles;\n}\n\nexport function Muscle_getHiddenMuscleGroups(settings: ISettings): IScreenMuscle[] {\n  return [...screenMuscles.filter((sm) => settings.muscleGroups.data[sm]?.isHidden)];\n}\n\nexport function Muscle_getMusclesFromScreenMuscle(muscleGroup: IScreenMuscle | string, settings: ISettings): IMuscle[] {\n  const availableMuscleGroups = Muscle_getAvailableMuscleGroups(settings);\n  if (!availableMuscleGroups.includes(muscleGroup)) {\n    return [];\n  }\n  return (\n    settings.muscleGroups.data[muscleGroup]?.muscles ?? screenMuscleToMuscleMapping[muscleGroup as IScreenMuscle] ?? []\n  );\n}\n\nexport function Muscle_isBuiltInMuscleGroup(muscleGroup: IScreenMuscle | string): boolean {\n  return (screenMuscles as readonly string[]).includes(muscleGroup);\n}\n\nexport function Muscle_getPointsForProgram(program: IEvaluatedProgram, stats: IStats, settings: ISettings): IPoints {\n  const screenMusclePoints: IScreenMusclePoints = {\n    strength: {},\n    hypertrophy: {},\n  };\n  const exercisePoints: IExercisePoints = {\n    strength: {},\n    hypertrophy: {},\n  };\n\n  return program.weeks[0].days.reduce(\n    (memo, day) => mergePoints(memo, Muscle_getPointsForDay(program, day, stats, settings)),\n    {\n      screenMusclePoints,\n      exercisePoints,\n    }\n  );\n}\n\nexport function Muscle_getPointsForDay(\n  program: IEvaluatedProgram,\n  programDay: IEvaluatedProgramDay,\n  stats: IStats,\n  settings: ISettings\n): IPoints {\n  const screenMusclePoints: IScreenMusclePoints = {\n    strength: {},\n    hypertrophy: {},\n  };\n  const exercisePoints: IExercisePoints = {\n    strength: {},\n    hypertrophy: {},\n  };\n\n  const dayExercises = Program_getProgramDayUsedExercises(programDay);\n  return dayExercises.reduce(\n    (memo, exercise) => {\n      return mergePoints(memo, Muscle_getPointsForExercise(program, exercise, programDay.dayData, settings, stats));\n    },\n    { screenMusclePoints, exercisePoints }\n  );\n}\n\nexport function Muscle_getUnifiedPointsForDay(\n  program: IEvaluatedProgram,\n  programDay: IEvaluatedProgramDay,\n  stats: IStats,\n  settings: ISettings\n): IUnifiedPoints {\n  const screenMusclePoints: IScreenMusclePointsColl = {};\n  const exercisePoints: IExercisePointsColl = {};\n\n  const dayExercises = Program_getProgramDayUsedExercises(programDay);\n  return dayExercises.reduce(\n    (memo, exercise) => {\n      return mergeUnifiedPoints(\n        memo,\n        Muscle_getUnifiedPointsForExercise(program, exercise, programDay.dayData, settings, stats)\n      );\n    },\n    { screenMusclePoints, exercisePoints }\n  );\n}\n\nexport function Muscle_getUnifiedPointsForExercise(\n  program: IEvaluatedProgram,\n  programExercise: IPlannerProgramExerciseWithType,\n  dayData: IDayData,\n  settings: ISettings,\n  stats: IStats\n): IUnifiedPoints {\n  const screenMusclePoints: IScreenMusclePointsColl = {};\n  const exercisePoints: IExercisePointsColl = {};\n\n  const id = Exercise_toKey(programExercise.exerciseType);\n  const historyEntry = Program_nextHistoryEntry(program, dayData, 0, programExercise, stats, settings);\n  const targetMuscles = Exercise_targetMuscles(programExercise.exerciseType, settings);\n  const synergistMuscles = Exercise_synergistMuscles(programExercise.exerciseType, settings);\n  const screenTargetMuscles = Array.from(new Set(targetMuscles.flatMap((t) => muscleToScreenMuscleMapping[t] || [])));\n  const screenSynergistMuscles = Array.from(\n    new Set(synergistMuscles.flatMap((t) => muscleToScreenMuscleMapping[t] || []))\n  );\n  const synergistMuscleGroupToMultiplier = Exercise_synergistMusclesGroupMultipliers(\n    programExercise.exerciseType,\n    settings\n  );\n  for (const _set of historyEntry.sets) {\n    for (const muscle of screenTargetMuscles) {\n      screenMusclePoints[muscle] = screenMusclePoints[muscle] || 0;\n      screenMusclePoints[muscle]! += 100;\n      exercisePoints[id] = exercisePoints[id] || {};\n      exercisePoints[id]![muscle] = exercisePoints[id]![muscle] || 0;\n      exercisePoints[id]![muscle]! += 100;\n    }\n    for (const muscle of screenSynergistMuscles) {\n      screenMusclePoints[muscle] = screenMusclePoints[muscle] || 0;\n      screenMusclePoints[muscle]! +=\n        (synergistMuscleGroupToMultiplier[muscle] ?? settings.planner.synergistMultiplier) * 100;\n      exercisePoints[id] = exercisePoints[id] || {};\n      exercisePoints[id]![muscle] = exercisePoints[id]![muscle] || 0;\n      exercisePoints[id]![muscle]! +=\n        (synergistMuscleGroupToMultiplier[muscle] ?? settings.planner.synergistMultiplier) * 100;\n    }\n  }\n  return { screenMusclePoints, exercisePoints };\n}\n\nexport function Muscle_getPointsForExercise(\n  program: IEvaluatedProgram,\n  programExercise: IPlannerProgramExerciseWithType,\n  dayData: IDayData,\n  settings: ISettings,\n  stats: IStats\n): IPoints {\n  const screenMusclePoints: IScreenMusclePoints = {\n    strength: {},\n    hypertrophy: {},\n  };\n  const exercisePoints: IExercisePoints = {\n    strength: {},\n    hypertrophy: {},\n  };\n\n  const id = Exercise_toKey(programExercise.exerciseType);\n  const historyEntry = Program_nextHistoryEntry(program, dayData, 0, programExercise, stats, settings);\n  const targetMuscles = Exercise_targetMuscles(programExercise.exerciseType, settings);\n  const synergistMuscles = Exercise_synergistMuscles(programExercise.exerciseType, settings);\n  const synergistMuscleGroupToMultiplier = Exercise_synergistMusclesGroupMultipliers(\n    programExercise.exerciseType,\n    settings\n  );\n  const screenTargetMuscles = Array.from(new Set(targetMuscles.flatMap((t) => muscleToScreenMuscleMapping[t] || [])));\n  const screenSynergistMuscles = Array.from(\n    new Set(synergistMuscles.flatMap((t) => muscleToScreenMuscleMapping[t] || []))\n  );\n  for (const set of historyEntry.sets) {\n    if ((set.reps ?? 0) >= 8) {\n      for (const muscle of screenTargetMuscles) {\n        screenMusclePoints.hypertrophy[muscle] = screenMusclePoints.hypertrophy[muscle] || 0;\n        screenMusclePoints.hypertrophy[muscle]! += 100;\n        exercisePoints.hypertrophy[id] = exercisePoints.hypertrophy[id] || {};\n        exercisePoints.hypertrophy[id]![muscle] = exercisePoints.hypertrophy[id]![muscle] || 0;\n        exercisePoints.hypertrophy[id]![muscle]! += 100;\n      }\n      for (const muscle of screenSynergistMuscles) {\n        screenMusclePoints.hypertrophy[muscle] = screenMusclePoints.hypertrophy[muscle] || 0;\n        screenMusclePoints.hypertrophy[muscle]! +=\n          100 * (synergistMuscleGroupToMultiplier[muscle] ?? settings.planner.synergistMultiplier);\n        exercisePoints.hypertrophy[id] = exercisePoints.hypertrophy[id] || {};\n        exercisePoints.hypertrophy[id]![muscle] = exercisePoints.hypertrophy[id]![muscle] || 0;\n        exercisePoints.hypertrophy[id]![muscle]! +=\n          100 * (synergistMuscleGroupToMultiplier[muscle] ?? settings.planner.synergistMultiplier);\n      }\n    } else {\n      for (const muscle of screenTargetMuscles) {\n        screenMusclePoints.strength[muscle] = screenMusclePoints.strength[muscle] || 0;\n        screenMusclePoints.strength[muscle]! += 100;\n        exercisePoints.strength[id] = exercisePoints.strength[id] || {};\n        exercisePoints.strength[id]![muscle] = exercisePoints.strength[id]![muscle] || 0;\n        exercisePoints.strength[id]![muscle]! += 100;\n      }\n      for (const muscle of screenSynergistMuscles) {\n        screenMusclePoints.strength[muscle] = screenMusclePoints.strength[muscle] || 0;\n        screenMusclePoints.strength[muscle]! +=\n          100 * (synergistMuscleGroupToMultiplier[muscle] ?? settings.planner.synergistMultiplier);\n        exercisePoints.strength[id] = exercisePoints.strength[id] || {};\n        exercisePoints.strength[id]![muscle] = exercisePoints.strength[id]![muscle] || 0;\n        exercisePoints.strength[id]![muscle]! +=\n          100 * (synergistMuscleGroupToMultiplier[muscle] ?? settings.planner.synergistMultiplier);\n      }\n    }\n  }\n  return { screenMusclePoints, exercisePoints };\n}\n\nexport function Muscle_mergeScreenMusclePoints(\n  a: IScreenMusclePointsColl,\n  b: IScreenMusclePointsColl\n): IScreenMusclePointsColl {\n  return ObjectUtils_combinedKeys(a, b).reduce<IScreenMusclePointsColl>((memo, screenMuscle) => {\n    const oldValue = a[screenMuscle] || 0;\n    const newValue = b[screenMuscle] || 0;\n    memo[screenMuscle] = oldValue + newValue;\n    return memo;\n  }, {});\n}\n\nexport function Muscle_createMuscleGroup(\n  muscleGroupSettings: IMuscleGroupsSettings,\n  name: string\n): IMuscleGroupsSettings {\n  const id = UidFactory_generateUid(8);\n  return { ...muscleGroupSettings, data: { ...muscleGroupSettings.data, [id]: { name, muscles: [] } } };\n}\n\nexport function Muscle_updateMuscleGroup(\n  muscleGroupSettings: IMuscleGroupsSettings,\n  muscleGroup: IScreenMuscle,\n  muscles: IMuscle[]\n): IMuscleGroupsSettings {\n  const isDefault = Muscle_isDefaultMuscles(muscleGroup, muscles);\n  const newMuscleGroups = ObjectUtils_clone(muscleGroupSettings);\n  if (isDefault) {\n    delete newMuscleGroups.data[muscleGroup]?.muscles;\n  } else {\n    newMuscleGroups.data = newMuscleGroups.data || {};\n    newMuscleGroups.data[muscleGroup] = newMuscleGroups.data[muscleGroup] || {};\n    newMuscleGroups.data[muscleGroup].muscles = muscles;\n  }\n  return newMuscleGroups;\n}\n\nexport function Muscle_deleteMuscleGroup(\n  muscleGroupSettings: IMuscleGroupsSettings,\n  muscleGroup: IScreenMuscle\n): IMuscleGroupsSettings {\n  const isBuiltin = Muscle_isBuiltInMuscleGroup(muscleGroup);\n  if (isBuiltin) {\n    return {\n      ...muscleGroupSettings,\n      data: {\n        ...muscleGroupSettings.data,\n        [muscleGroup]: { ...muscleGroupSettings.data[muscleGroup], isHidden: true },\n      },\n    };\n  } else {\n    const newMuscleGroups = ObjectUtils_clone(muscleGroupSettings);\n    delete newMuscleGroups.data[muscleGroup];\n    return newMuscleGroups;\n  }\n}\n\nexport function Muscle_restoreMuscleGroup(\n  muscleGroupSettings: IMuscleGroupsSettings,\n  muscleGroup: IScreenMuscle\n): IMuscleGroupsSettings {\n  const newMuscleGroups = ObjectUtils_clone(muscleGroupSettings);\n  newMuscleGroups.data = newMuscleGroups.data || {};\n  newMuscleGroups.data[muscleGroup] = newMuscleGroups.data[muscleGroup] || {};\n  newMuscleGroups.data[muscleGroup].isHidden = false;\n  return newMuscleGroups;\n}\n\nfunction mergeExercisePoints(a: IExercisePointsColl, b: IExercisePointsColl): IExercisePointsColl {\n  return ObjectUtils_combinedKeys(a, b).reduce<IExercisePointsColl>((memo, exerciseId) => {\n    const points1 = a[exerciseId] || {};\n    const points2 = b[exerciseId] || {};\n    memo[exerciseId] = Muscle_mergeScreenMusclePoints(points1, points2);\n    return memo;\n  }, {});\n}\n\nfunction mergePoints(oldPoints: IPoints, newPoints: IPoints): IPoints {\n  return {\n    screenMusclePoints: {\n      strength: Muscle_mergeScreenMusclePoints(\n        oldPoints.screenMusclePoints.strength,\n        newPoints.screenMusclePoints.strength\n      ),\n      hypertrophy: Muscle_mergeScreenMusclePoints(\n        oldPoints.screenMusclePoints.hypertrophy,\n        newPoints.screenMusclePoints.hypertrophy\n      ),\n    },\n    exercisePoints: {\n      strength: mergeExercisePoints(oldPoints.exercisePoints.strength, newPoints.exercisePoints.strength),\n      hypertrophy: mergeExercisePoints(oldPoints.exercisePoints.hypertrophy, newPoints.exercisePoints.hypertrophy),\n    },\n  };\n}\n\nfunction mergeUnifiedPoints(oldPoints: IUnifiedPoints, newPoints: IUnifiedPoints): IUnifiedPoints {\n  return {\n    screenMusclePoints: Muscle_mergeScreenMusclePoints(oldPoints.screenMusclePoints, newPoints.screenMusclePoints),\n    exercisePoints: mergeExercisePoints(oldPoints.exercisePoints, newPoints.exercisePoints),\n  };\n}\n","import { IState } from \"./state\";\nimport { WhatsNew_doesHaveNewUpdates } from \"./whatsnew\";\n\nexport type IOnloadModal = \"whatsnew\" | \"hearaboutus\";\n\nconst HEAR_ABOUT_US_COOLDOWN_MS = 1000 * 60 * 60 * 24 * 7;\n\nexport function OnloadModal_shouldShowWhatsNew(state: IState): boolean {\n  return state.storage.whatsNew != null && WhatsNew_doesHaveNewUpdates(state.storage.whatsNew);\n}\n\nexport function OnloadModal_shouldShowHearAboutUs(state: IState): boolean {\n  if (state.storage.currentProgramId == null) {\n    return false;\n  }\n  const hearAboutUs = state.storage.hearAboutUs;\n  const requests = hearAboutUs?.requests ?? [];\n  const lastRequest = requests[requests.length - 1];\n  return (\n    hearAboutUs?.result == null &&\n    !hearAboutUs?.done &&\n    requests.length < 3 &&\n    (lastRequest == null || Date.now() - lastRequest > HEAR_ABOUT_US_COOLDOWN_MS)\n  );\n}\n\nexport function OnloadModal_getNext(state: IState): IOnloadModal | undefined {\n  if (OnloadModal_shouldShowWhatsNew(state)) {\n    return \"whatsnew\";\n  }\n  if (OnloadModal_shouldShowHearAboutUs(state)) {\n    return \"hearaboutus\";\n  }\n  return undefined;\n}\n","import { IPlannerProgramExercise } from \"../pages/planner/models/types\";\nimport { IPlannerEvalResult, IPlannerTopLineItem } from \"../pages/planner/plannerExerciseEvaluator\";\nimport { IEvaluatedProgramWeek } from \"./program\";\nexport function PP_iterate2(\n  evaluatedWeeks: IEvaluatedProgramWeek[],\n  cb: (\n    exercise: IPlannerProgramExercise,\n    weekIndex: number,\n    dayInWeekIndex: number,\n    dayIndex: number,\n    exerciseIndex: number\n  ) => boolean | void\n): void {\n  let dayIndex = 0;\n  for (let weekIndex = 0; weekIndex < evaluatedWeeks.length; weekIndex++) {\n    const week = evaluatedWeeks[weekIndex];\n    for (let dayInWeekIndex = 0; dayInWeekIndex < week.days.length; dayInWeekIndex++) {\n      const day = week.days[dayInWeekIndex];\n      for (let exerciseIndex = 0; exerciseIndex < day.exercises.length; exerciseIndex++) {\n        const exercise = day.exercises[exerciseIndex];\n        const shouldReturn = cb(exercise, weekIndex, dayInWeekIndex, dayIndex, exerciseIndex);\n        if (!!shouldReturn) {\n          return;\n        }\n      }\n      dayIndex += 1;\n    }\n  }\n}\n\n// Walks the exercise lines of a program's source text rather than its evaluated exercises. The\n// week/day/dayIndex it yields line up with PP_iterate2, since both the top line map and the\n// evaluated weeks are built one-to-one from planner.weeks.\nexport function PP_iterateTopLineExercises(\n  groupedTopLines: IPlannerTopLineItem[][][][],\n  cb: (line: IPlannerTopLineItem, weekIndex: number, dayInWeekIndex: number, dayIndex: number) => boolean | void\n): void {\n  let dayIndex = 0;\n  for (let weekIndex = 0; weekIndex < groupedTopLines.length; weekIndex++) {\n    const week = groupedTopLines[weekIndex];\n    for (let dayInWeekIndex = 0; dayInWeekIndex < week.length; dayInWeekIndex++) {\n      for (const group of week[dayInWeekIndex]) {\n        for (const line of group) {\n          if (line.type !== \"exercise\") {\n            continue;\n          }\n          const shouldReturn = cb(line, weekIndex, dayInWeekIndex, dayIndex);\n          if (!!shouldReturn) {\n            return;\n          }\n        }\n      }\n      dayIndex += 1;\n    }\n  }\n}\n\nexport function PP_iterate(\n  evaluatedWeeks: IPlannerEvalResult[][],\n  cb: (\n    exercise: IPlannerProgramExercise,\n    weekIndex: number,\n    dayInWeekIndex: number,\n    dayIndex: number,\n    exerciseIndex: number\n  ) => boolean | void\n): void {\n  let dayIndex = 0;\n  for (let weekIndex = 0; weekIndex < evaluatedWeeks.length; weekIndex++) {\n    const week = evaluatedWeeks[weekIndex];\n    for (let dayInWeekIndex = 0; dayInWeekIndex < week.length; dayInWeekIndex++) {\n      const day = week[dayInWeekIndex];\n      if (day.success) {\n        for (let exerciseIndex = 0; exerciseIndex < day.data.length; exerciseIndex++) {\n          const exercise = day.data[exerciseIndex];\n          const shouldReturn = cb(exercise, weekIndex, dayInWeekIndex, dayIndex, exerciseIndex);\n          if (!!shouldReturn) {\n            return;\n          }\n        }\n      }\n      dayIndex += 1;\n    }\n  }\n}\n","import {\n  allExercisesList,\n  warmupValues,\n  Exercise_eq,\n  Exercise_getIsUnilateral,\n  Exercise_getWarmupSets,\n  Exercise_toKey,\n  Exercise_onerm,\n  Exercise_findById,\n  Exercise_get,\n  Exercise_fullName,\n} from \"./exercise\";\nimport { ScriptRunner } from \"../parser\";\nimport { Dialog_alert } from \"../utils/dialog\";\nimport {\n  IScriptBindings,\n  Progress_getEntryId,\n  Progress_runUpdateScriptForEntry,\n  Progress_createScriptBindings,\n  Progress_createScriptFunctions,\n  Progress_getDayData,\n} from \"./progress\";\nimport { lb } from \"lens-shmens\";\nimport { IDispatch } from \"../ducks/types\";\nimport { IEither } from \"../utils/types\";\nimport {\n  Weight_is,\n  Weight_build,\n  Weight_isPct,\n  Weight_buildPct,\n  Weight_eq,\n  Weight_roundTo005,\n  Weight_convertTo,\n  Weight_display,\n  Weight_printOrNumber,\n} from \"./weight\";\nimport { UidFactory_generateUid } from \"../utils/generator\";\nimport { IState, updateState } from \"./state\";\nimport {\n  IProgram,\n  IStorage,\n  IProgramExercise,\n  ISettings,\n  IHistoryEntry,\n  IExerciseType,\n  IProgramState,\n  ISet,\n  IHistoryRecord,\n  IWeight,\n  IProgramExerciseVariation,\n  IUnit,\n  IDayData,\n  IExerciseData,\n  IStats,\n  IShortDayData,\n} from \"../types\";\nimport {\n  ObjectUtils_omit,\n  ObjectUtils_clone,\n  ObjectUtils_diff,\n  ObjectUtils_keys,\n  ObjectUtils_isEqual,\n  ObjectUtils_pick,\n  ObjectUtils_diffPaths,\n} from \"../utils/object\";\nimport { Exporter_toFile } from \"../utils/exporter\";\nimport { DateUtils_formatYYYYMMDD } from \"../utils/date\";\nimport { ICustomExercise, IProgramContentSettings, IPlannerProgram, IPercentage } from \"../types\";\nimport {\n  ProgramExercise_approxTimeMs,\n  ProgramExercise_applyVariables,\n  ProgramExercise_doesUse1RM,\n  ProgramExercise_doesUseRPE,\n} from \"./programExercise\";\nimport { Thunk_pushScreen } from \"../ducks/thunks\";\nimport type { INavigateOpts } from \"../navigation/navigationService\";\nimport { getLatestMigrationVersion } from \"../migrations/migrations\";\nimport { Encoder_encodeIntoUrl } from \"../utils/encoder\";\nimport { StringUtils_pluralize, StringUtils_hashString } from \"../utils/string\";\nimport { ILiftoscriptEvaluatorUpdate } from \"../liftoscriptEvaluator\";\nimport { ProgramToPlanner } from \"./programToPlanner\";\nimport {\n  IExportedPlannerProgram,\n  IPlannerProgramExercise,\n  IPlannerProgramExerciseWithType,\n  IReuseCandidate,\n} from \"../pages/planner/models/types\";\nimport memoize from \"micro-memoize\";\nimport { PlannerProgram_switchToUnit } from \"../pages/planner/models/plannerProgram\";\nimport {\n  IByExercise,\n  IByTag,\n  PlannerEvaluator_forceEvaluate,\n  PlannerEvaluator_evaluate,\n  PlannerEvaluator_changeExerciseName,\n} from \"../pages/planner/plannerEvaluator\";\nimport { PlannerKey_fromFullName } from \"../pages/planner/plannerKey\";\nimport { PP_iterate2, PP_iterate } from \"./pp\";\nimport {\n  PlannerProgramExercise_currentEvaluatedSetVariation,\n  PlannerProgramExercise_programWarmups,\n  PlannerProgramExercise_getProgressScript,\n  PlannerProgramExercise_currentEvaluatedSetVariationIndex,\n  PlannerProgramExercise_currentExerciseVariationIndex,\n  PlannerProgramExercise_currentDescriptionIndex,\n  PlannerProgramExercise_getState,\n  PlannerProgramExercise_createExerciseFromEntry,\n} from \"../pages/planner/models/plannerProgramExercise\";\nimport { CollectionUtils_sortBy, CollectionUtils_uniqBy } from \"../utils/collection\";\nimport { IPlannerEvalResult, PlannerSyntaxError } from \"../pages/planner/plannerExerciseEvaluator\";\nimport { UrlUtils_build } from \"../utils/url\";\nimport { Service } from \"../api/service\";\nimport { EditProgram_initPlannerState } from \"./editProgram\";\nimport { ProgramSet_getEvaluatedWeight } from \"./programSet\";\nimport { Stats_getCurrentMovingAverageBodyweight } from \"./stats\";\n\ndeclare let __HOST__: string;\n\nconst encodedProgramHashToShortUrl: Partial<Record<string, string>> = {};\n\nexport interface IProgramIndexEntry {\n  id: string;\n  name: string;\n  author: string;\n  authorUrl: string;\n  url: string;\n  shortDescription: string;\n  description?: string;\n  isMultiweek: boolean;\n  tags: string[];\n  frequency?: number;\n  age?: string;\n  duration?: string;\n  goal?: string;\n  exercises?: IExerciseType[];\n  equipment?: string[];\n  exercisesRange?: [number, number];\n  weeksCount?: number;\n  datePublished?: string;\n  dateModified?: string;\n}\n\nexport interface IExportedProgram {\n  program: IProgram;\n  customExercises: Partial<Record<string, ICustomExercise>>;\n  version: string;\n  settings: IProgramContentSettings;\n}\n\nexport interface IEvaluatedProgramWeek {\n  name: string;\n  description?: string;\n  days: IEvaluatedProgramDay[];\n}\n\nexport interface IEvaluatedProgramDay {\n  name: string;\n  dayData: Required<IDayData>;\n  description?: string;\n  exercises: IPlannerProgramExercise[];\n}\n\nexport interface IEvaluatedProgramError {\n  error: PlannerSyntaxError;\n  dayData: Required<IDayData>;\n}\n\nexport interface IEvaluatedProgram {\n  type: \"evaluatedProgram\";\n  id: string;\n  planner: IPlannerProgram;\n  name: string;\n  nextDay: number;\n  errors: IEvaluatedProgramError[];\n  weeks: IEvaluatedProgramWeek[];\n  states: IByTag<IProgramState>;\n}\nexport type IEProgram = IProgram | IEvaluatedProgram;\n\nexport type IProgramMode = \"planner\" | \"update\";\nexport const emptyProgramId = \"emptyprogram\";\n\nfunction isEvaluatedProgram(program: IEProgram): program is IEvaluatedProgram {\n  return \"type\" in program && program.type === \"evaluatedProgram\";\n}\n\nexport function ev(program: IEProgram, settings: ISettings): IEvaluatedProgram {\n  if (isEvaluatedProgram(program)) {\n    return program;\n  } else {\n    return Program_evaluate(program, settings);\n  }\n}\n\nexport function Program_getProgram(state: IState, id?: string): IProgram | undefined {\n  if (id === emptyProgramId) {\n    return Program_createEmptyProgram();\n  } else {\n    return state.storage.programs.find((p) => p.id === id);\n  }\n}\n\nexport function Program_getFullProgram(state: IState, id?: string): IProgram | undefined {\n  const program = Program_getProgram(state, id);\n  if (program) {\n    return Program_fullProgram(program, state.storage.settings);\n  } else {\n    return undefined;\n  }\n}\n\nexport function Program_cleanPlannerProgram(program: IProgram): IProgram {\n  const planner = program.planner;\n  if (planner != null) {\n    const newPlanner = {\n      ...planner,\n      weeks: planner.weeks.map((w) => ({\n        ...ObjectUtils_omit(w, [\"id\"]),\n        days: w.days.map((d) => ({\n          ...ObjectUtils_omit(d, [\"id\"]),\n        })),\n      })),\n    };\n    return {\n      ...program,\n      planner: newPlanner,\n      exercises: [],\n      days: [],\n      weeks: [],\n      deletedDays: [],\n      deletedWeeks: [],\n      deletedExercises: [],\n    };\n  } else {\n    return program;\n  }\n}\n\nexport function Program_isEmpty(program?: IProgram | IEvaluatedProgram): boolean {\n  return program?.id === emptyProgramId;\n}\n\nexport const Program_uses1RM = memoize(\n  (program: IEvaluatedProgram): boolean => {\n    const allExercises = Program_getAllProgramExercises(program);\n    return allExercises.some((e) => ProgramExercise_doesUse1RM(e));\n  },\n  { maxSize: 10 }\n);\n\nexport const Program_usesRPE = memoize(\n  (program: IEvaluatedProgram): boolean => {\n    const allExercises = Program_getAllProgramExercises(program);\n    return allExercises.some((e) => ProgramExercise_doesUseRPE(e));\n  },\n  { maxSize: 10 }\n);\n\nexport function Program_getProgramExercisesFromExerciseType(\n  program: IEvaluatedProgram,\n  exerciseType: IExerciseType\n): IPlannerProgramExercise[] {\n  return Program_getAllUsedProgramExercises(program).filter((p) => Exercise_eq(p.exerciseType, exerciseType));\n}\n\nexport function Program_getProgramIndex(state: IState, id: string): number {\n  return state.storage.programs.findIndex((p) => p.id === id);\n}\n\nexport function Program_getCurrentProgram(storage: IStorage): IProgram | undefined {\n  return storage.programs.filter((p) => p.id === storage.currentProgramId)[0];\n}\n\nexport function Program_storageToExportedProgram(storage: IStorage, programId: string): IExportedProgram | undefined {\n  const program = storage.programs.find((p) => p.id === programId);\n  if (!program) {\n    return undefined;\n  }\n  const settings = storage.settings;\n  return {\n    program: Program_cleanPlannerProgram(program),\n    customExercises: settings.exercises,\n    version: storage.version,\n    settings: settings,\n  };\n}\n\nexport function Program_nextHistoryEntry(\n  program: IEvaluatedProgram,\n  dayData: IDayData,\n  index: number,\n  programExercise: IPlannerProgramExerciseWithType,\n  stats: IStats,\n  settings: ISettings\n): IHistoryEntry {\n  const exercise = programExercise.exerciseType;\n  const programSets = PlannerProgramExercise_currentEvaluatedSetVariation(programExercise)?.sets;\n  const warmupSets = PlannerProgramExercise_programWarmups(programExercise, settings);\n  const sets: ISet[] = [];\n  for (let i = 0; i < programSets.length; i++) {\n    const programSet = programSets[i];\n    const minReps =\n      programSet.minrep != null && programSet.minrep !== programSet.maxrep ? programSet.minrep : undefined;\n    const weight = ProgramSet_getEvaluatedWeight(programSet, programExercise.exerciseType, settings);\n    sets.push({\n      vtype: \"set\",\n      id: UidFactory_generateUid(6),\n      reps: programSet.maxrep,\n      index: i,\n      minReps,\n      weight,\n      isUnilateral: Exercise_getIsUnilateral(exercise, settings),\n      rpe: programSet.rpe,\n      timer: programSet.timer,\n      setTimer: programSet.setTimer,\n      isOverflowSetTimer: programSet.isOverflowSetTimer,\n      auto: programSet.auto,\n      logRpe: programSet.logRpe,\n      askWeight: programSet.askWeight,\n      originalWeight: programSet.weight,\n      isAmrap: programSet.isAmrap,\n      label: programSet.label,\n      isCompleted: false,\n      programSetIndex: i,\n    });\n  }\n\n  const entry: IHistoryEntry = {\n    vtype: \"history_entry\",\n    id: Progress_getEntryId(exercise, programExercise.label),\n    index,\n    exercise: exercise,\n    programExerciseId: programExercise.key,\n    sets,\n    superset: programExercise.superset?.name,\n    warmupSets: Exercise_getWarmupSets(exercise, sets[0]?.weight, settings, warmupSets),\n  };\n  try {\n    return Progress_runUpdateScriptForEntry(entry, dayData, programExercise, program.states, -1, settings, stats);\n  } catch (error) {\n    console.error(error);\n    return entry;\n  }\n}\n\nexport function Program_stateValue(\n  state: IProgramState,\n  key: string,\n  value?: string\n): number | IWeight | IPercentage | undefined {\n  if (value == null) {\n    return undefined;\n  }\n  const numValue = parseFloat(value);\n  const oldValue = state[key];\n  if (oldValue == null) {\n    return numValue;\n  } else if (Weight_is(oldValue)) {\n    return Weight_build(numValue, oldValue.unit);\n  } else if (Weight_isPct(oldValue)) {\n    return Weight_buildPct(numValue);\n  } else {\n    return numValue;\n  }\n}\n\nexport function Program_nextHistoryRecord(\n  aProgram: IProgram,\n  settings: ISettings,\n  stats: IStats,\n  dayIndex?: number\n): IHistoryRecord {\n  const program = Program_evaluate(aProgram, settings);\n  return Program_nextHistoryRecordFromEvaluated(program, settings, stats, dayIndex);\n}\n\n// The canonical order of a day's exercises. `order` is not a position — it defaults to 0 and only carries a\n// value when the text disambiguates with `Squat[order]`, so this is document order with those markers floated\n// into place. Everything that needs a day's order goes through here rather than sorting for itself: a workout\n// reconciled mid-session has to end up in the same order as one freshly started from the same program.\nexport function Program_getDayExercisesInOrder(\n  program: IEvaluatedProgram,\n  day: number\n): IPlannerProgramExerciseWithType[] {\n  const programDay = Program_getProgramDay(program, day);\n  return CollectionUtils_sortBy(programDay ? Program_getProgramDayUsedExercises(programDay) : [], \"order\");\n}\n\nexport function Program_getDayExerciseKeys(program: IEvaluatedProgram, day: number): string[] {\n  return Program_getDayExercisesInOrder(program, day).map((e) => e.key);\n}\n\nexport function Program_nextHistoryRecordFromEvaluated(\n  program: IEvaluatedProgram,\n  settings: ISettings,\n  stats: IStats,\n  dayIndex?: number\n): IHistoryRecord {\n  const day = Math.max(1, Math.min(Program_numberOfDays(program), Math.max(1, (dayIndex || program.nextDay) ?? 0)));\n  const dayData = Program_getDayData(program, day);\n  const { week, dayInWeek } = dayData;\n\n  const fullDayName = Program_getDayName(program, day);\n  const now = Date.now();\n  const sortedDayExercises = Program_getDayExercisesInOrder(program, day);\n  const entries = sortedDayExercises.map((exercise, i) => {\n    return Program_nextHistoryEntry(program, dayData, i, exercise, stats, settings);\n  });\n  return {\n    vtype: \"progress\",\n    id: 0,\n    date: new Date().toISOString(),\n    programId: program.id,\n    programName: program.name,\n    intervals: [],\n    day,\n    week,\n    dayInWeek,\n    dayName: fullDayName,\n    startTime: now,\n    updatedAt: now,\n    entries,\n    ui: {},\n  };\n}\n\nexport function Program_getSupersetGroups(\n  evaluatedProgram: IEvaluatedProgram,\n  dayData: IShortDayData,\n  excludeExercise?: IPlannerProgramExercise\n): Partial<Record<string, IPlannerProgramExerciseWithType[]>> {\n  const programDay = Program_getProgramDay(\n    evaluatedProgram,\n    Program_getDayNumber(evaluatedProgram, dayData.week, dayData.dayInWeek)\n  );\n  const dayExercises = programDay ? Program_getProgramDayUsedExercises(programDay) : [];\n  const groups: Partial<Record<string, IPlannerProgramExerciseWithType[]>> = {};\n  for (const exercise of dayExercises) {\n    if (exercise.superset != null) {\n      if (!groups[exercise.superset.name]) {\n        groups[exercise.superset.name] = [];\n      }\n      if (exercise.key !== excludeExercise?.key) {\n        groups[exercise.superset.name]!.push(exercise);\n      }\n    }\n  }\n  return groups;\n}\n\nexport function Program_getSupersetExercises(\n  evalutedProgram: IEvaluatedProgram,\n  plannerExercise: IPlannerProgramExercise\n): IPlannerProgramExerciseWithType[] {\n  if (plannerExercise.superset == null) {\n    return [];\n  }\n  const dayData = plannerExercise.dayData;\n  const programDay = Program_getProgramDay(evalutedProgram, dayData.day);\n  const dayExercises = programDay ? Program_getProgramDayUsedExercises(programDay) : [];\n  const result = dayExercises.filter((e) => e.superset?.name === plannerExercise.superset?.name);\n  return result;\n}\n\nexport function Program_runExerciseFinishDayScript(\n  entry: IHistoryEntry,\n  dayData: IDayData,\n  settings: ISettings,\n  state: IProgramState,\n  otherStates: IByExercise<IProgramState>,\n  programExercise: IPlannerProgramExercise,\n  stats: IStats,\n  userPromptedStateVars?: IProgramState\n): IEither<\n  {\n    state: IProgramState;\n    bindings: IScriptBindings;\n    updates: ILiftoscriptEvaluatorUpdate[];\n    prints: [number | IPercentage | IWeight][];\n  },\n  string\n> {\n  const script = PlannerProgramExercise_getProgressScript(programExercise) || \"\";\n  const setVariationIndex = PlannerProgramExercise_currentEvaluatedSetVariationIndex(programExercise);\n  const descriptionIndex = PlannerProgramExercise_currentDescriptionIndex(programExercise);\n  const exerciseVariationIndex = PlannerProgramExercise_currentExerciseVariationIndex(programExercise);\n\n  const bindings = Progress_createScriptBindings(\n    dayData,\n    entry,\n    settings,\n    programExercise.evaluatedSetVariations[setVariationIndex]?.sets.length ?? 0,\n    Stats_getCurrentMovingAverageBodyweight(stats, settings),\n    undefined,\n    setVariationIndex + 1,\n    descriptionIndex + 1,\n    exerciseVariationIndex + 1\n  );\n  const fns = Progress_createScriptFunctions(settings);\n  let updates: ILiftoscriptEvaluatorUpdate[] = [];\n  const newState: IProgramState = ObjectUtils_clone({ ...state, ...userPromptedStateVars });\n\n  const fnContext = { exerciseType: entry.exercise, unit: settings.units, prints: [] };\n  try {\n    const runner = new ScriptRunner(\n      script,\n      newState,\n      ObjectUtils_clone(otherStates),\n      bindings,\n      fns,\n      settings.units,\n      fnContext,\n      \"planner\"\n    );\n    runner.execute();\n    updates = runner.getUpdates();\n  } catch (e) {\n    if (e instanceof SyntaxError) {\n      return { success: false, error: e.message };\n    } else {\n      throw e;\n    }\n  }\n\n  const stateDiff = { ...entry.state, ...ObjectUtils_diff(state, newState) };\n  return { success: true, data: { state: stateDiff, updates, bindings, prints: fnContext.prints } };\n}\n\nexport function Program_runFinishDayScript(\n  programExercise: IPlannerProgramExercise,\n  program: IEvaluatedProgram,\n  dayData: IDayData,\n  entry: IHistoryEntry,\n  settings: ISettings,\n  stats: IStats,\n  userPromptedStateVars?: IProgramState\n): IEither<\n  {\n    state: IProgramState;\n    otherStates: Record<number, IProgramState>;\n    updates: ILiftoscriptEvaluatorUpdate[];\n    bindings: IScriptBindings;\n  },\n  string\n> {\n  const state = PlannerProgramExercise_getState(programExercise);\n  const setVariationIndex = PlannerProgramExercise_currentEvaluatedSetVariationIndex(programExercise);\n  const descriptionIndex = PlannerProgramExercise_currentDescriptionIndex(programExercise);\n  const exerciseVariationIndex = PlannerProgramExercise_currentExerciseVariationIndex(programExercise);\n  const bindings = Progress_createScriptBindings(\n    dayData,\n    entry,\n    settings,\n    programExercise.evaluatedSetVariations[setVariationIndex]?.sets.length ?? 0,\n    Stats_getCurrentMovingAverageBodyweight(stats, settings),\n    undefined,\n    setVariationIndex + 1,\n    descriptionIndex + 1,\n    exerciseVariationIndex + 1\n  );\n  const fns = Progress_createScriptFunctions(settings);\n\n  const newState: IProgramState = {\n    ...state,\n    ...userPromptedStateVars,\n  };\n  const otherStates = ObjectUtils_clone(program.states);\n\n  const script = PlannerProgramExercise_getProgressScript(programExercise) || \"\";\n  let updates: ILiftoscriptEvaluatorUpdate[] = [];\n  try {\n    const runner = new ScriptRunner(\n      script,\n      newState,\n      otherStates,\n      bindings,\n      fns,\n      settings.units,\n      { exerciseType: programExercise.exerciseType, unit: settings.units, prints: [] },\n      \"planner\"\n    );\n    runner.execute();\n    updates = runner.getUpdates();\n  } catch (e) {\n    if (e instanceof SyntaxError) {\n      return { success: false, error: e.message };\n    } else {\n      throw e;\n    }\n  }\n\n  const diffOtherStates = ObjectUtils_keys(otherStates).reduce<IByTag<IProgramState>>((memo, key) => {\n    if (!ObjectUtils_isEqual(otherStates[key], program.states[key])) {\n      const diffState = ObjectUtils_keys(otherStates[key]).reduce<IProgramState>((memo2, key2) => {\n        if (!Weight_eq(otherStates[key][key2], program.states[key][key2])) {\n          memo2[key2] = otherStates[key][key2];\n        }\n        return memo2;\n      }, {});\n      memo[key] = diffState;\n    }\n    return memo;\n  }, {});\n\n  const stateDiff = ObjectUtils_diff(state, newState);\n  return { success: true, data: { state: stateDiff, otherStates: diffOtherStates, updates, bindings } };\n}\n\nexport function Program_dayAverageTimeMs(program: IEvaluatedProgram, settings: ISettings): number {\n  const dayApproxTimes: number[] = [];\n  for (const week of program.weeks) {\n    for (const day of week.days) {\n      dayApproxTimes.push(Program_dayApproxTimeMs(day, settings));\n    }\n  }\n  return dayApproxTimes.reduce((acc, t) => acc + t, 0) / dayApproxTimes.length;\n}\n\nexport function Program_dayApproxTimeMs(programDay: IEvaluatedProgramDay, settings: ISettings): number {\n  return Program_getProgramDayUsedExercises(programDay).reduce((acc, e) => {\n    return acc + ProgramExercise_approxTimeMs(e, settings);\n  }, 0);\n}\n\nexport function Program_getProgramExerciseForKeyAndShortDayData(\n  program: IEvaluatedProgram,\n  dayData: IShortDayData,\n  key: string\n): IPlannerProgramExerciseWithType | undefined {\n  const day = Program_getDayNumber(program, dayData.week, dayData.dayInWeek);\n  return Program_getProgramExerciseForKeyAndDay(program, day, key);\n}\n\nexport function Program_getProgramExerciseForKeyAndDay(\n  program: IEvaluatedProgram,\n  day: number,\n  key: string\n): IPlannerProgramExerciseWithType | undefined {\n  const programDay = program ? Program_getProgramDay(program, day) : undefined;\n  const dayExercises = programDay ? Program_getProgramDayUsedExercises(programDay) : [];\n  let programExercise = dayExercises.find((pe) => pe.key === key);\n  if (programExercise == null) {\n    const allExercises = program ? Program_getAllProgramExercisesWithType(program) : [];\n    programExercise = allExercises.find((pe) => pe.key === key);\n    if (programExercise != null) {\n      programExercise = { ...programExercise, dayData: Program_getDayData(program, day) };\n    }\n  }\n  return programExercise;\n}\n\nexport function Program_runAllFinishDayScripts(\n  program: IProgram,\n  progress: IHistoryRecord,\n  stats: IStats,\n  settings: ISettings\n): { program: IProgram; exerciseData: IExerciseData } {\n  const exerciseData: IExerciseData = {};\n  const newEvaluatedProgram = Program_forceEvaluate(program, settings);\n  const dayData = Progress_getDayData(progress);\n  const programDay = Program_getProgramDay(newEvaluatedProgram, progress.day);\n  if (!programDay) {\n    return { program, exerciseData };\n  }\n  for (const entry of progress.entries) {\n    if (entry != null && !entry.isSuppressed && entry.sets.some((s) => s.isCompleted)) {\n      const programExercise =\n        program && entry.programExerciseId\n          ? Program_getProgramExerciseForKeyAndDay(newEvaluatedProgram, dayData.day, entry.programExerciseId)\n          : undefined;\n      if (programExercise) {\n        const newStateResult = Program_runFinishDayScript(\n          programExercise,\n          newEvaluatedProgram,\n          dayData,\n          entry,\n          settings,\n          stats,\n          progress.userPromptedStateVars?.[programExercise.key]\n        );\n        if (newStateResult.success) {\n          const { state, updates, bindings, otherStates } = newStateResult.data;\n          const exerciseKey = Exercise_toKey(entry.exercise);\n          const onerm = Exercise_onerm(entry.exercise, settings);\n          if (!Weight_eq(bindings.rm1, onerm)) {\n            exerciseData[exerciseKey] = { rm1: Weight_roundTo005(bindings.rm1) };\n          }\n          PP_iterate2(newEvaluatedProgram.weeks, (exercise) => {\n            if (exercise.key === programExercise.key && exercise.progress) {\n              exercise.progress.state = { ...exercise.progress.state, ...entry.state, ...state };\n            }\n          });\n          ProgramExercise_applyVariables(programExercise.key, newEvaluatedProgram, updates, settings);\n          for (const key of ObjectUtils_keys(otherStates || {})) {\n            PP_iterate2(newEvaluatedProgram.weeks, (exercise) => {\n              if (exercise.tags?.includes(Number(key)) && exercise.progress) {\n                exercise.progress.state = { ...exercise.progress.state, ...otherStates[key] };\n              }\n            });\n          }\n        } else {\n          Dialog_alert(`There was an error executing progress script: ${newStateResult.error}`);\n        }\n      }\n    }\n  }\n  const theNextDay = Program_nextDay(newEvaluatedProgram, progress.day);\n  const newPlanner = new ProgramToPlanner(newEvaluatedProgram, settings).convertToPlanner();\n  const newProgram = ObjectUtils_clone(program);\n  newProgram.nextDay = theNextDay;\n  newProgram.planner = newPlanner;\n\n  return {\n    program: newProgram,\n    exerciseData,\n  };\n}\n\nexport function Program_createVariation(useStateWeight?: boolean): IProgramExerciseVariation {\n  return {\n    sets: [\n      {\n        repsExpr: \"5\",\n        weightExpr: useStateWeight ? \"state.weight\" : \"0lb\",\n        isAmrap: false,\n      },\n    ],\n  };\n}\n\nexport function Program_createExercise(units: IUnit): IProgramExercise {\n  const defaultWarmup = warmupValues(units)[45];\n  return {\n    name: \"Squat\",\n    id: UidFactory_generateUid(8),\n    variations: [Program_createVariation(true)],\n    exerciseType: {\n      id: \"squat\",\n      equipment: \"barbell\",\n    },\n    state: {\n      weight: units === \"kg\" ? allExercisesList.squat.startingWeightKg : allExercisesList.squat.startingWeightLb,\n    },\n    warmupSets: defaultWarmup,\n    finishDayExpr: \"\",\n    variationExpr: \"1\",\n    descriptions: [\"\"],\n    stateMetadata: {},\n    reuseLogic: { selected: undefined, states: {} },\n  };\n}\n\nexport function Program_previewProgram(dispatch: IDispatch, programId: string, showCustomPrograms: boolean): void {\n  updateState(\n    dispatch,\n    [\n      lb<IState>().p(\"previewProgram\").record({\n        id: programId,\n        showCustomPrograms,\n      }),\n    ],\n    \"Preview program\"\n  );\n  dispatch(Thunk_pushScreen(\"programPreview\"));\n}\n\nexport function Program_createEmptyProgram(): IProgram {\n  return {\n    vtype: \"program\",\n    exercises: [],\n    id: emptyProgramId,\n    name: \"Ad-Hoc Workout\",\n    description: \"\",\n    url: \"\",\n    author: \"\",\n    nextDay: 1,\n    days: [],\n    weeks: [],\n    isMultiweek: false,\n    planner: {\n      vtype: \"planner\",\n      name: \"Ad-Hoc Workout\",\n      weeks: [{ name: \"\", days: [{ name: \"\", exerciseText: \"\" }] }],\n    },\n    tags: [],\n  };\n}\n\nexport function Program_cloneProgram(dispatch: IDispatch, program: IProgram, settings: ISettings): void {\n  const newProgramId = UidFactory_generateUid(8);\n  updateState(\n    dispatch,\n    [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"programs\")\n        .recordModify((programs) => {\n          const newProgram = { ...program, clonedAt: Date.now(), id: newProgramId };\n          if (newProgram.planner) {\n            newProgram.planner = PlannerProgram_switchToUnit(newProgram.planner, settings);\n          }\n          return [...programs, newProgram];\n        }),\n      lb<IState>().p(\"storage\").p(\"currentProgramId\").record(newProgramId),\n    ],\n    \"Clone program\"\n  );\n}\n\nexport function Program_selectProgram(dispatch: IDispatch, programId: string): void {\n  updateState(dispatch, [lb<IState>().p(\"storage\").p(\"currentProgramId\").record(programId)], \"Select program\");\n}\n\nexport function Program_selectProgramAndGoHome(dispatch: IDispatch, programId: string): void {\n  Program_selectProgram(dispatch, programId);\n  dispatch(Thunk_pushScreen(\"main\", undefined, { tab: \"home\" }));\n}\n\nexport function Program_getAllProgramExercises(evaluatedProgram: IEvaluatedProgram): IPlannerProgramExercise[] {\n  return evaluatedProgram.weeks.flatMap((w) => w.days.flatMap((d) => d.exercises));\n}\n\nexport function Program_getAllUsedProgramExercises(\n  evaluatedProgram: IEvaluatedProgram\n): IPlannerProgramExerciseWithType[] {\n  const used = Program_getAllProgramExercises(evaluatedProgram).filter((e) => !e.notused && e.exerciseType != null);\n  return used as IPlannerProgramExerciseWithType[];\n}\n\nexport function Program_getAllProgramExercisesWithType(\n  evaluatedProgram: IEvaluatedProgram\n): IPlannerProgramExerciseWithType[] {\n  const used = Program_getAllProgramExercises(evaluatedProgram).filter((e) => e.exerciseType != null);\n  return used as IPlannerProgramExerciseWithType[];\n}\n\nexport function Program_getProgramExerciseByTypeWeekAndDay(\n  evaluatedProgram: IEvaluatedProgram,\n  exerciseType: IExerciseType,\n  week: number,\n  dayInWeek: number\n): IPlannerProgramExercise | undefined {\n  let exercise: IPlannerProgramExercise | undefined;\n  PP_iterate2(evaluatedProgram.weeks, (e, weekIndex, dayInWeekIndex) => {\n    if (\n      weekIndex + 1 === week &&\n      dayInWeekIndex + 1 === dayInWeek &&\n      e.exerciseType &&\n      Exercise_eq(e.exerciseType, exerciseType)\n    ) {\n      exercise = e;\n      return true;\n    }\n    return false;\n  });\n  return exercise;\n}\n\nfunction Program_emptyEvaluatedProgram(program: IProgram): IEvaluatedProgram {\n  return {\n    type: \"evaluatedProgram\",\n    id: program.id,\n    planner: {\n      vtype: \"planner\",\n      name: program.name,\n      weeks: [{ name: \"Week 1\", days: [{ name: \"Day 1\", exerciseText: \"\" }] }],\n    },\n    name: program.name,\n    errors: [],\n    nextDay: program.nextDay,\n    weeks: [\n      {\n        name: \"Week 1\",\n        days: [\n          {\n            name: \"Day 1\",\n            dayData: { day: 1, week: 1, dayInWeek: 1 },\n            exercises: [],\n          },\n        ],\n      },\n    ],\n    states: {},\n  };\n}\n\n// The half of an evaluation that comes from the planner alone. Split out because it is all some\n// surfaces need: an evaluated program's id, name and nextDay are fields it carries, not inputs to\n// working out what its weeks contain.\nfunction Program_buildWeeks(\n  planner: IPlannerProgram,\n  evaluatedWeeks: IPlannerEvalResult[][]\n): { weeks: IEvaluatedProgramWeek[]; errors: IEvaluatedProgramError[] } {\n  let dayNum = 0;\n  const errors: IEvaluatedProgramError[] = [];\n  const weeks = planner.weeks.map((week, weekIndex) => {\n    const evaluatedWeek = evaluatedWeeks[weekIndex];\n    const days = week.days.map((day, dayInWeekIndex) => {\n      dayNum += 1;\n      const evaluatedDay = evaluatedWeek[dayInWeekIndex];\n      const dayData = {\n        day: dayNum,\n        week: weekIndex + 1,\n        dayInWeek: dayInWeekIndex + 1,\n      };\n      const evaluatedExercises = CollectionUtils_sortBy(evaluatedDay.success ? evaluatedDay.data : [], \"order\");\n      if (!evaluatedDay.success) {\n        errors.push({ error: evaluatedDay.error, dayData });\n      }\n      return {\n        name: day.name,\n        description: day.description,\n        dayData,\n        exercises: evaluatedExercises,\n      };\n    });\n    return { name: week.name, description: week.description, days };\n  });\n  return { weeks, errors };\n}\n\n// Evaluating a planner on its own, for surfaces that only ever have one. Planner in, weeks out —\n// no program required, because none of it is used to work them out.\nexport function Program_evaluatePlannerWeeks(planner: IPlannerProgram, settings: ISettings): IEvaluatedProgramWeek[] {\n  const { evaluatedWeeks } = PlannerEvaluator_evaluate(planner, settings);\n  return Program_buildWeeks(planner, evaluatedWeeks).weeks;\n}\n\n// Which exercise a name refers to *in this planner*, for an action that has just built one and\n// needs the key that is valid in it. Resolved here rather than against whatever evaluation the\n// caller had lying around: that one predates the edit being folded in, so after a rename it\n// answers with a key the new planner no longer has — or with the wrong exercise entirely.\n//\n// Day-by-day, so a syntax error on one day costs only that day. A whole-document parse is\n// all-or-nothing, and using one here would take the action away from every line in the program\n// because of an unfinished one somewhere else.\nexport function Program_findPlannerExercise(\n  planner: IPlannerProgram,\n  settings: ISettings,\n  fullName: string\n): IPlannerProgramExercise | undefined {\n  const key = PlannerKey_fromFullName(fullName, settings.exercises);\n  for (const week of Program_evaluatePlannerWeeks(planner, settings)) {\n    for (const day of week.days) {\n      const exercise = day.exercises.find((e) => e.key === key);\n      if (exercise != null) {\n        return exercise;\n      }\n    }\n  }\n  return undefined;\n}\n\nfunction Program_buildEvaluatedProgram(\n  program: IProgram,\n  planner: IPlannerProgram,\n  evaluatedWeeks: IPlannerEvalResult[][]\n): IEvaluatedProgram {\n  const { weeks, errors } = Program_buildWeeks(planner, evaluatedWeeks);\n  const states: IByTag<IProgramState> = {};\n  PP_iterate(evaluatedWeeks, (exercise) => {\n    for (const tag of exercise.tags) {\n      states[tag] = { ...states[tag], ...PlannerProgramExercise_getState(exercise) };\n    }\n  });\n  return {\n    type: \"evaluatedProgram\",\n    id: program.id,\n    errors,\n    planner,\n    name: program.name,\n    nextDay: program.nextDay,\n    weeks,\n    states,\n  };\n}\n\nexport function Program_forceEvaluate(program: IProgram, settings: ISettings): IEvaluatedProgram {\n  const planner = program.planner;\n  if (!planner) {\n    return Program_emptyEvaluatedProgram(program);\n  }\n  const { evaluatedWeeks } = PlannerEvaluator_forceEvaluate(planner, settings);\n  return Program_buildEvaluatedProgram(program, planner, evaluatedWeeks);\n}\n\n// Reuses the content-memoized planner evaluation that the edit screen already computed for its render,\n// so edit dispatches don't re-parse the whole program. The planner evaluation may be cached/shared, so\n// callers that mutate the returned exercises MUST clone first. Not interchangeable with Program_forceEvaluate,\n// which guarantees a fresh recompute.\nfunction Program_evaluateCachedPlannerImpl(program: IProgram, settings: ISettings): IEvaluatedProgram {\n  const planner = program.planner;\n  if (!planner) {\n    return Program_emptyEvaluatedProgram(program);\n  }\n  const { evaluatedWeeks } = PlannerEvaluator_evaluate(planner, settings);\n  return Program_buildEvaluatedProgram(program, planner, evaluatedWeeks);\n}\n\nexport const Program_evaluateCachedPlanner = memoize(Program_evaluateCachedPlannerImpl, { maxSize: 10 });\n\nexport function Program_getNumberOfExerciseInstances(program: IEvaluatedProgram, exerciseKey: string): number {\n  let count = 0;\n  PP_iterate2(program.weeks, (exercise) => {\n    if (exercise.key === exerciseKey) {\n      count += 1;\n    }\n  });\n  return count;\n}\n\nexport function Program_changeExerciseName(from: string, to: string, program: IProgram, settings: ISettings): IProgram {\n  const planner = program.planner;\n  if (!planner) {\n    return program;\n  }\n  return {\n    ...program,\n    planner: {\n      ...planner,\n      weeks: planner.weeks.map((week) => {\n        return {\n          ...week,\n          days: week.days.map((day) => {\n            return {\n              ...day,\n              exerciseText: PlannerEvaluator_changeExerciseName(day.exerciseText, from, to, settings),\n            };\n          }),\n        };\n      }),\n    },\n  };\n}\n\nexport function Program_numberOfDays(program: IEvaluatedProgram): number {\n  return program.weeks.reduce((memo, week) => memo + week.days.length, 0);\n}\n\nexport function Program_weeksRange(program: IEvaluatedProgram): string | undefined {\n  return program.weeks.length > 1\n    ? `${program.weeks.length} ${StringUtils_pluralize(\"week\", program.weeks.length)}`\n    : \"\";\n}\n\nexport function Program_daysRange(program: IEvaluatedProgram): string {\n  const minDays = Math.min(...program.weeks.map((w) => w.days.length));\n  const maxDays = Math.max(...program.weeks.map((w) => w.days.length));\n  if (minDays === maxDays) {\n    return `${minDays} ${StringUtils_pluralize(\"day\", minDays)} per week`;\n  } else {\n    return `${minDays}-${maxDays} days per week`;\n  }\n}\n\nexport function Program_exerciseRange(program: IEvaluatedProgram): string {\n  const days = program.weeks.flatMap((w) => w.days);\n  const minExs = Math.min(...days.map((d) => Program_getProgramDayUsedExercises(d).length));\n  const maxExs = Math.max(...days.map((d) => Program_getProgramDayUsedExercises(d).length));\n  return Program_exerciseRangeFormat(minExs, maxExs);\n}\n\nexport function Program_exerciseRangeFormat(minExs: number, maxExs: number): string {\n  if (minExs === maxExs) {\n    return `${minExs} ${StringUtils_pluralize(\"exercise\", minExs)} per day`;\n  } else {\n    return `${minExs}-${maxExs} exercises per day`;\n  }\n}\n\nexport function Program_getWeekFromDay(program: IEvaluatedProgram, day: number): number {\n  let daysTotal = 0;\n  for (let i = 0; i < program.weeks.length; i += 1) {\n    const weekDays = program.weeks[i].days.length;\n    daysTotal += weekDays;\n    if (daysTotal >= day) {\n      return i + 1;\n    }\n  }\n  return 1;\n}\n\nexport function Program_getDayNumber(\n  program: IPlannerProgram | IEvaluatedProgram,\n  week: number,\n  dayInWeek: number\n): number {\n  let dayIndex = 1;\n  for (let w = 0; w < program.weeks.length; w += 1) {\n    for (let d = 0; d < program.weeks[w].days.length; d += 1) {\n      if (w === week - 1 && d === dayInWeek - 1) {\n        return dayIndex;\n      }\n      dayIndex += 1;\n    }\n  }\n  return -1;\n}\n\nexport function Program_getExerciseTypesForWeekDay(\n  program: IEvaluatedProgram,\n  week: number,\n  day: number\n): IExerciseType[] {\n  const exerciseTypes: IExerciseType[] = [];\n  PP_iterate2(program.weeks, (exercise, weekIndex, dayInWeekIndex) => {\n    if (weekIndex + 1 === week && dayInWeekIndex + 1 === day) {\n      const exType = exercise.exerciseType;\n      if (exType && !exerciseTypes.some((et) => Exercise_eq(et, exType))) {\n        exerciseTypes.push(exType);\n      }\n    }\n  });\n  return exerciseTypes;\n}\n\nexport function Program_getDayData(program: IEvaluatedProgram, day: number): Required<IDayData> {\n  return {\n    day,\n    week: Program_getWeekFromDay(program, day),\n    dayInWeek: Program_getDayInWeek(program, day),\n  };\n}\n\nexport function Program_getDayInWeek(program: IEvaluatedProgram, day: number): number {\n  let daysTotal = 0;\n  for (const week of program.weeks) {\n    daysTotal += week.days.length;\n    if (daysTotal >= day) {\n      return day - (daysTotal - week.days.length);\n    }\n  }\n  return 1;\n}\n\nexport function Program_getDayName(program: IEvaluatedProgram, day: number): string {\n  const dayData = Program_getDayData(program, day);\n  const programDay = Program_getProgramDay(program, day);\n  const week = program.weeks[(dayData.week || 1) - 1];\n  const isMultiweek = program.weeks.length > 1 && week != null;\n  return `${isMultiweek ? `${week.name} - ` : \"\"}${programDay?.name}`;\n}\n\nexport function Program_getListOfDays(program: IEvaluatedProgram): [string, string][] {\n  const days: [string, string][] = [];\n  const isReallyMultiweek = program.weeks.length > 1;\n  let dayIndex = 0;\n  for (const week of program.weeks) {\n    for (const day of week.days) {\n      dayIndex += 1;\n      days.push([`${dayIndex}`, `${isReallyMultiweek ? `${week.name} - ` : \"\"}${day.name}`]);\n    }\n  }\n  return days;\n}\n\nexport function Program_getProgramWeek(program: IEvaluatedProgram, day?: number): IEvaluatedProgramWeek {\n  return program.weeks[Program_getWeekFromDay(program, day || 1) - 1] || program.weeks[0];\n}\n\nexport function Program_getProgramDay(program: IEvaluatedProgram, day: number): IEvaluatedProgramDay | undefined {\n  let aDay = 0;\n  for (const week of program.weeks || []) {\n    for (const d of week.days) {\n      aDay += 1;\n      if (day === aDay) {\n        return d;\n      }\n    }\n  }\n  return undefined;\n}\n\nexport function Program_getProgramDayExercises(programDay: IEvaluatedProgramDay): IPlannerProgramExerciseWithType[] {\n  const list = programDay.exercises.filter((e) => e.exerciseType != null);\n  return list as IPlannerProgramExerciseWithType[];\n}\n\nexport function Program_getProgramDayUsedExercises(\n  programDay: IEvaluatedProgramDay\n): IPlannerProgramExerciseWithType[] {\n  const list = programDay.exercises.filter((e) => !e.notused && e.exerciseType != null);\n  return list as IPlannerProgramExerciseWithType[];\n}\n\nexport function Program_applyEvaluatedProgram(\n  program: IProgram,\n  evaluatedProgram: IEvaluatedProgram,\n  settings: ISettings\n): IProgram {\n  const newProgram = ObjectUtils_clone(program);\n  newProgram.planner = new ProgramToPlanner(evaluatedProgram, settings).convertToPlanner();\n  newProgram.nextDay = evaluatedProgram.nextDay;\n  return newProgram;\n}\n\nexport function Program_getProgramExercise(\n  day: number,\n  program?: IEvaluatedProgram,\n  key?: string\n): IPlannerProgramExercise | undefined {\n  if (key == null || program == null) {\n    return undefined;\n  }\n  const programDay = Program_getProgramDay(program, day);\n  return programDay?.exercises.find((e) => e.key === key);\n}\n\nexport function Program_getFirstProgramExercise(\n  program?: IEvaluatedProgram,\n  key?: string\n): IPlannerProgramExercise | undefined {\n  if (key == null || program == null) {\n    return undefined;\n  }\n  return Program_getAllProgramExercises(program).find((e) => e.key === key || e.fullName === key);\n}\n\nexport function Program_getProgramExerciseFromDay(\n  programDay?: IEvaluatedProgramDay,\n  key?: string\n): IPlannerProgramExercise | undefined {\n  if (key == null || programDay == null) {\n    return undefined;\n  }\n  return programDay?.exercises.find((e) => e.key === key);\n}\n\nexport function Program_getEvaluatedExercise(\n  program: IProgram,\n  day: number,\n  key: string,\n  settings: ISettings\n): IPlannerProgramExercise | undefined {\n  const { weeks: evaluatedWeeks } = Program_evaluate(program, settings);\n  let plannerProgramExercise: IPlannerProgramExercise | undefined;\n  PP_iterate2(evaluatedWeeks, (exercise, weekIndex, dayInWeekIndex, dayIndex) => {\n    if (dayIndex === day - 1 && exercise.key === key) {\n      plannerProgramExercise = exercise;\n      return true;\n    } else {\n      return undefined;\n    }\n  });\n  return plannerProgramExercise;\n}\n\nexport function Program_nextDay(program: IEvaluatedProgram, day?: number): number {\n  const nd = (day != null ? day % Program_numberOfDays(program) : 0) + 1;\n  return isNaN(nd) ? 1 : nd;\n}\n\nexport function Program_editAction(\n  dispatch: IDispatch,\n  program: IProgram,\n  dayData?: IDayData,\n  key?: string,\n  opts?: INavigateOpts\n): void {\n  const plannerState = EditProgram_initPlannerState(program.id, program, dayData, key);\n  updateState(\n    dispatch,\n    [lb<IState>().p(\"editProgramStates\").p(program.id).record(plannerState)],\n    \"Set edit program state\"\n  );\n  dispatch(Thunk_pushScreen(\"editProgram\", { programId: program.id }, opts));\n}\n\nexport function Program_exportProgramToFile(program: IProgram, settings: ISettings, version: string): void {\n  const payload = Program_exportProgram(program, settings, version);\n  Exporter_toFile(\n    `liftosaur_${program.name.replace(/\\s+/g, \"-\")}_${DateUtils_formatYYYYMMDD(Date.now())}.json`,\n    JSON.stringify(payload, null, 2)\n  );\n}\n\nexport async function Program_exportProgramToLink(\n  program: IProgram,\n  settings: ISettings,\n  version: string\n): Promise<string> {\n  const payload = Program_exportProgram(program, settings, version);\n  const url = await Encoder_encodeIntoUrl(JSON.stringify(payload), __HOST__);\n  url.pathname = \"/program\";\n  return url.toString();\n}\n\nexport function Program_exportProgram(program: IProgram, settings: ISettings, version?: string): IExportedProgram {\n  const aFullProgram = Program_evaluate(program, settings);\n  const customExerciseIds = Program_getAllProgramExercises(aFullProgram).reduce<string[]>((memo, programExercise) => {\n    const id = programExercise.exerciseType?.id;\n    if (id) {\n      const isBuiltIn = !!Exercise_findById(id, {});\n      if (!isBuiltIn) {\n        memo.push(id);\n      }\n    }\n    return memo;\n  }, []);\n\n  const customExercises = ObjectUtils_pick(settings.exercises, customExerciseIds);\n  return {\n    customExercises,\n    program,\n    version: version || getLatestMigrationVersion(),\n    settings: ObjectUtils_pick(settings, [\"units\", \"timers\", \"planner\"]),\n  };\n}\n\nexport function Program_exportedPlannerProgramToExportedProgram(\n  exportedPlannerProgram: IExportedPlannerProgram,\n  aNextDay?: number\n): IExportedProgram {\n  const program = {\n    ...Program_create(exportedPlannerProgram.program.name, exportedPlannerProgram.id),\n    planner: exportedPlannerProgram.program,\n  };\n  if (aNextDay != null) {\n    program.nextDay = aNextDay;\n  }\n  const exportedProgram: IExportedProgram = {\n    customExercises: exportedPlannerProgram.settings.exercises,\n    program,\n    version: exportedPlannerProgram.version,\n    settings: {\n      timers: {\n        workout: exportedPlannerProgram.settings.timer,\n      },\n      planner: exportedPlannerProgram.plannerSettings,\n    },\n  };\n  return exportedProgram;\n}\n\nexport function Program_create(name: string, id?: string): IProgram {\n  return {\n    vtype: \"program\" as const,\n    id: id || UidFactory_generateUid(8),\n    name: name,\n    url: \"\",\n    author: \"\",\n    shortDescription: \"\",\n    description: \"\",\n    nextDay: 1,\n    weeks: [],\n    isMultiweek: false,\n    days: [{ id: UidFactory_generateUid(8), name: \"Day 1\", exercises: [] }],\n    exercises: [],\n    tags: [],\n    deletedDays: [],\n    deletedWeeks: [],\n    deletedExercises: [],\n    clonedAt: Date.now(),\n  };\n}\n\nexport function Program_isChanged(aProgram: IProgram, bProgram: IProgram): boolean {\n  const { ...cleanedAProgram } = aProgram;\n  const { ...cleanedBProgram } = bProgram;\n  const changed = !ObjectUtils_isEqual(cleanedAProgram, cleanedBProgram);\n  if (changed) {\n    const paths = ObjectUtils_diffPaths(cleanedAProgram, cleanedBProgram);\n    return paths.some((p) => {\n      return !p.match(/exercises.\\d+.state/) && !p.match(/exercises.\\d+.reuseLogic\\.states/) && !p.match(/nextDay/);\n    });\n  }\n  return false;\n}\n\nexport function Program_mergePrograms(\n  oldProgram: IProgram,\n  newProgram: IProgram,\n  enforceNew: boolean = false\n): IProgram {\n  const deletedWeeks = new Set([...(oldProgram.deletedWeeks || []), ...(newProgram.deletedWeeks || [])]);\n  const deletedDays = new Set([...(oldProgram.deletedDays || []), ...(newProgram.deletedDays || [])]);\n  const deletedExercises = new Set([...(oldProgram.deletedExercises || []), ...(newProgram.deletedExercises || [])]);\n  return {\n    vtype: \"program\",\n    id: newProgram.id,\n    name: newProgram.name,\n    description: newProgram.description,\n    url: newProgram.url,\n    author: newProgram.author,\n    nextDay: newProgram.nextDay,\n    days: newProgram.days,\n    deletedDays: Array.from(deletedDays),\n    weeks: newProgram.weeks,\n    deletedWeeks: Array.from(deletedWeeks),\n    isMultiweek: newProgram.isMultiweek,\n    tags: newProgram.tags,\n    shortDescription: newProgram.shortDescription,\n    exercises: newProgram.exercises,\n    deletedExercises: Array.from(deletedExercises),\n    clonedAt: newProgram.clonedAt || oldProgram.clonedAt,\n    planner: newProgram.planner,\n  };\n}\n\nexport async function Program_toUrl(\n  program: IProgram,\n  settings: ISettings,\n  client: Window[\"fetch\"],\n  userId?: string\n): Promise<string> {\n  const exportedProgram = Program_exportProgram(program, settings);\n  const baseUrl = UrlUtils_build(\n    \"/planner\",\n    typeof window !== \"undefined\" && window.location?.href ? window.location.href : \"https://www.liftosaur.com\"\n  );\n  const json = JSON.stringify(exportedProgram);\n  const hash = StringUtils_hashString(json);\n  const encodedUrl = await Encoder_encodeIntoUrl(json, baseUrl.toString());\n  const encodedProgramUrl = encodedUrl.toString();\n  if (encodedProgramHashToShortUrl[hash]) {\n    return encodedProgramHashToShortUrl[hash];\n  } else {\n    const service = new Service(client);\n    const shortUrl = await service.postShortUrl(encodedProgramUrl, \"p\", settings.affiliateEnabled ? userId : undefined);\n    encodedProgramHashToShortUrl[hash] = shortUrl;\n    return shortUrl;\n  }\n}\n\nexport function Program_createFromHistoryRecord(\n  programName: string,\n  record: IHistoryRecord,\n  settings: ISettings\n): IProgram {\n  const dayData = { week: 1, day: 1, dayInWeek: 1 };\n  const program: IProgram = {\n    ...Program_create(programName),\n    planner: {\n      vtype: \"planner\",\n      name: programName,\n      weeks: [{ name: \"Week 1\", days: [{ name: \"Day 1\", exerciseText: \"\" }] }],\n    },\n  };\n  const evaluatedProgram = Program_evaluate(program, settings);\n  const planner = program.planner!;\n  planner.weeks[0].days[0].exerciseText = record.entries\n    .map((entry) => {\n      const exercise = Exercise_get(entry.exercise, settings.exercises);\n      return Exercise_fullName(exercise, settings);\n    })\n    .join(\"\\n\");\n  const newDay: IEvaluatedProgramDay = {\n    dayData: dayData,\n    name: \"Day 1\",\n    exercises: record.entries.map((e, i) => {\n      return PlannerProgramExercise_createExerciseFromEntry(e, dayData, settings, i);\n    }),\n  };\n  evaluatedProgram.weeks[0].days[0] = newDay;\n  const newPlanner = new ProgramToPlanner(evaluatedProgram, settings).convertToPlanner();\n  const newProgram = {\n    ...ObjectUtils_clone(program),\n    planner: newPlanner,\n  };\n  return newProgram;\n}\n\nexport function Program_addDayFromHistoryRecord(\n  program: IProgram,\n  afterDay: number,\n  record: IHistoryRecord,\n  settings: ISettings\n): { program: IProgram; dayData: Required<IDayData> } {\n  const evaluatedProgram = Program_evaluate(program, settings);\n  const dayData = Program_getDayData(evaluatedProgram, afterDay);\n  const newDayData = { week: dayData.week, day: dayData.day + 1, dayInWeek: dayData.dayInWeek + 1 };\n  const newDay: IEvaluatedProgramDay = {\n    dayData: newDayData,\n    name: `Day ${dayData.day + 1}`,\n    exercises: record.entries.map((e, i) => {\n      return PlannerProgramExercise_createExerciseFromEntry(e, newDayData, settings, i);\n    }),\n  };\n  evaluatedProgram.weeks[dayData.week - 1].days.splice(dayData.dayInWeek, 0, newDay);\n  evaluatedProgram.planner.weeks[dayData.week - 1].days.splice(dayData.dayInWeek, 0, {\n    name: newDay.name,\n    exerciseText: newDay.exercises.map((e) => e.fullName).join(\"\\n\"),\n  });\n  const newPlanner = new ProgramToPlanner(evaluatedProgram, settings).convertToPlanner();\n  const newProgram = {\n    ...ObjectUtils_clone(program),\n    planner: newPlanner,\n  };\n  return { program: newProgram, dayData: newDayData };\n}\n\nexport function Program_getReuseSetsCandidates(\n  key: string,\n  evaluatedProgram: IEvaluatedProgram,\n  dayData: Required<IDayData>\n): Record<string, IReuseCandidate> {\n  const result: Record<string, IReuseCandidate> = {};\n  PP_iterate2(evaluatedProgram.weeks, (exercise, weekIndex, dayInWeekIndex) => {\n    if (\n      exercise.key === key &&\n      ((dayData.week === weekIndex + 1 && dayData.dayInWeek === dayInWeekIndex + 1) || exercise.isRepeat)\n    ) {\n      return;\n    }\n    if (exercise.reuse != null || exercise.progress?.reuse != null || exercise.update?.reuse != null) {\n      return;\n    }\n    let reuseSetCandidate = result[exercise.key];\n    if (!reuseSetCandidate) {\n      reuseSetCandidate = {\n        exercise,\n        weekAndDays: {},\n      };\n      result[exercise.key] = reuseSetCandidate;\n    }\n    reuseSetCandidate.weekAndDays[weekIndex + 1] = reuseSetCandidate.weekAndDays[weekIndex + 1] || new Set<number>();\n    reuseSetCandidate.weekAndDays[weekIndex + 1].add(dayInWeekIndex + 1);\n  });\n  return result;\n}\n\nexport function Program_getScriptReuseCandidates(\n  key: string,\n  notused: boolean,\n  evaluatedProgram: IEvaluatedProgram,\n  type: \"progress\" | \"update\"\n): string[] {\n  const result: Record<string, string> = {};\n  PP_iterate2(evaluatedProgram.weeks, (exercise) => {\n    if (exercise.key === key) {\n      return;\n    }\n    const script = type === \"progress\" ? exercise.progress : exercise.update;\n    if (!script || script.type !== \"custom\" || (!(!notused && exercise.notused) && script.reuse)) {\n      return;\n    }\n    result[exercise.fullName] = exercise.fullName;\n  });\n  return Object.keys(result);\n}\n\nexport function Program_getReusingSetsExercises(\n  evaluatedProgram: IEvaluatedProgram,\n  programExercise: IPlannerProgramExercise\n): IPlannerProgramExercise[] {\n  const exercises: IPlannerProgramExercise[] = [];\n  PP_iterate2(evaluatedProgram.weeks, (e) => {\n    if (\n      e.reuse?.exercise?.key === programExercise.key &&\n      e.reuse?.exercise.dayData.week === programExercise.dayData.week &&\n      e.reuse?.exercise.dayData.dayInWeek === programExercise.dayData.dayInWeek\n    ) {\n      exercises.push(e);\n    }\n  });\n  return exercises;\n}\n\nexport function Program_getReusingDescriptionsExercises(\n  evaluatedProgram: IEvaluatedProgram,\n  programExercise: IPlannerProgramExercise\n): IPlannerProgramExercise[] {\n  const exercises: IPlannerProgramExercise[] = [];\n  PP_iterate2(evaluatedProgram.weeks, (e) => {\n    if (\n      e.descriptions.reuse?.exercise?.key === programExercise.key &&\n      e.descriptions.reuse?.exercise.dayData.week === programExercise.dayData.week &&\n      e.descriptions.reuse?.exercise.dayData.dayInWeek === programExercise.dayData.dayInWeek\n    ) {\n      exercises.push(e);\n    }\n  });\n  return exercises;\n}\n\nexport function Program_getReusingCustomProgressExercises(\n  evaluatedProgram: IEvaluatedProgram,\n  programExercise: IPlannerProgramExercise\n): IPlannerProgramExercise[] {\n  const exercises: IPlannerProgramExercise[] = [];\n  PP_iterate2(evaluatedProgram.weeks, (e) => {\n    if (e.progress?.type === \"custom\" && e.progress?.reuse?.fullName === programExercise.fullName) {\n      exercises.push(e);\n    }\n  });\n  return exercises;\n}\n\nexport function Program_getReusingSetProgressExercises(\n  evaluatedProgram: IEvaluatedProgram,\n  programExercise: IPlannerProgramExercise\n): IPlannerProgramExercise[] {\n  const exercises: IPlannerProgramExercise[] = [];\n  PP_iterate2(evaluatedProgram.weeks, (e) => {\n    if (e.reuse?.fullName === programExercise.fullName && e.progress) {\n      exercises.push(e);\n    }\n  });\n  return exercises;\n}\n\nexport function Program_getReusingProgressExercises(\n  evaluatedProgram: IEvaluatedProgram,\n  programExercise: IPlannerProgramExercise\n): IPlannerProgramExercise[] {\n  const reusingCustomProgressExercises = Program_getReusingCustomProgressExercises(evaluatedProgram, programExercise);\n  const reusingSetProgressExercises = Program_getReusingSetProgressExercises(evaluatedProgram, programExercise);\n  const exercises = CollectionUtils_uniqBy(\n    [...reusingCustomProgressExercises, ...reusingSetProgressExercises],\n    \"fullName\"\n  );\n  return exercises;\n}\n\nexport function Program_getReusingUpdateExercises(\n  evaluatedProgram: IEvaluatedProgram,\n  programExercise: IPlannerProgramExercise\n): IPlannerProgramExercise[] {\n  const exercises: IPlannerProgramExercise[] = [];\n  PP_iterate2(evaluatedProgram.weeks, (e) => {\n    if (e.reuse?.fullName === programExercise.fullName) {\n      exercises.push(e);\n    }\n  });\n  return exercises;\n}\n\nexport const Program_fullProgram = memoize(\n  (program: IProgram, settings: ISettings): IProgram => {\n    return program;\n  },\n  { maxSize: 10 }\n);\n\nexport const Program_evaluate = memoize(Program_forceEvaluate, { maxSize: 10 });\n\nexport function Program_getDiffState(\n  state: IProgramState,\n  newState: IProgramState,\n  units: IUnit\n): Record<string, string | undefined> {\n  return ObjectUtils_keys(state).reduce<Record<string, string | undefined>>((memo, key) => {\n    const oldValue = state[key];\n    const newValue = newState[key];\n    if (newValue != null && !Weight_eq(oldValue, newValue)) {\n      const oldValueStr = Weight_display(Weight_convertTo(oldValue as number, units));\n      const newValueStr = Weight_display(Weight_convertTo(newValue as number, units));\n      memo[key] = `${oldValueStr} -> ${newValueStr}`;\n    }\n    return memo;\n  }, {});\n}\n\nexport function Program_getDiffVars(\n  entry: IHistoryEntry,\n  updates: ILiftoscriptEvaluatorUpdate[],\n  bindings: IScriptBindings,\n  settings: ISettings\n): Record<string, string | undefined> {\n  const diffVars: Record<string, string | undefined> = {};\n  if (bindings.rm1 != null) {\n    const oldOnerm = Exercise_onerm(entry.exercise, settings);\n    if (!Weight_eq(oldOnerm, bindings.rm1)) {\n      diffVars[\"1 RM\"] = `${Weight_display(Weight_convertTo(oldOnerm, settings.units))} -> ${Weight_display(\n        Weight_convertTo(bindings.rm1, settings.units)\n      )}`;\n    }\n  }\n  for (const update of updates) {\n    const key = update.type;\n    const value = update.value;\n    const target = value.target;\n    while (target[0] === \"*\") {\n      target.shift();\n    }\n    const keyStr = `${key}${target.length > 0 ? `[${target.join(\":\")}]` : \"\"}`;\n    diffVars[keyStr] = `${value.op !== \"=\" ? `${value.op} ` : \"\"}${Weight_printOrNumber(value.value)}`;\n  }\n  return diffVars;\n}\n\nexport interface IProgressStateChanges {\n  diffState: Record<string, string | undefined>;\n  diffVars: Record<string, string | undefined>;\n  prints: (number | IWeight | IPercentage)[][];\n}\n\nexport function Program_computeProgressStateChanges(\n  entry: IHistoryEntry,\n  dayData: IDayData,\n  settings: ISettings,\n  programExercise: IPlannerProgramExercise,\n  program: IEvaluatedProgram,\n  stats: IStats,\n  userPromptedStateVars?: IProgramState\n): IProgressStateChanges | undefined {\n  const state = PlannerProgramExercise_getState(programExercise);\n  const result = Program_runExerciseFinishDayScript(\n    entry,\n    dayData,\n    settings,\n    state,\n    program.states,\n    programExercise,\n    stats,\n    userPromptedStateVars\n  );\n  if (!result.success) {\n    return undefined;\n  }\n  const { state: newState, updates, bindings } = result.data;\n  return {\n    diffState: Program_getDiffState(state, newState, settings.units),\n    diffVars: Program_getDiffVars(entry, updates, bindings, settings),\n    prints: result.data.prints,\n  };\n}\n\nexport function Program_getEvaluatedProgramFromState(state: IState): IEvaluatedProgram | undefined {\n  const program = Program_getCurrentProgram(state.storage);\n  return program ? Program_evaluate(program, state.storage.settings) : undefined;\n}\n","import { IProgramState, IProgramExerciseWarmupSet, ISettings, IProgramSet, IPercentage } from \"../types\";\nimport { IEvaluatedProgram, Program_getProgramDayExercises } from \"./program\";\nimport {\n  ProgramSet_approxTimeMs,\n  ProgramSet_isEligibleForInferredWeight,\n  ProgramSet_getEvaluatedWeight,\n} from \"./programSet\";\nimport { IWeight } from \"../types\";\nimport { ObjectUtils_keys, ObjectUtils_values, ObjectUtils_clone } from \"../utils/object\";\nimport { Weight_print, Weight_printOrNumber, Weight_isPct, Weight_build, Weight_applyOp, Weight_is } from \"./weight\";\nimport { Exercise_onerm } from \"./exercise\";\nimport { CollectionUtils_compact, CollectionUtils_sortBy } from \"../utils/collection\";\nimport { ScriptRunner } from \"../parser\";\nimport { IAssignmentOp, ILiftoscriptEvaluatorUpdate } from \"../liftoscriptEvaluator\";\nimport { MathUtils_applyOp } from \"../utils/math\";\nimport {\n  IPlannerProgramExercise,\n  IPlannerProgramExerciseEvaluatedSet,\n  IPlannerProgramExerciseWithType,\n} from \"../pages/planner/models/types\";\nimport {\n  PlannerProgramExercise_getStateMetadata,\n  PlannerProgramExercise_sets,\n  PlannerProgramExercise_currentEvaluatedSetVariation,\n  PlannerProgramExercise_getProgressScript,\n  PlannerProgramExercise_getUpdateScript,\n  PlannerProgramExercise_currentEvaluatedSetVariationIndex,\n  PlannerProgramExercise_currentExerciseVariationIndex,\n  PlannerProgramExercise_currentDescriptionIndex,\n} from \"../pages/planner/models/plannerProgramExercise\";\nimport { PP_iterate2 } from \"./pp\";\n\nexport interface IWeightChange {\n  originalWeight: IWeight | IPercentage;\n  weight: IWeight | IPercentage;\n  current: boolean;\n}\n\nexport interface IProgramExerciseExample {\n  title: string;\n  description: string;\n  sets: IProgramSet[];\n  state: IProgramState;\n  finishDayExpr: string;\n  rules: {\n    sets: \"keep\" | \"replace\";\n    reps: \"keep\" | \"keep_if_has_vars\" | \"replace\";\n    weight: \"keep\" | \"keep_if_has_vars\" | \"replace\";\n  };\n}\n\nexport function ProgramExercise_hasUserPromptedVars(programExercise: IPlannerProgramExercise): boolean {\n  const stateMetadata = PlannerProgramExercise_getStateMetadata(programExercise) || {};\n  return ObjectUtils_keys(stateMetadata).some((key) => stateMetadata[key]?.userPrompted);\n}\n\nexport function ProgramExercise_getQuickAddSets(programExercise: IPlannerProgramExercise): boolean {\n  return PlannerProgramExercise_sets(programExercise).some((set) => !!set.repRange?.isQuickAddSet);\n}\n\nexport function ProgramExercise_getEnableRpe(programExercise: IPlannerProgramExercise): boolean {\n  return PlannerProgramExercise_sets(programExercise).some((set) => set.rpe != null);\n}\n\nfunction warmupSetToKey(set: IProgramExerciseWarmupSet): string {\n  return `${set.reps}-${Weight_print(set.threshold)}-${Weight_printOrNumber(set.value)}`;\n}\n\nexport function ProgramExercise_groupWarmupsSets(\n  sets: IProgramExerciseWarmupSet[]\n): [IProgramExerciseWarmupSet, number][] {\n  let lastKey: string | undefined;\n  const groups: [IProgramExerciseWarmupSet, number][] = [];\n  for (const set of sets) {\n    const key = warmupSetToKey(set);\n    if (lastKey == null || lastKey !== key) {\n      groups.push([set, 0]);\n    }\n    groups[groups.length - 1][1] += 1;\n    lastKey = key;\n  }\n  return groups;\n}\n\nexport function ProgramExercise_approxTimeMs(programExercise: IPlannerProgramExercise, settings: ISettings): number {\n  return (\n    PlannerProgramExercise_currentEvaluatedSetVariation(programExercise)?.sets.reduce(\n      (memo, set) => memo + ProgramSet_approxTimeMs(set, settings, programExercise.superset != null),\n      0\n    ) || 0\n  );\n}\n\nexport function ProgramExercise_doesUse1RM(programExercise: IPlannerProgramExercise): boolean {\n  const usesPercentageWeights = programExercise.evaluatedSetVariations.some((v) => {\n    return v.sets.some((set) => {\n      return Weight_isPct(set.weight) || ProgramSet_isEligibleForInferredWeight(set);\n    });\n  });\n  const usesRM1Var = ProgramExercise_isUsingVariable(programExercise, \"rm1\");\n  return usesPercentageWeights || usesRM1Var;\n}\n\nexport function ProgramExercise_doesUseRPE(programExercise: IPlannerProgramExercise): boolean {\n  if (programExercise.globals.logRpe || programExercise.globals.rpe != null) {\n    return true;\n  }\n  return programExercise.evaluatedSetVariations.some((v) => {\n    return v.sets.some((set) => set.logRpe || set.rpe != null);\n  });\n}\n\nexport function ProgramExercise_isUsingVariable(programExercise: IPlannerProgramExercise, name: string): boolean {\n  const expressions = CollectionUtils_compact([\n    PlannerProgramExercise_getProgressScript(programExercise),\n    PlannerProgramExercise_getUpdateScript(programExercise),\n  ]);\n  return expressions.some((e) => ScriptRunner.hasKeyword(e, name));\n}\n\nexport function ProgramExercise_weightChanges(program: IEvaluatedProgram, programExerciseKey: string): IWeightChange[] {\n  const results: Record<string, IWeightChange> = {};\n  PP_iterate2(program.weeks, (exercise) => {\n    if (exercise.key === programExerciseKey) {\n      const currentVariationIndex = PlannerProgramExercise_currentEvaluatedSetVariationIndex(exercise);\n      for (let variationIndex = 0; variationIndex < exercise.evaluatedSetVariations.length; variationIndex += 1) {\n        const variation = exercise.evaluatedSetVariations[variationIndex];\n        for (let setIndex = 0; setIndex < variation.sets.length; setIndex += 1) {\n          const set = variation.sets[setIndex];\n          if (set.weight) {\n            const key = Weight_print(set.weight);\n            results[key] = {\n              originalWeight: set.weight,\n              weight: set.weight,\n              current: results[key]?.current || variationIndex + 1 === currentVariationIndex,\n            };\n          }\n        }\n      }\n    }\n  });\n  return CollectionUtils_sortBy(ObjectUtils_values(results), \"current\", true);\n}\n\nexport function ProgramExercise_applyVariables(\n  programExerciseKey: string,\n  program: IEvaluatedProgram,\n  updates: ILiftoscriptEvaluatorUpdate[],\n  settings: ISettings\n): void {\n  for (const update of updates) {\n    const key = update.type;\n    const value = update.value;\n    const target = value.target;\n    const [week, day, variation, set] = target;\n    let dayIndex = 0;\n    for (let weekIndex = 0; weekIndex < program.weeks.length; weekIndex += 1) {\n      const programWeek = program.weeks[weekIndex];\n      for (let dayInWeekIndex = 0; dayInWeekIndex < programWeek.days.length; dayInWeekIndex += 1) {\n        const programDay = programWeek.days[dayInWeekIndex];\n        const dayExercises = Program_getProgramDayExercises(programDay);\n        for (const exercise of dayExercises) {\n          if (exercise.key !== programExerciseKey) {\n            continue;\n          }\n          for (let variationIndex = 0; variationIndex < exercise.evaluatedSetVariations.length; variationIndex += 1) {\n            const setVariation = exercise.evaluatedSetVariations[variationIndex];\n            const sets = setVariation.sets;\n            if (\n              (week === \"*\" || week === weekIndex + 1) &&\n              (day === \"*\" || day === dayInWeekIndex + 1) &&\n              (variation === \"*\" || variation === variationIndex + 1)\n            ) {\n              if (key === \"numberOfSets\" && typeof value.value === \"number\") {\n                const newValue = MathUtils_applyOp(sets.length, value.value, value.op);\n                const defaultSet: IPlannerProgramExerciseEvaluatedSet = {\n                  maxrep: 1,\n                  weight: Weight_build(100, \"lb\"),\n                  logRpe: false,\n                  isAmrap: false,\n                  isQuickAddSet: false,\n                  askWeight: false,\n                };\n                const lastSet = sets[sets.length - 1] || defaultSet;\n                sets.splice(newValue);\n                for (let i = sets.length; i < newValue; i += 1) {\n                  sets.push(ObjectUtils_clone(lastSet));\n                }\n              }\n            }\n            for (let setIndex = 0; setIndex < sets.length; setIndex += 1) {\n              if (\n                (week === \"*\" || week === weekIndex + 1) &&\n                (day === \"*\" || day === dayInWeekIndex + 1) &&\n                (variation === \"*\" || variation === variationIndex + 1) &&\n                (set === \"*\" || set === setIndex + 1)\n              ) {\n                if (key === \"RPE\") {\n                  operation(exercise, sets[setIndex], settings, \"rpe\", value.value, value.op);\n                } else if (key === \"reps\") {\n                  operation(exercise, sets[setIndex], settings, \"maxrep\", value.value, value.op);\n                } else if (key === \"minReps\") {\n                  operation(exercise, sets[setIndex], settings, \"minrep\", value.value, value.op);\n                } else if (key === \"timers\") {\n                  operation(exercise, sets[setIndex], settings, \"timer\", value.value, value.op);\n                } else if (key === \"setTime\") {\n                  operation(exercise, sets[setIndex], settings, \"setTimer\", value.value, value.op);\n                } else if (key === \"weights\") {\n                  operation(exercise, sets[setIndex], settings, \"weight\", value.value, value.op);\n                } else if (key === \"amraps\") {\n                  operation(exercise, sets[setIndex], settings, \"isAmrap\", value.value, value.op);\n                } else if (key === \"logrpes\") {\n                  operation(exercise, sets[setIndex], settings, \"logRpe\", value.value, value.op);\n                } else if (key === \"askweights\") {\n                  operation(exercise, sets[setIndex], settings, \"askWeight\", value.value, value.op);\n                }\n              }\n            }\n          }\n          if ((week === \"*\" || week === weekIndex + 1) && (day === \"*\" || day === dayInWeekIndex + 1)) {\n            if (key === \"setVariationIndex\" && typeof update.value.value === \"number\") {\n              let indexValue: number;\n              if (update.value.op === \"=\") {\n                indexValue = update.value.value - 1;\n              } else {\n                const currentSetVariationIndex = PlannerProgramExercise_currentEvaluatedSetVariationIndex(exercise);\n                indexValue = Weight_applyOp(\n                  undefined,\n                  currentSetVariationIndex,\n                  update.value.value,\n                  update.value.op\n                ) as number;\n              }\n              indexValue = indexValue % exercise.evaluatedSetVariations.length;\n              exercise.evaluatedSetVariations.forEach((s) => (s.isCurrent = false));\n              const sv = exercise.evaluatedSetVariations[indexValue];\n              if (sv != null) {\n                sv.isCurrent = true;\n              }\n            } else if (key === \"exerciseVariationIndex\" && typeof update.value.value === \"number\") {\n              const variations = exercise.exerciseVariations ?? [];\n              if (variations.length > 0) {\n                let indexValue: number;\n                if (update.value.op === \"=\") {\n                  indexValue = update.value.value - 1;\n                } else {\n                  const currentExerciseVariationIndex = PlannerProgramExercise_currentExerciseVariationIndex(exercise);\n                  indexValue = Weight_applyOp(\n                    undefined,\n                    currentExerciseVariationIndex,\n                    update.value.value,\n                    update.value.op\n                  ) as number;\n                }\n                indexValue = ((indexValue % variations.length) + variations.length) % variations.length;\n                variations.forEach((v) => (v.isCurrent = false));\n                const nextVariation = variations[indexValue];\n                if (nextVariation != null) {\n                  nextVariation.isCurrent = true;\n                  if (nextVariation.exerciseType != null) {\n                    exercise.exerciseType = nextVariation.exerciseType;\n                  }\n                }\n              }\n            } else if (key === \"descriptionIndex\" && typeof update.value.value === \"number\") {\n              let indexValue: number;\n              if (update.value.op === \"=\") {\n                indexValue = update.value.value - 1;\n              } else {\n                const currentDescriptionIndex = PlannerProgramExercise_currentDescriptionIndex(exercise);\n                indexValue = Weight_applyOp(\n                  undefined,\n                  currentDescriptionIndex,\n                  update.value.value,\n                  update.value.op\n                ) as number;\n              }\n              indexValue = indexValue % exercise.descriptions.values.length;\n              exercise.descriptions.values.forEach((s) => (s.isCurrent = false));\n              const d = exercise.descriptions.values[indexValue];\n              if (d != null) {\n                d.isCurrent = true;\n              }\n            }\n          }\n        }\n        dayIndex += 1;\n      }\n    }\n  }\n}\n\nfunction operation(\n  programExercise: IPlannerProgramExerciseWithType,\n  set: IPlannerProgramExerciseEvaluatedSet,\n  settings: ISettings,\n  key: \"maxrep\" | \"minrep\" | \"weight\" | \"rpe\" | \"timer\" | \"setTimer\" | \"logRpe\" | \"isAmrap\" | \"askWeight\",\n  value: IWeight | IPercentage | number,\n  op: IAssignmentOp\n): void {\n  if (op === \"=\") {\n    if (key === \"weight\" && (Weight_is(value) || Weight_isPct(value))) {\n      set[key] = value;\n    } else if (\n      typeof value === \"number\" &&\n      (key === \"maxrep\" || key === \"minrep\" || key === \"timer\" || key === \"setTimer\" || key === \"rpe\")\n    ) {\n      set[key] = value;\n    } else if (typeof value === \"number\" && (key === \"askWeight\" || key === \"isAmrap\" || key === \"logRpe\")) {\n      set[key] = value !== 0;\n    }\n  } else {\n    const onerm = Exercise_onerm(programExercise.exerciseType, settings);\n    let oldValue = typeof set[key] === \"boolean\" ? (set[key] ? 1 : 0) : set[key];\n    if (oldValue == null && ProgramSet_isEligibleForInferredWeight(set)) {\n      const inferredWeight = ProgramSet_getEvaluatedWeight(set, programExercise.exerciseType, settings);\n      oldValue = inferredWeight;\n    }\n    const newValue = Weight_applyOp(onerm, oldValue ?? 0, value, op);\n    if (key === \"weight\" && (Weight_is(newValue) || Weight_isPct(newValue))) {\n      set[key] = newValue;\n    } else if (\n      typeof newValue === \"number\" &&\n      (key === \"maxrep\" || key === \"minrep\" || key === \"timer\" || key === \"setTimer\" || key === \"rpe\")\n    ) {\n      set[key] = newValue;\n    } else if (typeof newValue === \"number\" && (key === \"askWeight\" || key === \"isAmrap\" || key === \"logRpe\")) {\n      set[key] = newValue !== 0;\n    }\n  }\n}\n","import { IPlannerProgramExerciseEvaluatedSet } from \"../pages/planner/models/types\";\nimport { IExerciseType, IProgramSet, ISettings, IWeight } from \"../types\";\nimport { Equipment_getUnitOrDefaultForExerciseType } from \"./equipment\";\nimport { Weight_evaluateWeight, Weight_rpePct, Weight_roundConvertTo } from \"./weight\";\n\nexport function ProgramSet_group(sets: IProgramSet[]): IProgramSet[][] {\n  return sets.reduce<IProgramSet[][]>(\n    (memo, set) => {\n      let lastGroup = memo[memo.length - 1];\n      const last = lastGroup[lastGroup.length - 1];\n      if (\n        last != null &&\n        (last.weightExpr !== set.weightExpr ||\n          last.repsExpr !== set.repsExpr ||\n          last.isAmrap !== set.isAmrap ||\n          last.rpeExpr !== set.rpeExpr ||\n          last.logRpe !== set.logRpe)\n      ) {\n        memo.push([]);\n        lastGroup = memo[memo.length - 1];\n      }\n      lastGroup.push(set);\n      return memo;\n    },\n    [[]]\n  );\n}\n\nexport function ProgramSet_approxSetTimeMs(reps: number | undefined, restTimer: number): number {\n  const secondsPerRep = 7;\n  const prepareTime = 20;\n  const timeToRep = (prepareTime + (reps ?? 0) * secondsPerRep) * 1000;\n  const timeToRest = restTimer * 1000;\n  return timeToRep + timeToRest;\n}\n\nexport function ProgramSet_approxRestTimer(\n  set: Pick<IPlannerProgramExerciseEvaluatedSet, \"timer\">,\n  restTimer: number,\n  supersetTimer?: number\n): number {\n  return set.timer ?? supersetTimer ?? restTimer;\n}\n\nexport function ProgramSet_approxTimeMs(\n  set: IPlannerProgramExerciseEvaluatedSet,\n  settings: ISettings,\n  isSuperset?: boolean\n): number {\n  const supersetTimer = isSuperset ? (settings.timers.superset ?? undefined) : undefined;\n  const restTimer = ProgramSet_approxRestTimer(set, settings.timers.workout || 0, supersetTimer);\n  return ProgramSet_approxSetTimeMs(set.maxrep, restTimer);\n}\n\nexport function ProgramSet_isEligibleForInferredWeight(set: IPlannerProgramExerciseEvaluatedSet): boolean {\n  return set.weight == null && set.maxrep != null && set.rpe != null;\n}\n\nexport function ProgramSet_getEvaluatedWeight(\n  programSet: IPlannerProgramExerciseEvaluatedSet,\n  exerciseType: IExerciseType,\n  settings: ISettings\n): IWeight | undefined {\n  const originalWeight = programSet.weight;\n  const unit = Equipment_getUnitOrDefaultForExerciseType(settings, exerciseType);\n  const evaluatedWeight = originalWeight\n    ? Weight_evaluateWeight(originalWeight, exerciseType, settings)\n    : ProgramSet_isEligibleForInferredWeight(programSet) && programSet.maxrep != null && programSet.rpe != null\n      ? Weight_evaluateWeight(Weight_rpePct(programSet.maxrep, programSet.rpe), exerciseType, settings)\n      : undefined;\n  return evaluatedWeight ? Weight_roundConvertTo(evaluatedWeight, settings, unit, exerciseType) : undefined;\n}\n","import {\n  PlannerProgram_generateFullText,\n  PlannerProgram_topLineItems,\n  PlannerProgram_groupedTopLines,\n  PlannerProgram_compact,\n} from \"../pages/planner/models/plannerProgram\";\nimport {\n  IDayData,\n  IPercentage,\n  IPlannerProgram,\n  IPlannerProgramDay,\n  IPlannerProgramWeek,\n  ISettings,\n  IWeight,\n} from \"../types\";\nimport { n } from \"../utils/math\";\nimport { Dialog_alert } from \"../utils/dialog\";\nimport { ObjectUtils_isEqual, ObjectUtils_entries, ObjectUtils_keys } from \"../utils/object\";\nimport {\n  Weight_eqNull,\n  Weight_eq,\n  Weight_zero,\n  Weight_print,\n  Weight_buildPct,\n  Weight_build,\n  Weight_printNull,\n} from \"./weight\";\nimport {\n  PlannerProgramExercise_currentEvaluatedSetVariationIndex,\n  PlannerProgramExercise_getOnlyChangedState,\n  PlannerProgramExercise_getProgressScript,\n  PlannerProgramExercise_getState,\n  PlannerProgramExercise_getStateMetadata,\n  PlannerProgramExercise_getUpdateScript,\n  PlannerProgramExercise_sets,\n  PlannerProgramExercise_warmups,\n} from \"../pages/planner/models/plannerProgramExercise\";\nimport {\n  IPlannerProgramExercise,\n  IPlannerProgramExerciseEvaluatedSet,\n  IPlannerProgramExerciseEvaluatedSetVariation,\n  IPlannerProgramExerciseWarmupSet,\n} from \"../pages/planner/models/types\";\nimport { IEvaluatedProgram, Program_getProgramExercise } from \"./program\";\nimport { Exercise_get, Exercise_fullName, Exercise_buildName } from \"./exercise\";\nimport { CollectionUtils_compact } from \"../utils/collection\";\nimport { PP_iterate2, PP_iterateTopLineExercises } from \"./pp\";\nimport { PlannerKey_fromFullName, PlannerKey_fromPlannerExercise } from \"../pages/planner/plannerKey\";\nimport { IPlannerTopLineItem } from \"../pages/planner/plannerExerciseEvaluator\";\n\ninterface IPlannerToProgram2Globals {\n  weight?: IWeight | IPercentage;\n  rpe?: number;\n  timer?: number;\n  setTimer?: number;\n  isOverflowSetTimer?: boolean;\n  logRpe?: boolean;\n  askWeight?: boolean;\n}\n\ntype IDereuseDecision = \"sets\" | \"weight\" | \"rpe\" | \"timer\" | \"setTimer\" | \"progress\" | \"update\";\n\ntype IShareablePropertyName = \"progress\" | \"update\" | \"warmup\" | \"id\";\ninterface IPropertyCandidate {\n  location: string;\n  exercise: IPlannerProgramExercise;\n  isOrigin: boolean;\n}\n// Where a shared property gets printed, and which instance it's read from. Those differ because\n// the UI edits shared properties on the first instance only (EditProgramUiHelpers_changeFirstInstance).\n// TODO: once the editProgramExercise UI is gone (the editor sheet edits Liftoscript text directly,\n// so it never goes through here), drop 'exercise' and read the property off the origin instance.\ntype IPropertyTarget = { location: string; exercise: IPlannerProgramExercise };\ntype IPropertyTargets = Record<IShareablePropertyName, Record<string, IPropertyTarget>>;\ntype IPropertyCandidates = Record<IShareablePropertyName, Record<string, IPropertyCandidate[]>>;\n\nexport interface IPlannerToProgramConvertOpts {\n  renameMapping?: Record<string, { to: string; dayData?: Required<IDayData> }>;\n  reorder?: { dayData: Required<IDayData>; fromIndex: number; toIndex: number }[];\n  add?: { dayData: Required<IDayData>; index: number; fullName: string }[];\n}\n\nexport class ProgramToPlanner {\n  constructor(\n    private readonly program: IEvaluatedProgram,\n    private readonly settings: ISettings\n  ) {}\n\n  private getCurrentDescriptionExercise(\n    key: string,\n    weekIndex: number,\n    dayInWeekIndex: number\n  ): IPlannerProgramExercise | undefined {\n    return this.program.weeks[weekIndex]?.days[dayInWeekIndex]?.exercises?.find((e) => e.key === key);\n  }\n\n  private getCurrentDescriptionIndex(key: string, weekIndex: number, dayInWeekIndex: number): number {\n    const exercise = this.getCurrentDescriptionExercise(key, weekIndex, dayInWeekIndex);\n    const descriptions = exercise?.descriptions.values || [];\n    const index = descriptions.findIndex((s) => s.isCurrent);\n    return index === -1 ? 0 : index;\n  }\n\n  private shouldReuseSets(programExercise: IPlannerProgramExercise): boolean {\n    return !!programExercise.reuse;\n  }\n\n  private getDereuseDecisions(programExercise: IPlannerProgramExercise): IDereuseDecision[] {\n    const dereuseDecisions: Set<IDereuseDecision> = new Set();\n    const reuseExercise = programExercise.reuse?.exercise;\n    if (!reuseExercise) {\n      return Array.from(dereuseDecisions);\n    }\n    const globals = this.getGlobals(programExercise);\n    const reusedGlobals = this.getGlobals(reuseExercise);\n    if (programExercise.evaluatedSetVariations.length !== reuseExercise.evaluatedSetVariations.length) {\n      dereuseDecisions.add(\"sets\");\n    }\n    if (\n      PlannerProgramExercise_currentEvaluatedSetVariationIndex(programExercise) !==\n      PlannerProgramExercise_currentEvaluatedSetVariationIndex(reuseExercise)\n    ) {\n      dereuseDecisions.add(\"sets\");\n    }\n    if (reuseExercise.progress != null || programExercise.progress != null) {\n      if (\n        programExercise.progress == null ||\n        programExercise.progress.type !== reuseExercise.progress?.type ||\n        (programExercise.progress.reuse\n          ? programExercise.progress.reuse?.fullName !== reuseExercise.fullName\n          : programExercise.progress.script !== reuseExercise.progress.script) ||\n        Object.keys(PlannerProgramExercise_getOnlyChangedState(programExercise)).length > 0\n      ) {\n        dereuseDecisions.add(\"progress\");\n      }\n    }\n    if (reuseExercise.update != null || programExercise.update != null) {\n      if (\n        programExercise.update == null ||\n        (programExercise.update.reuse\n          ? programExercise.update.reuse?.fullName !== reuseExercise.fullName\n          : programExercise.update.script !== reuseExercise.update?.script)\n      ) {\n        dereuseDecisions.add(\"update\");\n      }\n    }\n    if (programExercise.evaluatedSetVariations.length === reuseExercise.evaluatedSetVariations.length) {\n      for (let i = 0; i < programExercise.evaluatedSetVariations.length; i += 1) {\n        const programVariation = programExercise.evaluatedSetVariations[i];\n        const reuseVariation = reuseExercise.evaluatedSetVariations[i];\n        if (programVariation.sets.length !== reuseVariation.sets.length) {\n          dereuseDecisions.add(\"sets\");\n        }\n        for (let j = 0; j < programVariation.sets.length; j += 1) {\n          const programSet = programVariation.sets[j];\n          const reuseSet = reuseVariation.sets[j];\n          if (programSet.maxrep !== reuseSet?.maxrep || programSet.minrep !== reuseSet?.minrep) {\n            dereuseDecisions.add(\"sets\");\n          }\n          if (\n            reuseSet\n              ? !Weight_eqNull(programSet.weight, reuseSet.weight) || programSet.askWeight !== reuseSet.askWeight\n              : !Weight_eq(globals.weight || Weight_zero, reusedGlobals.weight || Weight_zero) ||\n                globals.askWeight !== reusedGlobals.askWeight\n          ) {\n            if (globals.weight != null) {\n              dereuseDecisions.add(\"weight\");\n            } else {\n              dereuseDecisions.add(\"sets\");\n            }\n          }\n          if (\n            reuseSet\n              ? programSet.rpe !== reuseSet.rpe || programSet.logRpe !== reuseSet.logRpe\n              : globals.rpe !== reusedGlobals.rpe || globals.logRpe !== reusedGlobals.logRpe\n          ) {\n            if (globals.rpe != null) {\n              dereuseDecisions.add(\"rpe\");\n            } else {\n              dereuseDecisions.add(\"sets\");\n            }\n          }\n          if (reuseSet ? programSet.timer !== reuseSet.timer : globals.timer !== reusedGlobals.timer) {\n            if (globals.timer != null) {\n              dereuseDecisions.add(\"timer\");\n            } else {\n              dereuseDecisions.add(\"sets\");\n            }\n          }\n          if (\n            programSet.setTimer !== reuseSet?.setTimer ||\n            !!programSet.isOverflowSetTimer !== !!reuseSet?.isOverflowSetTimer\n          ) {\n            if (globals.setTimer != null) {\n              dereuseDecisions.add(\"setTimer\");\n            } else {\n              dereuseDecisions.add(\"sets\");\n            }\n          }\n        }\n      }\n    }\n    return Array.from(dereuseDecisions);\n  }\n\n  private reorderGroupedTopLine(\n    groupedTopLine: IPlannerTopLineItem[][][][],\n    reorders: IPlannerToProgramConvertOpts[\"reorder\"]\n  ): IPlannerTopLineItem[][][][] {\n    if (!reorders) {\n      return groupedTopLine;\n    }\n    for (const reorder of reorders) {\n      const groupedDay = groupedTopLine[reorder.dayData.week - 1]?.[reorder.dayData.dayInWeek - 1];\n      if (groupedDay) {\n        const indexMap = groupedDay.reduce<{ result: Record<number, number>; i: number }>(\n          ({ result, i }, group, index) => {\n            const exercise = group.find((item) => item.type === \"exercise\");\n            if (exercise && !exercise.notused) {\n              result[i] = index;\n              i += 1;\n            }\n            return { result, i };\n          },\n          { result: {}, i: 0 }\n        ).result;\n        const from = groupedDay[indexMap[reorder.fromIndex]];\n        if (from) {\n          groupedDay.splice(indexMap[reorder.fromIndex], 1);\n          groupedDay.splice(indexMap[reorder.toIndex], 0, from);\n        }\n      }\n    }\n    return groupedTopLine;\n  }\n\n  private addGroupedTopLine(\n    groupedTopLine: IPlannerTopLineItem[][][][],\n    adds: IPlannerToProgramConvertOpts[\"add\"]\n  ): IPlannerTopLineItem[][][][] {\n    if (!adds) {\n      return groupedTopLine;\n    }\n    for (const add of adds) {\n      const groupedDay = groupedTopLine[add.dayData.week - 1]?.[add.dayData.dayInWeek - 1];\n      if (groupedDay) {\n        groupedDay.splice(add.index, 0, [\n          { type: \"exercise\", value: PlannerKey_fromFullName(add.fullName, this.settings.exercises) },\n        ]);\n      }\n    }\n    return groupedTopLine;\n  }\n\n  private getRenamedValue(\n    opts: IPlannerToProgramConvertOpts,\n    line: IPlannerTopLineItem,\n    weekIndex: number,\n    dayInWeekIndex: number\n  ): string {\n    const renamedValue = opts.renameMapping?.[line.value];\n    if (\n      renamedValue &&\n      (!renamedValue.dayData ||\n        (renamedValue.dayData.week === weekIndex + 1 && renamedValue.dayData.dayInWeek === dayInWeekIndex + 1))\n    ) {\n      return renamedValue.to;\n    } else {\n      return line.value;\n    }\n  }\n\n  private addExerciseDescriptions(\n    exercise: IPlannerProgramExercise | undefined,\n    weekIndex: number,\n    dayInWeekIndex: number,\n    addedCurrentDescription: boolean\n  ): { lines: string[]; addedCurrentDescription: boolean } | undefined {\n    if (!exercise) {\n      return undefined;\n    }\n    if (\n      exercise?.descriptions.reuse == null ||\n      !ObjectUtils_isEqual(\n        exercise.descriptions.values || [],\n        exercise.descriptions.reuse.exercise?.descriptions.values || []\n      )\n    ) {\n      const lines: string[] = [];\n      const currentIndex = this.getCurrentDescriptionIndex(exercise.key, weekIndex, dayInWeekIndex);\n      for (let i = 0; i < exercise.descriptions.values.length; i += 1) {\n        if (i > 0) {\n          lines.push(\"\");\n        }\n        const description = exercise.descriptions.values[i];\n        const parts = description.value.split(\"\\n\");\n        for (const part of parts) {\n          if (currentIndex !== 0 && currentIndex === i && !addedCurrentDescription) {\n            lines.push(`// ! ${part}`);\n            addedCurrentDescription = true;\n          } else {\n            lines.push(`// ${part}`);\n          }\n        }\n      }\n      return { lines, addedCurrentDescription };\n    } else if (exercise?.descriptions.reuse?.exercise) {\n      const reusedExercise = exercise.descriptions.reuse.exercise;\n      const reusedDayData = reusedExercise.dayData;\n      const currentWeekReusedExercisesCount = this.program.weeks[weekIndex]?.days.filter((day) => {\n        return day.exercises.some((e) => e.key === reusedExercise.key);\n      }).length;\n      if (currentWeekReusedExercisesCount === 1 && reusedDayData.week === weekIndex + 1) {\n        return { lines: [`// ...${reusedExercise.fullName}`], addedCurrentDescription };\n      } else {\n        return {\n          lines: [`// ...${reusedExercise.fullName}[${reusedDayData.week}:${reusedDayData.dayInWeek}]`],\n          addedCurrentDescription,\n        };\n      }\n    } else {\n      return undefined;\n    }\n  }\n\n  private addPropertyCandidate(\n    candidates: Record<string, IPropertyCandidate[]>,\n    key: string,\n    candidate: IPropertyCandidate\n  ): void {\n    candidates[key] = candidates[key] || [];\n    candidates[key].push(candidate);\n  }\n\n  // 'progress'/'update'/'warmup' are shared across every instance of an exercise, so they're printed\n  // only once. Authors deliberately place bulky blocks away from the top of the program (e.g. on the\n  // last week), so print them back where they were written instead of on the first instance.\n  // A repeat-materialized copy carries the original's syntax points, so it's excluded from being the\n  // origin - otherwise every week a `[1-3]` line spans would claim to be where it was written.\n  private getPropertyTargets(\n    groupedTopLineMap: IPlannerTopLineItem[][][][],\n    opts: IPlannerToProgramConvertOpts\n  ): IPropertyTargets {\n    const candidates: IPropertyCandidates = { progress: {}, update: {}, warmup: {}, id: {} };\n    PP_iterateTopLineExercises(groupedTopLineMap, (line, weekIndex, dayInWeekIndex, dayIndex) => {\n      const value = this.getRenamedValue(opts, line, weekIndex, dayInWeekIndex);\n      const exercise = Program_getProgramExercise(dayIndex + 1, this.program, value);\n      if (exercise == null) {\n        return;\n      }\n      const location = `${weekIndex}_${dayInWeekIndex}`;\n      const dereuseDecisions = this.shouldReuseSets(exercise) ? this.getDereuseDecisions(exercise) : [];\n      const progress = exercise.progress;\n      if (\n        progress != null &&\n        progress.type !== \"none\" &&\n        (progress.reuse || progress.script) &&\n        (!exercise.reuse || dereuseDecisions.includes(\"progress\"))\n      ) {\n        this.addPropertyCandidate(candidates.progress, exercise.key, {\n          location,\n          exercise,\n          isOrigin: exercise.points.progressPoint != null && !exercise.isRepeat,\n        });\n      }\n      const update = exercise.update;\n      if (\n        update != null &&\n        (update.reuse || update.script) &&\n        (!exercise.reuse || dereuseDecisions.includes(\"update\"))\n      ) {\n        this.addPropertyCandidate(candidates.update, exercise.key, {\n          location,\n          exercise,\n          isOrigin: exercise.points.updatePoint != null && !exercise.isRepeat,\n        });\n      }\n      if (exercise.warmupSets != null) {\n        this.addPropertyCandidate(candidates.warmup, exercise.key, {\n          location,\n          exercise,\n          isOrigin: exercise.points.warmupPoint != null && !exercise.isRepeat,\n        });\n      }\n      if ((exercise.tags || []).length > 0) {\n        this.addPropertyCandidate(candidates.id, exercise.key, {\n          location,\n          exercise,\n          isOrigin: exercise.points.idPoint != null && !exercise.isRepeat,\n        });\n      }\n    });\n    const targets: IPropertyTargets = { progress: {}, update: {}, warmup: {}, id: {} };\n    for (const property of ObjectUtils_keys(candidates)) {\n      for (const key of ObjectUtils_keys(candidates[property])) {\n        const list = candidates[property][key];\n        const origin = list.find((c) => c.isOrigin) || list[0];\n        if (origin != null) {\n          targets[property][key] = { location: origin.location, exercise: list[0].exercise };\n        }\n      }\n    }\n    return targets;\n  }\n\n  private getPropertySource(\n    targets: IPropertyTargets,\n    property: IShareablePropertyName,\n    key: string,\n    weekIndex: number,\n    dayInWeekIndex: number,\n    fallback: IPlannerProgramExercise\n  ): IPlannerProgramExercise | undefined {\n    const target = targets[property][key];\n    if (target == null) {\n      return fallback;\n    }\n    return target.location === `${weekIndex}_${dayInWeekIndex}` ? target.exercise : undefined;\n  }\n\n  public convertToPlanner(opts: IPlannerToProgramConvertOpts = {}): IPlannerProgram {\n    const plannerWeeks: IPlannerProgramWeek[] = [];\n    const plannerProgram = this.program.planner;\n    if (this.program.errors.length > 0) {\n      const error = this.program.errors[0];\n      const msg = `There's an error during evaluating a program, week ${error.dayData.week}, day: ${error.dayData.dayInWeek}. Please fix it to proceed.\\n\\n${error.error.toString()}`;\n      console.log(PlannerProgram_generateFullText(plannerProgram.weeks));\n      Dialog_alert(msg);\n      throw error.error;\n    }\n    const topLineMap = PlannerProgram_topLineItems(plannerProgram, this.settings);\n    let groupedTopLineMap = PlannerProgram_groupedTopLines(topLineMap);\n    groupedTopLineMap = opts.reorder ? this.reorderGroupedTopLine(groupedTopLineMap, opts.reorder) : groupedTopLineMap;\n    groupedTopLineMap = opts.add ? this.addGroupedTopLine(groupedTopLineMap, opts.add) : groupedTopLineMap;\n    const propertyTargets = this.getPropertyTargets(groupedTopLineMap, opts);\n    let dayIndex = 0;\n    const addedProgressMap: Record<string, boolean> = {};\n    const addedUpdateMap: Record<string, boolean> = {};\n    const addedWarmupsMap: Record<string, boolean> = {};\n    const addedIdMap: Record<string, boolean> = {};\n\n    for (let weekIndex = 0; weekIndex < this.program.weeks.length; weekIndex += 1) {\n      const week = this.program.weeks[weekIndex];\n      const plannerWeek: IPlannerProgramWeek = { name: week.name, days: [], description: week.description };\n      for (let dayInWeekIndex = 0; dayInWeekIndex < week.days.length; dayInWeekIndex += 1) {\n        const programDay = week.days[dayInWeekIndex];\n        const plannerDay: IPlannerProgramDay = { name: programDay.name, exerciseText: \"\" };\n        let descriptionIndex: number | undefined = undefined;\n        let addedCurrentDescription = false;\n        let finishedToAddDescription = false;\n        const groupedTopLines = groupedTopLineMap[weekIndex][dayInWeekIndex];\n        let groupTextArr: string[] = [];\n        groupLoop: for (let groupIndex = 0; groupIndex < groupedTopLines.length; groupIndex += 1) {\n          const exerciseTextArr: string[] = [];\n          const group = groupedTopLines[groupIndex];\n          for (let lineIndex = 0; lineIndex < group.length; lineIndex += 1) {\n            const line = group[lineIndex];\n            switch (line.type) {\n              case \"comment\": {\n                exerciseTextArr.push(line.value);\n                break;\n              }\n              case \"description\": {\n                let key: string | undefined;\n                for (let i = lineIndex; i < group.length; i += 1) {\n                  if (group[i].type === \"exercise\") {\n                    key = this.getRenamedValue(opts, group[i], weekIndex, dayInWeekIndex);\n                    break;\n                  }\n                }\n                if (descriptionIndex == null) {\n                  descriptionIndex = 0;\n                }\n                if (finishedToAddDescription) {\n                  break;\n                }\n                if (key != null) {\n                  const exercise = this.getCurrentDescriptionExercise(key, weekIndex, dayInWeekIndex);\n                  const result = this.addExerciseDescriptions(\n                    exercise,\n                    weekIndex,\n                    dayInWeekIndex,\n                    addedCurrentDescription\n                  );\n                  if (result) {\n                    exerciseTextArr.push(...result.lines);\n                    addedCurrentDescription = result.addedCurrentDescription;\n                    finishedToAddDescription = true;\n                  } else {\n                    const currentIndex = this.getCurrentDescriptionIndex(key, weekIndex, dayInWeekIndex);\n                    if (currentIndex !== 0 && currentIndex === descriptionIndex && !addedCurrentDescription) {\n                      exerciseTextArr.push(line.value.replace(/^\\/\\/\\s*!?\\s*/, \"// ! \"));\n                      addedCurrentDescription = true;\n                    } else {\n                      exerciseTextArr.push(line.value.replace(/^(\\/\\/\\s*)!\\s*/, \"$1\"));\n                    }\n                  }\n                } else {\n                  exerciseTextArr.push(line.value.replace(/^(\\/\\/\\s*)!\\s*/, \"$1\"));\n                }\n                break;\n              }\n              case \"empty\": {\n                if (!finishedToAddDescription) {\n                  exerciseTextArr.push(\"\");\n                  if (descriptionIndex != null) {\n                    descriptionIndex += 1;\n                  }\n                }\n                break;\n              }\n              case \"exercise\": {\n                descriptionIndex = undefined;\n                const value = this.getRenamedValue(opts, line, weekIndex, dayInWeekIndex);\n                const evalExercise = Program_getProgramExercise(dayIndex + 1, this.program, value)!;\n\n                if (evalExercise == null) {\n                  continue groupLoop;\n                }\n\n                const key = evalExercise.key;\n\n                if (\n                  !finishedToAddDescription &&\n                  (evalExercise.descriptions.reuse || evalExercise.descriptions.values.length > 0)\n                ) {\n                  const result = this.addExerciseDescriptions(\n                    evalExercise,\n                    weekIndex,\n                    dayInWeekIndex,\n                    addedCurrentDescription\n                  );\n                  if (result) {\n                    exerciseTextArr.push(...result.lines);\n                  }\n                }\n\n                finishedToAddDescription = false;\n                addedCurrentDescription = false;\n\n                let plannerExercise = \"\";\n                plannerExercise += this.getExerciseName(evalExercise);\n                plannerExercise += \" / \";\n                if (evalExercise.notused) {\n                  plannerExercise += \"used: none / \";\n                }\n                const variations = evalExercise.evaluatedSetVariations;\n                const globals = this.getGlobals(evalExercise);\n\n                const shouldReuseSets = this.shouldReuseSets(evalExercise);\n                const dereuseDecisions = shouldReuseSets ? this.getDereuseDecisions(evalExercise) : [];\n                if (shouldReuseSets) {\n                  plannerExercise += this.reuseToStr(evalExercise);\n\n                  if (dereuseDecisions.includes(\"sets\")) {\n                    plannerExercise +=\n                      ` / ` +\n                      variations\n                        .map((v, i) => {\n                          return this.variationToString(v, globals, i, evalExercise);\n                        })\n                        .join(\" / \");\n                  }\n\n                  const overriddenGlobals: string[] = [];\n                  if (dereuseDecisions.includes(\"weight\") && globals.weight != null) {\n                    overriddenGlobals.push(`${this.weightExprToStr(globals.weight)}${globals.askWeight ? \"+\" : \"\"}`);\n                  } else if (dereuseDecisions.includes(\"weight\") && globals.askWeight) {\n                    overriddenGlobals.push(\"?+\");\n                  }\n                  if (dereuseDecisions.includes(\"rpe\") && globals.rpe != null) {\n                    overriddenGlobals.push(`@${n(globals.rpe)}${globals.logRpe ? \"+\" : \"\"}`);\n                  }\n                  if (\n                    globals.setTimer != null &&\n                    (dereuseDecisions.includes(\"setTimer\") ||\n                      dereuseDecisions.includes(\"timer\") ||\n                      dereuseDecisions.includes(\"sets\"))\n                  ) {\n                    // The rest timer is embedded in the setTimer|rest token, so any timer-ish change\n                    // (and materialized sets, which skip per-set timer tokens) restates the whole token.\n                    overriddenGlobals.push(this.setTimerGlobalToStr(globals));\n                  } else if (dereuseDecisions.includes(\"timer\") && globals.timer != null) {\n                    overriddenGlobals.push(`${n(globals.timer)}s`);\n                  }\n                  if (overriddenGlobals.length > 0) {\n                    plannerExercise += ` / ${overriddenGlobals.join(\" \")}`;\n                  }\n                } else {\n                  if (evalExercise.setVariations.length > 0) {\n                    plannerExercise += variations\n                      .map((v, i) => this.variationToString(v, globals, i, evalExercise))\n                      .join(\" / \");\n                  }\n\n                  const globalsStr: string[] = [];\n                  if (globals.weight != null) {\n                    globalsStr.push(`${this.weightExprToStr(globals.weight)}${globals.askWeight ? \"+\" : \"\"}`);\n                  } else if (globals.askWeight) {\n                    globalsStr.push(\"?+\");\n                  }\n                  if (globals.rpe != null) {\n                    globalsStr.push(`@${globals.rpe}${globals.logRpe ? \"+\" : \"\"}`);\n                  }\n                  if (globals.setTimer != null) {\n                    globalsStr.push(this.setTimerGlobalToStr(globals));\n                  } else if (globals.timer != null) {\n                    globalsStr.push(`${globals.timer}s`);\n                  }\n                  if (globalsStr.length > 0) {\n                    plannerExercise += ` / ${globalsStr.join(\" \")}`;\n                  }\n                }\n\n                const warmupSource =\n                  !addedWarmupsMap[key] && evalExercise?.warmupSets\n                    ? this.getPropertySource(propertyTargets, \"warmup\", key, weekIndex, dayInWeekIndex, evalExercise)\n                    : undefined;\n                if (warmupSource != null) {\n                  const warmupSets = this.getWarmupSets(warmupSource);\n                  if (warmupSets != null) {\n                    plannerExercise += ` / warmup: ${warmupSets}`;\n                    addedWarmupsMap[key] = true;\n                  }\n                }\n\n                // Printed at the instance the author wrote it on, like the other shared properties.\n                // Every instance of a key carries identical tags (PlannerEvaluator_fillInMetadata\n                // rejects anything else), so which one prints them doesn't change the value - but\n                // printing them on the first instance put them on a line compaction may delete.\n                const idSource =\n                  !addedIdMap[key] && (evalExercise.tags || []).length > 0\n                    ? this.getPropertySource(propertyTargets, \"id\", key, weekIndex, dayInWeekIndex, evalExercise)\n                    : undefined;\n                if (idSource != null) {\n                  plannerExercise += ` / ${this.idToStr(idSource)}`;\n                  addedIdMap[key] = true;\n                }\n\n                const superset = evalExercise.superset?.name;\n                if (superset) {\n                  plannerExercise += ` / superset: ${superset}`;\n                }\n\n                const update = evalExercise.update;\n                if (!addedUpdateMap[key] && update && (update.reuse || update.script)) {\n                  if (!evalExercise.reuse || dereuseDecisions.includes(\"update\")) {\n                    const source = this.getPropertySource(\n                      propertyTargets,\n                      \"update\",\n                      key,\n                      weekIndex,\n                      dayInWeekIndex,\n                      evalExercise\n                    );\n                    if (source != null) {\n                      const updateStr = ProgramToPlanner.getUpdate(source, this.settings);\n                      if (updateStr) {\n                        plannerExercise += ` / ${updateStr}`;\n                      }\n                      addedUpdateMap[key] = true;\n                    }\n                  } else if (update.reuse?.fullName === evalExercise.reuse.fullName) {\n                    addedUpdateMap[key] = true;\n                  }\n                }\n\n                const progress = evalExercise.progress;\n                if (progress && progress.type === \"none\") {\n                  plannerExercise += ` / progress: none`;\n                } else if (!addedProgressMap[key] && progress && (progress.reuse || progress.script)) {\n                  if (!evalExercise.reuse || dereuseDecisions.includes(\"progress\")) {\n                    const source = this.getPropertySource(\n                      propertyTargets,\n                      \"progress\",\n                      key,\n                      weekIndex,\n                      dayInWeekIndex,\n                      evalExercise\n                    );\n                    if (source != null) {\n                      const progressStr = ProgramToPlanner.getProgress(source, this.settings, false);\n                      if (progressStr) {\n                        plannerExercise += ` / ${progressStr}`;\n                      }\n                      addedProgressMap[key] = true;\n                    }\n                  } else if (progress.reuse?.fullName === evalExercise.reuse.fullName) {\n                    addedProgressMap[key] = true;\n                  }\n                }\n                exerciseTextArr.push(plannerExercise);\n                break;\n              }\n            }\n          }\n          if (exerciseTextArr.length > 0) {\n            groupTextArr = groupTextArr.concat(exerciseTextArr);\n          }\n        }\n        plannerDay.exerciseText = groupTextArr.join(\"\\n\");\n        plannerDay.description = programDay.description;\n        plannerWeek.days.push(plannerDay);\n        dayIndex += 1;\n      }\n      plannerWeeks.push(plannerWeek);\n    }\n    const result: IPlannerProgram = { vtype: \"planner\", name: this.program.name, weeks: plannerWeeks };\n    const repeatingExercises = new Set<string>();\n    PP_iterate2(this.program.weeks, (exercise) => {\n      if (exercise.repeat != null && exercise.repeat.length > 0) {\n        const key = PlannerKey_fromPlannerExercise(exercise, this.settings);\n        repeatingExercises.add(key);\n      }\n    });\n    const newPlanner = PlannerProgram_compact(\n      this.program.planner,\n      result,\n      this.settings,\n      repeatingExercises,\n      opts.renameMapping\n    );\n    // console.log(PlannerProgram.generateFullText(newPlanner.weeks));\n    return newPlanner;\n  }\n\n  // The exercise as the evaluator sees it, printed back as Liftoscript: every `...reuse`\n  // resolved into the values it stands for, and every property that governs the exercise on the\n  // line even when it's declared on another week. Read-only — it is what the sheet shows when\n  // asked what a line means, never what gets saved, which is why it can ignore both the reuse\n  // the author wrote and the once-per-exercise placement rules convertToPlanner keeps to.\n  public materializeExercise(exercise: IPlannerProgramExercise): string {\n    const parts: string[] = [this.getExerciseName(exercise)];\n    if (exercise.notused) {\n      parts.push(\"used: none\");\n    }\n    // From evaluatedSetVariations rather than setVariations: an exercise that only reuses sets\n    // has none of its own, and those resolved sets are the whole point of the view.\n    //\n    // An empty variation is skipped rather than printed: a template that carries only properties\n    // (`tmpl / used: none / progress: ...`) has one, and the set printer's empty-list fallback\n    // would invent a `0x1 0lb` for it.\n    const variations = exercise.evaluatedSetVariations;\n    const globals = this.getGlobals(exercise);\n    for (let i = 0; i < variations.length; i += 1) {\n      if (variations[i].sets.length > 0) {\n        parts.push(this.variationToString(variations[i], globals, i, exercise));\n      }\n    }\n    const globalsStr: string[] = [];\n    if (globals.weight != null) {\n      globalsStr.push(`${this.weightExprToStr(globals.weight)}${globals.askWeight ? \"+\" : \"\"}`);\n    } else if (globals.askWeight) {\n      globalsStr.push(\"?+\");\n    }\n    if (globals.rpe != null) {\n      globalsStr.push(`@${n(globals.rpe)}${globals.logRpe ? \"+\" : \"\"}`);\n    }\n    if (globals.setTimer != null) {\n      globalsStr.push(this.setTimerGlobalToStr(globals));\n    } else if (globals.timer != null) {\n      globalsStr.push(`${n(globals.timer)}s`);\n    }\n    if (globalsStr.length > 0) {\n      parts.push(globalsStr.join(\" \"));\n    }\n    const warmupSets = this.warmupSetsToStr(PlannerProgramExercise_warmups(exercise));\n    if (warmupSets != null) {\n      parts.push(`warmup: ${warmupSets}`);\n    }\n    if ((exercise.tags || []).length > 0) {\n      parts.push(this.idToStr(exercise));\n    }\n    if (exercise.superset?.name) {\n      parts.push(`superset: ${exercise.superset.name}`);\n    }\n    const update = ProgramToPlanner.getUpdate(exercise, this.settings, false, true);\n    if (update) {\n      parts.push(update);\n    }\n    const progress = ProgramToPlanner.getProgress(exercise, this.settings, false, true);\n    if (progress) {\n      parts.push(progress);\n    }\n    return parts.join(\" / \");\n  }\n\n  private getExerciseName(programExercise: IPlannerProgramExercise): string {\n    const variations = programExercise.exerciseVariations;\n    if (variations != null && variations.length > 1) {\n      const currentIndex = variations.findIndex((v) => v.isCurrent);\n      const activeIndex = currentIndex === -1 ? 0 : currentIndex;\n      const parts = variations.map((variation, i) => {\n        const label = i === 0 ? programExercise.label : undefined;\n        const segment = variation.exerciseType\n          ? Exercise_fullName(Exercise_get(variation.exerciseType, this.settings.exercises), this.settings, label)\n          : Exercise_buildName(variation.name, this.settings, label);\n        return `${i === activeIndex && i > 0 ? \"! \" : \"\"}${segment}`;\n      });\n      let name = parts.join(\" | \");\n      if (programExercise.order > 0) {\n        name = `${name}[${programExercise.order}]`;\n      }\n      return name;\n    } else if (programExercise.exerciseType) {\n      const exercise = Exercise_get(programExercise.exerciseType, this.settings.exercises);\n      let name = Exercise_fullName(exercise, this.settings, programExercise.label);\n      if (programExercise.order > 0) {\n        name = `${name}[${programExercise.order}]`;\n      }\n      return name;\n    } else {\n      return programExercise.fullName;\n    }\n  }\n\n  private reuseToStr(programExercise: IPlannerProgramExercise): string {\n    const reuseExercise = programExercise.reuse?.exercise;\n    if (!reuseExercise) {\n      throw new Error(\"reuse.exercise is required\");\n    }\n    const reuse = programExercise.reuse;\n    if (!reuse) {\n      throw new Error(\"reuse is required\");\n    }\n    let str = \"...\";\n    if (reuseExercise.exerciseType) {\n      const exercise = Exercise_get(reuseExercise.exerciseType, this.settings.exercises);\n      const reuseStr = Exercise_fullName(exercise, this.settings, reuseExercise.label);\n      str += reuseStr;\n    } else {\n      str += reuseExercise.fullName;\n    }\n    if (reuse.week || reuse.day) {\n      const weekAndDay = CollectionUtils_compact([reuse.week, reuse.day]).join(\":\");\n      str += `[${weekAndDay}]`;\n    }\n    return str;\n  }\n\n  public static getUpdate(\n    programExercise: IPlannerProgramExercise,\n    settings: ISettings,\n    hideScript?: boolean,\n    resolveReuse?: boolean\n  ): string {\n    const update = programExercise.update ?? (resolveReuse ? programExercise.reuse?.exercise?.update : undefined);\n    if (!update) {\n      return \"\";\n    }\n    // Only as far as the app itself resolves: past a couple of hops the runtime can't find the\n    // script either (progress.ts's update runner reads the same getter and does nothing without\n    // one), so printing the chain out here would promise behaviour that never runs. Falls through\n    // to naming the reuse instead — which is what the exercise really has.\n    if (resolveReuse) {\n      const script = PlannerProgramExercise_getUpdateScript(programExercise);\n      if (script != null) {\n        return `update: custom() ${hideScript ? \"{~ ... ~}\" : script}`;\n      }\n    }\n    if (update.reuse) {\n      if (update.reuse.exercise?.exerciseType) {\n        const exercise = Exercise_get(update.reuse.exercise.exerciseType, settings.exercises);\n        const fullName = Exercise_fullName(exercise, settings, update.reuse.exercise.label);\n        return `update: custom() { ...${fullName} }`;\n      } else {\n        return `update: custom() { ...${update.reuse.exercise?.fullName || update.reuse.fullName} }`;\n      }\n    } else {\n      return `update: custom() ${hideScript ? \"{~ ... ~}\" : update.script}`;\n    }\n  }\n\n  private idToStr(programExercise: IPlannerProgramExercise): string {\n    return `id: tags(${(programExercise.tags || []).join(\", \")})`;\n  }\n\n  public static getProgress(\n    programExercise: IPlannerProgramExercise,\n    settings: ISettings,\n    hideScript?: boolean,\n    resolveReuse?: boolean\n  ): string {\n    const progress = programExercise.progress ?? (resolveReuse ? programExercise.reuse?.exercise?.progress : undefined);\n    if (!progress) {\n      return \"\";\n    }\n    let progressStr = `progress: ${progress.type}`;\n    const state = PlannerProgramExercise_getState(programExercise);\n    const stateMetadata = PlannerProgramExercise_getStateMetadata(programExercise);\n    if (progress.type === \"custom\") {\n      // Resolved, every variable is spelled out: the ones inherited from the reuse target are\n      // exactly the ones the reader can't see from here.\n      const argsState = resolveReuse ? state : PlannerProgramExercise_getOnlyChangedState(programExercise);\n      progressStr += `(${ObjectUtils_entries(argsState)\n        .map(([k, v]) => {\n          return `${k}${stateMetadata[k]?.userPrompted ? \"+\" : \"\"}: ${Weight_print(v)}`;\n        })\n        .join(\", \")})`;\n    } else if (progress.type === \"lp\") {\n      const increment = state.increment as IWeight | IPercentage;\n      const successes = state.successes as number;\n      const successCounter = state.successCounter as number;\n      const decrement = state.decrement as IWeight | IPercentage;\n      const failures = state.failures as number;\n      const failureCounter = state.failureCounter as number;\n      const args: string[] = [];\n      args.push(Weight_print(increment));\n      if (successes > 1 || decrement.value > 0) {\n        args.push(`${successes}`);\n      }\n      if (successes > 1 || decrement.value > 0) {\n        args.push(`${successCounter}`);\n      }\n      if (decrement.value > 0) {\n        args.push(Weight_print(decrement));\n      }\n      if (failures > 1) {\n        args.push(`${failures}`);\n      }\n      if (failures > 1) {\n        args.push(`${failureCounter}`);\n      }\n      progressStr += `(${args.join(\", \")})`;\n    } else if (progress.type === \"dp\") {\n      const increment = state.increment as IWeight | IPercentage;\n      const minReps = state.minReps as number;\n      const maxReps = state.maxReps as number;\n      const args = [Weight_print(increment), `${minReps}`, `${maxReps}`];\n      progressStr += `(${args.join(\", \")})`;\n    } else if (progress.type === \"sum\") {\n      const reps = state.reps as number;\n      const increment = state.increment as IWeight | IPercentage;\n      const args = [`${reps}`, Weight_print(increment)];\n      progressStr += `(${args.join(\", \")})`;\n    }\n    if (progress.type === \"custom\") {\n      const resolvedScript = resolveReuse ? PlannerProgramExercise_getProgressScript(programExercise) : undefined;\n      if (resolvedScript != null) {\n        progressStr += hideScript ? ` {~ ... ~}` : ` ${resolvedScript}`;\n      } else if (progress.reuse) {\n        if (progress.reuse.exercise?.exerciseType) {\n          const exercise = Exercise_get(progress.reuse.exercise.exerciseType, settings.exercises);\n          const fullName = Exercise_fullName(exercise, settings, progress.reuse.exercise.label);\n          progressStr += ` { ...${fullName} }`;\n        } else {\n          progressStr += ` { ...${progress.reuse.exercise?.fullName || progress.reuse.fullName} }`;\n        }\n      } else {\n        progressStr += hideScript ? ` {~ ... ~}` : ` ${progress.script}`;\n      }\n    }\n    return progressStr;\n  }\n\n  private getGlobals(exercise: IPlannerProgramExercise): IPlannerToProgram2Globals {\n    const variations = exercise.evaluatedSetVariations;\n    if (variations.length === 0 || variations[0].sets.length === 0) {\n      const globals = exercise.globals;\n      const reusedGlobals = exercise.reuse?.exercise?.globals || {};\n      return {\n        weight: globals?.weight ?? reusedGlobals.weight,\n        rpe: globals?.rpe ?? reusedGlobals.rpe,\n        timer: globals?.timer ?? reusedGlobals.timer,\n        setTimer: globals?.setTimer ?? reusedGlobals.setTimer,\n        isOverflowSetTimer: globals?.isOverflowSetTimer ?? reusedGlobals.isOverflowSetTimer,\n        logRpe: globals?.logRpe ?? reusedGlobals.logRpe,\n        askWeight: globals?.askWeight ?? reusedGlobals.askWeight,\n      };\n    }\n    const firstWeight = variations[0]?.sets[0]?.weight;\n    const firstRpe = variations[0]?.sets[0]?.rpe;\n    const firstLogRpe = !!variations[0]?.sets[0]?.logRpe;\n    const firstAskWeight = !!variations[0]?.sets[0]?.askWeight;\n    const firstTimer = variations[0]?.sets[0]?.timer;\n    // When any set carries a set timer, its rest is embedded in the setTimer|rest token, so the rest\n    // timer must not also be lifted to a global (a global would override the embedded rest on re-parse).\n    const hasAnySetTimer = variations.some((v) => v.sets.some((s) => s.setTimer != null));\n    const firstSetTimer = variations[0]?.sets[0]?.setTimer;\n    const firstIsOverflowSetTimer = !!variations[0]?.sets[0]?.isOverflowSetTimer;\n    // A set timer is only liftable to a global together with its embedded rest, so the whole\n    // setTimer/overflow/rest tuple must be uniform across every set. Even then, keep the source's\n    // style: lift only if it was written as a global, or the sets are reused (where a global\n    // override is the only way to express a timer change without materializing the set list).\n    const setTimerIsGlobal =\n      firstSetTimer != null &&\n      (exercise.globals.setTimer != null || exercise.reuse != null) &&\n      variations.every((v) =>\n        v.sets.every(\n          (s) =>\n            s.setTimer === firstSetTimer && !!s.isOverflowSetTimer === firstIsOverflowSetTimer && s.timer === firstTimer\n        )\n      );\n    return {\n      setTimer: setTimerIsGlobal ? firstSetTimer : undefined,\n      isOverflowSetTimer: setTimerIsGlobal ? firstIsOverflowSetTimer : undefined,\n      weight:\n        firstWeight != null &&\n        variations.every((v) =>\n          v.sets.every((s) => Weight_eqNull(s.weight, firstWeight) && !!s.askWeight === firstAskWeight)\n        )\n          ? firstWeight\n          : undefined,\n      askWeight: variations.every((v) => v.sets.every((s) => Weight_eqNull(s.weight, firstWeight) && !!s.askWeight)),\n      rpe:\n        firstRpe != null &&\n        variations.every((v) => v.sets.every((s) => s.rpe === firstRpe && !!s.logRpe === firstLogRpe))\n          ? firstRpe\n          : undefined,\n      logRpe: variations.every((v) => v.sets.every((s) => s.rpe === firstRpe && !!s.logRpe)),\n      timer:\n        (setTimerIsGlobal || !hasAnySetTimer) &&\n        firstTimer != null &&\n        variations.every((v) => v.sets.every((s) => s.timer === firstTimer))\n          ? firstTimer\n          : undefined,\n    };\n  }\n\n  private groupVariationSets(\n    sets: IPlannerProgramExerciseEvaluatedSet[],\n    exercise: IPlannerProgramExercise,\n    index: number\n  ): [IPlannerProgramExerciseEvaluatedSet, number][] {\n    if (sets.length === 0) {\n      const originalSets = PlannerProgramExercise_sets(exercise, index)[0];\n      return [\n        [\n          {\n            maxrep: originalSets?.repRange?.maxrep || 1,\n            minrep: originalSets?.repRange?.minrep,\n            weight: originalSets?.weight || Weight_zero,\n            logRpe: originalSets?.logRpe || false,\n            isAmrap: originalSets?.repRange?.isAmrap || false,\n            isQuickAddSet: originalSets?.repRange?.isQuickAddSet || false,\n            askWeight: originalSets?.askWeight || false,\n            rpe: originalSets?.rpe,\n            timer: originalSets?.timer,\n            label: originalSets?.label,\n          },\n          0,\n        ],\n      ];\n    }\n    let lastKey: string | undefined;\n    const groups: [IPlannerProgramExerciseEvaluatedSet, number][] = [];\n    for (const set of sets) {\n      const key = this.setToKey(set);\n      if (lastKey == null || lastKey !== key) {\n        groups.push([set, 0]);\n      }\n      groups[groups.length - 1][1] += 1;\n      lastKey = key;\n    }\n    return groups;\n  }\n\n  private groupWarmupsSets(sets: IPlannerProgramExerciseWarmupSet[]): [IPlannerProgramExerciseWarmupSet, number][] {\n    let lastKey: string | undefined;\n    const groups: [IPlannerProgramExerciseWarmupSet, number][] = [];\n    for (const set of sets) {\n      const key = this.warmupSetToKey(set);\n      if (lastKey == null || lastKey !== key) {\n        groups.push([set, 0]);\n      }\n      groups[groups.length - 1][1] += set.numberOfSets;\n      lastKey = key;\n    }\n    return groups;\n  }\n\n  private getWarmupSets(programExercise: IPlannerProgramExercise): string | undefined {\n    return this.warmupSetsToStr(programExercise.warmupSets);\n  }\n\n  private warmupSetsToStr(warmupSets: IPlannerProgramExerciseWarmupSet[] | undefined): string | undefined {\n    if (warmupSets) {\n      const groups = this.groupWarmupsSets(warmupSets);\n      const strs: string[] = [];\n      for (const group of groups) {\n        const first = group[0];\n        const length = group[1];\n        const weight =\n          first.weight ?? (first.percentage != null ? Weight_buildPct(first.percentage) : Weight_build(0, \"lb\"));\n        strs.push(`${length}x${first.reps} ${Weight_print(weight)}`);\n      }\n      return strs.length === 0 ? \"none\" : strs.join(\", \");\n    }\n    return undefined;\n  }\n\n  private weightExprToStr(weightExpr?: IWeight | IPercentage): string {\n    if (weightExpr != null) {\n      return Weight_print(weightExpr);\n    }\n    return \"\";\n  }\n\n  private setTimerGlobalToStr(globals: IPlannerToProgram2Globals): string {\n    const overflow = globals.isOverflowSetTimer ? \"+\" : \"\";\n    const restPart = globals.timer != null ? `${n(Math.max(0, globals.timer))}s` : \"?\";\n    return `${n(Math.max(0, globals.setTimer ?? 0))}s${overflow}|${restPart}`;\n  }\n\n  private variationToString(\n    variation: IPlannerProgramExerciseEvaluatedSetVariation,\n    globals: IPlannerToProgram2Globals,\n    index: number,\n    exercise: IPlannerProgramExercise\n  ): string {\n    const groupedVariationSets = this.groupVariationSets(variation.sets, exercise, index);\n    const result: string[] = [];\n    for (const group of groupedVariationSets) {\n      const set = group[0];\n      let setStr = \"\";\n      setStr += `${group[1]}${set.isQuickAddSet ? \"+\" : \"\"}x`;\n      setStr += set.minrep != null ? `${n(Math.max(0, set.minrep))}-` : \"\";\n      setStr += `${n(Math.max(0, set.maxrep ?? 0))}`;\n      setStr += set.isAmrap ? \"+\" : \"\";\n      if (globals.weight == null && !globals.askWeight) {\n        const weightValue = this.weightExprToStr(set.weight);\n        if (weightValue) {\n          setStr += ` ${weightValue}${set.askWeight ? \"+\" : \"\"}`;\n        } else if (set.askWeight) {\n          setStr += \" ?+\";\n        }\n      }\n      if (globals.rpe == null) {\n        setStr += set.rpe != null ? ` @${n(Math.max(0, set.rpe))}` : \"\";\n        setStr += set.rpe != null && set.logRpe ? \"+\" : \"\";\n      }\n      if (set.setTimer != null && globals.setTimer == null) {\n        const overflow = set.isOverflowSetTimer ? \"+\" : \"\";\n        const restPart = set.timer != null ? `${n(Math.max(0, set.timer))}s` : \"?\";\n        setStr += ` ${n(Math.max(0, set.setTimer))}s${overflow}|${restPart}`;\n      } else if (set.setTimer == null && globals.timer == null) {\n        setStr += set.timer ? ` ${n(Math.max(0, set.timer))}s` : \"\";\n      }\n      if (set.auto) {\n        setStr += \" auto\";\n      }\n      if (set.label) {\n        setStr += ` (${set.label})`;\n      }\n      result.push(setStr);\n    }\n    let resultStr = \"\";\n    if (index > 0 && variation.isCurrent) {\n      resultStr += \"! \";\n    }\n    return resultStr + result.map((r) => r.trim()).join(\", \");\n  }\n\n  private warmupSetToKey(set: IPlannerProgramExerciseWarmupSet): string {\n    return `${set.reps}-${Weight_print(set.weight || set.percentage || 0)}`;\n  }\n\n  private setToKey(set: IPlannerProgramExerciseEvaluatedSet): string {\n    return `${set.maxrep}-${set.minrep}-${Weight_printNull(set.weight)}-${set.isAmrap}-${set.rpe}-${set.logRpe}-${\n      set.timer\n    }-${set.label}-${set.askWeight}-${set.setTimer}-${set.isOverflowSetTimer}-${set.auto}`;\n  }\n}\n","import {\n  Exercise_onerm,\n  Exercise_get,\n  Exercise_getIsUnilateral,\n  Exercise_getWarmupSets,\n  Exercise_toKey,\n  Exercise_eq,\n} from \"./exercise\";\nimport { Reps_findNextEntryAndSet, Reps_isEmptyOrFinished, Reps_isCompleted, Reps_isEmpty } from \"./set\";\nimport {\n  Weight_build,\n  Weight_buildAny,\n  Weight_eq,\n  Weight_lt,\n  Weight_gt,\n  Weight_multiply,\n  Weight_increment,\n  Weight_isPct,\n  Weight_buildPct,\n  Weight_decrement,\n  Weight_is,\n  Weight_round,\n  Weight_roundConvertTo,\n  Weight_getTrainingMax,\n  Weight_getOneRepMax,\n  Weight_rpeMultiplier,\n  Weight_convertToWeight,\n  Weight_display,\n  Weight_calculatePlates,\n  Weight_formatOneSide,\n  Weight_rpePct,\n  Weight_evaluateWeight,\n  Weight_op,\n} from \"./weight\";\nimport { DateUtils_fromYYYYMMDD, DateUtils_fromYYYYMMDDStr } from \"../utils/date\";\nimport { lf, lb, LensBuilder } from \"lens-shmens\";\nimport { ObjectUtils_isEqual, ObjectUtils_entriesNonnull, ObjectUtils_keys, ObjectUtils_clone } from \"../utils/object\";\nimport { IDispatch } from \"../ducks/types\";\nimport { ScriptRunner } from \"../parser\";\n\nimport {\n  emptyProgramId,\n  IEvaluatedProgram,\n  Program_getProgramDay,\n  Program_getProgramDayUsedExercises,\n  Program_getProgramExerciseForKeyAndDay,\n  Program_getAllProgramExercisesWithType,\n  Program_createEmptyProgram,\n  Program_evaluate,\n  Program_runAllFinishDayScripts,\n  Program_getDayExercisesInOrder,\n  Program_getDayData,\n  Program_nextHistoryEntry,\n} from \"./program\";\nimport { IState, updateProgress, updateState } from \"./state\";\nimport {\n  IWeight,\n  IHistoryEntry,\n  ISettings,\n  IHistoryRecord,\n  IProgressMode,\n  IExerciseType,\n  IProgramState,\n  IEquipment,\n  ISubscription,\n  ISet,\n  IDayData,\n  IExerciseDataValue,\n  IUnit,\n  IStats,\n  IProgram,\n  IStorage,\n  IProgramExerciseWarmupSet,\n} from \"../types\";\nimport { NativeTimerBridge_startTimer, NativeTimerBridge_stopTimer } from \"../utils/nativeTimerBridge\";\nimport { SendMessage_print } from \"../utils/sendMessage\";\nimport { Subscriptions_hasSubscription } from \"../utils/subscriptions\";\nimport { IPercentage } from \"../types\";\nimport {\n  History_workoutTime,\n  History_createCustomEntry,\n  History_resumeWorkout,\n  History_finishProgramDay,\n  History_findLastEntryForExerciseType,\n} from \"./history\";\nimport { CollectionUtils_compact, CollectionUtils_findIndexReverse } from \"../utils/collection\";\nimport { ILiftoscriptEvaluatorUpdate } from \"../liftoscriptEvaluator\";\nimport { Equipment_getUnitForExerciseType } from \"./equipment\";\nimport { IByTag, IByExercise } from \"../pages/planner/plannerEvaluator\";\nimport { IPlannerProgramExercise, IPlannerProgramExerciseWithType } from \"../pages/planner/models/types\";\nimport {\n  PlannerProgramExercise_getUpdateScript,\n  PlannerProgramExercise_getState,\n  PlannerProgramExercise_currentEvaluatedSetVariationIndex,\n  PlannerProgramExercise_currentExerciseVariationIndex,\n  PlannerProgramExercise_currentDescriptionIndex,\n  PlannerProgramExercise_currentSetVariationIndex,\n  PlannerProgramExercise_programWarmups,\n} from \"../pages/planner/models/plannerProgramExercise\";\nimport { UidFactory_generateUid } from \"../utils/generator\";\nimport { ProgramSet_getEvaluatedWeight } from \"./programSet\";\nimport { Stats_getCurrentMovingAverageBodyweight, Stats_getEmpty } from \"./stats\";\nimport { IChangeAMRAPAction, ICompleteSetAction } from \"../ducks/reducer\";\nimport {\n  LiveActivityManager_updateProgressLiveActivity,\n  LiveActivityManager_updateLiveActivityForNextEntry,\n} from \"../utils/liveActivityManager\";\nimport { ProgramExercise_hasUserPromptedVars } from \"./programExercise\";\nimport type { IScriptFunctions, IScriptBindings } from \"../liftoscriptFns\";\nimport deepmerge from \"deepmerge\";\nimport { Dialog_alert } from \"../utils/dialog\";\n\nexport type { IScriptBindings } from \"../liftoscriptFns\";\n\nexport interface IScriptFnContext {\n  prints: (number | IWeight | IPercentage)[][];\n  unit: IUnit;\n  exerciseType?: IExerciseType;\n}\n\nexport interface IScriptFinishContext {\n  type: \"finish\";\n  updates: ILiftoscriptEvaluatorUpdate[];\n  exerciseData: IExerciseDataValue;\n  setVariationIndex: number;\n  descriptionIndex: number;\n}\n\nexport interface IScriptUpdateContext {\n  equipment?: IEquipment;\n}\n\ntype IScriptArg = number | IWeight | IPercentage;\n\nfunction applyRounding(num: IScriptArg | undefined, rounder: (n: number) => number): IScriptArg {\n  if (num == null) {\n    return 0;\n  }\n  return typeof num === \"number\" ? rounder(num) : Weight_buildAny(rounder(num.value), num.unit);\n}\n\nfunction isScriptValue(v: unknown): v is IScriptArg {\n  return typeof v === \"number\" || Weight_is(v) || Weight_isPct(v);\n}\n\nfunction flattenScriptArgs(args: unknown[]): IScriptArg[] {\n  const result: IScriptArg[] = [];\n  for (const arg of args) {\n    if (Array.isArray(arg)) {\n      for (const item of arg) {\n        if (isScriptValue(item)) {\n          result.push(item);\n        }\n      }\n    } else if (isScriptValue(arg)) {\n      result.push(arg);\n    }\n  }\n  return result;\n}\n\nfunction sum(args: unknown[]): IWeight | IPercentage | number {\n  const flat = flattenScriptArgs(args);\n  if (flat.length === 0) {\n    return 0;\n  }\n  return flat.reduce<IScriptArg>((acc, a) => Weight_op(undefined, acc, a, (x, y) => x + y), 0);\n}\n\nfunction min(args: unknown[]): IWeight | IPercentage | number {\n  const flat = flattenScriptArgs(args);\n  if (flat.length === 0) {\n    return 0;\n  }\n  return flat.reduce<IScriptArg>((acc, a) => (Weight_lt(a, acc) ? a : acc), flat[0]);\n}\n\nfunction max(args: unknown[]): IWeight | IPercentage | number {\n  const flat = flattenScriptArgs(args);\n  if (flat.length === 0) {\n    return 0;\n  }\n  return flat.reduce<IScriptArg>((acc, a) => (Weight_lt(acc, a) ? a : acc), flat[0]);\n}\n\nfunction zeroOrGte(a: (IWeight | number | undefined | null)[], b: (IWeight | number | undefined | null)[]): boolean {\n  for (let i = 0; i < Math.max(a.length, b.length); i++) {\n    const aVal = a[i];\n    const bVal = b[i];\n    if (aVal != null && bVal != null && !Weight_eq(aVal, 0) && Weight_lt(aVal, bVal)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nexport function Progress_createEmptyScriptBindings(\n  dayData: IDayData,\n  settings: ISettings,\n  exercise?: IExerciseType\n): IScriptBindings {\n  const rm1 = exercise ? Exercise_onerm(exercise, settings) : Weight_build(0, \"lb\");\n  return {\n    day: dayData.day,\n    week: dayData.week ?? 1,\n    dayInWeek: dayData.dayInWeek ?? dayData.day,\n    completedWeights: [],\n    originalWeights: [],\n    weights: [],\n    reps: [],\n    minReps: [],\n    RPE: [],\n    amraps: [],\n    logrpes: [],\n    askweights: [],\n    completedReps: [],\n    completedRepsLeft: [],\n    completedRPE: [],\n    isCompleted: [],\n    timers: [],\n    setTime: [],\n    completedSetTime: [],\n    w: [],\n    r: [],\n    cr: [],\n    cw: [],\n    mr: [],\n    programNumberOfSets: 0,\n    numberOfSets: 0,\n    completedNumberOfSets: 0,\n    ns: 0,\n    setVariationIndex: 1,\n    exerciseVariationIndex: 1,\n    descriptionIndex: 1,\n    bodyweight: Weight_build(0, settings.units),\n    setIndex: 1,\n    rm1,\n  };\n}\n\nexport function Progress_createScriptBindings(\n  dayData: IDayData,\n  entry: IHistoryEntry,\n  settings: ISettings,\n  programNumberOfSets: number,\n  bodyweight: IWeight | undefined,\n  setIndex?: number,\n  setVariationIndex?: number,\n  descriptionIndex?: number,\n  exerciseVariationIndex?: number\n): IScriptBindings {\n  const bindings = Progress_createEmptyScriptBindings(dayData, settings, entry.exercise);\n  for (const set of entry.sets) {\n    bindings.weights.push(set.weight);\n    bindings.originalWeights.push(set.originalWeight ?? Weight_build(0, settings.units));\n    bindings.reps.push(set.reps);\n    bindings.minReps.push(set.minReps);\n    bindings.completedReps.push(set.completedReps);\n    bindings.completedRepsLeft.push(set.completedRepsLeft);\n    bindings.completedRPE.push(set.completedRpe);\n    bindings.completedWeights.push(set.completedWeight);\n    bindings.RPE.push(set.rpe);\n    bindings.amraps.push(set.isAmrap ? 1 : undefined);\n    bindings.logrpes.push(set.logRpe ? 1 : undefined);\n    bindings.askweights.push(set.askWeight ? 1 : undefined);\n    bindings.timers.push(set.timer);\n    bindings.setTime.push(set.setTimer);\n    bindings.completedSetTime.push(set.completedSetTimer);\n    bindings.isCompleted.push(set.isCompleted ? 1 : 0);\n  }\n  bindings.w = bindings.weights;\n  bindings.r = bindings.reps;\n  bindings.cr = bindings.completedReps;\n  bindings.cw = bindings.completedWeights;\n  bindings.mr = bindings.minReps;\n  bindings.ns = entry.sets.length;\n  bindings.programNumberOfSets = programNumberOfSets;\n  bindings.numberOfSets = entry.sets.length;\n  bindings.completedNumberOfSets = entry.sets.filter((s) => s.isCompleted).length;\n  bindings.setIndex = setIndex ?? 1;\n  bindings.setVariationIndex = setVariationIndex ?? 1;\n  bindings.exerciseVariationIndex = exerciseVariationIndex ?? 1;\n  bindings.descriptionIndex = descriptionIndex ?? 1;\n  bindings.bodyweight = bodyweight ?? Weight_build(0, settings.units);\n  return bindings;\n}\n\nexport function Progress_createScriptFunctions(settings: ISettings): IScriptFunctions {\n  function toWeight(value: IWeight | number): IWeight {\n    return Weight_is(value) ? value : Weight_build(value, settings.units);\n  }\n\n  function increment(vals: IWeight | IPercentage | number, context: IScriptFnContext): IWeight | IPercentage | number {\n    if (typeof vals === \"number\") {\n      const weight = Weight_build(vals, context.unit);\n      return Weight_increment(weight, settings, context.exerciseType);\n    } else if (Weight_isPct(vals)) {\n      return Weight_buildPct(vals.value + 1);\n    } else {\n      return Weight_increment(vals, settings, context.exerciseType);\n    }\n  }\n\n  function decrement(vals: IWeight | IPercentage | number, context: IScriptFnContext): IWeight | IPercentage | number {\n    if (typeof vals === \"number\") {\n      const weight = Weight_build(vals, context.unit);\n      return Weight_decrement(weight, settings, context.exerciseType);\n    } else if (Weight_isPct(vals)) {\n      return Weight_buildPct(vals.value - 1);\n    } else {\n      return Weight_decrement(vals, settings, context.exerciseType);\n    }\n  }\n\n  const fns: IScriptFunctions = {\n    roundWeight: ([num], context) => {\n      const unit = Equipment_getUnitForExerciseType(settings, context?.exerciseType);\n      return Weight_round(toWeight(num), settings, unit ?? settings.units, context?.exerciseType);\n    },\n    roundConvertWeight: ([num], context) => {\n      const unit = Equipment_getUnitForExerciseType(settings, context?.exerciseType);\n      return Weight_roundConvertTo(toWeight(num), settings, unit ?? settings.units, context?.exerciseType);\n    },\n    calculateTrainingMax: ([weight, reps]) => {\n      return Weight_getTrainingMax(toWeight(weight), reps || 0, settings);\n    },\n    calculate1RM: ([weight, reps]) => {\n      return Weight_getOneRepMax(toWeight(weight), reps);\n    },\n    rpeMultiplier: ([repsRaw, rpeRaw]) => {\n      const reps = Weight_is(repsRaw) ? repsRaw.value : repsRaw;\n      const rpe = rpeRaw == null ? 10 : Weight_is(rpeRaw) ? rpeRaw.value : rpeRaw;\n      return Weight_rpeMultiplier(reps, rpe);\n    },\n    floor: ([num]) => applyRounding(num, Math.floor),\n    ceil: ([num]) => applyRounding(num, Math.ceil),\n    round: ([num]) => applyRounding(num, Math.round),\n    sum: (args) => sum(args),\n    min: (args) => min(args),\n    max: (args) => max(args),\n    increment: ([vals], context) => increment(vals, context),\n    decrement: ([vals], context) => decrement(vals, context),\n    zeroOrGte: ([a, b]) => zeroOrGte(a, b),\n    print: (args, context) => {\n      // flat() without filtering: booleans must survive so `if (print(cond))` keeps working.\n      // Liftoscript has no null — undefined values (e.g. completedReps of skipped sets) become 0,\n      // otherwise they'd serialize to null and fail storage validation.\n      const flatArgs = [...args.flat()].map((arg) => arg ?? 0) as (number | IWeight | IPercentage)[];\n      context.prints = context.prints || [];\n      context.prints.push(flatArgs);\n      return flatArgs[0];\n    },\n    sets: ([from, to, minReps, reps, isAmrap, weight, timer, rpe, logRpe], context, bindings) => {\n      for (let i = 0; i < bindings.numberOfSets; i++) {\n        if (i >= from - 1 && i < to) {\n          const weightValue = Weight_convertToWeight(bindings.rm1, weight, context.unit);\n          bindings.minReps[i] = reps !== minReps ? minReps : undefined;\n          bindings.reps[i] = reps;\n          bindings.originalWeights[i] = weightValue;\n          bindings.weights[i] = Weight_round(weightValue, settings, context.unit, context.exerciseType);\n          bindings.RPE[i] = rpe !== 0 ? rpe : undefined;\n          bindings.amraps[i] = isAmrap !== 0 ? 1 : 0;\n          bindings.logrpes[i] = logRpe !== 0 ? 1 : 0;\n          bindings.timers[i] = timer !== 0 ? timer : undefined;\n        }\n      }\n      return to - from;\n    },\n  };\n  return fns;\n}\n\nexport function Progress_isCurrent(progress: IHistoryRecord | undefined): boolean {\n  return progress?.id === 0;\n}\n\nexport function Progress_scheduleTimerNotification(\n  progress: IHistoryRecord,\n  entryIndex: number,\n  mode: IProgressMode,\n  settings: ISettings,\n  duration: number\n): void {\n  const title = \"It's time for the next set!\";\n  let subtitle = \"\";\n  let body = \"Time to lift!\";\n  let subtitleHeader = \"\";\n  let bodyHeader = \"The rest is over\";\n  const nextEntryAndSet = Reps_findNextEntryAndSet(progress, entryIndex, mode);\n  if (nextEntryAndSet != null) {\n    const { entry: nextEntry, set: aSet } = nextEntryAndSet;\n    const exercise = Exercise_get(nextEntry.exercise, settings.exercises);\n    if (exercise) {\n      subtitleHeader = \"Next Set\";\n      subtitle = CollectionUtils_compact([\n        exercise.name,\n        aSet.reps != null ? `${aSet.reps}${aSet.isAmrap ? \"+\" : \"\"} reps` : undefined,\n        aSet.weight != null ? Weight_display(aSet.weight) : undefined,\n      ]).join(\", \");\n      if (aSet.weight != null) {\n        const { plates } = Weight_calculatePlates(aSet.weight, settings, aSet.weight.unit, nextEntry.exercise);\n        const formattedPlates = plates.length > 0 ? Weight_formatOneSide(settings, plates, exercise) : \"None\";\n        bodyHeader = \"Plates per side\";\n        body = formattedPlates;\n      }\n    }\n  }\n  SendMessage_print(`Scheduling timer notification, volume: ${settings.volume}`);\n  NativeTimerBridge_startTimer({\n    duration,\n    title,\n    subtitleHeader,\n    subtitle,\n    bodyHeader,\n    body,\n    ignoreDoNotDisturb: !!settings.ignoreDoNotDisturb,\n    vibration: !!settings.vibration,\n    volume: settings.volume,\n  });\n}\n\nexport function Progress_startTimer(\n  progress: IHistoryRecord,\n  timestamp: number,\n  mode: IProgressMode,\n  entryIndex: number,\n  setIndex: number,\n  settings: ISettings,\n  subscription?: ISubscription,\n  timer?: number,\n  isAdjusting?: boolean\n): IHistoryRecord {\n  const entry = progress.entries[entryIndex];\n  const set = mode === \"warmup\" ? entry?.warmupSets[setIndex] : entry?.sets[setIndex];\n  if (!isAdjusting && (!set || !set.isCompleted)) {\n    return progress;\n  }\n  if (timer == null && Progress_isCurrent(progress) && mode === \"workout\") {\n    timer = entry?.sets[setIndex]?.timer;\n  }\n  if (timer == null) {\n    timer =\n      mode === \"workout\" && entry.superset != null && settings.timers.superset != null\n        ? settings.timers.superset\n        : settings.timers[mode] || undefined;\n  }\n  if (!timer) {\n    return {\n      ...progress,\n      timerSince: undefined,\n      timer: undefined,\n      timerMode: undefined,\n      timerEntryIndex: undefined,\n      timerSetIndex: undefined,\n    };\n  }\n  if (subscription && Subscriptions_hasSubscription(subscription)) {\n    // A backdated start (rest resumed after the screen was locked past the target) can already be overrun,\n    // so only schedule the \"rest is over\" notification when there's still time left — UNTimeIntervalNotificationTrigger\n    // aborts on a non-positive interval.\n    const timerForPush = timer - Math.round((Date.now() - timestamp) / 1000);\n    if (timerForPush > 0) {\n      Progress_scheduleTimerNotification(progress, entryIndex, mode, settings, timerForPush);\n    } else {\n      // Backdated start that's already overrun: schedule nothing, but clear any earlier pending\n      // notification so a stale one doesn't fire.\n      NativeTimerBridge_stopTimer();\n    }\n  }\n  const newProgress: IHistoryRecord = {\n    ...progress,\n    timerSince: timestamp,\n    timer,\n    timerMode: mode,\n    timerEntryIndex: entryIndex,\n    timerSetIndex: setIndex,\n    ui: { ...progress.ui, nativeNotificationScheduled: undefined },\n  };\n  return newProgress;\n}\n\nexport function Progress_getNextSupersetEntry(\n  entries: IHistoryEntry[],\n  entry: IHistoryEntry\n): IHistoryEntry | undefined {\n  const superset: string | undefined = entry.superset;\n  if (superset == null) {\n    return undefined;\n  }\n  const supersetGroups = Progress_getSupersetGroups(entries);\n  const supersetGroup: IHistoryEntry[] = supersetGroups?.[superset] ?? [];\n  if (supersetGroup.length <= 1) {\n    return undefined;\n  }\n  const supersetIndex = supersetGroup?.findIndex((e) => e.id === entry!.id);\n  if (supersetIndex == null || supersetIndex < 0) {\n    return undefined;\n  }\n  return supersetGroup[(supersetIndex + 1) % supersetGroup.length];\n}\n\nexport function Progress_getNextEntry(\n  progress: IHistoryRecord,\n  entry: IHistoryEntry,\n  mode: \"workout\" | \"warmup\",\n  shouldGoToNextEntry: boolean\n): IHistoryEntry | undefined {\n  if (Progress_isFullyEmptyOrFinishedSet(progress)) {\n    return undefined;\n  }\n  const visitedAndFinished = new Set<IHistoryEntry>();\n  let currentEntry: IHistoryEntry | undefined = entry;\n  let isInitial = true;\n  const supersetGroups = Progress_getSupersetGroups(progress.entries);\n  while (currentEntry != null) {\n    let index = progress.entries.findIndex((e) => e.id != null && e.id === currentEntry?.id);\n    if (index === -1) {\n      index = progress.entries.findIndex((e) => e === currentEntry);\n    }\n    const superset: string | undefined = currentEntry.superset;\n    if (mode === \"workout\" && superset != null && !visitedAndFinished.has(currentEntry)) {\n      const supersetGroup: IHistoryEntry[] = supersetGroups?.[superset] ?? [];\n      if (supersetGroup.length > 1) {\n        const supersetIndex = supersetGroup?.findIndex((e) => e.id === currentEntry?.id);\n        currentEntry = supersetGroup[(supersetIndex + 1) % supersetGroup.length];\n      } else {\n        if (shouldGoToNextEntry) {\n          currentEntry = progress.entries[(index + 1) % progress.entries.length];\n        } else {\n          return currentEntry;\n        }\n      }\n    } else if (Reps_isEmptyOrFinished(currentEntry.sets)) {\n      if (shouldGoToNextEntry) {\n        const prevEntry: IHistoryEntry = currentEntry;\n        currentEntry = progress.entries[(index + 1) % progress.entries.length];\n        if (currentEntry === prevEntry) {\n          return undefined;\n        }\n      } else {\n        return undefined;\n      }\n    }\n    if (currentEntry == null) {\n      return undefined;\n    }\n    if (!Reps_isEmptyOrFinished(currentEntry.sets)) {\n      return currentEntry;\n    } else if (!isInitial) {\n      visitedAndFinished.add(currentEntry);\n    }\n    isInitial = false;\n  }\n  return undefined;\n}\n\nexport function Progress_getNextEntryIndex(\n  progress: IHistoryRecord,\n  entry: IHistoryEntry,\n  mode: \"workout\" | \"warmup\"\n): number | undefined {\n  const nextEntry = Progress_getNextEntry(progress, entry, mode, false);\n  if (nextEntry != null) {\n    let index = progress.entries.findIndex((e) => e.id != null && e.id === nextEntry.id);\n    if (index === -1) {\n      index = progress.entries.findIndex((e) => e === nextEntry);\n    }\n    return index === -1 ? undefined : index;\n  }\n  return undefined;\n}\n\nexport function Progress_updateTimer(\n  progress: IHistoryRecord,\n  program: IProgram | undefined,\n  newTimer: number,\n  timerSince: number,\n  liveActivityEntryIndex: number | undefined,\n  liveActivitySetIndex: number | undefined,\n  skipLiveActivityUpdate: boolean,\n  settings: ISettings,\n  subscription: ISubscription | undefined\n): IHistoryRecord {\n  const timerForPush = newTimer - Math.round((Date.now() - timerSince) / 1000);\n  if (timerForPush > 0) {\n    const newProgress = Progress_startTimer(\n      progress,\n      progress.timerSince || Date.now(),\n      progress.timerMode || \"workout\",\n      progress.timerEntryIndex || 0,\n      progress.timerSetIndex || 0,\n      settings,\n      subscription,\n      newTimer,\n      true\n    );\n    if (!skipLiveActivityUpdate) {\n      LiveActivityManager_updateProgressLiveActivity(\n        program,\n        progress,\n        settings,\n        subscription,\n        liveActivityEntryIndex,\n        liveActivitySetIndex,\n        newTimer,\n        progress.timerSince || Date.now()\n      );\n    }\n    return newProgress;\n  } else {\n    NativeTimerBridge_stopTimer();\n    const newProgress = {\n      ...progress,\n      timer: Math.max(0, newTimer),\n      ui: {\n        ...progress.ui,\n        nativeNotificationScheduled: undefined,\n      },\n    };\n    if (!skipLiveActivityUpdate) {\n      LiveActivityManager_updateProgressLiveActivity(\n        program,\n        progress,\n        settings,\n        subscription,\n        liveActivityEntryIndex,\n        liveActivitySetIndex,\n        Math.max(0, newTimer),\n        progress.timerSince || Date.now()\n      );\n    }\n    return newProgress;\n  }\n}\n\nexport function Progress_maybeApplySuperset(\n  progress: IHistoryRecord,\n  entryIndex: number,\n  mode: \"workout\" | \"warmup\"\n): IHistoryRecord {\n  if (!Progress_isCurrent(progress)) {\n    return progress;\n  }\n  const entry = progress.entries[entryIndex];\n  const nextEntryIndex = Progress_getNextEntryIndex(progress, entry, mode);\n  if (nextEntryIndex != null) {\n    return { ...progress, currentEntryIndex: nextEntryIndex };\n  }\n  return progress;\n}\n\nexport function Progress_stopTimer(progress: IHistoryRecord): IHistoryRecord {\n  NativeTimerBridge_stopTimer();\n  return Progress_stopTimerPure(progress);\n}\n\nexport function Progress_stopTimerPure(progress: IHistoryRecord): IHistoryRecord {\n  return {\n    ...progress,\n    timerSince: undefined,\n    timerMode: undefined,\n    timer: undefined,\n    timerSetIndex: undefined,\n    timerEntryIndex: undefined,\n  };\n}\n\nexport function Progress_setTimerValue(progress: IHistoryRecord, newTimer: number): IHistoryRecord {\n  if (progress.timerSince == null) {\n    return progress;\n  }\n  return {\n    ...progress,\n    timer: Math.max(0, newTimer),\n  };\n}\n\nexport function Progress_findEntryByExercise(\n  progress: IHistoryRecord,\n  exerciseType: IExerciseType\n): IHistoryEntry | undefined {\n  return progress.entries.find((entry) => entry.exercise === exerciseType);\n}\n\nexport function Progress_isFullyCompletedSet(progress: IHistoryRecord): boolean {\n  return progress.entries.every((entry) => Progress_isCompletedSet(entry));\n}\n\nexport function Progress_isCompletedSet(entry: IHistoryEntry): boolean {\n  return Reps_isCompleted(entry.sets);\n}\n\nexport function Progress_isFullyEmptySet(progress: IHistoryRecord): boolean {\n  return progress.entries.every((entry) => Reps_isEmpty(entry.sets));\n}\n\nexport function Progress_isFullyEmptyOrFinishedSet(progress: IHistoryRecord): boolean {\n  return progress.entries.every((entry) => Progress_isEmptyOrFinishedSet(entry));\n}\n\nexport function Progress_isEmptyOrFinishedSet(entry: IHistoryEntry): boolean {\n  return Reps_isEmptyOrFinished(entry.sets);\n}\n\nexport function Progress_hasLastUnfinishedSet(entry: IHistoryEntry): boolean {\n  return entry.sets.filter((s) => !s.isCompleted).length === 1;\n}\n\nexport function Progress_isChanged(aProgress?: IHistoryRecord, bProgress?: IHistoryRecord): boolean {\n  if (aProgress != null && bProgress == null) {\n    return true;\n  } else if (aProgress == null && bProgress != null) {\n    return true;\n  } else if (aProgress == null && bProgress == null) {\n    return false;\n  } else {\n    const changed = !ObjectUtils_isEqual(aProgress!, bProgress!);\n    return changed;\n  }\n}\n\nexport function Progress_showUpdateDate(progress: IHistoryRecord, date: string, time: number): IHistoryRecord {\n  return {\n    ...progress,\n    ui: {\n      ...progress.ui,\n      dateModal: { date, time },\n    },\n  };\n}\n\nconst supersetColors = [\"red\", \"blue\", \"green\", \"purple\"];\n\nexport function Progress_getColorToSupersetGroup(progress: IHistoryRecord): Partial<Record<string, IHistoryEntry[]>> {\n  const groups = Progress_getSupersetGroups(progress.entries);\n  let index = 0;\n  return ObjectUtils_entriesNonnull(groups).reduce<Partial<Record<string, IHistoryEntry[]>>>((memo, [, group]) => {\n    const color = supersetColors[index % supersetColors.length];\n    memo[color] = group;\n    index += 1;\n    return memo;\n  }, {});\n}\n\nexport function Progress_getSupersetToColor(entries: IHistoryEntry[]): Partial<Record<string, string>> {\n  const groups = Progress_getSupersetGroups(entries);\n  let index = 0;\n  return ObjectUtils_entriesNonnull(groups).reduce<Partial<Record<string, string>>>((memo, [superset, group]) => {\n    const color = supersetColors[index % supersetColors.length];\n    // Keep color assignment in lockstep with Progress_getColorToSupersetGroup (which advances the\n    // index for every group), but a lone leftover entry shouldn't get a pairing line.\n    if (group.length > 1) {\n      memo[superset] = color;\n    }\n    index += 1;\n    return memo;\n  }, {});\n}\n\nexport function Progress_getSupersetGroups(entries: IHistoryEntry[]): Partial<Record<string, IHistoryEntry[]>> {\n  const groups: Partial<Record<string, IHistoryEntry[]>> = {};\n  for (const entry of entries) {\n    if (entry.superset != null) {\n      if (!groups[entry.superset]) {\n        groups[entry.superset] = [];\n      }\n      groups[entry.superset]!.push(entry);\n    }\n  }\n  return groups;\n}\n\nexport function Progress_stop(\n  progresses: Record<number, IHistoryRecord | undefined>,\n  id: number\n): Record<number, IHistoryRecord | undefined> {\n  return ObjectUtils_keys(progresses).reduce<Record<number, IHistoryRecord | undefined>>((memo, k) => {\n    const p = progresses[k];\n    if (p != null && p.id !== id) {\n      memo[k] = p;\n    }\n    return memo;\n  }, {});\n}\n\nexport function Progress_changeDate(progress: IHistoryRecord, dateStr?: string, time?: number): IHistoryRecord {\n  let startTime = progress.startTime;\n  const startTimeDate = new Date(startTime);\n  const date = dateStr != null ? DateUtils_fromYYYYMMDD(dateStr) : undefined;\n  if (date != null) {\n    startTime = new Date(\n      date.getFullYear(),\n      date.getMonth(),\n      date.getDate(),\n      startTimeDate.getHours(),\n      startTimeDate.getMinutes(),\n      startTimeDate.getSeconds()\n    ).getTime();\n  }\n  const endTime = time != null ? startTime + time : startTime + History_workoutTime(progress);\n  return {\n    ...progress,\n    ...(dateStr != null ? { date: DateUtils_fromYYYYMMDDStr(dateStr) } : {}),\n    startTime,\n    intervals: [[startTime, endTime]],\n    endTime,\n    ui: {\n      ...progress.ui,\n      dateModal: undefined,\n    },\n  };\n}\n\nexport function Progress_getProgressId(state: Pick<IState, \"progress\">): number {\n  const editIds = Object.keys((state as IState).progress)\n    .map(Number)\n    .filter(Boolean);\n  return editIds.length > 0 ? editIds[0] : 0;\n}\n\nexport function Progress_lbProgress(progressId?: number): LensBuilder<IState, IHistoryRecord, {}, undefined> {\n  if (progressId == null || progressId === 0) {\n    return lb<IState>().p(\"storage\").pi(\"progress\").i(0);\n  } else {\n    return lb<IState>().pi(\"progress\").pi(progressId);\n  }\n}\n\nexport function Progress_getCurrentProgress(state: Pick<IState, \"storage\">): IHistoryRecord | undefined {\n  return state.storage.progress?.[0];\n}\n\nexport function Progress_getProgress(state: Pick<IState, \"progress\" | \"storage\">): IHistoryRecord | undefined {\n  const progressId = Progress_getProgressId(state);\n  return Progress_getProgressById(state, progressId);\n}\n\nexport function Progress_getProgressById(\n  state: Pick<IState, \"progress\" | \"storage\">,\n  id: number\n): IHistoryRecord | undefined {\n  if (id === 0) {\n    return state.storage.progress?.[0];\n  } else {\n    return (state as IState).progress[id];\n  }\n}\n\nexport function Progress_setProgress(state: IState, progress: IHistoryRecord): IState {\n  if (progress.id === 0) {\n    return lf(state).p(\"storage\").p(\"progress\").set([progress]);\n  } else {\n    return lf(state).pi(\"progress\").p(progress.id).set(progress);\n  }\n}\n\nexport function Progress_runUpdateScriptForEntry(\n  entry: IHistoryEntry,\n  dayData: IDayData,\n  programExercise: IPlannerProgramExercise,\n  otherStates: IByTag<IProgramState>,\n  setIndex: number,\n  settings: ISettings,\n  stats: IStats\n): IHistoryEntry {\n  if (setIndex !== -1 && !entry?.sets[setIndex]?.isCompleted) {\n    return entry;\n  }\n  const script = PlannerProgramExercise_getUpdateScript(programExercise);\n  if (!script) {\n    return entry;\n  }\n  const exercise = programExercise.exerciseType;\n  const state = ObjectUtils_clone(PlannerProgramExercise_getState(programExercise));\n  const setVariationIndex = PlannerProgramExercise_currentEvaluatedSetVariationIndex(programExercise);\n  const descriptionIndex = PlannerProgramExercise_currentDescriptionIndex(programExercise);\n  const exerciseVariationIndex = PlannerProgramExercise_currentExerciseVariationIndex(programExercise);\n  const bindings = Progress_createScriptBindings(\n    dayData,\n    entry,\n    settings,\n    programExercise.evaluatedSetVariations[setVariationIndex]?.sets.length ?? 0,\n    Stats_getCurrentMovingAverageBodyweight(stats, settings),\n    setIndex + 1,\n    setVariationIndex,\n    descriptionIndex,\n    exerciseVariationIndex\n  );\n  const fnContext: IScriptFnContext = { exerciseType: exercise, unit: settings.units, prints: [] };\n  const runner = new ScriptRunner(\n    script,\n    state,\n    ObjectUtils_clone(otherStates),\n    bindings,\n    Progress_createScriptFunctions(settings),\n    settings.units,\n    fnContext,\n    \"update\"\n  );\n  runner.execute();\n  const newEntry = Progress_applyBindings(entry, bindings, settings);\n  newEntry.state = { ...newEntry.state, ...state };\n  if (fnContext.prints.length > 0) {\n    newEntry.updatePrints = fnContext.prints;\n  }\n  return newEntry;\n}\n\nexport function Progress_runInitialUpdateScripts(\n  aProgress: IHistoryRecord,\n  programExerciseIds: string[] | undefined,\n  day: number,\n  program: IEvaluatedProgram,\n  settings: ISettings,\n  stats: IStats\n): IHistoryRecord {\n  const programDay = Program_getProgramDay(program, day);\n  if (!programDay) {\n    return aProgress;\n  }\n  const dayExercises = Program_getProgramDayUsedExercises(programDay);\n  const programExercises = programExerciseIds\n    ? CollectionUtils_compact(programExerciseIds.map((id) => dayExercises.find((e) => e.key === id)))\n    : dayExercises;\n\n  return {\n    ...aProgress,\n    entries: aProgress.entries.map((entry) => {\n      const programExercise =\n        entry.programExerciseId != null ? programExercises.find((e) => e.key === entry.programExerciseId) : undefined;\n      if (!programExercise) {\n        return entry;\n      }\n      try {\n        return Progress_runUpdateScriptForEntry(\n          entry,\n          Progress_getDayData(aProgress),\n          programExercise,\n          program.states,\n          -1,\n          settings,\n          stats\n        );\n      } catch (error) {\n        const e = error as Error;\n        console.error(e);\n        Dialog_alert(`Error during executing 'update: custom()' script for ${programExercise.fullName}: ${e.message}`);\n        return entry;\n      }\n    }),\n  };\n}\n\nexport function Progress_runUpdateScript(\n  aProgress: IHistoryRecord,\n  programExercise: IPlannerProgramExercise,\n  otherStates: IByTag<IProgramState>,\n  entryIndex: number,\n  setIndex: number,\n  mode: IProgressMode,\n  settings: ISettings,\n  stats: IStats\n): IHistoryRecord {\n  if (mode === \"warmup\") {\n    return aProgress;\n  }\n  const entry = aProgress.entries[entryIndex];\n  let newEntry: IHistoryEntry;\n  try {\n    newEntry = Progress_runUpdateScriptForEntry(\n      entry,\n      Progress_getDayData(aProgress),\n      programExercise,\n      otherStates,\n      setIndex,\n      settings,\n      stats\n    );\n  } catch (error) {\n    const e = error as Error;\n    console.error(e);\n    Dialog_alert(`Error during executing 'update: custom()' script for ${programExercise.fullName}: ${e.message}`);\n    newEntry = entry;\n  }\n  const progress = lf(aProgress).p(\"entries\").i(entryIndex).set(newEntry);\n  return progress;\n}\n\nexport function Progress_applyBindings(\n  oldEntry: IHistoryEntry,\n  bindings: IScriptBindings,\n  settings: ISettings\n): IHistoryEntry {\n  const keys = [\n    \"RPE\",\n    \"minReps\",\n    \"reps\",\n    \"weights\",\n    \"amraps\",\n    \"logrpes\",\n    \"timers\",\n    \"setTime\",\n    \"originalWeights\",\n    \"askweights\",\n  ] as const;\n  // Deep-clone ONLY `sets` (the part the loop below mutates) and shallow-spread the rest of the entry,\n  // so `exercise`/`warmupSets` keep their reference. The previous whole-entry ObjectUtils_clone gave\n  // entry.exercise a value-identical NEW reference on every set completion, which defeated the\n  // O(per-exercise-history) memos in the graph/history workout cards downstream.\n  const lastCompletedIndex = CollectionUtils_findIndexReverse(bindings.completedReps, (r) => r != null) + 1;\n  const entry: IHistoryEntry = {\n    ...oldEntry,\n    sets: ObjectUtils_clone(oldEntry.sets.slice(0, Math.max(lastCompletedIndex, bindings.numberOfSets, 0))),\n  };\n  for (const key of keys) {\n    for (let i = 0; i < bindings[key].length; i += 1) {\n      if (entry.sets[i] == null) {\n        entry.sets[i] = {\n          vtype: \"set\",\n          id: UidFactory_generateUid(6),\n          index: i,\n          isUnilateral: Exercise_getIsUnilateral(entry.exercise, settings),\n          reps: 0,\n          weight: Weight_build(0, \"lb\"),\n          originalWeight: Weight_build(0, \"lb\"),\n          askWeight: false,\n          isCompleted: false,\n        };\n      }\n      if (!entry.sets[i].isCompleted) {\n        if (key === \"RPE\") {\n          const value = bindings.RPE[i];\n          entry.sets[i].rpe = value !== 0 ? value : undefined;\n        } else if (key === \"reps\") {\n          const value = bindings.reps[i];\n          entry.sets[i].reps = value;\n        } else if (key === \"minReps\") {\n          const value = bindings.minReps[i];\n          entry.sets[i].minReps = value !== 0 ? value : undefined;\n        } else if (key === \"weights\") {\n          const value = bindings.weights[i];\n          entry.sets[i].weight = value;\n        } else if (key === \"originalWeights\") {\n          const value = bindings.originalWeights[i];\n          entry.sets[i].originalWeight = value;\n        } else if (key === \"amraps\") {\n          const value = bindings.amraps[i];\n          entry.sets[i].isAmrap = !!value;\n        } else if (key === \"logrpes\") {\n          const value = bindings.logrpes[i];\n          entry.sets[i].logRpe = !!value;\n        } else if (key === \"askweights\") {\n          const value = bindings.askweights[i];\n          entry.sets[i].askWeight = !!value;\n        } else if (key === \"timers\") {\n          const value = bindings.timers[i];\n          entry.sets[i].timer = value != null && value >= 0 ? value : undefined;\n        } else if (key === \"setTime\") {\n          const value = bindings.setTime[i];\n          entry.sets[i].setTimer = value != null && value >= 0 ? value : undefined;\n        }\n      }\n    }\n  }\n  return entry;\n}\n\nexport function Progress_completeAmrapSet(\n  progress: IHistoryRecord,\n  entryIndex: number,\n  setIndex: number,\n  settings: ISettings\n): IHistoryRecord {\n  const entry = progress.entries[entryIndex];\n  const isUnilateral = Exercise_getIsUnilateral(entry.exercise, settings);\n  return lf(progress)\n    .p(\"entries\")\n    .i(entryIndex)\n    .p(\"sets\")\n    .i(setIndex)\n    .modify((progressSet) => {\n      return {\n        ...progressSet,\n        timestamp: !progressSet.isCompleted ? Date.now() : progressSet.timestamp,\n        completedRepsLeft: isUnilateral ? (progressSet.completedRepsLeft ?? progressSet.reps) : undefined,\n        completedReps: progressSet.completedReps ?? progressSet.reps,\n        completedWeight: progressSet.completedWeight ?? progressSet.weight,\n        isCompleted: !progressSet.isCompleted,\n      };\n    });\n}\n\nexport function Progress_shouldShowAmrapModal(\n  entry: IHistoryEntry,\n  setIndex: number,\n  mode: IProgressMode,\n  hasUserPromptedVars: boolean,\n  settings: ISettings\n): boolean {\n  const set = mode === \"warmup\" ? entry.warmupSets[setIndex] : entry.sets[setIndex];\n  const shouldLogRpe = !!set?.logRpe;\n  const shouldPromptUserVars = hasUserPromptedVars && Progress_hasLastUnfinishedSet(entry);\n  const isUnilateral = Exercise_getIsUnilateral(entry.exercise, settings);\n  const isAmrap =\n    (set?.completedReps == null || (isUnilateral && set?.completedRepsLeft == null)) &&\n    (!!set?.isAmrap || set.reps == null);\n  const shouldAskWeight = set?.completedWeight == null && (!!set?.askWeight || set.weight == null);\n  return !set.isCompleted && (shouldLogRpe || shouldPromptUserVars || isAmrap || shouldAskWeight);\n}\n\nexport function Progress_completeSet(\n  progress: IHistoryRecord,\n  entryIndex: number,\n  setIndex: number,\n  mode: IProgressMode,\n  hasUserPromptedVars: boolean,\n  settings: ISettings\n): IHistoryRecord {\n  const entry = progress.entries[entryIndex];\n  const set = mode === \"warmup\" ? entry.warmupSets[setIndex] : entry.sets[setIndex];\n  const setTimerModal = progress.setTimer;\n  const hasOpenSetTimer =\n    setTimerModal != null && setTimerModal.entryIndex === entryIndex && setTimerModal.setIndex === setIndex;\n  // The first \"complete\" on a timed set starts its clock (opens the set-timer modal) instead of\n  // completing it — the actual completion happens on the second signal (Stop & record), mirroring\n  // how the AMRAP modal defers completion. See Progress_completeSetAction for the recording step.\n  if (\n    mode === \"workout\" &&\n    set?.setTimer != null &&\n    !set.isCompleted &&\n    !hasOpenSetTimer &&\n    set.completedSetTimer == null\n  ) {\n    return {\n      ...progress,\n      setTimer: { entryIndex, setIndex, startedAt: Date.now(), nonce: Date.now() },\n    };\n  }\n  const shouldLogRpe = !!set?.logRpe;\n  const shouldPromptUserVars = hasUserPromptedVars && Progress_hasLastUnfinishedSet(entry);\n  const isUnilateral = Exercise_getIsUnilateral(entry.exercise, settings);\n  const isAmrap =\n    (set?.completedReps == null || (isUnilateral && set?.completedRepsLeft == null)) &&\n    (!!set?.isAmrap || set.reps == null);\n  const shouldAskWeight = set?.completedWeight == null && (!!set?.askWeight || set.weight == null);\n  if (mode === \"warmup\") {\n    return lf(progress)\n      .p(\"entries\")\n      .i(entryIndex)\n      .p(\"warmupSets\")\n      .i(setIndex)\n      .modify((progressSet) => {\n        return {\n          ...progressSet,\n          timestamp: !progressSet.isCompleted ? Date.now() : progressSet.timestamp,\n          completedRepsLeft: isUnilateral ? (progressSet.completedRepsLeft ?? progressSet.reps) : undefined,\n          completedReps: progressSet.completedReps ?? progressSet.reps,\n          completedWeight: progressSet.completedWeight ?? progressSet.weight,\n          isCompleted: !progressSet.isCompleted,\n        };\n      });\n  } else if (Progress_shouldShowAmrapModal(entry, setIndex, mode, hasUserPromptedVars, settings)) {\n    return {\n      ...progress,\n      amrapModal: {\n        entryIndex,\n        setIndex,\n        nonce: Date.now(),\n        logRpe: shouldLogRpe,\n        userVars: shouldPromptUserVars,\n        isAmrap: isAmrap,\n        askWeight: shouldAskWeight,\n      },\n    };\n  } else {\n    return Progress_completeAmrapSet(progress, entryIndex, setIndex, settings);\n  }\n}\n\nexport function Progress_getFirstIncompleteWorkoutSet(\n  progress: IHistoryRecord,\n  after?: { entryIndex: number; setIndex: number }\n): { entryIndex: number; setIndex: number } | undefined {\n  const startEntry = after?.entryIndex ?? 0;\n  for (let entryIndex = startEntry; entryIndex < progress.entries.length; entryIndex += 1) {\n    const sets = progress.entries[entryIndex].sets;\n    const startSet = after != null && entryIndex === after.entryIndex ? after.setIndex + 1 : 0;\n    for (let setIndex = startSet; setIndex < sets.length; setIndex += 1) {\n      if (!sets[setIndex].isCompleted) {\n        return { entryIndex, setIndex };\n      }\n    }\n  }\n  return undefined;\n}\n\nexport function Progress_getNextTimedSet(\n  progress: IHistoryRecord\n): { entryIndex: number; setIndex: number } | undefined {\n  // The \"next\" set for an auto/EMOM advance is the set right after the one the timer belongs to — NOT the\n  // globally-first incomplete set. Users don't work exercises strictly top-to-bottom, so an earlier untimed\n  // exercise left incomplete would otherwise be picked as \"next\", have no setTimer, and silently stop the chain.\n  const current =\n    progress.setTimer != null\n      ? { entryIndex: progress.setTimer.entryIndex, setIndex: progress.setTimer.setIndex }\n      : progress.timerEntryIndex != null && progress.timerSetIndex != null\n        ? { entryIndex: progress.timerEntryIndex, setIndex: progress.timerSetIndex }\n        : undefined;\n  // In a superset the next timed set is the next group member's incomplete set (Crunch → Hollow → Crunch …),\n  // not the current exercise's own next set — otherwise the auto-advance opens a set for the exercise the\n  // clock just left instead of the one now shown. Fall back to raw order once the group is exhausted.\n  const next =\n    (current != null ? Progress_getNextTimedSetInSuperset(progress, current) : undefined) ??\n    Progress_getFirstIncompleteWorkoutSet(progress, current);\n  if (next == null) {\n    return undefined;\n  }\n  const set = progress.entries[next.entryIndex]?.sets[next.setIndex];\n  return set?.setTimer != null ? next : undefined;\n}\n\nfunction Progress_getNextTimedSetInSuperset(\n  progress: IHistoryRecord,\n  current: { entryIndex: number; setIndex: number }\n): { entryIndex: number; setIndex: number } | undefined {\n  const entry = progress.entries[current.entryIndex];\n  if (entry?.superset == null) {\n    return undefined;\n  }\n  // Reuse the same superset resolver the pager uses (Progress_maybeApplySuperset), so the auto-advance\n  // opens a set for the very exercise now shown. It skips finished group members and returns undefined\n  // once the group is exhausted, letting the caller fall back to raw order for any later timed exercise.\n  const nextEntry = Progress_getNextEntry(progress, entry, \"workout\", false);\n  if (nextEntry == null || nextEntry.id === entry.id) {\n    return undefined;\n  }\n  const entryIndex = progress.entries.findIndex((e) => e.id === nextEntry.id);\n  const setIndex = nextEntry.sets.findIndex((s) => !s.isCompleted);\n  if (entryIndex < 0 || setIndex < 0) {\n    return undefined;\n  }\n  return { entryIndex, setIndex };\n}\n\n// Moves the set-timer banner to the next timed set (or closes it if there's none) and clears any rest\n// timer. `freshNonce` controls whether the workout screen re-opens the banner: keep the nonce for an\n// in-place advance (EMOM, banner already open), use a fresh one after rest (banner was closed).\nexport function Progress_advanceTimedSet(progress: IHistoryRecord, freshNonce: boolean): IHistoryRecord {\n  const next = Progress_getNextTimedSet(progress);\n  const prevNonce = progress.setTimer?.nonce;\n  // Advancing ends the current (auto) rest — cancel its pending \"rest is over\" notification so it doesn't\n  // fire during the next set's clock.\n  if (progress.timerSince != null) {\n    NativeTimerBridge_stopTimer();\n  }\n  // Follow the clock to the next set's exercise so the shown exercise tracks the active set (EMOM/Tabata can\n  // roll into a different exercise). currentEntryIndex syncs, so every client's view moves with it.\n  const nextEntryIndex = next != null ? next.entryIndex : progress.currentEntryIndex;\n  const entryChanged = nextEntryIndex !== (progress.currentEntryIndex ?? 0);\n  return {\n    ...progress,\n    timerSince: undefined,\n    timer: undefined,\n    timerMode: undefined,\n    timerEntryIndex: undefined,\n    timerSetIndex: undefined,\n    setTimer: next != null ? { ...next, startedAt: Date.now(), nonce: freshNonce ? Date.now() : prevNonce } : undefined,\n    currentEntryIndex: nextEntryIndex,\n    // The pager scrolls on a forceUpdateEntryIndex flip, not on currentEntryIndex alone (so swipes aren't\n    // fought). Flip it when an auto-advance crosses into another exercise so the pager scrolls to follow.\n    ui: entryChanged ? { ...progress.ui, forceUpdateEntryIndex: !progress.ui?.forceUpdateEntryIndex } : progress.ui,\n  };\n}\n\n// The single place that decides what happens after a timed set is recorded+completed from its clock.\nexport function Progress_proceedAfterTimedSet(\n  progress: IHistoryRecord,\n  entryIndex: number,\n  setIndex: number,\n  settings: ISettings,\n  subscription: ISubscription | undefined,\n  isPlayground?: boolean\n): IHistoryRecord {\n  // AMRAP took over (set isn't completed yet). Keep the set-timer modal open so the amrap modal stacks\n  // cleanly on top of it — clearing it here would race the amrap push and pop the wrong screen. The\n  // set-timer modal is closed (and rest started) when amrap resolves; see Progress_changeAmrapAction.\n  if (progress.amrapModal != null) {\n    return progress;\n  }\n  // The playground has no rest timers (like normal-set completion, see below) and doesn't run circuits in real\n  // time — just close the banner. No rest, no EMOM/auto advance; the user taps the next set to continue.\n  if (isPlayground) {\n    return { ...progress, setTimer: undefined };\n  }\n  const set = progress.entries[entryIndex]?.sets[setIndex];\n  // EMOM-style: auto with no rest rolls straight into the next timed set in the same banner.\n  if (set?.auto && (set.timer ?? 0) === 0) {\n    return Progress_advanceTimedSet(progress, false);\n  }\n  // Otherwise close the banner and start the deferred rest timer. Backdate its start to when the set\n  // should have ended (clock start + recorded duration) rather than \"now\", so reopening the app after\n  // the screen was locked past the target reconciles to the correct rest elapsed instead of resetting it.\n  let newProgress: IHistoryRecord = { ...progress, setTimer: undefined };\n  if (set?.isCompleted && set.setTimer != null) {\n    const startedAt = progress.setTimer?.startedAt;\n    // Rest begins when the timed window actually ended on the clock — not at the logged history value. A set\n    // logged early via \"Log & keep timing\" keeps that earlier time as its record, but its clock runs on to the\n    // target and auto-closes there. So when a non-overflow set reached its target, backdate the rest from the\n    // target; only an early \"Stop & Record\" (clock stopped before the target) backdates from the recorded time.\n    const reachedTarget = startedAt != null && !set.isOverflowSetTimer && Date.now() - startedAt >= set.setTimer * 1000;\n    const restOffsetSeconds = reachedTarget ? set.setTimer : set.completedSetTimer;\n    const restSince =\n      startedAt != null && restOffsetSeconds != null ? startedAt + restOffsetSeconds * 1000 : Date.now();\n    newProgress = Progress_startTimer(newProgress, restSince, \"workout\", entryIndex, setIndex, settings, subscription);\n  }\n  return newProgress;\n}\n\n// Discard the set timer banner without recording. If the set was already logged (via \"Log & keep\"),\n// start its deferred rest.\nexport function Progress_closeTimedSet(\n  progress: IHistoryRecord,\n  settings: ISettings,\n  subscription: ISubscription | undefined,\n  isPlayground?: boolean\n): IHistoryRecord {\n  const stm = progress.setTimer;\n  if (stm == null) {\n    return progress;\n  }\n  let newProgress: IHistoryRecord = { ...progress, setTimer: undefined };\n  const set = newProgress.entries[stm.entryIndex]?.sets[stm.setIndex];\n  // The playground has no rest timers, so discarding a \"Log & keep timing\" set just closes the banner.\n  if (!isPlayground && set?.isCompleted && set.setTimer != null && newProgress.amrapModal == null) {\n    newProgress = Progress_startTimer(\n      newProgress,\n      Date.now(),\n      \"workout\",\n      stm.entryIndex,\n      stm.setIndex,\n      settings,\n      subscription\n    );\n  }\n  return newProgress;\n}\n\n// Cheap pure predicate (no program evaluation) telling whether Progress_checkSetTimer would do anything.\n// Lets per-second pollers skip resolving program context + dispatching when nothing is due.\nexport function Progress_isSetTimerCheckDue(progress: IHistoryRecord, now: number): boolean {\n  if (progress.amrapModal != null) {\n    return false;\n  }\n  const stm = progress.setTimer;\n  if (stm != null) {\n    const set = progress.entries[stm.entryIndex]?.sets[stm.setIndex];\n    // No !isCompleted guard: a set logged via \"Log & keep timing\" keeps the clock running with the modal\n    // open, and must still auto-close + start rest when the clock reaches the (non-overflow) target.\n    return !!(set?.setTimer != null && !set.isOverflowSetTimer && now - stm.startedAt >= set.setTimer * 1000);\n  }\n  if (\n    progress.timer != null &&\n    progress.timerSince != null &&\n    progress.timerEntryIndex != null &&\n    progress.timerSetIndex != null\n  ) {\n    const restSet = progress.entries[progress.timerEntryIndex]?.sets[progress.timerSetIndex];\n    return !!(\n      restSet?.auto &&\n      now - progress.timerSince >= progress.timer * 1000 &&\n      Progress_getNextTimedSet(progress) != null\n    );\n  }\n  return false;\n}\n\n// Time-driven set timer transitions, safe to poll. Returns the same `progress` reference when nothing\n// is due, so callers can skip dispatching. Two cases: (A) a non-overflow timed set's work timer reached\n// its target → record+complete+proceed (overflow `+` sets count up past target and are stopped manually);\n// (B) an `auto` set's rest expired → advance to the next timed set.\nexport function Progress_checkSetTimer(\n  settings: ISettings,\n  stats: IStats,\n  progress: IHistoryRecord,\n  subscription: ISubscription | undefined,\n  programExercise: IPlannerProgramExercise | undefined,\n  otherStates: IByExercise<IProgramState> | undefined,\n  nowArg?: number,\n  isPlayground?: boolean\n): IHistoryRecord {\n  const now = nowArg ?? Date.now();\n  if (progress.amrapModal != null) {\n    return progress;\n  }\n  const stm = progress.setTimer;\n  if (stm != null) {\n    const set = progress.entries[stm.entryIndex]?.sets[stm.setIndex];\n    // No !isCompleted guard: a \"Log & keep timing\" set is already completed but keeps the clock running, and\n    // must still auto-close + rest at the target. completeSetAction's already-logged branch handles it.\n    if (set?.setTimer != null && !set.isOverflowSetTimer && now - stm.startedAt >= set.setTimer * 1000) {\n      // A set logged via \"Log & keep timing\" keeps the time the user logged it at — don't overwrite it with\n      // the target. A not-yet-logged set records the target (it ran the full duration).\n      const recordedSeconds = set.isCompleted ? (set.completedSetTimer ?? set.setTimer) : set.setTimer;\n      return Progress_completeSetAction(\n        settings,\n        stats,\n        progress,\n        {\n          type: \"CompleteSetAction\",\n          entryIndex: stm.entryIndex,\n          setIndex: stm.setIndex,\n          mode: \"workout\",\n          programExercise,\n          otherStates,\n          forceUpdateEntryIndex: false,\n          isExternal: true,\n          isPlayground: isPlayground ?? false,\n          recordedSeconds,\n        },\n        subscription\n      );\n    }\n    return progress;\n  }\n  if (\n    progress.timer != null &&\n    progress.timerSince != null &&\n    progress.timerEntryIndex != null &&\n    progress.timerSetIndex != null\n  ) {\n    const restSet = progress.entries[progress.timerEntryIndex]?.sets[progress.timerSetIndex];\n    if (\n      restSet?.auto &&\n      now - progress.timerSince >= progress.timer * 1000 &&\n      Progress_getNextTimedSet(progress) != null\n    ) {\n      return Progress_advanceTimedSet(progress, true);\n    }\n  }\n  return progress;\n}\n\nexport function Progress_getIsRpeEnabled(sets: ISet[]): boolean {\n  return sets.some((set) => set.rpe != null);\n}\n\nexport function Progress_getIsMinRepsEnabled(sets: ISet[]): boolean {\n  return sets.some((set) => set.minReps != null);\n}\n\nexport function Progress_updateAmrapRepsInExercise(progress: IHistoryRecord, value?: number): IHistoryRecord {\n  if (progress.amrapModal != null) {\n    const { entryIndex, setIndex } = progress.amrapModal;\n    return lf(progress).p(\"entries\").i(entryIndex).p(\"sets\").i(setIndex).p(\"completedReps\").set(value);\n  } else {\n    return progress;\n  }\n}\n\nexport function Progress_updateAmrapRepsLeftInExercise(progress: IHistoryRecord, value?: number): IHistoryRecord {\n  if (progress.amrapModal != null) {\n    const { entryIndex, setIndex } = progress.amrapModal;\n    return lf(progress).p(\"entries\").i(entryIndex).p(\"sets\").i(setIndex).p(\"completedRepsLeft\").set(value);\n  } else {\n    return progress;\n  }\n}\n\nexport function Progress_updateRpeInExercise(progress: IHistoryRecord, value?: number): IHistoryRecord {\n  if (progress.amrapModal != null) {\n    const { entryIndex, setIndex } = progress.amrapModal;\n    const newValue = value != null ? Math.round(Math.min(10, Math.max(0, value)) / 0.5) * 0.5 : undefined;\n    return lf(progress).p(\"entries\").i(entryIndex).p(\"sets\").i(setIndex).p(\"completedRpe\").set(newValue);\n  } else {\n    return progress;\n  }\n}\n\nexport function Progress_updateWeightInExercise(progress: IHistoryRecord, value?: IWeight): IHistoryRecord {\n  if (progress.amrapModal != null) {\n    const { entryIndex, setIndex } = progress.amrapModal;\n    return lf(progress).p(\"entries\").i(entryIndex).p(\"sets\").i(setIndex).p(\"completedWeight\").set(value);\n  } else {\n    return progress;\n  }\n}\n\nexport function Progress_updateUserPromptedStateVars(\n  progress: IHistoryRecord,\n  programExerciseId: string,\n  userPromptedStateVars: IProgramState\n): IHistoryRecord {\n  return {\n    ...progress,\n    userPromptedStateVars: {\n      ...(progress.userPromptedStateVars || {}),\n      [programExerciseId]: userPromptedStateVars,\n    },\n  };\n}\n\nexport function Progress_editExerciseNotes(dispatch: IDispatch, entryIndex: number, notes: string): void {\n  updateProgress(dispatch, [lb<IHistoryRecord>().p(\"entries\").i(entryIndex).p(\"notes\").record(notes)], \"edit-notes\");\n}\n\nexport function Progress_addExercise(dispatch: IDispatch, exerciseType: IExerciseType, numberOfEntries: number): void {\n  updateProgress(\n    dispatch,\n    [\n      lb<IHistoryRecord>()\n        .p(\"entries\")\n        .recordModify((entries) => {\n          return [...entries, History_createCustomEntry(exerciseType, numberOfEntries)].map((e, i) => ({\n            ...e,\n            index: i,\n          }));\n        }),\n      lb<IHistoryRecord>().p(\"currentEntryIndex\").record(numberOfEntries),\n    ],\n    \"add-exercise\"\n  );\n}\n\nexport function Progress_isEligibleForInferredWeight(set: ISet): boolean {\n  return set.originalWeight == null && set.reps != null && set.rpe != null;\n}\n\n// Which past set to read the new exercise off. Closest reps rather than the heaviest set: the e1RM\n// round trip below only cancels its own error near the rep range it was estimated from, and an e1RM\n// extrapolated from a 15-rep accessory is meaningless far away from 15. Warmups are not considered —\n// they would drag the estimate down.\nfunction findSwapSourceSet(prevEntry: IHistoryEntry | undefined, targetReps: number): ISet | undefined {\n  let best: ISet | undefined;\n  let bestDistance = Infinity;\n  let bestOnerm: IWeight | undefined;\n  for (const set of prevEntry?.sets ?? []) {\n    const reps = set.completedReps ?? set.reps;\n    const weight = set.completedWeight ?? set.weight;\n    if (!set.isCompleted || reps == null || reps <= 0 || weight == null || weight.value <= 0) {\n      continue;\n    }\n    const distance = Math.abs(reps - targetReps);\n    const onerm = Weight_getOneRepMax(weight, reps, set.completedRpe ?? set.rpe);\n    if (distance < bestDistance || (distance === bestDistance && (bestOnerm == null || Weight_gt(onerm, bestOnerm)))) {\n      best = set;\n      bestDistance = distance;\n      bestOnerm = onerm;\n    }\n  }\n  return best;\n}\n\n// What the new exercise should weigh for this set's target, when the program's own number is an\n// absolute weight and so means nothing on a different lift — 500lb of leg press is not 500lb of\n// lateral raise. Answered through an e1RM, which is unreliable as an absolute number for high-rep\n// accessories but fine as an intermediate, because the error cancels on the way back out: a source\n// set at the same reps and RPE returns exactly its own weight, with no special case for it.\nfunction swapDerivedWeight(\n  set: ISet,\n  exerciseType: IExerciseType,\n  settings: ISettings,\n  prevEntry: IHistoryEntry | undefined\n): IWeight {\n  const targetReps = set.reps ?? 1;\n  const targetRpe = set.rpe ?? 10;\n  const source = findSwapSourceSet(prevEntry, targetReps);\n  const sourceWeight = source?.completedWeight ?? source?.weight;\n  const sourceReps = source?.completedReps ?? source?.reps;\n  if (sourceWeight == null || sourceReps == null) {\n    // No history for this exercise, so fall back to its 1RM — explicit if the user set one, the\n    // exercise DB's starting weight otherwise. That is already what a percentage-based set does on\n    // a swap, so the no-history case behaves the same for both kinds of program.\n    return Weight_evaluateWeight(Weight_rpePct(targetReps, targetRpe), exerciseType, settings);\n  }\n  // Defaulting the source RPE to the *target's* rather than to 10 is what makes the two multipliers\n  // cancel for the many programs that carry no RPE at all, so equal reps hand back the same weight.\n  const sourceRpe = source?.completedRpe ?? source?.rpe ?? targetRpe;\n  const ratio = Weight_rpeMultiplier(targetReps, targetRpe) / Weight_rpeMultiplier(sourceReps, sourceRpe);\n  return Weight_multiply(sourceWeight, ratio);\n}\n\n// A swapped-in exercise the program already knows about brings its own authored ramp with it, even\n// when the definition lives on a day the user isn't doing today. The first authored definition wins:\n// the same exercise carrying different warmups on different days is rare, and `warmup: none` is\n// authored too, so it is honored as an answer rather than skipped over as a missing one.\nexport function Progress_programWarmupsForExerciseType(\n  evaluatedProgram: IEvaluatedProgram | undefined,\n  exerciseType: IExerciseType,\n  settings: ISettings\n): IProgramExerciseWarmupSet[] | undefined {\n  for (const programExercise of evaluatedProgram ? Program_getAllProgramExercisesWithType(evaluatedProgram) : []) {\n    if (Exercise_eq(programExercise.exerciseType, exerciseType)) {\n      const warmups = PlannerProgramExercise_programWarmups(programExercise, settings);\n      if (warmups != null) {\n        return warmups;\n      }\n    }\n  }\n  return undefined;\n}\n\nexport function Progress_updateSetWeights(\n  entry: IHistoryEntry,\n  exerciseType: IExerciseType,\n  settings: ISettings,\n  prevEntry?: IHistoryEntry,\n  programWarmups?: IProgramExerciseWarmupSet[]\n): IHistoryEntry {\n  const unit = Equipment_getUnitForExerciseType(settings, exerciseType) ?? settings.units;\n  const newSets = entry.sets.map((set) => {\n    if (set.isCompleted) {\n      return set;\n    }\n    if (Progress_isEligibleForInferredWeight(set) || Weight_isPct(set.originalWeight)) {\n      const originalWeight = set.originalWeight ?? Weight_rpePct(set.reps ?? 1, set.rpe ?? 10);\n      const evaluatedWeight = Weight_evaluateWeight(originalWeight, exerciseType, settings);\n      const weight = Weight_roundConvertTo(evaluatedWeight, settings, unit, exerciseType);\n      return { ...set, weight };\n    }\n    if (set.originalWeight != null) {\n      const weight = Weight_roundConvertTo(\n        swapDerivedWeight(set, exerciseType, settings, prevEntry),\n        settings,\n        unit,\n        exerciseType\n      );\n      // Both fields take the loadable number. The target here is one the app invented, not a program\n      // value being approximated, so leaving them different would light up the rounding strikethrough\n      // — and its \"adjusted to match what you can load\" explanation — for a weight nothing rounded.\n      return { ...set, weight, originalWeight: weight };\n    }\n    return set;\n  });\n  // The old exercise's ramp is meaningless on the new one, so it is rebuilt: from whatever the\n  // program authors for the new exercise if it defines it anywhere, and from that exercise's own\n  // default scheme otherwise — which correctly leaves an accessory with no warmups at all.\n  const hasCompletedWarmup = entry.warmupSets.some((set) => set.isCompleted);\n  const warmupSets = hasCompletedWarmup\n    ? entry.warmupSets\n    : Exercise_getWarmupSets(exerciseType, newSets[0]?.weight, settings, programWarmups);\n  return { ...entry, sets: newSets, warmupSets };\n}\n\nexport function Progress_doesUse1RM(entry: IHistoryEntry): boolean {\n  return entry.sets.some((set) => (set.originalWeight == null ? set.rpe != null : Weight_isPct(set.originalWeight)));\n}\n\nexport function Progress_changeExercise(\n  dispatch: IDispatch,\n  settings: ISettings,\n  history: IHistoryRecord[],\n  evaluatedProgram: IEvaluatedProgram | undefined,\n  progressId: number,\n  exerciseType: IExerciseType,\n  entryIndex: number,\n  shouldKeepProgramExerciseId: boolean\n): void {\n  // `progressId` is the record's own id — 0 for the ongoing workout (Program_nextHistoryRecord),\n  // the real id when a past workout is being edited — which is exactly what has to be excluded from\n  // the history lookup, so no caller has to remember to pass it.\n  const prevEntry = History_findLastEntryForExerciseType(history, exerciseType, progressId);\n  const programWarmups = Progress_programWarmupsForExerciseType(evaluatedProgram, exerciseType, settings);\n  updateState(\n    dispatch,\n    [\n      Progress_lbProgress(progressId)\n        .p(\"entries\")\n        .i(entryIndex)\n        .recordModify((entry) => {\n          entry = Progress_updateSetWeights(entry, exerciseType, settings, prevEntry, programWarmups);\n          return {\n            ...entry,\n            exercise: exerciseType,\n            ...(shouldKeepProgramExerciseId ? {} : { programExerciseId: undefined }),\n            changed: true,\n          };\n        }),\n    ],\n    \"Change exercise\"\n  );\n}\n\n// Swapping a program exercise re-keys it, and entries point at the program by key — without\n// this the ongoing workout silently stops following the exercise it came from. Entries the\n// user already swapped by hand (`changed`) keep their own exercise either way, so they're\n// left alone. Once the ids line up the usual ApplyProgramChangesToProgress pass swaps the\n// exercise and regenerates its sets.\nexport function Progress_remapProgramExerciseId(\n  progress: IHistoryRecord,\n  oldKey: string,\n  newKey: string\n): IHistoryRecord {\n  const entries = progress.entries.map((entry) =>\n    entry.programExerciseId === oldKey && !entry.changed ? { ...entry, programExerciseId: newKey } : entry\n  );\n  return { ...progress, entries };\n}\n\n// Every entry index stored on the record is a position in `entries`, so inserting, dropping or re-sorting\n// invalidates all of them at once — a rest timer or an open AMRAP prompt would silently retarget a different\n// exercise. Anything whose entry is gone is cleared rather than left pointing at whoever moved into that slot.\n//\n// Matched by object identity, not by `entry.id`: ids are derived from the exercise\n// (`Progress_getEntryId`), so a program Squat and an ad-hoc Squat carry the same one, and a lookup would\n// hand a timer to the wrong entry. Callers therefore have to pass through the *same* entry objects for\n// everything that survived — which is what reconciling by filter/splice/sort already does.\nexport function Progress_reindexEntries(progress: IHistoryRecord, newEntries: IHistoryEntry[]): IHistoryRecord {\n  const newIndexOf = new Map<IHistoryEntry, number>(newEntries.map((e, i) => [e, i]));\n  const remap = (index: number | undefined): number | undefined => {\n    const entry = index != null ? progress.entries[index] : undefined;\n    return entry != null ? newIndexOf.get(entry) : undefined;\n  };\n  // Only ever a position to render at, never a subject that can go missing, so it lands on a neighbor instead of\n  // being cleared — a workout with entries always has one selected.\n  const clamp = (index: number | undefined): number | undefined => {\n    if (index == null || newEntries.length === 0) {\n      return undefined;\n    }\n    return remap(index) ?? Math.max(0, Math.min(index, newEntries.length - 1));\n  };\n  const keepAt = <T extends { entryIndex: number }>(value: T | undefined): T | undefined => {\n    const entryIndex = value != null ? remap(value.entryIndex) : undefined;\n    return value != null && entryIndex != null ? { ...value, entryIndex } : undefined;\n  };\n  const ui = progress.ui;\n  const currentEntryIndex = clamp(progress.currentEntryIndex);\n  const pickerState = ui?.exercisePicker?.state;\n  return {\n    ...progress,\n    entries: newEntries.map((e, i) => (e.index === i ? e : { ...e, index: i })),\n    currentEntryIndex,\n    timerEntryIndex: remap(progress.timerEntryIndex),\n    setTimer: keepAt(progress.setTimer),\n    amrapModal: keepAt(progress.amrapModal),\n    ui:\n      ui == null\n        ? ui\n        : {\n            ...ui,\n            editModal: keepAt(ui.editModal),\n            editSetModal: keepAt(ui.editSetModal),\n            setTimerEditModal: keepAt(ui.setTimerEditModal),\n            roundingModal: keepAt(ui.roundingModal),\n            exerciseBottomSheet: keepAt(ui.exerciseBottomSheet),\n            entryIndexEditMode: remap(ui.entryIndexEditMode),\n            // The open swap picker writes straight into `entries[entryIndex]`, so a stale one retargets whoever\n            // moved into that slot. Nested a level deeper than the rest, hence not a `keepAt`.\n            exercisePicker:\n              pickerState?.entryIndex == null\n                ? ui.exercisePicker\n                : { ...ui.exercisePicker, state: { ...pickerState, entryIndex: remap(pickerState.entryIndex) } },\n            // The pager only scrolls when this flips — `currentEntryIndex` alone moves the highlight and leaves\n            // the shown exercise behind. Flipped only when the selected entry actually moved, so the user keeps\n            // looking at the exercise they were on.\n            forceUpdateEntryIndex:\n              currentEntryIndex !== progress.currentEntryIndex ? !ui.forceUpdateEntryIndex : ui.forceUpdateEntryIndex,\n          },\n  };\n}\n\n// Warmups count: they're work the user did and would have to redo. One definition, so the swap confirmation and\n// the reconciliation below can't disagree about whether an entry is worth protecting.\nexport function Progress_hasCompletedWork(entry: IHistoryEntry): boolean {\n  return entry.sets.some((set) => set.isCompleted) || entry.warmupSets.some((set) => set.isCompleted);\n}\n\nexport function Progress_hasCompletedSetsForProgramExerciseId(progress: IHistoryRecord, key: string): boolean {\n  return progress.entries.some(\n    (entry) => entry.programExerciseId === key && !entry.changed && Progress_hasCompletedWork(entry)\n  );\n}\n\nexport function Progress_changeEquipment(\n  dispatch: IDispatch,\n  progressId: number,\n  entryIndex: number,\n  equipment: IEquipment\n): void {\n  updateState(\n    dispatch,\n    [Progress_lbProgress(progressId).p(\"entries\").i(entryIndex).p(\"exercise\").p(\"equipment\").record(equipment)],\n    \"Change equipment\"\n  );\n}\n\nexport function Progress_editNotes(dispatch: IDispatch, progressId: number, notes: string): void {\n  updateState(dispatch, [Progress_lbProgress(progressId).p(\"notes\").record(notes)], \"Edit workout notes\");\n}\n\nexport function Progress_getDayData(progress: IHistoryRecord): IDayData {\n  return {\n    day: progress.day,\n    week: progress.week,\n    dayInWeek: progress.dayInWeek,\n  };\n}\n\nexport function Progress_applyProgramExercise(\n  progressEntry: IHistoryEntry | undefined,\n  index: number,\n  programExercise: IPlannerProgramExerciseWithType,\n  settings: ISettings,\n  forceWarmupSets?: boolean\n): IHistoryEntry {\n  const variationIndex = PlannerProgramExercise_currentSetVariationIndex(programExercise);\n  const sets = programExercise.evaluatedSetVariations[variationIndex].sets;\n  const programExerciseWarmupSets = PlannerProgramExercise_programWarmups(programExercise, settings);\n\n  if (progressEntry != null) {\n    const newSetsNum = Math.max(progressEntry.sets.length, sets.length);\n    const newSets: ISet[] = [];\n    for (let i = 0; i < newSetsNum; i++) {\n      const progressSet: ISet | undefined = progressEntry.sets[i] as ISet | undefined;\n      const programSet = sets[i];\n      if (!!progressSet?.isCompleted) {\n        newSets.push(progressSet);\n      } else if (programSet != null) {\n        const originalWeight = programSet.weight;\n        const weight = ProgramSet_getEvaluatedWeight(programSet, programExercise.exerciseType, settings);\n        newSets.push({\n          ...progressSet,\n          id: progressSet?.id ?? UidFactory_generateUid(6),\n          vtype: \"set\",\n          index: newSets.length,\n          reps: programSet.maxrep,\n          minReps: programSet.minrep,\n          rpe: programSet.rpe,\n          isUnilateral: Exercise_getIsUnilateral(programExercise.exerciseType, settings),\n          originalWeight,\n          weight,\n          isAmrap: programSet.isAmrap,\n          logRpe: programSet.logRpe,\n          label: programSet.label,\n          timer: programSet.timer,\n          setTimer: programSet.setTimer,\n          isOverflowSetTimer: programSet.isOverflowSetTimer,\n          auto: programSet.auto,\n          askWeight: programSet.askWeight,\n        });\n      }\n    }\n    let newWarmupSets = progressEntry.warmupSets;\n    if (progressEntry.warmupSets.every((w) => !w.isCompleted)) {\n      const firstWeight = newSets[0]?.weight;\n      forceWarmupSets = forceWarmupSets || Reps_isEmpty(newSets);\n      if (forceWarmupSets) {\n        const generated =\n          firstWeight != null\n            ? Exercise_getWarmupSets(programExercise.exerciseType, firstWeight, settings, programExerciseWarmupSets)\n            : [];\n        newWarmupSets = generated.map((ws, i) => ({\n          ...ws,\n          id: progressEntry.warmupSets[i]?.id ?? ws.id,\n        }));\n      } else {\n        newWarmupSets = progressEntry.warmupSets;\n      }\n    }\n\n    return {\n      ...progressEntry,\n      exercise: progressEntry.changed ? progressEntry.exercise : programExercise.exerciseType,\n      warmupSets: newWarmupSets,\n      sets: newSets,\n    };\n  } else {\n    const newSets = sets.map((set, i) => {\n      const weight = ProgramSet_getEvaluatedWeight(set, programExercise.exerciseType, settings);\n      return {\n        vtype: \"set\" as const,\n        id: UidFactory_generateUid(6),\n        index: i,\n        reps: set.maxrep,\n        minReps: set.minrep,\n        originalWeight: set.weight,\n        isUnilateral: Exercise_getIsUnilateral(programExercise.exerciseType, settings),\n        weight,\n        rpe: set.rpe,\n        logRpe: set.logRpe,\n        isAmrap: set.isAmrap,\n        label: set.label,\n        timer: set.timer,\n        setTimer: set.setTimer,\n        isOverflowSetTimer: set.isOverflowSetTimer,\n        auto: set.auto,\n        askWeight: set.askWeight,\n      };\n    });\n    const firstWeight = newSets[0]?.weight;\n\n    return {\n      vtype: \"history_entry\",\n      index,\n      id: Progress_getEntryId(programExercise.exerciseType, programExercise.label),\n      exercise: programExercise.exerciseType,\n      programExerciseId: programExercise.key,\n      sets: newSets,\n      warmupSets:\n        firstWeight != null\n          ? Exercise_getWarmupSets(programExercise.exerciseType, firstWeight, settings, programExerciseWarmupSets)\n          : [],\n    };\n  }\n}\n\nexport function Progress_getEntryId(exerciseType: IExerciseType, label?: string): string {\n  return CollectionUtils_compact([label, Exercise_toKey(exerciseType)]).join(\"_\");\n}\n\nexport interface IApplyProgramDayOptions {\n  // Restricts the pass to these exercises. Callers that pass it mean \"just re-apply these\" (equipment, exercise\n  // data), so they never get structural work.\n  programExerciseIds?: string[];\n  // The day's keys in canonical order *before* the program changed, from `Program_getDayExerciseKeys`. Structure\n  // is reconciled against this rather than against the entries alone: whether an exercise the day contains but\n  // the workout lacks was never added or was removed by the user is only answerable by diffing the two programs.\n  // Absent (fresh boot, restore, non-program change) means no structural work.\n  oldDayKeys?: string[];\n  // Only read when inserting — a newly added exercise runs its update script the same way a freshly started\n  // workout would, and that reads bodyweight.\n  stats?: IStats;\n}\n\n// The entry list is the program day minus the user's overrides, recomputed from scratch each time. Every step is\n// a function of (entries, oldDayKeys, newDayKeys), so applying the same program change twice is a no-op — the\n// listener can fire more than once for one logical edit, and a second pass must not insert a second copy.\nfunction reconcileStructure(\n  progress: IHistoryRecord,\n  program: IEvaluatedProgram,\n  day: number,\n  settings: ISettings,\n  oldDayKeys: string[],\n  stats: IStats\n): IHistoryEntry[] {\n  const dayExercises = Program_getDayExercisesInOrder(program, day);\n  const newDayKeys = dayExercises.map((e) => e.key);\n\n  // An exercise the day has but the workout doesn't is either one the user removed or one that was just added,\n  // and only the diff can tell them apart. Removals therefore need nothing recorded on the record.\n  const kept = progress.entries.filter(\n    (entry) =>\n      entry.programExerciseId == null ||\n      entry.changed ||\n      newDayKeys.indexOf(entry.programExerciseId) !== -1 ||\n      Progress_hasCompletedWork(entry)\n  );\n\n  const entries = [...kept];\n  const dayData = Program_getDayData(program, day);\n  for (const exercise of dayExercises) {\n    if (oldDayKeys.indexOf(exercise.key) !== -1) {\n      continue;\n    }\n    if (entries.some((e) => e.programExerciseId === exercise.key)) {\n      continue;\n    }\n    // Placed after whatever its program predecessor turned into, walking back past exercises the workout doesn't\n    // have: an added line asserts a position relative to its neighbors, not a re-sort of the whole day.\n    let at = 0;\n    for (let i = newDayKeys.indexOf(exercise.key) - 1; i >= 0; i -= 1) {\n      const predecessor = entries.findIndex((e) => e.programExerciseId === newDayKeys[i]);\n      if (predecessor !== -1) {\n        at = predecessor + 1;\n        break;\n      }\n    }\n    entries.splice(at, 0, Program_nextHistoryEntry(program, dayData, at, exercise, stats, settings));\n  }\n\n  const commonBefore = oldDayKeys.filter((key) => newDayKeys.indexOf(key) !== -1);\n  const commonAfter = newDayKeys.filter((key) => oldDayKeys.indexOf(key) !== -1);\n  const isReordered =\n    commonBefore.length !== commonAfter.length || commonBefore.some((key, i) => key !== commonAfter[i]);\n  if (!isReordered) {\n    return entries;\n  }\n  // Adhoc entries and orphans kept for their logged sets have no position of their own, so they take their\n  // predecessor's and ride along with it — someone who added an accessory right after Squat meant it to be there.\n  // Entries ahead of the first program exercise stay at the front.\n  let inherited = -1;\n  const sortKeys = entries.map((entry) => {\n    const own = entry.programExerciseId != null ? newDayKeys.indexOf(entry.programExerciseId) : -1;\n    if (own !== -1) {\n      inherited = own;\n    }\n    return own !== -1 ? own : inherited;\n  });\n  return entries\n    .map((entry, index) => ({ entry, index, sortKey: sortKeys[index] }))\n    .sort((a, b) => (a.sortKey !== b.sortKey ? a.sortKey - b.sortKey : a.index - b.index))\n    .map((e) => e.entry);\n}\n\nexport function Progress_applyProgramDay(\n  progress: IHistoryRecord,\n  program: IEvaluatedProgram,\n  day: number,\n  settings: ISettings,\n  options?: IApplyProgramDayOptions\n): IHistoryRecord {\n  const programExerciseIds = options?.programExerciseIds;\n  const programDay = Program_getProgramDay(program, day);\n  if (!programDay) {\n    return progress;\n  }\n  // A caller that named exercises means \"just re-apply these\" and never gets structural work.\n  const structural =\n    programExerciseIds == null && options?.oldDayKeys != null\n      ? reconcileStructure(progress, program, day, settings, options.oldDayKeys, options.stats ?? Stats_getEmpty())\n      : undefined;\n  const reindexed = structural != null ? Progress_reindexEntries(progress, structural) : progress;\n  const newEntries = reindexed.entries.map((entry, index) => {\n    if (entry.programExerciseId == null) {\n      return entry;\n    }\n    if (programExerciseIds != null && !programExerciseIds.includes(entry.programExerciseId)) {\n      return entry;\n    }\n    const programExercise = Program_getProgramExerciseForKeyAndDay(program, day, entry.programExerciseId);\n    if (!programExercise) {\n      return entry;\n    }\n    return Progress_applyProgramExercise(entry, index, programExercise, settings, false);\n  });\n\n  return { ...reindexed, entries: newEntries };\n}\n\nexport function Progress_changeAmrapAction(\n  settings: ISettings,\n  stats: IStats,\n  progress: IHistoryRecord,\n  action: IChangeAMRAPAction,\n  subscription: ISubscription | undefined\n): IHistoryRecord {\n  let newProgress = { ...progress };\n  if (\n    action.amrapValue == null &&\n    action.amrapLeftValue == null &&\n    action.rpeValue == null &&\n    action.weightValue == null &&\n    ObjectUtils_keys(action.userVars || {}).length === 0\n  ) {\n    return { ...newProgress, amrapModal: undefined };\n  }\n  if (action.amrapValue != null) {\n    newProgress = Progress_updateAmrapRepsInExercise(newProgress, action.amrapValue);\n  }\n  if (action.amrapLeftValue != null) {\n    newProgress = Progress_updateAmrapRepsLeftInExercise(newProgress, action.amrapLeftValue);\n  }\n  if (action.logRpe) {\n    newProgress = Progress_updateRpeInExercise(newProgress, action.rpeValue);\n  }\n  if (action.weightValue != null) {\n    newProgress = Progress_updateWeightInExercise(newProgress, action.weightValue);\n  }\n  const programExerciseId = action.programExercise?.key;\n  if (ObjectUtils_keys(action.userVars || {}).length > 0 && programExerciseId != null) {\n    newProgress = Progress_updateUserPromptedStateVars(newProgress, programExerciseId, action.userVars || {});\n  }\n  newProgress = Progress_completeAmrapSet(newProgress, action.entryIndex, action.setIndex, settings);\n  if (action.programExercise) {\n    newProgress = Progress_runUpdateScript(\n      newProgress,\n      action.programExercise,\n      action.otherStates || {},\n      action.entryIndex,\n      action.setIndex,\n      \"workout\",\n      settings,\n      stats\n    );\n  }\n  if (Progress_isFullyEmptyOrFinishedSet(newProgress)) {\n    newProgress = Progress_stopTimer(newProgress);\n  }\n  newProgress = Progress_maybeApplySuperset(newProgress, action.entryIndex, \"workout\");\n  // A timed set keeps its set-timer modal open behind the amrap modal (see Progress_proceedAfterTimedSet).\n  // If it was recorded via \"Log & keep timing\" (keepTiming), leave the clock running and don't start rest;\n  // otherwise close the banner and start the deferred rest. For non-timed sets setTimerModal is already\n  // undefined, so this is just the normal rest start.\n  const amrapSetTimerModal = newProgress.setTimer;\n  if (amrapSetTimerModal?.keepTiming) {\n    newProgress = {\n      ...newProgress,\n      setTimer: { ...amrapSetTimerModal, keepTiming: undefined },\n    };\n  } else {\n    newProgress = { ...newProgress, setTimer: undefined };\n    // Intentionally \"now\", NOT backdated to the clock end like Progress_proceedAfterTimedSet does (see\n    // time-based-exercises.md §5.2). The time spent in the AMRAP modal is data entry, not rest — backdating\n    // would count it as elapsed rest and a short rest could be over the instant the user submits.\n    // The playground has no rest timers (matches Progress_proceedAfterTimedSet + normal-set completion).\n    if (!action.isPlayground) {\n      newProgress = Progress_startTimer(\n        newProgress,\n        new Date().getTime(),\n        \"workout\",\n        action.entryIndex,\n        action.setIndex,\n        settings,\n        subscription\n      );\n    }\n  }\n  newProgress.intervals = History_resumeWorkout(\n    newProgress,\n    action.isPlayground,\n    settings.timers.reminder,\n    subscription != null && Subscriptions_hasSubscription(subscription)\n  );\n  LiveActivityManager_updateLiveActivityForNextEntry(\n    newProgress,\n    action.entryIndex,\n    \"workout\",\n    action.programExercise,\n    settings,\n    subscription\n  );\n  return { ...newProgress, amrapModal: undefined };\n}\n\nexport function Progress_completeSetAction(\n  settings: ISettings,\n  stats: IStats,\n  progress: IHistoryRecord,\n  action: ICompleteSetAction,\n  subscription: ISubscription | undefined\n): IHistoryRecord {\n  const setTimerModal = progress.setTimer;\n  const wasSetTimerOpen =\n    action.mode === \"workout\" &&\n    setTimerModal != null &&\n    setTimerModal.entryIndex === action.entryIndex &&\n    setTimerModal.setIndex === action.setIndex;\n  // A Stop/Log tap from the set-timer banner (keepSetTimerRunning is set only by those) is a deferred user\n  // action — if the clock already auto-completed, advanced, or closed just before the event landed, the banner\n  // is stale and completing here would fall through to normal toggling and flip an already-completed set back\n  // off. Thunk_recordSetTimer guards this before dispatching; the playground dispatches directly, so guard here\n  // too (safe for every path: the thunk/watch already pre-check, and auto-fires don't set keepSetTimerRunning).\n  if (action.keepSetTimerRunning != null && !wasSetTimerOpen) {\n    return progress;\n  }\n  const oldSet = progress.entries[action.entryIndex][action.mode === \"warmup\" ? \"warmupSets\" : \"sets\"][action.setIndex];\n\n  // Stopping the clock on a set that's already logged (e.g. after \"Log & keep timing\"): just update the\n  // recorded time and close/keep the banner — don't run completion, which would toggle the set off.\n  if (wasSetTimerOpen && setTimerModal != null && oldSet.isCompleted) {\n    const recorded = action.recordedSeconds ?? Math.round((Date.now() - setTimerModal.startedAt) / 1000);\n    let stopped = lf(progress)\n      .p(\"entries\")\n      .i(action.entryIndex)\n      .p(\"sets\")\n      .i(action.setIndex)\n      .p(\"completedSetTimer\")\n      .set(recorded);\n    if (!action.keepSetTimerRunning) {\n      stopped = Progress_proceedAfterTimedSet(\n        stopped,\n        action.entryIndex,\n        action.setIndex,\n        settings,\n        subscription,\n        action.isPlayground\n      );\n    }\n    stopped.intervals = History_resumeWorkout(\n      stopped,\n      action.isPlayground,\n      settings.timers.reminder,\n      subscription != null && Subscriptions_hasSubscription(subscription)\n    );\n    LiveActivityManager_updateLiveActivityForNextEntry(\n      stopped,\n      action.entryIndex,\n      action.mode,\n      action.programExercise,\n      settings,\n      subscription\n    );\n    return stopped;\n  }\n\n  // Completing a timed set from its running clock: record the elapsed time first (derived from when the\n  // clock started, unless the surface passed an explicit recordedSeconds).\n  if (wasSetTimerOpen && setTimerModal != null && !oldSet.isCompleted && oldSet.completedSetTimer == null) {\n    const recorded = action.recordedSeconds ?? Math.round((Date.now() - setTimerModal.startedAt) / 1000);\n    progress = lf(progress)\n      .p(\"entries\")\n      .i(action.entryIndex)\n      .p(\"sets\")\n      .i(action.setIndex)\n      .p(\"completedSetTimer\")\n      .set(recorded);\n  }\n\n  const hasUserPromptedVars = action.programExercise && ProgramExercise_hasUserPromptedVars(action.programExercise);\n  let newProgress = Progress_completeSet(\n    progress,\n    action.entryIndex,\n    action.setIndex,\n    action.mode,\n    !!hasUserPromptedVars,\n    settings\n  );\n  const newSet =\n    newProgress.entries[action.entryIndex][action.mode === \"warmup\" ? \"warmupSets\" : \"sets\"][action.setIndex];\n  const didFinish = !oldSet.isCompleted && newSet.isCompleted;\n  // First tap on a timed set just opened its clock (see Progress_completeSet) — nothing is completed\n  // yet, so skip the completion side-effects and only refresh the live activity to show the timer.\n  const justStartedSetTimer =\n    !wasSetTimerOpen &&\n    !newSet.isCompleted &&\n    newProgress.setTimer?.entryIndex === action.entryIndex &&\n    newProgress.setTimer?.setIndex === action.setIndex;\n  if (justStartedSetTimer) {\n    // Starting this set's clock means the previous set's rest is over — stop it (and cancel its pending\n    // \"rest is over\" notification) so it doesn't fire in the middle of this set's clock.\n    if (newProgress.timerSince != null) {\n      newProgress = Progress_stopTimer(newProgress);\n    }\n    LiveActivityManager_updateLiveActivityForNextEntry(\n      newProgress,\n      action.entryIndex,\n      action.mode,\n      action.programExercise,\n      settings,\n      subscription\n    );\n    return newProgress;\n  }\n  if (action.programExercise && !newProgress.amrapModal) {\n    newProgress = Progress_runUpdateScript(\n      newProgress,\n      action.programExercise,\n      action.otherStates || {},\n      action.entryIndex,\n      action.setIndex,\n      action.mode,\n      settings,\n      stats\n    );\n  }\n\n  if (Progress_isFullyEmptyOrFinishedSet(newProgress)) {\n    newProgress = Progress_stopTimer(newProgress);\n  }\n  if (didFinish) {\n    newProgress = Progress_maybeApplySuperset(newProgress, action.entryIndex, action.mode);\n  }\n  // Non-timed sets start their rest timer here. Timed sets defer it to Progress_proceedAfterTimedSet\n  // (below) so a set logged via \"Log & keep timing\" doesn't start resting while its clock still runs.\n  if (!action.isPlayground && newSet.setTimer == null) {\n    newProgress = Progress_startTimer(\n      newProgress,\n      new Date().getTime(),\n      action.mode,\n      action.entryIndex,\n      action.setIndex,\n      settings,\n      subscription\n    );\n  }\n  // After a timed set is recorded+completed from its clock, advance to the next timed set or close the\n  // banner and start rest — the one place that decision lives. \"Log & keep timing\" skips it.\n  if (wasSetTimerOpen && !action.keepSetTimerRunning) {\n    newProgress = Progress_proceedAfterTimedSet(\n      newProgress,\n      action.entryIndex,\n      action.setIndex,\n      settings,\n      subscription,\n      action.isPlayground\n    );\n  } else if (\n    wasSetTimerOpen &&\n    action.keepSetTimerRunning &&\n    newProgress.amrapModal != null &&\n    newProgress.setTimer != null\n  ) {\n    // Recorded via \"Log & keep timing\" and the AMRAP modal opened on top: mark the clock so it survives\n    // the AMRAP resolution (Progress_changeAmrapAction would otherwise close it).\n    newProgress = {\n      ...newProgress,\n      setTimer: { ...newProgress.setTimer, keepTiming: true },\n    };\n  }\n  newProgress.intervals = History_resumeWorkout(\n    newProgress,\n    action.isPlayground,\n    settings.timers.reminder,\n    subscription != null && Subscriptions_hasSubscription(subscription)\n  );\n  LiveActivityManager_updateLiveActivityForNextEntry(\n    newProgress,\n    action.entryIndex,\n    action.mode,\n    action.programExercise,\n    settings,\n    subscription\n  );\n  if (action.forceUpdateEntryIndex) {\n    newProgress = {\n      ...newProgress,\n      ui: { ...newProgress.ui, forceUpdateEntryIndex: !newProgress.ui?.forceUpdateEntryIndex },\n    };\n  }\n  if (action.isExternal) {\n    newProgress = {\n      ...newProgress,\n      ui: { ...newProgress.ui, isExternal: true },\n    };\n  }\n  return newProgress;\n}\n\nexport function Progress_forceUpdateEntryIndex(dispatch: IDispatch): void {\n  updateProgress(\n    dispatch,\n    [\n      lb<IHistoryRecord>()\n        .pi(\"ui\", {})\n        .p(\"forceUpdateEntryIndex\")\n        .recordModify((v) => !v),\n    ],\n    \"Force update entry index\"\n  );\n}\n\nexport function Progress_finishWorkout(storage: IStorage, progress: IHistoryRecord): IStorage {\n  const settings = storage.settings;\n  const programIndex = storage.programs.findIndex((p) => p.id === progress.programId)!;\n  const program = progress.programId === emptyProgramId ? Program_createEmptyProgram() : storage.programs[programIndex];\n  const evaluatedProgram = program ? Program_evaluate(program, settings) : undefined;\n  Progress_stopTimer(progress);\n  const historyRecord = History_finishProgramDay(\n    progress,\n    storage.settings,\n    progress.day,\n    evaluatedProgram,\n    storage.stats\n  );\n  let newHistory;\n  if (!Progress_isCurrent(progress)) {\n    newHistory = storage.history.map((h) => (h.id === progress.id ? historyRecord : h));\n  } else {\n    newHistory = [historyRecord, ...storage.history];\n  }\n  const exerciseData = storage.settings.exerciseData;\n  const { program: newProgram, exerciseData: newExerciseData } =\n    Progress_isCurrent(progress) && program != null\n      ? Program_runAllFinishDayScripts(program, progress, storage.stats, settings)\n      : { program, exerciseData };\n  const newPrograms = newProgram != null ? lf(storage.programs).i(programIndex).set(newProgram) : storage.programs;\n  const newSettingsExerciseData = deepmerge(storage.settings.exerciseData, newExerciseData);\n  return {\n    ...storage,\n    progress: Progress_isCurrent(progress) ? [] : storage.progress,\n    history: newHistory,\n    programs: newPrograms,\n    settings: {\n      ...storage.settings,\n      exerciseData: newSettingsExerciseData,\n    },\n  };\n}\n","import { IState } from \"./state\";\nimport { dequal } from \"dequal\";\nimport { Progress_isCurrent } from \"./progress\";\nimport { IDayData, IStatsKey } from \"../types\";\nimport { Program_getProgram, Program_cleanPlannerProgram } from \"./program\";\nimport { ObjectUtils_isEqual } from \"../utils/object\";\n\nexport type ITab = \"home\" | \"program\" | \"workout\" | \"graphs\" | \"me\";\n\nexport type IScreenData =\n  | { name: \"first\"; params?: Record<string, never> }\n  | { name: \"main\"; params?: { historyRecordId?: number } }\n  | { name: \"settings\"; params?: Record<string, never> }\n  | { name: \"account\"; params?: Record<string, never> }\n  | { name: \"timers\"; params?: Record<string, never> }\n  | { name: \"plates\"; params?: Record<string, never> }\n  | { name: \"gyms\"; params?: Record<string, never> }\n  | { name: \"programs\"; params?: Record<string, never> }\n  | { name: \"progress\"; params?: { id?: number } }\n  | { name: \"graphsList\"; params?: Record<string, never> }\n  | { name: \"finishDay\"; params?: { id?: number } }\n  | { name: \"muscles\"; params?: Record<string, never> }\n  | { name: \"muscleGroups\"; params?: Record<string, never> }\n  | { name: \"stats\"; params?: Record<string, never> }\n  | { name: \"units\"; params?: Record<string, never> }\n  | { name: \"appleHealth\"; params?: Record<string, never> }\n  | { name: \"googleHealth\"; params?: Record<string, never> }\n  | { name: \"editProgram\"; params: { programId: string } }\n  | {\n      name: \"editProgramExercise\";\n      params: { programId: string; key: string; dayData: Required<IDayData>; fromWorkout?: boolean };\n    }\n  | { name: \"measurements\"; params?: { key: IStatsKey } }\n  | { name: \"sleepNutrition\"; params?: Record<string, never> }\n  | { name: \"subscription\"; params?: Record<string, never> }\n  | { name: \"exerciseStats\"; params?: Record<string, never> }\n  | { name: \"exercises\"; params?: Record<string, never> }\n  | { name: \"onerms\"; params?: Record<string, never> }\n  | { name: \"setupequipment\"; params?: Record<string, never> }\n  | { name: \"setupplates\"; params?: Record<string, never> }\n  | { name: \"hearaboutus\"; params?: Record<string, never> }\n  | { name: \"programselect\"; params?: Record<string, never> }\n  | { name: \"programPreview\"; params?: Record<string, never> }\n  | { name: \"apiKeys\"; params?: Record<string, never> }\n  | { name: \"recentImports\"; params?: Record<string, never> }\n  | { name: \"importPreview\"; params?: Record<string, never> };\n\nexport type IScreen = IScreenData[\"name\"];\nexport type IScreenParams<T extends IScreen> = Extract<IScreenData, { name: T }>[\"params\"];\n\nexport function Screen_shouldConfirmNavigation(state: IState, currentScreen: IScreenData): string | undefined {\n  const progressId = currentScreen.name === \"progress\" ? (currentScreen.params?.id ?? 0) : 0;\n  const progress = progressId === 0 ? state.storage.progress?.[0] : state.progress[progressId];\n  if (progress && !Progress_isCurrent(progress)) {\n    const oldHistoryRecord = state.storage.history.find((hr) => hr.id === progress.id);\n    const { ui: _ui, ...progressWithoutUi } = progress;\n    if (oldHistoryRecord != null && !dequal(oldHistoryRecord, progressWithoutUi)) {\n      return \"Are you sure? Changes won't be saved.\";\n    }\n  }\n\n  if (currentScreen.name === \"editProgram\") {\n    const programId = currentScreen.params?.programId;\n    const editProgramState = programId ? state.editProgramStates[programId] : undefined;\n    if (editProgramState) {\n      const currentProgram = Program_getProgram(state, editProgramState.current.program.id);\n      if (currentProgram != null && currentProgram.planner && editProgramState.current.program.planner) {\n        const oldCleanedProgram = Program_cleanPlannerProgram(currentProgram);\n        const newCleanedProgram = Program_cleanPlannerProgram(editProgramState.current.program);\n        if (!ObjectUtils_isEqual(oldCleanedProgram.planner!, newCleanedProgram.planner!)) {\n          return \"Are you sure? Your program changes won't be saved.\";\n        }\n      }\n    }\n  }\n\n  if (currentScreen.name === \"editProgramExercise\") {\n    const exerciseKey = currentScreen.params?.key;\n    const exerciseProgramId = currentScreen.params?.programId;\n    const exerciseStateKey = exerciseProgramId && exerciseKey ? `${exerciseProgramId}_${exerciseKey}` : undefined;\n    const editProgramExerciseState = exerciseStateKey ? state.editProgramExerciseStates[exerciseStateKey] : undefined;\n    if (editProgramExerciseState) {\n      const programId = currentScreen.params?.programId;\n      const editProgramState = programId ? state.editProgramStates[programId] : undefined;\n      if (\n        editProgramState &&\n        editProgramState.current.program.planner &&\n        editProgramExerciseState.current.program.planner\n      ) {\n        if (\n          !ObjectUtils_isEqual(\n            editProgramExerciseState.current.program.planner,\n            editProgramState.current.program.planner\n          )\n        ) {\n          return \"Are you sure? Your program exercise changes won't be saved.\";\n        }\n      } else {\n        const currentProgram = Program_getProgram(state, editProgramExerciseState.current.program.id);\n        if (currentProgram != null && currentProgram.planner && editProgramExerciseState.current.program.planner) {\n          if (!ObjectUtils_isEqual(currentProgram.planner, editProgramExerciseState.current.program.planner)) {\n            return \"Are you sure? Your program exercise changes won't be saved.\";\n          }\n        }\n      }\n    }\n  }\n\n  return undefined;\n}\n\nexport function Screen_isSameTab(prev: IScreen, next: IScreen): boolean {\n  return Screen_tab(prev) === Screen_tab(next);\n}\n\nexport function Screen_tab(screen: IScreen): ITab {\n  switch (screen) {\n    case \"main\": {\n      return \"home\";\n    }\n    case \"settings\": {\n      return \"me\";\n    }\n    case \"account\": {\n      return \"me\";\n    }\n    case \"timers\": {\n      return \"me\";\n    }\n    case \"plates\": {\n      return \"me\";\n    }\n    case \"appleHealth\": {\n      return \"me\";\n    }\n    case \"googleHealth\": {\n      return \"me\";\n    }\n    case \"gyms\": {\n      return \"me\";\n    }\n    case \"exercises\": {\n      return \"me\";\n    }\n    case \"programs\": {\n      return \"program\";\n    }\n    case \"progress\": {\n      return \"workout\";\n    }\n    case \"graphsList\": {\n      return \"graphs\";\n    }\n    case \"finishDay\": {\n      return \"workout\";\n    }\n    case \"muscles\": {\n      return \"workout\";\n    }\n    case \"muscleGroups\": {\n      return \"me\";\n    }\n    case \"stats\": {\n      return \"me\";\n    }\n    case \"editProgram\": {\n      return \"program\";\n    }\n    case \"editProgramExercise\": {\n      return \"program\";\n    }\n    case \"measurements\": {\n      return \"me\";\n    }\n    case \"sleepNutrition\": {\n      return \"me\";\n    }\n    case \"subscription\": {\n      return \"workout\";\n    }\n    case \"exerciseStats\": {\n      return \"me\";\n    }\n    case \"programPreview\": {\n      return \"program\";\n    }\n    case \"first\": {\n      return \"program\";\n    }\n    case \"onerms\": {\n      return \"program\";\n    }\n    case \"setupequipment\": {\n      return \"program\";\n    }\n    case \"setupplates\": {\n      return \"program\";\n    }\n    case \"hearaboutus\": {\n      return \"program\";\n    }\n    case \"programselect\": {\n      return \"program\";\n    }\n    case \"units\": {\n      return \"program\";\n    }\n    case \"apiKeys\": {\n      return \"me\";\n    }\n    case \"recentImports\": {\n      return \"me\";\n    }\n    case \"importPreview\": {\n      return \"me\";\n    }\n  }\n}\n","import { CollectionUtils_groupBy, CollectionUtils_inGroupsOf } from \"../utils/collection\";\nimport {\n  Weight_display,\n  Weight_eqNull,\n  Weight_gte,\n  Weight_print,\n  Weight_printNull,\n  Weight_multiply,\n  Weight_build,\n  Weight_convertTo,\n  Weight_add,\n} from \"./weight\";\nimport { ISet, IHistoryRecord, IHistoryEntry, IWeight, IUnit } from \"../types\";\nimport { ObjectUtils_clone } from \"../utils/object\";\nimport { UidFactory_generateUid } from \"../utils/generator\";\nimport { Progress_getNextEntry } from \"./progress\";\n\nexport type IProgramReps = number;\n\nexport type ISetsStatus = \"success\" | \"in-range\" | \"failed\" | \"not-finished\";\n\nexport interface IDisplaySet {\n  dimReps?: boolean;\n  dimRpe?: boolean;\n  dimWeight?: boolean;\n  dimTimer?: boolean;\n  reps: string;\n  weight?: string;\n  rpe?: string;\n  askWeight?: boolean;\n  unit?: string;\n  isCompleted?: boolean;\n  isRpeFailed?: boolean;\n  isInRange?: boolean;\n  timer?: number;\n  setTimer?: number;\n  isOverflowSetTimer?: boolean;\n  auto?: boolean;\n}\n\nexport function Reps_display(sets: ISet[], isNext: boolean = false): string {\n  if (Reps_areSameReps(sets, isNext)) {\n    return `${sets.length}x${sets[0].completedReps || sets[0].reps}`;\n  } else {\n    const arr = sets.map((s) => (isNext ? Reps_displayReps(s) : Reps_displayCompletedReps(s)));\n    const groups = CollectionUtils_inGroupsOf(5, arr);\n    return groups.map((g) => g.join(\"/\")).join(\"/ \");\n  }\n}\n\nfunction isSameDisplaySet(a: IDisplaySet, b: IDisplaySet): boolean {\n  return (\n    a.reps === b.reps &&\n    a.weight === b.weight &&\n    a.rpe === b.rpe &&\n    a.askWeight === b.askWeight &&\n    a.timer === b.timer &&\n    a.setTimer === b.setTimer &&\n    a.isOverflowSetTimer === b.isOverflowSetTimer &&\n    a.auto === b.auto\n  );\n}\n\nexport function Reps_groupDisplaySets(displaySets: IDisplaySet[]): IDisplaySet[][] {\n  return CollectionUtils_groupBy(displaySets, (last, set) => {\n    return !isSameDisplaySet(last, set);\n  });\n}\n\nexport function Reps_setToDisplaySet(set: ISet, isNext: boolean, units: IUnit): IDisplaySet {\n  const completedOrRequiredWeight = set.completedWeight ?? set.weight;\n  return {\n    reps: isNext ? Reps_displayReps(set) : Reps_displayCompletedReps(set),\n    rpe: set.completedRpe?.toString() ?? set.rpe?.toString(),\n    weight: isNext\n      ? set.weight && set.originalWeight\n        ? Weight_display(set.weight, false)\n        : undefined\n      : completedOrRequiredWeight\n        ? Weight_display(completedOrRequiredWeight, false)\n        : undefined,\n    unit: completedOrRequiredWeight?.unit ?? units,\n    askWeight: set.askWeight,\n    isCompleted: Reps_isCompletedSet(set),\n    isRpeFailed: set.completedRpe != null && set.completedRpe > (set.rpe ?? 0),\n    isInRange: set.minReps != null ? set.completedReps != null && set.completedReps >= set.minReps : undefined,\n    setTimer: isNext ? set.setTimer : (set.completedSetTimer ?? set.setTimer),\n    isOverflowSetTimer: isNext ? set.isOverflowSetTimer : undefined,\n    timer: isNext ? set.timer : undefined,\n    auto: set.auto,\n  };\n}\n\nexport function Reps_addSet(sets: ISet[], isUnilateral: boolean, lastSet?: ISet, isWarmup?: boolean): ISet[] {\n  lastSet = sets[sets.length - 1] || lastSet;\n  if (lastSet == null) {\n    lastSet = Reps_newSet(isUnilateral, 0);\n  } else {\n    if (isWarmup) {\n      lastSet = {\n        ...ObjectUtils_clone(lastSet),\n        reps: lastSet.completedReps ?? lastSet.reps,\n        weight: lastSet.completedWeight ?? lastSet.weight,\n      };\n    } else {\n      lastSet = {\n        ...ObjectUtils_clone(lastSet),\n        reps: lastSet.reps ?? lastSet.completedReps,\n        weight: lastSet.weight ?? lastSet.completedWeight,\n        originalWeight: lastSet.originalWeight ?? lastSet.weight ?? lastSet.completedWeight,\n        completedReps: undefined,\n        completedRepsLeft: undefined,\n        completedWeight: undefined,\n        completedRpe: undefined,\n        completedSetTimer: undefined,\n      };\n    }\n  }\n  const maxIndex = Math.max(-1, ...sets.map((s) => s.index || 0));\n\n  return [\n    ...sets,\n    { ...ObjectUtils_clone(lastSet), id: UidFactory_generateUid(6), isCompleted: false, index: maxIndex + 1 },\n  ];\n}\n\nexport function Reps_isSameSet(set1: ISet, set2: ISet): boolean {\n  return Weight_eqNull(set1.weight, set2.weight) && set1.completedReps === set2.completedReps && set1.rpe === set2.rpe;\n}\n\nexport function Reps_displayReps(set: ISet): string {\n  const reps = set.minReps != null ? `${set.minReps}-${set.reps ?? 0}` : `${set.reps ?? 0}`;\n  return set.isAmrap ? `${reps}+` : `${reps}`;\n}\n\nexport function Reps_displayCompletedReps(set: ISet): string {\n  return set.completedReps != null\n    ? `${set.completedRepsLeft != null ? `${set.completedRepsLeft}/` : \"\"}${set.completedReps}`\n    : \"-\";\n}\n\nexport function Reps_areSameReps(sets: ISet[], isNext: boolean): boolean {\n  const firstRep = sets[0]?.reps;\n  if (sets.length > 0) {\n    return sets.every(\n      (s) => (isNext ? s.reps : s.completedReps) != null && (isNext ? s.reps : s.completedReps) === firstRep\n    );\n  } else {\n    return false;\n  }\n}\n\nexport function Reps_isEmpty(sets: ISet[]): boolean {\n  return sets.every((s) => !s.isCompleted);\n}\n\nexport function Reps_newSet(isUnilateral: boolean, index: number): ISet {\n  return {\n    vtype: \"set\",\n    index,\n    id: UidFactory_generateUid(6),\n    originalWeight: undefined,\n    weight: undefined,\n    isUnilateral,\n    reps: undefined,\n    isAmrap: false,\n    askWeight: false,\n    isCompleted: false,\n  };\n}\n\nexport function Reps_isCompleted(sets: ISet[]): boolean {\n  return sets.length > 0 && sets.every((set) => Reps_isCompletedSet(set));\n}\n\nexport function Reps_setWarmupStatus(sets: ISet[]): ISetsStatus {\n  if (sets.length === 0) {\n    return \"not-finished\";\n  }\n  if (Reps_isFinished(sets)) {\n    return \"success\";\n  } else {\n    return \"not-finished\";\n  }\n}\n\nexport function Reps_setsStatus(sets: ISet[]): ISetsStatus {\n  if (Reps_isCompleted(sets)) {\n    return \"success\";\n  } else if (Reps_isInRangeCompleted(sets)) {\n    return \"in-range\";\n  } else if (!Reps_isFinished(sets)) {\n    return \"not-finished\";\n  } else {\n    return \"failed\";\n  }\n}\n\nexport function Reps_isCompletedSet(set: ISet): boolean {\n  if (set.completedReps != null && set.completedWeight != null) {\n    return (\n      !!set.isCompleted &&\n      (set.reps == null || set.completedReps >= set.reps) &&\n      (set.weight == null || Weight_gte(set.completedWeight, set.weight))\n    );\n  } else {\n    return false;\n  }\n}\n\nexport function Reps_isInRangeCompletedSet(set: ISet): boolean {\n  if (set.completedReps != null && set.completedWeight != null) {\n    return (\n      (set.weight == null || Weight_gte(set.completedWeight, set.weight)) &&\n      (set.minReps != null ? set.completedReps >= set.minReps : set.reps == null || set.completedReps >= set.reps)\n    );\n  } else {\n    return false;\n  }\n}\n\nexport function Reps_isStarted(sets: ISet[]): boolean {\n  return sets.length > 0 && sets.some((s) => Reps_isFinishedSet(s));\n}\n\nexport function Reps_isFinished(sets: ISet[]): boolean {\n  return sets.length > 0 && sets.every((s) => Reps_isFinishedSet(s));\n}\n\nexport function Reps_isEmptyOrFinished(sets: ISet[]): boolean {\n  return sets.length === 0 || Reps_isFinished(sets);\n}\n\nexport function Reps_isFinishedSet(s: ISet): boolean {\n  return !!s.isCompleted;\n}\n\nexport function Reps_toKey(set: ISet): string {\n  return `${Weight_printNull(set.weight)}-${Weight_printNull(set.completedWeight)}-${set.reps}-${set.minReps}-${set.isAmrap}-${set.rpe}-${set.askWeight}-${set.completedReps}-${set.completedRepsLeft}-${set.completedRpe}-${set.isCompleted}`;\n}\n\nexport function Reps_isInRangeCompleted(sets: ISet[]): boolean {\n  return sets.some((s) => s.minReps != null) && sets.every((s) => Reps_isInRangeCompletedSet(s));\n}\n\nexport function Reps_enforceCompletedSet(set: ISet): ISet {\n  return {\n    ...set,\n    isCompleted: set.completedReps == null || set.completedWeight == null ? false : !!set.isCompleted,\n  };\n}\n\nexport function Reps_maxUnilateralCompletedReps(set: ISet): number | undefined {\n  if (set.isUnilateral) {\n    return Math.max(set.completedReps ?? 0, set.completedRepsLeft ?? 0);\n  } else {\n    return set.completedReps;\n  }\n}\n\nexport function Reps_avgUnilateralCompletedReps(set: ISet): number | undefined {\n  if (set.isUnilateral) {\n    return Math.round(((set.completedReps ?? 0) + (set.completedRepsLeft ?? 0)) / 2);\n  } else {\n    return set.completedReps;\n  }\n}\n\nexport function Reps_setVolume(set: ISet, unit: IUnit): IWeight {\n  const totalReps =\n    set.isUnilateral || set.completedRepsLeft != null\n      ? (set.completedReps ?? 0) + (set.completedRepsLeft ?? 0)\n      : (set.completedReps ?? 0);\n  return Weight_multiply(set.completedWeight ?? set.weight ?? Weight_build(0, unit), totalReps);\n}\n\nexport function Reps_group(sets: ISet[], isNext?: boolean): ISet[][] {\n  return sets.reduce<ISet[][]>(\n    (memo, set) => {\n      let lastGroup = memo[memo.length - 1];\n      const last = lastGroup[lastGroup.length - 1];\n      if (\n        last != null &&\n        (!Weight_eqNull(last.weight, set.weight) ||\n          last.reps !== set.reps ||\n          last.minReps !== set.minReps ||\n          last.completedReps !== set.completedReps ||\n          last.completedRepsLeft !== set.completedRepsLeft ||\n          !Weight_eqNull(last.completedWeight, set.completedWeight) ||\n          last.askWeight !== set.askWeight ||\n          (isNext && last.isAmrap !== set.isAmrap) ||\n          last.rpe !== set.rpe ||\n          last.completedRpe !== set.completedRpe ||\n          last.setTimer !== set.setTimer ||\n          (isNext && last.timer !== set.timer) ||\n          (isNext && last.isOverflowSetTimer !== set.isOverflowSetTimer) ||\n          last.auto !== set.auto ||\n          (!isNext && last.completedSetTimer !== set.completedSetTimer))\n      ) {\n        memo.push([]);\n        lastGroup = memo[memo.length - 1];\n      }\n      lastGroup.push(set);\n      return memo;\n    },\n    [[]]\n  );\n}\n\nexport function Reps_findNextSet(entry: IHistoryEntry): ISet | undefined {\n  return [...entry.warmupSets, ...entry.sets].filter((s) => !s.isCompleted)[0];\n}\n\nexport function Reps_findNextSetIndex(entry: IHistoryEntry): number {\n  return [...entry.warmupSets, ...entry.sets].findIndex((s) => !s.isCompleted);\n}\n\nexport function Reps_findNextEntryAndSet(\n  historyRecord: IHistoryRecord,\n  entryIndex: number,\n  mode: \"workout\" | \"warmup\"\n):\n  | {\n      entry: IHistoryEntry;\n      set: ISet;\n    }\n  | undefined {\n  const entry = historyRecord.entries[entryIndex];\n  if (entry == null) {\n    return undefined;\n  }\n  const nextEntry = Progress_getNextEntry(historyRecord, entry, mode, true);\n  if (nextEntry == null) {\n    return undefined;\n  }\n\n  const nextSet = Reps_findNextSet(nextEntry);\n  if (nextSet != null) {\n    return { entry: nextEntry, set: nextSet };\n  }\n\n  return undefined;\n}\n\nexport function Reps_findNextEntryAndSetIndex(\n  historyRecord: IHistoryRecord,\n  entryIndex: number,\n  mode: \"workout\" | \"warmup\"\n):\n  | {\n      entryIndex: number;\n      setIndex: number;\n    }\n  | undefined {\n  const entry = historyRecord.entries[entryIndex];\n  if (entry == null) {\n    return undefined;\n  }\n  const nextEntry = Progress_getNextEntry(historyRecord, entry, mode, true);\n  if (nextEntry == null) {\n    return undefined;\n  }\n\n  const nextSet = Reps_findNextSetIndex(nextEntry);\n\n  return { entryIndex: historyRecord.entries.indexOf(nextEntry), setIndex: nextSet };\n}\n\nexport function Reps_groupConsecutive<T>(items: T[], keyFn: (item: T) => string): [T, number][] {\n  const groups: [T, number][] = [];\n  let lastKey: string | undefined;\n  for (const item of items) {\n    const key = keyFn(item);\n    if (lastKey == null || lastKey !== key) {\n      groups.push([item, 0]);\n    }\n    groups[groups.length - 1][1] += 1;\n    lastKey = key;\n  }\n  return groups;\n}\n\nexport function Reps_completedSetKey(set: ISet): string {\n  const reps = set.completedReps ?? 0;\n  const repsLeft = set.isUnilateral ? (set.completedRepsLeft ?? 0) : -1;\n  const w = set.completedWeight ? Weight_print(set.completedWeight) : \"none\";\n  const rpe = set.completedRpe ?? -1;\n  const label = set.label ?? \"\";\n  return `${reps}-${repsLeft}-${w}-${rpe}-${label}`;\n}\n\nexport function Reps_targetSetKey(set: ISet): string {\n  const reps = set.reps ?? 0;\n  const minReps = set.minReps ?? -1;\n  const w = set.weight ? Weight_print(set.weight) : \"none\";\n  const rpe = set.rpe ?? -1;\n  const logRpe = set.logRpe ? 1 : 0;\n  const timer = set.timer ?? -1;\n  const amrap = set.isAmrap ? 1 : 0;\n  const label = set.label ?? \"\";\n  const askWeight = set.askWeight ? 1 : 0;\n  return `${reps}-${minReps}-${w}-${askWeight}-${rpe}-${logRpe}-${timer}-${amrap}-${label}`;\n}\n\nexport function Reps_volume(sets: ISet[], unit: IUnit): IWeight {\n  return Weight_convertTo(\n    sets.reduce((memo, set) => Weight_add(memo, Reps_setVolume(set, unit)), Weight_build(0, unit)),\n    unit\n  );\n}\n","import {\n  ISettings,\n  IPlannerSettings,\n  IAllEquipment,\n  IAllCustomExercises,\n  ITargetType,\n  targetTypes,\n  IProgram,\n  IExerciseType,\n  IWeight,\n} from \"../types\";\nimport { Weight_build, Weight_print } from \"./weight\";\nimport { IExportedProgram, Program_evaluate, Program_getAllUsedProgramExercises } from \"./program\";\nimport { ObjectUtils_filter } from \"../utils/object\";\nimport { lb } from \"lens-shmens\";\nimport { updateSettings } from \"./state\";\nimport { IDispatch } from \"../ducks/types\";\nimport { IExercise, Exercise_toKey, Exercise_get, Exercise_nameWithEquipment } from \"./exercise\";\nimport { CollectionUtils_uniqByExpr, CollectionUtils_sort } from \"../utils/collection\";\nimport { ProgramExercise_doesUse1RM } from \"./programExercise\";\nimport { IExercisePickerSettings } from \"../components/exercisePicker/exercisePickerSettings\";\nimport { SendMessage_toIosAndAndroid } from \"../utils/sendMessage\";\nimport { Theme_apply } from \"../utils/theme\";\n\nexport function Settings_programContentBuild(): Pick<ISettings, \"timers\" | \"units\" | \"planner\"> {\n  return {\n    timers: {\n      warmup: 90,\n      workout: 180,\n      reminder: 900,\n    },\n    units: \"lb\",\n    planner: Settings_buildPlannerSettings(),\n  };\n}\n\nexport function Settings_defaultEquipment(): IAllEquipment {\n  return {\n    barbell: {\n      vtype: \"equipment_data\",\n      multiplier: 2,\n      bar: {\n        lb: Weight_build(45, \"lb\"),\n        kg: Weight_build(20, \"kg\"),\n      },\n      plates: [\n        { weight: Weight_build(45, \"lb\"), num: 8 },\n        { weight: Weight_build(25, \"lb\"), num: 4 },\n        { weight: Weight_build(10, \"lb\"), num: 4 },\n        { weight: Weight_build(5, \"lb\"), num: 4 },\n        { weight: Weight_build(2.5, \"lb\"), num: 4 },\n        { weight: Weight_build(1.25, \"lb\"), num: 2 },\n        { weight: Weight_build(20, \"kg\"), num: 8 },\n        { weight: Weight_build(10, \"kg\"), num: 4 },\n        { weight: Weight_build(5, \"kg\"), num: 4 },\n        { weight: Weight_build(2.5, \"kg\"), num: 4 },\n        { weight: Weight_build(1.25, \"kg\"), num: 4 },\n        { weight: Weight_build(0.5, \"kg\"), num: 2 },\n      ],\n      fixed: [],\n      isFixed: false,\n    },\n    trapbar: {\n      vtype: \"equipment_data\",\n      multiplier: 2,\n      bar: {\n        lb: Weight_build(45, \"lb\"),\n        kg: Weight_build(20, \"kg\"),\n      },\n      plates: [\n        { weight: Weight_build(45, \"lb\"), num: 8 },\n        { weight: Weight_build(25, \"lb\"), num: 4 },\n        { weight: Weight_build(10, \"lb\"), num: 4 },\n        { weight: Weight_build(5, \"lb\"), num: 4 },\n        { weight: Weight_build(2.5, \"lb\"), num: 4 },\n        { weight: Weight_build(1.25, \"lb\"), num: 2 },\n        { weight: Weight_build(20, \"kg\"), num: 8 },\n        { weight: Weight_build(10, \"kg\"), num: 4 },\n        { weight: Weight_build(5, \"kg\"), num: 4 },\n        { weight: Weight_build(2.5, \"kg\"), num: 4 },\n        { weight: Weight_build(1.25, \"kg\"), num: 4 },\n        { weight: Weight_build(0.5, \"kg\"), num: 2 },\n      ],\n      fixed: [],\n      isFixed: false,\n    },\n    leverageMachine: {\n      vtype: \"equipment_data\",\n      multiplier: 1,\n      bar: {\n        lb: Weight_build(0, \"lb\"),\n        kg: Weight_build(0, \"kg\"),\n      },\n      plates: [\n        { weight: Weight_build(45, \"lb\"), num: 8 },\n        { weight: Weight_build(25, \"lb\"), num: 4 },\n        { weight: Weight_build(10, \"lb\"), num: 4 },\n        { weight: Weight_build(5, \"lb\"), num: 4 },\n        { weight: Weight_build(2.5, \"lb\"), num: 4 },\n        { weight: Weight_build(1.25, \"lb\"), num: 2 },\n        { weight: Weight_build(20, \"kg\"), num: 8 },\n        { weight: Weight_build(10, \"kg\"), num: 4 },\n        { weight: Weight_build(5, \"kg\"), num: 4 },\n        { weight: Weight_build(2.5, \"kg\"), num: 4 },\n        { weight: Weight_build(1.25, \"kg\"), num: 4 },\n        { weight: Weight_build(0.5, \"kg\"), num: 2 },\n      ],\n      fixed: [],\n      isFixed: false,\n    },\n    smith: {\n      vtype: \"equipment_data\",\n      multiplier: 2,\n      bar: {\n        lb: Weight_build(45, \"lb\"),\n        kg: Weight_build(20, \"kg\"),\n      },\n      plates: [\n        { weight: Weight_build(45, \"lb\"), num: 8 },\n        { weight: Weight_build(25, \"lb\"), num: 4 },\n        { weight: Weight_build(10, \"lb\"), num: 4 },\n        { weight: Weight_build(5, \"lb\"), num: 4 },\n        { weight: Weight_build(2.5, \"lb\"), num: 4 },\n        { weight: Weight_build(1.25, \"lb\"), num: 2 },\n        { weight: Weight_build(20, \"kg\"), num: 8 },\n        { weight: Weight_build(10, \"kg\"), num: 4 },\n        { weight: Weight_build(5, \"kg\"), num: 4 },\n        { weight: Weight_build(2.5, \"kg\"), num: 4 },\n        { weight: Weight_build(1.25, \"kg\"), num: 4 },\n        { weight: Weight_build(0.5, \"kg\"), num: 2 },\n      ],\n      fixed: [],\n      isFixed: false,\n    },\n    dumbbell: {\n      vtype: \"equipment_data\",\n      multiplier: 2,\n      bar: {\n        lb: Weight_build(10, \"lb\"),\n        kg: Weight_build(5, \"kg\"),\n      },\n      plates: [\n        { weight: Weight_build(10, \"lb\"), num: 8 },\n        { weight: Weight_build(5, \"lb\"), num: 4 },\n        { weight: Weight_build(2.5, \"lb\"), num: 4 },\n        { weight: Weight_build(1.25, \"lb\"), num: 2 },\n        { weight: Weight_build(5, \"kg\"), num: 8 },\n        { weight: Weight_build(2.5, \"kg\"), num: 4 },\n        { weight: Weight_build(1.25, \"kg\"), num: 4 },\n        { weight: Weight_build(0.5, \"kg\"), num: 2 },\n      ],\n      fixed: [\n        Weight_build(10, \"lb\"),\n        Weight_build(15, \"lb\"),\n        Weight_build(20, \"lb\"),\n        Weight_build(25, \"lb\"),\n        Weight_build(30, \"lb\"),\n        Weight_build(35, \"lb\"),\n        Weight_build(40, \"lb\"),\n        Weight_build(4, \"kg\"),\n        Weight_build(6, \"kg\"),\n        Weight_build(8, \"kg\"),\n        Weight_build(10, \"kg\"),\n        Weight_build(12, \"kg\"),\n        Weight_build(14, \"kg\"),\n        Weight_build(20, \"kg\"),\n      ],\n      isFixed: false,\n    },\n    ezbar: {\n      vtype: \"equipment_data\",\n      multiplier: 2,\n      bar: {\n        lb: Weight_build(20, \"lb\"),\n        kg: Weight_build(10, \"kg\"),\n      },\n      plates: [\n        { weight: Weight_build(45, \"lb\"), num: 8 },\n        { weight: Weight_build(25, \"lb\"), num: 4 },\n        { weight: Weight_build(10, \"lb\"), num: 4 },\n        { weight: Weight_build(5, \"lb\"), num: 4 },\n        { weight: Weight_build(2.5, \"lb\"), num: 4 },\n        { weight: Weight_build(1.25, \"lb\"), num: 2 },\n        { weight: Weight_build(20, \"kg\"), num: 8 },\n        { weight: Weight_build(10, \"kg\"), num: 4 },\n        { weight: Weight_build(5, \"kg\"), num: 4 },\n        { weight: Weight_build(2.5, \"kg\"), num: 4 },\n        { weight: Weight_build(1.25, \"kg\"), num: 4 },\n        { weight: Weight_build(0.5, \"kg\"), num: 2 },\n      ],\n      fixed: [],\n      isFixed: false,\n    },\n    cable: {\n      vtype: \"equipment_data\",\n      multiplier: 1,\n      bar: {\n        lb: Weight_build(0, \"lb\"),\n        kg: Weight_build(0, \"kg\"),\n      },\n      plates: [\n        {\n          weight: Weight_build(10, \"lb\"),\n          num: 20,\n        },\n        {\n          weight: Weight_build(5, \"lb\"),\n          num: 10,\n        },\n        {\n          weight: Weight_build(5, \"kg\"),\n          num: 20,\n        },\n        {\n          weight: Weight_build(2.5, \"kg\"),\n          num: 10,\n        },\n      ],\n      fixed: [],\n      isFixed: false,\n    },\n    kettlebell: {\n      vtype: \"equipment_data\",\n      multiplier: 1,\n      bar: {\n        lb: Weight_build(0, \"lb\"),\n        kg: Weight_build(0, \"kg\"),\n      },\n      plates: [],\n      fixed: [\n        Weight_build(10, \"lb\"),\n        Weight_build(15, \"lb\"),\n        Weight_build(20, \"lb\"),\n        Weight_build(25, \"lb\"),\n        Weight_build(30, \"lb\"),\n        Weight_build(35, \"lb\"),\n        Weight_build(40, \"lb\"),\n        Weight_build(4, \"kg\"),\n        Weight_build(8, \"kg\"),\n        Weight_build(12, \"kg\"),\n        Weight_build(16, \"kg\"),\n        Weight_build(24, \"kg\"),\n      ],\n      isFixed: true,\n    },\n  };\n}\n\nexport function Settings_build(): ISettings {\n  return {\n    ...Settings_programContentBuild(),\n    graphsSettings: {\n      isSameXAxis: false,\n      isWithBodyweight: false,\n      isWithOneRm: true,\n    },\n    exerciseData: {},\n    graphOptions: {},\n    exerciseStatsSettings: {\n      ascendingSort: false,\n    },\n    gyms: [\n      {\n        vtype: \"gym\",\n        id: \"default\",\n        name: \"Main\",\n        equipment: Settings_defaultEquipment(),\n      },\n    ],\n    deletedGyms: [],\n    volume: 1.0,\n    vibration: false,\n    startWeekFromMonday: false,\n    lengthUnits: \"in\",\n    workoutSettings: {\n      targetType: \"target\",\n    },\n    statsEnabled: { weight: { weight: true }, length: {}, percentage: {} },\n    exercises: {},\n    graphs: { graphs: [], vtype: \"graphs\" },\n    planner: Settings_buildPlannerSettings(),\n    muscleGroups: {\n      vtype: \"muscle_groups_settings\",\n      data: {},\n    },\n  };\n}\n\nexport function Settings_buildPlannerSettings(): IPlannerSettings {\n  return {\n    strengthSetsPct: 30,\n    hypertrophySetsPct: 70,\n    weeklyRangeSets: {\n      shoulders: [10, 12],\n      triceps: [10, 12],\n      back: [10, 12],\n      abs: [10, 12],\n      glutes: [10, 12],\n      hamstrings: [10, 12],\n      quadriceps: [10, 12],\n      chest: [10, 12],\n      biceps: [10, 12],\n      calves: [10, 12],\n      forearms: [10, 12],\n    },\n    weeklyFrequency: {\n      shoulders: 2,\n      triceps: 2,\n      back: 2,\n      abs: 2,\n      glutes: 2,\n      hamstrings: 2,\n      quadriceps: 2,\n      chest: 2,\n      biceps: 2,\n      calves: 2,\n      forearms: 2,\n    },\n    synergistMultiplier: 0.5,\n  };\n}\n\nexport function Settings_applyExportedProgram(settings: ISettings, exportedProgram: IExportedProgram): ISettings {\n  const result = {\n    ...settings,\n    exercises: {\n      ...settings.exercises,\n      ...exportedProgram.customExercises,\n    },\n    units: settings.units || exportedProgram.settings.units,\n    timers: {\n      ...settings.timers,\n      workout: settings.timers.workout ?? exportedProgram.settings.timers?.workout,\n      warmup: settings.timers.warmup ?? exportedProgram.settings.timers?.warmup,\n    },\n    planner: settings.planner || exportedProgram.settings.planner,\n    muscleGroups: settings.muscleGroups || exportedProgram.settings.muscleGroups,\n    exerciseData: { ...settings.exerciseData, ...exportedProgram.settings.exerciseData },\n    workoutSettings: { ...settings.workoutSettings, ...exportedProgram.settings.workoutSettings },\n  };\n  return result;\n}\n\nexport function Settings_activeCustomExercises(settings: ISettings): IAllCustomExercises {\n  return ObjectUtils_filter(settings.exercises, (k, v) => !v?.isDeleted);\n}\n\nexport function Settings_getNextTargetType(type: ITargetType, skipPlatesCalculator: boolean): ITargetType {\n  const index = targetTypes.indexOf(type);\n  let nextTargetType: ITargetType;\n  if (index === -1) {\n    nextTargetType = targetTypes[0];\n  } else if (index === targetTypes.length - 1) {\n    nextTargetType = targetTypes[0];\n  } else {\n    nextTargetType = targetTypes[index + 1];\n  }\n  if (nextTargetType === \"platescalculator\" && skipPlatesCalculator) {\n    nextTargetType = Settings_getNextTargetType(\"platescalculator\", skipPlatesCalculator);\n  }\n  return nextTargetType;\n}\n\nexport function Settings_toggleStarredExercise(dispatch: IDispatch, key: string): void {\n  updateSettings(\n    dispatch,\n    lb<ISettings>()\n      .p(\"starredExercises\")\n      .recordModify((starred) => {\n        if (starred?.[key]) {\n          const next = { ...starred };\n          delete next[key];\n          return next;\n        } else {\n          return { ...starred, [key]: true };\n        }\n      }),\n    `Toggle starred exercise ${key}`\n  );\n}\n\nexport const settingsRecentExercisesLimit = 5;\n\n// Keys are never deleted from this map, only overwritten. VersionTracker's nested-object path bumps\n// versions per key present in the new object (versionTrackerUpdateVersions.ts:427), so a removed key\n// never gets its version bumped and the next merge resurrects it. Writing `[]` would sync; deleting\n// would not.\nexport function Settings_withRecentSwap(\n  recentExercises: ISettings[\"recentExercises\"],\n  from: IExerciseType,\n  to: IExerciseType\n): Partial<Record<string, string[]>> {\n  const fromKey = Exercise_toKey(from);\n  const toKey = Exercise_toKey(to);\n  const previous = recentExercises?.[fromKey] ?? [];\n  return {\n    ...recentExercises,\n    [fromKey]: [toKey, ...previous.filter((key) => key !== toKey)].slice(0, settingsRecentExercisesLimit),\n  };\n}\n\nexport function Settings_addRecentSwap(dispatch: IDispatch, from: IExerciseType, to: IExerciseType): void {\n  updateSettings(\n    dispatch,\n    lb<ISettings>()\n      .p(\"recentExercises\")\n      .recordModify((recentExercises) => Settings_withRecentSwap(recentExercises, from, to)),\n    `Record recent swap from ${Exercise_toKey(from)} to ${Exercise_toKey(to)}`\n  );\n}\n\nexport function Settings_changePickerSettings(dispatch: IDispatch, settings: IExercisePickerSettings): void {\n  updateSettings(\n    dispatch,\n    lb<ISettings>()\n      .p(\"workoutSettings\")\n      .recordModify((workoutSettings) => {\n        return { ...workoutSettings, ...settings };\n      }),\n    `Change picker settings`\n  );\n}\n\nexport function Settings_doesProgramHaveUnset1RMs(program: IProgram, settings: ISettings): boolean {\n  return Settings_getExercisesWithUnset1RMs(program, settings).length > 0;\n}\n\nexport function Settings_getExercisesWithUnset1RMs(program: IProgram, settings: ISettings): IExercise[] {\n  const evalutedProgram = Program_evaluate(program, settings);\n  const plannerExercises = Program_getAllUsedProgramExercises(evalutedProgram).filter((exercise) => {\n    return ProgramExercise_doesUse1RM(exercise);\n  });\n  const exerciseTypes = CollectionUtils_uniqByExpr(\n    plannerExercises\n      .filter((exercise) => {\n        return settings.exerciseData[Exercise_toKey(exercise.exerciseType)]?.rm1 == null;\n      })\n      .map((exercise) => exercise.exerciseType),\n    (e) => Exercise_toKey(e)\n  );\n  const exercises = exerciseTypes.map((e) => Exercise_get(e, settings.exercises));\n  return CollectionUtils_sort(exercises, (a, b) => {\n    return Exercise_nameWithEquipment(a, settings).localeCompare(Exercise_nameWithEquipment(b, settings));\n  });\n}\n\nexport function Settings_setOneRM(\n  dispatch: IDispatch,\n  exerciseType: IExerciseType,\n  value: IWeight,\n  settings: ISettings\n): void {\n  updateSettings(\n    dispatch,\n    lb<ISettings>()\n      .p(\"exerciseData\")\n      .recordModify((data) => {\n        const key = Exercise_toKey(exerciseType);\n        return { ...data, [key]: { ...data[key], rm1: value } };\n      }),\n    `Set 1RM for ${Exercise_nameWithEquipment(Exercise_get(exerciseType, settings.exercises), settings)} to ${Weight_print(value)}`\n  );\n}\n\nexport function Settings_getTheme(settings: ISettings): \"dark\" | \"light\" {\n  return settings.theme\n    ? settings.theme\n    : typeof window !== \"undefined\"\n      ? window.lftSystemDarkMode\n        ? \"dark\"\n        : \"light\"\n      : \"light\";\n}\n\nexport const TEXT_SIZE_MIN = 12;\nexport const TEXT_SIZE_MAX = 24;\nexport const TEXT_SIZE_STEP = 2;\nconst TEXT_SIZE_BASE = 16;\n\n// An unset textSize follows the OS font scale, the same way an unset theme follows dark mode.\n// The OS scale is deliberately not applied on top of an explicit value - it is folded into the\n// rem here so that spacing and icons move with the type instead of the text alone growing.\nexport function Settings_getTextSize(settings: ISettings, osFontScale: number): number {\n  if (settings.textSize != null) {\n    return clampTextSize(settings.textSize);\n  }\n  const scaled = TEXT_SIZE_BASE * osFontScale;\n  return clampTextSize(Math.round(scaled / TEXT_SIZE_STEP) * TEXT_SIZE_STEP);\n}\n\nfunction clampTextSize(size: number): number {\n  return Math.max(TEXT_SIZE_MIN, Math.min(TEXT_SIZE_MAX, size));\n}\n\nexport function Settings_applyTheme(theme?: \"dark\" | \"light\"): void {\n  const resolved = theme ?? (typeof window !== \"undefined\" && window.lftSystemDarkMode ? \"dark\" : \"light\");\n  Theme_apply(resolved);\n  SendMessage_toIosAndAndroid({ type: \"theme\", value: resolved });\n}\n","import { Service } from \"../api/service\";\nimport { IAudioInterface } from \"../lib/audioInterface\";\nimport { IPlannerState, IPlannerExerciseState } from \"../pages/planner/models/types\";\nimport { IDispatch } from \"../ducks/types\";\nimport { Storage_getDefault } from \"../models/storage\";\nimport { ILensRecordingPayload } from \"lens-shmens\";\nimport { IUser } from \"./user\";\nimport { IProgramIndexEntry } from \"./program\";\nimport {\n  IStorage,\n  IProgram,\n  IHistoryRecord,\n  IProgramDay,\n  ISettings,\n  IExerciseType,\n  IEquipment,\n  IStats,\n  IImportSession,\n} from \"../types\";\nimport { IImportResult } from \"../utils/importTypes\";\nimport { AsyncQueue } from \"../utils/asyncQueue\";\nimport { basicBeginnerProgram } from \"../programs/basicBeginnerProgram\";\nimport type { NavigationContainerRef } from \"@react-navigation/native\";\nimport type { IRootStackParamList } from \"../navigation/types\";\nimport type { IScreenData } from \"./screen\";\nimport type { IProgramPreviewPlaygroundState } from \"../components/preview/programPreviewPlaygroundSetup\";\nimport type { IIapActiveSubscription, IIapAdapter } from \"../utils/iapAdapter\";\nimport type { IHealthAdapter } from \"../utils/healthAdapter\";\nimport type { Persistence } from \"../utils/persistence\";\n\nexport type IEnv = {\n  service: Service;\n  audio: IAudioInterface;\n  queue: AsyncQueue;\n  persistence: Persistence;\n  navigationRef?: NavigationContainerRef<IRootStackParamList>;\n  getCurrentScreenData?: () => IScreenData | undefined;\n  iap?: IIapAdapter;\n  health?: IHealthAdapter;\n};\n\nexport interface INotification {\n  type: \"error\" | \"success\";\n  content: string;\n}\n\nexport interface INavCommon {\n  loading: ILoading;\n  userId?: string;\n  currentProgram?: IProgram;\n  isOngoingProgress: boolean;\n  stats: IStats;\n  settings: ISettings;\n}\n\nexport interface ILoadingItem {\n  startTime: number;\n  type: string;\n  attempt?: number;\n  endTime?: number;\n  error?: string;\n}\n\nexport type ILoading = {\n  items: Partial<Record<string, ILoadingItem>>;\n};\n\nexport interface ISubscriptionLoading {\n  monthly?: boolean;\n  yearly?: boolean;\n  lifetime?: boolean;\n}\n\nexport interface IStateErrors {\n  corruptedstorage?: {\n    userid: string;\n    backup: boolean;\n    confirmed: boolean;\n    local: boolean;\n  };\n}\n\nexport interface IAppleOffer {\n  yearly: IApplePromotionalOffer;\n  monthly: IApplePromotionalOffer;\n}\n\nexport interface IApplePromotionalOffer {\n  offerId: string;\n  signature: string;\n  nonce: string;\n  timestamp: number;\n}\n\nexport interface IGoogleOffer {\n  yearly: IGooglePromotionalOffer;\n  monthly: IGooglePromotionalOffer;\n}\n\nexport interface IGooglePromotionalOffer {\n  offerId: string;\n  productId: string;\n}\n\nexport interface IOfferData {\n  offerId: string;\n  formattedPrice: string;\n}\n\nexport interface IAttributionData {\n  isOrganic: boolean;\n  mediaSource: string;\n  campaign: string;\n  adSet: string;\n  ad: string;\n}\n\nexport type ITourId = \"workout\" | \"program\" | \"editProgramExercise\";\n\nexport interface IStateTour {\n  id: ITourId;\n  enforced: boolean;\n  // Screen the tour was started on. Step `condition`s resolve the active screen\n  // via getCurrentScreenData(), which returns the tour modal once it's open — so\n  // they're evaluated against this snapshot instead, keeping the steps shown in\n  // the modal consistent with the ones that triggered the tour.\n  screenData?: IScreenData;\n}\n\nexport interface IState {\n  user?: IUser;\n  storage: IStorage;\n  lastSyncedStorage?: IStorage;\n  programs: IProgram[];\n  programsIndex: IProgramIndexEntry[];\n  notification?: INotification;\n  revisions: Partial<Record<string, string[]>>;\n  prices?: Partial<Record<string, string>>;\n  offers?: Partial<Record<string, IOfferData[]>>;\n  loading: ILoading;\n  defaultEquipmentExpanded?: IEquipment;\n  subscriptionLoading?: ISubscriptionLoading;\n  subscriptionStatus?: IIapActiveSubscription[];\n  subscriptionStatusLoading?: boolean;\n  // Ephemeral, NON-synced optimistic hint for a just-queued Android plan switch, bridging the gap until\n  // Google's deferred RTDN lands and the server reports `pendingProduct` authoritatively. Session-only\n  // (not persisted/synced) and time-boxed via `until` so it can't drift like the old synced flag did.\n  subscriptionPendingHint?: { productId: string; until: number };\n  ownedLifetime?: boolean;\n  progress: Partial<Record<number, IHistoryRecord>>;\n  previewProgram?: {\n    id: string;\n    showCustomPrograms?: boolean;\n  };\n  muscleView?: {\n    type: \"program\" | \"day\";\n    programId?: string;\n    day?: number;\n  };\n  viewExerciseType?: IExerciseType;\n  adminKey?: string;\n  showWhatsNew?: boolean;\n  showSignupRequest?: boolean;\n  showHearAboutUs?: boolean;\n  toast?: string;\n  tour?: IStateTour;\n  scrollToHistoryRecordId?: number;\n  freshMigrations: boolean;\n  errors: IStateErrors;\n  reportedCorruptedStorage?: boolean;\n  nosync: boolean;\n  selectedGymId?: string;\n  appleOffer?: IAppleOffer;\n  googleOffer?: IGoogleOffer;\n  deviceId?: string;\n  editProgramStates: Record<string, IPlannerState>;\n  editProgramExerciseStates: Record<string, IPlannerExerciseState>;\n  playgroundState?: IProgramPreviewPlaygroundState;\n  importPreview?: IImportPreview;\n}\n\nexport interface IImportPreview {\n  source: IImportSession[\"source\"];\n  result: IImportResult;\n}\n\nexport interface ILocalStorage {\n  storage?: IStorage;\n  lastSyncedStorage?: IStorage;\n  editDay?: IProgramDay;\n}\n\nexport function buildState(args: {\n  storage?: IStorage;\n  notification?: INotification;\n  userId?: string;\n  nosync?: boolean;\n  deviceId?: string;\n}): IState {\n  return {\n    progress: {},\n    programs: [basicBeginnerProgram],\n    programsIndex: [],\n    loading: { items: {} },\n    notification: args.notification,\n    storage: args.storage || Storage_getDefault(),\n    user: args.userId ? { email: args.userId, id: args.userId } : undefined,\n    errors: {},\n    revisions: {},\n    freshMigrations: false,\n    nosync: !!args.nosync,\n    deviceId: args.deviceId,\n    editProgramStates: {},\n    editProgramExerciseStates: {},\n  };\n}\n\nexport function updateState(dispatch: IDispatch, lensRecording: ILensRecordingPayload<IState>[], desc: string): void {\n  dispatch({ type: \"UpdateState\", lensRecording, desc });\n}\n\nexport function updateSettings(\n  dispatch: IDispatch,\n  lensRecording: ILensRecordingPayload<ISettings>,\n  desc: string\n): void {\n  dispatch({ type: \"UpdateSettings\", lensRecording, desc });\n}\n\nexport function updateProgress(\n  dispatch: IDispatch,\n  lensRecordings: ILensRecordingPayload<IHistoryRecord>[] | ILensRecordingPayload<IHistoryRecord>,\n  desc: string\n): void {\n  const recordings = Array.isArray(lensRecordings) ? lensRecordings : [lensRecordings];\n  dispatch({ type: \"UpdateProgress\", lensRecordings: recordings, desc });\n}\n","import { IPercentage, ISettings, IStats, IStatsHealthKey, IStatsKey, IWeight } from \"../types\";\nimport { CollectionUtils_sortBy } from \"../utils/collection\";\nimport { ObjectUtils_keys } from \"../utils/object\";\nimport { Weight_add, Weight_build, Weight_divide } from \"./weight\";\n\nexport function Stats_name(key: IStatsKey | IStatsHealthKey): string {\n  switch (key) {\n    case \"bicepLeft\":\n      return \"Left Bicep\";\n    case \"bicepRight\":\n      return \"Right Bicep\";\n    case \"calfLeft\":\n      return \"Left Calf\";\n    case \"calfRight\":\n      return \"Right Calf\";\n    case \"chest\":\n      return \"Chest\";\n    case \"forearmLeft\":\n      return \"Left Forearm\";\n    case \"forearmRight\":\n      return \"Right Forearm\";\n    case \"hips\":\n      return \"Hips\";\n    case \"neck\":\n      return \"Neck\";\n    case \"shoulders\":\n      return \"Shoulders\";\n    case \"thighLeft\":\n      return \"Left Thigh\";\n    case \"thighRight\":\n      return \"Right Thigh\";\n    case \"waist\":\n      return \"Waist\";\n    case \"weight\":\n      return \"Bodyweight\";\n    case \"bodyfat\":\n      return \"Bodyfat\";\n    case \"sleep\":\n      return \"Sleep\";\n    case \"calories\":\n      return \"Calories\";\n    case \"protein\":\n      return \"Protein\";\n  }\n}\n\nexport function Stats_getCurrentBodyweight(stats: IStats): IWeight | undefined {\n  const weights = CollectionUtils_sortBy(stats.weight.weight || [], \"timestamp\", true);\n  return weights[0]?.value;\n}\n\nexport function Stats_getCurrentMovingAverageBodyweight(stats: IStats, settings: ISettings): IWeight | undefined {\n  const movingAverageWindowSize = settings.graphOptions.weight?.movingAverageWindowSize;\n  if (!movingAverageWindowSize) {\n    return Stats_getCurrentBodyweight(stats);\n  }\n  const weights = CollectionUtils_sortBy(stats.weight.weight || [], \"timestamp\", true);\n  if (weights.length < movingAverageWindowSize) {\n    return Stats_getCurrentBodyweight(stats);\n  }\n  const recentWeights = weights.slice(0, movingAverageWindowSize);\n  const totalWeight = recentWeights.reduce((sum, item) => Weight_add(sum, item.value), Weight_build(0, settings.units));\n  return Weight_divide(totalWeight, recentWeights.length);\n}\n\nexport function Stats_getCurrentBodyfat(stats: IStats): IPercentage | undefined {\n  const weights = CollectionUtils_sortBy(stats.percentage.bodyfat || [], \"timestamp\", true);\n  return weights[0]?.value;\n}\n\nexport function Stats_getEmpty(): IStats {\n  return {\n    weight: {},\n    percentage: {},\n    length: {},\n  };\n}\n\nexport function Stats_isEmpty(stats: IStats): boolean {\n  const statsKeys: IStatsKey[] = [\n    ...ObjectUtils_keys(stats.weight).filter((k) => (stats.weight[k] || []).length > 0),\n    ...ObjectUtils_keys(stats.percentage).filter((k) => (stats.percentage[k] || []).length > 0),\n    ...ObjectUtils_keys(stats.length).filter((k) => (stats.length[k] || []).length > 0),\n  ];\n  return statsKeys.length === 0;\n}\n","import { runMigrations } from \"../migrations/runner\";\nimport * as v from \"valibot\";\nimport { getLatestMigrationVersion } from \"../migrations/migrations\";\nimport { UidFactory_generateUid } from \"../utils/generator\";\nimport { Settings_build } from \"../models/settings\";\nimport { IEither } from \"../utils/types\";\nimport RB from \"rollbar\";\nimport { IState, updateState } from \"./state\";\nimport { lb } from \"lens-shmens\";\nimport { IDispatch } from \"../ducks/types\";\nimport { ObjectUtils_isEqual, ObjectUtils_values } from \"../utils/object\";\nimport { DateUtils_formatYYYYMMDD } from \"../utils/date\";\nimport { IStorageUpdate, IStorageUpdate2 } from \"../utils/sync\";\nimport {\n  IHistoryRecord,\n  IStorage,\n  IPartialStorage,\n  IHearAboutUs,\n  STORAGE_VERSION_TYPES,\n  VStorage,\n  VHistoryRecord,\n} from \"../types\";\nimport {\n  CollectionUtils_groupByKeyUniq,\n  CollectionUtils_compact,\n  CollectionUtils_immutableSort,\n} from \"../utils/collection\";\nimport { IVersions, VersionTracker } from \"./versionTracker\";\nimport { lg } from \"../utils/posthog\";\nimport { Diagnostics_getLastActions, Diagnostics_setLastValidationErrors } from \"../utils/diagnostics\";\n\ndeclare let Rollbar: RB;\n\nfunction formatIssuePath(issue: v.GenericIssue): string {\n  if (!issue.path || issue.path.length === 0) {\n    return \"\";\n  }\n  return issue.path\n    .map((segment) => {\n      const key = (segment as { key: unknown }).key;\n      if (typeof key === \"number\") {\n        return `[${key}]`;\n      }\n      return String(key);\n    })\n    .reduce((acc, part) => {\n      if (part.startsWith(\"[\")) {\n        return `${acc}${part}`;\n      }\n      return acc ? `${acc}.${part}` : part;\n    }, \"\");\n}\n\nexport function Storage_validate<T>(data: unknown, schema: v.GenericSchema<T>, name: string): IEither<T, string[]> {\n  const result = v.safeParse(schema, data, { abortEarly: false });\n  if (result.success) {\n    // Return the input as T (not result.output) so unknown fields are preserved at every\n    // nesting level — valibot's v.object strips unknown keys; io-ts did not, and storage may\n    // carry forward-compatible fields we do not want to silently drop. Trade-off: any\n    // v.transform / coercion added to schemas in the future will run but be discarded here.\n    return { success: true, data: data as T };\n  }\n  const errors = result.issues.map((issue) => {\n    const path = formatIssuePath(issue);\n    const head = path ? `${name}.${path}` : name;\n    return `${head}: ${issue.message}`;\n  });\n  return { success: false, error: errors };\n}\n\nexport function Storage_validateStorage(data: Record<string, unknown>): IEither<IStorage, string[]> {\n  const result = Storage_validate(data, VStorage, \"storage\");\n  if (result.success) {\n    return { success: true, data: result.data as unknown as IStorage };\n  }\n  return result;\n}\n\nexport function Storage_validateAndReportStorage(data: Record<string, unknown>): IEither<IStorage, string[]> {\n  const result = Storage_validateAndReport(data, VStorage, \"storage\");\n  if (result.success) {\n    return { success: true, data: result.data as unknown as IStorage };\n  }\n  return result;\n}\n\nexport function Storage_fillVersions<T extends IPartialStorage | IStorage>(storage: T, deviceId?: string): T {\n  const versionTracker = new VersionTracker(STORAGE_VERSION_TYPES, { deviceId });\n  const timestamp = Date.now();\n  const filledVersions = versionTracker.fillVersions(storage, storage._versions || {}, timestamp);\n  return {\n    ...storage,\n    _versions: filledVersions,\n  };\n}\n\nexport function Storage_validateAndReport<T>(\n  data: unknown,\n  schema: v.GenericSchema<T>,\n  name: string\n): IEither<T, string[]> {\n  const result = Storage_validate(data, schema, name);\n  if (!result.success) {\n    const error = result.error;\n    lg(\"ls-corrupted-storage\", { lastActions: JSON.stringify(Diagnostics_getLastActions()) });\n    Diagnostics_setLastValidationErrors(error);\n    if (typeof Rollbar !== \"undefined\" && Rollbar != null) {\n      Rollbar.error(error.join(\"\\n\"), { state: JSON.stringify(data), type: name });\n    }\n    console.error(`Error decoding ${name}`);\n    console.log(data);\n    error.forEach((e) => console.error(e));\n  }\n  return result;\n}\n\nexport function Storage_get(\n  maybeStorage?: Record<string, unknown>,\n  shouldReportError?: boolean\n): IEither<IStorage, string[]> {\n  if (maybeStorage) {\n    let finalStorage = runMigrations(maybeStorage as IStorage);\n    const firstValidateResult = Storage_validate(finalStorage, VStorage, \"storage\");\n    if (!firstValidateResult.success) {\n      maybeStorage.version = \"20250322014249\";\n      finalStorage = runMigrations(maybeStorage as IStorage);\n    }\n    const result = shouldReportError\n      ? Storage_validateAndReport(finalStorage, VStorage, \"storage\")\n      : Storage_validate(finalStorage, VStorage, \"storage\");\n    if (result.success) {\n      return { success: true, data: result.data as unknown as IStorage };\n    }\n    return result;\n  } else {\n    return { success: false, error: [\"Provided data is empty\"] };\n  }\n}\n\nexport function Storage_getHistoryRecord(\n  record: Record<string, unknown>,\n  shouldReportError?: boolean\n): IEither<IHistoryRecord, string[]> {\n  const storage = Storage_getDefault();\n  storage.version = \"20251230101232\";\n  storage.history = [record as unknown as IHistoryRecord];\n  const migrated = runMigrations(storage);\n  const migratedRecord = migrated.history[0];\n  if (!migratedRecord) {\n    return { success: false, error: [\"Failed to migrate history record\"] };\n  }\n  const result = shouldReportError\n    ? Storage_validateAndReport(migratedRecord as unknown as Record<string, unknown>, VHistoryRecord, \"progress\")\n    : Storage_validate(migratedRecord as unknown as Record<string, unknown>, VHistoryRecord, \"progress\");\n  if (result.success) {\n    return { success: true, data: migratedRecord };\n  }\n  return { success: false, error: result.error };\n}\n\nexport function Storage_getDefault(): IStorage {\n  const dateNow = Date.now();\n  return {\n    id: dateNow,\n    originalId: dateNow,\n    currentProgramId: undefined,\n    reviewRequests: [],\n    signupRequests: [],\n    deletedHistory: [],\n    deletedPrograms: [],\n    deletedStats: [],\n    tempUserId: UidFactory_generateUid(10),\n    affiliates: {},\n    progress: [],\n    stats: {\n      weight: { weight: [] },\n      length: {\n        neck: [],\n        shoulders: [],\n        bicepLeft: [],\n        bicepRight: [],\n        forearmLeft: [],\n        forearmRight: [],\n        chest: [],\n        waist: [],\n        hips: [],\n        thighLeft: [],\n        thighRight: [],\n        calfLeft: [],\n        calfRight: [],\n      },\n      percentage: { bodyfat: [] },\n    },\n    settings: Settings_build(),\n    history: [],\n    version: getLatestMigrationVersion(),\n    subscription: { apple: [], google: [] },\n    programs: [],\n    helps: [],\n    email: undefined,\n    whatsNew: DateUtils_formatYYYYMMDD(Date.now(), \"\"),\n  };\n}\n\nexport function Storage_setAffiliate(dispatch: IDispatch, source: string, type: \"coupon\" | \"program\"): void {\n  updateState(\n    dispatch,\n    [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"affiliates\")\n        .recordModify((affiliates) => {\n          if (affiliates[source] != null) {\n            return affiliates;\n          }\n          return { ...affiliates, [source]: { id: source, timestamp: Date.now(), type, vtype: \"affiliate\" } };\n        }),\n    ],\n    \"Set affiliate\"\n  );\n}\n\nexport function Storage_isChanged(aStorage?: IStorage, bStorage?: IStorage): boolean {\n  if ((!aStorage && bStorage) || (!bStorage && aStorage)) {\n    return true;\n  }\n  if (!aStorage && !bStorage) {\n    return false;\n  }\n  const { originalId: _aOriginalId, id: _aId, _versions: _aVersions, ...cleanedAStorage } = aStorage!;\n  const { originalId: _bOriginalId, id: _bId, _versions: _bVersions, ...cleanedBStorage } = bStorage!;\n  const changed = !ObjectUtils_isEqual(cleanedAStorage, cleanedBStorage, [\"version\"]);\n  return changed;\n}\n\nexport function Storage_isFullStorage(storage: IStorage | IPartialStorage): storage is IStorage {\n  return storage.programs != null && storage.history != null && storage.stats != null;\n}\n\nexport function Storage_partialStorageToStorage(partialStorage: IPartialStorage): IStorage {\n  if (partialStorage.history != null && partialStorage.programs != null && partialStorage.stats != null) {\n    return partialStorage as IStorage;\n  } else {\n    return {\n      ...partialStorage,\n      history: partialStorage.history || [],\n      programs: partialStorage.programs || [],\n      stats: partialStorage.stats || {\n        length: {},\n        percentage: {},\n        weight: {},\n      },\n    };\n  }\n}\n\nexport function Storage_updateVersions(\n  oldStorage: IPartialStorage,\n  newStorage: IPartialStorage,\n  deviceId?: string\n): IVersions<IStorage> {\n  const { id: oldId, originalId: oldOriginalId, _versions: oldVersions, ...oldCleanedStorage } = oldStorage;\n  const { id: newId, originalId: newOriginalId, _versions: newVersions, ...newCleanedStorage } = newStorage;\n  const versionTracker = new VersionTracker(STORAGE_VERSION_TYPES, { deviceId });\n  const timestamp = Date.now();\n  if (\n    oldCleanedStorage.tempUserId === newCleanedStorage.tempUserId &&\n    oldCleanedStorage.version === newCleanedStorage.version\n  ) {\n    return versionTracker.updateVersions(\n      oldCleanedStorage,\n      newCleanedStorage,\n      oldStorage._versions || {},\n      newStorage._versions || {},\n      timestamp\n    );\n  } else {\n    return newVersions || {};\n  }\n}\n\nexport function Storage_mergeStorage(oldStorage: IStorage, newStorage: IStorage, deviceId?: string): IStorage {\n  const migratedOldStorage = runMigrations(oldStorage);\n  const migratedNewStorage = runMigrations(newStorage);\n  const { id: oldId, originalId: oldOriginalId, _versions: oldVersions, ...oldCleanedStorage } = migratedOldStorage;\n  const { id: newId, originalId: newOriginalId, _versions: newVersions, ...newCleanedStorage } = migratedNewStorage;\n  const versionTracker = new VersionTracker(STORAGE_VERSION_TYPES, { deviceId });\n  const updatedVersions = versionTracker.mergeVersions(oldVersions || {}, newVersions || {});\n  const updatedCleanedStorage = versionTracker.mergeByVersions(\n    oldCleanedStorage,\n    oldVersions || {},\n    newVersions || {},\n    newCleanedStorage\n  );\n  const updatedStorage: IStorage = {\n    ...updatedCleanedStorage,\n    id: Math.max(newId || Date.now(), oldId || Date.now()),\n    originalId: Math.max(newOriginalId ?? 0, oldOriginalId ?? 0),\n    _versions: updatedVersions,\n  };\n  const sortedProgress = sortProgressByIndex(updatedStorage.progress);\n  return sortedProgress === updatedStorage.progress ? updatedStorage : { ...updatedStorage, progress: sortedProgress };\n}\n\nfunction sortProgressByIndex(progress: undefined): undefined;\nfunction sortProgressByIndex(progress: IHistoryRecord[]): IHistoryRecord[];\nfunction sortProgressByIndex(progress: IHistoryRecord[] | undefined): IHistoryRecord[] | undefined;\nfunction sortProgressByIndex(progress: IHistoryRecord[] | undefined): IHistoryRecord[] | undefined {\n  if (!progress || progress.length === 0) {\n    return progress;\n  }\n  const head = progress[0];\n  if (!head.entries || head.entries.length === 0) {\n    return progress;\n  }\n\n  const byIndex = (a: { index: number }, b: { index: number }): number => a.index - b.index;\n\n  let entriesWithSortedSets = head.entries;\n  for (let i = 0; i < head.entries.length; i++) {\n    const entry = head.entries[i];\n    const sortedSets = CollectionUtils_immutableSort(entry.sets, byIndex);\n    if (sortedSets !== entry.sets) {\n      if (entriesWithSortedSets === head.entries) {\n        entriesWithSortedSets = head.entries.slice();\n      }\n      entriesWithSortedSets[i] = { ...entry, sets: sortedSets };\n    }\n  }\n\n  const sortedEntries = CollectionUtils_immutableSort(entriesWithSortedSets, byIndex);\n  if (sortedEntries === head.entries) {\n    return progress;\n  }\n  return [{ ...head, entries: sortedEntries }, ...progress.slice(1)];\n}\n\nexport function Storage_applyStorageUpdate2(storage: IStorage, update: IStorageUpdate2, deviceId?: string): IStorage {\n  if (!update.storage || Object.keys(update.storage).length === 0) {\n    return storage;\n  }\n\n  const versionTracker = new VersionTracker(STORAGE_VERSION_TYPES, { deviceId });\n  const currentVersions = storage._versions || {};\n  const incomingVersions = update.versions || {};\n\n  const mergedVersions = versionTracker.mergeVersions(currentVersions, incomingVersions);\n  const mergedStorage = versionTracker.mergeByVersions(\n    storage,\n    currentVersions,\n    incomingVersions,\n    update.storage as Partial<IStorage>\n  );\n\n  const updatedStorage: IStorage = {\n    ...mergedStorage,\n    _versions: mergedVersions,\n  };\n\n  const sortedProgress = sortProgressByIndex(updatedStorage.progress);\n  return sortedProgress === updatedStorage.progress ? updatedStorage : { ...updatedStorage, progress: sortedProgress };\n}\n\nfunction mergeHearAboutUs(a?: IHearAboutUs, b?: IHearAboutUs): IHearAboutUs | undefined {\n  if (a == null) {\n    return b;\n  }\n  if (b == null) {\n    return a;\n  }\n  const requests = Array.from(new Set([...(a.requests || []), ...(b.requests || [])]));\n  const done = a.done || b.done;\n  const result = (b.result?.ts ?? -1) >= (a.result?.ts ?? -1) ? (b.result ?? a.result) : (a.result ?? b.result);\n  return { result, requests, done };\n}\n\nexport function Storage_applyUpdate(storage: IPartialStorage, updateWithStats: IStorageUpdate): IPartialStorage {\n  const { stats, ...update } = updateWithStats;\n\n  const deletedGyms = new Set([...storage.settings.deletedGyms, ...(update.settings?.deletedGyms || [])]);\n  const lastGyms = CollectionUtils_groupByKeyUniq(storage.settings.gyms || [], \"id\");\n  const newGyms = CollectionUtils_groupByKeyUniq(update.settings?.gyms || [], \"id\");\n  const gymsObj = { ...lastGyms, ...newGyms };\n  const gymsArr = CollectionUtils_compact(ObjectUtils_values(gymsObj)).filter((g) => !deletedGyms.has(g.id));\n\n  const deletedHistory = Array.from(new Set([...storage.deletedHistory, ...(update.deletedHistory || [])]));\n  const deletedPrograms = Array.from(new Set([...storage.deletedPrograms, ...(update.deletedPrograms || [])]));\n  const deletedStats = Array.from(new Set([...storage.deletedStats, ...(update.deletedStats || [])]));\n  const reviewRequests = Array.from(new Set([...storage.reviewRequests, ...(update.reviewRequests || [])]));\n  const signupRequests = Array.from(new Set([...storage.signupRequests, ...(update.signupRequests || [])]));\n  const hearAboutUs = mergeHearAboutUs(storage.hearAboutUs, update.hearAboutUs);\n  const helps = Array.from(new Set([...storage.helps, ...(update.helps || [])]));\n\n  const exercises = { ...storage.settings.exercises, ...(update.settings?.exercises || {}) };\n  const exerciseData = { ...storage.settings.exerciseData, ...(update.settings?.exerciseData || {}) };\n\n  const newStorage: IPartialStorage = {\n    ...storage,\n    ...update,\n    deletedHistory,\n    deletedPrograms,\n    deletedStats,\n    reviewRequests,\n    signupRequests,\n    hearAboutUs,\n    helps,\n    settings: {\n      ...storage.settings,\n      ...update.settings,\n      exercises,\n      exerciseData,\n      gyms: gymsArr,\n    },\n  };\n\n  return newStorage;\n}\n","/**\n * VersionTracker - A field-level version tracking system for JavaScript objects\n *\n * This module provides a generic, configurable version tracking system that records\n * timestamps for individual field changes within complex object hierarchies. It's\n * designed to support conflict resolution in distributed systems where multiple\n * clients may modify the same data offline.\n *\n * ## Core Concepts:\n *\n * ### 1. Atomic Objects\n * Objects that are versioned as a single unit. When any property of an atomic\n * object changes, the entire object gets a single version timestamp. This is\n * useful for objects that should be treated as indivisible units.\n *\n * Example: A \"history_record\" might be atomic because all its fields (date,\n * exercises, sets) should be synced together as one cohesive workout session.\n *\n * ### 2. Controlled Objects\n * Objects where only specific fields are versioned. This allows fine-grained\n * control over which properties trigger version updates. Useful for objects\n * where some fields are critical for sync while others are local-only or\n * computed.\n *\n * Example: A \"program\" might have controlled fields like \"name\" and \"nextDay\"\n * that need versioning, while fields like \"description\" might not need tracking.\n *\n * ### 3. Regular Objects\n * Objects that aren't atomic or controlled have each field versioned\n * independently. This provides maximum granularity for conflict resolution.\n *\n * ### 4. Collections (Arrays and Dictionaries)\n * Arrays and dictionary objects containing items with IDs are treated specially.\n * The tracker maintains an \"items\" map (ID -> version) and a \"deleted\" map\n * (ID -> deletion timestamp) to handle additions, updates, and deletions.\n *\n * ## How It Works:\n *\n * 1. **Initialization**: Create a VersionTracker with configuration specifying\n *    atomic types, controlled types, their ID fields, and dictionary paths.\n *\n * 2. **Version Tracking**: Call updateVersions() with old and new objects to\n *    generate a version tree that mirrors the object structure but contains\n *    timestamps instead of values.\n *\n * 3. **Conflict Resolution**: Use the version tree to merge changes from\n *    multiple sources by comparing timestamps - newer timestamps win.\n *\n * ## Usage Example:\n *\n * ```typescript\n * // Define your configuration\n * const config: IVersionTypes<MyAtomicType, MyControlledType> = {\n *   atomicTypes: [\"history_record\", \"user_preference\"],\n *   controlledTypes: [\"program\", \"exercise\"],\n *   typeIdMapping: {\n *     \"history_record\": \"id\",\n *     \"program\": \"id\",\n *     \"exercise\": \"name\"\n *   },\n *   controlledFields: {\n *     \"program\": [\"name\", \"nextDay\"],\n *     \"exercise\": [\"sets\", \"reps\"]\n *   },\n *   dictionaryFields: [\"settings.exercises\", \"users.preferences\"]\n * };\n *\n * // Create tracker instance\n * const tracker = new VersionTracker(config);\n *\n * // Track changes\n * const oldState = { name: \"John\", age: 30, settings: { theme: \"dark\" } };\n * const newState = { name: \"John\", age: 31, settings: { theme: \"light\" } };\n * const versions = tracker.updateVersions(oldState, newState, {}, Date.now());\n * // Result: { age: 1234567890, settings: { theme: 1234567890 } }\n * ```\n */\nimport { IVersionTypes, IVersions } from \"./versionTracker/types\";\nimport { VersionTrackerDiffVersions } from \"./versionTracker/versionTrackerDiffVersions\";\nimport { VersionTrackerExtractByVersions } from \"./versionTracker/versionTrackerExtractByVersions\";\nimport { VersionTrackerFillVersions } from \"./versionTracker/versionTrackerFillVersions\";\nimport { VersionTrackerMergeByVersions } from \"./versionTracker/versionTrackerMergeByVersions\";\nimport { VersionTrackerMergeVersions } from \"./versionTracker/versionTrackerMergeVersions\";\nimport { VersionTrackerUpdateVersions } from \"./versionTracker/versionTrackerUpdateVersions\";\n\nexport * from \"./versionTracker/types\";\n\nexport class VersionTracker<TAtomicType extends string, TControlledType extends string> {\n  private readonly versionTypes: IVersionTypes<TAtomicType, TControlledType>;\n  private readonly deviceId?: string;\n\n  constructor(versionTypes: IVersionTypes<TAtomicType, TControlledType>, options?: { deviceId?: string }) {\n    this.versionTypes = versionTypes;\n    this.deviceId = options?.deviceId;\n  }\n\n  public updateVersions<T extends Record<string, unknown>>(\n    oldObj: T,\n    newObj: T,\n    currentVersions: IVersions<T>,\n    newVersions: IVersions<T>,\n    timestamp: number\n  ): IVersions<T> {\n    return new VersionTrackerUpdateVersions(this.versionTypes, this.deviceId).run(\n      oldObj,\n      newObj,\n      currentVersions,\n      newVersions,\n      timestamp\n    );\n  }\n\n  public fillVersions<T extends Record<string, unknown>>(\n    fullObj: T,\n    versions: IVersions<T>,\n    timestamp: number\n  ): IVersions<T> {\n    return new VersionTrackerFillVersions(this.versionTypes, this.deviceId).run(fullObj, versions, timestamp);\n  }\n\n  public diffVersions<T>(oldVersions: IVersions<T> | undefined, newVersions: IVersions<T>): IVersions<T> | undefined {\n    return new VersionTrackerDiffVersions().run(oldVersions, newVersions);\n  }\n\n  public extractByVersions<T extends Record<string, unknown>>(obj: T, versionsDiff: IVersions<T>): Partial<T> {\n    return new VersionTrackerExtractByVersions(this.versionTypes).run(obj, versionsDiff);\n  }\n\n  public mergeByVersions<T extends Record<string, unknown>>(\n    fullObj: T,\n    fullVersions: IVersions<T>,\n    versionDiff: IVersions<T>,\n    extractedObj: Partial<T>\n  ): T {\n    return new VersionTrackerMergeByVersions(this.versionTypes).run(fullObj, fullVersions, versionDiff, extractedObj);\n  }\n\n  public mergeVersions<T>(fullVersions: IVersions<T>, versionDiff: IVersions<T>): IVersions<T> {\n    return new VersionTrackerMergeVersions(this.versionTypes).run(fullVersions, versionDiff);\n  }\n}\n","export interface IVectorClock {\n  vc: { [deviceId: string]: number };\n  t: number;\n}\n\nexport interface IIdVersion extends IVectorClock {\n  value: string;\n}\n\nexport type IFieldVersion = number | IVectorClock | IIdVersion;\n\nexport interface IVersionsObject {\n  [key: string]: IVersionValue | undefined;\n}\n\nexport type IVersionValue = IFieldVersion | IVersionsObject | ICollectionVersions;\n\nexport type IVersions<T> = {\n  [K in keyof T & string]?: IVersionValue;\n};\n\nexport interface ICollectionVersions {\n  items?: Record<string, IVersionsObject | IFieldVersion>;\n  deleted?: Record<string, number>;\n  nukedeleted?: number;\n}\n\nexport type ITypedObject<T extends string = string> = { vtype: T } & Record<string, unknown>;\n\nexport interface IVersionTypes<TAtomicType extends string, TControlledType extends string> {\n  atomicTypes: readonly TAtomicType[];\n  controlledTypes: readonly TControlledType[];\n  typeIdMapping: Record<TAtomicType | TControlledType, string>;\n  controlledFields: Record<TControlledType, readonly string[]>;\n  excludedFields?: Partial<Record<TControlledType, readonly string[]>>;\n  dictionaryFields: readonly string[];\n  compactionThresholds?: Record<string, number>;\n  typeValidators?: Partial<Record<TControlledType, { is: (u: unknown) => boolean }>>;\n}\n\nexport function isVectorClock(v: unknown): v is IVectorClock {\n  return typeof v === \"object\" && v !== null && \"vc\" in v && \"t\" in v;\n}\n\nexport function isIdVersion(v: unknown): v is IIdVersion {\n  return isVectorClock(v) && \"value\" in v && typeof (v as IIdVersion).value === \"string\";\n}\n\nexport function isFieldVersion(v: unknown): v is IFieldVersion {\n  return typeof v === \"number\" || isVectorClock(v);\n}\n\nexport function isCollectionVersions(v: unknown): v is ICollectionVersions {\n  return v !== null && typeof v === \"object\" && (\"items\" in v || \"deleted\" in v);\n}\n\nexport function isVersionsObject(v: unknown): v is IVersionsObject {\n  return v !== null && typeof v === \"object\" && !isCollectionVersions(v) && !isFieldVersion(v);\n}\n","import { ObjectUtils_isEqual } from \"../../utils/object\";\nimport {\n  IVersionTypes,\n  ITypedObject,\n  IFieldVersion,\n  IVectorClock,\n  IIdVersion,\n  IVersionsObject,\n  IVersionValue,\n  IVersions,\n  ICollectionVersions,\n  isVectorClock,\n  isIdVersion,\n  isCollectionVersions,\n  isVersionsObject,\n} from \"./types\";\n\nexport function VersionTrackerUtils_isAtomicType<TAtomicType extends string, TControlledType extends string>(\n  value: unknown,\n  versionTypes: IVersionTypes<TAtomicType, TControlledType>\n): value is ITypedObject<TAtomicType> {\n  return VersionTrackerUtils_isTypedObject(value) && versionTypes.atomicTypes.includes(value.vtype as TAtomicType);\n}\n\nexport function VersionTrackerUtils_isControlledType<TAtomicType extends string, TControlledType extends string>(\n  value: unknown,\n  versionTypes: IVersionTypes<TAtomicType, TControlledType>\n): value is ITypedObject<TControlledType> {\n  return (\n    VersionTrackerUtils_isTypedObject(value) && versionTypes.controlledTypes.includes(value.vtype as TControlledType)\n  );\n}\n\nexport function VersionTrackerUtils_isTypedObject(value: unknown): value is ITypedObject {\n  return typeof value === \"object\" && value !== null && \"vtype\" in value && typeof value.vtype === \"string\";\n}\n\nexport function VersionTrackerUtils_isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null;\n}\n\nexport function VersionTrackerUtils_areEqual(a: unknown, b: unknown): boolean {\n  return ObjectUtils_isEqual(a as Record<string, unknown>, b as Record<string, unknown>);\n}\n\nexport function VersionTrackerUtils_getId<TAtomicType extends string, TControlledType extends string>(\n  obj: unknown,\n  versionTypes: IVersionTypes<TAtomicType, TControlledType>\n): string | undefined {\n  if (!VersionTrackerUtils_isTypedObject(obj)) {\n    return undefined;\n  }\n  const idField = versionTypes.typeIdMapping[obj.vtype as TAtomicType | TControlledType];\n  if (!idField || !(idField in obj)) {\n    return undefined;\n  }\n  const id = obj[idField];\n  return id != null ? String(id) : undefined;\n}\n\nexport function VersionTrackerUtils_asVersionsObject<T>(versions: IVersions<T>): IVersionsObject {\n  return versions as IVersionsObject;\n}\n\nexport function VersionTrackerUtils_ensureVersionsObject(version: IVersionValue | undefined): IVersionsObject {\n  if (isVersionsObject(version)) {\n    return version;\n  }\n  return {};\n}\n\nexport function VersionTrackerUtils_ensureCollectionVersions(version: IVersionValue | undefined): ICollectionVersions {\n  if (isCollectionVersions(version)) {\n    return version;\n  }\n  return { items: {}, deleted: {} };\n}\n\nexport function VersionTrackerUtils_createVersion(\n  timestamp: number,\n  currentVersion: IFieldVersion | undefined,\n  deviceId?: string\n): IFieldVersion {\n  if (!deviceId) {\n    return timestamp;\n  }\n\n  const current = VersionTrackerUtils_normalizeVersion(currentVersion);\n  const newClock = { ...current.vc };\n  newClock[deviceId] = (newClock[deviceId] || 0) + 1;\n\n  return {\n    vc: newClock,\n    t: timestamp,\n  };\n}\n\nexport function VersionTrackerUtils_normalizeVersion(version?: IFieldVersion): IVectorClock {\n  if (!version) {\n    return { vc: {}, t: 0 };\n  }\n  if (isVectorClock(version)) {\n    return version;\n  }\n  return { vc: {}, t: version };\n}\n\nexport function VersionTrackerUtils_compareVersions(\n  a: IFieldVersion,\n  b: IFieldVersion\n): \"a_newer\" | \"b_newer\" | \"concurrent\" | \"equal\" {\n  const aNorm = VersionTrackerUtils_normalizeVersion(a);\n  const bNorm = VersionTrackerUtils_normalizeVersion(b);\n\n  const aDevices = Object.keys(aNorm.vc);\n  const bDevices = Object.keys(bNorm.vc);\n  const aHasVc = aDevices.length > 0;\n  const bHasVc = bDevices.length > 0;\n\n  if (aHasVc !== bHasVc) {\n    if (aNorm.t === bNorm.t) {\n      return \"equal\";\n    }\n    return aNorm.t > bNorm.t ? \"a_newer\" : \"b_newer\";\n  }\n\n  if (!aHasVc && !bHasVc) {\n    if (aNorm.t === bNorm.t) {\n      return \"equal\";\n    }\n    return aNorm.t > bNorm.t ? \"a_newer\" : \"b_newer\";\n  }\n\n  const allDevices = new Set([...aDevices, ...bDevices]);\n  let aHasHigher = false;\n  let bHasHigher = false;\n\n  for (const deviceId of allDevices) {\n    const aCount = aNorm.vc[deviceId] || 0;\n    const bCount = bNorm.vc[deviceId] || 0;\n\n    if (aCount > bCount) {\n      aHasHigher = true;\n    }\n    if (bCount > aCount) {\n      bHasHigher = true;\n    }\n  }\n\n  if (!aHasHigher && !bHasHigher) {\n    return \"equal\";\n  }\n  if (aHasHigher && !bHasHigher) {\n    return \"a_newer\";\n  }\n  if (bHasHigher && !aHasHigher) {\n    return \"b_newer\";\n  }\n  return \"concurrent\";\n}\n\nexport function VersionTrackerUtils_mergeFieldVersions(a: IFieldVersion, b: IFieldVersion): IFieldVersion {\n  const comparison = VersionTrackerUtils_compareVersions(a, b);\n  if (comparison === \"a_newer\") {\n    return a;\n  }\n  if (comparison === \"b_newer\") {\n    return b;\n  }\n  if (comparison === \"equal\") {\n    return a;\n  }\n\n  const aNorm = VersionTrackerUtils_normalizeVersion(a);\n  const bNorm = VersionTrackerUtils_normalizeVersion(b);\n\n  const allDevices = new Set([...Object.keys(aNorm.vc), ...Object.keys(bNorm.vc)]);\n  const mergedVc: { [deviceId: string]: number } = {};\n\n  for (const deviceId of allDevices) {\n    mergedVc[deviceId] = Math.max(aNorm.vc[deviceId] || 0, bNorm.vc[deviceId] || 0);\n  }\n\n  return {\n    vc: mergedVc,\n    t: Math.max(aNorm.t, bNorm.t),\n  };\n}\n\nexport function VersionTrackerUtils_incrementNukedeleted(collection: ICollectionVersions): ICollectionVersions {\n  if (collection.nukedeleted == null) {\n    return collection;\n  }\n  const next = collection.nukedeleted + 1;\n  if (next > VersionTrackerUtils_NUKEDELETED_THRESHOLD) {\n    const { nukedeleted, ...rest } = collection;\n    return rest;\n  }\n  return { ...collection, nukedeleted: next };\n}\n\nexport function VersionTrackerUtils_applyCompaction<TAtomicType extends string, TControlledType extends string>(\n  collection: ICollectionVersions,\n  path: string,\n  currentTimestamp: number,\n  versionTypes: IVersionTypes<TAtomicType, TControlledType>\n): ICollectionVersions {\n  const threshold = path && versionTypes.compactionThresholds ? versionTypes.compactionThresholds[path] : undefined;\n\n  if (!threshold || !collection.deleted || Object.keys(collection.deleted).length === 0) {\n    return collection;\n  }\n\n  const result: ICollectionVersions = {\n    items: collection.items,\n    deleted: {},\n  };\n\n  for (const [key, deletionTimestamp] of Object.entries(collection.deleted)) {\n    if (currentTimestamp - deletionTimestamp < threshold) {\n      result.deleted![key] = deletionTimestamp;\n    }\n  }\n\n  return result;\n}\n\nexport function VersionTrackerUtils_getIdFieldName<TAtomicType extends string, TControlledType extends string>(\n  vtype: TControlledType,\n  versionTypes: IVersionTypes<TAtomicType, TControlledType>\n): string | undefined {\n  return versionTypes.typeIdMapping[vtype];\n}\n\nexport function VersionTrackerUtils_createIdVersion(\n  timestamp: number,\n  value: string,\n  currentVersion: IIdVersion | undefined,\n  deviceId?: string\n): IIdVersion {\n  if (!deviceId) {\n    return {\n      vc: currentVersion?.vc || {},\n      t: timestamp,\n      value,\n    };\n  }\n\n  const current = currentVersion ? { vc: currentVersion.vc, t: currentVersion.t } : { vc: {}, t: 0 };\n  const newClock = { ...current.vc };\n  newClock[deviceId] = (newClock[deviceId] || 0) + 1;\n\n  return {\n    vc: newClock,\n    t: timestamp,\n    value,\n  };\n}\n\nexport function VersionTrackerUtils_pickWinningIdVersion(a: IIdVersion, b: IIdVersion): IIdVersion {\n  const comparison = VersionTrackerUtils_compareVersions(a, b);\n  if (comparison === \"a_newer\") {\n    return a;\n  }\n  if (comparison === \"b_newer\") {\n    return b;\n  }\n  // For concurrent or equal, use timestamp as tiebreaker\n  return a.t >= b.t ? a : b;\n}\n\nexport function VersionTrackerUtils_getIdValue<TAtomicType extends string, TControlledType extends string>(\n  obj: unknown,\n  versionTypes: IVersionTypes<TAtomicType, TControlledType>\n): string | undefined {\n  if (!VersionTrackerUtils_isControlledType(obj, versionTypes)) {\n    return undefined;\n  }\n  const idField = versionTypes.typeIdMapping[obj.vtype];\n  if (!idField || !(idField in obj)) {\n    return undefined;\n  }\n  const id = obj[idField];\n  return id != null ? String(id) : undefined;\n}\n\nexport function VersionTrackerUtils_getIdVersionFromVersions<\n  TAtomicType extends string,\n  TControlledType extends string,\n>(\n  vtype: TControlledType,\n  versions: IVersionsObject | undefined,\n  versionTypes: IVersionTypes<TAtomicType, TControlledType>\n): IIdVersion | undefined {\n  if (!versions) {\n    return undefined;\n  }\n  const idField = versionTypes.typeIdMapping[vtype];\n  if (!idField) {\n    return undefined;\n  }\n  const idVersion = versions[idField];\n  return isIdVersion(idVersion) ? idVersion : undefined;\n}\n\nexport const VersionTrackerUtils_NUKEDELETED_THRESHOLD = 3;\n","import { ObjectUtils_keys } from \"../../utils/object\";\nimport { SetUtils_areEqual } from \"../../utils/setUtils\";\nimport {\n  IVersions,\n  IVersionsObject,\n  IVersionValue,\n  ICollectionVersions,\n  isFieldVersion,\n  isCollectionVersions,\n  isVersionsObject,\n} from \"./types\";\nimport { VersionTrackerUtils_compareVersions } from \"./utils\";\n\nexport class VersionTrackerDiffVersions {\n  public run<T>(oldVersions: IVersions<T> | undefined, newVersions: IVersions<T>): IVersions<T> | undefined {\n    const diff: IVersions<T> = {};\n    let hasChanges = false;\n\n    for (const key of ObjectUtils_keys(newVersions)) {\n      const oldVersion = oldVersions?.[key];\n      const newVersion = newVersions[key];\n\n      const fieldDiff = this.diffFieldVersion(oldVersion, newVersion);\n      if (fieldDiff != null) {\n        diff[key] = fieldDiff;\n        hasChanges = true;\n      }\n    }\n\n    return hasChanges ? diff : undefined;\n  }\n\n  private diffFieldVersion(\n    oldVersion: IVersionValue | undefined,\n    newVersion: IVersionValue | undefined\n  ): IVersionValue | undefined {\n    if (isFieldVersion(oldVersion) && isFieldVersion(newVersion)) {\n      const comparison = VersionTrackerUtils_compareVersions(oldVersion, newVersion);\n      return comparison === \"equal\" ? undefined : newVersion;\n    }\n\n    if (isFieldVersion(newVersion) && !isFieldVersion(oldVersion)) {\n      return newVersion;\n    }\n\n    if (isCollectionVersions(newVersion)) {\n      const oldCollection = isCollectionVersions(oldVersion) ? oldVersion : undefined;\n      const diffCollection: ICollectionVersions = { items: {} };\n      let hasChanges = false;\n\n      const oldDeletedKeys = new Set(Object.keys(oldCollection?.deleted || {}));\n      const newDeletedKeys = new Set(Object.keys(newVersion.deleted || {}));\n      if (!SetUtils_areEqual(oldDeletedKeys, newDeletedKeys)) {\n        hasChanges = true;\n      }\n      diffCollection.deleted = { ...(oldCollection?.deleted || {}), ...(newVersion.deleted || {}) };\n      for (const id in newVersion.items) {\n        if (diffCollection.deleted && id in diffCollection.deleted) {\n          continue;\n        }\n        const oldItemVersion = oldCollection?.items?.[id];\n        const newItemVersion = newVersion.items[id];\n\n        const itemDiff = this.diffFieldVersion(oldItemVersion, newItemVersion);\n        if (itemDiff != null && !isCollectionVersions(itemDiff)) {\n          diffCollection.items = diffCollection.items || {};\n          diffCollection.items[id] = itemDiff;\n          hasChanges = true;\n        }\n      }\n\n      return hasChanges ? diffCollection : undefined;\n    }\n\n    if (isVersionsObject(newVersion)) {\n      const oldObj = isVersionsObject(oldVersion) ? oldVersion : undefined;\n      const diffObj: IVersionsObject = {};\n      let hasChanges = false;\n\n      for (const key of Object.keys(newVersion)) {\n        const fieldDiff = this.diffFieldVersion(oldObj?.[key], newVersion[key]);\n        if (fieldDiff != null) {\n          diffObj[key] = fieldDiff;\n          hasChanges = true;\n        }\n      }\n\n      return hasChanges ? diffObj : undefined;\n    }\n\n    return undefined;\n  }\n}\n","import { ObjectUtils_keys } from \"../../utils/object\";\nimport {\n  IVersionTypes,\n  IVersions,\n  IVersionValue,\n  IVersionsObject,\n  ICollectionVersions,\n  isFieldVersion,\n  isCollectionVersions,\n  isVersionsObject,\n} from \"./types\";\nimport { VersionTrackerUtils_isRecord, VersionTrackerUtils_isControlledType, VersionTrackerUtils_getId } from \"./utils\";\n\nexport class VersionTrackerExtractByVersions<TAtomicType extends string, TControlledType extends string> {\n  private readonly versionTypes: IVersionTypes<TAtomicType, TControlledType>;\n\n  constructor(versionTypes: IVersionTypes<TAtomicType, TControlledType>) {\n    this.versionTypes = versionTypes;\n  }\n\n  public run<T extends Record<string, unknown>>(obj: T, versionsDiff: IVersions<T>): Partial<T> {\n    const result: Partial<T> = {};\n\n    for (const key of ObjectUtils_keys(versionsDiff)) {\n      const version = versionsDiff[key];\n      const value = obj[key];\n\n      if (value != null) {\n        const extractedValue = this.extractFieldByVersion(value, version);\n        if (extractedValue != null) {\n          result[key] = extractedValue as T[typeof key];\n        }\n      }\n    }\n\n    return result;\n  }\n\n  private extractFieldByVersion(value: unknown, version: IVersionValue | undefined): unknown {\n    if (isFieldVersion(version)) {\n      return value;\n    }\n\n    if (isCollectionVersions(version)) {\n      return this.extractCollectionByVersion(value, version);\n    }\n\n    if (isVersionsObject(version) && VersionTrackerUtils_isRecord(value)) {\n      if (VersionTrackerUtils_isControlledType(value, this.versionTypes)) {\n        return this.extractControlledTypeByVersion(value, version);\n      }\n\n      return this.run(value, version);\n    }\n\n    return value;\n  }\n\n  private extractControlledTypeByVersion(value: Record<string, unknown>, version: IVersionsObject): unknown {\n    const vtype = value.vtype as TControlledType;\n    const controlledFields = this.versionTypes.controlledFields[vtype] || [];\n    const excludedFields = this.versionTypes.excludedFields?.[vtype] || [];\n    const excludedFieldsSet = new Set(excludedFields);\n\n    const hasControlledFieldChange = controlledFields.some((field) => version[field] != null);\n\n    if (!hasControlledFieldChange) {\n      return undefined;\n    }\n\n    const result: Record<string, unknown> = {};\n    for (const key of Object.keys(value)) {\n      if (!excludedFieldsSet.has(key)) {\n        result[key] = value[key];\n      }\n    }\n    return result;\n  }\n\n  private extractCollectionByVersion(value: unknown, collectionVersion: ICollectionVersions): unknown {\n    const hasItemChanges = Object.keys(collectionVersion.items || {}).length > 0;\n    const hasDeletions = Object.keys(collectionVersion.deleted || {}).length > 0;\n    const hasChanges = hasItemChanges || hasDeletions;\n\n    if (!hasChanges) {\n      return undefined;\n    }\n\n    if (Array.isArray(value)) {\n      const result: unknown[] = [];\n\n      for (const item of value) {\n        const itemId = VersionTrackerUtils_getId(item, this.versionTypes);\n        if (itemId && itemId in (collectionVersion.items || {})) {\n          const itemVersion = collectionVersion.items![itemId];\n          if (typeof itemVersion === \"object\" && VersionTrackerUtils_isRecord(item)) {\n            const extracted = this.extractFieldByVersion(item, itemVersion);\n            if (extracted != null) {\n              result.push(extracted);\n            }\n          } else {\n            result.push(item);\n          }\n        }\n      }\n\n      // Return the array even if empty - deletions are still changes\n      return result;\n    } else if (VersionTrackerUtils_isRecord(value)) {\n      const result: Record<string, unknown> = {};\n\n      for (const key in collectionVersion.items) {\n        if (key in value) {\n          const itemVersion = collectionVersion.items[key];\n          const itemValue = value[key];\n\n          if (typeof itemVersion === \"object\" && VersionTrackerUtils_isRecord(itemValue)) {\n            const extracted = this.extractFieldByVersion(itemValue, itemVersion);\n            if (extracted != null) {\n              result[key] = extracted;\n            }\n          } else {\n            result[key] = itemValue;\n          }\n        }\n      }\n\n      // Return the object even if empty - deletions are still changes\n      return result;\n    }\n\n    return undefined;\n  }\n}\n","import { ObjectUtils_keys } from \"../../utils/object\";\nimport {\n  IVersionTypes,\n  ITypedObject,\n  IFieldVersion,\n  IVersionsObject,\n  IVersionValue,\n  IVersions,\n  isFieldVersion,\n  isCollectionVersions,\n  isIdVersion,\n} from \"./types\";\nimport {\n  VersionTrackerUtils_asVersionsObject,\n  VersionTrackerUtils_getId,\n  VersionTrackerUtils_ensureCollectionVersions,\n  VersionTrackerUtils_isControlledType,\n  VersionTrackerUtils_createVersion,\n  VersionTrackerUtils_isRecord,\n  VersionTrackerUtils_isAtomicType,\n  VersionTrackerUtils_ensureVersionsObject,\n  VersionTrackerUtils_getIdFieldName,\n  VersionTrackerUtils_getIdValue,\n  VersionTrackerUtils_createIdVersion,\n} from \"./utils\";\n\nexport class VersionTrackerFillVersions<TAtomicType extends string, TControlledType extends string> {\n  private readonly versionTypes: IVersionTypes<TAtomicType, TControlledType>;\n  private readonly deviceId?: string;\n\n  constructor(versionTypes: IVersionTypes<TAtomicType, TControlledType>, deviceId?: string) {\n    this.versionTypes = versionTypes;\n    this.deviceId = deviceId;\n  }\n\n  public run<T extends Record<string, unknown>>(fullObj: T, versions: IVersions<T>, timestamp: number): IVersions<T> {\n    const result = { ...versions };\n    const resultObj = VersionTrackerUtils_asVersionsObject(result);\n    const keys = ObjectUtils_keys(fullObj).filter((key) => key !== \"_versions\");\n\n    for (const field of keys) {\n      const value = fullObj[field];\n\n      if (value == null) {\n        continue;\n      }\n\n      const fieldStr = field as string;\n      const currentVersion = resultObj[fieldStr];\n      const filledVersion = this.fillFieldVersion(value, currentVersion, timestamp, fieldStr);\n\n      if (filledVersion !== undefined) {\n        resultObj[fieldStr] = filledVersion;\n      }\n    }\n\n    return result;\n  }\n\n  private fillFieldVersion(\n    value: unknown,\n    currentVersion: IVersionValue | undefined,\n    timestamp: number,\n    path: string\n  ): IVersionValue | undefined {\n    if (isFieldVersion(currentVersion)) {\n      return currentVersion;\n    }\n\n    if (Array.isArray(value)) {\n      const hasTrackableItems = value.some((item) => VersionTrackerUtils_getId(item, this.versionTypes) !== undefined);\n\n      if (hasTrackableItems) {\n        const collectionVersions = VersionTrackerUtils_ensureCollectionVersions(currentVersion);\n        const items = { ...(collectionVersions.items || {}) };\n\n        for (const item of value) {\n          const itemId = VersionTrackerUtils_getId(item, this.versionTypes);\n          if (itemId && !(itemId in items)) {\n            const itemPath = `${path}.items.${itemId}`;\n            const itemVersion = this.getInitialItemVersion(item, timestamp, itemPath);\n            if (itemVersion !== undefined) {\n              items[itemId] = itemVersion;\n            }\n          } else if (itemId && items[itemId] && !isFieldVersion(items[itemId])) {\n            const itemPath = `${path}.items.${itemId}`;\n            if (VersionTrackerUtils_isControlledType(item, this.versionTypes)) {\n              const filledItemVersion = this.fillControlledObjectVersion(item, items[itemId], timestamp, itemPath);\n              if (filledItemVersion !== undefined) {\n                items[itemId] = filledItemVersion;\n              }\n            } else {\n              const filledItemVersion = this.fillFieldVersion(item, items[itemId], timestamp, itemPath);\n              if (filledItemVersion !== undefined && !isCollectionVersions(filledItemVersion)) {\n                items[itemId] = filledItemVersion;\n              }\n            }\n          }\n        }\n\n        return { ...collectionVersions, items };\n      } else {\n        return currentVersion !== undefined\n          ? currentVersion\n          : VersionTrackerUtils_createVersion(timestamp, undefined, this.deviceId);\n      }\n    } else if (VersionTrackerUtils_isRecord(value)) {\n      if (this.versionTypes.dictionaryFields.includes(path)) {\n        const collectionVersions = VersionTrackerUtils_ensureCollectionVersions(currentVersion);\n        const items = { ...(collectionVersions.items || {}) };\n        const dictValue = value;\n\n        for (const [key, item] of Object.entries(dictValue)) {\n          if (!(key in items)) {\n            const itemPath = `${path}.items.${key}`;\n            const itemVersion = this.getInitialItemVersion(item, timestamp, itemPath);\n            if (itemVersion !== undefined) {\n              items[key] = itemVersion;\n            }\n          } else if (items[key] && !isFieldVersion(items[key])) {\n            const itemPath = `${path}.items.${key}`;\n            if (VersionTrackerUtils_isControlledType(item, this.versionTypes)) {\n              const filledItemVersion = this.fillControlledObjectVersion(item, items[key], timestamp, itemPath);\n              if (filledItemVersion !== undefined) {\n                items[key] = filledItemVersion;\n              }\n            } else {\n              const filledItemVersion = this.fillFieldVersion(item, items[key], timestamp, itemPath);\n              if (filledItemVersion !== undefined && !isCollectionVersions(filledItemVersion)) {\n                items[key] = filledItemVersion;\n              }\n            }\n          }\n        }\n\n        return { ...collectionVersions, items };\n      } else if (VersionTrackerUtils_isControlledType(value, this.versionTypes)) {\n        return this.fillControlledObjectVersion(value, currentVersion, timestamp, path);\n      } else if (VersionTrackerUtils_isAtomicType(value, this.versionTypes)) {\n        return currentVersion !== undefined ? currentVersion : timestamp;\n      } else {\n        const nestedVersions = this.fillNestedVersions(\n          value,\n          VersionTrackerUtils_ensureVersionsObject(currentVersion),\n          timestamp,\n          path\n        );\n        return nestedVersions;\n      }\n    } else {\n      return currentVersion !== undefined\n        ? currentVersion\n        : VersionTrackerUtils_createVersion(timestamp, undefined, this.deviceId);\n    }\n  }\n\n  private getInitialItemVersion(\n    item: unknown,\n    timestamp: number,\n    path: string = \"\"\n  ): IVersionsObject | IFieldVersion | undefined {\n    if (VersionTrackerUtils_isAtomicType(item, this.versionTypes)) {\n      return VersionTrackerUtils_createVersion(timestamp, undefined, this.deviceId);\n    } else if (VersionTrackerUtils_isControlledType(item, this.versionTypes)) {\n      return this.fillControlledObjectVersion(item, undefined, timestamp, path);\n    } else if (VersionTrackerUtils_isRecord(item)) {\n      return this.fillNestedVersions(item, {}, timestamp, path);\n    } else {\n      return VersionTrackerUtils_createVersion(timestamp, undefined, this.deviceId);\n    }\n  }\n\n  private fillControlledObjectVersion(\n    value: ITypedObject<TControlledType>,\n    currentVersion: IVersionValue | undefined,\n    timestamp: number,\n    path: string\n  ): IVersionsObject | undefined {\n    const controlledFields = this.versionTypes.controlledFields[value.vtype] || [];\n    const fieldVersions = VersionTrackerUtils_ensureVersionsObject(currentVersion);\n\n    const result: IVersionsObject = { ...fieldVersions };\n\n    // Fill ID version if not present\n    const idField = VersionTrackerUtils_getIdFieldName(value.vtype, this.versionTypes);\n    if (idField && !isIdVersion(result[idField])) {\n      const idValue = VersionTrackerUtils_getIdValue(value, this.versionTypes);\n      if (idValue != null) {\n        result[idField] = VersionTrackerUtils_createIdVersion(timestamp, idValue, undefined, this.deviceId);\n      }\n    }\n\n    // If we already have controlled field versions (besides ID), return existing\n    const existingFields = Object.keys(result).filter((k) => k !== idField);\n    if (existingFields.length > 0) {\n      return result;\n    }\n\n    for (const controlledField of controlledFields) {\n      const fieldValue = value[controlledField];\n      if (fieldValue != null && !(controlledField in result)) {\n        const fieldPath = path ? `${path}.${controlledField}` : controlledField;\n        const filledVersion = this.fillControlledFieldVersion(fieldValue, timestamp, fieldPath);\n        if (filledVersion != null) {\n          result[controlledField] = filledVersion;\n        }\n      }\n    }\n\n    return Object.keys(result).length > 0 ? result : undefined;\n  }\n\n  private fillControlledFieldVersion(value: unknown, timestamp: number, path: string): IVersionValue | undefined {\n    if (Array.isArray(value)) {\n      const hasTrackableItems = value.some((item) => VersionTrackerUtils_getId(item, this.versionTypes) !== undefined);\n      if (hasTrackableItems) {\n        const items: Record<string, IVersionsObject | IFieldVersion> = {};\n        for (const item of value) {\n          const itemId = VersionTrackerUtils_getId(item, this.versionTypes);\n          if (itemId) {\n            const itemPath = `${path}.items.${itemId}`;\n            const itemVersion = this.getInitialItemVersion(item, timestamp, itemPath);\n            if (itemVersion != null) {\n              items[itemId] = itemVersion;\n            }\n          }\n        }\n        return { items };\n      }\n    }\n\n    if (VersionTrackerUtils_isRecord(value)) {\n      if (this.versionTypes.dictionaryFields.includes(path)) {\n        const items: Record<string, IVersionsObject | IFieldVersion> = {};\n        for (const [key, item] of Object.entries(value)) {\n          const itemPath = `${path}.items.${key}`;\n          const itemVersion = this.getInitialItemVersion(item, timestamp, itemPath);\n          if (itemVersion != null) {\n            items[key] = itemVersion;\n          }\n        }\n        return { items };\n      }\n      if (VersionTrackerUtils_isControlledType(value, this.versionTypes)) {\n        return this.fillControlledObjectVersion(value, undefined, timestamp, path);\n      }\n      if (VersionTrackerUtils_isAtomicType(value, this.versionTypes)) {\n        return VersionTrackerUtils_createVersion(timestamp, undefined, this.deviceId);\n      }\n    }\n\n    return VersionTrackerUtils_createVersion(timestamp, undefined, this.deviceId);\n  }\n\n  private fillNestedVersions(\n    obj: Record<string, unknown>,\n    currentVersions: IVersionsObject,\n    timestamp: number,\n    parentPath: string\n  ): IVersionsObject | undefined {\n    const versions: IVersionsObject = { ...currentVersions };\n    const keys = ObjectUtils_keys(obj);\n    let hasAnyVersion = false;\n\n    for (const key of keys) {\n      const value = obj[key];\n      const currentPath = parentPath ? `${parentPath}.${key}` : key;\n\n      if (value != null) {\n        const filledVersion = this.fillFieldVersion(value, versions[key], timestamp, currentPath);\n        if (filledVersion !== undefined) {\n          versions[key] = filledVersion;\n          hasAnyVersion = true;\n        }\n      }\n    }\n\n    return hasAnyVersion ? versions : undefined;\n  }\n}\n","import { CollectionUtils_uniqByExpr } from \"../../utils/collection\";\nimport {\n  IVersionTypes,\n  IFieldVersion,\n  IVersionsObject,\n  IVersionValue,\n  IVersions,\n  ICollectionVersions,\n  isFieldVersion,\n  isCollectionVersions,\n  isVersionsObject,\n} from \"./types\";\nimport {\n  VersionTrackerUtils_compareVersions,\n  VersionTrackerUtils_normalizeVersion,\n  VersionTrackerUtils_isRecord,\n  VersionTrackerUtils_isControlledType,\n  VersionTrackerUtils_getIdVersionFromVersions,\n  VersionTrackerUtils_pickWinningIdVersion,\n  VersionTrackerUtils_ensureVersionsObject,\n  VersionTrackerUtils_getId,\n} from \"./utils\";\n\nexport class VersionTrackerMergeByVersions<TAtomicType extends string, TControlledType extends string> {\n  private readonly versionTypes: IVersionTypes<TAtomicType, TControlledType>;\n\n  constructor(versionTypes: IVersionTypes<TAtomicType, TControlledType>) {\n    this.versionTypes = versionTypes;\n  }\n\n  public run<T extends Record<string, unknown>>(\n    fullObj: T,\n    fullVersions: IVersions<T>,\n    versionDiff: IVersions<T>,\n    extractedObj: Partial<T>\n  ): T {\n    let result: Record<string, unknown> | null = null;\n    const writeKey = (key: string, value: unknown): void => {\n      if (fullObj[key] === value) {\n        return;\n      }\n      if (result == null) {\n        result = { ...fullObj };\n      }\n      result[key] = value;\n    };\n    const deleteKey = (key: string): void => {\n      if (!(key in fullObj)) {\n        return;\n      }\n      if (result == null) {\n        result = { ...fullObj };\n      }\n      delete result[key];\n    };\n\n    for (const key of Object.keys(versionDiff)) {\n      const diffVersion = versionDiff[key];\n      const fullVersion = fullVersions[key];\n      const extractedValue = extractedObj[key as keyof T];\n\n      if (extractedValue !== undefined) {\n        const mergedValue = this.mergeFieldByVersion(fullObj[key], fullVersion, diffVersion, extractedValue, key);\n        if (mergedValue !== undefined) {\n          writeKey(key, mergedValue);\n        }\n      } else if (isFieldVersion(diffVersion)) {\n        if (fullVersion === undefined || !isFieldVersion(fullVersion)) {\n          deleteKey(key);\n        } else {\n          const comparison = VersionTrackerUtils_compareVersions(diffVersion, fullVersion);\n          if (comparison === \"a_newer\") {\n            deleteKey(key);\n          } else if (comparison === \"concurrent\") {\n            const diffNorm = VersionTrackerUtils_normalizeVersion(diffVersion);\n            const fullNorm = VersionTrackerUtils_normalizeVersion(fullVersion);\n            if (diffNorm.t > fullNorm.t) {\n              deleteKey(key);\n            }\n          }\n        }\n      }\n    }\n\n    return (result ?? fullObj) as T;\n  }\n\n  private mergeFieldByVersion(\n    fullValue: unknown,\n    fullVersion: IVersionValue | undefined,\n    diffVersion: IVersionValue | undefined,\n    extractedValue: unknown,\n    path: string\n  ): unknown {\n    if (isFieldVersion(diffVersion) && isFieldVersion(fullVersion)) {\n      const comparison = VersionTrackerUtils_compareVersions(diffVersion, fullVersion);\n      if (comparison === \"a_newer\") {\n        return extractedValue;\n      }\n      if (comparison === \"concurrent\") {\n        const diffNorm = VersionTrackerUtils_normalizeVersion(diffVersion);\n        const fullNorm = VersionTrackerUtils_normalizeVersion(fullVersion);\n        if (diffNorm.t > fullNorm.t) {\n          return extractedValue;\n        }\n      }\n      return fullValue;\n    }\n\n    if (diffVersion !== undefined && fullVersion === undefined) {\n      if (isCollectionVersions(diffVersion)) {\n        return this.mergeCollectionByVersion(fullValue, undefined, diffVersion, extractedValue);\n      }\n\n      if (\n        VersionTrackerUtils_isRecord(fullValue) &&\n        VersionTrackerUtils_isRecord(extractedValue) &&\n        isVersionsObject(diffVersion)\n      ) {\n        return this.run(fullValue, {}, diffVersion, extractedValue);\n      }\n      return extractedValue ?? fullValue;\n    }\n\n    if (isCollectionVersions(diffVersion)) {\n      const fullCollection = isCollectionVersions(fullVersion) ? fullVersion : undefined;\n      return this.mergeCollectionByVersion(fullValue, fullCollection, diffVersion, extractedValue);\n    }\n\n    if (isVersionsObject(diffVersion) && VersionTrackerUtils_isRecord(extractedValue)) {\n      if (VersionTrackerUtils_isControlledType(extractedValue, this.versionTypes)) {\n        const fullVersionObj = isVersionsObject(fullVersion) ? fullVersion : undefined;\n        const diffVersionObj = diffVersion;\n\n        // Get ID versions from both full and diff to determine the winner\n        const fullIdVersion = VersionTrackerUtils_getIdVersionFromVersions(\n          extractedValue.vtype,\n          fullVersionObj,\n          this.versionTypes\n        );\n        const diffIdVersion = VersionTrackerUtils_getIdVersionFromVersions(\n          extractedValue.vtype,\n          diffVersionObj,\n          this.versionTypes\n        );\n\n        // If both have ID versions with different values, determine which one wins\n        if (fullIdVersion && diffIdVersion && fullIdVersion.value !== diffIdVersion.value) {\n          const winner = VersionTrackerUtils_pickWinningIdVersion(fullIdVersion, diffIdVersion);\n          if (winner === fullIdVersion) {\n            // Full wins - keep full value, ignore extracted\n            return fullValue;\n          }\n          // Diff wins - use extracted value entirely (it's a different object)\n          return extractedValue;\n        }\n\n        const controlledFields = this.versionTypes.controlledFields[extractedValue.vtype] || [];\n        const controlledFieldSet = new Set(controlledFields);\n\n        const fullIsRecord = VersionTrackerUtils_isRecord(fullValue);\n        const fullRecord = fullIsRecord ? (fullValue as Record<string, unknown>) : undefined;\n        let mergedItem: Record<string, unknown> | null = fullIsRecord ? null : {};\n        const writeField = (field: string, value: unknown): void => {\n          if (fullRecord && fullRecord[field] === value) {\n            return;\n          }\n          if (mergedItem == null) {\n            mergedItem = { ...fullRecord };\n          }\n          mergedItem[field] = value;\n        };\n\n        for (const field in extractedValue) {\n          if (!controlledFieldSet.has(field) && (!fullRecord || !(field in fullRecord))) {\n            writeField(field, extractedValue[field]);\n          }\n        }\n\n        for (const field of controlledFields) {\n          if (field in diffVersion) {\n            const diffFieldVersion = diffVersion[field];\n            const fullFieldVersion = fullVersionObj?.[field];\n            const fullFieldValue = fullRecord ? fullRecord[field] : undefined;\n            const extractedFieldValue = extractedValue[field];\n\n            if (isFieldVersion(diffFieldVersion)) {\n              if (fullFieldVersion === undefined || !isFieldVersion(fullFieldVersion)) {\n                writeField(field, extractedFieldValue);\n              } else {\n                const comparison = VersionTrackerUtils_compareVersions(diffFieldVersion, fullFieldVersion);\n                if (comparison === \"a_newer\") {\n                  writeField(field, extractedFieldValue);\n                } else if (comparison === \"concurrent\") {\n                  const diffNorm = VersionTrackerUtils_normalizeVersion(diffFieldVersion);\n                  const fullNorm = VersionTrackerUtils_normalizeVersion(fullFieldVersion);\n                  if (diffNorm.t > fullNorm.t) {\n                    writeField(field, extractedFieldValue);\n                  }\n                }\n              }\n            } else if (isCollectionVersions(diffFieldVersion)) {\n              const fullCollection = isCollectionVersions(fullFieldVersion) ? fullFieldVersion : undefined;\n              const merged = this.mergeCollectionByVersion(\n                fullFieldValue,\n                fullCollection,\n                diffFieldVersion,\n                extractedFieldValue\n              );\n              writeField(field, merged);\n            } else if (isVersionsObject(diffFieldVersion) && VersionTrackerUtils_isRecord(extractedFieldValue)) {\n              const merged = this.mergeFieldByVersion(\n                fullFieldValue,\n                fullFieldVersion,\n                diffFieldVersion,\n                extractedFieldValue,\n                `${path}.${field}`\n              );\n              writeField(field, merged);\n            }\n          }\n        }\n\n        if (mergedItem == null) {\n          return fullValue;\n        }\n\n        const validator = this.versionTypes.typeValidators?.[extractedValue.vtype];\n        if (validator && !validator.is(mergedItem)) {\n          console.log(`[MERGE_DEBUG] Validator REJECTED merged ${extractedValue.vtype}, reverting to fullValue`);\n          return fullValue;\n        }\n\n        return mergedItem;\n      }\n\n      if (VersionTrackerUtils_isRecord(fullValue)) {\n        const fullVersionObj = VersionTrackerUtils_ensureVersionsObject(fullVersion);\n        return this.run(fullValue, fullVersionObj, diffVersion, extractedValue);\n      } else {\n        return extractedValue ?? fullValue;\n      }\n    }\n\n    return fullValue;\n  }\n\n  private mergeCollectionByVersion(\n    fullValue: unknown,\n    fullVersion: ICollectionVersions | undefined,\n    diffVersion: ICollectionVersions,\n    extractedValue: unknown\n  ): unknown {\n    const isNukeDeleted = diffVersion.nukedeleted != null || fullVersion?.nukedeleted != null;\n    const deletedKeys = isNukeDeleted\n      ? new Set()\n      : new Set<string>([\n          ...(fullVersion?.deleted ? Object.keys(fullVersion.deleted) : []),\n          ...(diffVersion.deleted ? Object.keys(diffVersion.deleted) : []),\n        ]);\n    if (Array.isArray(fullValue) && Array.isArray(extractedValue)) {\n      const dedupedFull = CollectionUtils_uniqByExpr(fullValue, (item) =>\n        VersionTrackerUtils_getId(item, this.versionTypes)\n      );\n      const dedupedExtracted = CollectionUtils_uniqByExpr(extractedValue, (item) =>\n        VersionTrackerUtils_getId(item, this.versionTypes)\n      );\n      if (dedupedExtracted.length === 0 && deletedKeys.size === 0 && dedupedFull.length === fullValue.length) {\n        return fullValue;\n      }\n      const dedupedFullById = new Map<string, unknown>();\n      for (const item of dedupedFull) {\n        const itemId = VersionTrackerUtils_getId(item, this.versionTypes);\n        if (itemId) {\n          dedupedFullById.set(itemId, item);\n        }\n      }\n      const result: unknown[] = [];\n      const processedIds = new Set<string>();\n      let allSame = true;\n      const pushItem = (item: unknown): void => {\n        const idx = result.length;\n        result.push(item);\n        if (allSame && (idx >= fullValue.length || fullValue[idx] !== item)) {\n          allSame = false;\n        }\n      };\n\n      for (const extractedItem of dedupedExtracted) {\n        const itemId = VersionTrackerUtils_getId(extractedItem, this.versionTypes);\n        if (itemId && !deletedKeys.has(itemId)) {\n          processedIds.add(itemId);\n          const diffItemVersion = diffVersion?.items?.[itemId];\n          const fullItemVersion = fullVersion?.items?.[itemId];\n          const fullItem = dedupedFullById.get(itemId);\n\n          if (\n            isVersionsObject(diffItemVersion) &&\n            isVersionsObject(fullItemVersion) &&\n            fullItem &&\n            typeof fullItem === \"object\" &&\n            typeof extractedItem === \"object\"\n          ) {\n            const mergedItem = this.mergeFieldByVersion(\n              fullItem,\n              fullItemVersion,\n              diffItemVersion,\n              extractedItem,\n              `item:${itemId}`\n            );\n            pushItem(mergedItem);\n          } else if (this.shouldTakeExtractedItem(diffItemVersion, fullItemVersion)) {\n            pushItem(extractedItem);\n          } else {\n            pushItem(fullItem ?? extractedItem);\n          }\n        }\n      }\n\n      for (const fullItem of dedupedFull) {\n        const itemId = VersionTrackerUtils_getId(fullItem, this.versionTypes);\n        if (itemId && !processedIds.has(itemId) && !deletedKeys.has(itemId)) {\n          pushItem(fullItem);\n        }\n      }\n\n      if (allSame && result.length === fullValue.length) {\n        return fullValue;\n      }\n      return result;\n    } else if (VersionTrackerUtils_isRecord(fullValue) && VersionTrackerUtils_isRecord(extractedValue)) {\n      if (Object.keys(extractedValue).length === 0 && deletedKeys.size === 0) {\n        return fullValue;\n      }\n      const fullRecord = fullValue;\n      let result: Record<string, unknown> | null = null;\n      const ensureResult = (): Record<string, unknown> => {\n        if (result == null) {\n          result = { ...fullRecord };\n          for (const dk of deletedKeys) {\n            delete result[dk as string];\n          }\n        }\n        return result;\n      };\n      for (const dk of deletedKeys) {\n        if ((dk as string) in fullRecord) {\n          ensureResult();\n          break;\n        }\n      }\n      const writeKey = (key: string, value: unknown): void => {\n        const current = result ?? fullRecord;\n        if (key in current && current[key] === value) {\n          return;\n        }\n        ensureResult()[key] = value;\n      };\n\n      for (const [key, value] of Object.entries(extractedValue)) {\n        const diffItemVersion = diffVersion?.items?.[key];\n        const fullItemVersion = fullVersion?.items?.[key];\n        const fullItem = fullRecord[key];\n\n        if (\n          isVersionsObject(diffItemVersion) &&\n          isVersionsObject(fullItemVersion) &&\n          VersionTrackerUtils_isRecord(fullItem) &&\n          VersionTrackerUtils_isRecord(value)\n        ) {\n          const mergedItem = this.mergeFieldByVersion(fullItem, fullItemVersion, diffItemVersion, value, `item:${key}`);\n          writeKey(key, mergedItem);\n        } else if (!deletedKeys.has(key) && this.shouldTakeExtractedItem(diffItemVersion, fullItemVersion)) {\n          writeKey(key, value);\n        }\n      }\n\n      return result ?? fullRecord;\n    }\n\n    return extractedValue;\n  }\n\n  private shouldTakeExtractedItem(\n    diffVersion: IVersionsObject | IFieldVersion | undefined,\n    fullVersion: IVersionsObject | IFieldVersion | undefined\n  ): boolean {\n    if (isFieldVersion(diffVersion) && isFieldVersion(fullVersion)) {\n      const comparison = VersionTrackerUtils_compareVersions(diffVersion, fullVersion);\n      if (comparison === \"a_newer\") {\n        return true;\n      }\n      if (comparison === \"concurrent\") {\n        const diffNorm = VersionTrackerUtils_normalizeVersion(diffVersion);\n        const fullNorm = VersionTrackerUtils_normalizeVersion(fullVersion);\n        return diffNorm.t > fullNorm.t;\n      }\n      return false;\n    }\n\n    if (diffVersion !== undefined && fullVersion === undefined) {\n      return true;\n    }\n\n    if (isVersionsObject(diffVersion) && isVersionsObject(fullVersion)) {\n      return true;\n    }\n\n    if (diffVersion === undefined && fullVersion === undefined) {\n      return true;\n    }\n\n    return false;\n  }\n}\n","import { ObjectUtils_keys } from \"../../utils/object\";\nimport {\n  IVersionTypes,\n  IVersionsObject,\n  IVersionValue,\n  IVersions,\n  ICollectionVersions,\n  isFieldVersion,\n  isCollectionVersions,\n  isVersionsObject,\n  isIdVersion,\n  IIdVersion,\n} from \"./types\";\nimport {\n  VersionTrackerUtils_asVersionsObject,\n  VersionTrackerUtils_mergeFieldVersions,\n  VersionTrackerUtils_ensureVersionsObject,\n  VersionTrackerUtils_pickWinningIdVersion,\n  VersionTrackerUtils_NUKEDELETED_THRESHOLD,\n} from \"./utils\";\n\nexport class VersionTrackerMergeVersions<TAtomicType extends string, TControlledType extends string> {\n  private readonly versionTypes: IVersionTypes<TAtomicType, TControlledType>;\n\n  constructor(versionTypes: IVersionTypes<TAtomicType, TControlledType>) {\n    this.versionTypes = versionTypes;\n  }\n\n  public run<T>(fullVersions: IVersions<T>, versionDiff: IVersions<T>): IVersions<T> {\n    const result = { ...fullVersions };\n    const resultObj = VersionTrackerUtils_asVersionsObject(result);\n    const diffObj = VersionTrackerUtils_asVersionsObject(versionDiff);\n\n    for (const key of Object.keys(diffObj)) {\n      const fullVersion = resultObj[key];\n      const diffVersion = diffObj[key];\n\n      const mergedVersion = this.mergeVersionField(fullVersion, diffVersion, key);\n      if (mergedVersion !== undefined) {\n        resultObj[key] = mergedVersion;\n      }\n    }\n\n    return result;\n  }\n\n  public mergeVersionField(\n    fullVersion: IVersionValue | undefined,\n    diffVersion: IVersionValue | undefined,\n    path: string = \"\"\n  ): IVersionValue | undefined {\n    if (diffVersion === undefined) {\n      return fullVersion;\n    }\n\n    if (isFieldVersion(fullVersion) && isFieldVersion(diffVersion)) {\n      const newVersion = VersionTrackerUtils_mergeFieldVersions(fullVersion, diffVersion);\n      return newVersion;\n    }\n\n    if (isFieldVersion(diffVersion)) {\n      // A plain field version for an array only ever describes its itemless era (updateVersions\n      // emits numbers only when neither side has trackable items), so per-item tracking always\n      // supersedes it. Returning the number here would erase the items' versions while\n      // mergeByVersions keeps their data, leaving them permanently invisible to sync diffs.\n      if (isCollectionVersions(fullVersion)) {\n        return fullVersion;\n      }\n      return diffVersion;\n    }\n\n    if (isCollectionVersions(diffVersion)) {\n      const fullCollection = isCollectionVersions(fullVersion) ? fullVersion : undefined;\n      return this.mergeCollectionVersions(fullCollection, diffVersion, path);\n    }\n\n    if (isVersionsObject(diffVersion)) {\n      const fullObj = VersionTrackerUtils_ensureVersionsObject(fullVersion);\n\n      // Check if both have ID versions (controlled types with different identities)\n      const fullIdVersion = this.findIdVersion(fullObj);\n      const diffIdVersion = this.findIdVersion(diffVersion);\n\n      if (fullIdVersion && diffIdVersion && fullIdVersion.value !== diffIdVersion.value) {\n        // Different controlled objects - pick winner by timestamp\n        const winner = VersionTrackerUtils_pickWinningIdVersion(fullIdVersion, diffIdVersion);\n        if (winner === diffIdVersion) {\n          // diff wins - use diff versions entirely\n          return diffVersion;\n        } else {\n          // full wins - keep full versions\n          return fullObj;\n        }\n      }\n\n      const result: IVersionsObject = { ...fullObj };\n\n      for (const key of Object.keys(diffVersion)) {\n        const mergedField = this.mergeVersionField(fullObj[key], diffVersion[key], path ? `${path}.${key}` : key);\n        if (mergedField !== undefined) {\n          result[key] = mergedField;\n        }\n      }\n\n      return result;\n    }\n\n    return diffVersion;\n  }\n\n  private findIdVersion(versions: IVersionsObject): IIdVersion | undefined {\n    for (const key of Object.keys(versions)) {\n      const value = versions[key];\n      if (isIdVersion(value)) {\n        return value;\n      }\n    }\n    return undefined;\n  }\n\n  private mergeCollectionVersions(\n    fullCollection: ICollectionVersions | undefined,\n    diffCollection: ICollectionVersions,\n    path?: string\n  ): ICollectionVersions {\n    const nukedeleted =\n      diffCollection.nukedeleted != null || fullCollection?.nukedeleted != null\n        ? Math.max(diffCollection.nukedeleted || 0, fullCollection?.nukedeleted || 0)\n        : undefined;\n    const result: ICollectionVersions = {\n      items: { ...(fullCollection?.items || {}) },\n      deleted: nukedeleted != null ? {} : { ...(fullCollection?.deleted || {}), ...(diffCollection?.deleted || {}) },\n      ...(nukedeleted != null && nukedeleted < VersionTrackerUtils_NUKEDELETED_THRESHOLD\n        ? { nukedeleted: nukedeleted + 1 }\n        : {}),\n    };\n\n    for (const id of Object.keys(diffCollection.items ?? {})) {\n      const fullItemVersion = result.items?.[id];\n      const diffItemVersion = diffCollection.items?.[id];\n\n      const mergedItemVersion = this.mergeVersionField(fullItemVersion, diffItemVersion);\n      if (mergedItemVersion !== undefined && !isCollectionVersions(mergedItemVersion)) {\n        result.items = result.items || {};\n        result.items[id] = mergedItemVersion;\n      }\n    }\n\n    const threshold =\n      path && this.versionTypes.compactionThresholds ? this.versionTypes.compactionThresholds[path] : undefined;\n    const currentTimestamp = Date.now();\n\n    for (const key of ObjectUtils_keys(result.deleted || {})) {\n      if (result.items) {\n        delete result.items[key];\n      }\n      const fullDeletedTime = fullCollection?.deleted?.[key];\n      const diffDeletedTime = diffCollection?.deleted?.[key];\n      const max = (diffDeletedTime ?? 0) > (fullDeletedTime ?? 0) ? diffDeletedTime : fullDeletedTime;\n\n      if (max != null) {\n        if (!threshold || currentTimestamp - max < threshold) {\n          result.deleted![key] = max;\n        } else {\n          delete result.deleted![key];\n        }\n      }\n    }\n\n    return result;\n  }\n}\n","import { ObjectUtils_clone, ObjectUtils_keys } from \"../../utils/object\";\nimport { lg } from \"../../utils/posthog\";\nimport {\n  IVersionTypes,\n  ITypedObject,\n  IFieldVersion,\n  IVersionsObject,\n  IVersionValue,\n  IVersions,\n  ICollectionVersions,\n  isFieldVersion,\n  isCollectionVersions,\n  isIdVersion,\n} from \"./types\";\nimport {\n  VersionTrackerUtils_asVersionsObject,\n  VersionTrackerUtils_areEqual,\n  VersionTrackerUtils_getId,\n  VersionTrackerUtils_createVersion,\n  VersionTrackerUtils_isControlledType,\n  VersionTrackerUtils_isAtomicType,\n  VersionTrackerUtils_isRecord,\n  VersionTrackerUtils_ensureVersionsObject,\n  VersionTrackerUtils_incrementNukedeleted,\n  VersionTrackerUtils_ensureCollectionVersions,\n  VersionTrackerUtils_applyCompaction,\n  VersionTrackerUtils_getIdFieldName,\n  VersionTrackerUtils_getIdValue,\n  VersionTrackerUtils_createIdVersion,\n} from \"./utils\";\nimport { VersionTrackerMergeVersions } from \"./versionTrackerMergeVersions\";\n\nexport class VersionTrackerUpdateVersions<TAtomicType extends string, TControlledType extends string> {\n  private readonly versionTypes: IVersionTypes<TAtomicType, TControlledType>;\n  private readonly deviceId?: string;\n  private readonly mergeVersions: VersionTrackerMergeVersions<TAtomicType, TControlledType>;\n\n  constructor(versionTypes: IVersionTypes<TAtomicType, TControlledType>, deviceId?: string) {\n    this.versionTypes = versionTypes;\n    this.deviceId = deviceId;\n    this.mergeVersions = new VersionTrackerMergeVersions(versionTypes);\n  }\n\n  public run<T extends Record<string, unknown>>(\n    oldObj: T,\n    newObj: T,\n    currentVersions: IVersions<T>,\n    newVersions: IVersions<T>,\n    timestamp: number\n  ): IVersions<T> {\n    const versions = ObjectUtils_clone(currentVersions);\n    const versionsObj = VersionTrackerUtils_asVersionsObject(versions);\n    const newVersionsObj = VersionTrackerUtils_asVersionsObject(newVersions);\n\n    const keys = ObjectUtils_keys(newObj).filter((key) => key !== \"_versions\");\n\n    for (const field of keys) {\n      const oldValue = oldObj[field];\n      const newValue = newObj[field];\n\n      if (VersionTrackerUtils_areEqual(oldValue, newValue)) {\n        continue;\n      }\n\n      const fieldStr = field as string;\n      const updatedVersion = this.updateFieldVersion(\n        oldObj,\n        newObj,\n        currentVersions,\n        newVersions,\n        oldValue,\n        newValue,\n        versionsObj[fieldStr],\n        newVersionsObj[fieldStr],\n        timestamp,\n        fieldStr\n      );\n      if (updatedVersion !== undefined) {\n        versionsObj[fieldStr] = updatedVersion;\n      }\n    }\n\n    return versions;\n  }\n\n  private updateFieldVersion(\n    oldFull: unknown,\n    newFull: unknown,\n    oldFullVersion: unknown,\n    newFullVersion: unknown,\n    oldValue: unknown,\n    newValue: unknown,\n    currentVersion: IVersionValue | undefined,\n    newVersion: IVersionValue | undefined,\n    timestamp: number,\n    path: string\n  ): IVersionValue | undefined {\n    if (Array.isArray(newValue)) {\n      const hasTrackableItems = newValue.some(\n        (item) => VersionTrackerUtils_getId(item, this.versionTypes) !== undefined\n      );\n      const oldHasTrackableItems =\n        Array.isArray(oldValue) &&\n        oldValue.some((item: unknown) => VersionTrackerUtils_getId(item, this.versionTypes) !== undefined);\n\n      if (hasTrackableItems || oldHasTrackableItems) {\n        return this.updateArrayCollectionVersion(oldValue, newValue, currentVersion, newVersion, timestamp, path);\n      } else {\n        const mergedVersion = this.mergeVersions.mergeVersionField(currentVersion, newVersion, path);\n        const fieldVersion = isFieldVersion(mergedVersion) ? mergedVersion : undefined;\n        return VersionTrackerUtils_createVersion(timestamp, fieldVersion, this.deviceId);\n      }\n    } else if (typeof newValue === \"object\" && newValue !== null) {\n      if (this.versionTypes.dictionaryFields.includes(path)) {\n        return this.updateDictionaryCollectionVersion(\n          oldValue,\n          newValue as Record<string, unknown>,\n          currentVersion,\n          newVersion,\n          timestamp,\n          path\n        );\n      } else if (VersionTrackerUtils_isControlledType(newValue, this.versionTypes)) {\n        const mergedVersion = this.mergeVersions.mergeVersionField(currentVersion, newVersion, path);\n        return this.updateControlledObjectVersion(oldValue, newValue, mergedVersion, timestamp, path);\n      } else if (VersionTrackerUtils_isAtomicType(newValue, this.versionTypes)) {\n        const mergedVersion = this.mergeVersions.mergeVersionField(currentVersion, newVersion, path);\n        const fieldVersion = isFieldVersion(mergedVersion) ? mergedVersion : undefined;\n        return VersionTrackerUtils_createVersion(timestamp, fieldVersion, this.deviceId);\n      } else {\n        const oldObjValue = VersionTrackerUtils_isRecord(oldValue) ? oldValue : undefined;\n        const nestedVersions = this.updateNestedVersions(\n          oldFull,\n          newFull,\n          oldFullVersion,\n          newFullVersion,\n          oldObjValue,\n          newValue as Record<string, unknown>,\n          VersionTrackerUtils_ensureVersionsObject(currentVersion),\n          VersionTrackerUtils_ensureVersionsObject(newVersion),\n          timestamp,\n          path\n        );\n        return nestedVersions;\n      }\n    } else {\n      const mergedVersion = this.mergeVersions.mergeVersionField(currentVersion, newVersion, path);\n      const fieldVersion = isFieldVersion(mergedVersion) ? mergedVersion : undefined;\n      return VersionTrackerUtils_createVersion(timestamp, fieldVersion, this.deviceId);\n    }\n  }\n\n  private updateArrayCollectionVersion(\n    oldValue: unknown,\n    newValue: unknown[],\n    currentVersion: IVersionValue | undefined,\n    newVersion: IVersionValue | undefined,\n    timestamp: number,\n    path: string\n  ): ICollectionVersions | undefined {\n    const collectionVersions = VersionTrackerUtils_incrementNukedeleted(\n      VersionTrackerUtils_ensureCollectionVersions(currentVersion)\n    );\n    const items = collectionVersions.items || {};\n\n    const newIds = new Set<string>();\n    for (const item of newValue) {\n      const itemId = VersionTrackerUtils_getId(item, this.versionTypes);\n      if (itemId) {\n        newIds.add(itemId);\n      }\n    }\n\n    const deletedInThisUpdate: string[] = [];\n    const oldItemsById = new Map<string, unknown>();\n    if (Array.isArray(oldValue)) {\n      for (const oldItem of oldValue) {\n        const oldItemId = VersionTrackerUtils_getId(oldItem, this.versionTypes);\n        if (!oldItemId) {\n          continue;\n        }\n        if (!oldItemsById.has(oldItemId)) {\n          oldItemsById.set(oldItemId, oldItem);\n        }\n        if (!newIds.has(oldItemId)) {\n          collectionVersions.deleted = collectionVersions.deleted || {};\n          collectionVersions.deleted[oldItemId] = timestamp;\n          delete items[oldItemId];\n          deletedInThisUpdate.push(oldItemId);\n        }\n      }\n    }\n\n    if (deletedInThisUpdate.length > 5) {\n      lg(\"ls-history-deletion-version-tracker\", {\n        path,\n        deletedCount: deletedInThisUpdate.length,\n        oldLen: Array.isArray(oldValue) ? oldValue.length : 0,\n        newLen: newValue.length,\n        timestamp,\n      });\n    }\n\n    for (const item of newValue) {\n      const itemId = VersionTrackerUtils_getId(item, this.versionTypes);\n      if (itemId) {\n        const oldItem = oldItemsById.get(itemId);\n\n        if (!VersionTrackerUtils_areEqual(oldItem, item)) {\n          const newCollectionVersion = isCollectionVersions(newVersion) ? newVersion : undefined;\n          const newItemVersion = newCollectionVersion?.items?.[itemId];\n          const itemPath = `${path}.items.${itemId}`;\n          const mergedItemVersion = this.mergeVersions.mergeVersionField(items[itemId], newItemVersion, itemPath);\n\n          const itemVersion = this.getItemVersion(oldItem, item, mergedItemVersion, timestamp, itemPath);\n          if (itemVersion !== undefined) {\n            items[itemId] = itemVersion;\n          }\n        }\n\n        if (collectionVersions.deleted && itemId in collectionVersions.deleted) {\n          delete collectionVersions.deleted[itemId];\n        }\n      }\n    }\n\n    const hasChanges =\n      Object.keys(items).length > 0 ||\n      (collectionVersions.deleted && Object.keys(collectionVersions.deleted).length > 0);\n\n    const compactedCollection = VersionTrackerUtils_applyCompaction(\n      collectionVersions,\n      path,\n      timestamp,\n      this.versionTypes\n    );\n    return hasChanges || currentVersion ? compactedCollection : undefined;\n  }\n\n  private updateDictionaryCollectionVersion(\n    oldValue: unknown,\n    newValue: Record<string, unknown>,\n    currentVersion: IVersionValue | undefined,\n    newVersion: IVersionValue | undefined,\n    timestamp: number,\n    path: string\n  ): ICollectionVersions | undefined {\n    const collectionVersions = VersionTrackerUtils_incrementNukedeleted(\n      VersionTrackerUtils_ensureCollectionVersions(currentVersion)\n    );\n    const items = collectionVersions.items || {};\n\n    const oldDict = VersionTrackerUtils_isRecord(oldValue) ? oldValue : undefined;\n\n    if (oldDict) {\n      for (const key of ObjectUtils_keys(oldDict)) {\n        if (!(key in newValue)) {\n          collectionVersions.deleted = collectionVersions.deleted || {};\n          collectionVersions.deleted[key] = timestamp;\n          delete items[key];\n        }\n      }\n    }\n\n    for (const [key, item] of Object.entries(newValue)) {\n      const oldItem = oldDict?.[key];\n      if (oldItem !== item) {\n        const newCollectionVersion = isCollectionVersions(newVersion) ? newVersion : undefined;\n        const newItemVersion = newCollectionVersion?.items?.[key];\n        const itemPath = `${path}.items.${key}`;\n        const mergedItemVersion = this.mergeVersions.mergeVersionField(items[key], newItemVersion, itemPath);\n\n        const itemVersion = this.getItemVersion(oldItem, item, mergedItemVersion, timestamp, itemPath);\n        if (itemVersion !== undefined) {\n          items[key] = itemVersion;\n        }\n      }\n\n      if (collectionVersions.deleted && key in collectionVersions.deleted) {\n        delete collectionVersions.deleted[key];\n      }\n    }\n\n    const hasChanges =\n      Object.keys(items).length > 0 ||\n      (collectionVersions.deleted && Object.keys(collectionVersions.deleted).length > 0);\n\n    const compactedCollection = VersionTrackerUtils_applyCompaction(\n      collectionVersions,\n      path,\n      timestamp,\n      this.versionTypes\n    );\n    return hasChanges || currentVersion ? compactedCollection : undefined;\n  }\n\n  private getItemVersion(\n    oldItem: unknown,\n    newItem: unknown,\n    currentItemVersion: IVersionValue | undefined,\n    timestamp: number,\n    path: string\n  ): IVersionsObject | IFieldVersion | undefined {\n    if (VersionTrackerUtils_isAtomicType(newItem, this.versionTypes)) {\n      const fieldVersion = isFieldVersion(currentItemVersion) ? currentItemVersion : undefined;\n      return VersionTrackerUtils_createVersion(timestamp, fieldVersion, this.deviceId);\n    } else if (VersionTrackerUtils_isControlledType(newItem, this.versionTypes)) {\n      return this.updateControlledObjectVersion(oldItem, newItem, currentItemVersion, timestamp, path);\n    } else {\n      const fieldVersion = isFieldVersion(currentItemVersion) ? currentItemVersion : undefined;\n      return VersionTrackerUtils_createVersion(timestamp, fieldVersion, this.deviceId);\n    }\n  }\n\n  private updateControlledObjectVersion(\n    oldValue: unknown,\n    newValue: ITypedObject<TControlledType>,\n    currentVersion: IVersionValue | undefined,\n    timestamp: number,\n    path: string\n  ): IVersionsObject | undefined {\n    const controlledFields = this.versionTypes.controlledFields[newValue.vtype] || [];\n    const fieldVersions: IVersionsObject = VersionTrackerUtils_ensureVersionsObject(currentVersion);\n    let hasChanges = false;\n\n    // Always include ID field version for controlled types\n    const idField = VersionTrackerUtils_getIdFieldName(newValue.vtype, this.versionTypes);\n    if (idField) {\n      const idValue = VersionTrackerUtils_getIdValue(newValue, this.versionTypes);\n      if (idValue != null) {\n        const currentIdVersion = isIdVersion(fieldVersions[idField]) ? fieldVersions[idField] : undefined;\n        // Only update if ID changed or no version exists\n        if (!currentIdVersion || currentIdVersion.value !== idValue) {\n          fieldVersions[idField] = VersionTrackerUtils_createIdVersion(\n            timestamp,\n            idValue,\n            currentIdVersion,\n            this.deviceId\n          );\n          hasChanges = true;\n        }\n      }\n    }\n\n    for (const controlledField of controlledFields) {\n      const oldFieldValue =\n        VersionTrackerUtils_isRecord(oldValue) && controlledField in oldValue ? oldValue[controlledField] : undefined;\n      const newFieldValue = newValue[controlledField];\n\n      // A controlled field going present -> absent (e.g. clearing progress.setTimer) must still bump a version so\n      // the deletion propagates to other devices, mirroring how top-level field deletions are tracked. Without this\n      // the field lingers on the receiving device (a stale set-timer modal kept showing after a Stop on the watch).\n      if (!VersionTrackerUtils_areEqual(oldFieldValue, newFieldValue)) {\n        const currentFieldVersion = fieldVersions[controlledField];\n        const fieldPath = path ? `${path}.${controlledField}` : controlledField;\n        const updatedVersion = this.updateControlledFieldVersion(\n          oldFieldValue,\n          newFieldValue,\n          currentFieldVersion,\n          timestamp,\n          fieldPath\n        );\n        if (updatedVersion != null) {\n          fieldVersions[controlledField] = updatedVersion;\n          hasChanges = true;\n        }\n      }\n    }\n\n    return hasChanges || Object.keys(fieldVersions).length > 0 ? fieldVersions : undefined;\n  }\n\n  private updateControlledFieldVersion(\n    oldValue: unknown,\n    newValue: unknown,\n    currentVersion: IVersionValue | undefined,\n    timestamp: number,\n    path: string\n  ): IVersionValue | undefined {\n    if (Array.isArray(newValue)) {\n      const hasTrackableItems = newValue.some(\n        (item) => VersionTrackerUtils_getId(item, this.versionTypes) !== undefined\n      );\n      const oldHasTrackableItems =\n        Array.isArray(oldValue) &&\n        oldValue.some((item: unknown) => VersionTrackerUtils_getId(item, this.versionTypes) !== undefined);\n      if (hasTrackableItems || oldHasTrackableItems) {\n        return this.updateArrayCollectionVersion(oldValue, newValue, currentVersion, undefined, timestamp, path);\n      } else if (newValue.length > 0 || (Array.isArray(oldValue) && oldValue.length > 0)) {\n        const fieldVersion = isFieldVersion(currentVersion) ? currentVersion : undefined;\n        return VersionTrackerUtils_createVersion(timestamp, fieldVersion, this.deviceId);\n      } else {\n        return this.updateArrayCollectionVersion(oldValue, newValue, currentVersion, undefined, timestamp, path);\n      }\n    }\n\n    if (VersionTrackerUtils_isRecord(newValue)) {\n      if (this.versionTypes.dictionaryFields.includes(path)) {\n        return this.updateDictionaryCollectionVersion(oldValue, newValue, currentVersion, undefined, timestamp, path);\n      }\n      if (VersionTrackerUtils_isControlledType(newValue, this.versionTypes)) {\n        return this.updateControlledObjectVersion(oldValue, newValue, currentVersion, timestamp, path);\n      }\n      if (VersionTrackerUtils_isAtomicType(newValue, this.versionTypes)) {\n        const fieldVersion = isFieldVersion(currentVersion) ? currentVersion : undefined;\n        return VersionTrackerUtils_createVersion(timestamp, fieldVersion, this.deviceId);\n      }\n    }\n\n    const fieldVersion = isFieldVersion(currentVersion) ? currentVersion : undefined;\n    return VersionTrackerUtils_createVersion(timestamp, fieldVersion, this.deviceId);\n  }\n\n  private updateNestedVersions(\n    oldFull: unknown,\n    newFull: unknown,\n    oldFullVersion: unknown,\n    newFullVersion: unknown,\n    oldObj: Record<string, unknown> | undefined,\n    newObj: Record<string, unknown>,\n    currentVersions: IVersionsObject,\n    newVersions: IVersionsObject,\n    timestamp: number,\n    parentPath: string\n  ): IVersionsObject | undefined {\n    const versions: IVersionsObject = { ...currentVersions };\n    const keys = ObjectUtils_keys(newObj);\n    let hasChanges = false;\n\n    for (const key of keys) {\n      const oldValue = oldObj?.[key];\n      const newValue = newObj[key];\n      const currentPath = parentPath ? `${parentPath}.${key}` : key;\n\n      if (VersionTrackerUtils_areEqual(oldValue, newValue)) {\n        continue;\n      }\n\n      if (oldValue == null && newValue != null) {\n        const updatedVersion = this.updateFieldVersion(\n          oldFull,\n          newFull,\n          oldFullVersion,\n          newFullVersion,\n          undefined,\n          newValue,\n          versions[key],\n          newVersions[key],\n          timestamp,\n          currentPath\n        );\n        if (updatedVersion !== undefined) {\n          versions[key] = updatedVersion;\n          hasChanges = true;\n        }\n      } else if (oldValue != null) {\n        const updatedVersion = this.updateFieldVersion(\n          oldFull,\n          newFull,\n          oldFullVersion,\n          newFullVersion,\n          oldValue,\n          newValue,\n          versions[key],\n          newVersions[key],\n          timestamp,\n          currentPath\n        );\n        if (updatedVersion !== undefined) {\n          versions[key] = updatedVersion;\n          hasChanges = true;\n        }\n      }\n    }\n\n    return hasChanges || Object.keys(currentVersions).length > 0 ? versions : undefined;\n  }\n}\n","import { CollectionUtils_sort, CollectionUtils_compressArray } from \"../utils/collection\";\n\nimport { IWeight, IUnit, ISettings, IPlate, IPercentage, IExerciseType } from \"../types\";\nimport { n, MathUtils_roundTo005, MathUtils_round, MathUtils_roundFloat, MathUtils_roundTo000005 } from \"../utils/math\";\nimport {\n  Equipment_getUnitOrDefaultForExerciseType,\n  Equipment_getEquipmentDataForExerciseType,\n  Equipment_smallestPlate,\n} from \"./equipment\";\nimport { Exercise_get, Exercise_onerm, Exercise_defaultRounding } from \"./exercise\";\n\nconst prebuiltWeights: Partial<Record<string, IWeight>> = {};\n\nexport function Weight_display(weight: IWeight | IPercentage | number, withUnit: boolean = true): string {\n  if (typeof weight === \"number\") {\n    return `${weight}`;\n  } else if (Weight_isPct(weight)) {\n    return `${weight.value}${withUnit ? \"%\" : \"\"}`;\n  } else {\n    return `${parseFloat(weight.value.toFixed(2)).toString()}${withUnit ? ` ${weight.unit}` : \"\"}`;\n  }\n}\n\nexport function Weight_rpePct(reps: number, rpe: number): IPercentage {\n  return Weight_buildPct(MathUtils_roundTo005(Weight_rpeMultiplier(reps, rpe) * 100));\n}\n\nexport function Weight_evaluateWeight(\n  weight: IWeight | IPercentage,\n  exerciseType: IExerciseType,\n  settings: ISettings\n): IWeight {\n  if (Weight_is(weight)) {\n    return weight;\n  } else if (Weight_isPct(weight)) {\n    const exercise = Exercise_get(exerciseType, settings.exercises);\n    const onerm = Exercise_onerm(exercise, settings);\n    return Weight_multiply(onerm, weight.value / 100);\n  } else {\n    const unit = Equipment_getUnitOrDefaultForExerciseType(settings, exerciseType);\n    return Weight_build(0, unit);\n  }\n}\n\nexport function Weight_smartConvert(weight: IWeight, toUnit: IUnit): IWeight {\n  if (weight.unit === toUnit) {\n    return weight;\n  }\n  const value = weight.value;\n  if (weight.unit === \"kg\") {\n    if (value < 15) {\n      return Weight_build(value * 2, toUnit);\n    } else {\n      return Weight_build(MathUtils_round(value * 2.25, 5), toUnit);\n    }\n  } else {\n    if (value < 15) {\n      return Weight_build(MathUtils_round(value / 2, 0.25), toUnit);\n    } else {\n      return Weight_build(MathUtils_round(value / 2.25, 2.5), toUnit);\n    }\n  }\n}\n\nexport function Weight_oppositeUnit(unit: IUnit): IUnit {\n  return unit === \"kg\" ? \"lb\" : \"kg\";\n}\n\nexport function Weight_print(weight: IWeight | IPercentage | number): string {\n  if (typeof weight === \"number\") {\n    return `${n(weight)}`;\n  } else {\n    return `${n(weight.value)}${weight.unit}`;\n  }\n}\n\nexport function Weight_printNull(weight: IWeight | IPercentage | number | undefined): string {\n  if (weight == null) {\n    return \"\";\n  } else if (typeof weight === \"number\") {\n    return `${n(weight)}`;\n  } else {\n    return `${n(weight.value)}${weight.unit}`;\n  }\n}\n\nexport function Weight_parsePct(str?: string): IPercentage | IWeight | undefined {\n  if (str == null) {\n    return undefined;\n  }\n  const match = str.match(/^([\\-+]?[0-9.]+)%$/);\n  if (match) {\n    return Weight_buildPct(MathUtils_roundFloat(parseFloat(match[1]), 2));\n  } else {\n    return Weight_parse(str);\n  }\n}\n\nexport function Weight_parse(str: string): IWeight | undefined {\n  const match = str.match(/^([\\-+]?[0-9.]+)\\s*(kg|lb)$/);\n  if (match) {\n    return Weight_build(MathUtils_roundFloat(parseFloat(match[1]), 2), match[2] as IUnit);\n  } else {\n    return undefined;\n  }\n}\n\n// Unlike Weight_parse, the number must be a well-formed decimal — strings like \"...lb\", \"+.kg\",\n// or \"1.2.3lb\" are rejected instead of silently coercing to 0 or a truncated value.\nexport function Weight_strictParse(str: string): IWeight | undefined {\n  const match = str.match(/^([\\-+]?(?:[0-9]+(?:\\.[0-9]+)?|\\.[0-9]+))\\s*(kg|lb)$/);\n  if (!match) {\n    return undefined;\n  }\n  const value = parseFloat(match[1]);\n  if (!isFinite(value)) {\n    return undefined;\n  }\n  return Weight_build(MathUtils_roundFloat(value, 2), match[2] as IUnit);\n}\n\nexport function Weight_printOrNumber(weight: IWeight | IPercentage | number): string {\n  return typeof weight === \"number\" ? `${weight}` : Weight_print(weight);\n}\n\nexport function Weight_buildPct(value: number): IPercentage {\n  return { value, unit: \"%\" };\n}\n\nexport function Weight_buildAny(value: number, unit: IUnit | \"%\"): IWeight | IPercentage {\n  if (unit === \"%\") {\n    return Weight_buildPct(value);\n  } else {\n    return Weight_build(value, unit);\n  }\n}\n\nexport function Weight_build(value: number, unit: IUnit): IWeight {\n  const key = `${value}_${unit}`;\n  const prebuiltWeight = prebuiltWeights[key];\n  if (prebuiltWeight != null) {\n    return prebuiltWeight;\n  } else {\n    const v = { value: typeof value === \"string\" ? parseFloat(value) : value, unit };\n    prebuiltWeights[`${value}_${unit}`] = v;\n    return v;\n  }\n}\n\nexport function Weight_clone(value: IWeight): IWeight {\n  return Weight_build(value.value, value.unit);\n}\n\nexport function Weight_isOrPct(object: unknown): object is IWeight | IPercentage {\n  const objWeight = object as IWeight | IPercentage;\n  return (\n    objWeight &&\n    typeof objWeight === \"object\" &&\n    \"unit\" in objWeight &&\n    \"value\" in objWeight &&\n    (objWeight.unit === \"kg\" || objWeight.unit === \"lb\" || objWeight.unit === \"%\")\n  );\n}\n\nexport function Weight_is(object: unknown): object is IWeight {\n  const objWeight = object as IWeight;\n  return (\n    objWeight &&\n    typeof objWeight === \"object\" &&\n    \"unit\" in objWeight &&\n    \"value\" in objWeight &&\n    (objWeight.unit === \"kg\" || objWeight.unit === \"lb\")\n  );\n}\n\nexport function Weight_isPct(object: unknown): object is IPercentage {\n  const objWeight = object as IPercentage;\n  return (\n    objWeight && typeof objWeight === \"object\" && \"unit\" in objWeight && \"value\" in objWeight && objWeight.unit === \"%\"\n  );\n}\n\nexport function Weight_round(weight: IWeight, settings: ISettings, unit: IUnit, exerciseType?: IExerciseType): IWeight {\n  if (exerciseType == null) {\n    return Weight_roundTo005(weight);\n  }\n  return Weight_calculatePlates(weight, settings, unit, exerciseType).totalWeight;\n}\n\nexport function Weight_increment(weight: IWeight, settings: ISettings, exerciseType?: IExerciseType): IWeight {\n  const equipmentData = Equipment_getEquipmentDataForExerciseType(settings, exerciseType);\n  if (equipmentData) {\n    const unit = equipmentData.unit ?? weight.unit;\n    const roundWeight = Weight_round(weight, settings, unit, exerciseType);\n    if (equipmentData.isFixed) {\n      const items = CollectionUtils_sort(\n        equipmentData.fixed.filter((e) => e.unit === unit),\n        (a, b) => Weight_compare(a, b)\n      );\n      const item = items.find((i) => Weight_gt(i, roundWeight));\n      return item ?? items[items.length - 1] ?? roundWeight;\n    } else {\n      const smallestPlate = Weight_multiply(Equipment_smallestPlate(equipmentData, unit), equipmentData.multiplier);\n      let newWeight = roundWeight;\n      let attempt = 0;\n      do {\n        newWeight = Weight_add(newWeight, smallestPlate);\n        attempt += 1;\n      } while (attempt < 20 && Weight_eq(Weight_round(newWeight, settings, unit, exerciseType), roundWeight));\n      return newWeight;\n    }\n  } else {\n    const roundWeight = Weight_round(weight, settings, weight.unit, exerciseType);\n    const rounding = exerciseType ? Exercise_defaultRounding(exerciseType, settings) : 1;\n    return Weight_build(roundWeight.value + rounding, roundWeight.unit);\n  }\n}\n\nexport function Weight_decrement(weight: IWeight, settings: ISettings, exerciseType?: IExerciseType): IWeight {\n  const equipmentData = exerciseType ? Equipment_getEquipmentDataForExerciseType(settings, exerciseType) : undefined;\n  if (equipmentData) {\n    const unit = equipmentData.unit ?? weight.unit;\n    const roundWeight = Weight_round(weight, settings, unit, exerciseType);\n    if (equipmentData.isFixed) {\n      const items = CollectionUtils_sort(\n        equipmentData.fixed.filter((e) => e.unit === unit),\n        (a, b) => Weight_compareReverse(a, b)\n      );\n      const item = items.find((i) => Weight_lt(i, roundWeight));\n      return item ?? items[items.length - 1] ?? roundWeight;\n    } else {\n      const smallestPlate = Weight_multiply(Equipment_smallestPlate(equipmentData, unit), equipmentData.multiplier);\n      const subtracted = Weight_subtract(roundWeight, smallestPlate);\n      const newWeight = Weight_round(subtracted, settings, unit, exerciseType);\n      return Weight_build(newWeight.value, newWeight.unit);\n    }\n  } else {\n    const roundWeight = Weight_round(weight, settings, weight.unit, exerciseType);\n    const rounding = exerciseType ? Exercise_defaultRounding(exerciseType, settings) : 1;\n    return Weight_build(roundWeight.value - rounding, roundWeight.unit);\n  }\n}\n\nexport function Weight_getOneRepMax(weight: IWeight, reps: number, rpe?: number): IWeight {\n  if (reps === 0) {\n    return Weight_build(0, weight.unit);\n  } else if (reps === 1) {\n    return weight;\n  } else {\n    return Weight_roundTo005(Weight_divide(weight, Weight_rpeMultiplier(reps, rpe ?? 10)));\n  }\n}\n\nexport function Weight_getNRepMax(oneRepMax: IWeight, reps: number): IWeight {\n  if (reps === 0) {\n    return Weight_build(0, oneRepMax.unit);\n  } else if (reps === 1) {\n    return oneRepMax;\n  } else {\n    return Weight_roundTo005(Weight_multiply(oneRepMax, Weight_rpeMultiplier(reps, 10)));\n  }\n}\n\nexport function Weight_getTrainingMax(weight: IWeight, reps: number, settings: ISettings): IWeight {\n  return Weight_round(Weight_multiply(Weight_getOneRepMax(weight, reps), 0.9), settings, weight.unit);\n}\n\nexport function Weight_platesWeight(plates: IPlate[]): IWeight {\n  const unit = plates[0]?.weight.unit || \"lb\";\n  return plates.reduce(\n    (memo, plate) => Weight_add(memo, Weight_multiply(plate.weight, plate.num)),\n    Weight_build(0, unit)\n  );\n}\n\nexport function Weight_formatOneSide(settings: ISettings, platesArr: IPlate[], exerciseType: IExerciseType): string {\n  const equipmentSettings = Equipment_getEquipmentDataForExerciseType(settings, exerciseType);\n  const plates: IPlate[] = JSON.parse(JSON.stringify(platesArr));\n  plates.sort((a, b) => Weight_compareReverse(a.weight, b.weight));\n  const arr: number[] = [];\n  const multiplier = equipmentSettings?.multiplier ?? 1;\n  while (true) {\n    const plate = plates.find((p) => p.num >= multiplier);\n    if (plate != null) {\n      arr.push(plate.weight.value);\n      plate.num -= multiplier;\n    } else {\n      break;\n    }\n  }\n\n  return CollectionUtils_compressArray(arr, 3).join(\"/\");\n}\n\nexport function Weight_roundTo005(weight: IWeight): IWeight {\n  return Weight_build(MathUtils_roundTo005(weight.value), weight.unit);\n}\n\nexport function Weight_roundTo000005(weight: IWeight): IWeight {\n  return Weight_build(MathUtils_roundTo000005(weight.value), weight.unit);\n}\n\nexport function Weight_calculatePlates(\n  allWeight: IWeight,\n  settings: ISettings,\n  units: IUnit,\n  exerciseType: IExerciseType\n): { plates: IPlate[]; platesWeight: IWeight; totalWeight: IWeight } {\n  const equipmentData = Equipment_getEquipmentDataForExerciseType(settings, exerciseType);\n  if (equipmentData == null) {\n    const rounding = Exercise_defaultRounding(exerciseType, settings);\n    allWeight = Weight_build(MathUtils_round(allWeight.value, rounding), allWeight.unit);\n    return { plates: [], platesWeight: allWeight, totalWeight: allWeight };\n  }\n\n  const originalUnit = allWeight.unit;\n  const weightInUnits = Weight_convertTo(allWeight, units);\n  const absAllWeight = Weight_abs(weightInUnits);\n  const inverted = weightInUnits.value < 0;\n  if (equipmentData.isFixed) {\n    const fixed = CollectionUtils_sort(\n      equipmentData.fixed.filter((w) => w.unit === (equipmentData.unit ?? units)),\n      (a, b) => b.value - a.value\n    );\n    const weight = fixed.find((w) => Weight_lte(w, absAllWeight)) || fixed[fixed.length - 1] || absAllWeight;\n    let roundedWeight = Weight_roundTo005(Weight_convertTo(weight, originalUnit));\n    roundedWeight = inverted ? Weight_invert(roundedWeight) : roundedWeight;\n    return { plates: [], platesWeight: roundedWeight, totalWeight: roundedWeight };\n  }\n  const availablePlatesArr = equipmentData.plates.filter((p) => p.weight.unit === units);\n  const barWeight =\n    equipmentData.useBodyweightForBar && settings.currentBodyweight\n      ? settings.currentBodyweight\n      : equipmentData.bar[units];\n  const multiplier = equipmentData.multiplier || 1;\n  const isAssisting = equipmentData.isAssisting || false;\n  const weight = Weight_roundTo000005(Weight_subtract(absAllWeight, barWeight));\n  const availablePlates: IPlate[] = JSON.parse(JSON.stringify(availablePlatesArr));\n  availablePlates.sort((a, b) => Weight_compareReverse(a.weight, b.weight));\n  const plates: IPlate[] = calculatePlatesInternalFast(weight, availablePlates, multiplier, isAssisting);\n  const total = plates.reduce(\n    (memo, plate) => {\n      const weightToAdd = Weight_multiply(plate.weight, plate.num);\n      return isAssisting ? Weight_subtract(memo, weightToAdd) : Weight_add(memo, weightToAdd);\n    },\n    Weight_build(0, units)\n  );\n  const totalInUnits = Weight_add(total, barWeight);\n  const totalWeight = Weight_roundTo000005(\n    Weight_convertTo(inverted ? Weight_invert(totalInUnits) : totalInUnits, originalUnit)\n  );\n  const thePlatesWeight = Weight_convertTo(inverted ? Weight_invert(total) : total, originalUnit);\n  return { plates, platesWeight: thePlatesWeight, totalWeight };\n}\n\nexport function Weight_abs(weight: IWeight): IWeight {\n  return Weight_build(Math.abs(weight.value), weight.unit);\n}\n\nexport function Weight_invert(weight: IWeight): IWeight {\n  return Weight_build(-weight.value, weight.unit);\n}\n\nfunction calculatePlatesInternalFast(\n  weight: IWeight,\n  availablePlates: IPlate[],\n  multiplier: number,\n  isAssisting: boolean\n): IPlate[] {\n  const targetValue = isAssisting ? -weight.value : weight.value;\n  if (targetValue <= 0) {\n    return [];\n  }\n\n  const plateTypes: { weight: IWeight; unitWeight: number; maxUnits: number }[] = [];\n  for (const p of availablePlates) {\n    if (p.num >= multiplier) {\n      plateTypes.push({\n        weight: p.weight,\n        unitWeight: p.weight.value * multiplier,\n        maxUnits: Math.floor(p.num / multiplier),\n      });\n    }\n  }\n  if (plateTypes.length === 0) {\n    return [];\n  }\n\n  // Convert to integers for exact arithmetic\n  const allValues = [targetValue, ...plateTypes.map((p) => p.unitWeight)];\n  let maxDecimals = 0;\n  for (const v of allValues) {\n    const s = v.toString();\n    const dot = s.indexOf(\".\");\n    if (dot >= 0) {\n      maxDecimals = Math.max(maxDecimals, s.length - dot - 1);\n    }\n  }\n  const precision = Math.pow(10, Math.min(maxDecimals, 6));\n  const intTarget = Math.round(targetValue * precision);\n  const intWeights = plateTypes.map((p) => Math.round(p.unitWeight * precision));\n\n  // Max contribution from plates at index i and beyond (for pruning)\n  const maxFrom = new Array(plateTypes.length + 1).fill(0);\n  for (let i = plateTypes.length - 1; i >= 0; i--) {\n    maxFrom[i] = maxFrom[i + 1] + intWeights[i] * plateTypes[i].maxUnits;\n  }\n\n  const best = new Array(plateTypes.length).fill(0);\n  const current = new Array(plateTypes.length).fill(0);\n  let bestRemaining = intTarget + 1;\n  let iterations = 0;\n\n  function search(index: number, remaining: number): void {\n    if (bestRemaining === 0 || iterations >= 10000) {\n      return;\n    }\n    if (remaining === 0 || index >= plateTypes.length) {\n      if (remaining < bestRemaining) {\n        bestRemaining = remaining;\n        for (let i = 0; i < index; i++) {\n          best[i] = current[i];\n        }\n        for (let i = index; i < plateTypes.length; i++) {\n          best[i] = 0;\n        }\n      }\n      return;\n    }\n\n    iterations += 1;\n    const w = intWeights[index];\n    const maxCount = Math.min(plateTypes[index].maxUnits, w > 0 ? Math.floor(remaining / w) : 0);\n\n    for (let count = maxCount; count >= 0; count--) {\n      const newRemaining = remaining - count * w;\n      if (newRemaining - maxFrom[index + 1] >= bestRemaining) {\n        continue;\n      }\n      current[index] = count;\n      search(index + 1, newRemaining);\n      if (bestRemaining === 0) {\n        return;\n      }\n    }\n  }\n\n  search(0, intTarget);\n\n  const plates: IPlate[] = [];\n  for (let i = 0; i < plateTypes.length; i++) {\n    if (best[i] > 0) {\n      plates.push({ weight: plateTypes[i].weight, num: best[i] * multiplier });\n    }\n  }\n  return plates;\n}\n\nexport function Weight_add(weight: IWeight, value: IWeight | number): IWeight {\n  return Weight_operation(weight, value, (a, b) => a + b);\n}\n\nexport function Weight_subtract(weight: IWeight, value: IWeight | number): IWeight {\n  return Weight_operation(weight, value, (a, b) => a - b);\n}\n\nexport function Weight_multiply(weight: IWeight, value: IWeight | number): IWeight {\n  return Weight_operation(weight, value, (a, b) => a * b);\n}\n\nexport function Weight_divide(weight: IWeight, value: IWeight | number): IWeight {\n  return Weight_operation(weight, value, (a, b) => a / b);\n}\n\nexport function Weight_gt(weight: IWeight | number | IPercentage, value: IWeight | number | IPercentage): boolean {\n  return comparison(weight, value, (a, b) => a > b);\n}\n\nexport function Weight_lt(weight: IWeight | number | IPercentage, value: IWeight | number | IPercentage): boolean {\n  return comparison(weight, value, (a, b) => a < b);\n}\n\nexport function Weight_gte(weight: IWeight | number | IPercentage, value: IWeight | number | IPercentage): boolean {\n  return comparison(weight, value, (a, b) => a >= b);\n}\n\nexport function Weight_lte(weight: IWeight | number | IPercentage, value: IWeight | number | IPercentage): boolean {\n  return comparison(weight, value, (a, b) => a <= b);\n}\n\nexport function Weight_eqNull(\n  weight: IWeight | number | IPercentage | undefined,\n  value: IWeight | number | IPercentage | undefined\n): boolean {\n  if (weight == null && value == null) {\n    return true;\n  } else if (weight == null && value != null) {\n    return false;\n  } else if (weight != null && value == null) {\n    return false;\n  } else {\n    return comparison(weight!, value!, (a, b) => a === b);\n  }\n}\n\nexport function Weight_eq(weight: IWeight | number | IPercentage, value: IWeight | number | IPercentage): boolean {\n  return comparison(weight, value, (a, b) => a === b);\n}\n\nexport function Weight_eqeq(weight: IWeight, value: IWeight): boolean {\n  return weight.value === value.value && weight.unit === value.unit;\n}\n\nexport function Weight_max(weights: IWeight[]): IWeight | undefined {\n  return CollectionUtils_sort(weights, Weight_compareReverse)[0];\n}\n\nexport function Weight_roundConvertTo(\n  weight: IWeight,\n  settings: ISettings,\n  unit: IUnit,\n  exerciseType?: IExerciseType\n): IWeight {\n  return Weight_round(Weight_convertTo(weight, unit), settings, unit, exerciseType);\n}\n\nexport function Weight_type(value: number | IWeight | IPercentage): \"weight\" | \"percentage\" | \"number\" {\n  if (typeof value === \"number\") {\n    return \"number\";\n  } else if (Weight_isPct(value)) {\n    return \"percentage\";\n  } else {\n    return \"weight\";\n  }\n}\n\nexport function Weight_convertTo(weight: IWeight, unit: IUnit): IWeight;\nexport function Weight_convertTo(weight: IPercentage, unit: \"%\" | IUnit): IPercentage;\nexport function Weight_convertTo(weight: number, unit: IUnit): number;\nexport function Weight_convertTo(\n  weight: IWeight | number | IPercentage,\n  unit: IUnit | \"%\"\n): IWeight | number | IPercentage {\n  if (typeof weight === \"number\") {\n    return weight;\n  } else if (weight.unit === \"%\" || unit === \"%\") {\n    return weight;\n  } else {\n    if (weight.unit === unit) {\n      return weight;\n    } else if (weight.unit === \"kg\" && unit === \"lb\") {\n      return Weight_build(Math.round((weight.value * 2.205) / 0.5) * 0.5, unit);\n    } else {\n      return Weight_build(Math.round(weight.value / 2.205 / 0.5) * 0.5, unit);\n    }\n  }\n}\n\nexport function Weight_compare(a: IWeight, b: IWeight): number {\n  return a.value - Weight_convertTo(b, a.unit).value;\n}\n\nexport function Weight_compareReverse(a: IWeight, b: IWeight): number {\n  return Weight_convertTo(b, a.unit).value - a.value;\n}\n\nfunction comparison(\n  weight: IWeight | number | IPercentage,\n  value: IWeight | number | IPercentage,\n  o: (a: number, b: number) => boolean\n): boolean {\n  if (typeof weight === \"number\" && typeof value === \"number\") {\n    return o(weight, value);\n  } else if (typeof weight === \"number\" && typeof value !== \"number\") {\n    return o(weight, value.value);\n  } else if (typeof weight !== \"number\" && typeof value === \"number\") {\n    return o(weight.value, value);\n  } else if (typeof weight !== \"number\" && typeof value !== \"number\") {\n    if (weight.unit === \"%\" && value.unit === \"%\") {\n      return o(weight.value, value.value);\n    } else if (Weight_is(weight) && Weight_is(value)) {\n      return o(weight.value, Weight_convertTo(value, weight.unit).value);\n    } else {\n      return false;\n    }\n  } else {\n    return false;\n  }\n}\n\nexport function Weight_applyOp(\n  onerm: IWeight | undefined,\n  oldValue: IWeight | number | IPercentage,\n  value: IWeight | number | IPercentage,\n  opr: \"+=\" | \"-=\" | \"*=\" | \"/=\" | \"=\"\n): IWeight | number | IPercentage {\n  if (opr === \"=\") {\n    return value;\n  } else if (opr === \"+=\") {\n    return Weight_op(onerm, oldValue, value, (a, b) => a + b);\n  } else if (opr === \"-=\") {\n    return Weight_op(onerm, oldValue, value, (a, b) => a - b);\n  } else if (opr === \"*=\") {\n    return Weight_op(onerm, oldValue, value, (a, b) => MathUtils_roundTo005(a * b));\n  } else {\n    return Weight_op(onerm, oldValue, value, (a, b) => MathUtils_roundTo005(a / b));\n  }\n}\n\nexport function Weight_op(\n  onerm: IWeight | undefined,\n  a: IWeight | number | IPercentage,\n  b: IWeight | number | IPercentage,\n  o: (x: number, y: number) => number\n): IWeight | number | IPercentage {\n  if (typeof a === \"number\" && typeof b === \"number\") {\n    return o(a, b);\n  }\n  if (typeof a === \"number\" && Weight_isPct(b)) {\n    return Weight_buildPct(o(a, b.value));\n  }\n  if (typeof a === \"number\" && Weight_is(b)) {\n    return Weight_operation(a, b, o);\n  }\n\n  if (Weight_isPct(a) && typeof b === \"number\") {\n    return Weight_buildPct(o(a.value, b));\n  }\n  if (Weight_isPct(a) && Weight_isPct(b)) {\n    return Weight_buildPct(o(a.value, b.value));\n  }\n  if (Weight_isPct(a) && Weight_is(b)) {\n    const aWeight = onerm ? Weight_multiply(onerm, a.value / 100) : MathUtils_roundFloat(a.value / 100, 4);\n    return Weight_operation(aWeight, b, o);\n  }\n\n  if (Weight_is(a) && typeof b === \"number\") {\n    return Weight_operation(a, b, o);\n  }\n  if (Weight_is(a) && Weight_isPct(b)) {\n    const bWeight = onerm ? Weight_multiply(onerm, b.value / 100) : MathUtils_roundFloat(b.value / 100, 4);\n    return Weight_operation(a, bWeight, o);\n  }\n  if (Weight_is(a) && Weight_is(b)) {\n    return Weight_operation(a, b, o);\n  }\n\n  throw new Error(`Can't apply operation to ${a} and ${b}`);\n}\n\nexport function Weight_operation(\n  weight: IWeight,\n  value: IWeight | number,\n  o: (a: number, b: number) => number\n): IWeight;\nexport function Weight_operation(\n  weight: IWeight | number,\n  value: IWeight,\n  o: (a: number, b: number) => number\n): IWeight;\nexport function Weight_operation(\n  weight: IWeight | number,\n  value: IWeight | number,\n  o: (a: number, b: number) => number\n): IWeight {\n  if (typeof weight === \"number\" && typeof value !== \"number\") {\n    return Weight_build(o(weight, value.value), value.unit);\n  } else if (typeof weight !== \"number\" && typeof value === \"number\") {\n    return Weight_build(o(weight.value, value), weight.unit);\n  } else if (typeof weight !== \"number\" && typeof value !== \"number\") {\n    return Weight_build(o(weight.value, Weight_convertTo(value, weight.unit).value), weight.unit);\n  } else {\n    throw new Error(\"Weight.operation should never work with numbers only\");\n  }\n}\n\nexport function Weight_convertToWeight(onerm: IWeight, value: IWeight | number | IPercentage, unit: IUnit): IWeight {\n  if (typeof value === \"number\") {\n    return Weight_build(value, unit);\n  } else if (Weight_isPct(value)) {\n    return Weight_convertTo(Weight_multiply(onerm, MathUtils_roundFloat(value.value / 100, 4)), unit);\n  } else {\n    return value;\n  }\n}\n\nexport function Weight_calculateRepMax(\n  knownReps: number,\n  knownRpe: number,\n  knownWeight: number,\n  targetReps: number,\n  targetRpe: number\n): number {\n  const knownRpeMultiplier = Weight_rpeMultiplier(knownReps, knownRpe);\n  const onerm = knownWeight / knownRpeMultiplier;\n  const targetRpeMultiplier = Weight_rpeMultiplier(targetReps, targetRpe);\n  return Math.round(onerm * targetRpeMultiplier);\n}\n\nexport function Weight_rpeMultiplier(reps: number, rpe: number): number {\n  if (reps === 1 && rpe === 10) {\n    return 1;\n  }\n  reps = Math.max(Math.min(reps, 24), 1);\n  rpe = Math.max(Math.min(rpe, 10), 1);\n\n  const x = 10.0 - rpe + (reps - 1);\n  if (x >= 16) {\n    return 0.5;\n  }\n  // The formula is taken from\n  // https://gitlab.com/openpowerlifting/plsource/-/blob/ba5194be6daa08d082bb1b7959d6f47b82e7802c/static/rpe-calc/index.html#L224\n  const intersection = 2.92;\n  if (x <= intersection) {\n    const a = 0.347619;\n    const b = -4.60714;\n    const c = 99.9667;\n    return (a * x * x + b * x + c) / 100;\n  } else {\n    const m = -2.64249;\n    const b = 97.0955;\n    return (m * x + b) / 100;\n  }\n}\n\nexport const Weight_zero: IWeight = { value: 0, unit: \"lb\" } as const;\n","import { ObjectUtils_keys } from \"../utils/object\";\nimport { UrlUtils_build } from \"../utils/url\";\nimport { WhatsNewParser_parseAll } from \"./whatsnewParser\";\n\nexport interface IWhatsNew {\n  title: string;\n  body: string;\n}\n\nlet cached: Record<string, IWhatsNew> | undefined;\n\nexport function WhatsNew_all(): Record<string, IWhatsNew> {\n  if (!cached) {\n    const result: Record<string, IWhatsNew> = {};\n    for (const entry of WhatsNewParser_parseAll()) {\n      result[entry.dateStr] = { title: entry.title, body: entry.body };\n    }\n    cached = result;\n  }\n  return cached;\n}\n\nexport function WhatsNew_doesHaveNewUpdates(lastDateStr?: string): boolean {\n  if (lastDateStr == null) {\n    return false;\n  } else {\n    return Object.keys(WhatsNew_newUpdates(lastDateStr)).length > 0;\n  }\n}\n\nexport function WhatsNew_newUpdates(lastDateStr: string): Record<string, IWhatsNew> {\n  if (typeof window !== \"undefined\" && window.location?.href) {\n    const url = UrlUtils_build(window.location.href);\n    const forcedUserEmail = url.searchParams.get(\"forceuseremail\");\n    if (forcedUserEmail != null) {\n      return {};\n    }\n  }\n  const whatsNew = WhatsNew_all();\n  const lastDate = parseInt(lastDateStr, 10);\n  return ObjectUtils_keys(whatsNew).reduce<Record<string, IWhatsNew>>((memo, dateStr) => {\n    const date = parseInt(dateStr, 10);\n    if (date > lastDate) {\n      memo[dateStr] = whatsNew[dateStr];\n    }\n    return memo;\n  }, {});\n}\n","import { content as changelogMarkdown } from \"../generated/whatsnew\";\n\nexport interface IWhatsNewEntry {\n  dateStr: string;\n  title: string;\n  body: string;\n}\n\nlet cached: IWhatsNewEntry[] | undefined;\n\nexport function WhatsNewParser_parseAll(): IWhatsNewEntry[] {\n  if (cached) {\n    return cached;\n  }\n  cached = parse(changelogMarkdown);\n  return cached;\n}\n\nfunction parse(source: string): IWhatsNewEntry[] {\n  const lines = source.split(/\\r?\\n/);\n  const entries: IWhatsNewEntry[] = [];\n\n  let i = 0;\n  while (i < lines.length) {\n    if (lines[i].trim() !== \"---\") {\n      i += 1;\n      continue;\n    }\n    i += 1;\n\n    const meta: Record<string, string> = {};\n    while (i < lines.length && lines[i].trim() !== \"---\") {\n      const line = lines[i];\n      const match = /^([A-Za-z][A-Za-z0-9_-]*)\\s*:\\s*(.*)$/.exec(line);\n      if (match) {\n        meta[match[1].toLowerCase()] = match[2].trim();\n      }\n      i += 1;\n    }\n    if (i >= lines.length) {\n      break;\n    }\n    i += 1;\n\n    const bodyLines: string[] = [];\n    while (i < lines.length) {\n      if (lines[i].trim() === \"---\" && isFrontmatterStart(lines, i)) {\n        break;\n      }\n      bodyLines.push(lines[i]);\n      i += 1;\n    }\n\n    const dateRaw = meta.date || \"\";\n    const dateStr = dateRaw.replace(/-/g, \"\");\n    const title = meta.title || \"\";\n    if (!/^\\d{8}$/.test(dateStr)) {\n      continue;\n    }\n    entries.push({\n      dateStr,\n      title,\n      body: bodyLines.join(\"\\n\").trim(),\n    });\n  }\n\n  return entries;\n}\n\nfunction isFrontmatterStart(lines: string[], idx: number): boolean {\n  for (let j = idx + 1; j < lines.length; j += 1) {\n    const trimmed = lines[j].trim();\n    if (trimmed === \"---\") {\n      return true;\n    }\n    if (trimmed === \"\") {\n      return false;\n    }\n    if (!/^[A-Za-z][A-Za-z0-9_-]*\\s*:/.test(trimmed)) {\n      return false;\n    }\n  }\n  return false;\n}\n","import { IDispatch } from \"../ducks/types\";\nimport { IState, updateState } from \"./state\";\nimport { lb } from \"lens-shmens\";\nimport { WhatsNew_all } from \"./whatsnew\";\n\nexport function WhatsNew_updateStorage(dispatch: IDispatch): void {\n  const latestDateStr = Object.keys(WhatsNew_all()).sort().reverse()[0];\n  updateState(\n    dispatch,\n    [lb<IState>().p(\"storage\").p(\"whatsNew\").record(latestDateStr), lb<IState>().p(\"showWhatsNew\").record(false)],\n    \"Mark what's new as read\"\n  );\n}\n\nexport function WhatsNew_showWhatsNew(dispatch: IDispatch): void {\n  updateState(dispatch, [lb<IState>().p(\"showWhatsNew\").record(true)], \"Show what's new\");\n}\n","import { JSX, ReactNode, createContext, useContext, useReducer, useEffect, useRef, useCallback } from \"react\";\nimport type {\n  IMuscle,\n  IExerciseKind,\n  IExerciseType,\n  IExercisePickerSelectedExercise,\n  IDayData,\n  IPlannerProgram,\n  IProgramState,\n  IProgramStateMetadata,\n} from \"../types\";\nimport type { IEvaluatedProgram } from \"../models/program\";\nimport { getNavigationRef } from \"./navUtils\";\nimport { UidFactory_generateUid } from \"../utils/generator\";\nimport type { IStateVariableType } from \"../components/editProgramExercise/progressions/modalCreateStateVariable\";\nimport type { ILiftoEditorAcrossField, ILiftoEditorStateVarEntry } from \"../components/primitives/liftoEditorActions\";\n\nexport interface IInputSelectModalData {\n  name?: string;\n  values: [string, string][];\n  hint?: string;\n  selectedValue?: string;\n  placeholder?: string;\n  emptyLabel?: string;\n}\n\nexport interface ITextInputModalData {\n  title: string;\n  inputLabel: string;\n  placeholder: string;\n  submitLabel: string;\n  dataCyPrefix: string;\n  maxLength?: number;\n  pattern?: string;\n  patternMessage?: string;\n}\n\nexport interface IRepMaxCalculatorModalData {\n  unit: \"kg\" | \"lb\";\n}\n\nexport interface IExerciseTypesPickerModalData {\n  selectedTypes: IExerciseKind[];\n}\n\nexport interface IExerciseMusclesPickerModalData {\n  title: string;\n  name: string;\n  selectedMuscles: IMuscle[];\n}\n\nexport interface IExerciseImageLibraryResult {\n  smallImageUrl?: string;\n  largeImageUrl?: string;\n}\n\nexport interface IExerciseCloneLibraryResult {\n  smallImageUrl?: string;\n  largeImageUrl?: string;\n  targetMuscles: IMuscle[];\n  synergistMuscles: IMuscle[];\n  types: IExerciseKind[];\n}\n\nexport interface ILiftoEditorExercisePickerModalData {\n  exerciseType?: IExerciseType;\n  label?: string;\n  templateName?: string;\n  // Handed over rather than looked up by id: while the program editor is open the program\n  // that matters is the unsaved draft, and only the opener knows which one that is.\n  evaluatedProgram?: IEvaluatedProgram;\n  dayData?: Required<IDayData>;\n  // Exercises on that day that must not count as \"already used\", because they *are* the slot\n  // being edited — the one the program still has there and the one the unsaved text now names.\n  // Without this the picker disables the exercise you are replacing, so a swap can't be undone.\n  excludeUsedExerciseTypes?: IExerciseType[];\n}\n\nexport interface IStateVarsModalData {\n  // What custom()'s parens hold, as the syntax tree read it; the result is the same list,\n  // rewritten.\n  entries: ILiftoEditorStateVarEntry[];\n  hasUnparsed: boolean;\n  defaults?: IProgramState;\n  defaultsMetadata?: IProgramStateMetadata;\n  sourceName?: string;\n  progressScript?: string;\n  updateScript?: string;\n  exerciseType?: IExerciseType;\n}\n\nexport interface ICreateStateVarModalResult {\n  name: string;\n  type: IStateVariableType;\n  isUserPrompted: boolean;\n}\n\n// Retuning one exercise's sets across every week that shares a value. Planner in, planner out —\n// nothing about the program around it is read. Handed over rather than looked up by id because\n// the opener may be holding edits that aren't in app state yet, and the grouping has to be of\n// what the user can actually see.\nexport interface IAcrossProgramModalData {\n  planner: IPlannerProgram;\n  exerciseKey: string;\n  exerciseFullName: string;\n  field: ILiftoEditorAcrossField;\n}\n\nexport interface IModalDataMap {\n  inputSelectModal: IInputSelectModalData;\n  acrossProgramModal: IAcrossProgramModalData;\n  stateVarsModal: IStateVarsModalData;\n  createStateVarModal: { existingNames?: string[] };\n  liftoEditorExercisePickerModal: ILiftoEditorExercisePickerModalData;\n  textInputModal: ITextInputModalData;\n  repMaxCalculatorModal: IRepMaxCalculatorModalData;\n  exerciseTypesPickerModal: IExerciseTypesPickerModalData;\n  exerciseMusclesPickerModal: IExerciseMusclesPickerModalData;\n  exerciseImageSourceModal: { exerciseId: string };\n  exerciseImageLibraryModal: {};\n  exerciseCloneLibraryModal: {};\n  photoPickerModal: {};\n}\n\nexport interface IModalResultMap {\n  inputSelectModal: string;\n  // The rewritten program. The opener decides where it goes — pending in a sheet, or straight\n  // into a lens — so this modal never writes to app state itself.\n  acrossProgramModal: IPlannerProgram;\n  stateVarsModal: string;\n  createStateVarModal: ICreateStateVarModalResult;\n  liftoEditorExercisePickerModal: IExercisePickerSelectedExercise;\n  textInputModal: string;\n  repMaxCalculatorModal: number;\n  exerciseTypesPickerModal: IExerciseKind[];\n  exerciseMusclesPickerModal: IMuscle[];\n  exerciseImageSourceModal: IExerciseImageLibraryResult;\n  exerciseImageLibraryModal: IExerciseImageLibraryResult;\n  exerciseCloneLibraryModal: IExerciseCloneLibraryResult;\n  photoPickerModal: string;\n}\n\nexport interface IModalState {\n  modals: Partial<IModalDataMap>;\n  results: Partial<IModalResultMap>;\n  // Who opened each modal last. Several components can hold a useModal hook for the same\n  // key (one per mounted day editor), and a result is delivered to the one that asked for\n  // it — a canceled opener would otherwise stay armed and take the next opener's result.\n  owners: Partial<Record<keyof IModalDataMap, string>>;\n}\n\ntype IModalAction =\n  | { type: \"open\"; key: string; data: unknown; owner?: string }\n  | { type: \"clear\"; key: string }\n  | { type: \"setResult\"; key: string; value: unknown }\n  | { type: \"clearResult\"; key: string };\n\nfunction modalReducer(state: IModalState, action: IModalAction): IModalState {\n  switch (action.type) {\n    case \"open\":\n      return {\n        ...state,\n        modals: { ...state.modals, [action.key]: action.data },\n        owners: { ...state.owners, [action.key]: action.owner },\n      };\n    case \"clear\": {\n      const { [action.key]: _, ...rest } = state.modals as Record<string, unknown>;\n      return { ...state, modals: rest as Partial<IModalDataMap> };\n    }\n    case \"setResult\":\n      return { ...state, results: { ...state.results, [action.key]: action.value } };\n    case \"clearResult\": {\n      const { [action.key]: _, ...rest } = state.results as Record<string, unknown>;\n      return { ...state, results: rest as Partial<IModalResultMap> };\n    }\n    default:\n      return state;\n  }\n}\n\nconst initialModalState: IModalState = { modals: {}, results: {}, owners: {} };\n\nexport type IModalDispatch = (action: IModalAction) => void;\n\nconst noopModalDispatch: IModalDispatch = () => {};\n\nconst ModalStateContext = createContext<IModalState>(initialModalState);\nconst ModalDispatchContext = createContext<IModalDispatch>(noopModalDispatch);\n\nexport function ModalStateProvider(props: { children: ReactNode }): JSX.Element {\n  const [state, dispatch] = useReducer(modalReducer, initialModalState);\n  return (\n    <ModalDispatchContext.Provider value={dispatch}>\n      <ModalStateContext.Provider value={state}>{props.children}</ModalStateContext.Provider>\n    </ModalDispatchContext.Provider>\n  );\n}\n\nexport function useIsModalAvailable(): boolean {\n  return useContext(ModalDispatchContext) !== noopModalDispatch;\n}\n\nexport function useModalState(): IModalState {\n  return useContext(ModalStateContext);\n}\n\nexport function useModalDispatch(): IModalDispatch {\n  return useContext(ModalDispatchContext);\n}\n\nexport function useModalData<K extends keyof IModalDataMap>(key: K): IModalDataMap[K] | undefined {\n  const state = useModalState();\n  return state.modals[key];\n}\n\nexport function Modal_open<K extends keyof IModalDataMap>(\n  dispatch: IModalDispatch,\n  key: K,\n  data: IModalDataMap[K],\n  owner?: string\n): void {\n  dispatch({ type: \"open\", key, data, owner });\n}\n\nexport function Modal_setResult<K extends keyof IModalResultMap>(\n  dispatch: IModalDispatch,\n  key: K,\n  value: IModalResultMap[K]\n): void {\n  dispatch({ type: \"setResult\", key, value });\n}\n\nexport function Modal_clear(dispatch: IModalDispatch, key: keyof IModalDataMap): void {\n  dispatch({ type: \"clear\", key });\n}\n\nexport function useModalResult<K extends keyof IModalResultMap>(\n  key: K,\n  callback: (value: IModalResultMap[K]) => void\n): void {\n  const state = useModalState();\n  const dispatch = useModalDispatch();\n  const result = state.results[key];\n  const callbackRef = useRef(callback);\n  callbackRef.current = callback;\n  useEffect(() => {\n    if (result !== undefined) {\n      dispatch({ type: \"clearResult\", key });\n      callbackRef.current(result as IModalResultMap[K]);\n    }\n  }, [result]);\n}\n\nexport function useModal<K extends keyof IModalDataMap & keyof IModalResultMap>(\n  key: K,\n  callback: (value: IModalResultMap[K]) => void\n): (data: IModalDataMap[K]) => void {\n  const state = useModalState();\n  const dispatch = useModalDispatch();\n  const result = state.results[key];\n  const callbackRef = useRef(callback);\n  callbackRef.current = callback;\n  const isOpenRef = useRef(false);\n  const idRef = useRef<string | undefined>(undefined);\n  if (idRef.current == null) {\n    idRef.current = UidFactory_generateUid(8);\n  }\n  // Closing without a result leaves this hook armed — nothing tells it the modal went away.\n  // Ownership is what retires it: the next opener takes the key, and only the owner is\n  // allowed to consume a result.\n  const isOwner = state.owners[key] === idRef.current;\n\n  useEffect(() => {\n    if (result != null && isOpenRef.current && isOwner) {\n      isOpenRef.current = false;\n      dispatch({ type: \"clearResult\", key });\n      callbackRef.current(result as IModalResultMap[K]);\n    }\n  }, [result, dispatch, key, isOwner]);\n\n  return useCallback(\n    (data: IModalDataMap[K]) => {\n      isOpenRef.current = true;\n      Modal_open(dispatch, key, data, idRef.current);\n      getNavigationRef().then(({ navigationRef: ref }) => ref.navigate(key as never));\n    },\n    [dispatch, key]\n  );\n}\n","import { createContext, RefObject } from \"react\";\nimport type { Animated, NativeScrollEvent, NativeSyntheticEvent, ScrollView, View } from \"react-native\";\n\nexport type INavScreenScrollListener = (e: NativeSyntheticEvent<NativeScrollEvent>) => void;\n\nexport interface INavScreenScrollContextValue {\n  scrollRef: RefObject<ScrollView | null>;\n  scrollYRef: RefObject<number>;\n  // The same offset, fed by the native animation driver rather than by JS. Anything whose\n  // position is derived from the scroll has to interpolate this one — the ref and the\n  // listeners lag by a frame or two, which shows up as the content drifting on fast scrolls.\n  scrollAnimatedY: Animated.Value;\n  // The scroll area itself, for measuring where it ends on screen. Set only on screens with\n  // a footer, which are the only ones where anything overlaps the scroll content. Measure it\n  // rather than deriving a bottom from window height: on Android edge-to-edge the window and\n  // measureInWindow don't share an origin, so the two can't be mixed in one calculation.\n  viewportRef: RefObject<View | null>;\n  // Height of the screen's footer slot (0 when there is none) — what docked chrome occludes.\n  // State, not a ref, so anything positioning against it re-runs when the footer resizes.\n  footerHeight: number;\n  // How much of the scroll area's top edge the pinned sticky header covers, for content that\n  // wants to position itself against the actually-visible top rather than the viewport's.\n  stickyHeaderHeight: number;\n  addScrollListener: (listener: INavScreenScrollListener) => () => void;\n}\n\nexport const NavScreenScrollContext = createContext<INavScreenScrollContextValue | null>(null);\n","import { createContext, useContext } from \"react\";\nimport type { IState } from \"../models/state\";\nimport type { IDispatch } from \"../ducks/types\";\n\nexport interface IStateContext {\n  state: IState;\n  dispatch: IDispatch;\n}\n\nexport const StateContext = createContext<IStateContext | null>(null);\n\nexport function useAppState(): IStateContext {\n  const ctx = useContext(StateContext);\n  if (!ctx) {\n    throw new Error(\"StateContext not provided\");\n  }\n  return ctx;\n}\n","export function getNavigationService(): Promise<typeof import(\"./navigationService\")> {\n  return import(\"./navigationService\");\n}\n\nexport function getNavigationRef(): Promise<typeof import(\"./navigationRef\")> {\n  return import(\"./navigationRef\");\n}\n\nexport function getNavigationContext(): Promise<(typeof import(\"@react-navigation/native\"))[\"NavigationContext\"]> {\n  return import(\"@react-navigation/native\").then((mod) => mod.NavigationContext);\n}\n","import type { JSX } from \"react\";\nimport { Platform, View } from \"react-native\";\nimport { FastText } from \"../../../components/primitives/fastText\";\nimport { PlannerHighlighter_segments } from \"../plannerHighlighter\";\nimport { Tailwind_semantic } from \"../../../utils/tailwindConfig\";\nimport { StyledText, StyledText_cls } from \"../../../utils/styledText\";\nimport { useRem } from \"../../../utils/useRem\";\n\nconst MONO_FONT_FAMILY = Platform.select({\n  web: \"Iosevka Web, Iosevka, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace\",\n  ios: \"Iosevka\",\n  android: \"Iosevka-Regular\",\n  default: \"monospace\",\n});\n\ninterface IPlannerCodeBlockProps {\n  script: string;\n  className?: string;\n  // Readers who can't scroll sideways to the rest of the line (a panel inside another\n  // scroller) take the ragged wrap over the missing half. Newlines and indentation survive it.\n  wrap?: boolean;\n}\n\nfunction colorForClass(clazz: string | null): string | undefined {\n  if (!clazz) {\n    return undefined;\n  }\n  const syntax = Tailwind_semantic().syntax;\n  if (clazz.includes(\"tok-variableName\")) {\n    return syntax.variable;\n  }\n  if (clazz.includes(\"tok-keyword\")) {\n    return syntax.keyword;\n  }\n  if (clazz.includes(\"tok-literal\")) {\n    return syntax.literal;\n  }\n  if (clazz.includes(\"tok-meta\")) {\n    return syntax.attributeName;\n  }\n  if (clazz.includes(\"tok-comment\")) {\n    return syntax.comment;\n  }\n  if (clazz.includes(\"tok-atom\")) {\n    return syntax.atom;\n  }\n  if (clazz.includes(\"tok-propertyName\")) {\n    return syntax.comment;\n  }\n  if (clazz.includes(\"tok-attributeName\")) {\n    return syntax.attributeName;\n  }\n  if (clazz.includes(\"tok-attributeValue\")) {\n    return syntax.attributeValue;\n  }\n  if (clazz.includes(\"tok-number\")) {\n    return syntax.literal;\n  }\n  if (clazz.includes(\"tok-string\")) {\n    return syntax.variable;\n  }\n  return undefined;\n}\n\nexport function PlannerCodeBlock(props: IPlannerCodeBlockProps): JSX.Element {\n  const cls = StyledText_cls(useRem());\n  const fontSize = cls(props.className ?? \"text-base\").fontSize;\n  const builder = new StyledText();\n  for (const segment of PlannerHighlighter_segments(props.script)) {\n    const color = colorForClass(segment.clazz);\n    builder.add(segment.text, color != null ? { color } : undefined);\n  }\n  const { text, fragments } = builder.build();\n  // No internal scroller: callers that need horizontal scroll wrap this in a ScrollView\n  // (e.g. simpleMarkdown, editProgramV2TextExercises) or rely on web `.code.block` overflow.\n  return (\n    <View className=\"block code\">\n      <FastText\n        text={text}\n        fragments={fragments}\n        fontFamily={MONO_FONT_FAMILY}\n        fontSize={fontSize}\n        color={Tailwind_semantic().text.primary}\n        noWrap={!props.wrap}\n        preserveWhitespace={props.wrap}\n      />\n    </View>\n  );\n}\n","import { JSX, useState } from \"react\";\nimport { Platform, View } from \"react-native\";\nimport { Text } from \"../../../components/primitives/text\";\nimport { IPlannerState, IPlannerUiFocusedExercise, ISetResults, ISetSplit } from \"../models/types\";\nimport { ObjectUtils_keys } from \"../../../utils/object\";\nimport { PlannerWeekMuscles } from \"./plannerWeekMuscles\";\nimport { IExerciseKind } from \"../../../models/exercise\";\nimport { ILensDispatch } from \"../../../utils/useLensReducer\";\nimport { LinkButton } from \"../../../components/linkButton\";\nimport { lb } from \"lens-shmens\";\nimport { IScreenMuscle, ISettings } from \"../../../types\";\nimport { n } from \"../../../utils/math\";\nimport { Muscle_getMuscleGroupName } from \"../../../models/muscle\";\nimport { getNavigationService } from \"../../../navigation/navUtils\";\nimport { CollectionUtils_sort } from \"../../../utils/collection\";\nimport { SendMessage_isIosOrAndroid } from \"../../../utils/sendMessage\";\n\ninterface IPlannerWeekStatsProps {\n  setResults: ISetResults;\n  colorize: boolean;\n  frequency: boolean;\n  settings: ISettings;\n  dispatch: ILensDispatch<IPlannerState>;\n  onEditSettings?: () => void;\n  focusedExercise?: IPlannerUiFocusedExercise;\n}\n\nexport function PlannerStats(props: IPlannerWeekStatsProps): JSX.Element {\n  const { setResults, settings, frequency, dispatch, focusedExercise, onEditSettings } = props;\n  const showLink = !frequency;\n  return (\n    <View className=\"mb-2\" data-testid=\"planner-stats\" testID=\"planner-stats\">\n      <Text className=\"text-sm\">\n        <Text className=\"text-sm text-text-secondary\">Total Sets:</Text> {setResults.total}\n      </Text>\n      <Text className=\"text-sm\">\n        <Text className=\"text-sm text-text-secondary\">Strength Sets: </Text>\n        <Text\n          className={`text-sm ${\n            props.colorize ? colorPctValue(setResults.total, setResults.strength, settings.planner.strengthSetsPct) : \"\"\n          }`}\n        >\n          {setResults.strength}\n          {setResults.total > 0 ? `, ${Math.round((setResults.strength * 100) / setResults.total)}%` : \"\"}\n        </Text>\n      </Text>\n      <Text className=\"mb-2 text-sm\">\n        <Text className=\"text-sm text-text-secondary\">Hypertrophy Sets: </Text>\n        <Text\n          className={`text-sm ${\n            props.colorize\n              ? colorPctValue(setResults.total, setResults.hypertrophy, settings.planner.hypertrophySetsPct)\n              : \"\"\n          }`}\n        >\n          {setResults.hypertrophy}\n          {setResults.total > 0 ? `, ${Math.round((setResults.hypertrophy * 100) / setResults.total)}%` : \"\"}\n        </Text>\n      </Text>\n      <Text className=\"text-sm\">\n        {labelSet(\"Upper Sets\", showLink, [\"upper\"], [], dispatch, focusedExercise)}{\" \"}\n        <PlannerSetSplit\n          split={setResults.upper}\n          settings={settings}\n          shouldIncludeFrequency={frequency}\n          textSize=\"text-sm\"\n        />\n      </Text>\n      <Text className=\"text-sm\">\n        {labelSet(\"Lower Sets\", showLink, [\"lower\"], [], dispatch, focusedExercise)}{\" \"}\n        <PlannerSetSplit\n          split={setResults.lower}\n          settings={settings}\n          shouldIncludeFrequency={frequency}\n          textSize=\"text-sm\"\n        />\n      </Text>\n      <Text className=\"text-sm\">\n        {labelSet(\"Core Sets\", showLink, [\"core\"], [], dispatch, focusedExercise)}{\" \"}\n        <PlannerSetSplit\n          split={setResults.core}\n          settings={settings}\n          shouldIncludeFrequency={frequency}\n          textSize=\"text-sm\"\n        />\n      </Text>\n      <Text className=\"text-sm\">\n        {labelSet(\"Push Sets\", showLink, [\"push\"], [], dispatch, focusedExercise)}{\" \"}\n        <PlannerSetSplit\n          split={setResults.push}\n          settings={settings}\n          shouldIncludeFrequency={frequency}\n          textSize=\"text-sm\"\n        />\n      </Text>\n      <Text className=\"text-sm\">\n        {labelSet(\"Pull Sets\", showLink, [\"pull\"], [], dispatch, focusedExercise)}{\" \"}\n        <PlannerSetSplit\n          split={setResults.pull}\n          settings={settings}\n          shouldIncludeFrequency={frequency}\n          textSize=\"text-sm\"\n        />\n      </Text>\n      <Text className=\"mb-4 text-sm\">\n        {labelSet(\"Legs Sets\", showLink, [\"legs\"], [], dispatch, focusedExercise)}{\" \"}\n        <PlannerSetSplit\n          split={setResults.legs}\n          settings={settings}\n          shouldIncludeFrequency={frequency}\n          textSize=\"text-sm\"\n        />\n      </Text>\n\n      <View className=\"w-32 mb-2\">\n        <PlannerWeekMuscles settings={props.settings} data={setResults.muscleGroup} />\n      </View>\n\n      {onEditSettings && (\n        <View className=\"py-2\">\n          <LinkButton name=\"planner-stats-edit-settings\" className=\"text-xs\" onClick={() => onEditSettings()}>\n            Edit Weekly Muscle Range Settings\n          </LinkButton>\n        </View>\n      )}\n\n      {ObjectUtils_keys(setResults.muscleGroup).map((muscleGroup) => {\n        return (\n          <Text key={muscleGroup} className=\"text-sm\">\n            {labelSet(\n              Muscle_getMuscleGroupName(muscleGroup, props.settings),\n              showLink,\n              [],\n              [muscleGroup],\n              dispatch,\n              focusedExercise\n            )}{\" \"}\n            <PlannerSetSplit\n              split={setResults.muscleGroup[muscleGroup]}\n              settings={settings}\n              shouldIncludeFrequency={frequency}\n              muscle={props.colorize ? muscleGroup : undefined}\n              textSize=\"text-sm\"\n            />\n          </Text>\n        );\n      })}\n    </View>\n  );\n}\n\nexport function labelSet(\n  label: string,\n  showLink: boolean,\n  types: IExerciseKind[],\n  muscleGroups: IScreenMuscle[],\n  dispatch: ILensDispatch<IPlannerState>,\n  focusedExercise?: IPlannerUiFocusedExercise\n): JSX.Element {\n  if (showLink && focusedExercise) {\n    return (\n      <LinkButton\n        name={`planner-stats-${label}`}\n        className=\"text-sm font-normal\"\n        onClick={() => {\n          dispatch(\n            lb<IPlannerState>().p(\"ui\").p(\"modalExercise\").record({\n              focusedExercise,\n              types,\n              muscleGroups,\n            }),\n            \"Open exercise modal\"\n          );\n        }}\n      >\n        {label}:\n      </LinkButton>\n    );\n  } else {\n    return <Text className=\"text-sm text-text-secondary\">{label}:</Text>;\n  }\n}\n\nexport function PlannerSetSplit(props: {\n  split: ISetSplit;\n  settings: ISettings;\n  shouldIncludeFrequency: boolean;\n  muscle?: IScreenMuscle;\n  textSize?: string;\n}): JSX.Element {\n  const { split, settings, shouldIncludeFrequency, muscle } = props;\n  const isDesktopWeb = Platform.OS === \"web\" && !SendMessage_isIosOrAndroid();\n  const [showTooltip, setShowTooltip] = useState(false);\n  const total = split.strength + split.hypertrophy;\n  const frequency = Object.keys(split.frequency).length;\n  const setColor = muscle\n    ? colorRangeValue(\n        total,\n        settings.planner.weeklyRangeSets[muscle]?.[0] ?? 0,\n        settings.planner.weeklyRangeSets[muscle]?.[1] ?? 0\n      )\n    : \"\";\n  const setDirection = muscle\n    ? directionValue(\n        total,\n        settings.planner.weeklyRangeSets[muscle]?.[0] ?? 0,\n        settings.planner.weeklyRangeSets[muscle]?.[1] ?? 0\n      )\n    : \"\";\n  const frequencyColor = muscle ? colorThresholdValue(frequency, settings.planner.weeklyFrequency[muscle] ?? 0) : \"\";\n\n  const handlePress =\n    !isDesktopWeb && split.exercises.length > 0\n      ? () =>\n          getNavigationService().then(({ navigateToModal }) =>\n            navigateToModal(\"setSplitModal\", { exercises: split.exercises })\n          )\n      : undefined;\n\n  const textSize = props.textSize ?? \"\";\n\n  const totalNode = (\n    <Text className={`${textSize} ${setColor}`.trim()}>\n      {n(total, 0)}\n      {setDirection}\n    </Text>\n  );\n\n  const trailingNode = (\n    <>\n      {\" \"}\n      {total > 0 && (\n        <Text className={textSize}>\n          ({split.strength > 0 && <Text className={textSize}>{n(split.strength, 0)}s</Text>}\n          {split.strength > 0 && split.hypertrophy > 0 && \", \"}\n          {split.hypertrophy > 0 && <Text className={textSize}>{n(split.hypertrophy, 0)}h</Text>})\n        </Text>\n      )}\n      {shouldIncludeFrequency && frequency > 0 && (\n        <Text className={`${textSize} ${frequencyColor}`.trim()}>, {Object.keys(split.frequency).length}d</Text>\n      )}\n    </>\n  );\n\n  if (isDesktopWeb) {\n    const hasExercises = split.exercises.length > 0;\n    return (\n      <Text className={textSize}>\n        <span\n          className=\"relative\"\n          onMouseEnter={() => hasExercises && setShowTooltip(true)}\n          onMouseLeave={() => setShowTooltip(false)}\n          onClick={() => hasExercises && setShowTooltip((v) => !v)}\n        >\n          {totalNode}\n          {showTooltip && hasExercises && <PlannerStatsTooltip split={split} />}\n        </span>\n        {trailingNode}\n      </Text>\n    );\n  }\n\n  return (\n    <Text onPress={handlePress} className={textSize}>\n      {totalNode}\n      {trailingNode}\n    </Text>\n  );\n}\n\nfunction PlannerStatsTooltip(props: { split: ISetSplit }): JSX.Element | null {\n  const exercises = CollectionUtils_sort(props.split.exercises, (a, b) => {\n    if ((a.isSynergist && b.isSynergist) || (!a.isSynergist && !b.isSynergist)) {\n      return a.exerciseName.localeCompare(b.exerciseName);\n    } else if (a.isSynergist) {\n      return 1;\n    } else {\n      return -1;\n    }\n  });\n  if (exercises.length === 0) {\n    return null;\n  }\n\n  return (\n    <div className=\"absolute z-10 px-3 py-2 text-xs border bg-background-default border-border-neutral rounded-xl text-text-primary planner-stats-tooltip\">\n      <ul style={{ minWidth: \"14rem\" }}>\n        {exercises.map((exercise) => {\n          const totalSets = exercise.strengthSets + exercise.hypertrophySets;\n          return (\n            <li\n              key={exercise.exerciseName}\n              className={`font-bold ${exercise.isSynergist ? \"text-text-secondary\" : \"text-text-primary\"}`}\n            >\n              {exercise.exerciseName}: {n(totalSets)} ({n(exercise.strengthSets)}s, {n(exercise.hypertrophySets)}h)\n            </li>\n          );\n        })}\n      </ul>\n    </div>\n  );\n}\n\nexport function colorPctValue(total: number, num: number, target: number): string {\n  const strengthPct = total > 0 ? Math.round((num * 100) / total) : 0;\n  if (strengthPct >= target) {\n    return \"text-text-success\";\n  } else if (strengthPct >= target - 10) {\n    return \"text-icon-yellow\";\n  } else {\n    return \"text-text-error\";\n  }\n}\n\nexport function colorRangeValue(value: number, min: number, max: number): string {\n  if (value >= min && value <= max) {\n    return \"text-text-success\";\n  } else if (value >= min * 0.7 && value <= max * 1.3) {\n    return \"text-icon-yellow\";\n  } else {\n    return \"text-text-error\";\n  }\n}\n\nexport function directionValue(value: number, min: number, max: number): string {\n  if (value < min) {\n    return \"↑\";\n  } else if (value > max) {\n    return \"↓\";\n  } else {\n    return \"\";\n  }\n}\n\nfunction colorThresholdValue(value: number, threshold: number): string {\n  if (value >= threshold) {\n    return \"text-text-success\";\n  } else if (value >= threshold * 0.5) {\n    return \"text-icon-yellow\";\n  } else {\n    return \"text-text-error\";\n  }\n}\n","import type { JSX } from \"react\";\nimport { View } from \"react-native\";\nimport { ObjectUtils_keys } from \"../../../utils/object\";\nimport { BackMusclesSvg, IMuscleStyle } from \"../../../components/muscles/images/backMusclesSvg\";\nimport { FrontMusclesSvg } from \"../../../components/muscles/images/frontMusclesSvg\";\nimport { IMuscleGroupSetSplit } from \"../models/types\";\nimport { ISettings, IScreenMuscle } from \"../../../types\";\nimport { Tailwind_semantic } from \"../../../utils/tailwindConfig\";\n\ninterface IPlannerMusclesProps {\n  settings: ISettings;\n  data: IMuscleGroupSetSplit;\n}\n\nexport function PlannerWeekMuscles(props: IPlannerMusclesProps): JSX.Element {\n  const muscleData = ObjectUtils_keys(props.data).reduce<Partial<Record<IScreenMuscle, IMuscleStyle>>>((memo, key) => {\n    const setNumber = props.data[key].strength + props.data[key].hypertrophy;\n    const [, max] = props.settings.planner.weeklyRangeSets[key] ?? [0, 0];\n    const value = setNumber / max;\n    memo[key] = { opacity: value, fill: Tailwind_semantic().text.link };\n    return memo;\n  }, {});\n\n  return (\n    <View className=\"flex-row\">\n      <View className=\"relative flex-1\">\n        <BackMusclesSvg defaultOpacity={0} muscles={muscleData} contour={{ fill: Tailwind_semantic().text.link }} />\n      </View>\n      <View className=\"relative flex-1\">\n        <FrontMusclesSvg defaultOpacity={0} muscles={muscleData} contour={{ fill: Tailwind_semantic().text.link }} />\n      </View>\n    </View>\n  );\n}\n","import type { JSX } from \"react\";\nimport { View } from \"react-native\";\nimport { Text } from \"../../../components/primitives/text\";\nimport { IPlannerState } from \"../models/types\";\nimport { PlannerStats } from \"./plannerStats\";\nimport { PlannerStatsUtils_calculateSetResults } from \"../models/plannerStatsUtils\";\nimport { IPlannerEvalResult } from \"../plannerExerciseEvaluator\";\nimport { ILensDispatch } from \"../../../utils/useLensReducer\";\nimport { ISettings } from \"../../../types\";\n\ninterface IPlannerWeekStatsProps {\n  evaluatedDays: IPlannerEvalResult[];\n  hideTitle?: boolean;\n  settings: ISettings;\n  onEditSettings?: () => void;\n  dispatch: ILensDispatch<IPlannerState>;\n}\n\nexport function PlannerWeekStats(props: IPlannerWeekStatsProps): JSX.Element {\n  const { settings } = props;\n\n  const evaluatedDays = props.evaluatedDays;\n  const setResults = PlannerStatsUtils_calculateSetResults(evaluatedDays, settings);\n\n  return (\n    <View>\n      {!props.hideTitle && <Text className=\"mb-2 text-xl font-bold\">Week Stats</Text>}\n      <PlannerStats\n        dispatch={props.dispatch}\n        onEditSettings={props.onEditSettings}\n        setResults={setResults}\n        settings={settings}\n        colorize={true}\n        frequency={true}\n      />\n    </View>\n  );\n}\n","import { IPlannerProgramExerciseWarmupSet, IPlannerProgramProperty, IExportedPlannerProgram } from \"./types\";\nimport { parser as plannerExerciseParser } from \"../plannerExerciseParser\";\nimport {\n  IPlannerEvalFullResult,\n  IPlannerEvalResult,\n  PlannerExerciseEvaluator,\n  PlannerSyntaxError,\n} from \"../plannerExerciseEvaluator\";\nimport {\n  IAllCustomExercises,\n  IAllEquipment,\n  IDayData,\n  IExerciseType,\n  IPlannerProgram,\n  IPlannerProgramWeek,\n  IProgram,\n  ISettings,\n} from \"../../../types\";\nimport {\n  ObjectUtils_isEqual,\n  ObjectUtils_clone,\n  ObjectUtils_filter,\n  ObjectUtils_findKeyByExpression,\n} from \"../../../utils/object\";\nimport { PlannerExerciseEvaluatorText } from \"../plannerExerciseEvaluatorText\";\nimport { IPlannerTopLineItem } from \"../plannerExerciseEvaluator\";\nimport {\n  IEvaluatedProgram,\n  IExportedProgram,\n  Program_evaluate,\n  Program_create,\n  Program_getAllProgramExercises,\n  Program_exportedPlannerProgramToExportedProgram,\n} from \"../../../models/program\";\nimport {\n  PlannerEvaluator_compareExerciseOrder,\n  PlannerEvaluator_evaluate,\n  PlannerEvaluator_evaluateFull,\n} from \"../plannerEvaluator\";\nimport { IWeightChange } from \"../../../models/programExercise\";\nimport { Storage_getDefault, Storage_get } from \"../../../models/storage\";\nimport { Weight_eqNull } from \"../../../models/weight\";\nimport { PP_iterate2, PP_iterate } from \"../../../models/pp\";\nimport { IEither } from \"../../../utils/types\";\nimport { getLatestMigrationVersion } from \"../../../migrations/migrations\";\nimport { ProgramToPlanner } from \"../../../models/programToPlanner\";\nimport { PlannerKey_fromLabelNameAndEquipment, PlannerKey_fromExerciseType } from \"../plannerKey\";\nimport { Exercise_get } from \"../../../models/exercise\";\nimport { UidFactory_generateUid } from \"../../../utils/generator\";\nimport { CollectionUtils_compact } from \"../../../utils/collection\";\n\nexport type IExerciseTypeToProperties = Record<string, (IPlannerProgramProperty & { dayData: Required<IDayData> })[]>;\nexport type IExerciseTypeToWarmupSets = Record<string, IPlannerProgramExerciseWarmupSet[] | undefined>;\n\nexport class PlannerDayDataError extends Error {\n  constructor(\n    message: string,\n    public readonly dayData: Required<IDayData>\n  ) {\n    super(message);\n  }\n}\n\nexport type IDereuseDecision = \"all\" | \"weight\" | \"rpe\" | \"timer\";\n\nexport function PlannerProgram_isValid(program: IPlannerProgram | undefined, settings: ISettings): boolean {\n  if (!program) {\n    return false;\n  }\n  const { evaluatedWeeks } = PlannerProgram_evaluate(program, settings);\n  return evaluatedWeeks.every((week) => week.every((day) => day.success));\n}\n\nexport function PlannerProgram_replaceWeight(\n  program: IEvaluatedProgram,\n  programExerciseId: string,\n  weightChanges: IWeightChange[]\n): IEvaluatedProgram {\n  if (weightChanges.every((wc) => ObjectUtils_isEqual(wc.originalWeight, wc.weight))) {\n    return program;\n  }\n  const newEvalutedProgram = ObjectUtils_clone(program);\n  PP_iterate2(newEvalutedProgram.weeks, (ex) => {\n    if (ex.key === programExerciseId) {\n      for (const setVariation of ex.evaluatedSetVariations) {\n        for (const set of setVariation.sets) {\n          const weightChange = weightChanges.find((wc) => Weight_eqNull(wc.originalWeight, set.weight));\n          if (weightChange != null) {\n            set.weight = weightChange.weight;\n          }\n        }\n      }\n    }\n  });\n  return newEvalutedProgram;\n}\n\n// Evaluation throws PlannerSyntaxError rather than returning it, and its prototype chain\n// doesn't survive the ES5 downlevel — `instanceof Error` is false for it, so a caught planner\n// error has to be read structurally or it stringifies to \"[object Object]\".\nexport function PlannerProgram_thrownErrorMessage(error: unknown): string {\n  if (typeof error === \"object\" && error != null && typeof (error as { message?: unknown }).message === \"string\") {\n    return (error as { message: string }).message;\n  }\n  return String(error);\n}\n\nexport function PlannerProgram_replaceExercise(\n  planner: IPlannerProgram,\n  key: string,\n  newLabel: string | undefined,\n  toExerciseType: IExerciseType | string,\n  settings: ISettings,\n  dayData?: Required<IDayData>\n): IPlannerProgram {\n  const evaluatedProgram = ObjectUtils_clone(Program_evaluate({ ...Program_create(\"Temp\"), planner }, settings));\n  const allExercises = Program_getAllProgramExercises(evaluatedProgram);\n  let labelSuffix: string | undefined = undefined;\n  let noConflicts = false;\n\n  function getLabel(label?: string): string | undefined {\n    return (newLabel ?? label) || labelSuffix\n      ? CollectionUtils_compact([newLabel ?? label, labelSuffix]).join(\"-\")\n      : undefined;\n  }\n\n  if (dayData) {\n    noConflicts = true;\n  }\n\n  while (!noConflicts) {\n    const conflictingExercises = allExercises.filter((e) => {\n      const newKey =\n        typeof toExerciseType === \"string\"\n          ? PlannerKey_fromLabelNameAndEquipment(getLabel(e.label), toExerciseType, undefined, settings.exercises)\n          : PlannerKey_fromExerciseType(toExerciseType, getLabel(e.label));\n      return (\n        e.key === newKey && (!dayData || (dayData.week !== e.dayData.week && dayData.dayInWeek !== e.dayData.dayInWeek))\n      );\n    });\n    if (conflictingExercises.length > 0) {\n      noConflicts = false;\n      labelSuffix = UidFactory_generateUid(3);\n    } else {\n      noConflicts = true;\n    }\n  }\n\n  const renameMapping: Record<string, { to: string; dayData?: Required<IDayData> }> = {};\n  PP_iterate2(evaluatedProgram.weeks, (exercise, weekIndex, dayInWeekIndex) => {\n    if (exercise.key === key) {\n      if (!dayData || (dayData.week === weekIndex + 1 && dayData.dayInWeek === dayInWeekIndex + 1)) {\n        exercise.exerciseType = typeof toExerciseType === \"string\" ? undefined : toExerciseType;\n        const newLabel2 = getLabel(exercise.label);\n        exercise.label = newLabel2;\n        // Replacing collapses any multi-variation ladder into a single current variation for the new\n        // target, so serialization/identity come from the new exercise instead of the stale ladder.\n        const newName =\n          typeof toExerciseType === \"string\" ? toExerciseType : Exercise_get(toExerciseType, settings.exercises).name;\n        exercise.exerciseVariations = [{ exerciseType: exercise.exerciseType, name: newName, isCurrent: true }];\n        if (typeof toExerciseType === \"string\") {\n          exercise.notused = true;\n          exercise.fullName = `${newLabel2 ? `${newLabel2}: ` : \"\"}${toExerciseType}`;\n        }\n        const newKey =\n          typeof toExerciseType === \"string\"\n            ? PlannerKey_fromLabelNameAndEquipment(newLabel2, toExerciseType, undefined, settings.exercises)\n            : PlannerKey_fromExerciseType(toExerciseType, newLabel2);\n        renameMapping[exercise.key] = { to: newKey, dayData };\n        exercise.key = newKey;\n      }\n    }\n  });\n  return new ProgramToPlanner(evaluatedProgram, settings).convertToPlanner({ renameMapping });\n}\n\nexport function PlannerProgram_replaceAndValidateExercise(\n  program: IProgram,\n  key: string,\n  toExerciseType: IExerciseType,\n  settings: ISettings,\n  dayData?: Required<IDayData>\n): IEither<IProgram, string> {\n  const newPlanner = PlannerProgram_replaceExercise(\n    program.planner!,\n    key,\n    undefined,\n    toExerciseType,\n    settings,\n    dayData\n  );\n  const { evaluatedWeeks } = PlannerEvaluator_evaluate(newPlanner, settings);\n  let error: PlannerSyntaxError | undefined;\n  for (const week of evaluatedWeeks) {\n    for (const day of week) {\n      if (!day.success) {\n        error = day.error;\n        break;\n      }\n    }\n  }\n  if (error) {\n    return { success: false, error: error.message };\n  } else {\n    return { success: true, data: { ...program, planner: newPlanner } };\n  }\n}\n\nexport function PlannerProgram_modifyTopLineItems(\n  aPlannerProgram: IPlannerProgram,\n  settings: ISettings,\n  firstPass: (\n    line: IPlannerTopLineItem,\n    weekIndex: number,\n    dayInWeekIndex: number,\n    dayIndex: number,\n    lineIndex: number\n  ) => IPlannerTopLineItem\n): IPlannerProgram {\n  let dayIndex = 0;\n  const plannerProgram = ObjectUtils_clone(aPlannerProgram);\n  const mapping = plannerProgram.weeks.map((week, weekIndex) => {\n    return week.days.map((day, dayInWeekIndex) => {\n      const tree = plannerExerciseParser.parse(day.exerciseText);\n      const evaluator = new PlannerExerciseEvaluator(day.exerciseText, settings, \"perday\", {\n        day: dayIndex + 1,\n        dayInWeek: dayInWeekIndex + 1,\n        week: weekIndex + 1,\n      });\n      dayIndex += 1;\n      const map = evaluator.topLineMap(tree.topNode);\n      return map;\n    });\n  });\n\n  dayIndex = 0;\n  for (let weekIndex = 0; weekIndex < mapping.length; weekIndex += 1) {\n    const week = mapping[weekIndex];\n    for (let dayInWeekIndex = 0; dayInWeekIndex < week.length; dayInWeekIndex += 1) {\n      const day = week[dayInWeekIndex];\n      for (let lineIndex = 0; lineIndex < day.length; lineIndex += 1) {\n        const line = day[lineIndex];\n        const newLine = firstPass(line, weekIndex, dayInWeekIndex, dayIndex, lineIndex);\n        day[lineIndex] = newLine;\n      }\n      dayIndex += 1;\n    }\n  }\n\n  for (let weekIndex = 0; weekIndex < mapping.length; weekIndex += 1) {\n    const programWeek = plannerProgram.weeks[weekIndex];\n    const week = mapping[weekIndex];\n    for (let dayInWeekIndex = 0; dayInWeekIndex < week.length; dayInWeekIndex += 1) {\n      const day = week[dayInWeekIndex];\n      const programDay = programWeek.days[dayInWeekIndex];\n      let str = \"\";\n      for (const line of day) {\n        str += PlannerProgram_topLineItemToText(line);\n      }\n      programDay.exerciseText = str.trim();\n    }\n  }\n\n  return plannerProgram;\n}\n\nexport function PlannerProgram_topLineItemToText(line: IPlannerTopLineItem): string {\n  let str = \"\";\n  if (line.type === \"description\") {\n    //\n  } else if (line.type === \"exercise\") {\n    if (!line.used) {\n      if (line.descriptions && line.descriptions.length > 0) {\n        str += `${line.descriptions.join(\"\\n\\n\")}\\n`;\n      }\n      let repeatStr = \"\";\n      if ((line.order != null && line.order !== 0) || (line.repeatRanges && line.repeatRanges.length > 0)) {\n        const repeatParts = [];\n        if (line.order != null && line.order !== 0) {\n          repeatParts.push(line.order);\n        }\n        if (line.repeatRanges && line.repeatRanges.length > 0) {\n          repeatParts.push(line.repeatRanges.join(\",\"));\n        }\n        repeatStr = `[${repeatParts.join(\",\")}]`;\n      }\n      str += `${line.fullName}${repeatStr} / ${line.sections}\\n`;\n    }\n  } else {\n    str += line.value + \"\\n\";\n  }\n  return str;\n}\n\nexport function PlannerProgram_switchToUnit(plannerProgram: IPlannerProgram, settings: ISettings): IPlannerProgram {\n  const newPlannerProgram = ObjectUtils_clone(plannerProgram);\n  for (const week of newPlannerProgram.weeks) {\n    for (const day of week.days) {\n      const evaluator = new PlannerExerciseEvaluator(day.exerciseText, settings, \"perday\");\n      const tree = plannerExerciseParser.parse(day.exerciseText);\n      day.exerciseText = evaluator.switchWeightsToUnit(tree.topNode, settings);\n    }\n  }\n  return newPlannerProgram;\n}\n\nexport function PlannerProgram_hasNonSelectedWeightUnit(plannerProgram: IPlannerProgram, settings: ISettings): boolean {\n  for (const week of plannerProgram.weeks) {\n    for (const day of week.days) {\n      const tree = plannerExerciseParser.parse(day.exerciseText);\n      const evaluator = new PlannerExerciseEvaluator(day.exerciseText, settings, \"perday\");\n      if (evaluator.hasWeightInUnit(tree.topNode, settings.units === \"kg\" ? \"lb\" : \"kg\")) {\n        return true;\n      }\n    }\n  }\n  return false;\n}\n\nexport function PlannerProgram_compact(\n  oldPlannerProgram: IPlannerProgram,\n  plannerProgram: IPlannerProgram,\n  settings: ISettings,\n  additionalRepeatingExercises?: Set<string>,\n  renameMapping?: Record<string, { to: string; dayData?: Required<IDayData> }>\n): IPlannerProgram {\n  let dayIndex = 0;\n  const repeatingExercises = new Set<string>();\n  const { evaluatedWeeks } = PlannerProgram_evaluate(ObjectUtils_clone(oldPlannerProgram), settings);\n  const { evaluatedWeeks: newEvaluatedWeeks } = PlannerProgram_evaluate(ObjectUtils_clone(plannerProgram), settings);\n  for (const ev of [evaluatedWeeks, newEvaluatedWeeks]) {\n    PP_iterate(ev, (exercise) => {\n      if (exercise.repeat != null && exercise.repeat.length > 0) {\n        repeatingExercises.add(exercise.key);\n      }\n    });\n  }\n  for (const ex of additionalRepeatingExercises || []) {\n    repeatingExercises.add(ex);\n  }\n\n  // The weeks that actually spell a repeating exercise out. A range may reach backwards\n  // (`tmpl[1-3]` written in week 3), so it can't just be scanned forward from the first week the\n  // exercise shows up in - that week may be a materialized copy with nothing to declare. There can\n  // be more than one declaration per key/day (`tmp[1-3]` in week 3 and `tmp[4-5]` in week 4), and\n  // each one owns its own range, so this is a set rather than a single week.\n  const declaringWeekIndexes: Record<string, Set<number>> = {};\n  PP_iterate(evaluatedWeeks, (exercise, weekIndex, dayInWeekIndex) => {\n    if (!exercise.isRepeat && exercise.repeat != null && exercise.repeat.length > 0) {\n      const declaringKey = `${exercise.key}_${dayInWeekIndex}`;\n      declaringWeekIndexes[declaringKey] = declaringWeekIndexes[declaringKey] || new Set();\n      declaringWeekIndexes[declaringKey].add(weekIndex);\n    }\n  });\n\n  // declaringWeekIndexes is keyed by the old program's exercise keys, while the lines being\n  // compacted come from the newly printed text - PlannerProgram_replaceExercise renames keys in\n  // between. Both the declaring lookup and claimWeek's `repeating` check have to go back through\n  // the rename to find the exercise they're talking about.\n  function oldKeyFor(value: string, weekIndex: number, dayInWeekIndex: number): string {\n    if (!renameMapping) {\n      return value;\n    }\n    const beforeRenaming = ObjectUtils_findKeyByExpression(\n      renameMapping,\n      (_, v) =>\n        v.to === value &&\n        (v.dayData == null || (v.dayData.week === weekIndex + 1 && v.dayData.dayInWeek === dayInWeekIndex + 1))\n    );\n    return beforeRenaming ?? value;\n  }\n\n  const lastDescriptions: Partial<Record<number, string | undefined>> = {};\n  plannerProgram.weeks.forEach((week) => {\n    week.days.forEach((day, dayInWeekIndex) => {\n      if (lastDescriptions[dayInWeekIndex] == null) {\n        lastDescriptions[dayInWeekIndex] = day.description;\n      } else if (lastDescriptions[dayInWeekIndex] === day.description) {\n        day.description = undefined;\n      } else {\n        lastDescriptions[dayInWeekIndex] = day.description;\n      }\n    });\n  });\n\n  const mapping = plannerProgram.weeks.map((week, weekIndex) => {\n    return week.days.map((day, dayInWeekIndex) => {\n      const tree = plannerExerciseParser.parse(day.exerciseText);\n      const evaluator = new PlannerExerciseEvaluator(day.exerciseText, settings, \"perday\", {\n        day: dayIndex + 1,\n        dayInWeek: dayInWeekIndex + 1,\n        week: weekIndex + 1,\n      });\n      dayIndex += 1;\n      const map = evaluator.topLineMap(tree.topNode);\n      return map;\n    });\n  });\n\n  // Declaring weeks go first, so a range written backwards (`tmpl[1-3]` in week 3) keeps the\n  // spelled-out line in the week that spells it out. Everything left over then compacts forward,\n  // which is what a repeat broken up by a mid-program change (`Squat[1-5]` splitting into `[1-2]`,\n  // week 3, `[4-5]`) needs.\n  for (const declaringPass of [true, false]) {\n    for (let weekIndex = 0; weekIndex < mapping.length; weekIndex += 1) {\n      const week = mapping[weekIndex];\n      for (dayIndex = 0; dayIndex < week.length; dayIndex += 1) {\n        const day = week[dayIndex];\n        for (const line of day) {\n          if (line.type !== \"exercise\" || line.used || !repeatingExercises.has(line.value)) {\n            continue;\n          }\n          const declaringWeeks = declaringWeekIndexes[`${oldKeyFor(line.value, weekIndex, dayIndex)}_${dayIndex}`];\n          if (!!declaringWeeks?.has(weekIndex) !== declaringPass) {\n            continue;\n          }\n          const claimWeek = (repeatWeekIndex: number): boolean => {\n            const repeatDay = mapping[repeatWeekIndex]?.[dayIndex];\n            const repeatedExercises = (repeatDay || []).filter((e) => {\n              if (\n                e.type !== \"exercise\" ||\n                e.used ||\n                e.value !== line.value ||\n                e.sectionsToReuse !== line.sectionsToReuse ||\n                e.exerciseIndex !== line.exerciseIndex ||\n                !ObjectUtils_isEqual(e.descriptions || [], line.descriptions || [])\n              ) {\n                return false;\n              }\n              const oldKey = oldKeyFor(line.value, repeatWeekIndex, dayIndex);\n              // A week that spells the exercise out owns its own range - only materialized copies\n              // are collapsible. Without this, `tmp[1-3]` in week 3 and `tmp[4-5]` in week 4 let\n              // week 1's copy swallow week 3's line, taking the progress block written on it.\n              if (declaringWeekIndexes[`${oldKey}_${dayIndex}`]?.has(repeatWeekIndex)) {\n                return false;\n              }\n              const oldDay = evaluatedWeeks[repeatWeekIndex][dayIndex];\n              const oldExercise = oldDay.success ? oldDay.data.find((ex) => ex.key === oldKey) : undefined;\n              return oldExercise?.repeating?.includes(weekIndex + 1);\n            });\n            for (const e of repeatedExercises) {\n              e.used = true;\n            }\n            return repeatedExercises.length > 0;\n          };\n          let firstWeek = weekIndex + 1;\n          let lastWeek = weekIndex + 1;\n          for (let repeatWeekIndex = weekIndex + 1; repeatWeekIndex < mapping.length; repeatWeekIndex += 1) {\n            if (!claimWeek(repeatWeekIndex)) {\n              break;\n            }\n            lastWeek = repeatWeekIndex + 1;\n          }\n          if (declaringPass) {\n            for (let repeatWeekIndex = weekIndex - 1; repeatWeekIndex >= 0; repeatWeekIndex -= 1) {\n              if (!claimWeek(repeatWeekIndex)) {\n                break;\n              }\n              firstWeek = repeatWeekIndex + 1;\n            }\n          }\n          line.repeatRanges = firstWeek === lastWeek ? [] : [`${firstWeek}-${lastWeek}`];\n        }\n      }\n    }\n  }\n\n  for (let weekIndex = 0; weekIndex < mapping.length; weekIndex += 1) {\n    const programWeek = plannerProgram.weeks[weekIndex];\n    const week = mapping[weekIndex];\n    for (dayIndex = 0; dayIndex < week.length; dayIndex += 1) {\n      const day = week[dayIndex];\n      const programDay = programWeek.days[dayIndex];\n      let str = \"\";\n      let ongoingDescriptions = false;\n      for (const line of day) {\n        if (line.type === \"description\") {\n          ongoingDescriptions = true;\n          //\n        } else if (line.type === \"exercise\") {\n          ongoingDescriptions = false;\n          if (!line.used) {\n            if (line.descriptions && line.descriptions.length > 0) {\n              str += `${line.descriptions.filter((d) => d.trim()).join(\"\\n\\n\")}\\n`;\n            }\n            let repeatStr = \"\";\n            if ((line.order != null && line.order !== 0) || (line.repeatRanges && line.repeatRanges.length > 0)) {\n              const repeatParts = [];\n              if (line.order != null && line.order !== 0) {\n                repeatParts.push(line.order);\n              }\n              if (line.repeatRanges && line.repeatRanges.length > 0) {\n                repeatParts.push(line.repeatRanges.join(\",\"));\n              }\n              repeatStr = `[${repeatParts.join(\",\")}]`;\n            }\n            str += [`${line.fullName}${repeatStr}`, line.sections].filter((r) => r).join(\" / \") + `\\n`;\n          }\n        } else if (line.type === \"empty\") {\n          if (!ongoingDescriptions) {\n            str += line.value + \"\\n\";\n          }\n        } else {\n          str += line.value + \"\\n\";\n        }\n      }\n      programDay.exerciseText = str.trim();\n    }\n  }\n\n  return plannerProgram;\n}\n\nexport function PlannerProgram_groupedTopLines(topLine: IPlannerTopLineItem[][][]): IPlannerTopLineItem[][][][] {\n  const groupedTopLine: IPlannerTopLineItem[][][][] = [];\n  for (let weekIndex = 0; weekIndex < topLine.length; weekIndex += 1) {\n    const topLineWeek = topLine[weekIndex];\n    groupedTopLine.push([]);\n    for (let dayInWeekIndex = 0; dayInWeekIndex < topLineWeek.length; dayInWeekIndex += 1) {\n      const topLineDay = topLineWeek[dayInWeekIndex];\n      const group: IPlannerTopLineItem[][] = [];\n      groupedTopLine[weekIndex].push(group);\n      let reset = true;\n      for (let lineIndex = 0; lineIndex < topLineDay.length; lineIndex += 1) {\n        if (reset) {\n          group.push([]);\n          reset = false;\n        }\n        const line = topLineDay[lineIndex];\n        group[group.length - 1] = group[group.length - 1] || [];\n        group[group.length - 1].push(line);\n        if (line.type === \"exercise\") {\n          reset = true;\n        }\n      }\n    }\n  }\n  for (const week of groupedTopLine) {\n    for (const day of week) {\n      day.sort((group1, group2) => {\n        const ex1 = group1.find((l) => l.type === \"exercise\");\n        const ex2 = group2.find((l) => l.type === \"exercise\");\n        if (ex1 == null || ex2 == null) {\n          return 0;\n        }\n        return PlannerEvaluator_compareExerciseOrder(ex1, ex2);\n      });\n    }\n  }\n  return groupedTopLine;\n}\n\nexport function PlannerProgram_topLineItems(\n  plannerProgram: IPlannerProgram,\n  settings: ISettings\n): IPlannerTopLineItem[][][] {\n  let dayIndex = 0;\n\n  const mapping = plannerProgram.weeks.map((week, weekIndex) => {\n    return week.days.map((day, dayInWeekIndex) => {\n      const tree = plannerExerciseParser.parse(day.exerciseText);\n      const evaluator = new PlannerExerciseEvaluator(day.exerciseText, settings, \"perday\", {\n        day: dayIndex + 1,\n        dayInWeek: dayInWeekIndex + 1,\n        week: weekIndex + 1,\n      });\n      dayIndex += 1;\n      const map = evaluator.topLineMap(tree.topNode);\n      return map;\n    });\n  });\n  for (let weekIndex = 0; weekIndex < mapping.length; weekIndex += 1) {\n    const week = mapping[weekIndex];\n    for (dayIndex = 0; dayIndex < week.length; dayIndex += 1) {\n      const day = week[dayIndex];\n      for (const exercise of day) {\n        for (const r of exercise.repeat || []) {\n          const reuseDay = mapping[r - 1]?.[dayIndex];\n          if (reuseDay && !reuseDay.some((e) => e.type === \"exercise\" && e.value === exercise.value)) {\n            if (exercise.descriptions) {\n              for (let di = 0; di < exercise.descriptions.length; di += 1) {\n                if (di !== 0) {\n                  reuseDay.push({ type: \"empty\", value: \"\" });\n                }\n                reuseDay.push({ type: \"description\", value: exercise.descriptions[di] });\n              }\n            }\n            reuseDay.push({ ...exercise, repeat: undefined, isRepeat: true });\n          }\n        }\n      }\n    }\n  }\n  return mapping;\n}\n\nexport function PlannerProgram_evaluate(\n  plannerProgram: IPlannerProgram,\n  settings: ISettings\n): { evaluatedWeeks: IPlannerEvalResult[][]; exerciseFullNames: string[] } {\n  return PlannerEvaluator_evaluate(plannerProgram, settings);\n}\n\nexport function PlannerProgram_evaluateFull(\n  fullProgramText: string,\n  settings: ISettings\n): { evaluatedWeeks: IPlannerEvalFullResult; exerciseFullNames: string[] } {\n  return PlannerEvaluator_evaluateFull(fullProgramText, settings);\n}\n\nexport function PlannerProgram_evaluateText(fullProgramText: string): IPlannerProgramWeek[] {\n  const evaluator = new PlannerExerciseEvaluatorText(fullProgramText);\n  const tree = plannerExerciseParser.parse(fullProgramText);\n  const data = evaluator.evaluate(tree.topNode);\n  const weeks: IPlannerProgramWeek[] = data.map((week) => {\n    return {\n      name: week.name,\n      description: week.description,\n      days: week.days.map((day) => {\n        return {\n          name: day.name,\n          description: day.description,\n          exerciseText: day.exercises.join(\"\").trim(),\n        };\n      }),\n    };\n  });\n  if (weeks.length === 0) {\n    weeks.push({ name: \"Week 1\", days: [{ name: \"Day 1\", exerciseText: \"\" }] });\n  }\n  return weeks;\n}\n\nexport function PlannerProgram_fullToWeekEvalResult(fullResult: IPlannerEvalFullResult): IPlannerEvalResult[][] {\n  return fullResult.success\n    ? fullResult.data.map((week) => week.days.map((d) => ({ success: true, data: d.exercises })))\n    : [[fullResult]];\n}\n\nexport function PlannerProgram_generateFullText(weeks: IPlannerProgramWeek[]): string {\n  let fullText = \"\";\n  for (const week of weeks) {\n    if (week.description != null) {\n      fullText +=\n        week.description\n          .split(\"\\n\")\n          .map((l) => (l ? `// ${l}` : \"//\"))\n          .join(\"\\n\") + \"\\n\";\n    }\n    fullText += `# ${week.name}\\n`;\n    for (const day of week.days) {\n      if (day.description != null) {\n        fullText +=\n          day.description\n            .split(\"\\n\")\n            .map((l) => `// ${l}`)\n            .join(\"\\n\") + \"\\n\";\n      }\n      fullText += `## ${day.name}\\n`;\n      fullText += `${day.exerciseText}\\n\\n`;\n    }\n    fullText += \"\\n\";\n  }\n  return fullText;\n}\n\nexport function PlannerProgram_usedExercises(\n  exercises: IAllCustomExercises,\n  evaluatedWeeks: IPlannerEvalResult[][]\n): IAllCustomExercises {\n  return ObjectUtils_filter(exercises, (_id, ex) => {\n    if (!ex) {\n      return false;\n    }\n\n    return evaluatedWeeks.some((week) => {\n      return week.some((day) => {\n        return day.success && day.data.some((d) => d.name.toLowerCase() === ex.name.toLowerCase());\n      });\n    });\n  });\n}\n\nexport function PlannerProgram_usedEquipment(\n  equipment: IAllEquipment,\n  evaluatedWeeks: IPlannerEvalResult[][]\n): IAllEquipment {\n  return ObjectUtils_filter(equipment, (key, value) => {\n    return evaluatedWeeks.some((week) => {\n      return week.some((day) => {\n        return day.success && day.data.some((d) => d.equipment?.toLowerCase() === key);\n      });\n    });\n  });\n}\n\nexport function PlannerProgram_convertExportedPlannerToProgram(\n  planner: IExportedPlannerProgram,\n  settings: ISettings\n): IExportedProgram {\n  const newProgram = Program_create(planner.program.name, planner.id);\n  const newSettings: ISettings = {\n    ...settings,\n    exercises: { ...settings.exercises, ...planner.settings.exercises },\n  };\n  const program = { ...newProgram, planner: planner.program };\n  return {\n    program: program,\n    settings: {\n      timers: newSettings.timers,\n      planner: newSettings.planner,\n      units: newSettings.units,\n    },\n    customExercises: planner.settings.exercises,\n    version: planner.version,\n  };\n}\n\nexport function PlannerProgram_buildExportedProgram(\n  id: string,\n  program: IPlannerProgram,\n  settings: ISettings,\n  nextDay?: number\n): IExportedProgram {\n  const { evaluatedWeeks } = PlannerProgram_evaluate(program, settings);\n\n  const exportedPlannerProgram: IExportedPlannerProgram = {\n    id,\n    type: \"v2\",\n    version: getLatestMigrationVersion(),\n    program: program,\n    plannerSettings: settings.planner,\n    settings: {\n      exercises: PlannerProgram_usedExercises(settings.exercises, evaluatedWeeks),\n      timer: settings.timers.workout ?? 0,\n    },\n  };\n  return Program_exportedPlannerProgramToExportedProgram(exportedPlannerProgram, nextDay);\n}\n\nexport async function PlannerProgram_getExportedPlannerProgram(\n  program: IExportedPlannerProgram,\n  settings: ISettings\n): Promise<IEither<IExportedPlannerProgram, string[]>> {\n  const storage = Storage_getDefault();\n  storage.version = program.version;\n  storage.programs = [{ ...Program_create(program.program.name), planner: program.program }];\n  storage.settings = { ...storage.settings, planner: program.plannerSettings || storage.settings.planner };\n  storage.settings.exercises = { ...storage.settings.exercises, ...settings.exercises };\n\n  const result = Storage_get(storage);\n  if (result.success) {\n    const newStorage = result.data;\n    return {\n      success: true,\n      data: {\n        id: program.id,\n        type: \"v2\",\n        version: newStorage.version,\n        program: newStorage.programs[0].planner!,\n        plannerSettings: storage.settings.planner,\n        settings: {\n          exercises: storage.settings.exercises || {},\n          timer: storage.settings.timers?.workout || 180,\n        },\n      },\n    };\n  } else {\n    return { success: false, error: result.error };\n  }\n}\n","import {\n  IPlannerProgramExercise,\n  IPlannerProgramExerciseEvaluatedSet,\n  IPlannerProgramExerciseEvaluatedSetVariation,\n  IPlannerProgramExerciseGlobals,\n  IPlannerProgramExerciseSet,\n  IPlannerProgramExerciseSetVariation,\n  IPlannerProgramExerciseVariation,\n  IPlannerProgramExerciseWithType,\n  IPlannerProgramExerciseWarmupSet,\n  IProgramExerciseProgress,\n  IProgramExerciseProgressType,\n} from \"./types\";\nimport { IPlannerEvalResult, PlannerExerciseEvaluator } from \"../plannerExerciseEvaluator\";\nimport { ObjectUtils_clone, ObjectUtils_filter, ObjectUtils_values } from \"../../../utils/object\";\nimport {\n  Weight_rpeMultiplier,\n  Weight_build,\n  Weight_buildPct,\n  Weight_display,\n  Weight_zero,\n  Weight_eq,\n  Weight_parsePct,\n  Weight_isPct,\n} from \"../../../models/weight\";\nimport {\n  IDayData,\n  IHistoryEntry,\n  IPercentage,\n  IProgramExerciseWarmupSet,\n  IProgramState,\n  IProgramStateMetadata,\n  ISettings,\n  IWeight,\n} from \"../../../types\";\nimport {\n  equipmentName,\n  IExercise,\n  warmupValues,\n  Exercise_findByName,\n  Exercise_get,\n  Exercise_fullName,\n} from \"../../../models/exercise\";\nimport { ProgramExercise_groupWarmupsSets } from \"../../../models/programExercise\";\nimport { MathUtils_roundTo0005 } from \"../../../utils/math\";\nimport { UidFactory_generateUid } from \"../../../utils/generator\";\nimport { PlannerKey_fromExerciseType } from \"../plannerKey\";\nimport { CollectionUtils_compact, CollectionUtils_groupByExpr } from \"../../../utils/collection\";\nimport { IEither } from \"../../../utils/types\";\nimport { IDisplaySet, Reps_groupDisplaySets } from \"../../../models/set\";\n\nexport type ILinearProgressionType = {\n  type: \"linear\";\n  increase: IWeight | IPercentage;\n  successesRequired?: number;\n  successesCounter?: number;\n  decrease?: IWeight | IPercentage;\n  failuresRequired?: number;\n  failuresCounter?: number;\n};\nexport type IDoubleProgressionType = {\n  type: \"double\";\n  increase: IWeight | IPercentage;\n  minReps: number;\n  maxReps: number;\n};\nexport type ISumRepsProgressionType = {\n  type: \"sumreps\";\n  increase: IWeight | IPercentage;\n  reps: number;\n};\nexport type ICustomProgressionType = {\n  type: \"custom\";\n};\nexport type IProgressionType =\n  | ILinearProgressionType\n  | IDoubleProgressionType\n  | ISumRepsProgressionType\n  | ICustomProgressionType;\n\nexport function PlannerProgramExercise_numberOfSets(exercise: IPlannerProgramExercise): number {\n  return PlannerProgramExercise_sets(exercise).reduce((acc, set) => acc + (set.repRange?.numberOfSets || 0), 0);\n}\n\nexport function PlannerProgramExercise_getExercise(\n  plannerExercise: IPlannerProgramExercise,\n  settings: ISettings\n): IExercise | undefined {\n  const exercise = Exercise_findByName(plannerExercise.name, settings.exercises);\n  if (exercise == null) {\n    return undefined;\n  }\n  exercise.equipment = plannerExercise.equipment || exercise?.equipment || exercise?.defaultEquipment;\n  return exercise;\n}\n\nexport function PlannerProgramExercise_setVariations(\n  exercise: IPlannerProgramExercise\n): IPlannerProgramExerciseSetVariation[] {\n  const originalSetVariations = exercise.setVariations;\n  const reuseSetVariations = exercise.reuse?.exercise?.setVariations;\n  const setVariations = (originalSetVariations?.length > 0 ? originalSetVariations : reuseSetVariations) || [];\n  return setVariations.length === 0\n    ? [{ sets: PlannerProgramExercise_sets(exercise), isCurrent: true }]\n    : setVariations;\n}\n\nexport function PlannerProgramExercise_warmups(\n  exercise: IPlannerProgramExercise\n): IPlannerProgramExerciseWarmupSet[] | undefined {\n  return exercise.warmupSets || exercise.reuse?.exercise?.warmupSets;\n}\n\nexport function PlannerProgramExercise_programWarmups(\n  exercise: IPlannerProgramExercise,\n  settings: ISettings\n): IProgramExerciseWarmupSet[] | undefined {\n  const exerciseWarmups = PlannerProgramExercise_warmups(exercise);\n  if (exerciseWarmups == null) {\n    return undefined;\n  }\n  const sets: IProgramExerciseWarmupSet[] = [];\n  for (const ws of exerciseWarmups) {\n    for (let i = 0; i < ws.numberOfSets; i += 1) {\n      let value: IWeight | number | undefined = ws.percentage ? ws.percentage / 100 : undefined;\n      if (value == null) {\n        value = ws.weight;\n      }\n      if (value == null) {\n        value = MathUtils_roundTo0005(Weight_rpeMultiplier(ws.reps, 4));\n      }\n      sets.push({\n        reps: ws.reps,\n        value,\n        threshold: Weight_build(0, settings.units),\n      });\n    }\n  }\n  return sets;\n}\n\nexport function PlannerProgramExercise_toUsed(\n  exercise?: IPlannerProgramExercise\n): IPlannerProgramExerciseWithType | undefined {\n  if (exercise?.exerciseType != null) {\n    return exercise as IPlannerProgramExerciseWithType;\n  } else {\n    return undefined;\n  }\n}\n\nexport function PlannerProgramExercise_evaluateSetVariations(\n  exercise: IPlannerProgramExercise,\n  setVariations: IPlannerProgramExerciseSetVariation[]\n): IPlannerProgramExerciseEvaluatedSetVariation[] {\n  const evaluatedSetVariations: IPlannerProgramExerciseEvaluatedSetVariation[] = [];\n  for (let i = 0; i < setVariations.length; i++) {\n    const sets = PlannerProgramExercise_sets(exercise, i);\n    const evaluatedSets: IPlannerProgramExerciseEvaluatedSet[] = [];\n    for (const aSet of sets) {\n      if (aSet.repRange == null) {\n        continue;\n      }\n      for (let j = 0; j < aSet.repRange.numberOfSets; j++) {\n        evaluatedSets.push({\n          maxrep: aSet.repRange.maxrep,\n          minrep: aSet.repRange.minrep,\n          weight: aSet.weight ? aSet.weight : aSet.percentage ? Weight_buildPct(aSet.percentage) : undefined,\n          timer: aSet.timer,\n          setTimer: aSet.setTimer,\n          isOverflowSetTimer: aSet.isOverflowSetTimer,\n          auto: aSet.auto,\n          rpe: aSet.rpe,\n          logRpe: !!aSet.logRpe,\n          label: aSet.label,\n          isAmrap: !!aSet.repRange.isAmrap,\n          isQuickAddSet: !!aSet.repRange.isQuickAddSet,\n          askWeight: !!aSet.askWeight,\n        });\n      }\n    }\n    evaluatedSetVariations.push({ sets: evaluatedSets, isCurrent: setVariations[i].isCurrent });\n  }\n  return evaluatedSetVariations;\n}\n\nexport function PlannerProgramExercise_sets(\n  exercise: IPlannerProgramExercise,\n  variationIndex?: number\n): IPlannerProgramExerciseSet[] {\n  const reusedSets = exercise.reuse?.exercise\n    ? exercise.reuse?.exercise?.setVariations[\n        variationIndex ?? PlannerProgramExercise_currentSetVariationIndex(exercise.reuse?.exercise)\n      ]?.sets\n    : undefined;\n  const reusedGlobals = exercise.reuse?.exercise?.globals || {};\n  variationIndex = variationIndex ?? PlannerProgramExercise_currentSetVariationIndex(exercise);\n  const currentSets = exercise.setVariations[variationIndex]?.sets;\n  const currentGlobals = exercise.globals;\n  const sets = currentSets || reusedSets || [];\n  return sets.map((aSet) => {\n    const set: IPlannerProgramExerciseSet = ObjectUtils_clone(aSet);\n    set.rpe = currentGlobals.rpe != null ? currentGlobals.rpe : (set.rpe ?? reusedGlobals.rpe);\n    set.timer = currentGlobals.timer != null ? currentGlobals.timer : (set.timer ?? reusedGlobals.timer);\n    set.setTimer = currentGlobals.setTimer != null ? currentGlobals.setTimer : (set.setTimer ?? reusedGlobals.setTimer);\n    // The overflow `+` modifier is part of the set timer, so a global/override that sets the set timer\n    // also dictates the overflow flag (absent `+` means off) - it must not leak from the reused exercise.\n    set.isOverflowSetTimer =\n      currentGlobals.setTimer != null\n        ? !!currentGlobals.isOverflowSetTimer\n        : (set.isOverflowSetTimer ?? reusedGlobals.isOverflowSetTimer);\n    set.auto = currentGlobals.auto != null ? currentGlobals.auto : (set.auto ?? reusedGlobals.auto);\n    if (currentGlobals.weight != null || currentGlobals.percentage != null) {\n      if (currentGlobals.weight != null) {\n        set.weight = currentGlobals.weight;\n        set.percentage = undefined;\n      } else {\n        set.percentage = currentGlobals.percentage;\n        set.weight = undefined;\n      }\n    } else {\n      set.weight = set.weight ?? reusedGlobals.weight;\n      set.percentage = set.percentage ?? reusedGlobals.percentage;\n    }\n\n    set.logRpe = !!(currentGlobals.rpe != null && currentGlobals.logRpe != null\n      ? currentGlobals.logRpe\n      : (set.logRpe ?? reusedGlobals.logRpe));\n    set.askWeight = !!((currentGlobals.weight != null || currentGlobals.percentage != null) &&\n    currentGlobals.askWeight != null\n      ? currentGlobals.askWeight\n      : (set.askWeight ?? reusedGlobals.askWeight));\n    return set;\n  });\n}\n\nexport function PlannerProgramExercise_defaultWarmups(\n  exercise: IExercise,\n  settings: ISettings\n): IPlannerProgramExerciseWarmupSet[] {\n  const warmupSets = (exercise?.defaultWarmup && warmupValues(settings.units)[exercise.defaultWarmup]) || [];\n  const result: IPlannerProgramExerciseWarmupSet[] = [];\n  if (warmupSets) {\n    const groups = ProgramExercise_groupWarmupsSets(warmupSets);\n    for (const group of groups) {\n      const first = group[0];\n      const length = group[1];\n      result.push({\n        type: \"warmup\",\n        numberOfSets: length,\n        reps: first.reps,\n        percentage: typeof first.value === \"number\" ? first.value * 100 : first.value.value,\n      });\n    }\n  }\n  return result;\n}\n\nexport function PlannerProgramExercise_repeatToRangeStr(plannerExercise: IPlannerProgramExercise): string {\n  const repeat = plannerExercise.repeating;\n  const ranges: [number, number][] = [];\n  for (const rep of repeat) {\n    if (ranges.length === 0) {\n      ranges.push([rep, rep]);\n    }\n    const lastRep = ranges[ranges.length - 1][1];\n    if (rep <= lastRep + 1) {\n      ranges[ranges.length - 1][1] = rep;\n    } else {\n      ranges.push([rep, rep]);\n    }\n  }\n  return ranges.map((r) => `${r[0]}-${r[1]}`).join(\", \");\n}\n\nexport function PlannerProgramExercise_warmupSetsToDisplaySets(\n  sets: IPlannerProgramExerciseWarmupSet[]\n): IDisplaySet[][] {\n  const displaySets: IDisplaySet[] = [];\n  for (const set of sets) {\n    for (let setIndex = 0; setIndex < (set.numberOfSets || 0); setIndex++) {\n      const weight =\n        set.percentage != null\n          ? `${set.percentage}%`\n          : set.weight?.value != null\n            ? set.weight.value.toString()\n            : `${Math.round(Weight_rpeMultiplier(set.reps, 10) * 100)}%`;\n      displaySets.push({\n        reps: `${set.reps}`,\n        weight: weight,\n      });\n    }\n  }\n\n  return Reps_groupDisplaySets(displaySets);\n}\n\nexport function PlannerProgramExercise_uniqueKey(exercise: IPlannerProgramExercise): string {\n  return `${exercise.key}-${exercise.dayData.week}-${exercise.dayData.dayInWeek}`;\n}\n\nexport function PlannerProgramExercise_uniqueSetKey(set: IPlannerProgramExerciseEvaluatedSet): string {\n  return `${set.minrep}-${set.maxrep}-${set.isAmrap}-${set.weight?.value}${set.weight?.unit}${set.askWeight}-${set.rpe}${set.logRpe}-${set.timer}-${set.setTimer}${set.isOverflowSetTimer}${set.auto}`;\n}\n\nexport function PlannerProgramExercise_evaluatedSetsToDisplaySets(\n  sets: IPlannerProgramExerciseEvaluatedSet[],\n  settings: ISettings\n): IDisplaySet[][] {\n  const displaySets: IDisplaySet[] = [];\n  for (const set of sets) {\n    const weight = set.weight ? Weight_display(set.weight, false) : undefined;\n    const unit = set.weight?.unit || settings.units;\n    displaySets.push({\n      dimReps: false,\n      dimRpe: !set.logRpe,\n      dimWeight: !set.weight,\n      dimTimer: set.timer == null,\n      reps: `${set.minrep != null ? `${set.minrep}-${set.maxrep}` : `${set.maxrep}`}${set.isAmrap ? \"+\" : \"\"}`,\n      rpe: set.rpe?.toString(),\n      weight,\n      unit,\n      askWeight: set.askWeight,\n      timer: set.timer,\n      setTimer: set.setTimer,\n      isOverflowSetTimer: set.isOverflowSetTimer,\n      auto: set.auto,\n    });\n  }\n  return Reps_groupDisplaySets(displaySets);\n}\n\nexport function PlannerProgramExercise_setsToDisplaySets(\n  sets: IPlannerProgramExerciseSet[],\n  hasCurrentSets: boolean,\n  globals: IPlannerProgramExerciseGlobals,\n  settings: ISettings\n): IDisplaySet[][] {\n  const displaySets: IDisplaySet[] = [];\n  for (const set of sets) {\n    for (let setIndex = 0; setIndex < (set.repRange?.numberOfSets || 0); setIndex++) {\n      const minReps = set.repRange?.minrep;\n      const maxReps = set.repRange?.maxrep || 0;\n      const weight =\n        set.percentage != null\n          ? `${set.percentage}%`\n          : set.weight?.value != null\n            ? set.weight.value.toString()\n            : undefined;\n      const unit = set.percentage == null ? set.weight?.unit || settings.units : undefined;\n      displaySets.push({\n        dimReps: !hasCurrentSets,\n        dimRpe: !hasCurrentSets && globals.rpe == null,\n        dimWeight: !hasCurrentSets && globals.weight == null && globals.percentage == null,\n        dimTimer: !hasCurrentSets && globals.timer == null,\n        reps: `${minReps != null ? `${minReps}-` : \"\"}${maxReps}${set.repRange?.isAmrap ? \"+\" : \"\"}`,\n        rpe: set.rpe?.toString(),\n        weight: weight,\n        unit,\n        askWeight: set.askWeight,\n        timer: set.timer,\n        setTimer: set.setTimer,\n        isOverflowSetTimer: set.isOverflowSetTimer,\n        auto: set.auto,\n      });\n    }\n  }\n\n  return Reps_groupDisplaySets(displaySets);\n}\n\nexport function PlannerProgramExercise_degroupWarmupSets(\n  warmupSets: IPlannerProgramExerciseWarmupSet[]\n): IPlannerProgramExerciseWarmupSet[] {\n  return warmupSets.reduce<IPlannerProgramExerciseWarmupSet[]>((acc, set) => {\n    for (let i = 0; i < set.numberOfSets; i++) {\n      acc.push({ ...set, numberOfSets: 1 });\n    }\n    return acc;\n  }, []);\n}\n\nexport function PlannerProgramExercise_currentSetVariationIndex(exercise: IPlannerProgramExercise): number {\n  const index = exercise.setVariations.findIndex((sv) => sv.isCurrent);\n  return index === -1 ? 0 : index;\n}\n\nexport function PlannerProgramExercise_currentEvaluatedSetVariationIndex(exercise: IPlannerProgramExercise): number {\n  const index = exercise.evaluatedSetVariations.findIndex((sv) => sv.isCurrent);\n  return index === -1 ? 0 : index;\n}\n\nexport function PlannerProgramExercise_currentEvaluatedSetVariation(\n  exercise: IPlannerProgramExercise\n): IPlannerProgramExerciseEvaluatedSetVariation {\n  const index = PlannerProgramExercise_currentEvaluatedSetVariationIndex(exercise);\n  return exercise.evaluatedSetVariations[index];\n}\n\nexport function PlannerProgramExercise_currentExerciseVariationIndex(exercise: IPlannerProgramExercise): number {\n  const index = (exercise.exerciseVariations ?? []).findIndex((v) => v.isCurrent);\n  return index === -1 ? 0 : index;\n}\n\nexport function PlannerProgramExercise_currentExerciseVariation(\n  exercise: IPlannerProgramExercise\n): IPlannerProgramExerciseVariation | undefined {\n  const index = PlannerProgramExercise_currentExerciseVariationIndex(exercise);\n  return exercise.exerciseVariations?.[index];\n}\n\nexport function PlannerProgramExercise_currentDescription(exercise: IPlannerProgramExercise): string | undefined {\n  const index = PlannerProgramExercise_currentDescriptionIndex(exercise);\n  return exercise.descriptions.values[index]?.value;\n}\n\nexport function PlannerProgramExercise_addSet(\n  ex: IPlannerProgramExercise,\n  setVariationIndex: number,\n  settings: ISettings\n): IPlannerProgramExercise {\n  const evaluatedSetVariation = ex.evaluatedSetVariations[setVariationIndex];\n  let lastEvaluatedSet = evaluatedSetVariation.sets[evaluatedSetVariation.sets.length - 1];\n  if (lastEvaluatedSet) {\n    evaluatedSetVariation.sets = [...evaluatedSetVariation.sets, ObjectUtils_clone(lastEvaluatedSet)];\n  } else {\n    const originalSets = PlannerProgramExercise_sets(ex, setVariationIndex);\n    const lastSet = originalSets[originalSets.length - 1];\n    if (lastSet) {\n      lastEvaluatedSet = {\n        maxrep: lastSet.repRange?.maxrep || 1,\n        minrep: lastSet.repRange?.minrep,\n        weight: lastSet.weight || Weight_zero,\n        logRpe: lastSet.logRpe || false,\n        isAmrap: lastSet.repRange?.isAmrap || false,\n        isQuickAddSet: lastSet.repRange?.isQuickAddSet || false,\n        askWeight: lastSet.askWeight || false,\n        rpe: lastSet.rpe,\n        timer: lastSet.timer,\n        setTimer: lastSet.setTimer,\n        isOverflowSetTimer: lastSet.isOverflowSetTimer,\n        auto: lastSet.auto,\n        label: lastSet.label,\n      };\n      evaluatedSetVariation.sets = [...evaluatedSetVariation.sets, ObjectUtils_clone(lastEvaluatedSet)];\n    } else {\n      evaluatedSetVariation.sets = [\n        ...evaluatedSetVariation.sets,\n        {\n          maxrep: 5,\n          weight: Weight_build(100, settings.units),\n          isAmrap: false,\n          logRpe: false,\n          askWeight: false,\n          isQuickAddSet: false,\n        },\n      ];\n    }\n  }\n  return ex;\n}\n\nexport function PlannerProgramExercise_currentDescriptionIndex(exercise: IPlannerProgramExercise): number {\n  const index = exercise.descriptions.values.findIndex((d) => d.isCurrent);\n  return index === -1 ? 0 : index;\n}\n\nexport function PlannerProgramExercise_numberOfSetsThisWeek(exerciseName: string, week: IPlannerEvalResult[]): number {\n  return week.reduce((acc, days) => {\n    if (days.success) {\n      const numberOfSetsThisDay = days.data\n        .filter((e) => e.name === exerciseName)\n        .reduce((acc2, e) => acc2 + PlannerProgramExercise_numberOfSets(e), 0);\n      return acc + numberOfSetsThisDay;\n    } else {\n      return acc;\n    }\n  }, 0);\n}\n\nexport function PlannerProgramExercise_getProgressScript(exercise: IPlannerProgramExercise): string | undefined {\n  return (\n    exercise.progress?.script ??\n    exercise.progress?.reuse?.exercise?.progress?.script ??\n    exercise.progress?.reuse?.exercise?.progress?.reuse?.exercise?.progress?.script ??\n    exercise.reuse?.exercise?.progress?.script ??\n    exercise.reuse?.exercise?.progress?.reuse?.exercise?.progress?.script\n  );\n}\n\nexport function PlannerProgramExercise_isReusingSetsProgress(exercise: IPlannerProgramExercise): boolean {\n  const reuseExercise = exercise.reuse?.exercise;\n  return (\n    reuseExercise?.progress != null &&\n    exercise.progress != null &&\n    exercise.progress.type === reuseExercise.progress?.type &&\n    (exercise.progress.reuse?.fullName === reuseExercise.fullName ||\n      exercise.progress.script === reuseExercise.progress.script) &&\n    Object.keys(PlannerProgramExercise_getOnlyChangedState(exercise)).length === 0\n  );\n}\n\n// `visited` only matters while a program is being evaluated: PlannerEvaluator_checkReuseLoops\n// rejects reuse loops, but it can't run until every reuse is wired, and the evaluator calls this\n// before then. Without the guard a loop is an unbounded recursion that kills the whole process\n// instead of failing that one program.\nexport function PlannerProgramExercise_getState(\n  exercise: IPlannerProgramExercise,\n  visited?: Set<IPlannerProgramExercise>\n): IProgramState {\n  if (exercise.progress?.state && !exercise.progress.reuse) {\n    return exercise.progress.state;\n  } else {\n    const seen = visited ?? new Set<IPlannerProgramExercise>();\n    if (seen.has(exercise)) {\n      return {};\n    }\n    seen.add(exercise);\n    const originalState = exercise.progress?.reuse?.exercise\n      ? PlannerProgramExercise_getState(exercise.progress.reuse.exercise, seen)\n      : exercise.reuse?.exercise\n        ? PlannerProgramExercise_getState(exercise.reuse.exercise, seen)\n        : {};\n\n    return { ...originalState, ...exercise.progress?.state };\n  }\n}\n\nexport function PlannerProgramExercise_getOnlyChangedState(exercise: IPlannerProgramExercise): IProgramState {\n  const originalState = exercise.progress?.reuse?.exercise\n    ? exercise.progress.reuse.exercise.progress?.state || {}\n    : exercise.reuse?.exercise\n      ? exercise.reuse.exercise.progress?.state || {}\n      : {};\n  const originalStateMetadata = exercise.progress?.reuse?.exercise\n    ? exercise.progress.reuse.exercise.progress?.stateMetadata || {}\n    : exercise.reuse?.exercise\n      ? exercise.reuse.exercise.progress?.stateMetadata || {}\n      : {};\n  const state = exercise.progress?.state || {};\n  const stateMetadata = exercise.progress?.stateMetadata || {};\n  return ObjectUtils_filter(\n    state,\n    (key, value) =>\n      originalState[key] == null ||\n      !Weight_eq(originalState[key], value) ||\n      originalStateMetadata[key]?.userPrompted !== stateMetadata[key]?.userPrompted\n  ) as IProgramState;\n}\n\nexport function PlannerProgramExercise_getStateMetadata(\n  exercise: IPlannerProgramExercise,\n  visited?: Set<IPlannerProgramExercise>\n): IProgramStateMetadata {\n  if (exercise.progress?.stateMetadata && !exercise.progress.reuse) {\n    return exercise.progress.stateMetadata;\n  } else {\n    const seen = visited ?? new Set<IPlannerProgramExercise>();\n    if (seen.has(exercise)) {\n      return {};\n    }\n    seen.add(exercise);\n    const originalState = exercise.progress?.reuse?.exercise\n      ? PlannerProgramExercise_getStateMetadata(exercise.progress.reuse.exercise, seen)\n      : exercise.reuse?.exercise\n        ? PlannerProgramExercise_getStateMetadata(exercise.reuse.exercise, seen)\n        : {};\n\n    return { ...originalState, ...exercise.progress?.stateMetadata };\n  }\n}\n\nexport function PlannerProgramExercise_getUpdateScript(exercise: IPlannerProgramExercise): string | undefined {\n  return (\n    exercise.update?.script ??\n    exercise.update?.reuse?.exercise?.update?.script ??\n    exercise.update?.reuse?.exercise?.update?.reuse?.exercise?.update?.script ??\n    exercise.reuse?.exercise?.update?.script ??\n    exercise.reuse?.exercise?.update?.reuse?.exercise?.update?.script\n  );\n}\n\nexport function PlannerProgramExercise_getEnableRpe(exercise: IPlannerProgramExercise): boolean {\n  return exercise.setVariations.some((sv, i) => PlannerProgramExercise_sets(exercise, i).some((s) => s.rpe != null));\n}\n\nexport function PlannerProgramExercise_getEnableRepRanges(exercise: IPlannerProgramExercise): boolean {\n  return exercise.setVariations.some((sv, i) =>\n    PlannerProgramExercise_sets(exercise, i).some((s) => s.repRange != null && s.repRange.minrep === s.repRange.maxrep)\n  );\n}\n\nexport function PlannerProgramExercise_getProgressDefaultArgs(type: IProgramExerciseProgressType): string[] {\n  switch (type) {\n    case \"none\":\n      return [];\n    case \"lp\":\n      return [\"5lb\"];\n    case \"dp\":\n      return [\"5lb\", \"8\", \"12\"];\n    case \"sum\":\n      return [\"30\", \"5lb\"];\n    case \"custom\":\n      return [];\n  }\n}\n\nfunction buildDpScript(): string {\n  return `for (var.i in completedReps) {\n  if (weights[var.i] == 0 && completedWeights[var.i] != 0) {\n    weights[var.i] = completedWeights[var.i]\n  }\n}\nif (completedReps >= reps && completedRPE <= RPE) {\n  if (completedReps >= state.maxReps) {\n    reps = state.minReps\n    for (var.i in completedReps) {\n      var.isInitial = weights[var.i] == 0 && completedWeights[var.i] != 0\n      if (var.isInitial) {\n        weights[var.i] = completedWeights[var.i] + state.increment\n      } else {\n        weights[var.i] += (completedWeights[var.i] - weights[var.i]) + state.increment\n      }\n    }\n  } else {\n    for (var.i in completedReps) {\n      reps[var.i] = completedReps[var.i] + 1 > state.maxReps ?\n        state.maxReps :\n        completedReps[var.i] + 1\n    }\n  }\n}`;\n}\n\nexport function PlannerProgramExercise_buildDpRangeScript(): string {\n  return `for (var.i in completedReps) {\n  if (weights[var.i] == 0 && completedWeights[var.i] != 0) {\n    weights[var.i] = completedWeights[var.i]\n  }\n}\nif (completedReps >= reps && completedRPE <= RPE) {\n  minReps = state.minReps\n  for (var.i in completedReps) {\n    var.isInitial = weights[var.i] == 0 && completedWeights[var.i] != 0\n    if (var.isInitial) {\n      weights[var.i] = completedWeights[var.i] + state.increment\n    } else {\n      weights[var.i] += (completedWeights[var.i] - weights[var.i]) + state.increment\n    }\n  }\n} else {\n  for (var.i in completedReps) {\n    minReps[var.i] = completedReps[var.i] + 1 > reps[var.i] ?\n      reps[var.i] :\n      completedReps[var.i] + 1\n  }\n}`;\n}\n\nexport function PlannerProgramExercise_buildProgress(\n  type: IProgramExerciseProgressType,\n  args: string[],\n  opts: {\n    reuseFullname?: string;\n    script?: string;\n  } = {}\n): IEither<IProgramExerciseProgress, string> {\n  switch (type) {\n    case \"none\": {\n      return {\n        success: true,\n        data: {\n          type: \"none\",\n          state: {},\n          stateMetadata: {},\n        },\n      };\n    }\n    case \"lp\": {\n      const increment = args[0] ? Weight_parsePct(args[0]) : Weight_build(0, \"lb\");\n      const decrement = args[3] ? Weight_parsePct(args[3]) : Weight_build(0, \"lb\");\n      const state: IProgramState = {\n        increment: increment ?? Weight_build(0, \"lb\"),\n        successes: args[1] ? parseInt(args[1], 10) : 1,\n        successCounter: args[2] ? parseInt(args[2], 10) : 0,\n        decrement: decrement ?? Weight_build(0, \"lb\"),\n        failures: args[4] ? parseInt(args[4], 10) : (decrement?.value ?? 0) > 0 ? 1 : 0,\n        failureCounter: args[5] ? parseInt(args[5], 10) : 0,\n      };\n      const script = `for (var.i in completedReps) {\n  if (weights[var.i] == 0 && completedWeights[var.i] != 0) {\n    weights[var.i] = completedWeights[var.i]\n  }\n}\nif (completedReps >= reps && completedRPE <= RPE) {\n  state.successCounter += 1\n  if (state.successCounter >= state.successes) {\n    for (var.i in completedReps) {\n      var.isInitial = weights[var.i] == 0 && completedWeights[var.i] != 0\n      if (var.isInitial) {\n        weights[var.i] = completedWeights[var.i] + state.increment\n      } else {\n        weights[var.i] += (completedWeights[var.i] - weights[var.i]) + state.increment\n      }\n    }\n    state.successCounter = 0\n    state.failureCounter = 0\n  }\n}\nif (state.decrement > 0 && state.failures > 0) {\n  if (!(completedReps >= minReps && completedRPE <= RPE)) {\n    state.failureCounter += 1\n    if (state.failureCounter >= state.failures) {\n      weights -= state.decrement\n      state.failureCounter = 0\n      state.successCounter = 0\n    }\n  }\n}`;\n      return {\n        success: true,\n        data: {\n          type: \"lp\",\n          state,\n          stateMetadata: {},\n          script,\n        },\n      };\n    }\n    case \"dp\": {\n      const increment = args[0] ? Weight_parsePct(args[0]) : Weight_build(0, \"lb\");\n      const state: IProgramState = {\n        increment: increment ?? Weight_build(0, \"lb\"),\n        minReps: args[1] ? parseInt(args[1], 10) : 0,\n        maxReps: args[2] ? parseInt(args[2], 10) : 0,\n      };\n      const script = buildDpScript();\n      return {\n        success: true,\n        data: {\n          type: \"dp\",\n          state,\n          stateMetadata: {},\n          script,\n        },\n      };\n    }\n    case \"sum\": {\n      const increment = args[1] ? Weight_parsePct(args[1]) : Weight_build(0, \"lb\");\n      const state: IProgramState = {\n        reps: args[0] ? parseInt(args[0], 10) : 0,\n        increment: increment ?? Weight_build(0, \"lb\"),\n      };\n      const script = `for (var.i in completedReps) {\nif (weights[var.i] == 0 && completedWeights[var.i] != 0) {\n  weights[var.i] = completedWeights[var.i]\n}\n}\nif (sum(completedReps) >= state.reps) {\nfor (var.i in completedReps) {\n  weights[var.i] = completedWeights[var.i] + state.increment\n}\n}`;\n      return {\n        success: true,\n        data: {\n          type: \"sum\",\n          state,\n          stateMetadata: {},\n          script,\n        },\n      };\n    }\n    case \"custom\": {\n      const script = opts.script;\n      let errorMessage: string | undefined;\n      const { state, stateMetadata } = PlannerExerciseEvaluator.fnArgsToStateVars(args, (message) => {\n        errorMessage = message;\n      });\n      if (errorMessage) {\n        return {\n          success: false,\n          error: errorMessage,\n        };\n      }\n      return {\n        success: true,\n        data: {\n          type: \"custom\",\n          state,\n          stateMetadata,\n          script,\n          reuse: opts.reuseFullname ? { fullName: opts.reuseFullname, source: \"specific\" } : undefined,\n        },\n      };\n    }\n  }\n}\n\nexport function PlannerProgramExercise_progressionType(\n  exercise: IPlannerProgramExercise\n): IProgressionType | undefined {\n  const progress = exercise.progress;\n  if (!progress) {\n    return undefined;\n  }\n  const name = progress.type;\n  const state = PlannerProgramExercise_getState(exercise);\n  if (name === \"lp\") {\n    return {\n      type: \"linear\",\n      increase: state.increment as IWeight,\n      successesRequired: state.successes as number,\n      successesCounter: state.successCounter as number,\n      decrease: state.decrement as IWeight,\n      failuresRequired: state.failures as number,\n      failuresCounter: state.failureCounter as number,\n    };\n  } else if (name === \"dp\") {\n    return {\n      type: \"double\",\n      increase: state.increment as IWeight,\n      minReps: state.minReps as number,\n      maxReps: state.maxReps as number,\n    };\n  } else if (name === \"sum\") {\n    return {\n      type: \"sumreps\",\n      increase: state.increment as IWeight,\n      reps: state.reps as number,\n    };\n  } else if (name === \"custom\") {\n    return { type: \"custom\" };\n  }\n  return undefined;\n}\n\nexport function PlannerProgramExercise_shortNameFromFullName(fullName: string, settings: ISettings): string {\n  const { name, equipment } = PlannerExerciseEvaluator.extractNameParts(fullName, settings.exercises);\n  const shortName = `${name}${equipment ? `, ${equipmentName(equipment)}` : \"\"}`;\n  return shortName;\n}\n\nexport function PlannerProgramExercise_createExerciseFromEntry(\n  entry: IHistoryEntry,\n  dayData: Required<IDayData>,\n  settings: ISettings,\n  index: number\n): IPlannerProgramExercise {\n  const exerciseType = entry.exercise;\n  const exercise = Exercise_get(exerciseType, settings.exercises);\n  const fullName = Exercise_fullName(exercise, settings);\n  const shortName = PlannerProgramExercise_shortNameFromFullName(fullName, settings);\n  const { name, equipment } = PlannerExerciseEvaluator.extractNameParts(fullName, settings.exercises);\n  const setVariations: IPlannerProgramExerciseSetVariation[] = [\n    {\n      isCurrent: false,\n      sets: entry.sets.map((set) => ({\n        repRange: {\n          numberOfSets: 1,\n          maxrep: set.completedReps ?? set.reps,\n          minrep: set.minReps,\n          isAmrap: !!set.isAmrap,\n          isQuickAddSet: false,\n        },\n        timer: set.timer,\n        setTimer: set.setTimer,\n        isOverflowSetTimer: set.isOverflowSetTimer,\n        auto: set.auto,\n        rpe: set.rpe,\n        logRpe: set.logRpe,\n        percentage: Weight_isPct(set.originalWeight) ? set.originalWeight.value : undefined,\n        weight: !Weight_isPct(set.originalWeight) ? (set.completedWeight ?? set.weight) : undefined,\n        askWeight: set.askWeight,\n      })),\n    },\n  ];\n  const groupedWarmupSets = CollectionUtils_compact(\n    ObjectUtils_values(\n      CollectionUtils_groupByExpr(entry.warmupSets, (set) => {\n        return `${set.completedReps ?? set.reps}-${(set.completedWeight ?? set.weight ?? { value: \"\" }).value}`;\n      })\n    )\n  );\n  const plannerExercise: IPlannerProgramExercise = {\n    id: UidFactory_generateUid(8),\n    key: PlannerKey_fromExerciseType(exercise),\n    fullName,\n    shortName,\n    dayData,\n    exerciseType,\n    repeat: [],\n    repeating: [],\n    exerciseIndex: index,\n    order: 0,\n    text: \"\",\n    tags: [],\n    superset: entry.superset != null ? { name: entry.superset } : undefined,\n    equipment,\n    name,\n    line: 1,\n    evaluatedSetVariations: [],\n    setVariations: setVariations,\n    exerciseVariations: [{ exerciseType, name, isCurrent: true }],\n    warmupSets: groupedWarmupSets.map((group) => ({\n      type: \"warmup\",\n      numberOfSets: group.length,\n      reps: group[0]?.completedReps ?? group[0]?.reps ?? 1,\n      weight: group[0]?.completedWeight ?? group[0]?.weight,\n    })),\n    descriptions: { values: [] },\n    globals: {},\n    points: {\n      fullName: { line: 1, offset: 0, from: 0, to: 0 },\n    },\n  };\n  const evaluatedSetVariations = PlannerProgramExercise_evaluateSetVariations(plannerExercise, setVariations);\n  plannerExercise.evaluatedSetVariations = evaluatedSetVariations;\n  return plannerExercise;\n}\n","import type { IProgramState, IProgramStateMetadata } from \"../../../types\";\nimport { Weight_parse, Weight_buildPct } from \"../../../models/weight\";\nimport { MathUtils_roundFloat } from \"../../../utils/math\";\n\nexport function PlannerStateVars_fromArgs(\n  fnArgs: string[],\n  onError?: (message: string) => void\n): { state: IProgramState; stateMetadata: IProgramStateMetadata } {\n  const state: IProgramState = {};\n  const stateMetadata: IProgramStateMetadata = {};\n  for (const value of fnArgs) {\n    // eslint-disable-next-line prefer-const\n    let [fnArgKey, fnArgValStr] = value.split(\":\").map((v) => v.trim());\n    if (onError && (!fnArgKey || !fnArgValStr)) {\n      onError(`Invalid argument ${value}`);\n    }\n    if (fnArgKey.endsWith(\"+\")) {\n      fnArgKey = fnArgKey.replace(\"+\", \"\");\n      stateMetadata[fnArgKey] = { userPrompted: true };\n    } else {\n      stateMetadata[fnArgKey] = { userPrompted: false };\n    }\n    try {\n      const fnArgVal = fnArgValStr.match(/(lb|kg)/)\n        ? Weight_parse(fnArgValStr)\n        : fnArgValStr.match(/%/)\n          ? Weight_buildPct(parseFloat(fnArgValStr))\n          : MathUtils_roundFloat(parseFloat(fnArgValStr), 2);\n      state[fnArgKey] = fnArgVal ?? 0;\n    } catch (e) {\n      if (onError) {\n        onError(`Invalid argument ${value}`);\n      } else {\n        throw e;\n      }\n    }\n  }\n  return { state, stateMetadata };\n}\n","import {\n  IExercise,\n  Exercise_findByNameAndEquipment,\n  Exercise_targetMusclesGroups,\n  Exercise_synergistMusclesGroupMultipliers,\n  Exercise_synergistMusclesGroups,\n} from \"../../../models/exercise\";\nimport { IPlannerProgramExercise, IPlannerProgramExerciseRepRange, ISetResults, ISetSplit } from \"./types\";\nimport { IPlannerEvalResult } from \"../plannerExerciseEvaluator\";\nimport { IScreenMuscle, ISettings } from \"../../../types\";\nimport { PlannerProgramExercise_sets } from \"./plannerProgramExercise\";\nimport { Weight_build } from \"../../../models/weight\";\nimport { Muscle_getAvailableMuscleGroups } from \"../../../models/muscle\";\nimport { ProgramSet_approxRestTimer, ProgramSet_approxSetTimeMs } from \"../../../models/programSet\";\n\ntype IResultsSetSplit = Omit<ISetResults, \"total\" | \"strength\" | \"hypertrophy\" | \"muscleGroup\" | \"volume\">;\n\nexport function PlannerStatsUtils_dayApproxTimeMs(\n  exercises: IPlannerProgramExercise[],\n  restTimer: number,\n  supersetTimer?: number\n): number {\n  return exercises\n    .filter((e) => !e.notused)\n    .reduce((acc, e) => {\n      const exerciseSupersetTimer = e.superset != null ? supersetTimer : undefined;\n      return (\n        acc +\n        PlannerProgramExercise_sets(e).reduce((acc2, set) => {\n          const repRange = set.repRange;\n          if (!repRange) {\n            return acc2;\n          }\n          const timer = ProgramSet_approxRestTimer(set, restTimer ?? 0, exerciseSupersetTimer);\n          return acc2 + repRange.numberOfSets * ProgramSet_approxSetTimeMs(repRange.maxrep ?? 0, timer);\n        }, 0)\n      );\n    }, 0);\n}\n\nexport function PlannerStatsUtils_calculateSetResults(\n  evaluatedDays: IPlannerEvalResult[],\n  settings: ISettings\n): ISetResults {\n  const results: ISetResults = {\n    volume: Weight_build(0, settings.units),\n    total: 0,\n    strength: 0,\n    hypertrophy: 0,\n    upper: { strength: 0, hypertrophy: 0, frequency: {}, exercises: [] },\n    lower: { strength: 0, hypertrophy: 0, frequency: {}, exercises: [] },\n    core: { strength: 0, hypertrophy: 0, frequency: {}, exercises: [] },\n    push: { strength: 0, hypertrophy: 0, frequency: {}, exercises: [] },\n    pull: { strength: 0, hypertrophy: 0, frequency: {}, exercises: [] },\n    legs: { strength: 0, hypertrophy: 0, frequency: {}, exercises: [] },\n    muscleGroup: {},\n  };\n\n  for (const muscleGroup of Muscle_getAvailableMuscleGroups(settings)) {\n    results.muscleGroup[muscleGroup] = results.muscleGroup[muscleGroup] || {\n      strength: 0,\n      hypertrophy: 0,\n      frequency: {},\n      exercises: [],\n    };\n  }\n\n  for (let dayIndex = 0; dayIndex < evaluatedDays.length; dayIndex += 1) {\n    const day = evaluatedDays[dayIndex];\n    if (!day.success) {\n      continue;\n    }\n    for (const plannerExercise of day.data) {\n      if (plannerExercise.notused) {\n        continue;\n      }\n      const exercise = Exercise_findByNameAndEquipment(plannerExercise.shortName, settings.exercises);\n      if (exercise == null) {\n        continue;\n      }\n      for (const set of PlannerProgramExercise_sets(plannerExercise)) {\n        const repRange = set.repRange;\n        if (repRange != null) {\n          results.total += repRange.numberOfSets;\n          if ((repRange.maxrep ?? 0) < 8) {\n            results.strength += repRange.numberOfSets;\n          } else {\n            results.hypertrophy += repRange.numberOfSets;\n          }\n          if (exercise.types.indexOf(\"core\") !== -1) {\n            add(results, \"core\", repRange, dayIndex, exercise);\n          }\n          if (exercise.types.indexOf(\"push\") !== -1) {\n            add(results, \"push\", repRange, dayIndex, exercise);\n          }\n          if (exercise.types.indexOf(\"pull\") !== -1) {\n            add(results, \"pull\", repRange, dayIndex, exercise);\n          }\n          if (exercise.types.indexOf(\"legs\") !== -1) {\n            add(results, \"legs\", repRange, dayIndex, exercise);\n          }\n          if (exercise.types.indexOf(\"upper\") !== -1) {\n            add(results, \"upper\", repRange, dayIndex, exercise);\n          }\n          if (exercise.types.indexOf(\"lower\") !== -1) {\n            add(results, \"lower\", repRange, dayIndex, exercise);\n          }\n          const targetMuscleGroups = Exercise_targetMusclesGroups(exercise, settings);\n          const synergistMusclesGroupMultipliers = Exercise_synergistMusclesGroupMultipliers(exercise, settings);\n          for (const muscle of targetMuscleGroups) {\n            const synergistMultiplier =\n              synergistMusclesGroupMultipliers[muscle] ?? settings.planner.synergistMultiplier;\n            addMuscleGroup(results.muscleGroup, muscle, repRange, dayIndex, true, synergistMultiplier, exercise);\n          }\n          for (const muscle of Exercise_synergistMusclesGroups(exercise, settings)) {\n            if (targetMuscleGroups.indexOf(muscle) === -1) {\n              const synergistMultiplier =\n                synergistMusclesGroupMultipliers[muscle] ?? settings.planner.synergistMultiplier;\n              addMuscleGroup(results.muscleGroup, muscle, repRange, dayIndex, false, synergistMultiplier, exercise);\n            }\n          }\n        }\n      }\n    }\n  }\n  return results;\n}\n\nexport function PlannerStatsUtils_setResultsToString(results: ISetResults): string {\n  const lines: string[] = [];\n\n  lines.push(`Total Weekly Volume: ${results.total} sets`);\n  lines.push(`- Strength Sets (<8 reps): ${results.strength} sets`);\n  lines.push(`- Hypertrophy Sets (≥8 reps): ${results.hypertrophy} sets`);\n  lines.push(\"\");\n\n  lines.push(\"Movement Patterns:\");\n  if (results.upper.strength > 0 || results.upper.hypertrophy > 0) {\n    lines.push(\n      `- Upper Body: ${results.upper.strength + results.upper.hypertrophy} sets (${results.upper.strength} strength, ${results.upper.hypertrophy} hypertrophy)`\n    );\n  }\n  if (results.lower.strength > 0 || results.lower.hypertrophy > 0) {\n    lines.push(\n      `- Lower Body: ${results.lower.strength + results.lower.hypertrophy} sets (${results.lower.strength} strength, ${results.lower.hypertrophy} hypertrophy)`\n    );\n  }\n  if (results.push.strength > 0 || results.push.hypertrophy > 0) {\n    lines.push(\n      `- Push: ${results.push.strength + results.push.hypertrophy} sets (${results.push.strength} strength, ${results.push.hypertrophy} hypertrophy)`\n    );\n  }\n  if (results.pull.strength > 0 || results.pull.hypertrophy > 0) {\n    lines.push(\n      `- Pull: ${results.pull.strength + results.pull.hypertrophy} sets (${results.pull.strength} strength, ${results.pull.hypertrophy} hypertrophy)`\n    );\n  }\n  if (results.legs.strength > 0 || results.legs.hypertrophy > 0) {\n    lines.push(\n      `- Legs: ${results.legs.strength + results.legs.hypertrophy} sets (${results.legs.strength} strength, ${results.legs.hypertrophy} hypertrophy)`\n    );\n  }\n  if (results.core.strength > 0 || results.core.hypertrophy > 0) {\n    lines.push(\n      `- Core: ${results.core.strength + results.core.hypertrophy} sets (${results.core.strength} strength, ${results.core.hypertrophy} hypertrophy)`\n    );\n  }\n  lines.push(\"\");\n\n  lines.push(\"Muscle Groups (Weekly Sets):\");\n  const muscleGroups = Object.entries(results.muscleGroup)\n    .filter(([_, stats]) => stats.strength > 0 || stats.hypertrophy > 0)\n    .sort((a, b) => {\n      const totalA = a[1].strength + a[1].hypertrophy;\n      const totalB = b[1].strength + b[1].hypertrophy;\n      return totalB - totalA;\n    });\n\n  for (const [muscle, stats] of muscleGroups) {\n    const total = stats.strength + stats.hypertrophy;\n    const capitalizedMuscle = muscle.charAt(0).toUpperCase() + muscle.slice(1);\n    const frequencyDays = Object.keys(stats.frequency).length;\n\n    lines.push(\n      `- ${capitalizedMuscle}: ${total.toFixed(1)} sets (${stats.strength.toFixed(1)} strength, ${stats.hypertrophy.toFixed(1)} hypertrophy) - ${frequencyDays}x/week`\n    );\n\n    const exercises = stats.exercises\n      .filter((ex) => ex.strengthSets > 0 || ex.hypertrophySets > 0)\n      .sort((a, b) => {\n        const totalA = a.strengthSets + a.hypertrophySets;\n        const totalB = b.strengthSets + b.hypertrophySets;\n        return totalB - totalA;\n      });\n\n    if (exercises.length > 0) {\n      for (const ex of exercises) {\n        const totalSets = ex.strengthSets + ex.hypertrophySets;\n        const synergistNote = ex.isSynergist ? \" (synergist)\" : \"\";\n        lines.push(`  • ${ex.exerciseName}: ${totalSets.toFixed(1)} sets${synergistNote}`);\n      }\n    }\n  }\n\n  return lines.join(\"\\n\");\n}\n\nfunction add(\n  results: IResultsSetSplit,\n  key: keyof IResultsSetSplit,\n  repRange: IPlannerProgramExerciseRepRange,\n  dayIndex: number,\n  exercise: IExercise\n): void {\n  let isStrength = false;\n  if ((repRange.maxrep ?? 0) < 8) {\n    isStrength = true;\n    results[key].strength += repRange.numberOfSets;\n  } else {\n    results[key].hypertrophy += repRange.numberOfSets;\n  }\n  results[key].frequency[dayIndex] = true;\n  if (results[key].exercises.every((e) => e.exerciseName !== exercise.name)) {\n    results[key].exercises.push({\n      exerciseName: exercise.name,\n      dayIndex: dayIndex,\n      isSynergist: false,\n      strengthSets: 0,\n      hypertrophySets: 0,\n    });\n  }\n  const ex = results[key].exercises.find((e) => e.exerciseName === exercise.name);\n  if (ex) {\n    if (isStrength) {\n      ex.strengthSets += repRange.numberOfSets;\n    } else {\n      ex.hypertrophySets += repRange.numberOfSets;\n    }\n  }\n}\n\nfunction addMuscleGroup(\n  results: { [k in IScreenMuscle]: ISetSplit },\n  key: IScreenMuscle,\n  repRange: IPlannerProgramExerciseRepRange,\n  dayIndex: number,\n  isTarget: boolean,\n  synergistMultiplier: number,\n  exercise: IExercise\n): void {\n  synergistMultiplier = synergistMultiplier ?? 0.5;\n  let isStrength = false;\n  results[key] = results[key] || { strength: 0, hypertrophy: 0, frequency: {}, exercises: [] };\n  if ((repRange.maxrep ?? 0) < 8) {\n    isStrength = true;\n    results[key].strength += isTarget ? repRange.numberOfSets : repRange.numberOfSets * synergistMultiplier;\n  } else {\n    results[key].hypertrophy += isTarget ? repRange.numberOfSets : repRange.numberOfSets * synergistMultiplier;\n  }\n  results[key].frequency[dayIndex] = true;\n  if (results[key].exercises.every((e) => e.exerciseName !== exercise.name)) {\n    results[key].exercises.push({\n      exerciseName: exercise.name,\n      dayIndex: dayIndex,\n      isSynergist: !isTarget,\n      strengthSets: 0,\n      hypertrophySets: 0,\n    });\n  }\n  const ex = results[key].exercises.find((e) => e.exerciseName === exercise.name);\n  if (ex) {\n    if (isStrength) {\n      ex.strengthSets += isTarget ? repRange.numberOfSets : repRange.numberOfSets * synergistMultiplier;\n    } else {\n      ex.hypertrophySets += isTarget ? repRange.numberOfSets : repRange.numberOfSets * synergistMultiplier;\n    }\n  }\n}\n","import { IPlannerProgram, ISettings, IDayData, IPlannerProgramDay } from \"../../types\";\nimport { parser as plannerExerciseParser } from \"./plannerExerciseParser\";\nimport memoize from \"micro-memoize\";\nimport {\n  IPlannerEvalFullResult,\n  IPlannerEvalResult,\n  IPlannerSyntaxPointer,\n  PlannerExerciseEvaluator,\n  PlannerSyntaxError,\n} from \"./plannerExerciseEvaluator\";\nimport {\n  IPlannerProgramExercise,\n  IPlannerProgramExerciseWarmupSet,\n  IPlannerProgramReuse,\n  IProgramExerciseProgress,\n  IProgramExerciseUpdate,\n  IProgramExerciseDescriptions,\n} from \"./models/types\";\nimport { PlannerKey_fromFullName, PlannerKey_fromPlannerExercise } from \"./plannerKey\";\nimport { ObjectUtils_isEqual, ObjectUtils_clone, ObjectUtils_keys, ObjectUtils_values } from \"../../utils/object\";\nimport { Weight_type } from \"../../models/weight\";\nimport { PlannerProgram_fullToWeekEvalResult, PlannerProgram_generateFullText } from \"./models/plannerProgram\";\nimport { ScriptRunner } from \"../../parser\";\nimport { Progress_createEmptyScriptBindings, Progress_createScriptFunctions } from \"../../models/progress\";\nimport { LiftoscriptSyntaxError } from \"../../liftoscriptEvaluator\";\nimport {\n  PlannerProgramExercise_setVariations,\n  PlannerProgramExercise_evaluateSetVariations,\n  PlannerProgramExercise_getExercise,\n  PlannerProgramExercise_getState,\n  PlannerProgramExercise_getProgressScript,\n  PlannerProgramExercise_getUpdateScript,\n  PlannerProgramExercise_buildDpRangeScript,\n} from \"./models/plannerProgramExercise\";\n\nexport type IByTag<T> = Record<number, T>;\nexport type IByExercise<T> = Record<string, T>;\nexport type IByExerciseWeekDay<T> = Record<string, Record<number, Record<number, T>>>;\nexport type IByWeekDayExercise<T> = Record<number, Record<number, Record<string, T>>>;\n\ninterface IPlannerEvalMetadata {\n  byExerciseWeekDay: IByExerciseWeekDay<IPlannerProgramExercise>;\n  byWeekDayExercise: IByWeekDayExercise<IPlannerProgramExercise>;\n  fullNames: Set<string>;\n  notused: Set<string>;\n  properties: {\n    id: IByExercise<{ property: number[]; dayData: Required<IDayData> }>;\n    progress: IByExercise<{ property: IProgramExerciseProgress; dayData: Required<IDayData> }>;\n    update: IByExercise<{ property: IProgramExerciseUpdate; dayData: Required<IDayData> }>;\n    warmup: IByExercise<{ warmupSets: IPlannerProgramExerciseWarmupSet[]; dayData: Required<IDayData> }>;\n  };\n}\n\nexport function PlannerEvaluator_getFirstError(evaluatedWeeks: IPlannerEvalResult[][]): PlannerSyntaxError | undefined {\n  let error: PlannerSyntaxError | undefined;\n  for (const week of evaluatedWeeks) {\n    for (const day of week) {\n      if (!day.success) {\n        error = day.error;\n      }\n    }\n  }\n  return error;\n}\n\nexport function PlannerEvaluator_fillInMetadata(\n  exercise: IPlannerProgramExercise,\n  metadata: IPlannerEvalMetadata,\n  dayData: Required<IDayData>\n): void {\n  if (exercise.progress?.type === \"dp\") {\n    const hasRange = exercise.setVariations.some((sv) => sv.sets.some((s) => s.repRange?.minrep != null));\n    if (hasRange) {\n      exercise.progress = { ...exercise.progress, script: PlannerProgramExercise_buildDpRangeScript() };\n    }\n  }\n  if (metadata.byWeekDayExercise[dayData.week - 1]?.[dayData.dayInWeek - 1]?.[exercise.key] != null) {\n    throw PlannerSyntaxError.fromPoint(\n      exercise.fullName,\n      `Exercise ${exercise.key} is already used in this day. Combine them together, or add a label to separate out.`,\n      exercise.points.fullName\n    );\n  }\n  const tagsProp = exercise.tags;\n  if (tagsProp != null && tagsProp.length > 0) {\n    const existingTags = metadata.properties.id[exercise.key];\n    if (existingTags != null && !ObjectUtils_isEqual(existingTags.property, tagsProp)) {\n      const point = exercise.points.idPoint || exercise.points.fullName;\n      throw PlannerSyntaxError.fromPoint(\n        exercise.fullName,\n        `Same property 'id' is specified with different arguments in multiple weeks/days for exercise '${exercise.name}': both in ` +\n          `week ${existingTags.dayData.week + 1}, day ${existingTags.dayData.dayInWeek + 1} ` +\n          `and week ${dayData.week}, day ${dayData.dayInWeek}`,\n        point\n      );\n    }\n    metadata.properties.id[exercise.key] = {\n      property: tagsProp,\n      dayData,\n    };\n  }\n\n  const progressProp = exercise.progress;\n  if (progressProp != null && progressProp.type !== \"none\") {\n    const existingProgress = metadata.properties.progress[exercise.key];\n    if (\n      existingProgress != null &&\n      !PlannerExerciseEvaluator.isEqualProgress(progressProp, existingProgress.property)\n    ) {\n      const point = exercise.points.progressPoint || exercise.points.fullName;\n      throw PlannerSyntaxError.fromPoint(\n        exercise.fullName,\n        `Same property 'progress' is specified with different arguments in multiple weeks/days for exercise '${exercise.name}': both in ` +\n          `week ${existingProgress.dayData.week + 1}, day ${existingProgress.dayData.dayInWeek + 1} ` +\n          `and week ${dayData.week}, day ${dayData.dayInWeek}`,\n        point\n      );\n    }\n    metadata.properties.progress[exercise.key] = {\n      property: progressProp,\n      dayData,\n    };\n  }\n\n  const updateProp = exercise.update;\n  if (updateProp != null) {\n    const existingUpdate = metadata.properties.update[exercise.key];\n    if (existingUpdate != null && !PlannerExerciseEvaluator.isEqualUpdate(updateProp, existingUpdate.property)) {\n      const point = exercise.points.updatePoint || exercise.points.fullName;\n      throw PlannerSyntaxError.fromPoint(\n        exercise.fullName,\n        `Same property 'update' is specified with different arguments in multiple weeks/days for exercise '${exercise.name}': both in ` +\n          `week ${existingUpdate.dayData.week + 1}, day ${existingUpdate.dayData.dayInWeek + 1} ` +\n          `and week ${dayData.week}, day ${dayData.dayInWeek}`,\n        point\n      );\n    }\n    metadata.properties.update[exercise.key] = {\n      property: updateProp,\n      dayData,\n    };\n  }\n  if (exercise.notused) {\n    metadata.notused.add(exercise.key);\n  }\n  if (exercise.warmupSets != null) {\n    const scheme = JSON.stringify(exercise.warmupSets);\n    const ws = metadata.properties.warmup[exercise.key];\n    if (ws != null && JSON.stringify(ws.warmupSets) !== scheme) {\n      throw PlannerSyntaxError.fromPoint(\n        exercise.fullName,\n        `Different warmup sets are specified in multiple weeks/days for exercise '${exercise.name}': both in ` +\n          `week ${ws.dayData.week + 1}, day ${ws.dayData.dayInWeek + 1} ` +\n          `and week ${dayData.week}, day ${dayData.dayInWeek}`,\n        exercise.points.warmupPoint || exercise.points.fullName\n      );\n    }\n    metadata.properties.warmup[exercise.key] = {\n      warmupSets: exercise.warmupSets,\n      dayData,\n    };\n  }\n  PlannerEvaluator_setByWeekDayExercise(\n    metadata.byWeekDayExercise,\n    exercise.key,\n    dayData.week - 1,\n    dayData.dayInWeek - 1,\n    exercise\n  );\n  PlannerEvaluator_setByExerciseWeekDay(\n    metadata.byExerciseWeekDay,\n    exercise.key,\n    dayData.week - 1,\n    dayData.dayInWeek - 1,\n    exercise\n  );\n  metadata.fullNames.add(exercise.fullName);\n}\n\nexport function PlannerEvaluator_evaluateDay(\n  day: IPlannerProgramDay,\n  dayData: Required<IDayData>,\n  settings: ISettings\n): IPlannerEvalResult {\n  const tree = plannerExerciseParser.parse(day.exerciseText);\n  const evaluator = new PlannerExerciseEvaluator(day.exerciseText, settings, \"perday\", dayData);\n  const result = evaluator.evaluate(tree.topNode);\n  if (result.success) {\n    const exercises = result.data[0]?.days[0]?.exercises || [];\n    return { success: true, data: exercises };\n  } else {\n    return result;\n  }\n}\n\nexport function PlannerEvaluator_getPerDayEvaluatedWeeks(\n  plannerProgram: IPlannerProgram,\n  settings: ISettings\n): {\n  evaluatedWeeks: IPlannerEvalResult[][];\n  metadata: IPlannerEvalMetadata;\n} {\n  let dayIndex = 0;\n  const metadata: IPlannerEvalMetadata = {\n    byExerciseWeekDay: {},\n    byWeekDayExercise: {},\n    fullNames: new Set(),\n    notused: new Set(),\n    properties: { progress: {}, update: {}, warmup: {}, id: {} },\n  };\n  const evaluatedWeeks: IPlannerEvalResult[][] = plannerProgram.weeks.map((week, weekIndex) => {\n    return week.days.map((day, dayInWeekIndex) => {\n      const dayData = {\n        week: weekIndex + 1,\n        dayInWeek: dayInWeekIndex + 1,\n        day: dayIndex + 1,\n      };\n      const result = PlannerEvaluator_evaluateDay(\n        day,\n        { week: weekIndex + 1, dayInWeek: dayInWeekIndex + 1, day: dayIndex + 1 },\n        settings\n      );\n      dayIndex += 1;\n      if (result.success) {\n        const exercises = result.data;\n        for (const exercise of exercises) {\n          try {\n            PlannerEvaluator_fillInMetadata(exercise, metadata, dayData);\n          } catch (e) {\n            if (e instanceof PlannerSyntaxError) {\n              return { success: false, error: e };\n            } else {\n              throw e;\n            }\n          }\n        }\n        return { success: true, data: exercises };\n      } else {\n        return result;\n      }\n    });\n  });\n  return { evaluatedWeeks, metadata };\n}\n\nexport function PlannerEvaluator_changeExerciseName(\n  text: string,\n  from: string,\n  to: string,\n  settings: ISettings\n): string {\n  const evaluator = new PlannerExerciseEvaluator(text, settings, \"perday\");\n  const tree = plannerExerciseParser.parse(text);\n  const result = evaluator.changeExerciseName(tree.topNode, from, to);\n  return result;\n}\n\nexport function PlannerEvaluator_getFullEvaluatedWeeks(\n  fullProgramText: string,\n  settings: ISettings\n): {\n  evaluatedWeeks: IPlannerEvalFullResult;\n  metadata: IPlannerEvalMetadata;\n} {\n  let dayIndex = 0;\n  const metadata: IPlannerEvalMetadata = {\n    byExerciseWeekDay: {},\n    byWeekDayExercise: {},\n    fullNames: new Set(),\n    notused: new Set(),\n    properties: { progress: {}, update: {}, warmup: {}, id: {} },\n  };\n  const evaluator = new PlannerExerciseEvaluator(fullProgramText, settings, \"full\");\n  const tree = plannerExerciseParser.parse(fullProgramText);\n  const result = evaluator.evaluate(tree.topNode);\n  if (result.success) {\n    try {\n      for (let weekIndex = 0; weekIndex < result.data.length; weekIndex += 1) {\n        const week = result.data[weekIndex];\n        for (let dayInWeekIndex = 0; dayInWeekIndex < week.days.length; dayInWeekIndex += 1) {\n          const day = week.days[dayInWeekIndex];\n          const exercises = day.exercises;\n          for (const exercise of exercises) {\n            const dayData = { week: weekIndex + 1, dayInWeek: dayInWeekIndex + 1, day: dayIndex + 1 };\n            PlannerEvaluator_fillInMetadata(exercise, metadata, dayData);\n          }\n          dayIndex += 1;\n        }\n      }\n    } catch (e) {\n      if (e instanceof PlannerSyntaxError) {\n        return { evaluatedWeeks: { success: false, error: e }, metadata };\n      } else {\n        throw e;\n      }\n    }\n    return { evaluatedWeeks: result, metadata };\n  } else {\n    return { evaluatedWeeks: result, metadata };\n  }\n}\n\nexport function PlannerEvaluator_getDayIndexFromWeekAndDayInWeekIndex(\n  evaluatedWeeks: IPlannerEvalResult[][],\n  weekIndex: number,\n  dayInWeekIndex: number\n): number | undefined {\n  let dayIndex = 0;\n  for (let i = 0; i < evaluatedWeeks.length; i += 1) {\n    const week = evaluatedWeeks[i];\n    for (let j = 0; j < week.length; j += 1) {\n      if (i === weekIndex && j === dayInWeekIndex) {\n        return dayIndex;\n      }\n      dayIndex += 1;\n    }\n  }\n  return undefined;\n}\n\nexport function PlannerEvaluator_fillRepeats(\n  exercise: IPlannerProgramExercise,\n  evaluatedWeeks: IPlannerEvalResult[][],\n  dayInWeekIndex: number,\n  byExerciseWeekDay: IByExerciseWeekDay<IPlannerProgramExercise>\n): void {\n  for (const repeatWeek of exercise.repeat ?? []) {\n    const repeatWeekIndex = repeatWeek - 1;\n    if (byExerciseWeekDay[exercise.key]?.[repeatWeekIndex]?.[dayInWeekIndex] == null) {\n      const dayData = {\n        week: repeatWeek,\n        dayInWeek: dayInWeekIndex + 1,\n        day:\n          (PlannerEvaluator_getDayIndexFromWeekAndDayInWeekIndex(evaluatedWeeks, repeatWeekIndex, dayInWeekIndex) ??\n            0) + 1,\n      };\n      const repeatedExercise: IPlannerProgramExercise = {\n        ...exercise,\n        reuse: exercise.reuse ? { ...exercise.reuse } : undefined,\n        progress: exercise.progress\n          ? { ...exercise.progress, reuse: exercise.progress.reuse ? { ...exercise.progress.reuse } : undefined }\n          : undefined,\n        update: exercise.update\n          ? { ...exercise.update, reuse: exercise.update.reuse ? { ...exercise.update.reuse } : undefined }\n          : undefined,\n        repeat: [],\n        dayData,\n        isRepeat: true,\n      };\n      PlannerEvaluator_setByExerciseWeekDay(\n        byExerciseWeekDay,\n        exercise.key,\n        repeatWeekIndex,\n        dayInWeekIndex,\n        repeatedExercise\n      );\n      const day = evaluatedWeeks[repeatWeekIndex]?.[dayInWeekIndex];\n      if (day?.success) {\n        day.data.push(repeatedExercise);\n      }\n    }\n  }\n}\n\n// The order a day's exercises must be in, whether they're evaluated exercises or the parsed top\n// lines PlannerProgram_groupedTopLines sorts. Both paths have to agree exactly: compaction matches\n// lines across weeks by exerciseIndex, so a template that lands in a different slot in one week\n// stops being recognized as the same line and its week range falls apart.\n//\n// fillRepeats appends materialized copies at the end of the day, so neither tie-break can be left\n// to document order. A `used: none` template takes the exerciseIndex of the used exercise it\n// precedes, so it sorts before it; a repeat copy sorts before the local exercise it shares an\n// index with, matching its position in the week it was written.\nexport function PlannerEvaluator_compareExerciseOrder(\n  ex1: { exerciseIndex?: number; notused?: boolean; isRepeat?: boolean },\n  ex2: { exerciseIndex?: number; notused?: boolean; isRepeat?: boolean }\n): number {\n  if ((ex1.exerciseIndex ?? 0) !== (ex2.exerciseIndex ?? 0)) {\n    return (ex1.exerciseIndex ?? 0) - (ex2.exerciseIndex ?? 0);\n  }\n  if (!!ex1.notused !== !!ex2.notused) {\n    return ex1.notused ? -1 : 1;\n  }\n  return (ex1.isRepeat ? 0 : 1) - (ex2.isRepeat ? 0 : 1);\n}\n\n// A reuse resolving back to the very instance that declares it makes exercise.reuse.exercise (or\n// progress/update/descriptions .reuse.exercise) a self-loop, and PlannerProgramExercise_getState\n// walks those pointers with no visited set - so every later read of the program died with\n// \"Maximum call stack size exceeded\" instead of showing an error. Checked before the pointer is\n// wired, so the loop never forms. Compared by identity, not by key: reusing the same exercise from\n// an earlier week (`Squat / ...Squat[1:1]`) resolves to a different instance and is legitimate.\nfunction PlannerEvaluator_checkSelfReuse(\n  exercise: IPlannerProgramExercise,\n  originalExercise: IPlannerProgramExercise | undefined,\n  message: string,\n  point: IPlannerSyntaxPointer\n): void {\n  if (originalExercise === exercise) {\n    throw PlannerSyntaxError.fromPoint(exercise.fullName, message, point);\n  }\n}\n\nexport function PlannerEvaluator_fillSetReuses(\n  exercise: IPlannerProgramExercise,\n  evaluatedWeeks: IPlannerEvalResult[][],\n  weekIndex: number,\n  settings: ISettings,\n  metadata: IPlannerEvalMetadata\n): void {\n  if (exercise.reuse && exercise.points.reuseSetPoint) {\n    const reuse = exercise.reuse;\n    const originalExercises = PlannerEvaluator_findOriginalExercisesAtWeekDay(\n      settings,\n      reuse.fullName,\n      evaluatedWeeks,\n      reuse.week ?? weekIndex + 1 ?? 1,\n      reuse.day\n    );\n    if (originalExercises.length > 1) {\n      throw PlannerSyntaxError.fromPoint(\n        exercise.fullName,\n        `There're several exercises matching, please be more specific with [week:day] syntax`,\n        exercise.points.reuseSetPoint\n      );\n    }\n    const originalExercise = originalExercises[0];\n    if (!originalExercise) {\n      throw PlannerSyntaxError.fromPoint(\n        exercise.fullName,\n        `No such exercise ${reuse.fullName} at week: ${reuse.week ?? weekIndex + 1}${\n          reuse.day != null ? `, day: ${reuse.day}` : \"\"\n        }`,\n        exercise.points.reuseSetPoint\n      );\n    }\n    PlannerEvaluator_checkSelfReuse(\n      exercise,\n      originalExercise.exercise,\n      `Exercise cannot reuse itself`,\n      exercise.points.reuseSetPoint\n    );\n    if (originalExercise.exercise.reuse?.fullName != null) {\n      throw PlannerSyntaxError.fromPoint(\n        exercise.fullName,\n        `Original exercise cannot reuse another exercise's sets x reps`,\n        exercise.points.reuseSetPoint\n      );\n    }\n    if ((originalExercise.exercise.exerciseVariations?.length ?? 0) > 1) {\n      throw PlannerSyntaxError.fromPoint(\n        exercise.fullName,\n        `Cannot reuse '${reuse.fullName}' - it has multiple exercise variations. Move the shared sets/progress into a 'used: none' template and reuse that instead`,\n        exercise.points.reuseSetPoint\n      );\n    }\n    if (\n      originalExercise.exercise.progress?.reuse != null &&\n      exercise.progress == null &&\n      !originalExercise.exercise.notused\n    ) {\n      throw PlannerSyntaxError.fromPoint(\n        exercise.fullName,\n        `This exercise doesn't specify progress - so the original USED exercise's progress cannot reuse another exercise's progress`,\n        exercise.points.reuseSetPoint\n      );\n    }\n    if (\n      originalExercise.exercise.update?.reuse != null &&\n      exercise.update == null &&\n      !originalExercise.exercise.notused\n    ) {\n      throw PlannerSyntaxError.fromPoint(\n        exercise.fullName,\n        `This exercise doesn't specify 'update' - so the original exercise's 'update' cannot reuse another exercise's 'update'`,\n        exercise.points.reuseSetPoint\n      );\n    }\n    if (originalExercise.exercise.progress != null && exercise.progress == null) {\n      const sharedProgressReuse: IPlannerProgramReuse = {\n        fullName: originalExercise.exercise.fullName,\n        source: \"overall\",\n      };\n      const originalProgress = originalExercise.exercise.progress;\n      PlannerEvaluator_forEachSiblingInstance(exercise, metadata, (other) => {\n        if (other.progress == null) {\n          other.progress = {\n            type: originalProgress.type,\n            state: ObjectUtils_clone(originalProgress.state),\n            stateMetadata: ObjectUtils_clone(originalProgress.stateMetadata),\n            reuse: sharedProgressReuse,\n          };\n        }\n      });\n    }\n    if (originalExercise.exercise.update != null && exercise.update == null) {\n      const sharedUpdateReuse: IPlannerProgramReuse = {\n        fullName: originalExercise.exercise.fullName,\n        source: \"overall\",\n      };\n      const originalUpdate = originalExercise.exercise.update;\n      PlannerEvaluator_forEachSiblingInstance(exercise, metadata, (other) => {\n        if (other.update == null) {\n          other.update = {\n            type: originalUpdate.type,\n            reuse: sharedUpdateReuse,\n          };\n        }\n      });\n    }\n\n    exercise.reuse.exercise = originalExercise.exercise;\n  }\n}\n\nfunction PlannerEvaluator_forEachSiblingInstance(\n  exercise: IPlannerProgramExercise,\n  metadata: IPlannerEvalMetadata,\n  cb: (other: IPlannerProgramExercise) => void\n): void {\n  const byKey = metadata.byExerciseWeekDay[exercise.key];\n  if (byKey == null) {\n    return;\n  }\n  for (const weekKey of ObjectUtils_keys(byKey)) {\n    const weekEntry = byKey[weekKey as unknown as number];\n    for (const dayKey of ObjectUtils_keys(weekEntry)) {\n      cb(weekEntry[dayKey as unknown as number]);\n    }\n  }\n}\n\nexport function PlannerEvaluator_fillEvaluatedSetVariations(exercise: IPlannerProgramExercise): void {\n  const setVariations = PlannerProgramExercise_setVariations(exercise);\n  const evaluatedSetVariations = PlannerProgramExercise_evaluateSetVariations(exercise, setVariations);\n  exercise.evaluatedSetVariations = evaluatedSetVariations;\n}\n\nexport function PlannerEvaluator_fillDescriptions(\n  exercise: IPlannerProgramExercise,\n  evaluatedWeeks: IPlannerEvalResult[][],\n  weekIndex: number,\n  dayIndex: number\n): void {\n  if (exercise.descriptions == null || exercise.descriptions.values.length === 0) {\n    const lastWeekExercise = PlannerEvaluator_findLastWeekExercise(\n      evaluatedWeeks,\n      weekIndex,\n      dayIndex,\n      exercise,\n      (ex) => ex.descriptions != null\n    );\n    if (lastWeekExercise && lastWeekExercise.descriptions) {\n      exercise.descriptions = ObjectUtils_clone(lastWeekExercise.descriptions);\n    }\n  }\n}\n\n// Whether a description is itself borrowed, asked in a way that doesn't depend on whether the\n// exercise holding it has been wired yet: before wiring it is still the literal `...name`\n// directive, after wiring it carries the reuse it came from. Reading both is what makes the check\n// below independent of the order days happen to be evaluated in.\nfunction PlannerEvaluator_isDescriptionReuse(descriptions: IProgramExerciseDescriptions): boolean {\n  return (\n    descriptions.reuse != null ||\n    (descriptions.values.length === 1 && !!descriptions.values[0].value?.startsWith(\"...\"))\n  );\n}\n\nexport function PlannerEvaluator_fillDescriptionReuses(\n  exercise: IPlannerProgramExercise,\n  weekIndex: number,\n  byExerciseWeekDay: IByExerciseWeekDay<IPlannerProgramExercise>,\n  settings: ISettings\n): void {\n  if (\n    exercise.descriptions != null &&\n    exercise.descriptions.values.length === 1 &&\n    exercise.descriptions.values[0].value?.startsWith(\"...\")\n  ) {\n    const reusingName = exercise.descriptions.values[0].value.slice(3).trim();\n    const result = PlannerEvaluator_findReusedDescriptions(reusingName, weekIndex, byExerciseWeekDay, settings);\n    if (result != null) {\n      const { descriptions, exercise: originalExercise } = result;\n      PlannerEvaluator_checkSelfReuse(\n        exercise,\n        originalExercise,\n        `Exercise cannot reuse its own description`,\n        exercise.points.fullName\n      );\n      // Unlike sets or progress, this copies whatever the target holds at the moment it is wired\n      // rather than following a pointer, so a target that is itself borrowing hands over either\n      // the raw `...name` directive - which then reads as the description, shown to the user as\n      // literal text - or whatever it had been handed in turn, depending on the order the days\n      // were evaluated in. Requiring the target to write its own description settles both, and\n      // takes description loops with it: every exercise around such a loop is borrowing.\n      if (PlannerEvaluator_isDescriptionReuse(descriptions)) {\n        throw PlannerSyntaxError.fromPoint(\n          exercise.fullName,\n          `Original exercise cannot reuse another description - reuse the one that writes it instead`,\n          exercise.points.fullName\n        );\n      }\n      exercise.descriptions = {\n        values: [...ObjectUtils_clone(descriptions.values)],\n        reuse: { fullName: originalExercise.fullName, exercise: originalExercise, source: \"specific\" },\n      };\n    }\n  }\n}\n\n// The properties fillSingleProperties copies onto every instance below — i.e. the ones a single\n// day's declaration governs the whole exercise with. Anything reasoning about \"this property is\n// program-wide\" must read this list rather than restate it; a hand-kept copy elsewhere drifted\n// the moment this function changed.\n//\n// `id` is deliberately absent. It is checked for consistency across days (see the conflict check\n// on metadata.properties.id above) but its value is never propagated, so a declaration without\n// `id:` really does evaluate with no tags.\nexport const PlannerEvaluator_hoistedProperties = [\"warmup\", \"progress\", \"update\", \"used\"] as const;\n\nexport function PlannerEvaluator_fillSingleProperties(\n  exercise: IPlannerProgramExercise,\n  metadata: IPlannerEvalMetadata\n): void {\n  if (metadata.notused.has(exercise.key)) {\n    exercise.notused = true;\n  }\n\n  if (metadata.properties.progress[exercise.key] != null) {\n    const existingProgress = exercise.progress;\n    if (!existingProgress) {\n      exercise.progress = metadata.properties.progress[exercise.key].property;\n    }\n  }\n\n  if (metadata.properties.update[exercise.key] != null && !exercise.update) {\n    exercise.update = metadata.properties.update[exercise.key].property;\n  }\n\n  if (metadata.properties.warmup[exercise.key] != null) {\n    exercise.warmupSets = metadata.properties.warmup[exercise.key].warmupSets;\n  }\n}\n\nexport function PlannerEvaluator_fillProgressReuses(\n  evaluatedWeeks: IPlannerEvalResult[][],\n  exercise: IPlannerProgramExercise,\n  settings: ISettings,\n  metadata: IPlannerEvalMetadata\n): void {\n  const progress = exercise.progress;\n  if (progress?.type === \"custom\") {\n    const fullName = progress.reuse?.fullName;\n    if (progress.reuse && fullName) {\n      const key = PlannerKey_fromFullName(fullName, settings.exercises);\n      const point = exercise.points.progressPoint || exercise.points.fullName;\n      if (metadata.byExerciseWeekDay[key] == null) {\n        throw PlannerSyntaxError.fromPoint(exercise.fullName, `No such exercise ${fullName}`, point);\n      }\n      const originalProperty = metadata.properties.progress[key];\n      const dayData = originalProperty?.dayData;\n      const originalProgress = originalProperty?.property;\n      if (!originalProgress || !dayData) {\n        throw PlannerSyntaxError.fromPoint(exercise.fullName, \"Original exercise should specify progress\", point);\n      }\n      // fillSingleProperties hands every instance the same progress object, so identity here means\n      // the exercise reuses its own progress - see PlannerEvaluator_checkSelfReuse.\n      if (originalProgress === progress) {\n        throw PlannerSyntaxError.fromPoint(exercise.fullName, `Exercise cannot reuse its own progress`, point);\n      }\n      if (originalProgress.reuse?.fullName != null) {\n        // originalProgress.reuse.exercise may not be resolved yet (resolution goes in document\n        // order), so check notused via metadata, which is complete before this pass.\n        const originalReuseKey = PlannerKey_fromFullName(originalProgress.reuse.fullName, settings.exercises);\n        if (!metadata.notused.has(originalReuseKey)) {\n          throw PlannerSyntaxError.fromPoint(\n            exercise.fullName,\n            `Original exercise cannot reuse another progress`,\n            point\n          );\n        }\n      }\n      if (originalProgress.type !== \"custom\") {\n        throw PlannerSyntaxError.fromPoint(\n          exercise.fullName,\n          \"Original exercise should specify custom progress\",\n          point\n        );\n      }\n      const originalState = originalProgress.state;\n      const state = progress.state;\n      for (const stateKey of ObjectUtils_keys(originalState)) {\n        const value = originalState[stateKey];\n        if (state[key] != null && Weight_type(value) !== Weight_type(state[stateKey])) {\n          throw PlannerSyntaxError.fromPoint(exercise.fullName, `Wrong type of state variable ${stateKey}`, point);\n        }\n      }\n      const originalExercises = PlannerEvaluator_findOriginalExercisesAtWeekDay(\n        settings,\n        fullName,\n        evaluatedWeeks,\n        dayData.week,\n        dayData.dayInWeek\n      );\n      const originalExercise = originalExercises[0]?.exercise;\n      if (\n        originalExercise?.reuse != null &&\n        (originalExercise.progress == null || originalExercise.progress.reuse != null)\n      ) {\n        throw PlannerSyntaxError.fromPoint(\n          exercise.fullName,\n          `Original exercise '${originalExercise.fullName}' should not reuse other exercise`,\n          point\n        );\n      }\n      progress.reuse.exercise = originalExercise;\n    }\n  }\n}\n\nexport function PlannerEvaluator_checkUpdateScript(\n  exercise: IPlannerProgramExercise,\n  settings: ISettings,\n  dayData: IDayData\n): void {\n  const update = exercise.update;\n  if (update?.type === \"custom\") {\n    const { script, liftoscriptNode } = update;\n    if (script && liftoscriptNode) {\n      const exerciseType = PlannerProgramExercise_getExercise(exercise, settings);\n      const state = PlannerProgramExercise_getState(exercise);\n      const liftoscriptEvaluator = new ScriptRunner(\n        script,\n        state,\n        {},\n        Progress_createEmptyScriptBindings(dayData, settings),\n        Progress_createScriptFunctions(settings),\n        settings.units,\n        { exerciseType, unit: settings.units, prints: [] },\n        \"update\"\n      );\n      try {\n        liftoscriptEvaluator.parse();\n      } catch (e) {\n        if (e instanceof LiftoscriptSyntaxError && liftoscriptNode) {\n          const [line] = PlannerExerciseEvaluator.getLineAndOffset(script, liftoscriptNode);\n          throw new PlannerSyntaxError(\n            e.message,\n            line + e.line,\n            e.offset,\n            liftoscriptNode.from + e.from,\n            liftoscriptNode.from + e.to\n          );\n        } else {\n          throw e;\n        }\n      }\n    }\n  }\n}\n\nexport function PlannerEvaluator_fillUpdateReuses(\n  evaluatedWeeks: IPlannerEvalResult[][],\n  exercise: IPlannerProgramExercise,\n  settings: ISettings,\n  metadata: IPlannerEvalMetadata\n): void {\n  const update = exercise.update;\n  if (update?.type === \"custom\") {\n    const fullName = update.reuse?.fullName;\n    if (update.reuse && fullName) {\n      const key = PlannerKey_fromFullName(fullName, settings.exercises);\n      const point = exercise.points.updatePoint || exercise.points.fullName;\n\n      if (metadata.byExerciseWeekDay[key] == null) {\n        throw PlannerSyntaxError.fromPoint(exercise.fullName, `No such exercise ${fullName}`, point);\n      }\n      const originalProperty = metadata.properties.update[key];\n      const originalUpdate = originalProperty?.property;\n      const dayData = originalProperty?.dayData;\n      if (!originalUpdate || !dayData) {\n        throw PlannerSyntaxError.fromPoint(exercise.fullName, \"Original exercise should specify update\", point);\n      }\n      // Same shared-object reasoning as the progress check above.\n      if (originalUpdate === update) {\n        throw PlannerSyntaxError.fromPoint(exercise.fullName, `Exercise cannot reuse its own update`, point);\n      }\n      if (originalUpdate.reuse?.fullName != null) {\n        // Same as the progress check above: reuse.exercise may not be resolved yet.\n        const originalReuseKey = PlannerKey_fromFullName(originalUpdate.reuse.fullName, settings.exercises);\n        if (!metadata.notused.has(originalReuseKey)) {\n          throw PlannerSyntaxError.fromPoint(exercise.fullName, `Original exercise cannot reuse another update`, point);\n        }\n      }\n      if (originalUpdate.type !== \"custom\") {\n        throw PlannerSyntaxError.fromPoint(exercise.fullName, \"Original exercise should specify custom update\", point);\n      }\n      const stateKeys = originalUpdate.meta?.stateKeys || new Set();\n      if (stateKeys.size !== 0) {\n        const progress = exercise.progress;\n        if (progress == null) {\n          throw PlannerSyntaxError.fromPoint(\n            exercise.fullName,\n            \"If 'update' block uses state variables, exercise should define them in 'progress' block\",\n            point\n          );\n        }\n        const state = PlannerProgramExercise_getState(exercise);\n        for (const stateKey of stateKeys) {\n          if (state[stateKey] == null) {\n            throw PlannerSyntaxError.fromPoint(\n              exercise.fullName,\n              `Missing state variable ${stateKey} that's used in the original update block`,\n              point\n            );\n          }\n        }\n      }\n      const originalExercises = PlannerEvaluator_findOriginalExercisesAtWeekDay(\n        settings,\n        fullName,\n        evaluatedWeeks,\n        dayData.week,\n        dayData.dayInWeek\n      );\n      const originalExercise = originalExercises[0]?.exercise;\n      if (\n        originalExercise?.reuse != null &&\n        (originalExercise.update == null || originalExercise.update.reuse != null)\n      ) {\n        throw PlannerSyntaxError.fromPoint(\n          exercise.fullName,\n          `Original exercise '${originalExercise.fullName}' should not reuse other exercise`,\n          point\n        );\n      }\n      update.reuse.exercise = originalExercise;\n    }\n  }\n}\n\n// Only the progress edge needs a graph walk, and it is worth saying why the other three don't,\n// since the answer isn't \"the reuse graph is acyclic\" — it isn't, and deliberately so (see below).\n// What has to hold is that the resolvers terminate and every reuse resolves to something concrete,\n// which each edge secures its own way:\n//\n//   sets         can't chain at all (\"Original exercise cannot reuse another exercise's sets\")\n//   descriptions can't chain either, so no loop can form - PlannerEvaluator_fillDescriptionReuses\n//   update       chains, and a loop resolves no script, which checkReusesResolve rejects\n//   progress     chains, and a loop still resolves a script - hence the walk below\n//\n// A self reuse is caught where it is wired, but two exercises reusing each other's progress close\n// the same loop only once both are wired - and PlannerProgramExercise_getState walks exactly these\n// pointers, so the loop is an infinite recursion on every later read of the program.\n//\n// The walk mirrors those getters, stop condition included: an exercise declaring its own progress\n// ends the chain, which is why A's progress reusing B while B reuses A's sets is fine. That shape\n// does leave a cycle in the object graph; evaluated programs are allowed to be cyclic, and\n// ObjectUtils_clone carries a visited set for exactly that reason.\n//\n// Runs after every reuse is wired, since a loop isn't visible until the last pointer is in place.\nexport function PlannerEvaluator_checkReuseLoops(exercise: IPlannerProgramExercise): void {\n  const seen = new Set<IPlannerProgramExercise>();\n  let current: IPlannerProgramExercise | undefined = exercise;\n  while (current != null && !(current.progress != null && current.progress.reuse == null)) {\n    if (seen.has(current)) {\n      throw PlannerSyntaxError.fromPoint(\n        exercise.fullName,\n        `This exercise ends up reusing itself through other exercises`,\n        exercise.points.progressPoint || exercise.points.reuseSetPoint || exercise.points.fullName\n      );\n    }\n    seen.add(current);\n    current = current.progress?.reuse?.exercise ?? current.reuse?.exercise;\n  }\n}\n\n// How far a reused script can be passed along, asked of the thing that does the passing rather\n// than restated as a shape here. The progression and update runners resolve through these same\n// getters, so a chain they can't follow is a program that saves cleanly, shows a progression, and\n// then silently never runs it. Stated once: deepening the getters relaxes this along with them.\n//\n// Runs after every reuse is wired, since resolution reads other exercises.\nexport function PlannerEvaluator_checkReusesResolve(exercise: IPlannerProgramExercise): void {\n  if (exercise.progress?.type === \"custom\" && PlannerProgramExercise_getProgressScript(exercise) == null) {\n    throw PlannerSyntaxError.fromPoint(\n      exercise.fullName,\n      `Couldn't find the progress script this reuses - reuse the exercise that defines it instead`,\n      exercise.points.progressPoint || exercise.points.fullName\n    );\n  }\n  if (exercise.update != null && PlannerProgramExercise_getUpdateScript(exercise) == null) {\n    throw PlannerSyntaxError.fromPoint(\n      exercise.fullName,\n      `Couldn't find the update script this reuses - reuse the exercise that defines it instead`,\n      exercise.points.updatePoint || exercise.points.fullName\n    );\n  }\n}\n\nexport function PlannerEvaluator_postProcess(\n  evaluatedWeeks: IPlannerEvalResult[][],\n  settings: ISettings,\n  metadata: IPlannerEvalMetadata\n): void {\n  PlannerEvaluator_iterateOverExercises(\n    evaluatedWeeks,\n    (weekIndex, dayInWeekIndex, dayIndex, exerciseIndex, exercise) => {\n      PlannerEvaluator_fillDescriptions(exercise, evaluatedWeeks, weekIndex, dayInWeekIndex);\n      PlannerEvaluator_fillRepeats(exercise, evaluatedWeeks, dayInWeekIndex, metadata.byExerciseWeekDay);\n      PlannerEvaluator_fillSingleProperties(exercise, metadata);\n      PlannerEvaluator_checkUnknownExercises(exercise, metadata);\n    }\n  );\n\n  PlannerEvaluator_iterateOverExercises(\n    evaluatedWeeks,\n    (weekIndex, dayInWeekIndex, dayIndex, exerciseIndex, exercise) => {\n      PlannerEvaluator_fillSetReuses(exercise, evaluatedWeeks, weekIndex, settings, metadata);\n      PlannerEvaluator_fillDescriptionReuses(exercise, weekIndex, metadata.byExerciseWeekDay, settings);\n      PlannerEvaluator_fillProgressReuses(evaluatedWeeks, exercise, settings, metadata);\n      PlannerEvaluator_fillUpdateReuses(evaluatedWeeks, exercise, settings, metadata);\n      PlannerEvaluator_checkUpdateScript(exercise, settings, {\n        week: weekIndex + 1,\n        dayInWeek: dayInWeekIndex + 1,\n        day: dayInWeekIndex + 1,\n      });\n    }\n  );\n\n  // Its own pass: reuses are wired in document order, so an exercise's chain is only complete\n  // once every exercise has been through the pass above.\n  PlannerEvaluator_iterateOverExercises(evaluatedWeeks, (_weekIndex, _dayInWeekIndex, _dayIndex, _index, exercise) => {\n    PlannerEvaluator_checkReuseLoops(exercise);\n    PlannerEvaluator_checkReusesResolve(exercise);\n  });\n  for (const week of evaluatedWeeks) {\n    for (const day of week) {\n      if (day.success) {\n        day.data.sort(PlannerEvaluator_compareExerciseOrder);\n      }\n    }\n  }\n\n  PlannerEvaluator_iterateOverExercises(\n    evaluatedWeeks,\n    (weekIndex, dayInWeekIndex, dayIndex, exerciseIndex, exercise) => {\n      PlannerEvaluator_fillEvaluatedSetVariations(exercise);\n    }\n  );\n}\n\nexport function PlannerEvaluator_checkUnknownExercises(\n  exercise: IPlannerProgramExercise,\n  metadata: IPlannerEvalMetadata\n): void {\n  if (metadata.notused.has(exercise.key)) {\n    return;\n  }\n  const variations = exercise.exerciseVariations;\n  if (variations != null && variations.length > 1) {\n    for (const variation of variations) {\n      if (variation.exerciseType == null) {\n        throw PlannerSyntaxError.fromPoint(\n          exercise.fullName,\n          `Unknown exercise ${variation.name}`,\n          exercise.points.fullName\n        );\n      }\n    }\n  } else if (exercise.exerciseType == null) {\n    throw PlannerSyntaxError.fromPoint(\n      exercise.fullName,\n      `Unknown exercise ${exercise.name}`,\n      exercise.points.fullName\n    );\n  }\n}\n\nexport function PlannerEvaluator_findReusedDescriptions(\n  reusingName: string,\n  currentWeekIndex: number,\n  byExerciseWeekDay: IByExerciseWeekDay<IPlannerProgramExercise>,\n  settings: ISettings\n): { descriptions: IProgramExerciseDescriptions; exercise: IPlannerProgramExercise } | undefined {\n  const weekDayMatch = reusingName.match(/\\[([^]+)\\]/);\n  let weekIndex: number | undefined;\n  let dayIndex: number | undefined;\n  if (weekDayMatch != null) {\n    const [dayOrWeekStr, dayStr] = weekDayMatch[1].split(\":\");\n    if (dayStr != null) {\n      weekIndex = parseInt(dayOrWeekStr, 10);\n      weekIndex = isNaN(weekIndex) ? undefined : weekIndex - 1;\n      dayIndex = parseInt(dayStr, 10);\n      dayIndex = isNaN(dayIndex) ? undefined : dayIndex - 1;\n    } else {\n      dayIndex = parseInt(dayOrWeekStr, 10);\n      dayIndex = isNaN(dayIndex) ? undefined : dayIndex - 1;\n    }\n  }\n  reusingName = reusingName.replace(/\\[([^]+)\\]/, \"\").trim();\n  const key = PlannerKey_fromFullName(reusingName, settings.exercises);\n  const weekExercises = ObjectUtils_values(byExerciseWeekDay[key]?.[weekIndex ?? currentWeekIndex] || []);\n  const weekDescriptions = weekExercises.map((d) => d.descriptions);\n  const index = dayIndex ?? 0;\n  if (weekDescriptions[index]) {\n    return { descriptions: weekDescriptions[index], exercise: weekExercises[index] };\n  } else {\n    return undefined;\n  }\n}\n\nexport function PlannerEvaluator_findOriginalExercisesAtWeekDay(\n  settings: ISettings,\n  fullName: string,\n  program: IPlannerEvalResult[][],\n  atWeek: number,\n  atDay?: number\n): { exercise: IPlannerProgramExercise; dayData: Required<IDayData> }[] {\n  const originalExercises: { exercise: IPlannerProgramExercise; dayData: Required<IDayData> }[] = [];\n  const week = program[atWeek - 1];\n  if (week == null) {\n    return originalExercises;\n  }\n  const candidateDays = atDay != null ? [week[atDay - 1]] : week;\n  const originalKey = PlannerKey_fromFullName(fullName, settings.exercises);\n  for (let dayInWeekIndex = 0; dayInWeekIndex < candidateDays.length; dayInWeekIndex += 1) {\n    const day = candidateDays[dayInWeekIndex];\n    if (day == null || !day.success) {\n      continue;\n    }\n    for (const exercise of day.data) {\n      const reusingKey = PlannerKey_fromPlannerExercise(exercise, settings);\n      if (reusingKey === originalKey) {\n        originalExercises.push({\n          exercise,\n          dayData: {\n            week: atWeek,\n            dayInWeek: dayInWeekIndex + 1,\n            day: 1,\n          },\n        });\n      }\n    }\n  }\n  return originalExercises;\n}\n\nexport function PlannerEvaluator_evaluateFull(\n  fullProgramText: string,\n  settings: ISettings\n): { evaluatedWeeks: IPlannerEvalFullResult; exerciseFullNames: string[] } {\n  const { evaluatedWeeks, metadata } = PlannerEvaluator_getFullEvaluatedWeeks(fullProgramText, settings);\n  if (evaluatedWeeks.success) {\n    const perDayEvaluatedWeeks = PlannerProgram_fullToWeekEvalResult(evaluatedWeeks);\n    PlannerEvaluator_postProcess(perDayEvaluatedWeeks, settings, metadata);\n    for (const week of perDayEvaluatedWeeks) {\n      for (const day of week) {\n        if (!day.success) {\n          return {\n            evaluatedWeeks: { success: false, error: day.error },\n            exerciseFullNames: Array.from(metadata.fullNames),\n          };\n        }\n      }\n    }\n  }\n  return { evaluatedWeeks, exerciseFullNames: Array.from(metadata.fullNames) };\n}\n\nexport function PlannerEvaluator_findLastWeekExercise(\n  program: IPlannerEvalResult[][],\n  weekIndex: number,\n  dayIndex: number,\n  exercise: IPlannerProgramExercise,\n  cond?: (ex: IPlannerProgramExercise) => boolean\n): IPlannerProgramExercise | undefined {\n  for (\n    let i = weekIndex - 1, lastWeekDay = program[i]?.[dayIndex];\n    i >= 0 && lastWeekDay != null;\n    i -= 1, lastWeekDay = program[i]?.[dayIndex]\n  ) {\n    if (lastWeekDay.success) {\n      const lastWeekExercise = lastWeekDay.data.find((ex) => ex.key === exercise.key);\n      if (lastWeekExercise != null && (cond == null || cond(lastWeekExercise))) {\n        return lastWeekExercise;\n      }\n    }\n  }\n  return undefined;\n}\n\nexport function PlannerEvaluator_setByExerciseWeekDay<T, U extends Record<string, Record<number, Record<number, T>>>>(\n  coll: U,\n  exercise: string,\n  weekIndex: number,\n  dayIndex: number,\n  val: T\n): void {\n  coll[exercise as keyof U] = coll[exercise as keyof U] || {};\n  coll[exercise as keyof U][weekIndex] = coll[exercise as keyof U][weekIndex] || {};\n  coll[exercise as keyof U][weekIndex][dayIndex] = val;\n}\n\nexport function PlannerEvaluator_setByWeekDayExercise<T, U extends Record<number, Record<number, Record<string, T>>>>(\n  coll: U,\n  exercise: string,\n  weekIndex: number,\n  dayIndex: number,\n  val: T\n): void {\n  coll[weekIndex] = coll[weekIndex] || {};\n  coll[weekIndex][dayIndex] = coll[weekIndex][dayIndex] || {};\n  coll[weekIndex][dayIndex][exercise] = val;\n}\n\nexport function PlannerEvaluator_iterateOverExercises(\n  program: IPlannerEvalResult[][],\n  cb: (\n    weekIndex: number,\n    dayInWeekIndex: number,\n    dayIndex: number,\n    exerciseIndex: number,\n    exercise: IPlannerProgramExercise\n  ) => void\n): void {\n  let dayIndex = 0;\n  for (let weekIndex = 0; weekIndex < program.length; weekIndex += 1) {\n    const week = program[weekIndex];\n    for (let dayInWeekIndex = 0; dayInWeekIndex < week.length; dayInWeekIndex += 1) {\n      const day = week[dayInWeekIndex];\n      try {\n        if (day?.success) {\n          const exercises = day.data;\n          for (let exerciseIndex = 0; exerciseIndex < exercises.length; exerciseIndex += 1) {\n            cb(weekIndex, dayInWeekIndex, dayIndex, exerciseIndex, exercises[exerciseIndex]);\n          }\n        }\n      } catch (e) {\n        if (e instanceof PlannerSyntaxError) {\n          week[dayInWeekIndex] = { success: false, error: e };\n        } else {\n          throw e;\n        }\n      }\n      dayIndex += 1;\n    }\n  }\n}\n\nexport const PlannerEvaluator_forceEvaluate = (\n  plannerProgram: IPlannerProgram,\n  settings: ISettings\n): {\n  evaluatedWeeks: IPlannerEvalResult[][];\n  exerciseFullNames: string[];\n} => {\n  const { evaluatedWeeks, metadata } = PlannerEvaluator_getPerDayEvaluatedWeeks(plannerProgram, settings);\n  PlannerEvaluator_postProcess(evaluatedWeeks, settings, metadata);\n  return { evaluatedWeeks, exerciseFullNames: Array.from(metadata.fullNames) };\n};\n\nexport const PlannerEvaluator_evaluate = memoize(PlannerEvaluator_forceEvaluate, {\n  maxSize: 10,\n  isEqual: (a: IPlannerProgram | ISettings, b: IPlannerProgram | ISettings) => {\n    if (a == null || b == null) {\n      return a === b;\n    }\n    if (\"weeks\" in a && \"weeks\" in b) {\n      const aText = PlannerProgram_generateFullText(a.weeks);\n      const bText = PlannerProgram_generateFullText(b.weeks);\n      return aText === bText;\n    } else {\n      return a === b;\n    }\n  },\n});\n","// import util from \"util\";\nimport { SyntaxNode } from \"@lezer/common\";\nimport { Exercise_findByNameAndEquipment, Exercise_buildName } from \"../../models/exercise\";\nimport { CollectionUtils_compact } from \"../../utils/collection\";\nimport { parser as plannerExerciseParser } from \"./plannerExerciseParser\";\nimport { IEither } from \"../../utils/types\";\nimport {\n  IPlannerProgramExercise,\n  IPlannerProgramExerciseRepRange,\n  IPlannerProgramExerciseSet,\n  IPlannerProgramExerciseSetVariation,\n  IPlannerProgramExerciseVariation,\n  IPlannerProgramProperty,\n  IPlannerProgramReuse,\n  IPlannerProgramExerciseWarmupSet,\n  IProgramExerciseProgress,\n  IProgramExerciseUpdate,\n  IProgramExerciseProgressType,\n  IPlannerProgramExerciseSuperset,\n} from \"./models/types\";\nimport {\n  IWeight,\n  IProgramState,\n  IDayData,\n  ISettings,\n  IExerciseType,\n  IUnit,\n  IProgramStateMetadata,\n  IAllCustomExercises,\n} from \"../../types\";\nimport * as W from \"../../models/weight\";\nimport { PlannerNodeName } from \"./plannerExerciseStyles\";\nimport { ScriptRunner } from \"../../parser\";\nimport { Progress_createEmptyScriptBindings, Progress_createScriptFunctions } from \"../../models/progress\";\nimport { LiftoscriptSyntaxError, LiftoscriptEvaluator } from \"../../liftoscriptEvaluator\";\nimport { Weight_print, Weight_smartConvert } from \"../../models/weight\";\nimport { PlannerStateVars_fromArgs } from \"./models/plannerStateVars\";\nimport { PlannerKey_fromFullName, PlannerKey_fromExerciseVariations } from \"./plannerKey\";\nimport { UidFactory_generateUid } from \"../../utils/generator\";\nimport { ObjectUtils_pick, ObjectUtils_isEqual } from \"../../utils/object\";\nimport {\n  PlannerProgramExercise_buildProgress,\n  PlannerProgramExercise_shortNameFromFullName,\n} from \"./models/plannerProgramExercise\";\nimport memoize from \"micro-memoize\";\nimport { StringUtils_unindent } from \"../../utils/string\";\n\nexport interface IPlannerTopLineItem {\n  type: \"exercise\" | \"comment\" | \"description\" | \"empty\";\n  value: string;\n  exerciseIndex?: number;\n  notused?: boolean;\n  order?: number;\n  fullName?: string;\n  repeat?: number[];\n  repeatRanges?: string[];\n  isRepeat?: boolean;\n  descriptions?: string[];\n  sections?: string;\n  sectionsToReuse?: string;\n  used?: boolean;\n}\n\nexport type IPlannerSyntaxPointer = { line: number; offset: number; from: number; to: number };\n\nexport class PlannerSyntaxError extends SyntaxError {\n  public readonly line: number;\n  public readonly offset: number;\n  public readonly from: number;\n  public readonly to: number;\n\n  public static fromPoint(\n    fullName: string | undefined,\n    message: string,\n    point: IPlannerSyntaxPointer\n  ): PlannerSyntaxError {\n    return new PlannerSyntaxError(\n      `${fullName ? `${fullName}: ` : \"\"}${message} (${point.line}:${point.offset})`,\n      point.line,\n      point.offset,\n      point.from,\n      point.to\n    );\n  }\n\n  constructor(message: string, line: number, offset: number, from: number, to: number) {\n    super(message);\n    this.line = line;\n    this.offset = offset;\n    this.from = from;\n    this.to = to;\n  }\n\n  public toString(): string {\n    return this.message;\n  }\n}\n\nexport type IPlannerEvalResult = IEither<IPlannerProgramExercise[], PlannerSyntaxError>;\nexport type IPlannerEvalFullResult = IEither<IPlannerExerciseEvaluatorWeek[], PlannerSyntaxError>;\n\nfunction getChildren(node: SyntaxNode): SyntaxNode[] {\n  const cur = node.cursor();\n  const result: SyntaxNode[] = [];\n  if (!cur.firstChild()) {\n    return result;\n  }\n  do {\n    result.push(cur.node);\n  } while (cur.nextSibling());\n  return result;\n}\n\nfunction assert(name: string): never {\n  throw new PlannerSyntaxError(`Missing required nodes for ${name}, this should never happen`, 0, 0, 0, 1);\n}\n\nexport interface IPlannerExerciseEvaluatorWeek {\n  name: string;\n  line: number;\n  days: { name: string; line: number; exercises: IPlannerProgramExercise[] }[];\n}\n\ntype IPlannerExerciseEvaluatorMode = \"perday\" | \"full\" | \"onset\";\n\nexport class PlannerExerciseEvaluator {\n  private readonly script: string;\n  private readonly mode: IPlannerExerciseEvaluatorMode;\n  private dayData: Required<IDayData>;\n  private readonly settings: ISettings;\n  private weeks: IPlannerExerciseEvaluatorWeek[] = [];\n  private exerciseIndex: number = 0;\n\n  private latestDescriptions: string[][] = [];\n\n  constructor(script: string, settings: ISettings, mode: IPlannerExerciseEvaluatorMode, dayData?: Required<IDayData>) {\n    this.script = script;\n    this.settings = settings;\n    this.dayData = dayData || { day: 1, week: 1, dayInWeek: 1 };\n    this.mode = mode;\n  }\n\n  private getValue(node: SyntaxNode): string {\n    return this.getValueTrim(node).replace(/\\n/g, \"\\\\n\").replace(/\\t/g, \"\\\\t\");\n  }\n\n  private getValueTrim(node: SyntaxNode): string {\n    return this.script.slice(node.from, node.to);\n  }\n\n  public static applyChangesToScript(script: string, ranges: [number, number, string][]): string {\n    let offset = 0;\n    while (ranges.length > 0) {\n      const [from, to, replacement] = ranges.shift()!;\n      script = script.slice(0, from + offset) + replacement + script.slice(to + offset);\n      offset += replacement.length - (to - from);\n    }\n    return script;\n  }\n\n  public static isEqualProperty(a: IPlannerProgramProperty, b: IPlannerProgramProperty): boolean {\n    return a.fnName === b.fnName && a.fnArgs.join() === b.fnArgs.join() && a.script === b.script && a.body === b.body;\n  }\n\n  public static isEqualProgress(a: IProgramExerciseProgress, b: IProgramExerciseProgress): boolean {\n    const pickA = {\n      ...ObjectUtils_pick(a, [\"type\", \"state\", \"stateMetadata\", \"script\"]),\n      reuse: a.reuse?.fullName,\n    };\n    const pickB = {\n      ...ObjectUtils_pick(b, [\"type\", \"state\", \"stateMetadata\", \"script\"]),\n      reuse: b.reuse?.fullName,\n    };\n    return ObjectUtils_isEqual(pickA, pickB);\n  }\n\n  public static isEqualUpdate(a: IProgramExerciseUpdate, b: IProgramExerciseUpdate): boolean {\n    const pickA = { ...ObjectUtils_pick(a, [\"type\", \"script\"]), reuse: a.reuse?.fullName };\n    const pickB = { ...ObjectUtils_pick(b, [\"type\", \"script\"]), reuse: b.reuse?.fullName };\n    return ObjectUtils_isEqual(pickA, pickB);\n  }\n\n  private getPoint(node: SyntaxNode): IPlannerSyntaxPointer {\n    const [line, offset] = this.getLineAndOffset(node);\n    return { line, offset, from: node.from, to: node.to };\n  }\n\n  private error(message: string, node: SyntaxNode): never {\n    const point = this.getPoint(node);\n    throw PlannerSyntaxError.fromPoint(undefined, message, point);\n  }\n\n  public static getLineAndOffset(script: string, node: SyntaxNode): [number, number] {\n    const linesLengths = script.split(\"\\n\").map((l) => l.length + 1);\n    let offset = 0;\n    for (let i = 0; i < linesLengths.length; i++) {\n      const lineLength = linesLengths[i];\n      if (node.from >= offset && node.from < offset + lineLength) {\n        return [i + 1, node.from - offset];\n      }\n      offset += lineLength;\n    }\n    return [linesLengths.length, linesLengths[linesLengths.length - 1]];\n  }\n\n  private getLineAndOffset(node: SyntaxNode): [number, number] {\n    return PlannerExerciseEvaluator.getLineAndOffset(this.script, node);\n  }\n\n  public parse(expr: SyntaxNode): void {\n    const cursor = expr.cursor();\n    do {\n      if (cursor.node.type.isError) {\n        this.error(\"Syntax error\", cursor.node);\n      }\n    } while (cursor.next());\n  }\n\n  private getWarmupReps(setParts: string): { numberOfSets: number; reps: number } {\n    let [numberOfSetsStr, repsStr] = setParts.split(\"x\", 2);\n    if (!numberOfSetsStr) {\n      return { numberOfSets: 1, reps: 1 };\n    }\n    if (!repsStr) {\n      repsStr = numberOfSetsStr;\n      numberOfSetsStr = \"1\";\n    }\n    return {\n      reps: parseInt(repsStr, 10),\n      numberOfSets: parseInt(numberOfSetsStr, 10),\n    };\n  }\n\n  private getRepRange(setParts: string): IPlannerProgramExerciseRepRange | undefined {\n    if (!setParts) {\n      return undefined;\n    }\n    const [numberOfSetsStr, repRangeStr] = setParts.split(\"x\", 2);\n\n    const reprange = repRangeStr.split(\"-\", 2);\n    let minrepStr: string | undefined = reprange[0];\n    let maxrepStr: string | undefined = reprange[1];\n    if (!maxrepStr) {\n      maxrepStr = minrepStr;\n      minrepStr = undefined;\n    }\n    let isAmrap = false;\n    if (maxrepStr.endsWith(\"+\")) {\n      isAmrap = true;\n      maxrepStr.replace(/\\+/g, \"\");\n    }\n    return {\n      numberOfSets: parseInt(numberOfSetsStr, 10),\n      minrep: minrepStr != null ? parseInt(minrepStr, 10) : undefined,\n      maxrep: parseInt(maxrepStr, 10),\n      isAmrap: isAmrap,\n      isQuickAddSet: numberOfSetsStr.endsWith(\"+\"),\n    };\n  }\n\n  private getWeight(expr?: SyntaxNode | null): IWeight | undefined {\n    if (expr?.type.name === PlannerNodeName.WeightWithPlus || expr?.type.name === PlannerNodeName.Weight) {\n      const value = this.getValue(expr).replace(\"+\", \"\");\n      const unit = value.indexOf(\"kg\") !== -1 ? \"kg\" : \"lb\";\n      return W.Weight_build(parseFloat(value), unit);\n    } else {\n      return undefined;\n    }\n  }\n\n  private evaluateWarmupSet(expr: SyntaxNode): IPlannerProgramExerciseWarmupSet {\n    if (expr.type.name === PlannerNodeName.WarmupExerciseSet) {\n      const setPartNodes = expr.getChildren(PlannerNodeName.WarmupSetPart);\n      const setParts = setPartNodes.map((setPartNode) => this.getValue(setPartNode)).join(\"\");\n      const { numberOfSets, reps } = this.getWarmupReps(setParts);\n      const percentageNode = expr.getChild(PlannerNodeName.Percentage);\n      const weightNode = expr.getChild(PlannerNodeName.Weight);\n      const percentage =\n        percentageNode == null ? undefined : parseFloat(this.getValue(percentageNode).replace(\"%\", \"\"));\n      const weight = this.getWeight(weightNode);\n      if (percentage) {\n        return {\n          type: \"warmup\",\n          reps,\n          numberOfSets,\n          percentage,\n        };\n      } else {\n        return {\n          type: \"warmup\",\n          reps,\n          numberOfSets,\n          weight: weight!,\n        };\n      }\n    } else {\n      assert(PlannerNodeName.ExerciseSection);\n    }\n  }\n\n  public static fnArgsToStateVars(\n    fnArgs: string[],\n    onError?: (message: string) => void\n  ): {\n    state: IProgramState;\n    stateMetadata: IProgramStateMetadata;\n  } {\n    return PlannerStateVars_fromArgs(fnArgs, onError);\n  }\n\n  private evaluateSet(expr: SyntaxNode): IPlannerProgramExerciseSet {\n    if (expr.type.name === PlannerNodeName.ExerciseSet) {\n      const setPartNodes = expr.getChildren(PlannerNodeName.SetPart);\n      const setParts = setPartNodes.map((setPartNode) => this.getValue(setPartNode)).join(\"\");\n      const repRange = this.getRepRange(setParts);\n      const rpeNode = expr.getChild(PlannerNodeName.Rpe);\n      const timerNode = expr.getChild(PlannerNodeName.Timer);\n      const setTimerNode = expr.getChild(PlannerNodeName.SetTimer);\n      const autoNode = expr.getChild(PlannerNodeName.Auto);\n      const percentageNode = expr.getChild(PlannerNodeName.PercentageWithPlus);\n      const weightNode = expr.getChild(PlannerNodeName.WeightWithPlus);\n      const labelNode = expr.getChild(PlannerNodeName.SetLabel);\n      const askWeightNode = expr.getChild(PlannerNodeName.AskWeight);\n      const askWeight =\n        askWeightNode != null ||\n        (weightNode != null && this.getValue(weightNode).indexOf(\"+\") !== -1) ||\n        (percentageNode != null && this.getValue(percentageNode).indexOf(\"+\") !== -1);\n      const logRpe = rpeNode == null ? undefined : this.getValue(rpeNode).indexOf(\"+\") !== -1;\n      let rpe = rpeNode == null ? undefined : parseFloat(this.getValue(rpeNode).replace(\"@\", \"\").replace(\"+\", \"\"));\n      if (rpe != null && isNaN(rpe)) {\n        rpe = undefined;\n      }\n      let timer = timerNode == null ? undefined : parseInt(this.getValue(timerNode).replace(\"s\", \"\"), 10);\n      let setTimer: number | undefined;\n      let isOverflowSetTimer: boolean | undefined;\n      if (setTimerNode != null) {\n        // SetTimer encodes both the active timer and the rest timer, e.g. \"60s+|30s\" or \"60s|?\"\n        const [leftRaw, rightRaw] = this.getValue(setTimerNode).split(\"|\");\n        isOverflowSetTimer = leftRaw.indexOf(\"+\") !== -1 ? true : undefined;\n        setTimer = parseInt(leftRaw.replace(\"s\", \"\").replace(\"+\", \"\"), 10);\n        // \"?\" on the rest side means \"fall back to the global default rest timer\"\n        timer = rightRaw === \"?\" ? undefined : parseInt(rightRaw.replace(\"s\", \"\"), 10);\n      }\n      const auto = autoNode != null ? true : undefined;\n      const percentage =\n        percentageNode == null ? undefined : parseFloat(this.getValue(percentageNode).replace(/[%\\+]/, \"\"));\n      const weight = this.getWeight(weightNode);\n      const label = labelNode\n        ? getChildren(labelNode)\n            .map((n) => this.getValue(n))\n            .join(\" \")\n        : undefined;\n      if (labelNode && label && label.length > 8) {\n        this.error(\"Label length should be 8 chars max\", labelNode);\n      }\n      return {\n        repRange,\n        timer,\n        setTimer,\n        isOverflowSetTimer,\n        auto,\n        logRpe,\n        rpe,\n        weight,\n        percentage,\n        label,\n        askWeight,\n      };\n    } else {\n      assert(PlannerNodeName.ExerciseSection);\n    }\n  }\n\n  private evaluateId(expr: SyntaxNode): number[] {\n    if (expr.type.name === PlannerNodeName.ExerciseProperty) {\n      const valueNode = expr.getChild(PlannerNodeName.FunctionExpression);\n      if (valueNode == null) {\n        throw this.error(`Missing value for the property 'id'`, expr);\n      }\n      const fnNameNode = valueNode.getChild(PlannerNodeName.FunctionName);\n      if (fnNameNode == null) {\n        assert(PlannerNodeName.FunctionName);\n      }\n      const fnName = this.getValue(fnNameNode);\n      if ([\"tags\"].indexOf(fnName) === -1) {\n        this.error(`There's no such id type - '${fnName}'`, fnNameNode);\n      }\n      const fnArgs = valueNode.getChildren(PlannerNodeName.FunctionArgument).map((argNode) => this.getValue(argNode));\n      if (fnName === \"tags\") {\n        if (fnArgs.length === 0) {\n          this.error(`You should provide the list of numbers in \"tags\"`, fnNameNode);\n        }\n      }\n      return fnArgs.map((t) => parseInt(t, 10)).filter((t) => !isNaN(t));\n    } else {\n      assert(PlannerNodeName.ExerciseProperty);\n    }\n  }\n\n  private evaluateUpdate(expr: SyntaxNode, exerciseType?: IExerciseType): IProgramExerciseUpdate {\n    if (expr.type.name === PlannerNodeName.ExerciseProperty) {\n      const valueNode = expr.getChild(PlannerNodeName.FunctionExpression);\n      if (valueNode == null) {\n        throw this.error(`Missing value for the property 'update'`, expr);\n      }\n      const fnNameNode = valueNode.getChild(PlannerNodeName.FunctionName);\n      if (fnNameNode == null) {\n        assert(PlannerNodeName.FunctionName);\n      }\n      const fnName = this.getValue(fnNameNode);\n      const fnArgs = valueNode.getChildren(PlannerNodeName.FunctionArgument).map((argNode) => this.getValue(argNode));\n      let script: string | undefined;\n      let body: string | undefined;\n      let meta: { stateKeys: Set<string> } | undefined;\n      let liftoscriptNode: SyntaxNode | undefined;\n      if (fnName === \"custom\") {\n        liftoscriptNode = valueNode.getChild(PlannerNodeName.Liftoscript) || undefined;\n        script = liftoscriptNode ? this.getValueTrim(liftoscriptNode) : undefined;\n        if (fnArgs.length > 0) {\n          this.error(`State variables for the update script are taken from \"progress\" block`, fnNameNode);\n        }\n        const reuseLiftoscriptNode = valueNode\n          .getChild(PlannerNodeName.ReuseLiftoscript)\n          ?.getChild(PlannerNodeName.ReuseSection)\n          ?.getChild(PlannerNodeName.ExerciseName);\n        body = reuseLiftoscriptNode ? this.getValue(reuseLiftoscriptNode) : undefined;\n        if (script) {\n          const liftoscriptEvaluator = new ScriptRunner(\n            script,\n            {},\n            {},\n            Progress_createEmptyScriptBindings(this.dayData, this.settings),\n            Progress_createScriptFunctions(this.settings),\n            this.settings.units,\n            { exerciseType, unit: this.settings.units, prints: [] },\n            \"update\"\n          );\n          const stateKeys = liftoscriptEvaluator.getStateVariableKeys();\n          meta = { stateKeys };\n        }\n        if (!script && !body) {\n          this.error(\n            `'custom' update requires either to specify Liftoscript block or specify which one to reuse`,\n            valueNode\n          );\n        }\n        return {\n          type: \"custom\",\n          script,\n          liftoscriptNode,\n          meta,\n          reuse: body ? { fullName: body, source: \"specific\" } : undefined,\n        };\n      } else {\n        this.error(`There's no such update progression exists - '${fnName}'`, fnNameNode);\n      }\n    } else {\n      assert(PlannerNodeName.ExerciseProperty);\n    }\n  }\n\n  private validateProgress(fnName: string, fnArgs: string[], fnNameNode: SyntaxNode, valueNode: SyntaxNode): void {\n    if ([\"lp\", \"sum\", \"dp\", \"custom\", \"none\"].indexOf(fnName) === -1) {\n      this.error(`There's no such progression exists - '${fnName}'`, fnNameNode);\n    }\n    if (fnName === \"lp\") {\n      if (fnArgs.length > 6) {\n        this.error(`Linear Progression 'lp' only has 6 arguments max`, valueNode);\n      } else if (fnArgs[0] && !fnArgs[0].endsWith(\"lb\") && !fnArgs[0].endsWith(\"kg\") && !fnArgs[0].endsWith(\"%\")) {\n        this.error(\n          `1st argument of 'lp' should be weight (ending with 'lb' or 'kg') or percentage (ending with '%'). For example '10lb' or '30%'.`,\n          valueNode\n        );\n      } else if (fnArgs[1] != null && isNaN(parseInt(fnArgs[1], 10))) {\n        this.error(`2nd argument of 'lp' should be a number of attempts - i.e. a number`, valueNode);\n      } else if (fnArgs[2] != null && isNaN(parseInt(fnArgs[2], 10))) {\n        this.error(\n          `3rd argument of 'lp' should be a current number of successful attempts up to date - i.e. a number`,\n          valueNode\n        );\n      } else if (\n        fnArgs[3] != null &&\n        !fnArgs[3].endsWith(\"lb\") &&\n        !fnArgs[3].endsWith(\"kg\") &&\n        !fnArgs[3].endsWith(\"%\")\n      ) {\n        this.error(\n          `4th argument of 'lp' should be weight (ending with 'lb' or 'kg') or percentage (ending with '%'). For example '10lb' or '30%'.`,\n          valueNode\n        );\n      } else if (fnArgs[4] != null && isNaN(parseInt(fnArgs[4], 10))) {\n        this.error(`5th argument of 'lp' should be a number of failed attempts - i.e. a number`, valueNode);\n      } else if (fnArgs[5] != null && isNaN(parseInt(fnArgs[5], 10))) {\n        this.error(\n          `6th argument of 'lp' should be a current number of failed attempts up to date - i.e. a number`,\n          valueNode\n        );\n      }\n    } else if (fnName === \"sum\") {\n      if (fnArgs.length > 2) {\n        this.error(`Reps Sum Progression 'sum' only has 2 arguments max`, valueNode);\n      } else if (fnArgs[0] == null || isNaN(parseInt(fnArgs[0], 10))) {\n        this.error(`1st argument of 'sum' should be a number of reps - i.e. a number`, valueNode);\n      } else if (\n        fnArgs[1] == null ||\n        (!fnArgs[1].endsWith(\"lb\") && !fnArgs[1].endsWith(\"kg\") && !fnArgs[1].endsWith(\"%\"))\n      ) {\n        this.error(\n          `2nd argument of 'sum' should be weight (ending with 'lb' or 'kg') or percentage (ending with '%'). For example '10lb' or '30%'.`,\n          valueNode\n        );\n      }\n    } else if (fnName === \"dp\") {\n      if (fnArgs.length !== 3) {\n        this.error(`Double Progression 'dp' should have 3 arguments`, valueNode);\n      } else if (\n        fnArgs[0] == null ||\n        (!fnArgs[0].endsWith(\"lb\") && !fnArgs[0].endsWith(\"kg\") && !fnArgs[0].endsWith(\"%\"))\n      ) {\n        this.error(\n          `1st argument of 'dp' should be weight (ending with 'lb' or 'kg') or percentage (ending with '%'). For example '10lb' or '30%'.`,\n          valueNode\n        );\n      } else if (fnArgs[1] == null || isNaN(parseInt(fnArgs[1], 10))) {\n        this.error(`2nd argument of 'dp' should be min reps in the range - i.e. a number, like 8`, valueNode);\n      } else if (fnArgs[2] == null || isNaN(parseInt(fnArgs[2], 10))) {\n        this.error(`3rd argument of 'dp' should be max reps in the range - i.e. a number, like 12`, valueNode);\n      }\n    } else if (fnName === \"custom\") {\n      const liftoscriptNode = valueNode.getChild(PlannerNodeName.Liftoscript);\n      const script = liftoscriptNode ? this.getValueTrim(liftoscriptNode) : undefined;\n      const reuseLiftoscriptNode = valueNode\n        .getChild(PlannerNodeName.ReuseLiftoscript)\n        ?.getChild(PlannerNodeName.ReuseSection)\n        ?.getChild(PlannerNodeName.ExerciseName);\n      const body = reuseLiftoscriptNode ? this.getValue(reuseLiftoscriptNode) : undefined;\n      if (!script && !body) {\n        this.error(\n          `'custom' progression requires either to specify Liftoscript block or specify which one to reuse`,\n          valueNode\n        );\n      }\n    }\n  }\n\n  private evaluateProgress(expr: SyntaxNode, exerciseType?: IExerciseType): IProgramExerciseProgress {\n    const result = this.evaluateProgressImpl(expr, exerciseType);\n    if (result.success) {\n      return result.data;\n    } else {\n      throw this.error(result.error, expr);\n    }\n  }\n\n  private evaluateProgressImpl(\n    expr: SyntaxNode,\n    exerciseType?: IExerciseType\n  ): IEither<IProgramExerciseProgress, string> {\n    if (expr.type.name === PlannerNodeName.ExerciseProperty) {\n      const valueNode = expr.getChild(PlannerNodeName.FunctionExpression);\n      if (valueNode == null) {\n        const none = expr.getChild(PlannerNodeName.None);\n        if (none != null) {\n          return PlannerProgramExercise_buildProgress(\"none\", []);\n        } else {\n          throw this.error(`Missing value for the property 'progress'`, expr);\n        }\n      }\n      const fnNameNode = valueNode.getChild(PlannerNodeName.FunctionName);\n      if (fnNameNode == null) {\n        assert(PlannerNodeName.FunctionName);\n      }\n      const fnName = this.getValue(fnNameNode);\n      const fnArgs = valueNode.getChildren(PlannerNodeName.FunctionArgument).map((argNode) => this.getValue(argNode));\n      this.validateProgress(fnName, fnArgs, fnNameNode, valueNode);\n\n      const type = fnName as IProgramExerciseProgressType;\n      if (type === \"custom\") {\n        const liftoscriptNode = valueNode.getChild(PlannerNodeName.Liftoscript);\n        const script = liftoscriptNode ? this.getValueTrim(liftoscriptNode) : undefined;\n        const { state } = PlannerExerciseEvaluator.fnArgsToStateVars(fnArgs, (message) =>\n          this.error(message, fnNameNode)\n        );\n        if (script) {\n          const liftoscriptEvaluator = new ScriptRunner(\n            script,\n            state,\n            {},\n            Progress_createEmptyScriptBindings(this.dayData, this.settings),\n            Progress_createScriptFunctions(this.settings),\n            this.settings.units,\n            { exerciseType, unit: this.settings.units, prints: [] },\n            \"planner\"\n          );\n          try {\n            liftoscriptEvaluator.parse();\n          } catch (e) {\n            if (e instanceof LiftoscriptSyntaxError && liftoscriptNode) {\n              const [line] = this.getLineAndOffset(liftoscriptNode);\n              throw new PlannerSyntaxError(\n                e.message,\n                line + e.line,\n                e.offset,\n                liftoscriptNode.from + e.from,\n                liftoscriptNode.from + e.to\n              );\n            } else {\n              throw e;\n            }\n          }\n        }\n        const reuseLiftoscriptNode = valueNode\n          .getChild(PlannerNodeName.ReuseLiftoscript)\n          ?.getChild(PlannerNodeName.ReuseSection)\n          ?.getChild(PlannerNodeName.ExerciseName);\n        const body = reuseLiftoscriptNode ? this.getValue(reuseLiftoscriptNode) : undefined;\n        return PlannerProgramExercise_buildProgress(type, fnArgs, {\n          script,\n          reuseFullname: body,\n        });\n      } else {\n        return PlannerProgramExercise_buildProgress(type, fnArgs);\n      }\n    } else {\n      assert(PlannerNodeName.ExerciseProperty);\n    }\n  }\n\n  private evaluateWarmup(expr: SyntaxNode): IPlannerProgramExerciseWarmupSet[] {\n    if (expr.type.name === PlannerNodeName.ExerciseProperty) {\n      const none = expr.getChild(PlannerNodeName.None);\n      if (none != null) {\n        return [];\n      }\n      const setsNode = expr.getChild(PlannerNodeName.WarmupExerciseSets);\n      if (setsNode != null) {\n        const sets = setsNode.getChildren(PlannerNodeName.WarmupExerciseSet);\n        if (sets.length > 0) {\n          return sets.map((set) => this.evaluateWarmupSet(set));\n        }\n      }\n      return [];\n    } else {\n      assert(PlannerNodeName.ExerciseProperty);\n    }\n  }\n\n  private evaluateSuperset(expr: SyntaxNode): { type: \"superset\"; data: IPlannerProgramExerciseSuperset } {\n    if (expr.type.name === PlannerNodeName.Superset) {\n      const exerciseNameNode = expr.getChild(PlannerNodeName.ExerciseName);\n      if (exerciseNameNode != null) {\n        const name = this.getValue(exerciseNameNode);\n        return {\n          type: \"superset\",\n          data: { name },\n        };\n      } else {\n        assert(PlannerNodeName.ExerciseName);\n      }\n    } else {\n      assert(PlannerNodeName.Superset);\n    }\n  }\n\n  private evaluateProperty(\n    expr: SyntaxNode,\n    exerciseType?: IExerciseType\n  ):\n    | { type: \"progress\"; data: IProgramExerciseProgress }\n    | { type: \"update\"; data: IProgramExerciseUpdate }\n    | { type: \"warmup\"; data: IPlannerProgramExerciseWarmupSet[] }\n    | { type: \"id\"; data: number[] }\n    | { type: \"used\"; data: \"\" } {\n    if (expr.type.name === PlannerNodeName.ExerciseProperty) {\n      const nameNode = expr.getChild(PlannerNodeName.ExercisePropertyName);\n      if (nameNode == null) {\n        assert(PlannerNodeName.ExercisePropertyName);\n      }\n      const name = this.getValue(nameNode);\n      if (name === \"progress\") {\n        return { type: \"progress\", data: this.evaluateProgress(expr, exerciseType) };\n      } else if (name === \"update\") {\n        return { type: \"update\", data: this.evaluateUpdate(expr, exerciseType) };\n      } else if (name === \"warmup\") {\n        return { type: \"warmup\", data: this.evaluateWarmup(expr) };\n      } else if (name === \"id\") {\n        return { type: \"id\", data: this.evaluateId(expr) };\n      } else if (name === \"used\") {\n        return { type: \"used\", data: \"\" };\n      } else {\n        this.error(`There's no such property exists - '${name}'`, nameNode);\n      }\n    } else {\n      assert(PlannerNodeName.ExerciseProperty);\n    }\n  }\n\n  private getReuseWeekDay(weekDayNode: SyntaxNode | null): { week?: number; day?: number } {\n    let week: number | undefined;\n    let day: number | undefined;\n    if (weekDayNode != null) {\n      const result = weekDayNode.getChildren(PlannerNodeName.WeekOrDay).map((n) => {\n        const child = getChildren(n)[0];\n        if (child.type.name === PlannerNodeName.Int) {\n          return parseInt(this.getValue(child), 10);\n        } else {\n          return undefined;\n        }\n      });\n      if (result.length === 1) {\n        day = result[0];\n      } else {\n        week = result[0];\n        day = result[1];\n      }\n    }\n    return { week, day };\n  }\n\n  private evaluateReuseNode(expr: SyntaxNode): { type: \"reuse\"; data: IPlannerProgramReuse } {\n    if (expr.type.name === PlannerNodeName.ReuseSectionWithWeekDay) {\n      const nameNode = expr.getChild(PlannerNodeName.ReuseSection)?.getChild(PlannerNodeName.ExerciseName);\n      if (nameNode == null) {\n        assert(PlannerNodeName.ExerciseName);\n      }\n      const name = this.getValue(nameNode);\n      const { week, day } = this.getReuseWeekDay(expr.getChild(PlannerNodeName.WeekDay));\n      return { type: \"reuse\", data: { fullName: name, week, day, source: \"overall\" } };\n    } else {\n      assert(PlannerNodeName.ReuseSectionWithWeekDay);\n    }\n  }\n\n  private evaluateSection(\n    expr: SyntaxNode,\n    exerciseType?: IExerciseType\n  ):\n    | { type: \"sets\"; data: IPlannerProgramExerciseSet[]; isCurrent: boolean }\n    | { type: \"progress\"; data: IProgramExerciseProgress }\n    | { type: \"update\"; data: IProgramExerciseUpdate }\n    | { type: \"id\"; data: number[] }\n    | { type: \"reuse\"; data: IPlannerProgramReuse }\n    | { type: \"warmup\"; data: IPlannerProgramExerciseWarmupSet[] }\n    | { type: \"superset\"; data: IPlannerProgramExerciseSuperset }\n    | { type: \"used\"; data: \"\" } {\n    if (expr.type.name === PlannerNodeName.ExerciseSection) {\n      const reuseNode = expr.getChild(PlannerNodeName.ReuseSectionWithWeekDay);\n      if (reuseNode != null) {\n        return this.evaluateReuseNode(reuseNode);\n      }\n      const setsNode = expr.getChild(PlannerNodeName.ExerciseSets);\n      if (setsNode != null) {\n        const sets = setsNode.getChildren(PlannerNodeName.ExerciseSet);\n        const isCurrent = setsNode.getChild(PlannerNodeName.CurrentVariation) != null;\n        if (sets.length > 0) {\n          return { type: \"sets\", data: sets.map((set) => this.evaluateSet(set)), isCurrent };\n        }\n      }\n      const superset = expr.getChild(PlannerNodeName.Superset);\n      if (superset != null) {\n        return this.evaluateSuperset(superset);\n      }\n      const property = expr.getChild(PlannerNodeName.ExerciseProperty);\n      if (property != null) {\n        return this.evaluateProperty(property, exerciseType);\n      } else {\n        assert(PlannerNodeName.ExerciseProperty);\n      }\n    } else {\n      assert(PlannerNodeName.ExerciseSection);\n    }\n  }\n\n  public static extractNameParts = memoize(\n    (str: string, exercises: IAllCustomExercises): { name: string; label?: string; equipment?: string } => {\n      let [label, ...nameEquipmentItems] = str.split(\":\");\n      if (nameEquipmentItems.length === 0) {\n        nameEquipmentItems = [label];\n        label = \"\";\n      } else {\n        label = label.trim();\n      }\n      const nameEquipment = nameEquipmentItems.join(\":\").trim();\n      const matchingExercise = Exercise_findByNameAndEquipment(nameEquipment, exercises);\n      if (matchingExercise) {\n        return { name: matchingExercise.name, label: label ? label : undefined, equipment: matchingExercise.equipment };\n      }\n      return { name: nameEquipment, label: label ? label : undefined };\n    },\n    { maxSize: 1000 }\n  );\n\n  private addDescription(value: string): void {\n    value = value.replace(/^\\/\\//, \"\");\n    if (this.latestDescriptions.length === 0) {\n      this.latestDescriptions.push([]);\n    }\n    this.latestDescriptions[this.latestDescriptions.length - 1].push(value);\n  }\n\n  private getOrder(expr: SyntaxNode): number {\n    if (expr.type.name === PlannerNodeName.ExerciseExpression) {\n      const repeatNode = expr.getChild(PlannerNodeName.Repeat);\n      if (repeatNode == null) {\n        return 0;\n      }\n      const children = getChildren(repeatNode);\n      for (const childNode of children) {\n        if (childNode.type.name === PlannerNodeName.Rep) {\n          return parseInt(this.getValue(childNode), 10);\n        }\n      }\n      return 0;\n    } else {\n      assert(PlannerNodeName.ExerciseExpression);\n    }\n  }\n\n  private getRepeat(expr: SyntaxNode): number[] {\n    if (expr.type.name === PlannerNodeName.ExerciseExpression) {\n      const repeatNode = expr.getChild(PlannerNodeName.Repeat);\n      if (repeatNode == null) {\n        return [];\n      }\n      const result: Set<number> = new Set();\n      const children = getChildren(repeatNode);\n      for (const childNode of children) {\n        if (childNode.type.name === PlannerNodeName.RepRange) {\n          const [from, to] = getChildren(childNode).map((n) => parseInt(this.getValue(n), 10));\n          for (let i = from; i <= to; i += 1) {\n            result.add(i);\n          }\n          break;\n        }\n      }\n      return Array.from(result).sort((a, b) => a - b);\n    } else {\n      assert(PlannerNodeName.ExerciseExpression);\n    }\n  }\n\n  private getRepeatRanges(numbers: number[]): string[] {\n    // Check if the input array is empty\n    if (numbers.length === 0) {\n      return [];\n    }\n\n    const ranges: string[] = [];\n    let rangeStart = numbers[0];\n    let rangeEnd = numbers[0];\n\n    for (let i = 1; i < numbers.length; i++) {\n      if (numbers[i] === rangeEnd + 1) {\n        // If the current number is consecutive, extend the current range\n        rangeEnd = numbers[i];\n      } else {\n        // If not consecutive, add the current range to results and start a new range\n        ranges.push(`${rangeStart}-${rangeEnd}`);\n        rangeStart = numbers[i];\n        rangeEnd = numbers[i];\n      }\n    }\n\n    // Add the last range to results\n    ranges.push(`${rangeStart}-${rangeEnd}`);\n\n    return ranges;\n  }\n\n  private getIsNotUsed(expr: SyntaxNode): boolean {\n    if (expr.type.name === PlannerNodeName.ExerciseExpression) {\n      const sections = expr.getChildren(PlannerNodeName.ExerciseSection);\n      for (const section of sections) {\n        const properties = section.getChildren(PlannerNodeName.ExerciseProperty);\n        for (const property of properties) {\n          const nameNode = property.getChild(PlannerNodeName.ExercisePropertyName);\n          const name = nameNode ? this.getValueTrim(nameNode) : undefined;\n          const valueNode = property.getChild(PlannerNodeName.None);\n          if (name === \"used\" && valueNode != null) {\n            return true;\n          }\n        }\n      }\n      return false;\n    } else {\n      assert(PlannerNodeName.ExerciseSection);\n    }\n  }\n\n  private evaluateExercise(expr: SyntaxNode): void {\n    if (expr.type.name === PlannerNodeName.EmptyExpression || expr.type.name === PlannerNodeName.TripleLineComment) {\n      if (this.latestDescriptions.length > 0) {\n        this.latestDescriptions.push([]);\n      }\n      return;\n    } else if (expr.type.name === PlannerNodeName.Week) {\n      if (this.mode === \"perday\") {\n        this.error(\n          `You cannot specify weeks in the per-day exercise lists. Switch to the full program mode for that.`,\n          expr\n        );\n      }\n      const weekName = this.getValueTrim(expr).replace(/^#+/, \"\").trim();\n      const [line] = this.getLineAndOffset(expr);\n      this.weeks.push({ name: weekName, line, days: [] });\n      this.dayData = { day: this.dayData.day, week: this.weeks.length + 1, dayInWeek: 0 };\n    } else if (expr.type.name === PlannerNodeName.Day) {\n      if (this.mode === \"perday\") {\n        this.error(\n          `You cannot specify days in the per-day exercise lists. Switch to the full program mode for that.`,\n          expr\n        );\n      }\n      if (this.weeks.length === 0) {\n        this.error(`You need to specify a week before a day`, expr);\n      }\n      const dayName = this.getValueTrim(expr).replace(/^#+/, \"\").trim();\n      const [line] = this.getLineAndOffset(expr);\n      this.weeks[this.weeks.length - 1].days.push({ name: dayName, line, exercises: [] });\n      this.dayData = {\n        day: this.dayData.day + 1,\n        week: this.dayData.week,\n        dayInWeek: (this.dayData.dayInWeek || 0) + 1,\n      };\n      this.exerciseIndex = 0;\n    } else if (expr.type.name === PlannerNodeName.LineComment) {\n      const value = this.getValueTrim(expr).trim();\n      this.addDescription(value);\n      return undefined;\n    } else if (expr.type.name === PlannerNodeName.ExerciseExpression) {\n      if (this.mode === \"full\" && (this.weeks.length === 0 || this.weeks[this.weeks.length - 1].days.length === 0)) {\n        this.error(`You should first define a week and a day before listing exercises.`, expr);\n      } else if (this.weeks.length === 0) {\n        this.weeks.push({ name: \"Week 1\", line: 1, days: [{ name: \"Day 1\", line: 1, exercises: [] }] });\n      }\n      const variationsNode = expr.getChild(PlannerNodeName.ExerciseVariations);\n      if (variationsNode == null) {\n        assert(PlannerNodeName.ExerciseVariations);\n      }\n      const nameNode = variationsNode;\n\n      const fullName = this.getValue(variationsNode);\n      const variationNodes = variationsNode.getChildren(PlannerNodeName.ExerciseVariation);\n      const exerciseVariations: IPlannerProgramExerciseVariation[] = [];\n      let label: string | undefined;\n      for (let i = 0; i < variationNodes.length; i += 1) {\n        const variationNode = variationNodes[i];\n        const isCurrent = variationNode.getChild(PlannerNodeName.CurrentVariation) != null;\n        const variationNameNode = variationNode.getChild(PlannerNodeName.ExerciseName);\n        if (variationNameNode == null) {\n          assert(PlannerNodeName.ExerciseName);\n        }\n        const variationFullName = this.getValue(variationNameNode);\n        const parts = PlannerExerciseEvaluator.extractNameParts(variationFullName, this.settings.exercises);\n        if (i === 0) {\n          label = parts.label;\n        }\n        const variationShortName = PlannerProgramExercise_shortNameFromFullName(variationFullName, this.settings);\n        const variationExerciseType = Exercise_findByNameAndEquipment(variationShortName, this.settings.exercises);\n        exerciseVariations.push({\n          exerciseType: variationExerciseType,\n          name: parts.name,\n          isCurrent,\n        });\n      }\n      const currentVariationIndex = exerciseVariations.findIndex((v) => v.isCurrent);\n      const activeVariationIndex = currentVariationIndex === -1 ? 0 : currentVariationIndex;\n      const activeVariation = exerciseVariations[activeVariationIndex];\n      const name = activeVariation?.name ?? \"\";\n      const exercise = activeVariation?.exerciseType;\n      const equipment = exercise?.equipment;\n      const key = PlannerKey_fromExerciseVariations(exerciseVariations, label);\n      const shortName = Exercise_buildName(name, this.settings, undefined, equipment);\n      let notused = this.getIsNotUsed(expr);\n      const sectionNodes = expr.getChildren(PlannerNodeName.ExerciseSection);\n      const setVariations: IPlannerProgramExerciseSetVariation[] = [];\n      const allSets: IPlannerProgramExerciseSet[] = [];\n      let allWarmupSets: IPlannerProgramExerciseWarmupSet[] | undefined;\n      let reuse: IPlannerProgramReuse | undefined;\n      const repeat = this.getRepeat(expr);\n      const order = this.getOrder(expr);\n      const text = this.getValueTrim(expr).trim();\n      let tags: number[] = [];\n      let progress: IProgramExerciseProgress | undefined;\n      let update: IProgramExerciseUpdate | undefined;\n      let superset: IPlannerProgramExerciseSuperset | undefined;\n      for (const sectionNode of sectionNodes) {\n        const section = this.evaluateSection(sectionNode, exercise ? { id: exercise.id, equipment } : undefined);\n        if (section.type === \"sets\") {\n          allSets.push(...section.data);\n          if (section.data.some((set) => set.repRange != null)) {\n            setVariations.push({ sets: section.data, isCurrent: section.isCurrent });\n          }\n        } else if (section.type === \"warmup\") {\n          allWarmupSets = allWarmupSets || [];\n          allWarmupSets.push(...section.data);\n        } else if (section.type === \"progress\") {\n          progress = section.data;\n        } else if (section.type === \"update\") {\n          update = section.data;\n        } else if (section.type === \"reuse\") {\n          reuse = section.data;\n        } else if (section.type === \"id\") {\n          tags = tags.concat(section.data);\n        } else if (section.type === \"superset\") {\n          superset = section.data;\n        } else if (section.type === \"used\") {\n          notused = true;\n        } else {\n          throw new Error(`Unexpected section type`);\n        }\n      }\n      const rpe = allSets.find((set) => set.repRange == null && set.rpe != null)?.rpe;\n      const timer = allSets.find((set) => set.repRange == null && set.timer != null)?.timer;\n      const setTimer = allSets.find((set) => set.repRange == null && set.setTimer != null)?.setTimer;\n      const isOverflowSetTimer = allSets.find(\n        (set) => set.repRange == null && set.isOverflowSetTimer != null\n      )?.isOverflowSetTimer;\n      const auto = allSets.find((set) => set.repRange == null && set.auto != null)?.auto;\n      const percentage = allSets.find((set) => set.repRange == null && set.percentage != null)?.percentage;\n      const weight = allSets.find((set) => set.repRange == null && set.weight != null)?.weight;\n      const logRpe = allSets.find((set) => set.repRange == null && set.logRpe != null)?.logRpe;\n      const askWeight = allSets.find((set) => set.repRange == null && set.askWeight != null)?.askWeight;\n      const [line] = this.getLineAndOffset(expr);\n      const rawDescriptions: string[] = this.latestDescriptions.map((d) => d.join(\"\\n\"));\n      const currentDescriptionIndex = rawDescriptions.findIndex((d) => /^\\s*!/.test(d));\n      let descriptions = rawDescriptions.map((d, i) => ({\n        value: d.replace(/^\\s*!/, \"\"),\n        isCurrent: i === currentDescriptionIndex,\n      }));\n      if (descriptions.length > 1) {\n        descriptions = descriptions.filter((d) => d.value);\n      }\n      descriptions = descriptions.map((d) => ({ ...d, value: StringUtils_unindent(d.value) }));\n      this.latestDescriptions = [];\n      const fullNamePoint = this.getPoint(nameNode);\n\n      const reuseSetsNode = expr\n        .getChildren(PlannerNodeName.ExerciseSection)\n        .map((n) => n.getChild(PlannerNodeName.ReuseSectionWithWeekDay))\n        .filter((n) => n)[0];\n      const reuseSetPoint = reuseSetsNode ? this.getPoint(reuseSetsNode) : undefined;\n\n      const progressNode = expr\n        .getChildren(PlannerNodeName.ExerciseSection)\n        .map((n) => {\n          const node = n.getChild(PlannerNodeName.ExerciseProperty)?.getChild(PlannerNodeName.ExercisePropertyName);\n          return node != null && this.getValueTrim(node) === \"progress\" ? node : undefined;\n        })\n        .flat(2)\n        .filter((n) => n)[0];\n      const progressPoint = progressNode ? this.getPoint(progressNode) : undefined;\n\n      const updateNode = expr\n        .getChildren(PlannerNodeName.ExerciseSection)\n        .map((n) => {\n          const node = n.getChild(PlannerNodeName.ExerciseProperty)?.getChild(PlannerNodeName.ExercisePropertyName);\n          return node != null && this.getValueTrim(node) === \"update\" ? node : undefined;\n        })\n        .flat(2)\n        .filter((n) => n)[0];\n      const updatePoint = updateNode ? this.getPoint(updateNode) : undefined;\n\n      const idNode = expr\n        .getChildren(PlannerNodeName.ExerciseSection)\n        .map((n) => {\n          const node = n.getChild(PlannerNodeName.ExerciseProperty)?.getChild(PlannerNodeName.ExercisePropertyName);\n          return node != null && this.getValueTrim(node) === \"id\" ? node : undefined;\n        })\n        .flat(2)\n        .filter((n) => n)[0];\n      const idPoint = idNode ? this.getPoint(idNode) : undefined;\n\n      // On the property name rather than on WarmupExerciseSets, so that `warmup: none` - which\n      // parses to a None node and no sets - still records where it was written.\n      const warmupNode = expr\n        .getChildren(PlannerNodeName.ExerciseSection)\n        .map((n) => {\n          const node = n.getChild(PlannerNodeName.ExerciseProperty)?.getChild(PlannerNodeName.ExercisePropertyName);\n          return node != null && this.getValueTrim(node) === \"warmup\" ? node : undefined;\n        })\n        .flat(2)\n        .filter((n) => n)[0];\n      const warmupPoint = warmupNode ? this.getPoint(warmupNode) : undefined;\n\n      const supersetNode = expr\n        .getChildren(PlannerNodeName.ExerciseSection)\n        .map((n) => n.getChild(PlannerNodeName.Superset))\n        .filter((n) => n)[0];\n      const supersetPoint = supersetNode ? this.getPoint(supersetNode) : undefined;\n\n      const plannerExercise: IPlannerProgramExercise = {\n        id: UidFactory_generateUid(8),\n        key,\n        fullName,\n        shortName,\n        exerciseType: exercise,\n        label,\n        dayData: this.dayData,\n        text,\n        repeat,\n        repeating: [...repeat],\n        order,\n        superset,\n        name,\n        equipment,\n        exerciseIndex: this.exerciseIndex,\n        line,\n        tags,\n        notused: notused,\n        evaluatedSetVariations: [],\n        setVariations,\n        exerciseVariations,\n        descriptions: {\n          values: descriptions,\n        },\n        warmupSets: allWarmupSets,\n        reuse,\n        progress,\n        update,\n        globals: {\n          rpe,\n          logRpe,\n          askWeight,\n          timer,\n          setTimer,\n          isOverflowSetTimer,\n          auto,\n          percentage,\n          weight,\n        },\n        points: {\n          fullName: fullNamePoint,\n          supersetPoint,\n          reuseSetPoint,\n          progressPoint,\n          idPoint,\n          updatePoint,\n          warmupPoint,\n        },\n      };\n      this.weeks[this.weeks.length - 1].days[this.weeks[this.weeks.length - 1].days.length - 1].exercises.push(\n        plannerExercise\n      );\n      if (!notused) {\n        this.exerciseIndex += 1;\n      }\n    } else {\n      this.error(`Unexpected node type ${expr.node.type.name}`, expr);\n    }\n  }\n\n  private evaluateProgram(expr: SyntaxNode): IPlannerExerciseEvaluatorWeek[] {\n    if (expr.type.name === PlannerNodeName.Program) {\n      this.weeks = [];\n      this.exerciseIndex = 0;\n      for (const child of CollectionUtils_compact(getChildren(expr))) {\n        this.evaluateExercise(child);\n      }\n      return this.weeks;\n    } else {\n      this.error(`Unexpected node type ${expr.node.type.name}`, expr);\n    }\n  }\n\n  public evaluate(programNode: SyntaxNode): IPlannerEvalFullResult {\n    try {\n      this.parse(programNode);\n      const program = this.evaluateProgram(programNode);\n      return { data: program, success: true };\n    } catch (e) {\n      if (e instanceof PlannerSyntaxError) {\n        return { error: e, success: false };\n      } else {\n        throw e;\n      }\n    }\n  }\n\n  public hasWeightInUnit(programNode: SyntaxNode, unit: IUnit): boolean {\n    const cursor = programNode.cursor();\n    do {\n      const weight = this.getWeight(cursor.node);\n      if (weight != null) {\n        if (weight.unit === unit) {\n          return true;\n        }\n      }\n    } while (cursor.next());\n    return false;\n  }\n\n  public switchWeightsToUnit(programNode: SyntaxNode, settings: ISettings): string {\n    const cursor = programNode.cursor();\n    let script = this.script;\n    let shift = 0;\n    do {\n      if (cursor.node.type.name === PlannerNodeName.Weight) {\n        const weight = this.getWeight(cursor.node);\n        if (weight != null) {\n          if (weight.unit !== settings.units) {\n            const from = cursor.node.from;\n            const to = cursor.node.to;\n            const oldWeightStr = Weight_print(weight);\n            const newWeightStr = Weight_print(Weight_smartConvert(weight, settings.units));\n            script = script.substring(0, from + shift) + newWeightStr + script.substring(to + shift);\n            shift = shift + newWeightStr.length - oldWeightStr.length;\n          }\n        }\n      } else if (cursor.node.type.name === PlannerNodeName.Liftoscript) {\n        const oldLiftoscript = this.getValueTrim(cursor.node);\n        const liftoscriptEvaluator = new ScriptRunner(\n          oldLiftoscript,\n          {},\n          {},\n          Progress_createEmptyScriptBindings({ day: 1, week: 1, dayInWeek: 1 }, settings),\n          Progress_createScriptFunctions(settings),\n          settings.units,\n          { unit: settings.units, prints: [] },\n          \"planner\"\n        );\n        const newLiftoscript = liftoscriptEvaluator.switchWeightsToUnit(settings.units);\n        script =\n          script.substring(0, cursor.node.from + shift) + newLiftoscript + script.substring(cursor.node.to + shift);\n        shift = shift + newLiftoscript.length - oldLiftoscript.length;\n      }\n    } while (cursor.next());\n    return script;\n  }\n\n  public changeExerciseName(node: SyntaxNode, from: string, to: string): string {\n    const cursor = node.cursor();\n    let script = this.script;\n    let shift = 0;\n    do {\n      if (cursor.node.type.name === PlannerNodeName.ExerciseName) {\n        const name = this.getValue(cursor.node);\n        if (name === from) {\n          const fromNode = cursor.node.from;\n          const toNode = cursor.node.to;\n          script = script.substring(0, fromNode + shift) + to + script.substring(toNode + shift);\n          shift = shift + to.length - name.length;\n        }\n      }\n    } while (cursor.next());\n    return script;\n  }\n\n  public static changeWeightsToCompletedWeights(oldScript: string): string {\n    const node = plannerExerciseParser.parse(oldScript);\n    const cursor = node.cursor();\n    let script = oldScript;\n    let shift = 0;\n    do {\n      if (cursor.node.type.name === PlannerNodeName.Liftoscript) {\n        const value = LiftoscriptEvaluator.getValueRaw(oldScript, cursor.node);\n        const from = cursor.node.from;\n        const to = cursor.node.to;\n        const newValue = LiftoscriptEvaluator.changeWeightsToCompleteWeights(value);\n        script = script.substring(0, from + shift) + newValue + script.substring(to + shift);\n        shift = shift + newValue.length - value.length;\n      }\n    } while (cursor.next());\n    return script;\n  }\n\n  public topLineMap(programNode: SyntaxNode): IPlannerTopLineItem[] {\n    if (programNode.type.name !== PlannerNodeName.Program) {\n      this.error(`Unexpected node type ${programNode.type.name} - should be Program`, programNode);\n    }\n    const children = getChildren(programNode);\n    const result: IPlannerTopLineItem[] = [];\n    let lastDescriptions: string[][] = [];\n    let ongoingDescriptions = false;\n    let exerciseIndex = 0;\n    for (const child of children) {\n      if (child.type.name === PlannerNodeName.ExerciseExpression) {\n        ongoingDescriptions = false;\n        const nameNode = child.getChild(PlannerNodeName.ExerciseVariations)!;\n        const fullName = this.getValue(nameNode);\n        const key = PlannerKey_fromFullName(fullName, this.settings.exercises);\n        const repeat = this.getRepeat(child);\n        const repeatRanges = this.getRepeatRanges(repeat);\n        const order = this.getOrder(child);\n        const isUsed = !this.getIsNotUsed(child);\n        const sectionsNode = child.getChildren(PlannerNodeName.ExerciseSection);\n        const sections = sectionsNode.map((section) => this.getValueTrim(section).trim()).join(\" / \");\n        const sectionsToReuse = sectionsNode\n          .filter((section) => {\n            const properties = section.getChild(PlannerNodeName.ExerciseProperty);\n            if (properties == null) {\n              return true;\n            }\n            const propertyNameNode = properties.getChild(PlannerNodeName.ExercisePropertyName);\n            const propertyName = propertyNameNode ? this.getValue(propertyNameNode) : undefined;\n            if (propertyName === \"progress\") {\n              const none = properties.getChild(PlannerNodeName.None);\n              return none != null;\n            }\n            return false;\n          })\n          .map((section) => this.getValueTrim(section).trim())\n          .join(\" / \");\n        result.push({\n          type: \"exercise\",\n          fullName,\n          order,\n          notused: !isUsed,\n          value: key,\n          exerciseIndex,\n          repeat,\n          repeatRanges,\n          descriptions: lastDescriptions.map((d) => d.join(\"\\n\")),\n          sections,\n          sectionsToReuse,\n        });\n        if (isUsed) {\n          exerciseIndex += 1;\n        }\n        lastDescriptions = [];\n      } else if (child.type.name === PlannerNodeName.LineComment) {\n        ongoingDescriptions = true;\n        const description = this.getValueTrim(child).trim();\n        if (lastDescriptions.length === 0) {\n          lastDescriptions.push([]);\n        }\n        lastDescriptions[lastDescriptions.length - 1].push(description);\n        result.push({ type: \"description\", value: description });\n      } else if (child.type.name === PlannerNodeName.TripleLineComment) {\n        result.push({ type: \"comment\", value: this.getValueTrim(child).trim() });\n      } else if (child.type.name === PlannerNodeName.EmptyExpression) {\n        result.push({ type: \"empty\", value: \"\" });\n        if (ongoingDescriptions) {\n          lastDescriptions.push([]);\n        }\n      } else {\n        this.error(\n          `Unexpected node type ${child.type.name}, should be only exercise, comment, description or empty line`,\n          child\n        );\n      }\n    }\n    return result;\n  }\n}\n","import { SyntaxNode } from \"@lezer/common\";\nimport { CollectionUtils_compact } from \"../../utils/collection\";\nimport { PlannerNodeName } from \"./plannerExerciseStyles\";\n\nfunction getChildren(node: SyntaxNode): SyntaxNode[] {\n  const cur = node.cursor();\n  const result: SyntaxNode[] = [];\n  if (!cur.firstChild()) {\n    return result;\n  }\n  do {\n    result.push(cur.node);\n  } while (cur.nextSibling());\n  return result;\n}\n\nexport interface IPlannerExerciseEvaluatorTextWeek {\n  name: string;\n  description?: string;\n  days: IPlannerExerciseEvaluatorTextDay[];\n}\n\nexport interface IPlannerExerciseEvaluatorTextDay {\n  name: string;\n  description?: string;\n  exercises: string[];\n}\n\ntype IPlannerNonExerciseFullTextLine =\n  | { type: \"comment\"; line: string }\n  | { type: \"triplelinecomment\"; line: string }\n  | { type: \"empty\"; line: string };\n\nfunction fullTextLineToWeekdayDescription(line: IPlannerNonExerciseFullTextLine): string {\n  switch (line.type) {\n    case \"comment\":\n      return line.line.replace(/^\\s*\\/\\/\\s*/, \"\").trim();\n    case \"triplelinecomment\":\n      return line.line.replace(/^\\s*\\/\\/\\/\\s*/, \"\").trim();\n    case \"empty\":\n      return \"\";\n  }\n}\n\nexport class PlannerExerciseEvaluatorText {\n  private readonly script: string;\n  private weeks: IPlannerExerciseEvaluatorTextWeek[] = [];\n  private ongoingLines: IPlannerNonExerciseFullTextLine[] = [];\n\n  constructor(script: string) {\n    this.script = script;\n  }\n\n  private getValue(node: SyntaxNode): string {\n    return this.script.slice(node.from, node.to);\n  }\n\n  private getWeekDayOngoingLines(): {\n    linesToPreviousExercise: IPlannerNonExerciseFullTextLine[];\n    nextLines: IPlannerNonExerciseFullTextLine[];\n  } {\n    const ongoingLines = [...this.ongoingLines];\n    let anyCommentStarted = false;\n    let commentStarted = false;\n    const linesToPreviousExercise: IPlannerNonExerciseFullTextLine[] = [];\n    const nextLines: IPlannerNonExerciseFullTextLine[] = [];\n    for (let i = 0; i < ongoingLines.length; i++) {\n      const line = ongoingLines[i];\n      if (!anyCommentStarted && line?.type === \"empty\") {\n        continue;\n      }\n      if (line?.type === \"comment\" || line?.type === \"triplelinecomment\") {\n        anyCommentStarted = true;\n      }\n      if (line?.type === \"comment\") {\n        commentStarted = true;\n      }\n      if (anyCommentStarted && !commentStarted) {\n        linesToPreviousExercise.push(line);\n      }\n      if (commentStarted && line?.type === \"comment\") {\n        nextLines.push(line);\n      }\n    }\n    for (let i = nextLines.length - 1; i >= 0; i--) {\n      const line = nextLines[i];\n      if (line.type === \"empty\") {\n        nextLines.pop();\n      } else {\n        break;\n      }\n    }\n    for (let i = linesToPreviousExercise.length - 1; i >= 0; i--) {\n      const line = linesToPreviousExercise[i];\n      if (line.type === \"empty\") {\n        linesToPreviousExercise.pop();\n      } else {\n        break;\n      }\n    }\n    return { linesToPreviousExercise, nextLines };\n  }\n\n  private getWeekDayDescriptionAndFillLastDay(): string | undefined {\n    const { linesToPreviousExercise, nextLines } = this.getWeekDayOngoingLines();\n    if (linesToPreviousExercise.length > 0) {\n      const lastDay = this.getLastDay();\n      if (lastDay) {\n        lastDay.exercises.push(...linesToPreviousExercise.map((line) => line.line));\n      }\n    }\n    const description =\n      nextLines.length > 0 ? nextLines.map(fullTextLineToWeekdayDescription).join(\"\\n\").trim() : undefined;\n    return description;\n  }\n\n  private getLastDay(): IPlannerExerciseEvaluatorTextDay | undefined {\n    const lastWeek = this.weeks[this.weeks.length - 1];\n    return lastWeek?.days[lastWeek.days.length - 1];\n  }\n\n  private evaluateLine(expr: SyntaxNode): void {\n    if (expr.type.name === PlannerNodeName.Week) {\n      const weekName = this.getValue(expr).replace(/^#+/, \"\").trim();\n      const description = this.getWeekDayDescriptionAndFillLastDay();\n      this.weeks.push({ name: weekName, description, days: [] });\n      this.ongoingLines = [];\n    } else if (expr.type.name === PlannerNodeName.Day) {\n      const dayName = this.getValue(expr).replace(/^#+/, \"\").trim();\n      const description = this.getWeekDayDescriptionAndFillLastDay();\n      this.weeks[this.weeks.length - 1].days.push({ name: dayName, exercises: [], description });\n      this.ongoingLines = [];\n    } else if (expr.type.name === PlannerNodeName.EmptyExpression) {\n      this.ongoingLines.push({ type: \"empty\", line: this.getValue(expr) });\n    } else if (expr.type.name === PlannerNodeName.LineComment) {\n      this.ongoingLines.push({ type: \"comment\", line: this.getValue(expr) });\n    } else if (expr.type.name === PlannerNodeName.TripleLineComment) {\n      this.ongoingLines.push({ type: \"triplelinecomment\", line: this.getValue(expr) });\n    } else if (expr.type.name === PlannerNodeName.ExerciseExpression) {\n      const lastWeek = this.weeks[this.weeks.length - 1];\n      const lastDay = lastWeek ? lastWeek.days[lastWeek.days.length - 1] : undefined;\n      const exercises = lastDay?.exercises;\n      if (exercises) {\n        for (const line of this.ongoingLines) {\n          exercises.push(line.line);\n        }\n        exercises.push(this.getValue(expr));\n        this.ongoingLines = [];\n      }\n    }\n  }\n\n  public evaluate(expr: SyntaxNode): IPlannerExerciseEvaluatorTextWeek[] {\n    if (expr.type.name === PlannerNodeName.Program) {\n      this.ongoingLines = [];\n      this.weeks = [];\n      for (const child of CollectionUtils_compact(getChildren(expr))) {\n        this.evaluateLine(child);\n      }\n      return this.weeks;\n    } else {\n      throw new Error(`Unexpected node type ${expr.type.name}`);\n    }\n  }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nimport { LRParser } from \"@lezer/lr\";\nconst spec_Keyword: any = { __proto__: null, none: 168, auto: 172 };\nexport const parser = LRParser.deserialize({\n  version: 14,\n  states:\n    \"3nQVQPOOOOQO'#Ce'#CeOOQO'#Dg'#DgOnQQO'#CfOOQO'#Cd'#CdO!SQPO'#CdO!XQQO'#CcO!gQQO'#CbOOQO'#De'#DeOOQO'#Ds'#DsOOQO'#Df'#DfQVQPOOOOQO-E7e-E7eOOQO,59O,59OO!rQPO'#DhO!zQQO,58}O#YQSO'#ChO#yQSO'#DjO$aQQO,58|OOQO,58|,58|O$aQQO,58|OOQO-E7d-E7dOOQO,5:S,5:SOOQO-E7f-E7fOOQO'#Ci'#CiO$iQSO,59SO$lQSO,59SO$tQWO'#CiOOQO'#Co'#CoO%PQSO'#CzO!SQPO'#DOO%[QSO'#CnOOQO'#DX'#DXO%aQWO'#DYO%iQSO'#DZO&dQSO'#D[O!SQPO'#D]OOQO'#Dn'#DnO'_QSO'#DUO'oQSO'#DTO#_QSO'#DTO'}QQO'#D_O(]QSO'#DcO(bQQO'#CmOOQO,5:U,5:UOOQO-E7h-E7hOOQO1G.h1G.hO(mQQO1G.hO#YQSO,59VO#YQSO'#DiO(uQSO1G.nOOQO1G.n1G.nOOQO,59r,59rOOQO'#Cv'#CvO(}QSO,59fOOQO,59f,59fOOQO,59j,59jO){QSO,59YO#YQSO,59tO*^QWO,59tOOQO,59u,59uOOQO,59v,59vO*cQPO,59wOOQO-E7l-E7lO#_QSO'#DoO*kQSO,59oO*kQSO,59oO*yQWO'#D`OOQO,59y,59yO!SQPO,59}O+RQPO,59XOOQO7+$S7+$SOOQO1G.q1G.qO+WQSO,5:TOOQO,5:T,5:TOOQO-E7g-E7gOOQO7+$Y7+$YOOQO1G/Q1G/QOOQO'#Cr'#CrO+cQQO'#CqO+wQWO'#DROOQO'#Dl'#DlO,cQSO'#DQO,zQSO'#DPOOQO'#DS'#DSOOQO1G.t1G.tO.TQSO1G/`O-YQSO1G/`O#YQSO1G/`OOQO1G/c1G/cOOQO,5:Z,5:ZOOQO-E7m-E7mO.[QSO1G/ZOOQO'#Da'#DaO.jQSO,59zOOQO1G/i1G/iOOQO1G.s1G.sO.rQSO'#C}OOQO,59],59]O/cQSO,59]O#YQSO,59mOOQO-E7j-E7jO/mQSO'#DmO/xQSO,59kOOQO7+$z7+$zO1RQSO7+$zO0WQSO7+$zOOQO1G/f1G/fO*yQWO1G/fO1YQPO,59iO1_QSO'#CiO1jQSO'#CkOOQO'#Ct'#CtO1oQSO'#CtO1wQSO'#C{OOQO'#Cs'#CsO.wQSO'#DkO2PQSO1G.wO2XQQO1G.wO2PQSO1G.wOOQO1G/X1G/XOOQO,5:X,5:XOOQO-E7k-E7kOOQO<<Hf<<HfO2jQPO7+%QO2oQPO'#CfOOQO1G/T1G/TOOQO,59`,59`O2wQSO,59gO3]QSO,59gOOQO,5:V,5:VOOQO-E7i-E7iO3bQQO7+$cOOQO7+$c7+$cO3sQSO7+$cOOQO<<Hl<<HlOOQO1G/R1G/RO3{QSO1G/ROOQO<<G}<<G}O4aQQO<<G}OOQO7+$m7+$mOOQOAN=iAN=iO!SQPO'#DO\",\n  stateData:\n    \"5U~O!fOS~OQXORXOSXOTXOZQO!hPO!zWO~OZQO`YX!iYX!jYX!{YX!yYX~OZQO~O!i^O`VX!jVX!{VX~O`aO!j`O!{cO~OZQO!hPO~O!i^O`Va!jVa!{Va~O^hO~O^kOlrOmsOyuO!QuO!otO!pmO!xpO~OdlO!WzO!hPO!snO`!^X!{!^X~P#_O`aO!{!OO~O!k!QO!l!RO!m!TO~O!w!UOi]X!u]X~O^!VOi!XOk!VO~O!n!ZO~Oi!]O!u![O~Oi!^O^}X`}Xl}Xm}Xy}X!Q}X!l}X!o}X!p}X!x}X!y}X!{}X~Oi!_O^!OX`!OXl!OXm!OXy!OX!Q!OX!l!OX!o!OX!p!OX!x!OX!y!OX!{!OX~O`xX!lxX!yxX!{xX~P#_O!l!bO`wX!ywX!{wX~O!j!eO`!RX!y!RX!{!RX~O!n!gO~O!y!hO`aX!{aX~O`aO!{!iO~O!l!RO!m!nO~Oi!oO^na`nalnamnayna!Qna!lna!ona!pna!xna!yna!{na!qna~O^hOd!pOl!sOm!sO!v!vO~O!u!zO~OZQO!q!{O~O!l!bO`wa!ywa!{wa~O^#PO!U#PO~O!z#SO~O!k!QO!l!]a!m!]a~Op#UO!o#VO!r#TO`eX!yeX!{eX~O!u#WO^uX`uXluXmuX!luX!yuX!{uX~O^hOl!sOm!sO`tX!ltX!ytX!{tX~O!l#YO`sX!ysX!{sX~Oi#[O^|i`|il|im|iy|i!Q|i!l|i!o|i!p|i!x|i!y|i!{|i~O!k!QO~P-YO!l!bO`wi!ywi!{wi~O!m#_O!n#`O~O!s$SO~O^#bOd#fOi#eOk!VOl#gOm#gO!k#eO!pmO~O!l#hO!q#jO~P.wO^hOl!sOm!sO~O!l#YO`sa!ysa!{sa~Oi#oO^|q`|ql|qm|qy|q!Q|q!l|q!o|q!p|q!x|q!y|q!{|q~O!k!QO~P0WO!t#rO~O!k]X!ljX!qjX~O!k!QO~O^!VOk!VO~Oi#uO!n#tO~O!l#hO!q#xO~Op#yO!r#TO`ei!yei!{ei~O!m#{O~OZQO!tYX~O^!VOi#eOk!VOl#|Om#|O!k#eO~O!n#}O~Op$OO!r#TO`eq!yeq!{eq~O!l#hO!q$PO~O^!VOi#eOk!VOl$QOm$QO!k#eO~Op$RO!r#TO`ey!yey!{ey~Ol!Wd!y!j!m!QRQTSZmyk^m~\",\n  goto: \"(v!hPPPPPP!i!m!q!x#QP#a#dP$VP$g$j$mP$p$s$v$|P%WPPP%d$cP%n%z$p&Q&W$p$j&]P&f&f&f&f&f&fP$j&l&oP$jP!i&u&{'`'f'm'w(R(Y(`(hPPP(rTXOZTVOZSUOZRf^UTOZ^RxaUSOZ^Q]TS!Yn$SR#R!gRdVQi`Wqavx!bQ!j!QQ!k!RU!r!Z!t#YQ!x![Q#]!zS#c#V#hR#l#WQj`Q!l!RQ!y![Q#^!zT#g#V#hR|aR{aRoaR!w!ZR!q!ZQ#k#VR#v#hS#g#V#hQ#|#tR$Q#}Q!WmW#d#V#h#t#}R#s#eWuavx!bT#g#V#hQ#U!qQ#y#jQ$O#xR$R$PQyaR#a#TQ!u!ZR#m#YV!s!Z!t#YQwaQ!dxR!|!bXuavx!bR!fyQ#Q!eR#p#`QZOReZ[ROTZ^n!gU[R!`#qQ!`tR#q$SQ_URg_S!SijR!m!SQbVS}b!PR!PdQ#i#VS#w#i#zR#z#kS!t!Z#YR#X!tQ#Z!uR#n#ZUvax!bR!avQ!cwS!}!c#OR#O!dTYOZ\",\n  nodeNames:\n    \"⚠ Program LineComment TripleLineComment Week Day ExerciseExpression ExerciseVariations ExerciseVariation CurrentVariation ExerciseName NonSeparator Repeat Rep Int RepRange SectionSeparator ExerciseSection ExerciseProperty ExercisePropertyName Keyword FunctionExpression FunctionName FunctionArgument Number Plus PosNumber Float Weight Percentage Rpe KeyValue Liftoscript ReuseLiftoscript ReuseSection WarmupExerciseSets WarmupExerciseSet WarmupSetPart None ExerciseSets ExerciseSet SetTimer Timer Auto SetPart WeightWithPlus PercentageWithPlus SetLabel AskWeight ReuseSectionWithWeekDay WeekDay WeekOrDay Current Superset SupersetKeyword EmptyExpression\",\n  maxTerm: 89,\n  skippedNodes: [0],\n  repeatNodeCount: 10,\n  tokenData:\n    \"!)W~R|OX#{XY$|YZ%XZ]#{]^%`^p#{pq$|qr%jrs#{st%otx#{xy)qyz)vz{#{{|){|}2g}!O3d!O!P4g!P!Q8r!Q![<|![!]A}!]!a#{!a!bBz!b!cDx!c!}Eu!}#OGR#O#PGW#P#QHT#Q#R#{#R#SHY#S#T#{#T#gEu#g#hIh#h#lEu#l#m!&l#m#oEu#o#p!'z#p#q!(w#q#r!(|#r;'S#{;'S;=`$v<%l~#{~O#{~~!)RR$Q[ZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q!}#{#O#P#{#Q#o#{#r;'S#{;'S;=`$v<%lO#{R$yP;=`<%l#{~%RQ!f~XY$|pq$|_%`O!zP!{^_%gP!zP!{^YZ%X~%oO!h~~%rZOY&eYZ'TZ]&e]^'Y^s&est(Qt;'S&e;'S;=`'z<%l~&e~O&e~~'T~&hXOY&eYZ'TZ]&e]^'Y^;'S&e;'S;=`'z<%l~&e~O&e~~'T~'YOS~~'_XS~OY&eYZ'TZ]&e]^'Y^;'S&e;'S;=`'z<%l~&e~O&e~~'T~'}P;=`<%l&e~(TXOY(QYZ(pZ](Q]^(w^;'S(Q;'S;=`)k<%l~(Q~O(Q~~(p~(wOT~S~~)OXT~S~OY(QYZ(pZ](Q]^(w^;'S(Q;'S;=`)k<%l~(Q~O(Q~~(p~)nP;=`<%l(Q~)vO!o~~){O!q~_*S^i[ZROX#{Z]#{^p#{rs#{tx#{z!O#{!O!P+O!Q![1V![!}#{#O#P#{#Q#o#{#r;'S#{;'S;=`$v<%lO#{_+T]ZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q![+|![!}#{#O#P#{#Q#o#{#r;'S#{;'S;=`$v<%lO#{_,RbZROX#{Z]#{^p#{rs#{tu#{uv-Zvx#{z!P#{!Q![+|![!}#{#O#P#{#Q#_#{#_#`.W#`#a0U#a#o#{#r;'S#{;'S;=`$v<%lO#{_-b[ZRm[OX#{Z]#{^p#{rs#{tx#{z!P#{!Q!}#{#O#P#{#Q#o#{#r;'S#{;'S;=`$v<%lO#{_.]^ZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q!}#{#O#P#{#Q#Z#{#Z#[/X#[#o#{#r;'S#{;'S;=`$v<%lO#{_/`[l[ZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q!}#{#O#P#{#Q#o#{#r;'S#{;'S;=`$v<%lO#{_0Z^ZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q!}#{#O#P#{#Q#U#{#U#V/X#V#o#{#r;'S#{;'S;=`$v<%lO#{_1[cZROX#{Z]#{^p#{rs#{tu#{uv-Zvx#{z!O#{!O!P+O!Q![1V![!}#{#O#P#{#Q#_#{#_#`.W#`#a0U#a#o#{#r;'S#{;'S;=`$v<%lO#{_2n[!l[ZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q!}#{#O#P#{#Q#o#{#r;'S#{;'S;=`$v<%lO#{_3k^!kSZROX#{Z]#{^p#{rs#{tx#{z!O#{!O!P+O!Q![1V![!}#{#O#P#{#Q#o#{#r;'S#{;'S;=`$v<%lO#{_4l^ZROX#{Z]#{^p#{rs#{tx#{z!O#{!O!P5h!Q![7c![!}#{#O#P#{#Q#o#{#r;'S#{;'S;=`$v<%lO#{V5m]ZROX#{Z]#{^p#{rs#{tx#{z!O#{!O!P6f!Q!}#{#O#P#{#Q#o#{#r;'S#{;'S;=`$v<%lO#{V6m[!sSZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q!}#{#O#P#{#Q#o#{#r;'S#{;'S;=`$v<%lO#{_7jbZRkSOX#{Z]#{^p#{rs#{tu#{uv-Zvx#{z!P#{!Q![7c![!}#{#O#P#{#Q#_#{#_#`.W#`#a0U#a#o#{#r;'S#{;'S;=`$v<%lO#{_8wP`^!P!Q8zP8}ZOY9pYZ:`Z]9p]^:e^!P9p!P!Q;]!Q;'S9p;'S;=`;V<%l~9p~O9p~~:`P9sXOY9pYZ:`Z]9p]^:e^;'S9p;'S;=`;V<%l~9p~O9p~~:`P:eOQPP:jXQPOY9pYZ:`Z]9p]^:e^;'S9p;'S;=`;V<%l~9p~O9p~~:`P;YP;=`<%l9pP;`XOY;]YZ;{Z];]]^<S^;'S;];'S;=`<v<%l~;]~O;]~~;{P<SORPQPP<ZXRPQPOY;]YZ;{Z];]]^<S^;'S;];'S;=`<v<%l~;]~O;]~~;{P<yP;=`<%l;]_=TeZR^[OX#{Z]#{^p#{rs#{tu#{uv-Zvx#{z!O#{!O!P>f!Q![<|![!}#{#O#P#{#Q#_#{#_#`.W#`#a0U#a#g#{#g#h?d#h#o#{#r;'S#{;'S;=`$v<%lO#{_>k]ZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q![7c![!}#{#O#P#{#Q#o#{#r;'S#{;'S;=`$v<%lO#{V?i_ZROX#{Z]#{^p#{rs#{tx#{z{#{{|@h|!P#{!Q!}#{#O#P#{#Q#o#{#p#qAf#r;'S#{;'S;=`$v<%lO#{V@m]ZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q!}#{#O#P#{#Q#o#{#p#qAf#r;'S#{;'S;=`$v<%lO#{SAiQ!Q![Ao!a!bAxSArQ!Q![Ao#g#hAxSA}OySVBU[!nSZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q!}#{#O#P#{#Q#o#{#r;'S#{;'S;=`$v<%lO#{~CP^ZROX#{Z]#{^p#{rs#{tx#{z{#{{|C{|!P#{!Q!}#{#O#P#{#Q#o#{#r;'S#{;'S;=`$v<%lO#{~DS[!Q~ZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q!}#{#O#P#{#Q#o#{#r;'S#{;'S;=`$v<%lO#{VEP[!pSZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q!}#{#O#P#{#Q#o#{#r;'S#{;'S;=`$v<%lO#{VE|adSZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q![Eu![!c#{!c!}Eu#O#P#{#Q#R#{#R#SEu#S#T#{#T#oEu#r;'S#{;'S;=`$v<%lO#{~GWO!j~~G_[!y~ZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q!}#{#O#P#{#Q#o#{#r;'S#{;'S;=`$v<%lO#{~HYO!m~_Hca!UWdSZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q![Eu![!c#{!c!}Eu#O#P#{#Q#R#{#R#SEu#S#T#{#T#oEu#r;'S#{;'S;=`$v<%lO#{_Iqc!wWdSZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q![Eu![!c#{!c!}Eu#O#P#{#Q#R#{#R#SEu#S#T#{#T#iEu#i#jJ|#j#oEu#r;'S#{;'S;=`$v<%lO#{VKTcdSZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q![Eu![!c#{!c!}Eu#O#P#{#Q#R#{#R#SEu#S#T#{#T#dEu#d#eL`#e#oEu#r;'S#{;'S;=`$v<%lO#{VLgcdSZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q![Eu![!c#{!c!}Eu#O#P#{#Q#R#{#R#SEu#S#T#{#T#XEu#X#YMr#Y#oEu#r;'S#{;'S;=`$v<%lO#{VMycdSZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q![Eu![!c#{!c!}Eu#O#P#{#Q#R#{#R#SEu#S#T#{#T#fEu#f#g! U#g#oEu#r;'S#{;'S;=`$v<%lO#{V! ]cdSZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q![Eu![!c#{!c!}Eu#O#P#{#Q#R#{#R#SEu#S#T#{#T#gEu#g#h!!h#h#oEu#r;'S#{;'S;=`$v<%lO#{V!!ocdSZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q![Eu![!c#{!c!}Eu#O#P#{#Q#R#{#R#SEu#S#T#{#T#XEu#X#Y!#z#Y#oEu#r;'S#{;'S;=`$v<%lO#{V!$RcdSZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q![Eu![!c#{!c!}Eu#O#P#{#Q#R#{#R#SEu#S#T#{#T#hEu#h#i!%^#i#oEu#r;'S#{;'S;=`$v<%lO#{V!%ga!WSdSZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q![Eu![!c#{!c!}Eu#O#P#{#Q#R#{#R#SEu#S#T#{#T#oEu#r;'S#{;'S;=`$v<%lO#{_!&ua!uWdSZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q![Eu![!c#{!c!}Eu#O#P#{#Q#R#{#R#SEu#S#T#{#T#oEu#r;'S#{;'S;=`$v<%lO#{~!(PP!r~#r#s!(S~!(VTO#r!(S#r#s!(f#s;'S!(S;'S;=`!(q<%lO!(S~!(iP#q#r!(l~!(qOp~~!(tP;=`<%l!(S~!(|O!i~~!)RO!t~^!)WO!{^\",\n  tokenizers: [0, 1, 2, 3],\n  topRules: { Program: [0, 1] },\n  specialized: [{ term: 20, get: (value: any) => spec_Keyword[value] || -1 }],\n  tokenPrec: 908,\n});\n","import { tags as t } from \"@lezer/highlight\";\n\nexport enum PlannerNodeName {\n  Program = \"Program\",\n  LineComment = \"LineComment\",\n  TripleLineComment = \"TripleLineComment\",\n  Week = \"Week\",\n  Day = \"Day\",\n  ExerciseExpression = \"ExerciseExpression\",\n  ExerciseVariations = \"ExerciseVariations\",\n  ExerciseVariation = \"ExerciseVariation\",\n  ExerciseName = \"ExerciseName\",\n  NonSeparator = \"NonSeparator\",\n  Repeat = \"Repeat\",\n  Rep = \"Rep\",\n  Int = \"Int\",\n  RepRange = \"RepRange\",\n  SectionSeparator = \"SectionSeparator\",\n  ExerciseSection = \"ExerciseSection\",\n  ExerciseProperty = \"ExerciseProperty\",\n  ExercisePropertyName = \"ExercisePropertyName\",\n  Keyword = \"Keyword\",\n  FunctionExpression = \"FunctionExpression\",\n  FunctionName = \"FunctionName\",\n  FunctionArgument = \"FunctionArgument\",\n  Number = \"Number\",\n  Plus = \"Plus\",\n  PosNumber = \"PosNumber\",\n  Float = \"Float\",\n  Weight = \"Weight\",\n  Percentage = \"Percentage\",\n  Rpe = \"Rpe\",\n  KeyValue = \"KeyValue\",\n  Liftoscript = \"Liftoscript\",\n  ReuseLiftoscript = \"ReuseLiftoscript\",\n  ReuseSection = \"ReuseSection\",\n  WarmupExerciseSets = \"WarmupExerciseSets\",\n  WarmupExerciseSet = \"WarmupExerciseSet\",\n  WarmupSetPart = \"WarmupSetPart\",\n  None = \"None\",\n  ExerciseSets = \"ExerciseSets\",\n  CurrentVariation = \"CurrentVariation\",\n  ExerciseSet = \"ExerciseSet\",\n  Timer = \"Timer\",\n  SetTimer = \"SetTimer\",\n  Auto = \"Auto\",\n  SetPart = \"SetPart\",\n  WeightWithPlus = \"WeightWithPlus\",\n  PercentageWithPlus = \"PercentageWithPlus\",\n  SetLabel = \"SetLabel\",\n  ReuseSectionWithWeekDay = \"ReuseSectionWithWeekDay\",\n  WeekDay = \"WeekDay\",\n  WeekOrDay = \"WeekOrDay\",\n  Current = \"Current\",\n  Superset = \"Superset\",\n  SupersetKeyword = \"SupersetKeyword\",\n  AskWeight = \"AskWeight\",\n  EmptyExpression = \"EmptyExpression\",\n}\n\nexport const plannerExerciseStyles = {\n  [`${[PlannerNodeName.SetPart]}/...`]: t.atom,\n  [`${[PlannerNodeName.WarmupSetPart]}/...`]: t.atom,\n  [`${[PlannerNodeName.Rpe]}/...`]: t.number,\n  [`${[PlannerNodeName.Timer]}/...`]: t.keyword,\n  [`${[PlannerNodeName.SetTimer]}/...`]: t.keyword,\n  [PlannerNodeName.Auto]: t.keyword,\n  [`${[PlannerNodeName.Weight]}/...`]: t.number,\n  [`${[PlannerNodeName.Percentage]}/...`]: t.number,\n  [PlannerNodeName.AskWeight]: t.number,\n  [PlannerNodeName.LineComment]: t.lineComment,\n  [PlannerNodeName.TripleLineComment]: t.blockComment,\n  [PlannerNodeName.SupersetKeyword]: t.keyword,\n  [PlannerNodeName.SectionSeparator]: t.lineComment,\n  [`${[PlannerNodeName.ExercisePropertyName]}/...`]: t.keyword,\n  [`${[PlannerNodeName.FunctionName]}/...`]: t.attributeName,\n  [`${[PlannerNodeName.FunctionArgument]}/...`]: t.attributeValue,\n  [PlannerNodeName.None]: t.atom,\n  [PlannerNodeName.Week]: t.annotation,\n  [PlannerNodeName.Day]: t.docComment,\n  [PlannerNodeName.WeekDay]: t.atom,\n  [PlannerNodeName.Repeat]: t.atom,\n};\n","import { highlightTree, classHighlighter, styleTags } from \"@lezer/highlight\";\nimport { parser as plannerExerciseParser } from \"./plannerExerciseParser\";\nimport { plannerExerciseStyles } from \"./plannerExerciseStyles\";\nimport { parseMixed } from \"@lezer/common\";\nimport { liftoscriptLanguage } from \"../../liftoscriptLanguage\";\n\nconst parserWithMetadata = plannerExerciseParser.configure({\n  props: [styleTags(plannerExerciseStyles)],\n  wrap: parseMixed((node) => {\n    return node.name === \"Liftoscript\" ? { parser: liftoscriptLanguage.parser } : null;\n  }),\n});\n\ntype IRange = { from: number; to: number; clazz: string };\n\nexport interface IHighlightSegment {\n  text: string;\n  clazz: string | null;\n}\n\nfunction buildRanges(script: string): IRange[] {\n  const tree = parserWithMetadata.parse(script);\n  const ranges: IRange[] = [];\n  highlightTree(tree, classHighlighter, (from, to, classes) => {\n    ranges.push({ from, to, clazz: classes });\n  });\n  return ranges;\n}\n\nexport function PlannerHighlighter_highlight(script: string): string {\n  const ranges = buildRanges(script);\n  const highlightedSource = ranges.reduceRight((acc, range) => {\n    const clazz = range.clazz;\n    const highlighted = `<span class=\"${clazz}\">${acc.slice(range.from, range.to)}</span>`;\n    return acc.slice(0, range.from) + highlighted + acc.slice(range.to);\n  }, script);\n  return highlightedSource;\n}\n\nexport function PlannerHighlighter_segments(script: string): IHighlightSegment[] {\n  const ranges = buildRanges(script)\n    .slice()\n    .sort((a, b) => a.from - b.from);\n  const segments: IHighlightSegment[] = [];\n  let cursor = 0;\n  for (const range of ranges) {\n    if (range.from < cursor) {\n      continue;\n    }\n    if (range.from > cursor) {\n      segments.push({ text: script.slice(cursor, range.from), clazz: null });\n    }\n    segments.push({ text: script.slice(range.from, range.to), clazz: range.clazz });\n    cursor = range.to;\n  }\n  if (cursor < script.length) {\n    segments.push({ text: script.slice(cursor), clazz: null });\n  }\n  return segments;\n}\n","import memoize from \"micro-memoize\";\nimport { Exercise_toKey, Exercise_findByNameEquipment } from \"../../models/exercise\";\nimport { IAllCustomExercises, IExerciseType, ISettings } from \"../../types\";\nimport { IPlannerProgramExercise, IPlannerProgramExerciseVariation } from \"./models/types\";\nimport { PlannerExerciseEvaluator } from \"./plannerExerciseEvaluator\";\n\nexport function PlannerKey_fromPlannerExercise(plannerExercise: IPlannerProgramExercise, settings: ISettings): string {\n  if (plannerExercise.exerciseVariations != null && plannerExercise.exerciseVariations.length > 1) {\n    return PlannerKey_fromExerciseVariations(plannerExercise.exerciseVariations, plannerExercise.label);\n  } else if (plannerExercise.exerciseType) {\n    return PlannerKey_fromExerciseType(plannerExercise.exerciseType, plannerExercise.label);\n  } else {\n    return PlannerKey_fromFullName(plannerExercise.fullName, settings.exercises);\n  }\n}\n\nexport function PlannerKey_fromExerciseVariations(\n  variations: IPlannerProgramExerciseVariation[],\n  label: string | undefined\n): string {\n  const keyPart = variations.map((v) => (v.exerciseType ? Exercise_toKey(v.exerciseType) : v.name)).join(\"_\");\n  return `${label ? `${label}-` : \"\"}${keyPart}`.toLowerCase();\n}\n\nexport function PlannerKey_fromExerciseType(exerciseType: IExerciseType, label?: string): string {\n  const key = Exercise_toKey(exerciseType);\n  const plannerKey = `${label ? `${label}-` : \"\"}${key}`.toLowerCase();\n  return plannerKey;\n}\n\nexport const PlannerKey_fromFullName = memoize(\n  (fullName: string, exercises: IAllCustomExercises): string => {\n    const segments = fullName.split(\"|\");\n    if (segments.length === 1) {\n      const { label, name, equipment } = PlannerExerciseEvaluator.extractNameParts(fullName, exercises);\n      return PlannerKey_fromLabelNameAndEquipment(label, name, equipment, exercises);\n    }\n    let label: string | undefined;\n    const keyParts = segments.map((segment, i) => {\n      const cleaned = segment.trim().replace(/^!\\s*/, \"\");\n      const { label: segmentLabel, name, equipment } = PlannerExerciseEvaluator.extractNameParts(cleaned, exercises);\n      if (i === 0) {\n        label = segmentLabel;\n      }\n      const exercise = Exercise_findByNameEquipment(exercises, name, equipment);\n      return exercise ? Exercise_toKey(exercise) : name;\n    });\n    return `${label ? `${label}-` : \"\"}${keyParts.join(\"_\")}`.toLowerCase();\n  },\n  { maxSize: 1000 }\n);\n\nexport const PlannerKey_fromLabelNameAndEquipment = memoize(\n  (label: string | undefined, name: string, equipment: string | undefined, exercises: IAllCustomExercises): string => {\n    const exercise = Exercise_findByNameEquipment(exercises, name, equipment);\n    const key = exercise ? Exercise_toKey(exercise) : name;\n    const plannerKey = `${label ? `${label}-` : \"\"}${key}`.toLowerCase();\n    return plannerKey;\n  },\n  {\n    maxSize: 1000,\n  }\n);\n","import { JSX, useState } from \"react\";\nimport { IProgram, ISettings } from \"../../../types\";\nimport { Dialog_alert, Dialog_confirm } from \"../../../utils/dialog\";\nimport { Program_exportProgram } from \"../../../models/program\";\nimport { Service } from \"../../../api/service\";\nimport {\n  PlannerProgram_hasNonSelectedWeightUnit,\n  PlannerProgram_switchToUnit,\n} from \"../../planner/models/plannerProgram\";\nimport { Weight_oppositeUnit } from \"../../../models/weight\";\nimport { Button } from \"../../../components/button\";\nimport { IconSpinner } from \"../../../components/icons/iconSpinner\";\nimport { UidFactory_generateUid } from \"../../../utils/generator\";\nimport { Tailwind_semantic } from \"../../../utils/tailwindConfig\";\nimport { track } from \"../../../utils/posthog\";\n\ndeclare let __HOST__: string;\n\ninterface IProps {\n  program: IProgram;\n  settings: ISettings;\n  isLoggedIn?: boolean;\n  client: Window[\"fetch\"];\n}\n\nexport function ProgramDetailsAddButton(props: IProps): JSX.Element {\n  const [isLoading, setIsLoading] = useState(false);\n  const { program, settings } = props;\n\n  return (\n    <Button\n      className=\"w-full\"\n      name=\"add-program-to-account\"\n      kind={props.isLoggedIn ? \"purple\" : \"grayv2\"}\n      disabled={isLoading}\n      onClick={async () => {\n        track({ name: \"add_program_to_account\" });\n        if (!props.isLoggedIn) {\n          Dialog_alert(\"You should be logged in\");\n          return;\n        }\n        const exportProgram = Program_exportProgram(\n          {\n            ...program,\n            id: UidFactory_generateUid(8),\n          },\n          settings\n        );\n        const pg = exportProgram.program;\n        if (pg.planner && PlannerProgram_hasNonSelectedWeightUnit(pg.planner, settings)) {\n          const fromUnit = Weight_oppositeUnit(settings.units);\n          const toUnit = settings.units;\n          if (\n            await Dialog_confirm(`The program has weights in ${fromUnit}, do you want to convert them to ${toUnit}?`)\n          ) {\n            pg.planner = PlannerProgram_switchToUnit(pg.planner, settings);\n          }\n        }\n        setIsLoading(true);\n        const service = new Service(props.client);\n        const result = await service.postSaveProgram(exportProgram, undefined, \"program-details\");\n        if (result.success) {\n          window.location.href = `${__HOST__}/user/p/${result.data}`;\n        } else {\n          Dialog_alert(\"Failed to save the program\");\n          setIsLoading(false);\n        }\n      }}\n    >\n      {isLoading ? <IconSpinner color={Tailwind_semantic().icon.white} width={16} height={16} /> : \"Add to account\"}\n    </Button>\n  );\n}\n","import type { JSX } from \"react\";\nimport { IProgram } from \"../../../types\";\nimport { PlannerProgram_generateFullText } from \"../../planner/models/plannerProgram\";\nimport { PlannerCodeBlock } from \"../../planner/components/plannerCodeBlock\";\n\ninterface IProps {\n  program: IProgram;\n}\n\nexport function ProgramDetailsLiftoscript(props: IProps): JSX.Element {\n  const { program } = props;\n  const weeks = program.planner?.weeks ?? [];\n  const fullText = PlannerProgram_generateFullText(weeks);\n\n  return (\n    <div className=\"p-4 overflow-auto border rounded-lg border-border-neutral bg-background-card\">\n      <PlannerCodeBlock script={fullText} />\n    </div>\n  );\n}\n","import type { JSX } from \"react\";\nimport { track } from \"../../../utils/posthog\";\nimport { Platform_isiOS, Platform_isAndroid, Platform_onelink } from \"../../../utils/platform\";\nimport { Onelink } from \"../../../components/onelink\";\nimport { ProgramQrCode } from \"../../../components/programQrCode\";\n\ninterface IProgramDetailsUpsellProps {\n  userAgent?: string;\n  maxWidth?: number;\n}\n\nexport function ProgramDetailsUpsell(props: IProgramDetailsUpsellProps): JSX.Element {\n  const isiOS = Platform_isiOS(props.userAgent);\n  const isAndroid = Platform_isAndroid(props.userAgent);\n  const isMobile = isiOS || isAndroid;\n  return (\n    <div\n      className=\"flex flex-col items-center px-8 py-4 mx-auto mb-4 border rounded-lg bg-background-cardyellow border-border-cardyellow sm:flex-row\"\n      style={{ maxWidth: props.maxWidth }}\n    >\n      <div className=\"flex-1\">\n        You can use this program on <strong>Liftosaur</strong> - a weightlifting tracker app!\n        <ul className=\"pl-4 mt-2 list-disc\">\n          <li>Log your workouts there, and have a history of all your workouts on your phone</li>\n          <li>\n            It will automatically update weights, reps and sets for you from workout to workout - according to the\n            program logic\n          </li>\n          <li>\n            And you can customize the programs in any way, change exercises, the exercise logic, sets/reps/weights, etc.\n          </li>\n        </ul>\n      </div>\n      <div className=\"flex items-center mt-2 ml-4\">\n        <div className=\"flex justify-center gap-2 md:justify-start\">\n          {!isMobile && (\n            <div>\n              <ProgramQrCode url={Platform_onelink(false)} size={90} />\n            </div>\n          )}\n          <div>\n            {(!isMobile || isiOS) && (\n              <div>\n                <Onelink\n                  className=\"inline-block overflow-hidden rounded-xl apple-store-link\"\n                  style={{ width: \"120px\", height: \"40px\" }}\n                  onClick={() => track({ redditname: \"Lead\", googlename: \"outbound_click\" })}\n                >\n                  <img\n                    src=\"https://tools.applemediaservices.com/api/badges/download-on-the-app-store/black/en-us?size=250x83&amp;releaseDate=1673481600\"\n                    alt=\"Download on the App Store\"\n                    loading=\"lazy\"\n                    style={{ width: \"120px\", height: \"40px\" }}\n                    className=\"rounded-xl\"\n                  />\n                </Onelink>\n              </div>\n            )}\n            {(!isMobile || isAndroid) && (\n              <div>\n                <Onelink\n                  target=\"_blank\"\n                  className=\"google-play-link\"\n                  onClick={() => track({ redditname: \"Lead\", googlename: \"outbound_click\" })}\n                >\n                  <img\n                    alt=\"Get it on Google Play\"\n                    src=\"/images/googleplay.png\"\n                    loading=\"lazy\"\n                    style={{\n                      width: \"120px\",\n                      height: \"35px\",\n                    }}\n                  />\n                </Onelink>\n              </div>\n            )}\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n}\n","import { JSX, memo, useCallback, useEffect, useRef, useState } from \"react\";\nimport { IProgram, ISettings, IUnit } from \"../../../types\";\nimport { MenuItemValue } from \"../../../components/menuItemEditable\";\nimport { ProgramPreviewPlayground } from \"../../../components/preview/programPreviewPlayground\";\nimport { Stats_getEmpty } from \"../../../models/stats\";\nimport { track } from \"../../../utils/posthog\";\nimport { ProgramDetailsLiftoscript } from \"./programDetailsLiftoscript\";\nimport { IconArrowRight } from \"../../../components/icons/iconArrowRight\";\n\ntype ITab = \"preview\" | \"playground\" | \"liftoscript\";\n\ninterface IPlaygroundProps {\n  program: IProgram;\n  settings: ISettings;\n  maxWidth?: number;\n}\n\nexport const ProgramDetailsWorkoutPlayground = memo((props: IPlaygroundProps): JSX.Element => {\n  const [units, setUnits] = useState<IUnit>(props.settings.units);\n  const [tab, setTab] = useState<ITab>(\"preview\");\n  const isMultiweek = (props.program.planner?.weeks || []).length > 1;\n  const [weeksAsTabs, setWeeksAsTabs] = useState(!isMultiweek);\n  const settings = { ...props.settings, units };\n  const maxWidth = props.maxWidth;\n  const containerRef = useRef<HTMLDivElement>(null);\n  const [canScrollLeft, setCanScrollLeft] = useState(false);\n  const [canScrollRight, setCanScrollRight] = useState(true);\n\n  const updateScrollState = useCallback(() => {\n    const el = containerRef.current?.querySelector(\".preview-all-weeks-scroll\");\n    if (!el) {\n      return;\n    }\n    setCanScrollLeft(el.scrollLeft > 1);\n    setCanScrollRight(el.scrollLeft < el.scrollWidth - el.clientWidth - 1);\n  }, []);\n\n  useEffect(() => {\n    const el = containerRef.current?.querySelector(\".preview-all-weeks-scroll\");\n    if (!el) {\n      return;\n    }\n    el.addEventListener(\"scroll\", updateScrollState, { passive: true });\n    const ro = new ResizeObserver(updateScrollState);\n    ro.observe(el);\n    updateScrollState();\n    return () => {\n      el.removeEventListener(\"scroll\", updateScrollState);\n      ro.disconnect();\n    };\n  }, [updateScrollState, weeksAsTabs]);\n\n  const scrollBy = useCallback((direction: 1 | -1) => {\n    const el = containerRef.current?.querySelector(\".preview-all-weeks-scroll\");\n    if (!el) {\n      return;\n    }\n    const firstCol = el.querySelector(\".preview-all-weeks-grid > div\") as HTMLElement | null;\n    if (!firstCol) {\n      return;\n    }\n    const gap = 16;\n    const colWidth = firstCol.offsetWidth + gap;\n    el.scrollBy({ left: direction * colWidth, behavior: \"smooth\" });\n  }, []);\n\n  return (\n    <div>\n      <div\n        className=\"flex flex-wrap items-center justify-center mx-auto border-b md:justify-start border-border-neutral\"\n        style={{ gap: \"0.5rem\", maxWidth }}\n      >\n        <div className=\"flex\" style={{ gap: \"2px\" }}>\n          {([\"preview\", \"liftoscript\", \"playground\"] as const).map((t) => (\n            <button\n              key={t}\n              className={`px-3 py-1 rounded-md transition-colors ${\n                tab === t\n                  ? \"bg-white text-text-purple border-b brder-border-purple\"\n                  : \"text-text-secondary hover:text-text-primary\"\n              }`}\n              onClick={() => setTab(t)}\n            >\n              {t === \"preview\" ? \"Preview\" : t === \"playground\" ? \"Playground\" : \"Liftoscript\"}\n            </button>\n          ))}\n        </div>\n        {tab !== \"liftoscript\" && (\n          <div className=\"hidden ml-auto md:block\">\n            <UnitSwitcher currentUnit={units} onUnitChange={(newUnit) => setUnits(newUnit)} />\n          </div>\n        )}\n      </div>\n      {tab !== \"liftoscript\" && (\n        <div className=\"block mx-auto mt-1 text-center md:hidden\">\n          <UnitSwitcher currentUnit={units} onUnitChange={(newUnit) => setUnits(newUnit)} />\n        </div>\n      )}\n      <div ref={containerRef} style={{ display: tab === \"preview\" ? \"block\" : \"none\" }}>\n        <div className=\"flex items-center mx-auto mt-2 mb-4 text-sm text-text-secondary\" style={{ maxWidth }}>\n          {isMultiweek && (\n            <label className=\"flex items-center gap-1\">\n              <input\n                type=\"checkbox\"\n                className=\"checkbox\"\n                id=\"weeksAsTabs\"\n                checked={weeksAsTabs}\n                onChange={() => setWeeksAsTabs((v) => !v)}\n              />\n              <span>Show weeks as tabs</span>\n            </label>\n          )}\n          {!weeksAsTabs && (\n            <div className=\"flex gap-2 ml-auto\">\n              <button\n                className=\"flex items-center justify-center w-8 h-8 transition-colors border rounded-full border-border-prominent hover:bg-gray-100 active:bg-gray-200\"\n                style={{ opacity: canScrollLeft ? 1 : 0.3, cursor: canScrollLeft ? \"pointer\" : \"default\" }}\n                onClick={() => scrollBy(-1)}\n                disabled={!canScrollLeft}\n              >\n                <div className=\"rotate-180\">\n                  <IconArrowRight />\n                </div>\n              </button>\n              <button\n                className=\"flex items-center justify-center w-8 h-8 transition-colors border rounded-full border-border-prominent hover:bg-gray-100 active:bg-gray-200\"\n                style={{ opacity: canScrollRight ? 1 : 0.3, cursor: canScrollRight ? \"pointer\" : \"default\" }}\n                onClick={() => scrollBy(1)}\n                disabled={!canScrollRight}\n              >\n                <IconArrowRight />\n              </button>\n            </div>\n          )}\n        </div>\n\n        <div style={{ maxWidth: weeksAsTabs ? maxWidth : undefined }} className=\"mx-auto\">\n          <ProgramPreviewPlayground\n            showAllWeeks={!weeksAsTabs}\n            key={`preview-${units}`}\n            program={props.program}\n            stats={Stats_getEmpty()}\n            settings={settings}\n            isPlayground={false}\n            onEngage={() => {\n              track({ name: \"details_preview\" });\n            }}\n          />\n        </div>\n      </div>\n      <div className=\"mx-auto mt-2\" style={{ display: tab === \"liftoscript\" ? \"block\" : \"none\", maxWidth }}>\n        <ProgramDetailsLiftoscript program={props.program} />\n      </div>\n      <div className=\"mx-auto\" style={{ display: tab === \"playground\" ? \"block\" : \"none\", maxWidth }}>\n        <p className=\"mx-auto mt-4 mb-4 text-sm text-text-secondary\" style={{ maxWidth }}>\n          Enter reps and weight for each set, then tap the checkmark to complete it. Finish the workout day and see how\n          the program adjusts weights, reps, and sets for next time.\n        </p>\n        <ProgramPreviewPlayground\n          scrollTabZIndex={20}\n          key={`playground-${units}`}\n          program={props.program}\n          stats={Stats_getEmpty()}\n          settings={settings}\n          isPlayground={true}\n          onEngage={() => {\n            track({ name: \"details_playground\" });\n          }}\n        />\n      </div>\n    </div>\n  );\n});\n\nfunction UnitSwitcher(props: { currentUnit: IUnit; onUnitChange: (newUnit: IUnit) => void }): JSX.Element {\n  return (\n    <label className=\"ml-auto\">\n      <span className=\"mr-2 text-sm font-semibold\">Units:</span>\n      <MenuItemValue\n        name=\"Unit\"\n        setPatternError={() => undefined}\n        type=\"desktop-select\"\n        value={props.currentUnit}\n        values={[\n          [\"lb\", \"lb\"],\n          [\"kg\", \"kg\"],\n        ]}\n        onChange={(newValue) => {\n          if (newValue) {\n            props.onUnitChange(newValue as IUnit);\n          }\n        }}\n      />\n    </label>\n  );\n}\n","import { JSX, useState } from \"react\";\nimport { Settings_build } from \"../../models/settings\";\nimport { IProgram, IUnit } from \"../../types\";\nimport { ProgramDetailsWorkoutPlayground } from \"./programDetails/programDetailsWorkoutPlayground\";\nimport { ProgramDetailsUpsell } from \"./programDetails/programDetailsUpsell\";\nimport { ProgramDetailsAddButton } from \"./programDetails/programDetailsAddButton\";\nimport {\n  IProgramIndexEntry,\n  Program_fullProgram,\n  Program_evaluate,\n  Program_exerciseRangeFormat,\n} from \"../../models/program\";\nimport { ObjectUtils_clone } from \"../../utils/object\";\nimport { Markdown } from \"../../components/markdown\";\nimport { IPlannerEvalResult } from \"../planner/plannerExerciseEvaluator\";\nimport { IconArrowDown2 } from \"../../components/icons/iconArrowDown2\";\nimport { IconArrowRight } from \"../../components/icons/iconArrowRight\";\nimport { PlannerWeekStats } from \"../planner/components/plannerWeekStats\";\nimport { IconWatch } from \"../../components/icons/iconWatch\";\nimport { IconCalendarSmall } from \"../../components/icons/iconCalendarSmall\";\nimport { IconKettlebellSmall } from \"../../components/icons/iconKettlebellSmall\";\nimport { Equipment_currentEquipment } from \"../../models/equipment\";\nimport { equipmentName } from \"../../models/exercise\";\nimport { StringUtils_pluralize } from \"../../utils/string\";\nimport { Tailwind_colors } from \"../../utils/tailwindConfig\";\n\nexport interface IProgramDetailsContentProps {\n  program: IProgram;\n  fullDescription?: string;\n  faq?: string;\n  client: Window[\"fetch\"];\n  userAgent?: string;\n  isLoggedIn?: boolean;\n  units?: IUnit;\n  indexEntry?: IProgramIndexEntry;\n}\n\nexport function ProgramDetailsContent(props: IProgramDetailsContentProps): JSX.Element {\n  const { program, indexEntry } = props;\n  const settings = props.units ? { ...Settings_build(), units: props.units } : Settings_build();\n  const fullProgram = Program_fullProgram(ObjectUtils_clone(program), settings);\n  const evaluatedProgram = Program_evaluate(ObjectUtils_clone(program), settings);\n  const descriptionText = props.fullDescription || program.description;\n\n  const firstWeek = evaluatedProgram.weeks[0];\n  const maxWidth = 1200;\n\n  const evaluatedDays: IPlannerEvalResult[] =\n    firstWeek?.days.map((d) => ({ success: true as const, data: d.exercises })) ?? [];\n\n  const allEquipment = Equipment_currentEquipment(settings);\n  const equipment = (indexEntry?.equipment ?? []).map((e) => equipmentName(e, allEquipment));\n  const exercisesRange = indexEntry?.exercisesRange;\n  const weeksCount = indexEntry?.weeksCount ?? 0;\n\n  const [isSummaryOpen, setIsSummaryOpen] = useState(true);\n  const [isWeekStatsOpen, setIsWeekStatsOpen] = useState(true);\n\n  return (\n    <section className=\"px-4\">\n      <div className=\"flex flex-col mx-auto lg:flex-row\" style={{ gap: \"2rem\", maxWidth }}>\n        <div className=\"flex-1 min-w-0\">\n          <nav className=\"pt-2 pb-2 text-xs text-text-secondary\" aria-label=\"Breadcrumb\">\n            <a href=\"/\" className=\"underline hover:text-text-primary\">\n              Home\n            </a>\n            <span className=\"mx-1\">/</span>\n            <a href=\"/programs\" className=\"underline hover:text-text-primary\">\n              Programs\n            </a>\n            <span className=\"mx-1\">/</span>\n            <span className=\"text-text-primary\">{program.name}</span>\n          </nav>\n          <h1 className=\"text-2xl font-bold leading-scaled-8\">{program.name} Workout Program</h1>\n          {program.author && (\n            <div className=\"mt-2 mb-4 text-sm font-bold\">\n              {program.url ? (\n                <a href={program.url} target=\"_blank\" className=\"underline text-text-link\">\n                  by {program.author}\n                </a>\n              ) : (\n                <span>by {program.author}</span>\n              )}\n            </div>\n          )}\n          <Markdown\n            className=\"program-details-description\"\n            value={descriptionText}\n            directivesData={{\n              exercise: { settings },\n              exerciseExample: { settings, evaluatedProgram },\n            }}\n          />\n          {props.faq && (\n            <Markdown\n              className=\"program-details-description mt-8\"\n              value={`## Frequently Asked Questions\\n\\n${props.faq}`}\n            />\n          )}\n        </div>\n        <div className=\"flex-shrink-0 w-72\">\n          <div className=\"lg:sticky lg:top-4\">\n            <button\n              className=\"flex items-center w-full gap-1 mb-2 text-xl font-bold text-left cursor-pointer\"\n              onClick={() => setIsSummaryOpen(!isSummaryOpen)}\n            >\n              <div className=\"flex items-center justify-center w-4\">\n                {isSummaryOpen ? (\n                  <IconArrowDown2 className=\"inline-block\" />\n                ) : (\n                  <IconArrowRight className=\"inline-block\" />\n                )}\n              </div>\n              <div>Summary</div>\n            </button>\n            {isSummaryOpen && (\n              <>\n                <div>\n                  {indexEntry?.duration && (\n                    <div className=\"flex items-center gap-1 mb-2 text-sm text-text-secondary\">\n                      <IconWatch width={14} height={18} />\n                      <span>~{indexEntry.duration} min per workout</span>\n                    </div>\n                  )}\n                  <div className=\"flex mb-2 text-sm text-text-secondary\">\n                    <IconCalendarSmall color={Tailwind_colors().lightgray[600]} className=\"block mt-0.5 mr-1\" />\n                    <div>\n                      {weeksCount > 1 && `${weeksCount} ${StringUtils_pluralize(\"week\", weeksCount)}, `}\n                      {indexEntry?.frequency ? `${indexEntry.frequency}x/week` : \"\"}\n                      {indexEntry?.frequency && exercisesRange ? \", \" : \"\"}\n                      {exercisesRange ? Program_exerciseRangeFormat(exercisesRange[0], exercisesRange[1]) : \"\"}\n                    </div>\n                  </div>\n                  {equipment.length > 0 && (\n                    <div className=\"flex mb-2 text-sm text-text-secondary\">\n                      <IconKettlebellSmall color={Tailwind_colors().lightgray[600]} className=\"block mt-0.5 mr-1\" />\n                      <div>{equipment.join(\", \")}</div>\n                    </div>\n                  )}\n                </div>\n                <div className=\"mb-4\">\n                  <ProgramDetailsAddButton\n                    program={program}\n                    settings={settings}\n                    isLoggedIn={props.isLoggedIn}\n                    client={props.client}\n                  />\n                </div>\n              </>\n            )}\n            <button\n              className=\"flex items-center w-full gap-1 mb-2 text-xl font-bold text-left cursor-pointer\"\n              onClick={() => setIsWeekStatsOpen(!isWeekStatsOpen)}\n            >\n              <div className=\"flex items-center justify-center w-4\">\n                {isWeekStatsOpen ? (\n                  <IconArrowDown2 className=\"inline-block\" />\n                ) : (\n                  <IconArrowRight className=\"inline-block\" />\n                )}\n              </div>\n              <div>Week Stats</div>\n            </button>\n            {isWeekStatsOpen && (\n              <PlannerWeekStats\n                hideTitle={true}\n                dispatch={() => {}}\n                evaluatedDays={evaluatedDays}\n                settings={settings}\n              />\n            )}\n          </div>\n        </div>\n      </div>\n      <div className=\"w-32 h-px mx-auto my-8 b bg-border-neutral\" />\n      <ProgramDetailsWorkoutPlayground program={fullProgram} settings={settings} maxWidth={maxWidth} />\n      <div className=\"mt-8\">\n        <ProgramDetailsUpsell userAgent={props.userAgent} maxWidth={maxWidth} />\n      </div>\n    </section>\n  );\n}\n","/* eslint-disable @typescript-eslint/unified-signatures */\nimport { LiftoscriptEvaluator, NodeName, LiftoscriptSyntaxError } from \"./liftoscriptEvaluator\";\nimport { parser as LiftoscriptParser } from \"./liftoscript\";\nimport {\n  IScriptBindings,\n  IScriptFnContext,\n  Progress_createEmptyScriptBindings,\n  Progress_createScriptFunctions,\n} from \"./models/progress\";\nimport { IScriptFunctions } from \"./liftoscriptFns\";\nimport { Weight_build } from \"./models/weight\";\nimport { IUnit, IWeight, IProgramState, IPercentage, IDayData, IExerciseType, ISettings } from \"./types\";\nimport type { Tree } from \"@lezer/common\";\nimport RB from \"rollbar\";\nimport { IProgramMode } from \"./models/program\";\nimport { ILiftoscriptEvaluatorUpdate } from \"./liftoscriptEvaluator\";\nimport { Dialog_alert } from \"./utils/dialog\";\nimport memoize from \"micro-memoize\";\n\ndeclare let Rollbar: RB;\n\nconst lastAlertDisplayedTs: Partial<Record<string, number>> = {};\n\n// Parsing a Liftoscript expression with Lezer is expensive, and the same progress/update\n// scripts are scanned repeatedly (e.g. the same exercise instance in every week/day, and on\n// every tour/render pass). Cache by (script, name) since the result is pure.\nconst hasKeywordMemoized = memoize(\n  (script: string, name: string): boolean => {\n    const expr = LiftoscriptParser.parse(script);\n    const cursor = expr.cursor();\n    do {\n      if (cursor.node.type.name === NodeName.Keyword) {\n        if (LiftoscriptEvaluator.getValue(script, cursor.node) === name) {\n          return true;\n        }\n      }\n    } while (cursor.next());\n    return false;\n  },\n  { maxSize: 200 }\n);\n\nexport class ScriptRunner {\n  private readonly script: string;\n  private readonly state: IProgramState;\n  private readonly otherStates: Record<number, IProgramState>;\n  private readonly bindings: IScriptBindings;\n  private readonly fns: IScriptFunctions;\n  private readonly units: IUnit;\n  private readonly context: IScriptFnContext;\n  private readonly mode: IProgramMode;\n  private updates: ILiftoscriptEvaluatorUpdate[] = [];\n\n  constructor(\n    script: string,\n    state: IProgramState,\n    otherStates: Record<number, IProgramState>,\n    bindings: IScriptBindings,\n    fns: IScriptFunctions,\n    units: IUnit,\n    context: IScriptFnContext,\n    mode: IProgramMode\n  ) {\n    this.script = script;\n    this.state = state;\n    this.otherStates = otherStates;\n    this.bindings = bindings;\n    this.fns = fns;\n    this.units = units;\n    this.context = context;\n    this.mode = mode;\n  }\n\n  public static isValid(\n    script: string,\n    state: IProgramState,\n    dayData: IDayData,\n    settings: ISettings,\n    exerciseType?: IExerciseType\n  ): LiftoscriptSyntaxError | undefined {\n    const liftoscriptEvaluator = new ScriptRunner(\n      script,\n      state,\n      {},\n      Progress_createEmptyScriptBindings(dayData, settings),\n      Progress_createScriptFunctions(settings),\n      settings.units,\n      { exerciseType: exerciseType, unit: settings.units, prints: [] },\n      \"planner\"\n    );\n    try {\n      liftoscriptEvaluator.parse();\n    } catch (e) {\n      if (e instanceof LiftoscriptSyntaxError) {\n        return e;\n      } else {\n        throw e;\n      }\n    }\n    return undefined;\n  }\n\n  public parse(): [LiftoscriptEvaluator, Tree] {\n    const liftoscriptTree = LiftoscriptParser.parse(this.script);\n    const liftoscriptEvaluator = new LiftoscriptEvaluator(\n      this.script,\n      this.state,\n      this.otherStates,\n      this.bindings,\n      this.fns,\n      this.context,\n      this.units,\n      this.mode\n    );\n    liftoscriptEvaluator.parse(liftoscriptTree.topNode);\n    return [liftoscriptEvaluator, liftoscriptTree];\n  }\n\n  public switchWeightsToUnit(toUnit: IUnit): string {\n    const liftoscriptTree = LiftoscriptParser.parse(this.script);\n    const liftoscriptEvaluator = new LiftoscriptEvaluator(\n      this.script,\n      this.state,\n      this.otherStates,\n      this.bindings,\n      this.fns,\n      this.context,\n      this.units,\n      this.mode\n    );\n    return liftoscriptEvaluator.switchWeightsToUnit(liftoscriptTree.topNode, toUnit);\n  }\n\n  public getStateVariableKeys(): Set<string> {\n    const liftoscriptTree = LiftoscriptParser.parse(this.script);\n    const liftoscriptEvaluator = new LiftoscriptEvaluator(\n      this.script,\n      this.state,\n      this.otherStates,\n      this.bindings,\n      this.fns,\n      this.context,\n      this.units,\n      this.mode\n    );\n    return liftoscriptEvaluator.getStateVariableKeys(liftoscriptTree.topNode);\n  }\n\n  public static hasStateVariable(script: string, name: string): boolean {\n    const expr = LiftoscriptParser.parse(script);\n    const cursor = expr.cursor();\n    do {\n      if (cursor.node.type.name === NodeName.StateVariable) {\n        const keywordNode = cursor.node.getChild(NodeName.Keyword);\n        if (keywordNode != null) {\n          const value = LiftoscriptEvaluator.getValue(script, keywordNode);\n          if (value === name) {\n            return true;\n          }\n        }\n      }\n    } while (cursor.next());\n    return false;\n  }\n\n  public static hasKeyword(script: string, name: string): boolean {\n    return hasKeywordMemoized(script, name);\n  }\n\n  public static safe<T>(cb: () => T, errorMsg: (e: Error) => string, defaultValue: T, disabled?: boolean): T {\n    let value: T;\n    try {\n      value = cb();\n    } catch (e) {\n      if (!disabled && e instanceof LiftoscriptSyntaxError) {\n        const lastAlertTs = lastAlertDisplayedTs[e.message];\n        console.error(e);\n        if (lastAlertTs == null || lastAlertTs < Date.now() - 1000 * 60 * 1) {\n          Dialog_alert(errorMsg(e));\n          this.reportError(\"Error during Liftoscript execution\", e);\n          lastAlertDisplayedTs[e.message] = Date.now();\n        }\n        value = defaultValue;\n      } else {\n        throw e;\n      }\n    }\n    return value;\n  }\n\n  public execute(type: \"reps\"): number;\n  public execute(type: \"rpe\"): number;\n  public execute(type: \"weight\"): IWeight | IPercentage;\n  public execute(type: \"timer\"): number;\n  public execute(type?: undefined): number | IWeight | boolean;\n  public execute(type?: \"reps\" | \"weight\" | \"timer\" | \"rpe\"): number | IWeight | IPercentage | boolean {\n    const [liftoscriptEvaluator, liftoscriptTree] = this.parse();\n    const rawResult = liftoscriptEvaluator.evaluate(liftoscriptTree.topNode);\n    let result = Array.isArray(rawResult) ? rawResult[0] : rawResult;\n    if (result == null) {\n      result = 0;\n    }\n    const output = this.convertResult(type, result);\n    this.updates = liftoscriptEvaluator.updates;\n\n    return output;\n  }\n\n  public getUpdates(): ILiftoscriptEvaluatorUpdate[] {\n    return this.updates;\n  }\n\n  private convertResult(\n    type: \"reps\" | \"weight\" | \"timer\" | \"rpe\" | undefined,\n    result: number | IWeight | IPercentage | boolean\n  ): number | IWeight | IPercentage | boolean {\n    if (type === \"reps\" || type === \"timer\") {\n      if (typeof result !== \"number\") {\n        throw new LiftoscriptSyntaxError(\"Expected to get number as a result\", 0, 0, 0, 0);\n      } else if (result < 0) {\n        return 0;\n      } else {\n        return result;\n      }\n    } else if (type === \"rpe\") {\n      if (typeof result !== \"number\") {\n        throw new LiftoscriptSyntaxError(\"Expected to get number as a result\", 0, 0, 0, 0);\n      } else {\n        return Math.round(Math.min(10, Math.max(0, result)) / 0.5) * 0.5;\n      }\n    } else if (type === \"weight\") {\n      if (typeof result === \"boolean\") {\n        throw new LiftoscriptSyntaxError(\"Expected to get number, percentage or weight as a result\", 0, 0, 0, 0);\n      } else if (typeof result === \"number\") {\n        return Weight_build(result, this.units);\n      } else {\n        if (result.value < 0) {\n          return Weight_build(0, this.units);\n        } else {\n          return result;\n        }\n      }\n    } else {\n      return result;\n    }\n  }\n\n  private static reportError(msg: string, error?: Error): void {\n    if (typeof Rollbar === \"undefined\") {\n      return;\n    }\n    const payload = {\n      error: error ? { message: error.message, name: error.name, stack: error.stack } : undefined,\n    };\n    Rollbar.error(msg, payload);\n  }\n}\n","import { IProgram } from \"../types\";\n\nexport const basicBeginnerProgram: IProgram = {\n  vtype: \"program\",\n  weeks: [],\n  author: \"/r/fitness\",\n  clonedAt: 1708563096401,\n  description:\n    \"<div><p>This is a great starting routine for complete beginners.</p><p>It's simple, easy to follow routine, which will introduce you to weight lifting.</p><p>You should run it for ~3 months, and then switch to some other routine, like '5/3/1 for beginners'.</p></div>\",\n  shortDescription: \"Great first starter program\",\n  url: \"https://thefitness.wiki/routines/r-fitness-basic-beginner-routine/\",\n  tags: [],\n  exercises: [],\n  name: \"Basic Beginner Routine\",\n  days: [],\n  id: \"basicBeginner\",\n  planner: {\n    vtype: \"planner\",\n    name: \"Basic Beginner Routine\",\n    weeks: [\n      {\n        name: \"Week 1\",\n        days: [\n          {\n            name: \"Workout A\",\n            exerciseText:\n              \"Bent Over Row / 2x5, 1x5+ / 95lb / progress: lp(2.5lb, 1, 0, 10%, 1, 0)\\nBench Press / 2x5, 1x5+ / 45lb / progress: lp(2.5lb, 1, 0, 10%, 1, 0)\\nSquat / 2x5, 1x5+ / 45lb / progress: lp(5lb, 1, 0, 10%, 1, 0)\",\n          },\n          {\n            name: \"Workout B\",\n            exerciseText:\n              \"Chin Up / 2x5, 1x5+ / 0lb / progress: lp(2.5lb, 1, 0, 10%, 1, 0)\\nOverhead Press / 2x5, 1x5+ / 45lb / progress: lp(2.5lb, 1, 0, 10%, 1, 0)\\nDeadlift / 2x5, 1x5+ / 95lb / progress: lp(5lb, 1, 0, 10%, 1, 0)\",\n          },\n          {\n            name: \"Workout A\",\n            exerciseText: \"Bent Over Row / 2x5, 1x5+ / 95lb\\nBench Press / 2x5, 1x5+ / 45lb\\nSquat / 2x5, 1x5+ / 45lb\",\n          },\n        ],\n      },\n      {\n        name: \"Week 2\",\n        days: [\n          {\n            name: \"Workout A\",\n            exerciseText: \"Chin Up / 2x5, 1x5+ / 0lb\\nOverhead Press / 2x5, 1x5+ / 45lb\\nDeadlift / 2x5, 1x5+ / 95lb\",\n          },\n          {\n            name: \"Workout B\",\n            exerciseText: \"Bent Over Row / 2x5, 1x5+ / 95lb\\nBench Press / 2x5, 1x5+ / 45lb\\nSquat / 2x5, 1x5+ / 45lb\",\n          },\n          {\n            name: \"Workout B\",\n            exerciseText: \"Chin Up / 2x5, 1x5+ / 0lb\\nOverhead Press / 2x5, 1x5+ / 45lb\\nDeadlift / 2x5, 1x5+ / 95lb\",\n          },\n        ],\n      },\n    ],\n  },\n  nextDay: 1,\n  isMultiweek: true,\n};\n","/* eslint-disable no-void */\nimport * as v from \"valibot\";\nimport { IVersions, IVersionTypes } from \"./models/versionTracker/types\";\nimport { IEquals } from \"./utils/types\";\n\nexport const equipments = [\n  \"barbell\",\n  \"cable\",\n  \"dumbbell\",\n  \"smith\",\n  \"band\",\n  \"kettlebell\",\n  \"bodyweight\",\n  \"leverageMachine\",\n  \"medicineball\",\n  \"ezbar\",\n  \"trapbar\",\n] as const;\n\nexport const exerciseTypes = [\n  \"abWheel\",\n  \"arnoldPress\",\n  \"aroundTheWorld\",\n  \"backExtension\",\n  \"ballSlams\",\n  \"battleRopes\",\n  \"benchDip\",\n  \"benchPress\",\n  \"benchPressCloseGrip\",\n  \"benchPressWideGrip\",\n  \"bentOverOneArmRow\",\n  \"bentOverRow\",\n  \"bicepCurl\",\n  \"bicycleCrunch\",\n  \"boxJump\",\n  \"boxSquat\",\n  \"bulgarianSplitSquat\",\n  \"burpee\",\n  \"cableCrossover\",\n  \"cableCrunch\",\n  \"cableKickback\",\n  \"cablePullThrough\",\n  \"cableTwist\",\n  \"calfPressOnLegPress\",\n  \"calfPressOnSeatedLegPress\",\n  \"chestDip\",\n  \"chestFly\",\n  \"chestPress\",\n  \"chinUp\",\n  \"clean\",\n  \"cleanandJerk\",\n  \"concentrationCurl\",\n  \"crossBodyCrunch\",\n  \"crunch\",\n  \"cycling\",\n  \"deadlift\",\n  \"deadliftHighPull\",\n  \"declineBenchPress\",\n  \"declineCrunch\",\n  \"deficitDeadlift\",\n  \"ellipticalMachine\",\n  \"facePull\",\n  \"flatKneeRaise\",\n  \"flatLegRaise\",\n  \"frontRaise\",\n  \"frontSquat\",\n  \"gluteBridge\",\n  \"gluteBridgeMarch\",\n  \"gluteKickback\",\n  \"gobletSquat\",\n  \"goodMorning\",\n  \"hackSquat\",\n  \"hammerCurl\",\n  \"handstandPushUp\",\n  \"hangClean\",\n  \"hangSnatch\",\n  \"hangingLegRaise\",\n  \"highKneeSkips\",\n  \"highRow\",\n  \"hipAbductor\",\n  \"hipAdductor\",\n  \"hipThrust\",\n  \"inclineBenchPress\",\n  \"inclineChestFly\",\n  \"inclineChestPress\",\n  \"inclineCurl\",\n  \"inclineRow\",\n  \"invertedRow\",\n  \"isoLateralChestPress\",\n  \"isoLateralRow\",\n  \"jackknifeSitUp\",\n  \"jumpRope\",\n  \"jumpSquat\",\n  \"jumpingJack\",\n  \"kettlebellSwing\",\n  \"kettlebellTurkishGetUp\",\n  \"kippingPullUp\",\n  \"kneeRaise\",\n  \"kneelingPulldown\",\n  \"kneestoElbows\",\n  \"latPulldown\",\n  \"lateralBoxJump\",\n  \"lateralRaise\",\n  \"legExtension\",\n  \"legPress\",\n  \"lunge\",\n  \"lyingLegCurl\",\n  \"mountainClimber\",\n  \"muscleUp\",\n  \"obliqueCrunch\",\n  \"overheadPress\",\n  \"overheadSquat\",\n  \"pecDeck\",\n  \"pendlayRow\",\n  \"pistolSquat\",\n  \"plank\",\n  \"powerClean\",\n  \"powerSnatch\",\n  \"preacherCurl\",\n  \"pressUnder\",\n  \"pullUp\",\n  \"pullover\",\n  \"pushPress\",\n  \"pushUp\",\n  \"reverseCrunch\",\n  \"reverseCurl\",\n  \"reverseFly\",\n  \"reverseGripConcentrationCurl\",\n  \"reverseHyperextension\",\n  \"reverseWristCurl\",\n  \"reverseLunge\",\n  \"reversePlank\",\n  \"romanianDeadlift\",\n  \"rowing\",\n  \"russianTwist\",\n  \"seatedCalfRaise\",\n  \"seatedLegCurl\",\n  \"seatedLegPress\",\n  \"seatedOverheadPress\",\n  \"seatedPalmsUpWristCurl\",\n  \"seatedRow\",\n  \"seatedWideGripRow\",\n  \"shoulderPress\",\n  \"shrug\",\n  \"sideBend\",\n  \"sideCrunch\",\n  \"sideHipAbductor\",\n  \"sideLyingClam\",\n  \"sidePlank\",\n  \"singleLegBridge\",\n  \"singleLegDeadlift\",\n  \"singleLegGluteBridgeBench\",\n  \"singleLegGluteBridgeStraight\",\n  \"singleLegGluteBridgeBentKnee\",\n  \"singleLegHipThrust\",\n  \"sitUp\",\n  \"skullcrusher\",\n  \"snatch\",\n  \"snatchPull\",\n  \"splitSquat\",\n  \"splitJerk\",\n  \"squat\",\n  \"squatRow\",\n  \"standingCalfRaise\",\n  \"stepUp\",\n  \"stiffLegDeadlift\",\n  \"straightLegDeadlift\",\n  \"sumoDeadlift\",\n  \"sumoDeadliftHighPull\",\n  \"superman\",\n  \"tBarRow\",\n  \"thruster\",\n  \"toesToBar\",\n  \"torsoRotation\",\n  \"trapBarDeadlift\",\n  \"tricepsDip\",\n  \"tricepsExtension\",\n  \"tricepsPushdown\",\n  \"uprightRow\",\n  \"vUp\",\n  \"widePullUp\",\n  \"wristCurl\",\n  \"wristRoller\",\n  \"zercherSquat\",\n] as const;\nexport const availableMuscles = [\n  \"Adductor Brevis\",\n  \"Adductor Longus\",\n  \"Adductor Magnus\",\n  \"Biceps Brachii\",\n  \"Brachialis\",\n  \"Brachioradialis\",\n  \"Deltoid Anterior\",\n  \"Deltoid Lateral\",\n  \"Deltoid Posterior\",\n  \"Erector Spinae\",\n  \"Gastrocnemius\",\n  \"Gluteus Maximus\",\n  \"Gluteus Medius\",\n  \"Hamstrings\",\n  \"Iliopsoas\",\n  \"Infraspinatus\",\n  \"Latissimus Dorsi\",\n  \"Levator Scapulae\",\n  \"Obliques\",\n  \"Pectineous\",\n  \"Pectoralis Major Clavicular Head\",\n  \"Pectoralis Major Sternal Head\",\n  \"Quadriceps\",\n  \"Rectus Abdominis\",\n  \"Sartorius\",\n  \"Serratus Anterior\",\n  \"Soleus\",\n  \"Splenius\",\n  \"Sternocleidomastoid\",\n  \"Tensor Fasciae Latae\",\n  \"Teres Major\",\n  \"Teres Minor\",\n  \"Tibialis Anterior\",\n  \"Trapezius Lower Fibers\",\n  \"Trapezius Middle Fibers\",\n  \"Trapezius Upper Fibers\",\n  \"Triceps Brachii\",\n  \"Wrist Extensors\",\n  \"Wrist Flexors\",\n] as const;\n\nexport const availableBodyParts: string[] = [\n  \"Back\",\n  \"Calves\",\n  \"Chest\",\n  \"Forearms\",\n  \"Hips\",\n  \"Shoulders\",\n  \"Thighs\",\n  \"Upper Arms\",\n  \"Waist\",\n];\n\nexport const exerciseKinds = [\"core\", \"pull\", \"push\", \"legs\", \"upper\", \"lower\"] as const;\nexport const graphExerciseSelectedTypes = [\"weight\", \"volume\"] as const;\nexport const graphMuscleGroupSelectedTypes = [\"volume\", \"sets\"] as const;\nexport const units = [\"kg\", \"lb\"] as const;\nexport const percentageUnits = [\"%\"] as const;\nexport const lengthUnits = [\"in\", \"cm\"] as const;\nexport const historyRecordChange = [\"order\"] as const;\nexport const targetTypes = [\"target\", \"lasttime\", \"platescalculator\", \"e1rm\"] as const;\nexport const exercisePickerSorts = [\"name_asc\", \"similar_muscles\"] as const;\n\nexport const screenMuscles: string[] = [\n  \"shoulders\",\n  \"triceps\",\n  \"back\",\n  \"abs\",\n  \"glutes\",\n  \"hamstrings\",\n  \"quadriceps\",\n  \"chest\",\n  \"biceps\",\n  \"calves\",\n  \"forearms\",\n];\n\nexport const statsWeightDef = [\"weight\"] as const;\nexport const statsLengthDef = [\n  \"neck\",\n  \"shoulders\",\n  \"bicepLeft\",\n  \"bicepRight\",\n  \"forearmLeft\",\n  \"forearmRight\",\n  \"chest\",\n  \"waist\",\n  \"hips\",\n  \"thighLeft\",\n  \"thighRight\",\n  \"calfLeft\",\n  \"calfRight\",\n] as const;\nexport const statsPercentageDef = [\"bodyfat\"] as const;\nexport const statsHealthDef = [\"sleep\", \"calories\", \"protein\"] as const;\n\nexport const VUnit = v.picklist(units);\nexport type IUnit = v.InferOutput<typeof VUnit>;\n\nexport const VPercentageUnit = v.picklist(percentageUnits);\nexport type IPercentageUnit = v.InferOutput<typeof VPercentageUnit>;\n\nexport const VLengthUnit = v.picklist(lengthUnits);\nexport type ILengthUnit = v.InferOutput<typeof VLengthUnit>;\n\nexport const VExerciseKind = v.picklist(exerciseKinds);\nexport type IExerciseKind = v.InferOutput<typeof VExerciseKind>;\n\nexport const VMuscle = v.picklist(availableMuscles);\nexport type IMuscle = v.InferOutput<typeof VMuscle>;\n\nexport const VBodyPart = v.picklist(availableBodyParts as readonly string[]);\nexport type IBodyPart = v.InferOutput<typeof VBodyPart>;\n\nexport const VBarKey = v.picklist([\"barbell\", \"ezbar\", \"dumbbell\"] as const);\nexport type IBarKey = v.InferOutput<typeof VBarKey>;\n\nexport const VBuiltinEquipment = v.picklist(equipments);\nexport type IBuiltinEquipment = v.InferOutput<typeof VBuiltinEquipment>;\n\nexport const VExercisePickerSort = v.picklist(exercisePickerSorts);\nexport type IExercisePickerSort = v.InferOutput<typeof VExercisePickerSort>;\n\nexport const VExercisePickerScreen = v.picklist([\"exercisePicker\", \"customExercise\", \"filter\", \"settings\"] as const);\nexport type IExercisePickerScreen = v.InferOutput<typeof VExercisePickerScreen>;\n\nexport const VHistoryRecordChange = v.picklist(historyRecordChange);\nexport type IHistoryRecordChange = v.InferOutput<typeof VHistoryRecordChange>;\n\nexport const VTargetType = v.picklist(targetTypes);\nexport type ITargetType = v.InferOutput<typeof VTargetType>;\n\nexport const VProgressMode = v.picklist([\"warmup\", \"workout\"] as const);\nexport type IProgressMode = v.InferOutput<typeof VProgressMode>;\n\nexport const VProgramTag = v.picklist([\n  \"first-starter\",\n  \"beginner\",\n  \"barbell\",\n  \"dumbbell\",\n  \"intermediate\",\n  \"woman\",\n  \"ppl\",\n  \"hypertrophy\",\n] as const);\nexport type IProgramTag = v.InferOutput<typeof VProgramTag>;\n\nexport const VGraphExerciseSelectedType = v.picklist(graphExerciseSelectedTypes);\nexport type IGraphExerciseSelectedType = v.InferOutput<typeof VGraphExerciseSelectedType>;\n\nexport const VGraphMuscleGroupSelectedType = v.picklist(graphMuscleGroupSelectedTypes);\nexport type IGraphMuscleGroupSelectedType = v.InferOutput<typeof VGraphMuscleGroupSelectedType>;\n\nexport const VScreenMuscle = v.union([v.picklist(screenMuscles as readonly string[]), v.string()]);\nexport type IScreenMuscle = v.InferOutput<typeof VScreenMuscle>;\n\nexport const VEquipment = v.string();\nexport type IEquipment = v.InferOutput<typeof VEquipment>;\n\nexport const VExerciseId = v.string();\nexport type IExerciseId = v.InferOutput<typeof VExerciseId>;\n\nexport interface IWeight {\n  value: number;\n  unit: IUnit;\n}\nconst _VWeight = v.object({\n  value: v.number(),\n  unit: VUnit,\n});\nconst _VWeightMatches: IEquals<v.InferOutput<typeof _VWeight>, IWeight> = true;\nvoid _VWeightMatches;\nexport const VWeight: v.GenericSchema<IWeight> = _VWeight;\n\nexport interface IPercentage {\n  value: number;\n  unit: IPercentageUnit;\n}\nconst _VPercentage = v.object({\n  value: v.number(),\n  unit: VPercentageUnit,\n});\nconst _VPercentageMatches: IEquals<v.InferOutput<typeof _VPercentage>, IPercentage> = true;\nvoid _VPercentageMatches;\nexport const VPercentage: v.GenericSchema<IPercentage> = _VPercentage;\n\nexport interface ILength {\n  value: number;\n  unit: ILengthUnit;\n}\nconst _VLength = v.object({\n  value: v.number(),\n  unit: VLengthUnit,\n});\nconst _VLengthMatches: IEquals<v.InferOutput<typeof _VLength>, ILength> = true;\nvoid _VLengthMatches;\nexport const VLength: v.GenericSchema<ILength> = _VLength;\n\nexport interface IPlate {\n  weight: IWeight;\n  num: number;\n}\nconst _VPlate = v.object({\n  weight: VWeight,\n  num: v.number(),\n});\nconst _VPlateMatches: IEquals<v.InferOutput<typeof _VPlate>, IPlate> = true;\nvoid _VPlateMatches;\nexport const VPlate: v.GenericSchema<IPlate> = _VPlate;\n\nexport const VBars = v.record(v.string(), VWeight);\nexport type IBars = v.InferOutput<typeof VBars>;\n\nexport interface IMetaExercises {\n  bodyParts: IBodyPart[];\n  targetMuscles: IMuscle[];\n  synergistMuscles: IMuscle[];\n  sortedEquipment?: IEquipment[];\n}\nconst _VMetaExercises = v.object({\n  bodyParts: v.array(VBodyPart),\n  targetMuscles: v.array(VMuscle),\n  synergistMuscles: v.array(VMuscle),\n  sortedEquipment: v.optional(v.array(VEquipment)),\n});\nconst _VMetaExercisesMatches: IEquals<v.InferOutput<typeof _VMetaExercises>, IMetaExercises> = true;\nvoid _VMetaExercisesMatches;\nexport const VMetaExercises: v.GenericSchema<IMetaExercises> = _VMetaExercises;\n\nexport interface IExerciseType {\n  id: IExerciseId;\n  equipment?: IEquipment;\n}\nconst _VExerciseType = v.object({\n  id: VExerciseId,\n  equipment: v.optional(VEquipment),\n});\nconst _VExerciseTypeMatches: IEquals<v.InferOutput<typeof _VExerciseType>, IExerciseType> = true;\nvoid _VExerciseTypeMatches;\nexport const VExerciseType: v.GenericSchema<IExerciseType> = _VExerciseType;\n\nexport interface ICustomExercise {\n  vtype: \"custom_exercise\";\n  id: IExerciseId;\n  name: string;\n  isDeleted: boolean;\n  meta: IMetaExercises;\n  defaultEquipment?: IEquipment;\n  types?: IExerciseKind[];\n  clonedFrom?: IExerciseType;\n  reuseImageFrom?: IExerciseType;\n  largeImageUrl?: string;\n  smallImageUrl?: string;\n}\nconst _VCustomExercise = v.object({\n  vtype: v.literal(\"custom_exercise\"),\n  id: VExerciseId,\n  name: v.string(),\n  isDeleted: v.boolean(),\n  meta: VMetaExercises,\n  defaultEquipment: v.optional(VEquipment),\n  types: v.optional(v.array(VExerciseKind)),\n  clonedFrom: v.optional(VExerciseType),\n  reuseImageFrom: v.optional(VExerciseType),\n  largeImageUrl: v.optional(v.string()),\n  smallImageUrl: v.optional(v.string()),\n});\nconst _VCustomExerciseMatches: IEquals<v.InferOutput<typeof _VCustomExercise>, ICustomExercise> = true;\nvoid _VCustomExerciseMatches;\nexport const VCustomExercise: v.GenericSchema<ICustomExercise> = _VCustomExercise;\nexport type IAllCustomExercises = Partial<Record<string, ICustomExercise>>;\n\nexport interface ISet {\n  vtype: \"set\";\n  index: number;\n  id: string;\n  reps?: number;\n  originalWeight?: IWeight | IPercentage;\n  weight?: IWeight;\n  minReps?: number;\n  rpe?: number;\n  logRpe?: boolean;\n  timestamp?: number;\n  isAmrap?: boolean;\n  label?: string;\n  timer?: number;\n  setTimer?: number;\n  isOverflowSetTimer?: boolean;\n  auto?: boolean;\n  askWeight?: boolean;\n  isCompleted?: boolean;\n  isUnilateral?: boolean;\n  completedRepsLeft?: number;\n  completedReps?: number;\n  completedWeight?: IWeight;\n  completedRpe?: number;\n  completedSetTimer?: number;\n  programSetIndex?: number;\n}\nconst _VSet = v.object({\n  vtype: v.literal(\"set\"),\n  index: v.number(),\n  id: v.string(),\n  reps: v.optional(v.number()),\n  originalWeight: v.optional(v.union([VWeight, VPercentage])),\n  weight: v.optional(VWeight),\n  minReps: v.optional(v.number()),\n  rpe: v.optional(v.number()),\n  logRpe: v.optional(v.boolean()),\n  timestamp: v.optional(v.number()),\n  isAmrap: v.optional(v.boolean()),\n  label: v.optional(v.string()),\n  timer: v.optional(v.number()),\n  setTimer: v.optional(v.number()),\n  isOverflowSetTimer: v.optional(v.boolean()),\n  auto: v.optional(v.boolean()),\n  askWeight: v.optional(v.boolean()),\n  isCompleted: v.optional(v.boolean()),\n  isUnilateral: v.optional(v.boolean()),\n  completedRepsLeft: v.optional(v.number()),\n  completedReps: v.optional(v.number()),\n  completedWeight: v.optional(VWeight),\n  completedRpe: v.optional(v.number()),\n  completedSetTimer: v.optional(v.number()),\n  programSetIndex: v.optional(v.number()),\n});\nconst _VSetMatches: IEquals<v.InferOutput<typeof _VSet>, ISet> = true;\nvoid _VSetMatches;\nexport const VSet: v.GenericSchema<ISet> = _VSet;\n\nexport const VProgramState = v.record(v.string(), v.union([v.number(), VWeight, VPercentage]));\nexport type IProgramState = v.InferOutput<typeof VProgramState>;\n\nexport interface IHistoryEntryProgressSnapshot {\n  diffState?: Record<string, string>;\n  diffVars?: Record<string, string>;\n  prints?: (number | IWeight | IPercentage)[][];\n  updatePrints?: (number | IWeight | IPercentage)[][];\n}\nconst _VHistoryEntryProgressSnapshot = v.object({\n  diffState: v.optional(v.record(v.string(), v.string())),\n  diffVars: v.optional(v.record(v.string(), v.string())),\n  prints: v.optional(v.array(v.array(v.union([v.number(), VWeight, VPercentage])))),\n  updatePrints: v.optional(v.array(v.array(v.union([v.number(), VWeight, VPercentage])))),\n});\nconst _VHistoryEntryProgressSnapshotMatches: IEquals<\n  v.InferOutput<typeof _VHistoryEntryProgressSnapshot>,\n  IHistoryEntryProgressSnapshot\n> = true;\nvoid _VHistoryEntryProgressSnapshotMatches;\nexport const VHistoryEntryProgressSnapshot: v.GenericSchema<IHistoryEntryProgressSnapshot> =\n  _VHistoryEntryProgressSnapshot;\n\nexport interface IHistoryEntry {\n  vtype: \"history_entry\";\n  exercise: IExerciseType;\n  sets: ISet[];\n  warmupSets: ISet[];\n  index: number;\n  id: string;\n  programExerciseId?: string;\n  state?: IProgramState;\n  vars?: IProgramState;\n  notes?: string;\n  changed?: boolean;\n  isSuppressed?: boolean;\n  superset?: string;\n  updatePrints?: (number | IWeight | IPercentage)[][];\n  descriptionSnapshot?: string;\n  progressSnapshot?: IHistoryEntryProgressSnapshot;\n}\nconst _VHistoryEntry = v.object({\n  vtype: v.literal(\"history_entry\"),\n  exercise: VExerciseType,\n  sets: v.array(VSet),\n  warmupSets: v.array(VSet),\n  index: v.number(),\n  id: v.string(),\n  programExerciseId: v.optional(v.string()),\n  state: v.optional(VProgramState),\n  vars: v.optional(VProgramState),\n  notes: v.optional(v.string()),\n  changed: v.optional(v.boolean()),\n  isSuppressed: v.optional(v.boolean()),\n  superset: v.optional(v.string()),\n  updatePrints: v.optional(v.array(v.array(v.union([v.number(), VWeight, VPercentage])))),\n  descriptionSnapshot: v.optional(v.string()),\n  progressSnapshot: v.optional(VHistoryEntryProgressSnapshot),\n});\nconst _VHistoryEntryMatches: IEquals<v.InferOutput<typeof _VHistoryEntry>, IHistoryEntry> = true;\nvoid _VHistoryEntryMatches;\nexport const VHistoryEntry: v.GenericSchema<IHistoryEntry> = _VHistoryEntry;\n\nexport interface IProgramStateMetadataValue {\n  userPrompted?: boolean;\n}\nconst _VProgramStateMetadataValue = v.object({\n  userPrompted: v.optional(v.boolean()),\n});\nconst _VProgramStateMetadataValueMatches: IEquals<\n  v.InferOutput<typeof _VProgramStateMetadataValue>,\n  IProgramStateMetadataValue\n> = true;\nvoid _VProgramStateMetadataValueMatches;\nexport const VProgramStateMetadataValue: v.GenericSchema<IProgramStateMetadataValue> = _VProgramStateMetadataValue;\n\nexport const VProgramStateMetadata = v.record(v.string(), v.optional(VProgramStateMetadataValue));\nexport type IProgramStateMetadata = v.InferOutput<typeof VProgramStateMetadata>;\n\nexport interface IProgramSet {\n  repsExpr: string;\n  weightExpr: string;\n  isAmrap?: boolean;\n  rpeExpr?: string;\n  minRepsExpr?: string;\n  logRpe?: boolean;\n  askWeight?: boolean;\n  label?: string;\n  timerExpr?: string;\n}\nconst _VProgramSet = v.object({\n  repsExpr: v.string(),\n  weightExpr: v.string(),\n  isAmrap: v.optional(v.boolean()),\n  rpeExpr: v.optional(v.string()),\n  minRepsExpr: v.optional(v.string()),\n  logRpe: v.optional(v.boolean()),\n  askWeight: v.optional(v.boolean()),\n  label: v.optional(v.string()),\n  timerExpr: v.optional(v.string()),\n});\nconst _VProgramSetMatches: IEquals<v.InferOutput<typeof _VProgramSet>, IProgramSet> = true;\nvoid _VProgramSetMatches;\nexport const VProgramSet: v.GenericSchema<IProgramSet> = _VProgramSet;\n\nexport interface IProgramExerciseVariation {\n  sets: IProgramSet[];\n  quickAddSets?: boolean;\n}\nconst _VProgramExerciseVariation = v.object({\n  sets: v.array(VProgramSet),\n  quickAddSets: v.optional(v.boolean()),\n});\nconst _VProgramExerciseVariationMatches: IEquals<\n  v.InferOutput<typeof _VProgramExerciseVariation>,\n  IProgramExerciseVariation\n> = true;\nvoid _VProgramExerciseVariationMatches;\nexport const VProgramExerciseVariation: v.GenericSchema<IProgramExerciseVariation> = _VProgramExerciseVariation;\n\nexport interface IProgramExerciseWarmupSet {\n  reps: number;\n  value: IWeight | number;\n  threshold: IWeight;\n}\nconst _VProgramExerciseWarmupSet = v.object({\n  reps: v.number(),\n  value: v.union([VWeight, v.number()]),\n  threshold: VWeight,\n});\nconst _VProgramExerciseWarmupSetMatches: IEquals<\n  v.InferOutput<typeof _VProgramExerciseWarmupSet>,\n  IProgramExerciseWarmupSet\n> = true;\nvoid _VProgramExerciseWarmupSetMatches;\nexport const VProgramExerciseWarmupSet: v.GenericSchema<IProgramExerciseWarmupSet> = _VProgramExerciseWarmupSet;\n\nexport interface IProgramExerciseReuseLogic {\n  selected?: string;\n  states: Record<string, IProgramState>;\n}\nconst _VProgramExerciseReuseLogic = v.object({\n  selected: v.optional(v.string()),\n  states: v.record(v.string(), VProgramState),\n});\nconst _VProgramExerciseReuseLogicMatches: IEquals<\n  v.InferOutput<typeof _VProgramExerciseReuseLogic>,\n  IProgramExerciseReuseLogic\n> = true;\nvoid _VProgramExerciseReuseLogicMatches;\nexport const VProgramExerciseReuseLogic: v.GenericSchema<IProgramExerciseReuseLogic> = _VProgramExerciseReuseLogic;\n\nexport interface IProgramExercise {\n  exerciseType: IExerciseType;\n  id: string;\n  name: string;\n  variations: v.InferOutput<typeof VProgramExerciseVariation>[];\n  state: IProgramState;\n  variationExpr: string;\n  finishDayExpr: string;\n  descriptions: string[];\n  tags?: number[];\n  updateDayExpr?: string;\n  diffPaths?: string[];\n  description?: string;\n  descriptionExpr?: string;\n  quickAddSets?: boolean;\n  enableRepRanges?: boolean;\n  enableRpe?: boolean;\n  stateMetadata?: IProgramStateMetadata;\n  timerExpr?: string;\n  reuseLogic?: v.InferOutput<typeof VProgramExerciseReuseLogic>;\n  warmupSets?: v.InferOutput<typeof VProgramExerciseWarmupSet>[];\n  reuseFinishDayScript?: string;\n  reuseUpdateDayScript?: string;\n}\nconst _VProgramExercise = v.object({\n  exerciseType: VExerciseType,\n  id: v.string(),\n  name: v.string(),\n  variations: v.array(VProgramExerciseVariation),\n  state: VProgramState,\n  variationExpr: v.string(),\n  finishDayExpr: v.string(),\n  descriptions: v.array(v.string()),\n  tags: v.optional(v.array(v.number())),\n  updateDayExpr: v.optional(v.string()),\n  diffPaths: v.optional(v.array(v.string())),\n  description: v.optional(v.string()),\n  descriptionExpr: v.optional(v.string()),\n  quickAddSets: v.optional(v.boolean()),\n  enableRepRanges: v.optional(v.boolean()),\n  enableRpe: v.optional(v.boolean()),\n  stateMetadata: v.optional(VProgramStateMetadata),\n  timerExpr: v.optional(v.string()),\n  reuseLogic: v.optional(VProgramExerciseReuseLogic),\n  warmupSets: v.optional(v.array(VProgramExerciseWarmupSet)),\n  reuseFinishDayScript: v.optional(v.string()),\n  reuseUpdateDayScript: v.optional(v.string()),\n});\nconst _VProgramExerciseMatches: IEquals<v.InferOutput<typeof _VProgramExercise>, IProgramExercise> = true;\nvoid _VProgramExerciseMatches;\nexport const VProgramExercise: v.GenericSchema<IProgramExercise> = _VProgramExercise;\n\nexport interface IExercisePickerFilters {\n  equipment?: IBuiltinEquipment[];\n  type?: IExerciseKind[];\n  muscles?: IMuscle[];\n  isStarred?: boolean;\n}\nconst _VExercisePickerFilters = v.object({\n  equipment: v.optional(v.array(VBuiltinEquipment)),\n  type: v.optional(v.array(VExerciseKind)),\n  muscles: v.optional(v.array(VMuscle)),\n  isStarred: v.optional(v.boolean()),\n});\nconst _VExercisePickerFiltersMatches: IEquals<\n  v.InferOutput<typeof _VExercisePickerFilters>,\n  IExercisePickerFilters\n> = true;\nvoid _VExercisePickerFiltersMatches;\nexport const VExercisePickerFilters: v.GenericSchema<IExercisePickerFilters> = _VExercisePickerFilters;\n\nexport interface IExercisePickerProgramExercise {\n  type: \"program\";\n  exerciseType: IExerciseType;\n  week: number;\n  dayInWeek: number;\n}\nconst _VExercisePickerProgramExercise = v.object({\n  type: v.literal(\"program\"),\n  exerciseType: VExerciseType,\n  week: v.number(),\n  dayInWeek: v.number(),\n});\nconst _VExercisePickerProgramExerciseMatches: IEquals<\n  v.InferOutput<typeof _VExercisePickerProgramExercise>,\n  IExercisePickerProgramExercise\n> = true;\nvoid _VExercisePickerProgramExerciseMatches;\nexport const VExercisePickerProgramExercise: v.GenericSchema<IExercisePickerProgramExercise> =\n  _VExercisePickerProgramExercise;\n\nexport interface IExercisePickerAdhocExercise {\n  type: \"adhoc\";\n  exerciseType: IExerciseType;\n  label?: string;\n}\nconst _VExercisePickerAdhocExercise = v.object({\n  type: v.literal(\"adhoc\"),\n  exerciseType: VExerciseType,\n  label: v.optional(v.string()),\n});\nconst _VExercisePickerAdhocExerciseMatches: IEquals<\n  v.InferOutput<typeof _VExercisePickerAdhocExercise>,\n  IExercisePickerAdhocExercise\n> = true;\nvoid _VExercisePickerAdhocExerciseMatches;\nexport const VExercisePickerAdhocExercise: v.GenericSchema<IExercisePickerAdhocExercise> =\n  _VExercisePickerAdhocExercise;\n\nexport interface IExercisePickerTemplate {\n  type: \"template\";\n  name: string;\n  label?: string;\n}\nconst _VExercisePickerTemplate = v.object({\n  type: v.literal(\"template\"),\n  name: v.string(),\n  label: v.optional(v.string()),\n});\nconst _VExercisePickerTemplateMatches: IEquals<\n  v.InferOutput<typeof _VExercisePickerTemplate>,\n  IExercisePickerTemplate\n> = true;\nvoid _VExercisePickerTemplateMatches;\nexport const VExercisePickerTemplate: v.GenericSchema<IExercisePickerTemplate> = _VExercisePickerTemplate;\n\nexport const VExercisePickerSelectedExercise = v.union([\n  VExercisePickerProgramExercise,\n  VExercisePickerAdhocExercise,\n  VExercisePickerTemplate,\n]);\nexport type IExercisePickerSelectedExercise = v.InferOutput<typeof VExercisePickerSelectedExercise>;\n\nexport interface IExercisePickerState {\n  screenStack: IExercisePickerScreen[];\n  sort: IExercisePickerSort;\n  filters: IExercisePickerFilters;\n  selectedExercises: IExercisePickerSelectedExercise[];\n  mode: \"workout\" | \"program\";\n  showMuscles?: boolean;\n  customExerciseName?: string;\n  label?: string;\n  templateName?: string;\n  selectedTab?: number;\n  editCustomExercise?: ICustomExercise;\n  search?: string;\n  exerciseType?: IExerciseType;\n  entryIndex?: number;\n  hideLabel?: boolean;\n  hideTemplate?: boolean;\n}\nconst _VExercisePickerState = v.object({\n  screenStack: v.array(VExercisePickerScreen),\n  sort: VExercisePickerSort,\n  filters: VExercisePickerFilters,\n  selectedExercises: v.array(VExercisePickerSelectedExercise),\n  mode: v.union([v.literal(\"workout\"), v.literal(\"program\")]),\n  showMuscles: v.optional(v.boolean()),\n  customExerciseName: v.optional(v.string()),\n  label: v.optional(v.string()),\n  templateName: v.optional(v.string()),\n  selectedTab: v.optional(v.number()),\n  editCustomExercise: v.optional(VCustomExercise),\n  search: v.optional(v.string()),\n  exerciseType: v.optional(VExerciseType),\n  entryIndex: v.optional(v.number()),\n  hideLabel: v.optional(v.boolean()),\n  hideTemplate: v.optional(v.boolean()),\n});\nconst _VExercisePickerStateMatches: IEquals<v.InferOutput<typeof _VExercisePickerState>, IExercisePickerState> = true;\nvoid _VExercisePickerStateMatches;\nexport const VExercisePickerState: v.GenericSchema<IExercisePickerState> = _VExercisePickerState;\n\nexport interface IProgressUi {\n  vtype?: \"progress_ui\";\n  id?: string;\n  editModal?: {\n    programExerciseId: string;\n    entryIndex: number;\n  };\n  dateModal?: {\n    date: string;\n    time: number;\n  };\n  exercisePicker?: {\n    state?: IExercisePickerState;\n  };\n  equipmentModal?: {\n    exerciseType?: IExerciseType;\n  };\n  rm1Modal?: {\n    exerciseType?: IExerciseType;\n  };\n  editSetModal?: {\n    isWarmup: boolean;\n    entryIndex: number;\n    exerciseType?: IExerciseType;\n    programExerciseId?: string;\n    set: ISet;\n    setIndex?: number;\n  };\n  setTimerEditModal?: {\n    entryIndex: number;\n    setIndex: number;\n  };\n  roundingModal?: {\n    entryIndex: number;\n    setIndex: number;\n  };\n  exerciseBottomSheet?: {\n    entryIndex: number;\n  };\n  entryIndexEditMode?: number;\n  showSupersetPicker?: IHistoryEntry;\n  forceUpdateEntryIndex?: boolean;\n  isExternal?: boolean;\n  nativeNotificationScheduled?: boolean;\n}\nconst _VProgressUi = v.object({\n  vtype: v.optional(v.literal(\"progress_ui\")),\n  id: v.optional(v.string()),\n  editModal: v.optional(\n    v.object({\n      programExerciseId: v.string(),\n      entryIndex: v.number(),\n    })\n  ),\n  dateModal: v.optional(\n    v.object({\n      date: v.string(),\n      time: v.number(),\n    })\n  ),\n  exercisePicker: v.optional(\n    v.object({\n      state: v.optional(VExercisePickerState),\n    })\n  ),\n  equipmentModal: v.optional(\n    v.object({\n      exerciseType: v.optional(VExerciseType),\n    })\n  ),\n  rm1Modal: v.optional(\n    v.object({\n      exerciseType: v.optional(VExerciseType),\n    })\n  ),\n  editSetModal: v.optional(\n    v.object({\n      isWarmup: v.boolean(),\n      entryIndex: v.number(),\n      exerciseType: v.optional(VExerciseType),\n      programExerciseId: v.optional(v.string()),\n      set: VSet,\n      setIndex: v.optional(v.number()),\n    })\n  ),\n  setTimerEditModal: v.optional(\n    v.object({\n      entryIndex: v.number(),\n      setIndex: v.number(),\n    })\n  ),\n  roundingModal: v.optional(\n    v.object({\n      entryIndex: v.number(),\n      setIndex: v.number(),\n    })\n  ),\n  exerciseBottomSheet: v.optional(\n    v.object({\n      entryIndex: v.number(),\n    })\n  ),\n  entryIndexEditMode: v.optional(v.number()),\n  showSupersetPicker: v.optional(v.lazy(() => VHistoryEntry)),\n  forceUpdateEntryIndex: v.optional(v.boolean()),\n  isExternal: v.optional(v.boolean()),\n  nativeNotificationScheduled: v.optional(v.boolean()),\n});\nconst _VProgressUiMatches: IEquals<v.InferOutput<typeof _VProgressUi>, IProgressUi> = true;\nvoid _VProgressUiMatches;\nexport const VProgressUi: v.GenericSchema<IProgressUi> = _VProgressUi;\n\nexport const VIntervals = v.array(v.tuple([v.number(), v.union([v.number(), v.undefined(), v.null()])]));\nexport type IIntervals = v.InferOutput<typeof VIntervals>;\n\nexport interface IHistoryRecord {\n  vtype: \"history_record\" | \"progress\";\n  date: string;\n  programId: string;\n  programName: string;\n  day: number;\n  dayName: string;\n  entries: IHistoryEntry[];\n  startTime: number;\n  id: number;\n  endTime?: number;\n  week?: number;\n  dayInWeek?: number;\n  ui?: IProgressUi;\n  intervals?: IIntervals;\n  deletedProgramExercises?: Record<string, boolean | undefined>;\n  userPromptedStateVars?: Record<string, IProgramState | undefined>;\n  changes?: IHistoryRecordChange[];\n  timerSince?: number;\n  timerMode?: IProgressMode;\n  timer?: number;\n  timerEntryIndex?: number;\n  timerSetIndex?: number;\n  // The running clock for a time-based set. Lives on the record (not under `ui`) so it's version-tracked\n  // and syncs across devices like the rest timer — a clock started on the watch shows in the app and vice\n  // versa. `nonce` drives re-presenting the modal; `keepTiming` survives the AMRAP resolution.\n  setTimer?: {\n    entryIndex: number;\n    setIndex: number;\n    startedAt: number;\n    nonce?: number;\n    keepTiming?: boolean;\n  };\n  // Lives on the record (not under `ui`) so it's version-tracked and syncs across devices like setTimer — an\n  // AMRAP prompt opened on the watch shows in the app and vice versa, and resolving it on either device\n  // dismisses it on both. `nonce` drives re-presenting the modal.\n  amrapModal?: {\n    entryIndex: number;\n    setIndex: number;\n    isAmrap?: boolean;\n    logRpe?: boolean;\n    askWeight?: boolean;\n    userVars?: boolean;\n    nonce?: number;\n  };\n  // The exercise the workout screen is scrolled to. Lives on the record (not under `ui`) so it version-syncs\n  // across devices — auto-advancing past an exercise (EMOM/Tabata) on one client moves the others too.\n  currentEntryIndex?: number;\n  notes?: string;\n  updatedAt?: number;\n}\nconst _VHistoryRecord = v.object({\n  vtype: v.union([v.literal(\"history_record\"), v.literal(\"progress\")]),\n  date: v.string(),\n  programId: v.string(),\n  programName: v.string(),\n  day: v.number(),\n  dayName: v.string(),\n  entries: v.array(VHistoryEntry),\n  startTime: v.number(),\n  id: v.number(),\n  endTime: v.optional(v.number()),\n  week: v.optional(v.number()),\n  dayInWeek: v.optional(v.number()),\n  ui: v.optional(VProgressUi),\n  intervals: v.optional(VIntervals),\n  deletedProgramExercises: v.optional(v.record(v.string(), v.optional(v.boolean()))),\n  userPromptedStateVars: v.optional(v.record(v.string(), v.optional(VProgramState))),\n  changes: v.optional(v.array(VHistoryRecordChange)),\n  timerSince: v.optional(v.number()),\n  timerMode: v.optional(VProgressMode),\n  timer: v.optional(v.number()),\n  timerEntryIndex: v.optional(v.number()),\n  timerSetIndex: v.optional(v.number()),\n  setTimer: v.optional(\n    v.object({\n      entryIndex: v.number(),\n      setIndex: v.number(),\n      startedAt: v.number(),\n      nonce: v.optional(v.number()),\n      keepTiming: v.optional(v.boolean()),\n    })\n  ),\n  amrapModal: v.optional(\n    v.object({\n      entryIndex: v.number(),\n      setIndex: v.number(),\n      isAmrap: v.optional(v.boolean()),\n      logRpe: v.optional(v.boolean()),\n      askWeight: v.optional(v.boolean()),\n      userVars: v.optional(v.boolean()),\n      nonce: v.optional(v.number()),\n    })\n  ),\n  currentEntryIndex: v.optional(v.number()),\n  notes: v.optional(v.string()),\n  updatedAt: v.optional(v.number()),\n});\nconst _VHistoryRecordMatches: IEquals<v.InferOutput<typeof _VHistoryRecord>, IHistoryRecord> = true;\nvoid _VHistoryRecordMatches;\nexport const VHistoryRecord: v.GenericSchema<IHistoryRecord> = _VHistoryRecord;\n\nexport interface IProgramDayEntry {\n  exercise: IExerciseType;\n  sets: IProgramSet[];\n}\nconst _VProgramDayEntry = v.object({\n  exercise: VExerciseType,\n  sets: v.array(VProgramSet),\n});\nconst _VProgramDayEntryMatches: IEquals<v.InferOutput<typeof _VProgramDayEntry>, IProgramDayEntry> = true;\nvoid _VProgramDayEntryMatches;\nexport const VProgramDayEntry: v.GenericSchema<IProgramDayEntry> = _VProgramDayEntry;\n\nexport interface IProgramWeek {\n  id: string;\n  name: string;\n  days: { id: string }[];\n  description?: string;\n}\nconst _VProgramWeek = v.object({\n  id: v.string(),\n  name: v.string(),\n  days: v.array(v.object({ id: v.string() })),\n  description: v.optional(v.string()),\n});\nconst _VProgramWeekMatches: IEquals<v.InferOutput<typeof _VProgramWeek>, IProgramWeek> = true;\nvoid _VProgramWeekMatches;\nexport const VProgramWeek: v.GenericSchema<IProgramWeek> = _VProgramWeek;\n\nexport interface IProgramDay {\n  id: string;\n  name: string;\n  exercises: { id: string }[];\n  description?: string;\n}\nconst _VProgramDay = v.object({\n  id: v.string(),\n  name: v.string(),\n  exercises: v.array(v.object({ id: v.string() })),\n  description: v.optional(v.string()),\n});\nconst _VProgramDayMatches: IEquals<v.InferOutput<typeof _VProgramDay>, IProgramDay> = true;\nvoid _VProgramDayMatches;\nexport const VProgramDay: v.GenericSchema<IProgramDay> = _VProgramDay;\n\nexport interface IPlannerProgramDay {\n  name: string;\n  exerciseText: string;\n  id?: string;\n  description?: string;\n}\nconst _VPlannerProgramDay = v.object({\n  name: v.string(),\n  exerciseText: v.string(),\n  id: v.optional(v.string()),\n  description: v.optional(v.string()),\n});\nconst _VPlannerProgramDayMatches: IEquals<v.InferOutput<typeof _VPlannerProgramDay>, IPlannerProgramDay> = true;\nvoid _VPlannerProgramDayMatches;\nexport const VPlannerProgramDay: v.GenericSchema<IPlannerProgramDay> = _VPlannerProgramDay;\n\nexport interface IPlannerProgramWeek {\n  name: string;\n  days: IPlannerProgramDay[];\n  id?: string;\n  description?: string;\n}\nconst _VPlannerProgramWeek = v.object({\n  name: v.string(),\n  days: v.array(VPlannerProgramDay),\n  id: v.optional(v.string()),\n  description: v.optional(v.string()),\n});\nconst _VPlannerProgramWeekMatches: IEquals<v.InferOutput<typeof _VPlannerProgramWeek>, IPlannerProgramWeek> = true;\nvoid _VPlannerProgramWeekMatches;\nexport const VPlannerProgramWeek: v.GenericSchema<IPlannerProgramWeek> = _VPlannerProgramWeek;\n\nexport interface IPlannerProgram {\n  vtype: \"planner\";\n  name: string;\n  weeks: IPlannerProgramWeek[];\n}\nconst _VPlannerProgram = v.object({\n  vtype: v.literal(\"planner\"),\n  name: v.string(),\n  weeks: v.array(VPlannerProgramWeek),\n});\nconst _VPlannerProgramMatches: IEquals<v.InferOutput<typeof _VPlannerProgram>, IPlannerProgram> = true;\nvoid _VPlannerProgramMatches;\nexport const VPlannerProgram: v.GenericSchema<IPlannerProgram> = _VPlannerProgram;\n\nexport interface IProgram {\n  vtype: \"program\";\n  exercises: IProgramExercise[];\n  id: string;\n  name: string;\n  description: string;\n  url: string;\n  author: string;\n  nextDay: number;\n  days: IProgramDay[];\n  weeks: IProgramWeek[];\n  isMultiweek: boolean;\n  tags: IProgramTag[];\n  deletedDays?: string[];\n  deletedWeeks?: string[];\n  deletedExercises?: string[];\n  clonedAt?: number;\n  shortDescription?: string;\n  planner?: IPlannerProgram;\n  updatedAt?: number;\n  authorid?: string | null;\n  source?: string | null;\n}\nconst _VProgram = v.object({\n  vtype: v.literal(\"program\"),\n  exercises: v.array(VProgramExercise),\n  id: v.string(),\n  name: v.string(),\n  description: v.string(),\n  url: v.string(),\n  author: v.string(),\n  nextDay: v.number(),\n  days: v.array(VProgramDay),\n  weeks: v.array(VProgramWeek),\n  isMultiweek: v.boolean(),\n  tags: v.array(VProgramTag),\n  deletedDays: v.optional(v.array(v.string())),\n  deletedWeeks: v.optional(v.array(v.string())),\n  deletedExercises: v.optional(v.array(v.string())),\n  clonedAt: v.optional(v.number()),\n  shortDescription: v.optional(v.string()),\n  planner: v.optional(VPlannerProgram),\n  updatedAt: v.optional(v.number()),\n  authorid: v.optional(v.union([v.string(), v.null()])),\n  source: v.optional(v.union([v.string(), v.null()])),\n});\nconst _VProgramMatches: IEquals<v.InferOutput<typeof _VProgram>, IProgram> = true;\nvoid _VProgramMatches;\nexport const VProgram: v.GenericSchema<IProgram> = _VProgram;\n\nexport interface IStatsWeightValue {\n  vtype: \"stat\";\n  value: IWeight;\n  timestamp: number;\n  updatedAt?: number;\n  appleUuid?: string;\n  googleUuid?: string;\n}\nconst _VStatsWeightValue = v.object({\n  vtype: v.literal(\"stat\"),\n  value: VWeight,\n  timestamp: v.number(),\n  updatedAt: v.optional(v.number()),\n  appleUuid: v.optional(v.string()),\n  googleUuid: v.optional(v.string()),\n});\nconst _VStatsWeightValueMatches: IEquals<v.InferOutput<typeof _VStatsWeightValue>, IStatsWeightValue> = true;\nvoid _VStatsWeightValueMatches;\nexport const VStatsWeightValue: v.GenericSchema<IStatsWeightValue> = _VStatsWeightValue;\n\nexport const VStatsWeight = v.object({\n  weight: v.optional(v.array(VStatsWeightValue)),\n});\nexport type IStatsWeight = v.InferOutput<typeof VStatsWeight>;\n\nexport interface IStatsLengthValue {\n  vtype: \"stat\";\n  value: ILength;\n  timestamp: number;\n  updatedAt?: number;\n  appleUuid?: string;\n  googleUuid?: string;\n}\nconst _VStatsLengthValue = v.object({\n  vtype: v.literal(\"stat\"),\n  value: VLength,\n  timestamp: v.number(),\n  updatedAt: v.optional(v.number()),\n  appleUuid: v.optional(v.string()),\n  googleUuid: v.optional(v.string()),\n});\nconst _VStatsLengthValueMatches: IEquals<v.InferOutput<typeof _VStatsLengthValue>, IStatsLengthValue> = true;\nvoid _VStatsLengthValueMatches;\nexport const VStatsLengthValue: v.GenericSchema<IStatsLengthValue> = _VStatsLengthValue;\n\nexport type IStatsLength = Partial<Record<(typeof statsLengthDef)[number], IStatsLengthValue[]>>;\nexport const VStatsLength: v.GenericSchema<IStatsLength> = v.object(\n  statsLengthDef.reduce<Record<string, v.GenericSchema<IStatsLengthValue[] | undefined>>>((memo, key) => {\n    memo[key] = v.optional(v.array(VStatsLengthValue));\n    return memo;\n  }, {})\n);\n\nexport interface IStatsPercentageValue {\n  vtype: \"stat\";\n  value: IPercentage;\n  timestamp: number;\n  updatedAt?: number;\n  appleUuid?: string;\n  googleUuid?: string;\n}\nconst _VStatsPercentageValue = v.object({\n  vtype: v.literal(\"stat\"),\n  value: VPercentage,\n  timestamp: v.number(),\n  updatedAt: v.optional(v.number()),\n  appleUuid: v.optional(v.string()),\n  googleUuid: v.optional(v.string()),\n});\nconst _VStatsPercentageValueMatches: IEquals<\n  v.InferOutput<typeof _VStatsPercentageValue>,\n  IStatsPercentageValue\n> = true;\nvoid _VStatsPercentageValueMatches;\nexport const VStatsPercentageValue: v.GenericSchema<IStatsPercentageValue> = _VStatsPercentageValue;\n\nexport const VStatsPercentage = v.object({\n  bodyfat: v.optional(v.array(VStatsPercentageValue)),\n});\nexport type IStatsPercentage = v.InferOutput<typeof VStatsPercentage>;\n\n// Read-only daily metrics imported from Apple Health / Health Connect (sleep minutes, dietary\n// calories, protein grams). Unlike body measurements these are daily aggregates, keyed by the\n// local-midnight timestamp of the day they belong to; the value is a plain number whose unit is\n// implied by the key.\nexport interface IStatsHealthValue {\n  vtype: \"stat\";\n  value: number;\n  timestamp: number;\n  updatedAt?: number;\n  appleUuid?: string;\n  googleUuid?: string;\n  // Read-only imported records can't be truly deleted (they'd just re-sync), so the user hides them\n  // instead; the record stays in storage and re-syncs normally, it's just filtered out of the UI.\n  hidden?: boolean;\n}\nconst _VStatsHealthValue = v.object({\n  vtype: v.literal(\"stat\"),\n  value: v.number(),\n  timestamp: v.number(),\n  updatedAt: v.optional(v.number()),\n  appleUuid: v.optional(v.string()),\n  googleUuid: v.optional(v.string()),\n  hidden: v.optional(v.boolean()),\n});\nconst _VStatsHealthValueMatches: IEquals<v.InferOutput<typeof _VStatsHealthValue>, IStatsHealthValue> = true;\nvoid _VStatsHealthValueMatches;\nexport const VStatsHealthValue: v.GenericSchema<IStatsHealthValue> = _VStatsHealthValue;\n\nexport type IStatsHealthKey = (typeof statsHealthDef)[number];\nexport type IStatsHealth = Partial<Record<IStatsHealthKey, IStatsHealthValue[]>>;\nexport const VStatsHealth: v.GenericSchema<IStatsHealth> = v.object(\n  statsHealthDef.reduce<Record<string, v.GenericSchema<IStatsHealthValue[] | undefined>>>((memo, key) => {\n    memo[key] = v.optional(v.array(VStatsHealthValue));\n    return memo;\n  }, {})\n);\n\nexport type IStatsKey = keyof IStatsLength | keyof IStatsWeight | keyof IStatsPercentage;\n\nexport type IExerciseSelectedType = \"weight\" | \"volume\";\nexport type IVolumeSelectedType = \"sets\" | \"volume\";\n\nfunction buildBoolPartial<K extends string>(\n  keys: readonly K[]\n): v.ObjectSchema<Record<K, v.OptionalSchema<v.BooleanSchema<undefined>, undefined>>, undefined> {\n  const entries = keys.reduce<Record<string, v.OptionalSchema<v.BooleanSchema<undefined>, undefined>>>((memo, key) => {\n    memo[key] = v.optional(v.boolean());\n    return memo;\n  }, {});\n  return v.object(entries) as v.ObjectSchema<\n    Record<K, v.OptionalSchema<v.BooleanSchema<undefined>, undefined>>,\n    undefined\n  >;\n}\n\nexport const VStatsWeightEnabled = buildBoolPartial(statsWeightDef);\nexport type IStatsWeightEnabled = v.InferOutput<typeof VStatsWeightEnabled>;\n\nexport const VStatsLengthEnabled = buildBoolPartial(statsLengthDef);\nexport type IStatsLengthEnabled = v.InferOutput<typeof VStatsLengthEnabled>;\n\nexport const VStatsPercentageEnabled = buildBoolPartial(statsPercentageDef);\nexport type IStatsPercentageEnabled = v.InferOutput<typeof VStatsPercentageEnabled>;\n\nexport interface IStatsEnabled {\n  weight: IStatsWeightEnabled;\n  length: IStatsLengthEnabled;\n  percentage: IStatsPercentageEnabled;\n}\nconst _VStatsEnabled = v.object({\n  weight: VStatsWeightEnabled,\n  length: VStatsLengthEnabled,\n  percentage: VStatsPercentageEnabled,\n});\nconst _VStatsEnabledMatches: IEquals<v.InferOutput<typeof _VStatsEnabled>, IStatsEnabled> = true;\nvoid _VStatsEnabledMatches;\nexport const VStatsEnabled: v.GenericSchema<IStatsEnabled> = _VStatsEnabled;\n\nexport interface ISettingsTimers {\n  warmup?: number | null;\n  workout?: number | null;\n  reminder?: number;\n  superset?: number;\n}\nconst _VSettingsTimers = v.object({\n  warmup: v.optional(v.union([v.number(), v.null()])),\n  workout: v.optional(v.union([v.number(), v.null()])),\n  reminder: v.optional(v.number()),\n  superset: v.optional(v.number()),\n});\nconst _VSettingsTimersMatches: IEquals<v.InferOutput<typeof _VSettingsTimers>, ISettingsTimers> = true;\nvoid _VSettingsTimersMatches;\nexport const VSettingsTimers: v.GenericSchema<ISettingsTimers> = _VSettingsTimers;\n\nexport const VGraph = v.union([\n  v.object({ vtype: v.literal(\"graph\"), type: v.literal(\"exercise\"), id: VExerciseId }),\n  v.object({\n    vtype: v.literal(\"graph\"),\n    type: v.literal(\"statsWeight\"),\n    id: v.picklist(statsWeightDef),\n  }),\n  v.object({\n    vtype: v.literal(\"graph\"),\n    type: v.literal(\"statsLength\"),\n    id: v.picklist(statsLengthDef),\n  }),\n  v.object({\n    vtype: v.literal(\"graph\"),\n    type: v.literal(\"statsPercentage\"),\n    id: v.picklist(statsPercentageDef),\n  }),\n  v.object({ vtype: v.literal(\"graph\"), type: v.literal(\"muscleGroup\"), id: v.string() }),\n]);\nexport type IGraph = v.InferOutput<typeof VGraph>;\n\nexport interface IEquipmentData {\n  vtype: \"equipment_data\";\n  bar: { lb: IWeight; kg: IWeight };\n  multiplier: number;\n  plates: { weight: IWeight; num: number }[];\n  fixed: IWeight[];\n  isFixed: boolean;\n  unit?: IUnit;\n  name?: string;\n  similarTo?: string;\n  isDeleted?: boolean;\n  useBodyweightForBar?: boolean;\n  isAssisting?: boolean;\n  notes?: string;\n}\nconst _VEquipmentData = v.object({\n  vtype: v.literal(\"equipment_data\"),\n  bar: v.object({ lb: VWeight, kg: VWeight }),\n  multiplier: v.number(),\n  plates: v.array(v.object({ weight: VWeight, num: v.number() })),\n  fixed: v.array(VWeight),\n  isFixed: v.boolean(),\n  unit: v.optional(VUnit),\n  name: v.optional(v.string()),\n  similarTo: v.optional(v.string()),\n  isDeleted: v.optional(v.boolean()),\n  useBodyweightForBar: v.optional(v.boolean()),\n  isAssisting: v.optional(v.boolean()),\n  notes: v.optional(v.string()),\n});\nconst _VEquipmentDataMatches: IEquals<v.InferOutput<typeof _VEquipmentData>, IEquipmentData> = true;\nvoid _VEquipmentDataMatches;\nexport const VEquipmentData: v.GenericSchema<IEquipmentData> = _VEquipmentData;\nexport type IAllEquipment = Partial<Record<string, IEquipmentData>>;\n\nexport interface IGraphOptions {\n  movingAverageWindowSize?: number;\n}\nconst _VGraphOptions = v.object({\n  movingAverageWindowSize: v.optional(v.number()),\n});\nconst _VGraphOptionsMatches: IEquals<v.InferOutput<typeof _VGraphOptions>, IGraphOptions> = true;\nvoid _VGraphOptionsMatches;\nexport const VGraphOptions: v.GenericSchema<IGraphOptions> = _VGraphOptions;\n\nexport interface IMuscleMultiplier {\n  muscle: IMuscle;\n  multiplier: number;\n}\nconst _VMuscleMultiplier = v.object({\n  muscle: VMuscle,\n  multiplier: v.number(),\n});\nconst _VMuscleMultiplierMatches: IEquals<v.InferOutput<typeof _VMuscleMultiplier>, IMuscleMultiplier> = true;\nvoid _VMuscleMultiplierMatches;\nexport const VMuscleMultiplier: v.GenericSchema<IMuscleMultiplier> = _VMuscleMultiplier;\n\n// The schema accepts any string key for muscleMultipliers so stale or future muscle\n// keys do not invalidate storage. Consumers that need IMuscle keys narrow at the call site\n// with `as IMuscle[]` after ObjectUtils_keys / Object.keys. (A union override here would\n// create real structural divergence between IExerciseDataValue and the schema's inferred\n// output, which would propagate through ISettings and break the IEquals check.)\nexport interface IExerciseDataValue {\n  rm1?: IWeight;\n  rounding?: number;\n  equipment?: Record<string, string | undefined>;\n  notes?: string;\n  muscleMultipliers?: Record<string, number | undefined>;\n  isUnilateral?: boolean;\n  volumeMultiplier?: number;\n}\nconst _VExerciseDataValue = v.object({\n  rm1: v.optional(VWeight),\n  rounding: v.optional(v.number()),\n  equipment: v.optional(v.record(v.string(), v.optional(v.string()))),\n  notes: v.optional(v.string()),\n  muscleMultipliers: v.optional(v.record(v.string(), v.optional(v.number()))),\n  isUnilateral: v.optional(v.boolean()),\n  volumeMultiplier: v.optional(v.number()),\n});\nconst _VExerciseDataValueMatches: IEquals<v.InferOutput<typeof _VExerciseDataValue>, IExerciseDataValue> = true;\nvoid _VExerciseDataValueMatches;\nexport const VExerciseDataValue: v.GenericSchema<IExerciseDataValue> = _VExerciseDataValue;\nexport type IExerciseData = Partial<Record<string, IExerciseDataValue>>;\n\nexport interface IPlannerSettings {\n  synergistMultiplier: number;\n  strengthSetsPct: number;\n  hypertrophySetsPct: number;\n  weeklyRangeSets: Record<IScreenMuscle, [number, number] | undefined>;\n  weeklyFrequency: Record<IScreenMuscle, number | undefined>;\n}\nconst _VPlannerSettings = v.object({\n  synergistMultiplier: v.number(),\n  strengthSetsPct: v.number(),\n  hypertrophySetsPct: v.number(),\n  weeklyRangeSets: v.record(VScreenMuscle, v.optional(v.tuple([v.number(), v.number()]))),\n  weeklyFrequency: v.record(VScreenMuscle, v.optional(v.number())),\n});\nconst _VPlannerSettingsMatches: IEquals<v.InferOutput<typeof _VPlannerSettings>, IPlannerSettings> = true;\nvoid _VPlannerSettingsMatches;\nexport const VPlannerSettings: v.GenericSchema<IPlannerSettings> = _VPlannerSettings;\n\nexport interface IGym {\n  vtype: \"gym\";\n  id: string;\n  name: string;\n  equipment: Record<IEquipment, IEquipmentData | undefined>;\n}\nconst _VGym = v.object({\n  vtype: v.literal(\"gym\"),\n  id: v.string(),\n  name: v.string(),\n  equipment: v.record(VEquipment, v.optional(VEquipmentData)),\n});\nconst _VGymMatches: IEquals<v.InferOutput<typeof _VGym>, IGym> = true;\nvoid _VGymMatches;\nexport const VGym: v.GenericSchema<IGym> = _VGym;\n\nexport interface IWorkoutSettings {\n  targetType: ITargetType;\n  shouldHideGraphs?: boolean;\n  shouldKeepProgramExerciseId?: boolean;\n  shouldShowInvisibleEquipment?: boolean;\n  pickerSort?: IExercisePickerSort;\n}\nconst _VWorkoutSettings = v.object({\n  targetType: VTargetType,\n  shouldHideGraphs: v.optional(v.boolean()),\n  shouldKeepProgramExerciseId: v.optional(v.boolean()),\n  shouldShowInvisibleEquipment: v.optional(v.boolean()),\n  pickerSort: v.optional(VExercisePickerSort),\n});\nconst _VWorkoutSettingsMatches: IEquals<v.InferOutput<typeof _VWorkoutSettings>, IWorkoutSettings> = true;\nvoid _VWorkoutSettingsMatches;\nexport const VWorkoutSettings: v.GenericSchema<IWorkoutSettings> = _VWorkoutSettings;\n\nexport interface IGraphs {\n  vtype: \"graphs\";\n  graphs: IGraph[];\n}\nconst _VGraphs = v.object({\n  vtype: v.literal(\"graphs\"),\n  graphs: v.array(VGraph),\n});\nconst _VGraphsMatches: IEquals<v.InferOutput<typeof _VGraphs>, IGraphs> = true;\nvoid _VGraphsMatches;\nexport const VGraphs: v.GenericSchema<IGraphs> = _VGraphs;\n\nexport interface IMuscleGroupsSettings {\n  vtype: \"muscle_groups_settings\";\n  data: Record<string, { name?: string; isHidden?: boolean; muscles?: IMuscle[] } | undefined>;\n}\nconst _VMuscleGroupsSettings = v.object({\n  vtype: v.literal(\"muscle_groups_settings\"),\n  data: v.record(\n    v.string(),\n    v.optional(\n      v.object({\n        name: v.optional(v.string()),\n        isHidden: v.optional(v.boolean()),\n        muscles: v.optional(v.array(VMuscle)),\n      })\n    )\n  ),\n});\nconst _VMuscleGroupsSettingsMatches: IEquals<\n  v.InferOutput<typeof _VMuscleGroupsSettings>,\n  IMuscleGroupsSettings\n> = true;\nvoid _VMuscleGroupsSettingsMatches;\nexport const VMuscleGroupsSettings: v.GenericSchema<IMuscleGroupsSettings> = _VMuscleGroupsSettings;\n\nexport interface ISettings {\n  timers: ISettingsTimers;\n  gyms: IGym[];\n  deletedGyms: string[];\n  graphs: IGraphs;\n  graphOptions: Record<string, IGraphOptions | undefined>;\n  graphsSettings: {\n    isSameXAxis?: boolean;\n    isWithBodyweight?: boolean;\n    isWithOneRm?: boolean;\n    isWithProgramLines?: boolean;\n    defaultType?: IGraphExerciseSelectedType;\n    defaultMuscleGroupType?: IGraphMuscleGroupSelectedType;\n  };\n  exerciseStatsSettings: {\n    ascendingSort?: boolean;\n    hideWithoutWorkoutNotes?: boolean;\n    hideWithoutExerciseNotes?: boolean;\n  };\n  exercises: Record<string, ICustomExercise | undefined>;\n  statsEnabled: IStatsEnabled;\n  units: IUnit;\n  lengthUnits: ILengthUnit;\n  volume: number;\n  exerciseData: Record<string, IExerciseDataValue | undefined>;\n  planner: IPlannerSettings;\n  workoutSettings: IWorkoutSettings;\n  muscleGroups: IMuscleGroupsSettings;\n  appleHealthSyncWorkout?: boolean;\n  appleHealthSyncMeasurements?: boolean;\n  appleHealthSyncSleepNutrition?: boolean;\n  appleHealthAnchor?: string;\n  googleHealthSyncWorkout?: boolean;\n  googleHealthSyncMeasurements?: boolean;\n  googleHealthSyncSleepNutrition?: boolean;\n  googleHealthAnchor?: string;\n  healthConfirmation?: boolean;\n  ignoreDoNotDisturb?: boolean;\n  currentGymId?: string;\n  isPublicProfile?: boolean;\n  nickname?: string;\n  alwaysOnDisplay?: boolean;\n  vibration?: boolean;\n  startWeekFromMonday?: boolean;\n  textSize?: number;\n  starredExercises?: Record<string, boolean | undefined>;\n  recentExercises?: Partial<Record<string, string[]>>;\n  theme?: \"dark\" | \"light\";\n  currentBodyweight?: IWeight;\n  affiliateEnabled?: boolean;\n}\nconst _VSettings = v.object({\n  timers: VSettingsTimers,\n  gyms: v.array(VGym),\n  deletedGyms: v.array(v.string()),\n  graphs: VGraphs,\n  graphOptions: v.record(v.string(), v.optional(VGraphOptions)),\n  graphsSettings: v.object({\n    isSameXAxis: v.optional(v.boolean()),\n    isWithBodyweight: v.optional(v.boolean()),\n    isWithOneRm: v.optional(v.boolean()),\n    isWithProgramLines: v.optional(v.boolean()),\n    defaultType: v.optional(VGraphExerciseSelectedType),\n    defaultMuscleGroupType: v.optional(VGraphMuscleGroupSelectedType),\n  }),\n  exerciseStatsSettings: v.object({\n    ascendingSort: v.optional(v.boolean()),\n    hideWithoutWorkoutNotes: v.optional(v.boolean()),\n    hideWithoutExerciseNotes: v.optional(v.boolean()),\n  }),\n  exercises: v.record(v.string(), v.optional(VCustomExercise)),\n  statsEnabled: VStatsEnabled,\n  units: VUnit,\n  lengthUnits: VLengthUnit,\n  volume: v.number(),\n  exerciseData: v.record(v.string(), v.optional(VExerciseDataValue)),\n  planner: VPlannerSettings,\n  workoutSettings: VWorkoutSettings,\n  muscleGroups: VMuscleGroupsSettings,\n  appleHealthSyncWorkout: v.optional(v.boolean()),\n  appleHealthSyncMeasurements: v.optional(v.boolean()),\n  appleHealthSyncSleepNutrition: v.optional(v.boolean()),\n  appleHealthAnchor: v.optional(v.string()),\n  googleHealthSyncWorkout: v.optional(v.boolean()),\n  googleHealthSyncMeasurements: v.optional(v.boolean()),\n  googleHealthSyncSleepNutrition: v.optional(v.boolean()),\n  googleHealthAnchor: v.optional(v.string()),\n  healthConfirmation: v.optional(v.boolean()),\n  ignoreDoNotDisturb: v.optional(v.boolean()),\n  currentGymId: v.optional(v.string()),\n  isPublicProfile: v.optional(v.boolean()),\n  nickname: v.optional(v.string()),\n  alwaysOnDisplay: v.optional(v.boolean()),\n  vibration: v.optional(v.boolean()),\n  startWeekFromMonday: v.optional(v.boolean()),\n  textSize: v.optional(v.number()),\n  starredExercises: v.optional(v.record(VExerciseId, v.optional(v.boolean()))),\n  recentExercises: v.optional(v.record(VExerciseId, v.optional(v.array(VExerciseId)))),\n  theme: v.optional(v.union([v.literal(\"dark\"), v.literal(\"light\")])),\n  currentBodyweight: v.optional(VWeight),\n  affiliateEnabled: v.optional(v.boolean()),\n});\nconst _VSettingsMatches: IEquals<v.InferOutput<typeof _VSettings>, ISettings> = true;\nvoid _VSettingsMatches;\nexport const VSettings: v.GenericSchema<ISettings> = _VSettings;\n\nexport interface IStats {\n  weight: IStatsWeight;\n  length: IStatsLength;\n  percentage: IStatsPercentage;\n  health?: IStatsHealth;\n}\nconst _VStats = v.object({\n  weight: VStatsWeight,\n  length: VStatsLength,\n  percentage: VStatsPercentage,\n  health: v.optional(VStatsHealth),\n});\nconst _VStatsMatches: IEquals<v.InferOutput<typeof _VStats>, IStats> = true;\nvoid _VStatsMatches;\nexport const VStats: v.GenericSchema<IStats> = _VStats;\n\nexport interface ISubscriptionReceipt {\n  vtype: \"subscription_receipt\";\n  id: string;\n  value: string;\n  createdAt: number;\n}\nconst _VSubscriptionReceipt = v.object({\n  vtype: v.literal(\"subscription_receipt\"),\n  id: v.string(),\n  value: v.string(),\n  createdAt: v.number(),\n});\nconst _VSubscriptionReceiptMatches: IEquals<v.InferOutput<typeof _VSubscriptionReceipt>, ISubscriptionReceipt> = true;\nvoid _VSubscriptionReceiptMatches;\nexport const VSubscriptionReceipt: v.GenericSchema<ISubscriptionReceipt> = _VSubscriptionReceipt;\n\nexport interface ISubscription {\n  apple: ISubscriptionReceipt[];\n  google: ISubscriptionReceipt[];\n  key?: string;\n}\nconst _VSubscription = v.object({\n  apple: v.array(VSubscriptionReceipt),\n  google: v.array(VSubscriptionReceipt),\n  key: v.optional(v.string()),\n});\nconst _VSubscriptionMatches: IEquals<v.InferOutput<typeof _VSubscription>, ISubscription> = true;\nvoid _VSubscriptionMatches;\nexport const VSubscription: v.GenericSchema<ISubscription> = _VSubscription;\n\nexport interface IAffiliateData {\n  id: string;\n  timestamp: number;\n  type: \"coupon\" | \"program\";\n  vtype: \"affiliate\";\n}\nconst _VAffiliateData = v.object({\n  id: v.string(),\n  timestamp: v.number(),\n  type: v.union([v.literal(\"coupon\"), v.literal(\"program\")]),\n  vtype: v.literal(\"affiliate\"),\n});\nconst _VAffiliateDataMatches: IEquals<v.InferOutput<typeof _VAffiliateData>, IAffiliateData> = true;\nvoid _VAffiliateDataMatches;\nexport const VAffiliateData: v.GenericSchema<IAffiliateData> = _VAffiliateData;\n\nexport interface IImportSession {\n  vtype: \"import_session\";\n  id: string;\n  timestamp: number;\n  source: \"hevy\" | \"liftosaurCsv\";\n  historyRecordIds: number[];\n  customExerciseIds: string[];\n  workoutCount: number;\n}\nconst _VImportSession = v.object({\n  vtype: v.literal(\"import_session\"),\n  id: v.string(),\n  timestamp: v.number(),\n  source: v.union([v.literal(\"hevy\"), v.literal(\"liftosaurCsv\")]),\n  historyRecordIds: v.array(v.number()),\n  customExerciseIds: v.array(v.string()),\n  workoutCount: v.number(),\n});\nconst _VImportSessionMatches: IEquals<v.InferOutput<typeof _VImportSession>, IImportSession> = true;\nvoid _VImportSessionMatches;\nexport const VImportSession: v.GenericSchema<IImportSession> = _VImportSession;\n\nexport interface IHearAboutUs {\n  result?: {\n    source: string;\n    detail?: string;\n    freeform?: string;\n    ts: number;\n  };\n  requests: number[];\n  done?: boolean;\n}\nconst _VHearAboutUs = v.object({\n  result: v.optional(\n    v.object({\n      source: v.string(),\n      detail: v.optional(v.string()),\n      freeform: v.optional(v.string()),\n      ts: v.number(),\n    })\n  ),\n  requests: v.array(v.number()),\n  done: v.optional(v.boolean()),\n});\nconst _VHearAboutUsMatches: IEquals<v.InferOutput<typeof _VHearAboutUs>, IHearAboutUs> = true;\nvoid _VHearAboutUsMatches;\nexport const VHearAboutUs: v.GenericSchema<IHearAboutUs> = _VHearAboutUs;\n\ninterface IStorageRaw {\n  history: IHistoryRecord[];\n  deletedHistory: number[];\n  stats: IStats;\n  deletedStats: number[];\n  settings: ISettings;\n  currentProgramId?: string;\n  version: string;\n  programs: IProgram[];\n  deletedPrograms: number[];\n  reviewRequests: number[];\n  signupRequests: number[];\n  hearAboutUs?: IHearAboutUs;\n  helps: string[];\n  tempUserId: string;\n  email?: string;\n  affiliates: Record<string, IAffiliateData | undefined>;\n  subscription: ISubscription;\n  whatsNew?: string;\n  progress: IHistoryRecord[];\n  originalId?: number;\n  id?: number;\n  referrer?: string;\n  landingPage?: string;\n  attribution?: string;\n  importSessions?: IImportSession[];\n  // Localized store prices (displayPrice strings keyed by product id) captured on a native device,\n  // synced so the web paywall can show the user's real prices instead of hardcoded US defaults.\n  subscriptionPrices?: Partial<Record<string, string>>;\n  _versions?: unknown;\n}\nconst _VStorage = v.object({\n  history: v.array(VHistoryRecord),\n  deletedHistory: v.array(v.number()),\n  stats: VStats,\n  deletedStats: v.array(v.number()),\n  settings: VSettings,\n  currentProgramId: v.optional(v.string()),\n  version: v.string(),\n  programs: v.array(VProgram),\n  deletedPrograms: v.array(v.number()),\n  reviewRequests: v.array(v.number()),\n  signupRequests: v.array(v.number()),\n  hearAboutUs: v.optional(_VHearAboutUs),\n  helps: v.array(v.string()),\n  tempUserId: v.string(),\n  email: v.optional(v.string()),\n  affiliates: v.record(v.string(), v.optional(VAffiliateData)),\n  subscription: VSubscription,\n  whatsNew: v.optional(v.string()),\n  progress: v.array(VHistoryRecord),\n  originalId: v.optional(v.number()),\n  id: v.optional(v.number()),\n  referrer: v.optional(v.string()),\n  landingPage: v.optional(v.string()),\n  attribution: v.optional(v.string()),\n  importSessions: v.optional(v.array(VImportSession)),\n  subscriptionPrices: v.optional(v.record(v.string(), v.optional(v.string()))),\n  _versions: v.optional(v.unknown()),\n});\nconst _VStorageMatches: IEquals<v.InferOutput<typeof _VStorage>, IStorageRaw> = true;\nvoid _VStorageMatches;\nexport const VStorage: v.GenericSchema<IStorageRaw> = _VStorage;\n\nexport interface IMuscleGeneratorResponse {\n  targetMuscles: IMuscle[];\n  synergistMuscles: IMuscle[];\n  types: IExerciseKind[];\n}\nconst _VMuscleGeneratorResponse = v.object({\n  targetMuscles: v.array(VMuscle),\n  synergistMuscles: v.array(VMuscle),\n  types: v.array(VExerciseKind),\n});\nconst _VMuscleGeneratorResponseMatches: IEquals<\n  v.InferOutput<typeof _VMuscleGeneratorResponse>,\n  IMuscleGeneratorResponse\n> = true;\nvoid _VMuscleGeneratorResponseMatches;\nexport const VMuscleGeneratorResponse: v.GenericSchema<IMuscleGeneratorResponse> = _VMuscleGeneratorResponse;\n\nexport function vIs<T>(schema: v.GenericSchema<T>): { is: (u: unknown) => boolean } {\n  return { is: (u: unknown): boolean => v.safeParse(schema, u).success };\n}\n\nexport type IStorage = Omit<IStorageRaw, \"_versions\"> & {\n  _versions?: IVersions<Omit<IStorageRaw, \"_versions\">>;\n};\n\nexport type IPartialStorage = Omit<IStorage, \"history\" | \"stats\" | \"programs\"> &\n  Partial<Pick<IStorage, \"history\" | \"stats\" | \"programs\">>;\n\nexport type IProgramContentSettings = Partial<\n  Pick<ISettings, \"units\" | \"planner\" | \"muscleGroups\" | \"exerciseData\" | \"workoutSettings\"> & {\n    timers: Partial<ISettings[\"timers\"]>;\n  }\n>;\n\nexport type IDayData = {\n  week?: number;\n  day: number;\n  dayInWeek?: number;\n};\n\nexport type IShortDayData = {\n  week: number;\n  dayInWeek: number;\n};\n\nexport type IDaySetData = {\n  week: number;\n  dayInWeek: number;\n  setVariation: number;\n  set: number;\n};\n\nexport const ATOMIC_TYPES = [\n  \"history_record\",\n  \"progress_ui\",\n  \"set\",\n  \"equipment_data\",\n  \"custom_exercise\",\n  \"planner\",\n  \"stat\",\n  \"graph\",\n  \"graphs\",\n  \"subscription_receipt\",\n  \"affiliate\",\n  \"muscle_groups_settings\",\n  \"import_session\",\n] as const;\n\nexport type IAtomicType = (typeof ATOMIC_TYPES)[number];\n\nexport const CONTROLLED_TYPES = [\"program\", \"gym\", \"progress\", \"history_entry\"] as const;\n\nexport type IControlledType = (typeof CONTROLLED_TYPES)[number];\n\nexport const CONTROLLED_FIELDS: Record<IControlledType, readonly string[]> = {\n  program: [\"name\", \"nextDay\", \"planner\"] as const,\n  gym: [\"name\", \"equipment\"] as const,\n  progress: [\n    \"entries\",\n    \"endTime\",\n    \"intervals\",\n    \"notes\",\n    \"deletedProgramExercises\",\n    \"userPromptedStateVars\",\n    \"updatedAt\",\n    \"changes\",\n    \"timerSince\",\n    \"timerMode\",\n    \"timer\",\n    \"timerEntryIndex\",\n    \"timerSetIndex\",\n    \"setTimer\",\n    \"amrapModal\",\n    \"currentEntryIndex\",\n  ] as const,\n  history_entry: [\n    \"exercise\",\n    \"sets\",\n    \"warmupSets\",\n    \"index\",\n    \"isSuppressed\",\n    \"programExerciseId\",\n    \"state\",\n    \"vars\",\n    \"notes\",\n    \"changed\",\n    \"superset\",\n    \"updatePrints\",\n  ] as const,\n};\n\nexport const TYPE_ID_MAPPING: Record<IAtomicType | IControlledType, string> = {\n  affiliate: \"id\",\n  program: \"clonedAt\",\n  history_record: \"id\",\n  set: \"id\",\n  progress_ui: \"id\",\n  history_entry: \"id\",\n  progress: \"startTime\",\n  gym: \"id\",\n  custom_exercise: \"id\",\n  stat: \"timestamp\",\n  equipment_data: \"id\",\n  planner: \"name\",\n  subscription_receipt: \"id\",\n  graph: \"id\",\n  graphs: \"id\",\n  muscle_groups_settings: \"vtype\",\n  import_session: \"id\",\n};\n\nexport const DICTIONARY_FIELDS = [\n  \"settings.exercises\",\n  \"settings.exerciseData\",\n  \"settings.gyms.equipment\",\n  \"affiliates\",\n] as const;\n\nexport type IDictionaryFieldPath = (typeof DICTIONARY_FIELDS)[number];\n\nexport const EXCLUDED_FIELDS: Partial<Record<IControlledType, readonly string[]>> = {\n  progress: [\"ui\"] as const,\n};\n\nexport const STORAGE_VERSION_TYPES: IVersionTypes<IAtomicType, IControlledType> = {\n  atomicTypes: ATOMIC_TYPES,\n  controlledTypes: CONTROLLED_TYPES,\n  typeIdMapping: TYPE_ID_MAPPING,\n  controlledFields: CONTROLLED_FIELDS,\n  excludedFields: EXCLUDED_FIELDS,\n  dictionaryFields: DICTIONARY_FIELDS,\n  compactionThresholds: {\n    \"subscription.apple\": 14 * 24 * 60 * 60 * 1000,\n    \"subscription.google\": 14 * 24 * 60 * 60 * 1000,\n  },\n  typeValidators: {\n    progress: vIs(VHistoryRecord),\n  },\n} as const;\n","import { IAttributionData } from \"../models/state\";\n\nexport interface IAnalyticsPurchaseEvent {\n  productId: string;\n  price: number;\n  currency: string;\n  transactionId?: string;\n  transactionDate?: number;\n}\n\nexport interface IAnalyticsInitOptions {\n  userId?: string;\n  onAttribution: (data: IAttributionData) => void;\n  onLandingPage?: (landingPage: string) => void;\n}\n\nexport function Analytics_initialize(_opts: IAnalyticsInitOptions): () => void {\n  return () => undefined;\n}\n\nexport function Analytics_setUserId(_userId: string): void {}\n\nexport function Analytics_trackFinishWorkout(): void {}\n\nexport function Analytics_trackSignUp(): void {}\n\nexport function Analytics_trackPurchase(_event: IAnalyticsPurchaseEvent): void {}\n\nexport const Analytics_platform = \"web\";\n\nexport type { IAttributionData };\n","import {\n  SendMessage_isIos,\n  SendMessage_isAndroid,\n  SendMessage_iosAppVersion,\n  SendMessage_androidAppVersion,\n  SendMessage_iosVersion,\n  SendMessage_androidVersion,\n} from \"./sendMessage\";\n\nexport interface IAppAttribution {\n  isMobile: boolean;\n  iOSVersion?: number;\n  androidVersion?: number;\n  iOSOSVersion?: number;\n  androidOSVersion?: number;\n  deviceModel?: string;\n}\n\nexport function AppAttribution_get(): IAppAttribution {\n  const isIos = SendMessage_isIos();\n  const isAndroid = SendMessage_isAndroid();\n  return {\n    isMobile: isIos || isAndroid,\n    iOSVersion: isIos ? SendMessage_iosAppVersion() : undefined,\n    androidVersion: isAndroid ? SendMessage_androidAppVersion() : undefined,\n    iOSOSVersion: isIos ? SendMessage_iosVersion() : undefined,\n    androidOSVersion: isAndroid ? SendMessage_androidVersion() : undefined,\n  };\n}\n","import { Platform } from \"react-native\";\n\ndeclare let __HOST__: string;\n\nexport type IAppleAuthResult =\n  | { type: \"success\"; id_token: string; code: string }\n  | { type: \"cancelled\" }\n  | { type: \"error\"; error: string };\n\ntype IAppleAuthSdk = NonNullable<Window[\"AppleID\"]>[\"auth\"];\n\nconst mountSdkWaitMs = 10000;\n// Browsers drop transient user activation ~5s after the click, and signIn() opens a popup, so waiting\n// out the full mount-time budget here would just trade the init error for a blocked popup. Bailing early\n// instead means the retry succeeds — by then the mount-time wait has init'ed the SDK.\nconst clickSdkWaitMs = 2000;\nconst sdkPollIntervalMs = 50;\n\nconst cancelErrorCodes = [\"popup_closed_by_user\", \"user_cancelled_authorize\", \"user_trigger_new_signin_flow\"];\n\n// appleid.auth.js is loaded with `async`, so it may land after the account screen mounts. Polling instead of\n// checking once means a slow script (common in Firefox, which rarely serves it from a warm cache) still gets\n// init'ed rather than silently leaving signIn() to throw 'The \"init\" function must be called first.'\nasync function waitForSdk(timeoutMs: number): Promise<IAppleAuthSdk | undefined> {\n  const deadline = Date.now() + timeoutMs;\n  while (window.AppleID?.auth == null) {\n    if (Date.now() > deadline) {\n      return undefined;\n    }\n    await new Promise((resolve) => setTimeout(resolve, sdkPollIntervalMs));\n  }\n  return window.AppleID.auth;\n}\n\nexport async function AppleAuth_init(timeoutMs: number = mountSdkWaitMs): Promise<boolean> {\n  if (Platform.OS !== \"web\" || typeof window === \"undefined\") {\n    return false;\n  }\n  const auth = await waitForSdk(timeoutMs);\n  if (auth == null) {\n    return false;\n  }\n  auth.init({\n    clientId: \"com.liftosaur.www.signinapple\",\n    scope: \"email\",\n    redirectURI: `${__HOST__}/appleauthcallback.html`,\n    usePopup: true,\n  });\n  return true;\n}\n\nexport async function AppleAuth_signIn(): Promise<IAppleAuthResult> {\n  // When the SDK is already loaded this resolves without yielding to the event loop, so the popup opened by\n  // signIn() still runs under the click's transient user activation and isn't blocked.\n  const isInitialized = await AppleAuth_init(clickSdkWaitMs);\n  if (!isInitialized || window.AppleID?.auth == null) {\n    return { type: \"error\", error: \"Apple Sign In is still loading. Please try again in a moment.\" };\n  }\n  try {\n    const response = await window.AppleID.auth.signIn();\n    const { id_token, code } = response.authorization;\n    if (id_token == null || code == null) {\n      return { type: \"error\", error: \"Apple Sign In didn't return the credentials\" };\n    }\n    return { type: \"success\", id_token, code };\n  } catch (e) {\n    const error = e as { error?: string } | undefined;\n    if (error?.error != null && cancelErrorCodes.indexOf(error.error) !== -1) {\n      return { type: \"cancelled\" };\n    }\n    return { type: \"error\", error: \"Couldn't sign in with Apple. Please try again.\" };\n  }\n}\n","import { createContext, useCallback, useContext } from \"react\";\nimport type { IDispatch } from \"../ducks/types\";\nimport { Thunk_log, Thunk_postevent } from \"../ducks/thunks\";\n\nexport const ClickTrackingContext = createContext<IDispatch | null>(null);\n\nexport function useTrackClick(): (name: string, className?: string) => void {\n  const dispatch = useContext(ClickTrackingContext);\n  return useCallback(\n    (name: string, className?: string) => {\n      if (!dispatch) {\n        return;\n      }\n      const lsClass = className?.split(/\\s+/).find((c) => c.startsWith(\"ls-\"));\n      const eventName = lsClass || `nm-${name}`;\n      dispatch(Thunk_postevent(\"click-\" + eventName));\n      if (lsClass) {\n        dispatch(Thunk_log(lsClass));\n      }\n    },\n    [dispatch]\n  );\n}\n","import { SendMessage_toIos } from \"./sendMessage\";\nimport { IEither } from \"./types\";\n\nexport async function ClipboardUtils_paste(): Promise<string | undefined> {\n  if (!navigator.clipboard) {\n    return fallbackReadTextFromClipboard();\n  } else {\n    try {\n      const result = await readTextFromClipboard();\n      if (result.success) {\n        return result.data;\n      } else {\n        return fallbackReadTextFromClipboard();\n      }\n    } catch (e) {\n      return fallbackReadTextFromClipboard();\n    }\n  }\n}\n\nexport async function ClipboardUtils_copy(text: string): Promise<void> {\n  if (!SendMessage_toIos({ type: \"copyToClipboard\", value: text })) {\n    if (!navigator.clipboard) {\n      fallbackCopyTextToClipboard(text);\n    } else {\n      try {\n        await copyTextToClipboard(text);\n        fallbackCopyTextToClipboard(text);\n      } catch (e) {\n        fallbackCopyTextToClipboard(text);\n      }\n    }\n  }\n}\n\nfunction fallbackCopyTextToClipboard(text: string): void {\n  window.disableCopying = true;\n  const textArea = document.createElement(\"textarea\");\n  textArea.value = text;\n\n  textArea.style.top = \"0\";\n  textArea.style.left = \"0\";\n  textArea.style.position = \"fixed\";\n\n  document.body.appendChild(textArea);\n  textArea.focus();\n  textArea.select();\n\n  document.execCommand(\"copy\");\n  document.body.removeChild(textArea);\n  window.disableCopying = false;\n}\n\nfunction copyTextToClipboard(text: string): Promise<boolean> {\n  return new Promise(async (resolve, reject) => {\n    try {\n      navigator.permissions\n        .query({ name: \"clipboard-write\" as PermissionName })\n        .then(async (result) => {\n          if (result.state === \"granted\" || result.state === \"prompt\") {\n            await navigator.clipboard.writeText(text);\n            resolve(true);\n          } else {\n            resolve(false);\n          }\n        })\n        .catch(async () => {\n          try {\n            await navigator.clipboard.writeText(text);\n            resolve(true);\n          } catch (e) {\n            resolve(false);\n          }\n        });\n    } catch (_) {\n      try {\n        await navigator.clipboard.writeText(text);\n        resolve(true);\n      } catch (e) {\n        resolve(false);\n      }\n    }\n  });\n}\n\nexport async function ClipboardUtils_canReadTextFromClipboard(): Promise<boolean> {\n  try {\n    const queryResult = await navigator.permissions.query({ name: \"clipboard-read\" as PermissionName });\n    return queryResult.state === \"granted\" || queryResult.state === \"prompt\";\n  } catch (_) {\n    return false;\n  }\n}\n\nasync function readTextFromClipboard(): Promise<IEither<string | undefined, undefined>> {\n  try {\n    const queryResult = await navigator.permissions.query({ name: \"clipboard-read\" as PermissionName });\n    if (queryResult.state === \"granted\" || queryResult.state === \"prompt\") {\n      return { success: true, data: await navigator.clipboard.readText() };\n    } else {\n      throw new Error(\"Can't read from clipboard\");\n    }\n  } catch (_) {\n    try {\n      return { success: true, data: await navigator.clipboard.readText() };\n    } catch {\n      return { success: false, error: undefined };\n    }\n  }\n}\n\nfunction fallbackReadTextFromClipboard(): string | undefined {\n  const contentEditableElement = document.createElement(\"div\");\n  contentEditableElement.contentEditable = \"true\";\n  document.body.appendChild(contentEditableElement);\n  contentEditableElement.focus();\n\n  document.execCommand(\"paste\");\n  const result = contentEditableElement.innerText;\n  document.body.removeChild(contentEditableElement);\n  return result;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n// inGroupsOf([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 3).forEach((e) => print(e));\n//\n// [\"1\", \"2\", \"3\"]\n// [\"4\", \"5\", \"6\"]\n// [\"7\", \"8\", \"9\"]\n// [\"10\"]\nexport function CollectionUtils_inGroupsOf<T>(length: number, collection: T[]): T[][] {\n  if (collection.length > 0) {\n    const result: T[][] = [[]];\n    collection.forEach((item) => {\n      let lastColl = result[result.length - 1];\n      if (lastColl.length >= length) {\n        lastColl = [];\n        result.push(lastColl);\n      }\n      lastColl.push(item);\n    });\n\n    return result;\n  } else {\n    return [];\n  }\n}\n\nexport function CollectionUtils_splitIntoNGroups<T>(coll: T[], numberOfGroups: number): T[][] {\n  const result: T[][] = [];\n  for (let i = 0; i < numberOfGroups; i += 1) {\n    result.push([]);\n  }\n  let index = 0;\n  for (const item of coll) {\n    result[index].push(item);\n    index += 1;\n    if (index >= numberOfGroups) {\n      index = 0;\n    }\n  }\n  return result;\n}\n\nexport function CollectionUtils_inGroupsOfFilled<T>(\n  length: number,\n  collection: T[],\n  shouldFill?: boolean\n): (T | undefined)[][] {\n  const result = CollectionUtils_inGroupsOf(length, collection) as (T | undefined)[][];\n  if (result.length > 0) {\n    const lastColl = result[result.length - 1];\n    if (lastColl != null) {\n      for (let i = 0; i < length; i += 1) {\n        lastColl[i] = lastColl[i] ?? undefined;\n      }\n    }\n  }\n  return result;\n}\n\nexport function CollectionUtils_groupBy<T>(items: T[], cond: (last: T, item: T) => boolean): T[][] {\n  return items.reduce<T[][]>(\n    (memo, set) => {\n      let lastGroup = memo[memo.length - 1];\n      const last = lastGroup[lastGroup.length - 1];\n      if (last != null && cond(last, set)) {\n        memo.push([]);\n        lastGroup = memo[memo.length - 1];\n      }\n      lastGroup.push(set);\n      return memo;\n    },\n    [[]]\n  );\n}\n\nexport function CollectionUtils_repeat<T>(el: T, length: number): T[] {\n  const arr: T[] = [];\n  for (let i = 0; i < length; i += 1) {\n    arr.push(el);\n  }\n  return arr;\n}\n\nexport function CollectionUtils_concatBy<T>(from: T[], to: T[], condition: (el: T) => string): T[] {\n  const map = [...from, ...to].reduce<Record<string, T>>((memo, item) => {\n    memo[condition(item)] = item;\n    return memo;\n  }, {});\n  return Object.keys(map).map((key) => map[key]);\n}\n\nexport function CollectionUtils_compatBy<T>(arr: T[], condition: (el: T) => string): T[] {\n  const map = arr.reduce<Record<string, T>>((memo, item) => {\n    memo[condition(item)] = item;\n    return memo;\n  }, {});\n  return Object.keys(map).map((key) => map[key]);\n}\n\nexport function CollectionUtils_compact<T>(arr: (T | undefined)[]): T[] {\n  return arr.filter((i) => i) as T[];\n}\n\nexport function CollectionUtils_groupByKey<\n  T,\n  K extends keyof T,\n  U extends T[K] extends string ? string : T[K] extends number ? number : never,\n>(arr: T[], key: K): Partial<Record<U, T[]>> {\n  return arr.reduce<Partial<Record<U, T[]>>>((memo, item) => {\n    const value = item[key] as unknown as U;\n    memo[value] = memo[value] || [];\n    memo[value]!.push(item);\n    return memo;\n  }, {});\n}\n\nexport function CollectionUtils_groupByExpr<T>(arr: T[], expr: (item: T) => string): Partial<Record<string, T[]>> {\n  return arr.reduce<Partial<Record<string, T[]>>>((memo, item) => {\n    const value = expr(item);\n    memo[value] = memo[value] || [];\n    memo[value]!.push(item);\n    return memo;\n  }, {});\n}\n\nexport function CollectionUtils_groupByKeyUniq<\n  T,\n  K extends keyof T,\n  U extends T[K] extends string ? string : T[K] extends number ? number : never,\n>(arr: T[], key: K): Partial<Record<U, T>> {\n  return arr.reduce<Partial<Record<U, T>>>((memo, item) => {\n    const value = item[key] as unknown as U;\n    memo[value] = item;\n    return memo;\n  }, {});\n}\n\nexport function CollectionUtils_groupByExprUniq<T>(arr: T[], expr: (item: T) => string): Partial<Record<string, T>> {\n  return arr.reduce<Partial<Record<string, T>>>((memo, item) => {\n    const value = expr(item);\n    memo[value] = item;\n    return memo;\n  }, {});\n}\n\nexport function CollectionUtils_collectToSet<T, K extends keyof T>(arr: T[], key: K): Set<T[K]> {\n  const set = new Set<T[K]>();\n  for (const el of arr) {\n    set.add(el[key]);\n  }\n  return set;\n}\n\nexport function CollectionUtils_collectToSetTransform<T, K extends keyof T, U>(\n  arr: T[],\n  key: K,\n  transformer: (val: T[K]) => U\n): Set<U> {\n  const set = new Set<U>();\n  for (const el of arr) {\n    set.add(transformer(el[key]));\n  }\n  return set;\n}\n\nexport function CollectionUtils_flat<T>(from: T[][]): T[] {\n  return from.reduce((acc, val) => acc.concat(val), []);\n}\n\nexport function CollectionUtils_sort<T>(arr: T[], compareFn?: (a: T, b: T) => number): T[] {\n  const arrCopy = [...arr];\n  arrCopy.sort(compareFn);\n  return arrCopy;\n}\n\nexport function CollectionUtils_immutableSort<T>(arr: T[], compare: (a: T, b: T) => number): T[] {\n  for (let i = 1; i < arr.length; i++) {\n    if (compare(arr[i - 1], arr[i]) > 0) {\n      return arr.slice().sort(compare);\n    }\n  }\n  return arr;\n}\n\nexport function CollectionUtils_reorder<T>(arr: T[], start: number, end: number): T[] {\n  const newDays = [...arr];\n  const [daysToMove] = newDays.splice(start, 1);\n  newDays.splice(end, 0, daysToMove);\n  return newDays;\n}\n\nexport function CollectionUtils_sortInOrder<T extends {}, K extends keyof T>(arr: T[], key: K, order: T[K][]): T[] {\n  const arrCopy = [...arr];\n  arrCopy.sort((a, b) => {\n    const aIndex = order.indexOf(a[key]);\n    const bIndex = order.indexOf(b[key]);\n    if (aIndex === -1) {\n      return 1;\n    } else if (bIndex === -1) {\n      return -1;\n    } else {\n      return aIndex - bIndex;\n    }\n  });\n  return arrCopy;\n}\n\nexport function CollectionUtils_sortByMultiple<T extends {}, K extends keyof T>(\n  arr: T[],\n  keys: K[],\n  isReverse?: boolean\n): T[] {\n  const arrCopy = [...arr];\n  arrCopy.sort((a, b) => {\n    for (const key of keys) {\n      const aVal = a[key] as any;\n      const bVal = b[key] as any;\n      if (aVal === bVal) {\n        continue;\n      } else {\n        if (typeof aVal === \"number\" && typeof bVal === \"number\") {\n          return isReverse ? bVal - aVal : aVal - bVal;\n        } else if (typeof aVal === \"string\" && typeof bVal === \"string\") {\n          return isReverse ? bVal.localeCompare(aVal) : aVal.localeCompare(bVal);\n        } else if (typeof aVal === \"boolean\" && typeof bVal === \"boolean\") {\n          return isReverse ? (bVal ? -1 : 1) : aVal ? -1 : 1;\n        } else if (aVal == null || bVal == null) {\n          return isReverse ? (bVal == null ? -1 : 1) : aVal == null ? -1 : 1;\n        }\n      }\n    }\n    return 0;\n  });\n\n  return arrCopy as any;\n}\n\nexport function CollectionUtils_sortBy<T extends {}, K extends keyof T>(\n  arr: T[],\n  key: K,\n  isReverse?: boolean\n): T[K] extends number ? T[] : never {\n  const arrCopy = [...arr];\n  arrCopy.sort((a, b) => {\n    const aVal = a[key] as any;\n\n    const bVal = b[key] as any;\n    return isReverse ? bVal - aVal : aVal - bVal;\n  });\n\n  return arrCopy as any;\n}\n\nexport function CollectionUtils_sortByExpr<T extends {}>(arr: T[], fn: (item: T) => number, isReverse?: boolean): T[] {\n  const arrCopy = [...arr];\n  arrCopy.sort((a, b) => {\n    const aVal = fn(a) as any;\n\n    const bVal = fn(b) as any;\n    return isReverse ? bVal - aVal : aVal - bVal;\n  });\n\n  return arrCopy as any;\n}\n\nexport function CollectionUtils_diff<T>(from: T[], to: T[]): T[] {\n  return from.filter((x) => !to.includes(x)).concat(to.filter((x) => !from.includes(x)));\n}\n\nexport function CollectionUtils_diffBy<T extends {}>(from: T[], to: T[], key: keyof T): T[] {\n  return from\n    .filter((x) => !to.some((y) => x[key] === y[key]))\n    .concat(to.filter((x) => !from.some((y) => x[key] === y[key])));\n}\n\nexport function CollectionUtils_remove<T>(from: T[], item: T): T[] {\n  return from.filter((t) => t !== item);\n}\n\nexport function CollectionUtils_removeAll<T>(from: T[], item: T[]): T[] {\n  return from.filter((t) => !item.includes(t));\n}\n\nexport function CollectionUtils_removeAt<T>(from: T[], index: number): T[] {\n  const result = [...from];\n  result.splice(index, 1);\n  return result;\n}\n\nexport function CollectionUtils_setAt<T>(from: T[], index: number, item: T): T[] {\n  return from.map((e, i) => (i === index ? item : e));\n}\n\nexport function CollectionUtils_setBy<T extends {}, K extends keyof T, V extends T[K]>(\n  from: T[],\n  key: K,\n  value: V,\n  newItem: T\n): T[] {\n  return from.map((e) => (e[key] === value ? newItem : e));\n}\n\nexport function CollectionUtils_setOrAddBy<T extends {}, K extends keyof T, V extends T[K]>(\n  from: T[],\n  key: K,\n  value: V,\n  newItem: T\n): T[] {\n  const hasKeyValue = from.some((e) => e[key] === value);\n  if (hasKeyValue) {\n    return CollectionUtils_setBy(from, key, value, newItem);\n  } else {\n    return [...from, newItem];\n  }\n}\n\nexport function CollectionUtils_removeBy<T extends {}, K extends keyof T, V extends T[K]>(\n  from: T[],\n  key: K,\n  value: V\n): T[] {\n  return from.filter((t) => t[key] !== value);\n}\n\nexport function CollectionUtils_nonnull<T>(from: (T | undefined)[]): T[] {\n  return from.filter((t) => t != null) as T[];\n}\n\nexport function CollectionUtils_uniqBy<T extends {}>(from: T[], key: keyof T): T[] {\n  const set = new Set();\n  const result = [];\n  for (const el of from) {\n    const id = el[key];\n    if (!set.has(id)) {\n      result.push(el);\n      set.add(id);\n    }\n  }\n  return result;\n}\n\nexport function CollectionUtils_uniqByExpr<T extends {}, V>(from: T[], fn: (item: T) => V): T[] {\n  const set = new Set();\n  const result = [];\n  for (const el of from) {\n    const id = fn(el);\n    if (!set.has(id)) {\n      result.push(el);\n      set.add(id);\n    }\n  }\n  return result;\n}\n\nexport function CollectionUtils_findBy<T extends {}, K extends keyof T>(from: T[], key: K, value: T[K]): T | undefined {\n  let result: T | undefined = undefined;\n  for (const el of from) {\n    if (el[key] === value) {\n      result = el;\n      break;\n    }\n  }\n  return result;\n}\n\nexport function CollectionUtils_findIndexReverse<T>(from: T[], cb: (item: T) => boolean): number {\n  for (let i = from.length - 1; i >= 0; i -= 1) {\n    if (cb(from[i])) {\n      return i;\n    }\n  }\n  return -1;\n}\n\nexport function CollectionUtils_merge<T>(from: T[], to: T[]): T[] {\n  return Array.from(new Set([...from, ...to]));\n}\n\nexport function CollectionUtils_compressArray(arr: number[], threshold: number): string[] {\n  const result: string[] = [];\n  let count = 1;\n\n  for (let i = 1; i <= arr.length; i++) {\n    if (arr[i] === arr[i - 1]) {\n      count += 1;\n    } else {\n      if (count >= threshold) {\n        result.push(`${count}x${arr[i - 1]}`);\n      } else {\n        while (count > 0) {\n          result.push(`${arr[i - 1]}`);\n          count -= 1;\n        }\n      }\n      count = 1;\n    }\n  }\n\n  return result;\n}\n\nexport function CollectionUtils_areSortedInSameOrder<T, U>(\n  coll1: T[],\n  coll2: U[],\n  areEqual: (a: T, b: U) => boolean\n): boolean {\n  if (coll1.length !== coll2.length) {\n    return false;\n  }\n  for (let i = 0; i < coll1.length; i += 1) {\n    if (!areEqual(coll1[i], coll2[i])) {\n      return false;\n    }\n  }\n  return true;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport type ICollectorFn<T, U> = { fn: (acc: U, item: T) => U; initial: U };\n\ntype IValuesFromCallbacks<V> = V extends [infer A, ...infer B]\n  ? A extends ICollectorFn<any, infer C>\n    ? [C, ...IValuesFromCallbacks<B>]\n    : never\n  : [];\n\nexport class Collector<ItemType, T extends ICollectorFn<ItemType, any>[] = []> {\n  private readonly callbacks: T;\n\n  public static build<IT>(items: IT[]): Collector<IT> {\n    return new Collector(items, []);\n  }\n\n  private constructor(\n    private readonly collection: ItemType[],\n    callbacks: T\n  ) {\n    this.callbacks = callbacks;\n  }\n\n  public addFn<U>(\n    callback: ICollectorFn<ItemType, U>\n  ): Collector<ItemType, T extends never[] ? [ICollectorFn<ItemType, U>] : [...T, ICollectorFn<ItemType, U>]> {\n    return new Collector(this.collection, [...this.callbacks, callback]) as any;\n  }\n\n  public add<U>(\n    fn: ICollectorFn<ItemType, U>[\"fn\"],\n    initial: U\n  ): Collector<ItemType, T extends never[] ? [ICollectorFn<ItemType, U>] : [...T, ICollectorFn<ItemType, U>]> {\n    const callback = { fn, initial };\n    return new Collector(this.collection, [...this.callbacks, callback]) as any;\n  }\n\n  public run(): IValuesFromCallbacks<T> {\n    const values = this.callbacks.map((callback) => callback.initial);\n    for (const item of this.collection) {\n      for (let i = 0; i < this.callbacks.length; i += 1) {\n        values[i] = this.callbacks[i].fn(values[i], item);\n      }\n    }\n    return values as any;\n  }\n}\n","import { ObjectUtils_keys } from \"./object\";\n\nexport function ComparerUtils_noFns<T extends object>(prev: T, next: T): boolean {\n  if (Object.keys(prev).length !== Object.keys(next).length) {\n    return false;\n  } else {\n    const result = ObjectUtils_keys(prev).every((key) => {\n      if (typeof prev[key] !== \"function\") {\n        const result2 = prev[key] === next[key];\n        return result2;\n      } else {\n        return true;\n      }\n    });\n    return result;\n  }\n}\n","export function CSV_toString(data: (number | string | null)[][]): string {\n  return data\n    .map((line) => {\n      return line\n        .map((value) => {\n          let shouldWrapIntoQuotes = false;\n          if (typeof value === \"string\") {\n            if (value.indexOf(\",\") !== -1 || value.indexOf(\"\\n\") !== -1 || value.indexOf(\"\\r\") !== -1) {\n              shouldWrapIntoQuotes = true;\n            }\n            if (value.indexOf('\"') !== -1) {\n              shouldWrapIntoQuotes = true;\n              value = value.replace(/\"/g, '\"\"');\n            }\n            if (shouldWrapIntoQuotes) {\n              value = `\"${value}\"`;\n            }\n          }\n          if (value === null) {\n            value = \"\";\n          }\n          return value;\n        })\n        .join(\",\");\n    })\n    .join(\"\\n\");\n}\n","export function DateUtils_format(dateStr: string | Date | number, hideWeekday?: boolean, hideYear?: boolean): string {\n  let date;\n  if (typeof dateStr === \"string\") {\n    date = new Date(Date.parse(dateStr));\n  } else if (typeof dateStr === \"number\") {\n    date = new Date(dateStr);\n  } else {\n    date = dateStr;\n  }\n  return date.toLocaleDateString(undefined, {\n    weekday: !hideWeekday ? \"short\" : undefined,\n    year: !hideYear ? \"numeric\" : undefined,\n    month: \"short\",\n    day: \"numeric\",\n  });\n}\n\nexport function DateUtils_formatWithTime(dateStr: string | Date | number): string {\n  let date;\n  if (typeof dateStr === \"string\") {\n    date = new Date(Date.parse(dateStr));\n  } else if (typeof dateStr === \"number\") {\n    date = new Date(dateStr);\n  } else {\n    date = dateStr;\n  }\n  return date.toLocaleDateString(undefined, {\n    weekday: \"short\",\n    year: \"numeric\",\n    month: \"short\",\n    day: \"numeric\",\n    hour: \"numeric\",\n    minute: \"numeric\",\n  });\n}\n\nexport function DateUtils_formatYYYYMMDD(date: Date | string | number, separator: string = \"-\"): string {\n  const d = new Date(date);\n  let month = `${d.getMonth() + 1}`;\n  let day = `${d.getDate()}`;\n  const year = `${d.getFullYear()}`;\n\n  if (month.length < 2) {\n    month = `0${month}`;\n  }\n  if (day.length < 2) {\n    day = `0${day}`;\n  }\n\n  return [year, month, day].join(separator);\n}\n\nexport function DateUtils_formatUTCYYYYMMDD(date: Date | string | number): string {\n  const d = new Date(date);\n  let month = `${d.getUTCMonth() + 1}`;\n  let day = `${d.getUTCDate()}`;\n  const year = `${d.getUTCFullYear()}`;\n\n  if (month.length < 2) {\n    month = `0${month}`;\n  }\n  if (day.length < 2) {\n    day = `0${day}`;\n  }\n\n  return [year, month, day].join(\"-\");\n}\n\nexport function DateUtils_formatUTCYYYYMMDDHHMM(date: Date | string | number): string {\n  const d = new Date(date);\n  let minutes = `${d.getUTCMinutes()}`;\n  let hours = `${d.getUTCHours()}`;\n  let day = `${d.getUTCDate()}`;\n  let month = `${d.getUTCMonth() + 1}`;\n  const year = `${d.getUTCFullYear()}`;\n\n  if (minutes.length < 2) {\n    minutes = `0${minutes}`;\n  }\n  if (hours.length < 2) {\n    hours = `0${hours}`;\n  }\n  if (month.length < 2) {\n    month = `0${month}`;\n  }\n  if (day.length < 2) {\n    day = `0${day}`;\n  }\n\n  return `${[year, month, day].join(\"-\")} ${hours}:${minutes}`;\n}\n\nexport function DateUtils_parseYYYYMMDDHHMM(dateStr: string): Date | undefined {\n  const match = dateStr.match(/^(\\d{4})(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})$/);\n  if (match != null) {\n    const [, year, month, day, hours, minutes, seconds] = match;\n    return new Date(\n      new Date(\n        parseInt(year, 10),\n        parseInt(month, 10) - 1,\n        parseInt(day, 10),\n        parseInt(hours, 10),\n        parseInt(minutes, 10),\n        parseInt(seconds, 10)\n      )\n    );\n  }\n  return undefined;\n}\n\nexport function DateUtils_formatYYYYMMDDHHMM(date: Date | string | number, separator: string = \"\"): string {\n  const d = new Date(date);\n  let seconds = `${d.getSeconds()}`;\n  let minutes = `${d.getMinutes()}`;\n  let hours = `${d.getHours()}`;\n  let day = `${d.getDate()}`;\n  let month = `${d.getMonth() + 1}`;\n  const year = `${d.getFullYear()}`;\n\n  if (seconds.length < 2) {\n    seconds = `0${seconds}`;\n  }\n  if (minutes.length < 2) {\n    minutes = `0${minutes}`;\n  }\n  if (hours.length < 2) {\n    hours = `0${hours}`;\n  }\n  if (month.length < 2) {\n    month = `0${month}`;\n  }\n  if (day.length < 2) {\n    day = `0${day}`;\n  }\n\n  return [year, month, day, hours, minutes, seconds].join(separator);\n}\n\nexport function DateUtils_firstDayOfWeekTimestamp(date: Date | number, startWeekFromMonday?: boolean): number {\n  const d = new Date(date);\n  let weekDay = d.getDay();\n  if (startWeekFromMonday && weekDay === 0) {\n    weekDay = 7;\n  }\n  const currentDay = d.getDate();\n  const beginningOfWeekDay = currentDay - weekDay + (startWeekFromMonday ? 1 : 0);\n  const newDate = new Date(d.getFullYear(), d.getMonth(), beginningOfWeekDay);\n  return newDate.getTime();\n}\n\nexport function DateUtils_lastDayOfWeekTimestamp(date: Date | number, startWeekFromMonday?: boolean): number {\n  const d = new Date(date);\n  let weekDay = d.getDay();\n  if (startWeekFromMonday && weekDay === 0) {\n    weekDay = 7;\n  }\n  const currentDay = d.getDate();\n  const endOfWeekDay = currentDay + (7 - weekDay) + (startWeekFromMonday ? 1 : 0);\n  const newDate = new Date(d.getFullYear(), d.getMonth(), endOfWeekDay, 23, 59, 59);\n  return newDate.getTime();\n}\n\nexport function DateUtils_formatHHMMSS(date: Date | string | number, withMs: boolean = false): string {\n  const d = new Date(date);\n  let seconds = `${d.getSeconds()}`;\n  let minutes = `${d.getMinutes()}`;\n  let hours = `${d.getHours()}`;\n\n  if (seconds.length < 2) {\n    seconds = `0${seconds}`;\n  }\n  if (minutes.length < 2) {\n    minutes = `0${minutes}`;\n  }\n  if (hours.length < 2) {\n    hours = `0${hours}`;\n  }\n  let result = [hours, minutes, seconds].join(\":\");\n  if (withMs) {\n    result += `.${d.getMilliseconds()}`;\n  }\n  return result;\n}\n\nexport function DateUtils_fromYYYYMMDD(dateStr: string, separator: string = \"-\"): Date {\n  const regexp = new RegExp(`^(\\\\d{4})${separator}(\\\\d{2})${separator}(\\\\d{2})$`);\n  const regexpMatchArray = dateStr.match(regexp);\n  if (regexpMatchArray) {\n    const [, year, month, day] = regexpMatchArray;\n    const date = new Date(parseInt(year, 10), parseInt(month, 10) - 1, parseInt(day, 10));\n    return date;\n  } else {\n    return new Date(Date.UTC(1970, 1, 1));\n  }\n}\n\nexport function DateUtils_fromYYYYMMDDStr(dateStr: string, separator: string = \"-\"): string {\n  return DateUtils_fromYYYYMMDD(dateStr, separator).toISOString();\n}\n\nexport function DateUtils_yearAndMonth(date: Date | string | number): [number, number] {\n  const d = new Date(date);\n  return [d.getUTCFullYear(), d.getUTCMonth()];\n}\n\nexport function DateUtils_startOfUTCMonth(date: Date | string | number): number {\n  const d = new Date(date);\n  return Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), 1);\n}\n\nexport function DateUtils_addUTCMonths(timestamp: number, months: number): number {\n  const d = new Date(timestamp);\n  return Date.UTC(d.getUTCFullYear(), d.getUTCMonth() + months, 1);\n}\n\nexport function DateUtils_dayOfWeekStr(date: string): string {\n  const d = new Date(DateUtils_fromYYYYMMDDStr(date));\n  return d.toLocaleDateString(undefined, { weekday: \"long\" });\n}\n\nexport function DateUtils_formatRange(start: Date | string | number, end: Date | string | number): string {\n  const startDate = new Date(start);\n  const endDate = new Date(end);\n  if (startDate.getFullYear() !== endDate.getFullYear()) {\n    return `${DateUtils_format(startDate, true)} - ${DateUtils_format(endDate, true)}`;\n  } else {\n    if (startDate.getMonth() !== endDate.getMonth()) {\n      const formattedStart = startDate.toLocaleDateString(undefined, { month: \"short\", day: \"numeric\" });\n      const formattedEnd = endDate.toLocaleDateString(undefined, { month: \"short\", day: \"numeric\" });\n      return `${formattedStart} - ${formattedEnd}, ${startDate.getFullYear()}`;\n    } else {\n      const month = startDate.toLocaleDateString(undefined, { month: \"short\" });\n      return `${month} ${startDate.getDate()}-${endDate.getDate()}, ${startDate.getFullYear()}`;\n    }\n  }\n}\n","import { IndexedDBUtils_get, IndexedDBUtils_set } from \"./indexeddb\";\nimport { UidFactory_generateUid } from \"./generator\";\nimport { SendMessage_isIos, SendMessage_isAndroid } from \"./sendMessage\";\n\nexport async function DeviceId_get(): Promise<string> {\n  if (DeviceId_cachedId) {\n    return DeviceId_cachedId;\n  }\n\n  const type = DeviceId_getDeviceType();\n  const storageKey = `${DeviceId_STORAGE_KEY}_${type}`;\n  const stored = await IndexedDBUtils_get(storageKey);\n  if (stored && typeof stored === \"string\") {\n    DeviceId_cachedId = stored;\n    return stored;\n  }\n\n  const newId = DeviceId_generate();\n  await IndexedDBUtils_set(storageKey, newId);\n  DeviceId_cachedId = newId;\n  return newId;\n}\n\nexport function DeviceId_generate(): string {\n  const type = DeviceId_getDeviceType();\n  const uid = UidFactory_generateUid(8);\n  return `${type}_${uid}`;\n}\n\nexport function DeviceId_getDeviceType(): string {\n  if (typeof window === \"undefined\") {\n    return \"srv\";\n  } else if (window.webeditor) {\n    return \"edt\";\n  } else if (SendMessage_isIos()) {\n    return \"ios\";\n  } else if (SendMessage_isAndroid()) {\n    return \"and\";\n  } else {\n    return \"web\";\n  }\n}\n\nexport const DeviceId_STORAGE_KEY = \"device_id\";\n\nexport let DeviceId_cachedId: string | undefined;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { IState } from \"../models/state\";\n\nconst MAX_ACTIONS = 31;\n\ninterface IDiagnosticsAction {\n  type: string;\n  time?: string;\n  desc?: string;\n  ts?: number;\n  [key: string]: any;\n}\n\nlet lastState: IState | undefined;\nlet lastActions: IDiagnosticsAction[] = [];\nlet lastValidationErrors: string[] | undefined;\n\nexport function Diagnostics_setLastState(state: IState): void {\n  lastState = state;\n}\n\nexport function Diagnostics_getLastState(): IState | undefined {\n  return lastState;\n}\n\nexport function Diagnostics_recordAction(action: IDiagnosticsAction): void {\n  lastActions = [{ ...action, ts: Date.now() }, ...lastActions.slice(0, MAX_ACTIONS - 1)];\n}\n\nexport function Diagnostics_getLastActions(): IDiagnosticsAction[] {\n  return lastActions;\n}\n\nexport function Diagnostics_setLastValidationErrors(errors: string[]): void {\n  lastValidationErrors = errors;\n}\n\nexport function Diagnostics_getLastValidationErrors(): string[] | undefined {\n  return lastValidationErrors;\n}\n","export async function Dialog_confirm(message: string): Promise<boolean> {\n  if (typeof window !== \"undefined\") {\n    return Promise.resolve(window.confirm(message));\n  } else {\n    return Promise.resolve(false);\n  }\n}\n\n// The native version is an Alert with one button per option plus Cancel; the browser has no\n// multi-button primitive, so each branch is spelled out in the message and dismissing the\n// dialog picks the last option rather than cancelling.\nexport async function Dialog_choice(title: string, message: string, options: string[]): Promise<number | undefined> {\n  if (typeof window === \"undefined\") {\n    return Promise.resolve(undefined);\n  }\n  const spelled = options.map((option, index) => `${index === 0 ? \"OK\" : \"Cancel\"} — ${option}`).join(\"\\n\");\n  return Promise.resolve(window.confirm(`${title}\\n\\n${message}\\n\\n${spelled}`) ? 0 : options.length - 1);\n}\n\nexport async function Dialog_prompt(message: string): Promise<string | undefined> {\n  if (typeof window !== \"undefined\") {\n    const result = window.prompt(message);\n    return result == null ? undefined : result;\n  } else {\n    return Promise.resolve(undefined);\n  }\n}\n\nexport function Dialog_alert(message: string): void {\n  if (typeof window !== \"undefined\") {\n    window.alert(message);\n  }\n}\n","import { gzip, gzipSync, gunzip, gunzipSync } from \"fflate\";\nimport { UrlUtils_build } from \"./url\";\n\nconst isBrowser = typeof FileReader !== \"undefined\" && typeof Worker !== \"undefined\";\n\nexport async function Encoder_encodeIntoUrlAndSetUrl(str: string): Promise<void> {\n  const url = await Encoder_encodeIntoUrl(str, window.location.href);\n  window.history.replaceState({ path: url.toString() }, \"\", url.toString());\n}\n\nexport async function Encoder_encodeIntoUrl(str: string, base: string): Promise<URL> {\n  const base64data = await Encoder_encode(str.replace(\"liftosaur://\", \"https://\"));\n  const url = UrlUtils_build(base);\n  const urlParams = new URLSearchParams(url.search);\n  urlParams.set(\"data\", base64data);\n  url.search = urlParams.toString();\n  return url;\n}\n\nexport function Encoder_encode(str: string): Promise<string> {\n  const textEncoder = new TextEncoder();\n  const input = textEncoder.encode(str);\n\n  if (!isBrowser) {\n    const result = gzipSync(input);\n    let binary = \"\";\n    for (let i = 0; i < result.length; i++) {\n      binary += String.fromCharCode(result[i]);\n    }\n    const b64 = btoa(binary);\n    const dataUrl = `data:application/octet-stream;base64,${b64}`;\n    return Promise.resolve(btoa(dataUrl));\n  }\n\n  return new Promise((resolve, reject) => {\n    gzip(input, (err, result) => {\n      if (err) {\n        reject(err);\n        return;\n      }\n      if (typeof FileReader !== \"undefined\") {\n        const reader = new FileReader();\n        reader.onload = function () {\n          const b64 = reader.result;\n          if (typeof b64 === \"string\") {\n            resolve(btoa(b64));\n          }\n        };\n        reader.readAsDataURL(new Blob([result]));\n      } else {\n        let binary = \"\";\n        for (let i = 0; i < result.length; i++) {\n          binary += String.fromCharCode(result[i]);\n        }\n        const b64 = btoa(binary);\n        const dataUrl = `data:application/octet-stream;base64,${b64}`;\n        resolve(btoa(dataUrl));\n      }\n    });\n  });\n}\n\nexport function Encoder_decode(str: string): Promise<string> {\n  return new Promise(async (resolve, reject) => {\n    try {\n      const dataUrl = atob(str);\n      let uintarray: Uint8Array;\n      if (isBrowser) {\n        const response = await fetch(dataUrl);\n        const blob = await response.blob();\n        uintarray = new Uint8Array(await blob.arrayBuffer());\n      } else {\n        // RN: fetch doesn't support data: URLs, decode base64 directly\n        const b64 = dataUrl.replace(/^data:[^;]+;base64,/, \"\");\n        const binary = atob(b64);\n        uintarray = new Uint8Array(binary.length);\n        for (let i = 0; i < binary.length; i++) {\n          uintarray[i] = binary.charCodeAt(i);\n        }\n      }\n      const result = isBrowser ? await gunzipPromise(uintarray) : gunzipSync(uintarray);\n      if (typeof TextDecoder !== \"undefined\") {\n        resolve(new TextDecoder(\"utf-8\").decode(result));\n      } else {\n        let str2 = \"\";\n        for (let i = 0; i < result.length; i++) {\n          str2 += String.fromCharCode(result[i]);\n        }\n        resolve(decodeURIComponent(escape(str2)));\n      }\n    } catch (e) {\n      reject(e);\n    }\n  });\n}\n\nfunction gunzipPromise(data: Uint8Array): Promise<Uint8Array> {\n  return new Promise((resolve, reject) => {\n    gunzip(data, (err, result) => {\n      if (err) {\n        reject(err);\n      } else {\n        resolve(result);\n      }\n    });\n  });\n}\n","export function EventManager_isAvailable(): boolean {\n  return false;\n}\n\nexport function EventManager_log(_data: string): void {\n  // no-op on web; callers fall back to direct POST\n}\n\nexport function EventManager_flush(): Promise<void> {\n  return Promise.resolve();\n}\n\nexport type IEventManagerTelemetryHandler = (event: {\n  name: string;\n  timestamp: number;\n  extra: Record<string, string>;\n}) => void;\n\nexport function EventManager_initTelemetry(_handler: IEventManagerTelemetryHandler): void {\n  // no-op on web\n}\n","import { SendMessage_toAndroid, SendMessage_toIos } from \"./sendMessage\";\n\nexport function Exporter_toFile(filename: string, contents: string): void {\n  if (\n    !SendMessage_toAndroid({ type: \"export\", filename, contents }) &&\n    !SendMessage_toIos({ type: \"export\", filename, contents })\n  ) {\n    const blob = new Blob([contents], { type: \"text/plain\" });\n    const objectUrl = URL.createObjectURL(blob);\n    const a = document.createElement(\"a\");\n    a.href = objectUrl;\n    a.setAttribute(\"download\", filename);\n    document.body.appendChild(a);\n    a.click();\n    document.body.removeChild(a);\n  }\n}\n","// Poppins digits sit around 0.62em wide. The estimate is deliberately on the generous side so a\n// value never renders wider than the field that holds it - overshooting costs a slightly smaller\n// font, undershooting clips the number.\nconst CHAR_WIDTH_EM = 0.62;\nconst MIN_RATIO = 0.6;\n\nexport function FitText_fontSize(text: string, availableWidth: number, baseFontSize: number): number {\n  if (!text || availableWidth <= 0) {\n    return baseFontSize;\n  }\n  const neededWidth = text.length * CHAR_WIDTH_EM * baseFontSize;\n  if (neededWidth <= availableWidth) {\n    return baseFontSize;\n  }\n  return Math.max(baseFontSize * MIN_RATIO, availableWidth / (text.length * CHAR_WIDTH_EM));\n}\n","let currentFlushCallback: (() => void) | null = null;\n\nexport function FocusedInputFlush_register(cb: () => void): void {\n  currentFlushCallback = cb;\n}\n\nexport function FocusedInputFlush_unregister(cb: () => void): void {\n  if (currentFlushCallback === cb) {\n    currentFlushCallback = null;\n  }\n}\n\nexport function FocusedInputFlush_flush(): void {\n  if (currentFlushCallback) {\n    currentFlushCallback();\n  }\n}\n","export function UidFactory_generateUid(length: number): string {\n  const domain = \"abcdefghijklmnopqrstuvwxyz\";\n  let uid = \"\";\n  for (let i = 0; i < length; i += 1) {\n    uid += domain[Math.floor(Math.random() * domain.length)];\n  }\n  return uid;\n}\n","import { SendMessage_isIos, SendMessage_toIos, SendMessage_isAndroid, SendMessage_toAndroid } from \"./sendMessage\";\nimport { UrlUtils_build } from \"./url\";\n\ndeclare let __HOST__: string;\n\nlet windowRef: Window | null = null;\nlet windowUrl: string | undefined;\nlet receiveMessage: ((event: MessageEvent) => void) | undefined;\n\nexport function getGoogleAccessToken(useBrowserCallback?: boolean): Promise<string | undefined> {\n  return new Promise((resolve) => {\n    const callbackPath = useBrowserCallback ? \"/googleauthcallback-web.html\" : \"/googleauthcallback.html\";\n    const urlBuilder = UrlUtils_build(\"https://accounts.google.com/o/oauth2/v2/auth\");\n    urlBuilder.searchParams.append(\"scope\", \"openid email\");\n    urlBuilder.searchParams.append(\"include_granted_scopes\", \"true\");\n    urlBuilder.searchParams.append(\"response_type\", \"token\");\n    urlBuilder.searchParams.append(\"redirect_uri\", `${__HOST__}${callbackPath}`);\n    urlBuilder.searchParams.append(\n      \"client_id\",\n      \"944666871420-p8kv124sgte8o0p6ev2ah6npudsl7e4f.apps.googleusercontent.com\"\n    );\n    const url = urlBuilder.toString();\n\n    if (receiveMessage != null) {\n      window.removeEventListener(\"message\", receiveMessage);\n    }\n\n    const windowOpts = \"toolbar=no, menubar=no, width=600, height=700, top=100, left=100\";\n\n    if (SendMessage_isIos()) {\n      SendMessage_toIos({ type: \"signInWithGoogle\" });\n    } else if (SendMessage_isAndroid()) {\n      SendMessage_toAndroid({ type: \"signInWithGoogle\" });\n    } else {\n      if (windowRef == null || windowRef.closed) {\n        windowRef = window.open(url, \"google-auth\", windowOpts);\n      } else if (windowUrl !== url) {\n        windowRef = window.open(url, \"google-auth\", windowOpts);\n        if (windowRef != null) {\n          windowRef.focus();\n        }\n      } else {\n        windowRef.focus();\n      }\n    }\n\n    receiveMessage = (event) => {\n      const data = event.data;\n      if (typeof data !== \"string\") {\n        return;\n      }\n      if (!data.startsWith(\"http://\") && !data.startsWith(\"https://\")) {\n        return;\n      }\n      const callbackUrl = UrlUtils_build(data);\n      const params = callbackUrl.hash.slice(1);\n      const exUrl = UrlUtils_build(\"https://www.example.com\");\n      exUrl.search = params;\n      const accessToken = exUrl.searchParams.get(\"access_token\")!;\n      resolve(accessToken);\n    };\n    window.addEventListener(\"message\", receiveMessage);\n    windowUrl = url;\n  });\n}\n","import { Platform } from \"react-native\";\n\nfunction baseHost(): string {\n  return (globalThis as { __HOST__?: string }).__HOST__ ?? \"https://www.liftosaur.com\";\n}\n\nexport function HostConfig_imageHost(): string {\n  if (Platform.OS === \"web\") {\n    return \"\";\n  }\n  return baseHost();\n}\n\nexport function HostConfig_resolveUrl(path: string): string {\n  if (Platform.OS === \"web\" || !path.startsWith(\"/\")) {\n    return path;\n  }\n  return `${baseHost()}${path}`;\n}\n","import type { JSX } from \"react\";\nimport { hydrateRoot } from \"react-dom/client\";\nimport RB from \"rollbar\";\nimport { RollbarUtils_config } from \"./rollbar\";\nimport { IPageWrapperProps } from \"../components/pageWrapper\";\nimport { PageTheme_restore } from \"./pageTheme\";\n\ndeclare let Rollbar: RB;\ndeclare let __ENV__: string;\n\nexport function HydrateUtils_hydratePage<T>(cb: (pageWrapperProps: IPageWrapperProps, data: T) => JSX.Element): void {\n  Rollbar.configure(RollbarUtils_config());\n  PageTheme_restore();\n\n  const escapedRawData = document.querySelector(\"#data\")?.innerHTML || \"{}\";\n  const escapedPageWrapperProps = document.querySelector(\"#pagewrapper\")?.innerHTML || \"{}\";\n  const parser = new DOMParser();\n  const unescapedRawData = parser.parseFromString(escapedRawData, \"text/html\").documentElement.textContent || \"{}\";\n  const unescapedPageWrapperProps =\n    parser.parseFromString(escapedPageWrapperProps, \"text/html\").documentElement.textContent || \"{}\";\n  const data = JSON.parse(unescapedRawData) as T;\n  const pageWrapperProps = JSON.parse(unescapedPageWrapperProps) as IPageWrapperProps;\n  hydrateRoot(document.getElementById(\"app\")!, cb({ ...pageWrapperProps, client: window.fetch.bind(window) }, data));\n}\n","import { Platform } from \"react-native\";\nimport { lb } from \"lens-shmens\";\nimport { IDispatch } from \"../ducks/types\";\nimport { IApplePromotionalOffer, ISubscriptionLoading, IState, updateState } from \"../models/state\";\nimport { Dialog_alert } from \"./dialog\";\nimport { IIapAdapter, IIapApplePromoOffer, IIapPurchase } from \"./iapAdapter\";\n\nconst APPLE_KEY_IDENTIFIER = \"CNHQ5ZL35U\";\n\nexport function IapHelpers_getSkus(): { monthly: string; yearly: string; lifetime: string } {\n  return Platform.OS === \"ios\"\n    ? {\n        monthly: \"com.liftosaur.subscription.ios_montly\",\n        yearly: \"com.liftosaur.subscription.ios_yearly\",\n        lifetime: \"com.liftosaur.subscription.ios_lifetime\",\n      }\n    : {\n        monthly: \"com.liftosaur.subscription.and_montly\",\n        yearly: \"com.liftosaur.subscription.and_yearly\",\n        lifetime: \"com.liftosaur.subscription.and_lifetime\",\n      };\n}\n\nexport function IapHelpers_clearLoading(dispatch: IDispatch): void {\n  updateState(dispatch, [lb<IState>().p(\"subscriptionLoading\").record(undefined)], \"Stop subscription loading\");\n}\n\nconst SUBSCRIPTION_LOADING_TIMEOUT_MS = 60000;\n\n// Sets the spinner on a plan card and arms a safety timeout: if no purchase/error event clears it\n// within the window (e.g. StoreKit never delivers an actionable event), the card can't spin forever.\n// Only clears if the same loading object is still active, so it never cancels a newer attempt.\nexport function IapHelpers_setLoading(\n  dispatch: IDispatch,\n  getState: () => IState,\n  loading: ISubscriptionLoading\n): void {\n  updateState(dispatch, [lb<IState>().p(\"subscriptionLoading\").record(loading)], \"Start subscription loading\");\n  const timer = setTimeout(() => {\n    if (getState().subscriptionLoading === loading) {\n      IapHelpers_clearLoading(dispatch);\n    }\n  }, SUBSCRIPTION_LOADING_TIMEOUT_MS);\n  // Don't keep the Node process (tests) alive for the full window; no-op on RN where setTimeout returns a number.\n  (timer as unknown as { unref?: () => void }).unref?.();\n}\n\nexport function IapHelpers_alertAlreadySubscribed(): void {\n  Dialog_alert(\n    \"You already have an active Liftosaur Premium purchase on this account. Manage or change your plan from your App Store / Play Store subscriptions.\"\n  );\n}\n\nexport function IapHelpers_applePromoToAdapter(promo?: IApplePromotionalOffer): IIapApplePromoOffer | undefined {\n  if (!promo) {\n    return undefined;\n  }\n  return {\n    identifier: promo.offerId,\n    keyIdentifier: APPLE_KEY_IDENTIFIER,\n    nonce: promo.nonce,\n    signature: promo.signature,\n    timestamp: promo.timestamp,\n  };\n}\n\nexport async function IapHelpers_readReceiptOrJwsIOS(\n  iap: IIapAdapter,\n  purchase?: IIapPurchase\n): Promise<string | undefined> {\n  const jws = purchase?.purchaseToken;\n  if (jws) {\n    console.log(\"IAP: using StoreKit 2 JWS\", jws.slice(0, 32) + \"...\");\n    return jws;\n  }\n  const data = await iap.getReceiptDataIOS();\n  if (data) {\n    console.log(\"IAP: using legacy App Store receipt\", data.slice(0, 32) + \"...\");\n    return data;\n  }\n  const refreshed = await iap.getReceiptIOS();\n  if (refreshed) {\n    console.log(\"IAP: using refreshed legacy receipt\", refreshed.slice(0, 32) + \"...\");\n    return refreshed;\n  }\n  console.warn(\"IAP: no receipt nor JWS available\", purchase);\n  return undefined;\n}\n","export function ImageCache_initialUri(remoteUrl: string): string {\n  return remoteUrl;\n}\n\nexport function ImageCache_markMissing(_remoteUrl: string): void {}\n\nexport async function ImageCache_download(_remoteUrl: string): Promise<void> {}\n","import { IHistoryRecord, ICustomExercise, ISettings, IWeight, VHistoryRecord } from \"../types\";\nimport Papa from \"papaparse\";\nimport { CollectionUtils_compact, CollectionUtils_groupByKey } from \"./collection\";\nimport { ObjectUtils_values } from \"./object\";\nimport { Exercise_findByName, Exercise_getIsUnilateral, Exercise_sanitizeName } from \"../models/exercise\";\nimport { Weight_build } from \"../models/weight\";\nimport { UidFactory_generateUid } from \"./generator\";\nimport { Progress_getEntryId } from \"../models/progress\";\nimport { History_generateId } from \"../models/history\";\nimport { Storage_validate } from \"../models/storage\";\nimport {\n  IImportResult,\n  IImportRowError,\n  ImportFileError,\n  ImportUtils_detectCsvKind,\n  ImportUtils_isSuspiciousReps,\n  ImportUtils_isSuspiciousTimestamp,\n  ImportUtils_isSuspiciousWeight,\n} from \"./importTypes\";\n\nconst exerciseMapping: Partial<Record<string, [string, string | undefined]>> = {\n  \"21s Bicep Curl\": [\"Bicep Curl\", \"barbell\"],\n  \"Ab Wheel\": [\"Ab Wheel\", \"bodyweight\"],\n  \"Arnold Press (Dumbbell)\": [\"Arnold Press\", \"dumbbell\"],\n  \"Assisted Pistol Squats\": [\"Pistol Squat\", \"bodyweight\"],\n  \"Back Extension (Hyperextension)\": [\"Back Extension\", \"bodyweight\"],\n  \"Back Extension (Machine)\": [\"Back Extension\", \"leverageMachine\"],\n  \"Ball Slams\": [\"Ball Slams\", \"medicineball\"],\n  \"Bench Dip\": [\"Bench Dip\", \"bodyweight\"],\n  \"Bench Press - Close Grip (Barbell)\": [\"Bench Press Close Grip\", \"barbell\"],\n  \"Bench Press - Wide Grip (Barbell)\": [\"Bench Press Wide Grip\", \"barbell\"],\n  \"Bench Press (Barbell)\": [\"Bench Press\", \"barbell\"],\n  \"Bench Press (Cable)\": [\"Chest Press\", \"cable\"],\n  \"Bench Press (Dumbbell)\": [\"Chest Press\", \"dumbbell\"],\n  \"Bench Press (Smith Machine)\": [\"Chest Press\", \"smith\"],\n  \"Bent Over Row (Band)\": [\"Bent Over Row\", \"band\"],\n  \"Bent Over Row (Barbell)\": [\"Bent Over Row\", \"barbell\"],\n  \"Bent Over Row (Dumbbell)\": [\"Bent Over One Arm Row\", \"dumbbell\"],\n  \"Bicep Curl (Barbell)\": [\"Bicep Curl\", \"barbell\"],\n  \"Bicep Curl (Cable)\": [\"Bicep Curl\", \"cable\"],\n  \"Bicep Curl (Dumbbell)\": [\"Bicep Curl\", \"dumbbell\"],\n  \"Bicycle Crunch\": [\"Bicycle Crunch\", \"bodyweight\"],\n  \"Box Jump\": [\"Box Jump\", \"bodyweight\"],\n  \"Box Squat (Barbell)\": [\"Box Squat\", \"barbell\"],\n  \"Bulgarian Split Squat\": [\"Bulgarian Split Squat\", \"bodyweight\"],\n  Burpee: [\"Burpee\", \"bodyweight\"],\n  \"Butterfly (Pec Deck)\": [\"Pec Deck\", \"leverageMachine\"],\n  \"Cable Crunch\": [\"Cable Crunch\", \"cable\"],\n  \"Cable Pull Through\": [\"Cable Pull Through\", \"cable\"],\n  \"Cable Twist (Down to up)\": [\"Cable Twist\", \"cable\"],\n  \"Cable Twist (Up to down)\": [\"Cable Twist\", \"cable\"],\n  \"Calf Press (Machine)\": [\"Calf Press on Seated Leg Press\", \"leverageMachine\"],\n  \"Chest Dip\": [\"Chest Dip\", \"bodyweight\"],\n  \"Chest Fly (Band)\": [\"Chest Fly\", \"band\"],\n  \"Chest Fly (Dumbbell)\": [\"Chest Fly\", \"dumbbell\"],\n  \"Chest Fly (Machine)\": [\"Chest Fly\", \"leverageMachine\"],\n  \"Chest Press (Band)\": [\"Chest Press\", \"band\"],\n  \"Chest Press (Machine)\": [\"Chest Press\", \"leverageMachine\"],\n  \"Chest Supported Incline Row (Dumbbell)\": [\"Incline Row\", \"dumbbell\"],\n  \"Chin Up\": [\"Chin Up\", \"bodyweight\"],\n  Clamshell: [\"Side Lying Clam\", \"bodyweight\"],\n  Clean: [\"Clean\", \"barbell\"],\n  \"Clean and Jerk\": [\"Clean and Jerk\", \"barbell\"],\n  \"Concentration Curl\": [\"Concentration Curl\", \"dumbbell\"],\n  Crunch: [\"Crunch\", \"bodyweight\"],\n  \"Crunch (Machine)\": [\"Crunch\", \"leverageMachine\"],\n  \"Curtsy Lunge (Dumbbell)\": [\"Lunge\", \"dumbbell\"],\n  \"Deadlift (Band)\": [\"Deadlift\", \"band\"],\n  \"Deadlift (Barbell)\": [\"Deadlift\", \"barbell\"],\n  \"Deadlift (Dumbbell)\": [\"Deadlift\", \"dumbbell\"],\n  \"Deadlift (Smith Machine)\": [\"Deadlift\", \"smith\"],\n  \"Deadlift (Trap bar)\": [\"Trap Bar Deadlift\", \"trapbar\"],\n  \"Deadlift High Pull\": [\"Deadlift High Pull\", \"barbell\"],\n  \"Decline Bench Press (Barbell)\": [\"Decline Bench Press\", \"barbell\"],\n  \"Decline Bench Press (Dumbbell)\": [\"Decline Bench Press\", \"dumbbell\"],\n  \"Decline Bench Press (Machine)\": [\"Decline Bench Press\", \"leverageMachine\"],\n  \"Decline Bench Press (Smith Machine)\": [\"Decline Bench Press\", \"smith\"],\n  \"Decline Chest Fly (Dumbbell)\": [\"Chest Fly\", \"dumbbell\"],\n  \"Decline Crunch\": [\"Decline Crunch\", \"bodyweight\"],\n  \"Dumbbell Row\": [\"Bent Over One Arm Row\", \"dumbbell\"],\n  \"Dumbbell Step Up\": [\"Step up\", \"dumbbell\"],\n  \"EZ Bar Biceps Curl\": [\"Bicep Curl\", \"ezbar\"],\n  \"Face Pull\": [\"Face Pull\", \"cable\"],\n  \"Front Raise (Band)\": [\"Front Raise\", \"band\"],\n  \"Front Raise (Barbell)\": [\"Front Raise\", \"barbell\"],\n  \"Front Raise (Cable)\": [\"Front Raise\", \"cable\"],\n  \"Front Raise (Dumbbell)\": [\"Front Raise\", \"dumbbell\"],\n  \"Front Squat\": [\"Front Squat\", \"barbell\"],\n  \"Full Squat\": [\"Squat\", \"barbell\"],\n  \"Glute Bridge\": [\"Glute Bridge\", \"bodyweight\"],\n  \"Glute Kickback (Machine)\": [\"Cable Kickback\", \"cable\"],\n  \"Goblet Squat\": [\"Goblet Squat\", \"kettlebell\"],\n  \"Good Morning (Barbell)\": [\"Good Morning\", \"barbell\"],\n  \"Hack Squat\": [\"Hack Squat\", \"barbell\"],\n  \"Hack Squat (Machine)\": [\"Hack Squat\", \"leverageMachine\"],\n  \"Hammer Curl (Band)\": [\"Hammer Curl\", \"band\"],\n  \"Hammer Curl (Cable)\": [\"Hammer Curl\", \"cable\"],\n  \"Hammer Curl (Dumbbell)\": [\"Hammer Curl\", \"dumbbell\"],\n  \"Handstand Push Up\": [\"Handstand Push Up\", \"bodyweight\"],\n  \"Hang Clean\": [\"Hang Clean\", \"barbell\"],\n  \"Hang Snatch\": [\"Hang Snatch\", \"barbell\"],\n  \"Hanging Leg Raise\": [\"Hanging Leg Raise\", \"bodyweight\"],\n  \"High Knee Skips\": [\"High Knee Skips\", \"bodyweight\"],\n  \"Hip Abduction (Machine)\": [\"Hip Abductor\", \"leverageMachine\"],\n  \"Hip Thrust\": [\"Hip Thrust\", \"bodyweight\"],\n  \"Hip Thrust (Barbell)\": [\"Hip Thrust\", \"barbell\"],\n  \"Incline Bench Press (Barbell)\": [\"Incline Bench Press\", \"barbell\"],\n  \"Incline Bench Press (Dumbbell)\": [\"Incline Bench Press\", \"dumbbell\"],\n  \"Incline Bench Press (Smith Machine)\": [\"Incline Bench Press\", \"smith\"],\n  \"Incline Chest Fly (Dumbbell)\": [\"Incline Chest Fly\", \"dumbbell\"],\n  \"Incline Chest Press (Machine)\": [\"Incline Chest Press\", \"leverageMachine\"],\n  \"Inverted Row\": [\"Inverted Row\", \"bodyweight\"],\n  \"Jump Squat\": [\"Jump Squat\", \"bodyweight\"],\n  \"Jumping Jack\": [\"Jumping Jack\", \"bodyweight\"],\n  \"Kettlebell Clean\": [\"Clean\", \"kettlebell\"],\n  \"Kettlebell Goblet Squat\": [\"Goblet Squat\", \"kettlebell\"],\n  \"Kettlebell Shoulder Press\": [\"Shoulder Press\", \"kettlebell\"],\n  \"Kettlebell Swing\": [\"Kettlebell Swing\", \"kettlebell\"],\n  \"Lat Pulldown (Band)\": [\"Lat Pulldown\", \"band\"],\n  \"Lat Pulldown (Cable)\": [\"Lat Pulldown\", \"cable\"],\n  \"Lat Pulldown (Machine)\": [\"Lat Pulldown\", \"leverageMachine\"],\n  \"Lateral Raise (Band)\": [\"Lateral Raise\", \"band\"],\n  \"Lateral Raise (Cable)\": [\"Lateral Raise\", \"cable\"],\n  \"Lateral Raise (Dumbbell)\": [\"Lateral Raise\", \"dumbbell\"],\n  \"Lateral Raise (Machine)\": [\"Lateral Raise\", \"leverageMachine\"],\n  \"Leg Extension (Machine)\": [\"Leg Extension\", \"leverageMachine\"],\n  \"Leg Press (Machine)\": [\"Leg Press\", \"leverageMachine\"],\n  Lunge: [\"Lunge\", \"bodyweight\"],\n  \"Lunge (Barbell)\": [\"Lunge\", \"barbell\"],\n  \"Lunge (Dumbbell)\": [\"Lunge\", \"dumbbell\"],\n  \"Lying Leg Curl (Machine)\": [\"Lying Leg Curl\", \"leverageMachine\"],\n  \"Mountain Climber\": [\"Mountain Climber\", \"bodyweight\"],\n  \"Overhead Press (Barbell)\": [\"Overhead Press\", \"barbell\"],\n  \"Overhead Press (Dumbbell)\": [\"Overhead Press\", \"dumbbell\"],\n  \"Overhead Press (Smith Machine)\": [\"Overhead Press\", \"smith\"],\n  \"Overhead Squat\": [\"Overhead Squat\", \"barbell\"],\n  \"Pistol Squat\": [\"Pistol Squat\", \"bodyweight\"],\n  Plank: [\"Plank\", \"bodyweight\"],\n  \"Power Clean\": [\"Power Clean\", \"barbell\"],\n  \"Power Snatch\": [\"Power Snatch\", \"barbell\"],\n  \"Preacher Curl (Barbell)\": [\"Preacher Curl\", \"barbell\"],\n  \"Preacher Curl (Dumbbell)\": [\"Preacher Curl\", \"dumbbell\"],\n  \"Preacher Curl (Machine)\": [\"Preacher Curl\", \"leverageMachine\"],\n  \"Pull Up\": [\"Pull Up\", \"bodyweight\"],\n  \"Pull Up (Band)\": [\"Pull Up\", \"band\"],\n  \"Pullover (Dumbbell)\": [\"Pullover\", \"dumbbell\"],\n  \"Push Press\": [\"Push Press\", \"barbell\"],\n  \"Reverse Crunch\": [\"Reverse Crunch\", \"bodyweight\"],\n  \"Reverse Curl (Barbell)\": [\"Reverse Curl\", \"barbell\"],\n  \"Reverse Curl (Dumbbell)\": [\"Reverse Curl\", \"dumbbell\"],\n  \"Reverse Fly (Cable)\": [\"Reverse Fly\", \"cable\"],\n  \"Reverse Fly (Dumbbell)\": [\"Reverse Fly\", \"dumbbell\"],\n  \"Reverse Grip Lat Pulldown (Cable)\": [\"Lat Pulldown\", \"cable\"],\n  \"Reverse Hyperextension\": [\"Reverse Hyperextension\", \"bodyweight\"],\n  \"Romanian Deadlift (Barbell)\": [\"Romanian Deadlift\", \"barbell\"],\n  \"Romanian Deadlift (Dumbbell)\": [\"Romanian Deadlift\", \"dumbbell\"],\n  \"Russian Twist (Bodyweight)\": [\"Russian Twist\", \"bodyweight\"],\n  \"Seated Leg Curl (Machine)\": [\"Seated Leg Curl\", \"leverageMachine\"],\n  \"Seated Row (Machine)\": [\"Seated Row\", \"leverageMachine\"],\n  \"Seated Shoulder Press (Machine)\": [\"Shoulder Press\", \"leverageMachine\"],\n  \"Shoulder Press (Dumbbell)\": [\"Shoulder Press\", \"dumbbell\"],\n  \"Shrug (Barbell)\": [\"Shrug\", \"barbell\"],\n  \"Shrug (Cable)\": [\"Shrug\", \"cable\"],\n  \"Shrug (Dumbbell)\": [\"Shrug\", \"dumbbell\"],\n  \"Shrug (Smith Machine)\": [\"Shrug\", \"smith\"],\n  \"Side Bend\": [\"Side Bend\", \"bodyweight\"],\n  \"Side Bend (Dumbbell)\": [\"Side Bend\", \"dumbbell\"],\n  \"Side Plank\": [\"Side Plank\", \"bodyweight\"],\n  \"Single Leg Glute Bridge\": [\"Single Leg Bridge\", \"bodyweight\"],\n  \"Single Leg Hip Thrust\": [\"Single Leg Hip Thrust\", \"bodyweight\"],\n  \"Single Leg Romanian Deadlift (Barbell)\": [\"Single Leg Deadlift\", \"barbell\"],\n  \"Single Leg Romanian Deadlift (Dumbbell)\": [\"Single Leg Deadlift\", \"dumbbell\"],\n  \"Sit Up\": [\"Sit Up\", \"bodyweight\"],\n  \"Skullcrusher (Barbell)\": [\"Skullcrusher\", \"barbell\"],\n  \"Skullcrusher (Dumbbell)\": [\"Skullcrusher\", \"dumbbell\"],\n  Snatch: [\"Power Snatch\", \"barbell\"],\n  \"Split Jerk\": [\"Split Jerk\", \"barbell\"],\n  \"Squat (Band)\": [\"Squat\", \"band\"],\n  \"Squat (Barbell)\": [\"Squat\", \"barbell\"],\n  \"Squat (Bodyweight)\": [\"Squat\", \"bodyweight\"],\n  \"Squat (Dumbbell)\": [\"Squat\", \"dumbbell\"],\n  \"Squat (Machine)\": [\"Squat\", \"leverageMachine\"],\n  \"Squat (Smith Machine)\": [\"Squat\", \"smith\"],\n  \"Standing Military Press (Barbell)\": [\"Overhead Press\", \"barbell\"],\n  \"Straight Leg Deadlift\": [\"Stiff Leg Deadlift\", \"barbell\"],\n  \"Sumo Deadlift\": [\"Deadlift\", \"barbell\"],\n  Superman: [\"Superman\", \"bodyweight\"],\n  \"Thruster (Barbell)\": [\"Thruster\", \"barbell\"],\n  \"Thruster (Kettlebell)\": [\"Thruster\", \"kettlebell\"],\n  \"Upright Row (Barbell)\": [\"Upright Row\", \"barbell\"],\n  \"Upright Row (Cable)\": [\"Upright Row\", \"cable\"],\n  \"Upright Row (Dumbbell)\": [\"Upright Row\", \"dumbbell\"],\n  \"V Up\": [\"V Up\", \"bodyweight\"],\n  \"Wide Pull Up\": [\"Pull Up\", \"bodyweight\"],\n  \"Zercher Squat\": [\"Squat\", \"barbell\"],\n  \"Around The World\": [\"Around The World\", \"dumbbell\"],\n  \"Back Extension (Weighted Hyperextension)\": [\"Back Extension\", \"leverageMachine\"],\n  \"Battle Ropes\": [\"Battle Ropes\", \"bodyweight\"],\n  \"Bicep Curl (Machine)\": [\"Bicep Curl\", \"leverageMachine\"],\n  \"Bicep Curl (Suspension)\": [\"Bicep Curl\", \"dumbbell\"],\n  \"Bicycle Crunch Raised Legs\": [\"Bicycle Crunch\", \"bodyweight\"],\n  \"Burpee Over the Bar\": [\"Burpee\", \"bodyweight\"],\n  \"Cable Fly Crossovers\": [\"Cable Crossover\", \"cable\"],\n  \"Chest Dip (Assisted)\": [\"Chest Dip\", \"bodyweight\"],\n  \"Chest Dip (Weighted)\": [\"Chest Dip\", \"bodyweight\"],\n  \"Chest Fly (Suspension)\": [\"Chest Fly\", \"dumbbell\"],\n  \"Chin Up (Assisted)\": [\"Chin Up\", \"bodyweight\"],\n  \"Chin Up (Weighted)\": [\"Chin Up\", \"bodyweight\"],\n  \"Clean and Press\": [\"Clean and Jerk\", \"barbell\"],\n  \"Crunch (Weighted)\": [\"Crunch\", \"bodyweight\"],\n  Cycling: [\"Cycling\", \"bodyweight\"],\n  \"Decline Crunch (Weighted)\": [\"Decline Crunch\", \"bodyweight\"],\n  \"Decline Push Up\": [\"Push Up\", \"bodyweight\"],\n  \"Diamond Push Up\": [\"Push Up\", \"bodyweight\"],\n  \"Dumbbell Snatch\": [\"Power Snatch\", \"dumbbell\"],\n  \"Dumbbell Squeeze Press\": [\"Chest Press\", \"dumbbell\"],\n  \"Elliptical Trainer\": [\"Elliptical Machine\", \"leverageMachine\"],\n  \"Floor Press (Barbell)\": [\"Chest Press\", \"barbell\"],\n  \"Floor Press (Dumbbell)\": [\"Chest Press\", \"dumbbell\"],\n  \"Floor Triceps Dip\": [\"Triceps Dip\", \"bodyweight\"],\n  \"Frog Jumps\": [\"Box Jump\", \"bodyweight\"],\n  \"Frog Pumps (Dumbbell)\": [\"Glute Bridge\", \"dumbbell\"],\n  \"Front Raise (Suspension)\": [\"Front Raise\", \"dumbbell\"],\n  \"Handstand Hold\": [\"Handstand Push Up\", \"bodyweight\"],\n  \"Hanging Knee Raise\": [\"Hanging Leg Raise\", \"bodyweight\"],\n  \"High Knees\": [\"High Knee Skips\", \"bodyweight\"],\n  \"Incline Push Ups\": [\"Push Up\", \"bodyweight\"],\n  \"Iso-Lateral Chest Press (Machine)\": [\"Iso-Lateral Chest Press\", \"leverageMachine\"],\n  \"Iso-Lateral Row (Machine)\": [\"Iso-Lateral Row\", \"leverageMachine\"],\n  \"Jack Knife (Suspension)\": [\"Jackknife Sit Up\", \"bodyweight\"],\n  \"Jackknife Sit Up\": [\"Jackknife Sit Up\", \"bodyweight\"],\n  \"Jump Rope\": [\"Jump Rope\", \"bodyweight\"],\n  \"Kettlebell High Pull\": [\"Deadlift High Pull\", \"kettlebell\"],\n  \"Kettlebell Snatch\": [\"Power Snatch\", \"kettlebell\"],\n  \"Kettlebell Turkish Get Up\": [\"Kettlebell Turkish Get Up\", \"kettlebell\"],\n  \"Kipping Pull Up\": [\"Kipping Pull Up\", \"bodyweight\"],\n  \"Knee Raise Parallel Bars\": [\"Knee Raise\", \"bodyweight\"],\n  \"Lateral Box Jump\": [\"Lateral Box Jump\", \"bodyweight\"],\n  \"Leg Press Horizontal (Machine)\": [\"Leg Press\", \"leverageMachine\"],\n  \"Low Cable Fly Crossovers\": [\"Cable Crossover\", \"cable\"],\n  \"Lying Leg Raise\": [\"Flat Leg Raise\", \"bodyweight\"],\n  \"Muscle Up\": [\"Muscle Up\", \"bodyweight\"],\n  \"Oblique Crunch\": [\"Oblique Crunch\", \"bodyweight\"],\n  \"Overhead Dumbbell Lunge\": [\"Lunge\", \"dumbbell\"],\n  \"Pendlay Row (Barbell)\": [\"Pendlay Row\", \"barbell\"],\n  \"Press Under\": [\"Press Under\", \"barbell\"],\n  \"Pull Up (Assisted)\": [\"Pull Up\", \"bodyweight\"],\n  \"Pull Up (Weighted)\": [\"Pull Up\", \"bodyweight\"],\n  \"Push Up\": [\"Push Up\", \"bodyweight\"],\n  \"Push Up (Weighted)\": [\"Push Up\", \"bodyweight\"],\n  \"Rear Delt Reverse Fly (Machine)\": [\"Reverse Fly\", \"leverageMachine\"],\n  \"Reverse Fly Single Arm (Cable)\": [\"Reverse Fly\", \"cable\"],\n  \"Reverse Grip Concentration Curl\": [\"Reverse Grip Concentration Curl\", \"dumbbell\"],\n  \"Reverse Plank\": [\"Reverse Plank\", \"bodyweight\"],\n  \"Rowing Machine\": [\"Rowing\", \"leverageMachine\"],\n  \"Russian Twist (Weighted)\": [\"Russian Twist\", \"bodyweight\"],\n  \"Seated Cable Row\": [\"Seated Row\", \"cable\"],\n  \"Seated Calf Raise\": [\"Seated Calf Raise\", \"barbell\"],\n  \"Seated Incline Curl (Dumbbell)\": [\"Incline Curl\", \"dumbbell\"],\n  \"Seated Palms Up Wrist Curl\": [\"Seated Palms Up Wrist Curl\", \"dumbbell\"],\n  \"Single Arm Cable Crossover\": [\"Cable Crossover\", \"cable\"],\n  \"Single Leg Standing Calf Raise\": [\"Single Leg Calf Raise\", \"barbell\"],\n  \"Single Leg Standing Calf Raise (Barbell)\": [\"Single Leg Calf Raise\", \"barbell\"],\n  \"Single Leg Standing Calf Raise (Dumbbell)\": [\"Single Leg Calf Raise\", \"dumbbell\"],\n  \"Single Leg Standing Calf Raise (Machine)\": [\"Single Leg Calf Raise\", \"leverageMachine\"],\n  \"Sissy Squat (Weighted)\": [\"Sissy Squat\", \"bodyweight\"],\n  \"Sit Up (Weighted)\": [\"Sit Up\", \"bodyweight\"],\n  \"Split Squat (Dumbbell)\": [\"Bulgarian Split Squat\", \"dumbbell\"],\n  \"Squat Row\": [\"Squat Row\", \"band\"],\n  \"Standing Calf Raise\": [\"Standing Calf Raise\", \"dumbbell\"],\n  \"Standing Calf Raise (Barbell)\": [\"Standing Calf Raise\", \"barbell\"],\n  \"Standing Calf Raise (Dumbbell)\": [\"Standing Calf Raise\", \"dumbbell\"],\n  \"Standing Calf Raise (Machine)\": [\"Standing Calf Raise\", \"leverageMachine\"],\n  \"Step Up\": [\"Step up\", \"dumbbell\"],\n  \"T Bar Row\": [\"T Bar Row\", \"leverageMachine\"],\n  \"Toes to Bar\": [\"Toes To Bar\", \"bodyweight\"],\n  \"Torso Rotation\": [\"Torso Rotation\", \"bodyweight\"],\n  \"Triceps Dip\": [\"Triceps Dip\", \"bodyweight\"],\n  \"Triceps Dip (Assisted)\": [\"Triceps Dip\", \"bodyweight\"],\n  \"Triceps Dip (Weighted)\": [\"Triceps Dip\", \"bodyweight\"],\n  \"Triceps Extension (Cable)\": [\"Triceps Extension\", \"cable\"],\n  \"Triceps Extension (Dumbbell)\": [\"Triceps Extension\", \"dumbbell\"],\n  \"Triceps Extension (Machine)\": [\"Triceps Extension\", \"leverageMachine\"],\n  \"Triceps Extension (Suspension)\": [\"Triceps Extension\", \"dumbbell\"],\n  \"Triceps Extension (Barbell)\": [\"Triceps Extension\", \"barbell\"],\n  \"Triceps Pressdown\": [\"Triceps Pushdown\", \"cable\"],\n  \"Triceps Pushdown\": [\"Triceps Pushdown\", \"cable\"],\n  \"Triceps Rope Pushdown\": [\"Triceps Pushdown\", \"cable\"],\n  \"Wrist Roller\": [\"Wrist Roller\", \"bodyweight\"],\n};\n\nconst hevyMonths = [\"jan\", \"feb\", \"mar\", \"apr\", \"may\", \"jun\", \"jul\", \"aug\", \"sep\", \"oct\", \"nov\", \"dec\"];\n\n// Hermes only parses ISO 8601 dates, so Hevy's \"13 Mar 2026, 15:22\" format must be parsed manually\nfunction parseHevyDate(raw: string | undefined): number | undefined {\n  if (!raw) {\n    return undefined;\n  }\n  const match = raw.match(/^(\\d{1,2}) ([A-Za-z]{3}) (\\d{4}),? (\\d{1,2}):(\\d{2})(?::(\\d{2}))?$/);\n  if (match) {\n    const month = hevyMonths.indexOf(match[2].toLowerCase());\n    if (month !== -1) {\n      const ts = new Date(\n        Number(match[3]),\n        month,\n        Number(match[1]),\n        Number(match[4]),\n        Number(match[5]),\n        Number(match[6] ?? 0)\n      ).getTime();\n      if (!isNaN(ts)) {\n        return ts;\n      }\n    }\n  }\n  const ts = new Date(raw).getTime();\n  return isNaN(ts) ? undefined : ts;\n}\n\ninterface IHevyRecord {\n  title: string;\n  start_time: string;\n  end_time: string;\n  exercise_title: string;\n  description: string;\n  exercise_notes: string;\n  set_index: number;\n  set_type: string;\n  weight_lbs?: number;\n  weight_kg?: number;\n  reps: number;\n}\n\ninterface IHevyStructExercise {\n  exercise_title: string;\n  exercise_notes: string;\n  sets: IHevyStructSet[];\n  warmupSets: IHevyStructSet[];\n}\n\ninterface IHevyStructSet {\n  weight_lbs?: number;\n  weight_kg?: number;\n  reps: number;\n}\n\ninterface IHevyStruct {\n  title: string;\n  start_time: string;\n  end_time: string;\n  description: string;\n  exercises: IHevyStructExercise[];\n  row: number;\n}\n\nfunction parseHevyNumber(value: string | number | undefined | null): number | undefined {\n  if (value == null || `${value}`.trim() === \"\") {\n    return undefined;\n  }\n  const num = Number(`${value}`);\n  return isNaN(num) ? undefined : num;\n}\n\n// Leave the weight undefined when both columns are blank (bodyweight set) instead of fabricating 0kg.\nfunction buildHevyWeight(set: IHevyStructSet): IWeight | undefined {\n  if (set.weight_lbs != null) {\n    return Weight_build(set.weight_lbs, \"lb\");\n  }\n  if (set.weight_kg != null) {\n    return Weight_build(set.weight_kg, \"kg\");\n  }\n  return undefined;\n}\n\nfunction validateHevyRecord(record: IHevyRecord & { row: number }): IImportRowError | undefined {\n  if (parseHevyDate(record.start_time) == null) {\n    return {\n      row: record.row,\n      column: \"start_time\",\n      value: `${record.start_time ?? \"\"}`,\n      message: `\"${record.start_time ?? \"\"}\" is not a valid date`,\n    };\n  }\n  for (const column of [\"reps\", \"weight_lbs\", \"weight_kg\"] as const) {\n    const value = record[column];\n    if (value != null && `${value}`.trim() !== \"\" && isNaN(Number(`${value}`))) {\n      return { row: record.row, column, value: `${value}`, message: `\"${value}\" is not a number` };\n    }\n  }\n  return undefined;\n}\n\nfunction collectHevyWarnings(record: IHevyRecord & { row: number }, warnings: IImportRowError[]): void {\n  const startTs = parseHevyDate(record.start_time);\n  if (startTs != null && ImportUtils_isSuspiciousTimestamp(startTs)) {\n    warnings.push({\n      row: record.row,\n      column: \"start_time\",\n      value: `${record.start_time}`,\n      message: `\"${record.start_time}\" looks like an implausible workout date`,\n    });\n  }\n  for (const [column, unit] of [\n    [\"weight_lbs\", \"lb\"],\n    [\"weight_kg\", \"kg\"],\n  ] as const) {\n    const value = parseHevyNumber(record[column]);\n    if (value != null && ImportUtils_isSuspiciousWeight(value, unit)) {\n      warnings.push({\n        row: record.row,\n        column,\n        value: `${record[column]}`,\n        message: `${value} ${unit} looks like an implausible weight`,\n      });\n    }\n  }\n  const reps = parseHevyNumber(record.reps);\n  if (reps != null && ImportUtils_isSuspiciousReps(reps)) {\n    warnings.push({\n      row: record.row,\n      column: \"reps\",\n      value: `${record.reps}`,\n      message: `${reps} looks like an implausible rep count`,\n    });\n  }\n}\n\nexport function ImportFromHevy_convertHevyCsvToHistoryRecords(hevyCsvRaw: string, settings: ISettings): IImportResult {\n  const parsed = Papa.parse<IHevyRecord>(hevyCsvRaw, { header: true, skipEmptyLines: true });\n  const kind = ImportUtils_detectCsvKind((parsed.meta.fields ?? []).map((f) => `${f}`));\n  if (kind === \"liftosaur\") {\n    throw new ImportFileError(\n      'This looks like a Liftosaur history CSV. Use \"Import history from CSV file\" in Settings instead.'\n    );\n  }\n  if (kind !== \"hevy\") {\n    throw new ImportFileError(\"This doesn't look like a Hevy workout export CSV.\");\n  }\n  const hevyRecords = parsed.data.map((record, i) => ({ ...record, row: i + 2 }));\n  if (hevyRecords.length === 0) {\n    throw new ImportFileError(\"The file has no workout rows\");\n  }\n\n  const errors: IImportRowError[] = [];\n  const warnings: IImportRowError[] = [];\n  const validRecords: (IHevyRecord & { row: number })[] = [];\n  for (const record of hevyRecords) {\n    const error = validateHevyRecord(record);\n    if (error) {\n      errors.push(error);\n    } else {\n      collectHevyWarnings(record, warnings);\n      validRecords.push(record);\n    }\n  }\n  if (validRecords.length < hevyRecords.length / 2) {\n    throw new ImportFileError(\n      `${errors.length} of ${hevyRecords.length} rows failed to parse - this doesn't look like a valid Hevy export.`\n    );\n  }\n\n  const hevyWorkouts: IHevyStruct[] = [];\n  for (const workout of ObjectUtils_values(CollectionUtils_groupByKey(validRecords, \"start_time\"))) {\n    if (!workout) {\n      continue;\n    }\n    const hevyExercises: IHevyStructExercise[] = [];\n    const exercises = CollectionUtils_groupByKey(workout, \"exercise_title\");\n    for (const exercise of ObjectUtils_values(exercises)) {\n      if (!exercise) {\n        continue;\n      }\n      const warmupSets = exercise.filter((record) => record.set_type === \"warmup\");\n      warmupSets.sort((a, b) => (a.set_index ?? 0) - (b.set_index ?? 0));\n      const sets = exercise.filter((record) => record.set_type !== \"warmup\");\n      sets.sort((a, b) => (a.set_index ?? 0) - (b.set_index ?? 0));\n      hevyExercises.push({\n        exercise_title: exercise[0].exercise_title,\n        exercise_notes: (exercise[0].exercise_notes || \"\").replace(/\\\\n/g, \"\\n\"),\n        warmupSets: warmupSets.map((set) => ({\n          weight_lbs: parseHevyNumber(set.weight_lbs),\n          weight_kg: parseHevyNumber(set.weight_kg),\n          reps: parseHevyNumber(set.reps) ?? 1,\n        })),\n        sets: sets.map((set) => ({\n          weight_lbs: parseHevyNumber(set.weight_lbs),\n          weight_kg: parseHevyNumber(set.weight_kg),\n          reps: parseHevyNumber(set.reps) ?? 1,\n        })),\n      });\n    }\n    hevyWorkouts.push({\n      title: workout[0].title,\n      start_time: workout[0].start_time,\n      end_time: workout[0].end_time,\n      description: (workout[0].description || \"\").replace(/\\\\n/g, \"\\n\"),\n      exercises: hevyExercises,\n      row: workout[0].row,\n    });\n  }\n\n  const customExercises: Record<string, ICustomExercise> = {};\n  const backMap: Partial<Record<string, string>> = {};\n  const historyRecords = hevyWorkouts.map((hevyWorkout): IHistoryRecord | undefined => {\n    const startTs = parseHevyDate(hevyWorkout.start_time)!;\n    const endTs = parseHevyDate(hevyWorkout.end_time);\n    if (hevyWorkout.end_time && endTs == null) {\n      warnings.push({\n        row: hevyWorkout.row,\n        column: \"end_time\",\n        value: hevyWorkout.end_time,\n        message: `\"${hevyWorkout.end_time}\" is not a valid date, using the start time instead`,\n      });\n    }\n    const entries = hevyWorkout.exercises.map((record, index) => {\n      let exerciseNameAndEquipment = exerciseMapping[record.exercise_title];\n      let exerciseId: string;\n      if (!exerciseNameAndEquipment) {\n        // Key by the sanitized name so titles differing only in stripped characters\n        // (e.g. \"Cable Row (Wide)\" vs \"Cable Row Wide\") merge into one custom exercise.\n        const sanitizedTitle = Exercise_sanitizeName(record.exercise_title);\n        const maybeExerciseId = backMap[sanitizedTitle];\n        if (!maybeExerciseId) {\n          exerciseId = UidFactory_generateUid(8);\n          backMap[sanitizedTitle] = exerciseId;\n          customExercises[exerciseId] = {\n            vtype: \"custom_exercise\",\n            id: exerciseId,\n            name: sanitizedTitle,\n            isDeleted: false,\n            meta: {\n              bodyParts: [],\n              targetMuscles: [],\n              synergistMuscles: [],\n              sortedEquipment: [],\n            },\n            types: [],\n          };\n        } else {\n          exerciseId = maybeExerciseId;\n        }\n        exerciseNameAndEquipment = [sanitizedTitle, undefined];\n      } else {\n        const [exerciseName] = exerciseNameAndEquipment;\n        const exercise = Exercise_findByName(exerciseName, {})!;\n        exerciseId = exercise.id;\n      }\n      const [, equipment] = exerciseNameAndEquipment;\n      const isUnilateral = Exercise_getIsUnilateral({ id: exerciseId, equipment: equipment }, settings);\n      return {\n        vtype: \"history_entry\" as const,\n        id: Progress_getEntryId({ id: exerciseId, equipment }, UidFactory_generateUid(3)),\n        exercise: { id: exerciseId, equipment: equipment },\n        index,\n        warmupSets: record.warmupSets.map((set, i) => {\n          const weight = buildHevyWeight(set);\n          return {\n            vtype: \"set\" as const,\n            id: UidFactory_generateUid(6),\n            index: i,\n            originalWeight: weight,\n            weight,\n            completedWeight: weight,\n            reps: set.reps ?? 1,\n            completedReps: set.reps ?? 1,\n            completedRepsLeft: isUnilateral ? set.reps : undefined,\n            isUnilateral,\n            isCompleted: true,\n            isAmrap: false,\n            timestamp: startTs,\n          };\n        }),\n        sets: record.sets.map((set, i) => {\n          const weight = buildHevyWeight(set);\n          return {\n            vtype: \"set\" as const,\n            id: UidFactory_generateUid(6),\n            index: i,\n            weight,\n            originalWeight: weight,\n            completedWeight: weight,\n            reps: set.reps ?? 1,\n            completedReps: set.reps ?? 1,\n            completedRepsLeft: isUnilateral ? set.reps : undefined,\n            isAmrap: false,\n            timestamp: startTs,\n            isUnilateral,\n            isCompleted: true,\n          };\n        }),\n        notes: record.exercise_notes,\n      };\n    });\n    const historyRecord: IHistoryRecord = {\n      vtype: \"history_record\",\n      id: History_generateId(endTs ?? startTs),\n      date: new Date(endTs ?? startTs).toISOString(),\n      startTime: startTs,\n      endTime: endTs ?? startTs,\n      dayName: hevyWorkout.title,\n      programName: \"Hevy\",\n      programId: \"hevy\",\n      day: 1,\n      notes: hevyWorkout.description,\n      entries,\n    };\n    const validation = Storage_validate(historyRecord, VHistoryRecord, \"historyRecord\");\n    if (!validation.success) {\n      errors.push({\n        row: hevyWorkout.row,\n        message: `Workout \"${hevyWorkout.start_time}\" failed validation: ${validation.error.join(\"; \")}`,\n      });\n      return undefined;\n    }\n    return historyRecord;\n  });\n\n  return { historyRecords: CollectionUtils_compact(historyRecords), customExercises, errors, warnings };\n}\n","import {\n  IHistoryRecord,\n  ICustomExercise,\n  ISettings,\n  IHistoryEntry,\n  availableMuscles,\n  IMuscle,\n  IExerciseType,\n  VHistoryRecord,\n} from \"../types\";\nimport Papa from \"papaparse\";\nimport { CollectionUtils_groupByKey, CollectionUtils_compact, CollectionUtils_sortBy } from \"./collection\";\nimport { ObjectUtils_values } from \"./object\";\nimport { Exercise_findByNameAndEquipment, Exercise_getIsUnilateral, Exercise_sanitizeName } from \"../models/exercise\";\nimport { Weight_build } from \"../models/weight\";\nimport { StringUtils_dashcase } from \"./string\";\nimport { Progress_getEntryId } from \"../models/progress\";\nimport { UidFactory_generateUid } from \"./generator\";\nimport { History_generateId } from \"../models/history\";\nimport { Storage_validate } from \"../models/storage\";\nimport {\n  IImportResult,\n  IImportRowError,\n  ImportFileError,\n  ImportUtils_detectCsvKind,\n  ImportUtils_isSuspiciousReps,\n  ImportUtils_isSuspiciousTimestamp,\n  ImportUtils_isSuspiciousWeight,\n} from \"./importTypes\";\n\nconst columns = [\n  \"workoutDateTime\",\n  \"program\",\n  \"dayname\",\n  \"exercise\",\n  \"isWarmupSet\",\n  \"requiredReps\",\n  \"completedReps\",\n  \"isAmrap\",\n  \"rpe\",\n  \"completedRpe\",\n  \"logRpe\",\n  \"weightValue\",\n  \"weightUnit\",\n  \"completedWeightValue\",\n  \"completedWeightUnit\",\n  \"askWeight\",\n  \"completedRepsTime\",\n  \"targetMuscles\",\n  \"synergistMuscles\",\n  \"notes\",\n] as const;\ntype IColumn = (typeof columns)[number];\n\ninterface ILiftosaurRecord extends Record<IColumn, string> {\n  row: number;\n}\n\nconst numericColumns: IColumn[] = [\n  \"requiredReps\",\n  \"completedReps\",\n  \"rpe\",\n  \"completedRpe\",\n  \"weightValue\",\n  \"completedWeightValue\",\n];\nconst unitColumns: IColumn[] = [\"weightUnit\", \"completedWeightUnit\"];\n\nfunction parseTimestamp(date: string): number | undefined {\n  try {\n    const value = new Date(date).getTime();\n    return isNaN(value) ? undefined : value;\n  } catch (e) {\n    return undefined;\n  }\n}\n\nfunction validateRecord(record: ILiftosaurRecord): IImportRowError | undefined {\n  if (parseTimestamp(record.workoutDateTime) == null) {\n    return {\n      row: record.row,\n      column: \"Workout DateTime\",\n      value: record.workoutDateTime,\n      message: `\"${record.workoutDateTime}\" is not a valid date`,\n    };\n  }\n  for (const column of numericColumns) {\n    const value = record[column];\n    if (value && isNaN(Number(value))) {\n      return { row: record.row, column, value, message: `\"${value}\" is not a number` };\n    }\n  }\n  for (const column of unitColumns) {\n    const value = record[column];\n    if (value && value !== \"kg\" && value !== \"lb\") {\n      return { row: record.row, column, value, message: `\"${value}\" is not a valid unit (expected \"kg\" or \"lb\")` };\n    }\n  }\n  return undefined;\n}\n\nfunction collectWarnings(record: ILiftosaurRecord, warnings: IImportRowError[]): void {\n  const timestamp = parseTimestamp(record.workoutDateTime);\n  if (timestamp != null && ImportUtils_isSuspiciousTimestamp(timestamp)) {\n    warnings.push({\n      row: record.row,\n      column: \"Workout DateTime\",\n      value: record.workoutDateTime,\n      message: `\"${record.workoutDateTime}\" looks like an implausible workout date`,\n    });\n  }\n  for (const [valueColumn, unitColumn] of [\n    [\"weightValue\", \"weightUnit\"],\n    [\"completedWeightValue\", \"completedWeightUnit\"],\n  ] as const) {\n    const value = record[valueColumn];\n    const unit = record[unitColumn];\n    if (value && (unit === \"kg\" || unit === \"lb\") && ImportUtils_isSuspiciousWeight(Number(value), unit)) {\n      warnings.push({\n        row: record.row,\n        column: valueColumn,\n        value,\n        message: `${value} ${unit} looks like an implausible weight`,\n      });\n    }\n  }\n  for (const column of [\"requiredReps\", \"completedReps\"] as const) {\n    const value = record[column];\n    if (value && !isNaN(Number(value)) && ImportUtils_isSuspiciousReps(Number(value))) {\n      warnings.push({ row: record.row, column, value, message: `${value} looks like an implausible rep count` });\n    }\n  }\n  if (record.completedRepsTime && parseTimestamp(record.completedRepsTime) == null) {\n    warnings.push({\n      row: record.row,\n      column: \"Completed Reps Time\",\n      value: record.completedRepsTime,\n      message: `\"${record.completedRepsTime}\" is not a valid time, using the workout date instead`,\n    });\n  }\n}\n\nexport function ImportFromLiftosaur_convertLiftosaurCsvToHistoryRecords(\n  liftosaurCsvRaw: string,\n  settings: ISettings\n): IImportResult {\n  const parsed = Papa.parse<string[]>(liftosaurCsvRaw, { skipEmptyLines: true });\n  const rows = parsed.data;\n  if (rows.length < 2) {\n    throw new ImportFileError(\"The file has no workout rows\");\n  }\n  const kind = ImportUtils_detectCsvKind(rows[0].map((h) => `${h}`));\n  if (kind === \"hevy\") {\n    throw new ImportFileError(\n      'This looks like a Hevy export. Use \"Import history from other apps\" in Settings instead.'\n    );\n  }\n  if (kind !== \"liftosaur\") {\n    throw new ImportFileError(\n      \"This doesn't look like a Liftosaur history CSV - the header row doesn't match the format of \" +\n        '\"Export history to CSV file\".'\n    );\n  }\n\n  const liftosaurRecords = rows.slice(1).map<ILiftosaurRecord>((cells, i) => {\n    const record = { row: i + 2 } as ILiftosaurRecord;\n    columns.forEach((column, columnIndex) => {\n      record[column] = `${cells[columnIndex] ?? \"\"}`;\n    });\n    return record;\n  });\n\n  const errors: IImportRowError[] = [];\n  const warnings: IImportRowError[] = [];\n  const validRecords: ILiftosaurRecord[] = [];\n  for (const record of liftosaurRecords) {\n    const error = validateRecord(record);\n    if (error) {\n      errors.push(error);\n    } else {\n      collectWarnings(record, warnings);\n      validRecords.push(record);\n    }\n  }\n  if (validRecords.length < liftosaurRecords.length / 2) {\n    throw new ImportFileError(\n      `${errors.length} of ${liftosaurRecords.length} rows failed to parse - this doesn't look like a valid Liftosaur history CSV.`\n    );\n  }\n\n  const groupedRecords = CollectionUtils_groupByKey(validRecords, \"workoutDateTime\");\n  const customExercises: Record<string, ICustomExercise> = {};\n  const historyRecords = CollectionUtils_compact(ObjectUtils_values(groupedRecords)).map((records) => {\n    const rawEntries = CollectionUtils_compact(ObjectUtils_values(CollectionUtils_groupByKey(records, \"exercise\")));\n    const entries = rawEntries.map((rawSets, index) => {\n      const firstSet = rawSets[0];\n      const exerciseName = Exercise_sanitizeName(firstSet.exercise || \"Unknown\");\n      const exercise = Exercise_findByNameAndEquipment(exerciseName, settings.exercises);\n      let exerciseId: string;\n      let exerciseEquipment: string | undefined = undefined;\n      if (exercise) {\n        exerciseId = exercise.id;\n        exerciseEquipment = exercise.equipment;\n      } else {\n        const id = StringUtils_dashcase(exerciseName || \"exercise\");\n        customExercises[id] = {\n          vtype: \"custom_exercise\",\n          id,\n          name: exerciseName,\n          isDeleted: false,\n          meta: {\n            bodyParts: [],\n            targetMuscles: ((firstSet.targetMuscles || \"\")\n              .split(\",\")\n              .filter((m) => availableMuscles.indexOf(m as IMuscle) !== -1) || []) as IMuscle[],\n            synergistMuscles: ((firstSet.synergistMuscles || \"\")\n              .split(\",\")\n              .filter((m) => availableMuscles.indexOf(m as IMuscle) !== -1) || []) as IMuscle[],\n            sortedEquipment: [],\n          },\n          types: [],\n        };\n        exerciseId = id;\n      }\n\n      const rawWarmupSets = rawSets.filter((set) => set.isWarmupSet === \"1\");\n      const rawWorkoutSets = rawSets.filter((set) => set.isWarmupSet !== \"1\");\n      const exerciseType: IExerciseType = { id: exerciseId, equipment: exerciseEquipment };\n      const isUnilateral = Exercise_getIsUnilateral(exerciseType, settings);\n\n      const buildSet = (set: ILiftosaurRecord, i: number): IHistoryEntry[\"sets\"][number] => {\n        const weight =\n          set.weightValue && set.weightUnit\n            ? Weight_build(Number(set.weightValue), set.weightUnit as \"kg\" | \"lb\")\n            : undefined;\n        const completedReps = set.completedReps ? Number(set.completedReps) : undefined;\n        const completedWeight =\n          set.completedWeightValue && set.completedWeightUnit\n            ? Weight_build(Number(set.completedWeightValue), set.completedWeightUnit as \"kg\" | \"lb\")\n            : undefined;\n        const completedRpe = set.completedRpe ? Number(set.completedRpe) : undefined;\n        return {\n          vtype: \"set\",\n          id: UidFactory_generateUid(6),\n          index: i,\n          reps: set.requiredReps ? Number(set.requiredReps) : undefined,\n          completedReps: completedReps,\n          isAmrap: set.isAmrap === \"1\",\n          rpe: set.rpe ? Number(set.rpe) : undefined,\n          completedRpe: completedRpe,\n          completedRepsLeft: isUnilateral ? completedReps : undefined,\n          isUnilateral,\n          logRpe: set.logRpe === \"1\",\n          weight: weight,\n          originalWeight: weight,\n          completedWeight: completedWeight,\n          askWeight: set.askWeight === \"1\",\n          label: \"\",\n          timestamp: parseTimestamp(set.completedRepsTime) ?? parseTimestamp(set.workoutDateTime),\n          isCompleted: completedReps != null || completedWeight != null || completedRpe != null,\n        };\n      };\n\n      const entry: IHistoryEntry = {\n        vtype: \"history_entry\",\n        id: Progress_getEntryId(exerciseType, UidFactory_generateUid(3)),\n        exercise: exerciseType,\n        index,\n        warmupSets: rawWarmupSets.map(buildSet),\n        sets: rawWorkoutSets.map(buildSet),\n        notes: firstSet.notes,\n      };\n      return entry;\n    });\n    const firstRecord = records[0];\n    let endTime = CollectionUtils_sortBy(\n      CollectionUtils_compact(entries.flatMap((e) => e.warmupSets.concat(e.sets)).map((s) => s.timestamp)).map((t) => ({\n        t,\n      })),\n      \"t\",\n      true\n    )[0]?.t;\n    const startTime = parseTimestamp(firstRecord.workoutDateTime)!;\n    if (endTime == null || endTime < startTime) {\n      endTime = startTime;\n    }\n    const historyRecord: IHistoryRecord = {\n      vtype: \"history_record\",\n      date: new Date(startTime).toISOString(),\n      day: 1,\n      dayName: `${firstRecord.dayname}` || \"Workout\",\n      programName: `${firstRecord.program}` || \"CSV Import\",\n      intervals: [[startTime, endTime]],\n      entries,\n      id: History_generateId(endTime ?? startTime),\n      programId: StringUtils_dashcase(firstRecord.program || \"csv\"),\n      startTime: startTime,\n      dayInWeek: 1,\n      endTime: endTime,\n      notes: \"\",\n    };\n    const validation = Storage_validate(historyRecord, VHistoryRecord, \"historyRecord\");\n    if (!validation.success) {\n      errors.push({\n        row: firstRecord.row,\n        message: `Workout \"${firstRecord.workoutDateTime}\" failed validation: ${validation.error.join(\"; \")}`,\n      });\n      return undefined;\n    }\n    return historyRecord;\n  });\n\n  return { historyRecords: CollectionUtils_compact(historyRecords), customExercises, errors, warnings };\n}\n","import { IEither } from \"./types\";\nimport { Encoder_decode } from \"./encoder\";\nimport { Service } from \"../api/service\";\nimport { UrlUtils_build } from \"./url\";\n\nexport interface IImportLinkData {\n  decoded: string;\n  source?: string;\n  userid?: string;\n}\n\nexport async function ImportFromLink_importFromLink(\n  link: string,\n  client: Window[\"fetch\"]\n): Promise<IEither<{ decoded: string; source?: string; userid?: string }, string[]>> {\n  let url: URL;\n  try {\n    url = UrlUtils_build(link);\n  } catch (e) {\n    return { success: false, error: [\"Invalid link\"] };\n  }\n  let base64 = url.searchParams.get(\"data\") || undefined;\n  let source = url.searchParams.get(\"s\") || undefined;\n  let userid = url.searchParams.get(\"u\") || undefined;\n  let decoded;\n  if (base64) {\n    decoded = await getDecodedData(base64);\n  } else {\n    const [type, id] = url.pathname.split(\"/\").filter((p) => p);\n    if ((type === \"p\" || type === \"n\") && id) {\n      const service = new Service(client);\n      const result = await service.getDataFromShortUrl(type, id);\n      base64 = result.data;\n      source = source || result.s;\n      userid = userid || result.u;\n      if (base64) {\n        decoded = await getDecodedData(base64);\n      }\n    }\n  }\n  if (decoded) {\n    if (decoded.success) {\n      return { success: true, data: { decoded: decoded.data, source, userid } };\n    } else {\n      return decoded;\n    }\n  } else {\n    return { success: false, error: [\"No data found\"] };\n  }\n}\n\nasync function getDecodedData(base64: string): Promise<IEither<string, string[]>> {\n  try {\n    const decoded = await Encoder_decode(base64);\n    return { success: true, data: decoded };\n  } catch (e) {\n    return { success: false, error: [\"Error decoding the link\"] };\n  }\n}\n","import { ICustomExercise, IHistoryRecord } from \"../types\";\n\nexport interface IImportRowError {\n  row: number;\n  column?: string;\n  value?: string;\n  message: string;\n}\n\nexport interface IImportResult {\n  historyRecords: IHistoryRecord[];\n  customExercises: Record<string, ICustomExercise>;\n  errors: IImportRowError[];\n  warnings: IImportRowError[];\n}\n\nexport class ImportFileError extends Error {}\n\nexport function ImportUtils_customExercisesForRecords(\n  records: IHistoryRecord[],\n  customExercises: Record<string, ICustomExercise>\n): Record<string, ICustomExercise> {\n  const referencedIds = new Set<string>();\n  for (const record of records) {\n    for (const entry of record.entries) {\n      referencedIds.add(entry.exercise.id);\n    }\n  }\n  const result: Record<string, ICustomExercise> = {};\n  for (const id of Object.keys(customExercises)) {\n    if (referencedIds.has(id)) {\n      result[id] = customExercises[id];\n    }\n  }\n  return result;\n}\n\nconst hevySignatureHeaders = [\"start_time\", \"exercise_title\", \"set_type\"];\nconst liftosaurSignatureHeaders = [\"workout datetime\", \"exercise\", \"is warmup set?\"];\n\nexport function ImportUtils_detectCsvKind(headers: string[]): \"hevy\" | \"liftosaur\" | \"unknown\" {\n  const normalized = headers.map((h) => h.trim().toLowerCase());\n  if (hevySignatureHeaders.every((h) => normalized.includes(h))) {\n    return \"hevy\";\n  }\n  if (liftosaurSignatureHeaders.every((h) => normalized.includes(h))) {\n    return \"liftosaur\";\n  }\n  return \"unknown\";\n}\n\nconst maxWeightLb = 3000;\nconst maxReps = 1000;\nconst minTimestamp = Date.UTC(2000, 0, 1);\n\nexport function ImportUtils_isSuspiciousWeight(value: number, unit: \"kg\" | \"lb\"): boolean {\n  const lb = unit === \"kg\" ? value * 2.2046 : value;\n  return lb < 0 || lb > maxWeightLb;\n}\n\nexport function ImportUtils_isSuspiciousReps(value: number): boolean {\n  return value < 0 || value > maxReps;\n}\n\nexport function ImportUtils_isSuspiciousTimestamp(ts: number): boolean {\n  return ts < minTimestamp || ts > Date.now() + 24 * 60 * 60 * 1000;\n}\n\nexport interface IImportSummary {\n  workoutCount: number;\n  minStartTime?: number;\n  maxStartTime?: number;\n  customExerciseNames: string[];\n  duplicateIds: Set<number>;\n}\n\nexport function ImportUtils_summarize(result: IImportResult, existingHistory: IHistoryRecord[]): IImportSummary {\n  let minStartTime: number | undefined;\n  let maxStartTime: number | undefined;\n  for (const record of result.historyRecords) {\n    if (minStartTime == null || record.startTime < minStartTime) {\n      minStartTime = record.startTime;\n    }\n    if (maxStartTime == null || record.startTime > maxStartTime) {\n      maxStartTime = record.startTime;\n    }\n  }\n  return {\n    workoutCount: result.historyRecords.length,\n    minStartTime,\n    maxStartTime,\n    customExerciseNames: Object.values(result.customExercises)\n      .map((e) => e.name)\n      .sort(),\n    duplicateIds: ImportUtils_findDuplicates(result.historyRecords, existingHistory),\n  };\n}\n\nconst duplicateToleranceMs = 60 * 1000;\n\nexport function ImportUtils_findDuplicates(records: IHistoryRecord[], existingHistory: IHistoryRecord[]): Set<number> {\n  const existingStartTimes = existingHistory.map((r) => r.startTime).sort((a, b) => a - b);\n  const duplicates = new Set<number>();\n  for (const record of records) {\n    let lo = 0;\n    let hi = existingStartTimes.length - 1;\n    while (lo <= hi) {\n      const mid = Math.floor((lo + hi) / 2);\n      const diff = existingStartTimes[mid] - record.startTime;\n      if (Math.abs(diff) <= duplicateToleranceMs) {\n        duplicates.add(record.id);\n        break;\n      } else if (diff < 0) {\n        lo = mid + 1;\n      } else {\n        hi = mid - 1;\n      }\n    }\n  }\n  return duplicates;\n}\n","export function InAppReview_request(): Promise<void> {\n  return Promise.resolve();\n}\n","import { NativeStorage } from \"./nativeStorage\";\nimport { lg } from \"./posthog\";\n\ntype ITransactionMode = \"readonly\" | \"readwrite\";\n\nexport let nativeStorage: NativeStorage | undefined;\n\nfunction runTransaction<T>(\n  mode: ITransactionMode,\n  operation: (objectStore: IDBObjectStore) => IDBRequest<T>\n): Promise<T> {\n  return new Promise<T>(async (resolve, reject) => {\n    const db = await IndexedDBUtils_initialize();\n    if (db == null) {\n      lg(\"ls-indexeddb-empty\");\n      return;\n    }\n    const transaction = db.transaction(\"keyval\", mode);\n    const objectStore = transaction.objectStore(\"keyval\");\n\n    let result: T;\n\n    try {\n      const request = operation(objectStore);\n\n      request.addEventListener(\"success\", () => {\n        result = request.result;\n      });\n\n      request.addEventListener(\"error\", (e) => {\n        const error = (e.target as IDBRequest)?.error;\n        reject(error || new Error(\"IndexedDB request failed\"));\n      });\n    } catch (e) {\n      db.close();\n      reject(e);\n      return;\n    }\n\n    transaction.addEventListener(\"complete\", () => {\n      db.close();\n      resolve(result);\n    });\n\n    transaction.addEventListener(\"error\", (e) => {\n      db.close();\n      const error = (e.target as IDBTransaction)?.error;\n      reject(error || new Error(\"IndexedDB transaction failed\"));\n    });\n\n    transaction.addEventListener(\"abort\", (e) => {\n      db.close();\n      const error = (e.target as IDBTransaction)?.error;\n      reject(error || new Error(\"IndexedDB transaction aborted\"));\n    });\n  });\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction logIndexedDBError(e: any): void {\n  const errorDetails = {\n    name: e?.name,\n    message: e?.message,\n    stack: e?.stack,\n  };\n  lg(\"ls-indexeddb-error\", { json: JSON.stringify(e), details: JSON.stringify(errorDetails) });\n  console.error(\"IndexedDB error:\", e);\n}\n\nasync function withTransaction<T>(\n  mode: ITransactionMode,\n  operation: (objectStore: IDBObjectStore) => IDBRequest<T>\n): Promise<T | undefined> {\n  try {\n    return await runTransaction(mode, operation);\n  } catch (e) {\n    logIndexedDBError(e);\n    return undefined;\n  }\n}\n\nasync function withNative<T>(operation: () => T): Promise<T | undefined> {\n  try {\n    return await operation();\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  } catch (e: any) {\n    lg(\"ls-native-storage-error\", { json: JSON.stringify(e) });\n    console.error(\"Native Storage error:\", e);\n    return undefined;\n  }\n}\n\nexport function IndexedDBUtils_initializeForSafari(): Promise<void> {\n  return new Promise((resolve) => {\n    if (nativeStorage == null && NativeStorage.isAvailable()) {\n      nativeStorage = new NativeStorage();\n    }\n    if (!window.indexedDB) {\n      if (!NativeStorage.isAvailable()) {\n        window.location.reload();\n      }\n      resolve();\n      return;\n    }\n    const connection = window.indexedDB.open(\"keyval-store\");\n    const handler = (): void => {\n      if (connection.result != null) {\n        connection.result.close();\n      }\n      resolve();\n    };\n    connection.addEventListener(\"success\", handler);\n    connection.addEventListener(\"error\", handler);\n    connection.addEventListener(\"blocked\", handler);\n    connection.addEventListener(\"upgradeneeded\", (event) => {\n      const request = event.target as IDBOpenDBRequest;\n      if (request?.result) {\n        request.result.createObjectStore(\"keyval\");\n      }\n    });\n  });\n}\n\nexport function IndexedDBUtils_initialize(): Promise<IDBDatabase | undefined> {\n  return new Promise((resolve, reject) => {\n    if (nativeStorage == null && NativeStorage.isAvailable()) {\n      nativeStorage = new NativeStorage();\n    }\n\n    if (!window.indexedDB) {\n      if (!NativeStorage.isAvailable()) {\n        window.location.reload();\n        reject(new Error(\"IndexedDB is not available\"));\n      } else {\n        resolve(undefined);\n      }\n      return;\n    }\n    const connection = window.indexedDB.open(\"keyval-store\");\n    connection.addEventListener(\"success\", (event) => {\n      const request = event.target as IDBOpenDBRequest;\n      resolve(request.result);\n    });\n    connection.addEventListener(\"error\", (event) => {\n      reject(event);\n    });\n    connection.addEventListener(\"blocked\", (event) => {\n      reject(new Error(\"IndexedDB initialization blocked\"));\n    });\n    connection.addEventListener(\"upgradeneeded\", (event) => {\n      const request = event.target as IDBOpenDBRequest;\n      request.result.createObjectStore(\"keyval\");\n    });\n  });\n}\n\nexport async function IndexedDBUtils_getAllKeys(): Promise<string[]> {\n  let result: string[] | undefined = undefined;\n  if (nativeStorage != null) {\n    result = await nativeStorage.getAllKeys();\n  } else {\n    result = await withTransaction(\"readonly\", (objectStore) => {\n      const keys = objectStore.getAllKeys();\n      return keys as IDBRequest<string[]>;\n    });\n  }\n  if (result != null) {\n    return result;\n  } else {\n    return Promise.resolve([]);\n  }\n}\n\nexport async function IndexedDBUtils_get(key: string): Promise<unknown> {\n  let result: unknown = undefined;\n  const userid =\n    typeof window !== \"undefined\"\n      ? (window.tempUserId ?? (key.startsWith(\"liftosaur_\") ? key.replace(\"liftosaur_\", \"\") : undefined))\n      : undefined;\n  if (nativeStorage != null) {\n    result = await withNative(() => nativeStorage?.get(key));\n    if (result == null) {\n      lg(\"ls-native-fallback-get\", { key }, undefined, userid);\n      const nativeResult = result;\n      result = await withTransaction(\"readonly\", (objectStore) => objectStore.getAll(key)).then(\n        (results: unknown[] | undefined) => {\n          return results?.[0];\n        }\n      );\n      if (nativeResult !== result) {\n        lg(\"ls-native-fallback-discrepancy\", { key }, undefined, userid);\n      }\n    } else {\n      lg(\"ls-native-get\", { key }, undefined, userid);\n    }\n    return result;\n  } else {\n    result = await withTransaction(\"readonly\", (objectStore) => objectStore.getAll(key)).then(\n      (results: unknown[] | undefined) => {\n        return results?.[0];\n      }\n    );\n    lg(\"ls-indexeddb-get\", { key }, undefined, userid);\n  }\n  return result;\n}\n\nexport async function IndexedDBUtils_remove(key: string): Promise<void> {\n  await Promise.all([\n    withTransaction(\"readwrite\", (objectStore) => objectStore.delete(key)),\n    withNative(() => nativeStorage?.delete(key)),\n  ]);\n}\n\nexport async function IndexedDBUtils_set(key: string, value?: string): Promise<void> {\n  await Promise.all([\n    withTransaction(\"readwrite\", (objectStore) => {\n      return objectStore.put(value, key);\n    }),\n    withNative(() => nativeStorage?.set(key, value)),\n  ]);\n}\n\n// Unlike IndexedDBUtils_set, REJECTS on transaction failure (e.g. quota abort): the\n// persistence layer's reference-diff cache must only record refs after a confirmed write,\n// otherwise a silently failed shard write would be skipped as \"unchanged\" forever.\nexport async function IndexedDBUtils_setMany(pairs: Array<[string, string | undefined]>): Promise<void> {\n  if (pairs.length === 0) {\n    return;\n  }\n  const nativeMirror = withNative(async () => {\n    for (const [key, value] of pairs) {\n      if (value != null) {\n        await nativeStorage?.set(key, value);\n      } else {\n        await nativeStorage?.delete(key);\n      }\n    }\n  });\n  try {\n    // Single transaction so concurrent tabs always observe a consistent set of shards\n    await runTransaction(\"readwrite\", (objectStore) => {\n      let lastRequest: IDBRequest | undefined;\n      for (const [key, value] of pairs) {\n        lastRequest = value != null ? objectStore.put(value, key) : objectStore.delete(key);\n      }\n      return lastRequest!;\n    });\n  } catch (e) {\n    logIndexedDBError(e);\n    throw e;\n  } finally {\n    await nativeMirror;\n  }\n}\n","export interface IAuthToken {\n  token: string;\n  expiresAt: number;\n  userId?: string;\n}\n\nexport async function KeychainStore_setAuthToken(_auth: IAuthToken): Promise<void> {\n  return;\n}\n\nexport async function KeychainStore_getAuthToken(): Promise<IAuthToken | undefined> {\n  return undefined;\n}\n\nexport async function KeychainStore_clearAuthToken(): Promise<void> {\n  return;\n}\n","import { Exercise_get, Exercise_getIsUnilateral, Exercise_fullName } from \"../models/exercise\";\nimport { ExerciseImageUtils_url } from \"../models/exerciseImage\";\nimport { Program_evaluate, Program_getProgramExercise } from \"../models/program\";\nimport { ProgramExercise_hasUserPromptedVars } from \"../models/programExercise\";\nimport { Progress_shouldShowAmrapModal, Progress_getNextEntry } from \"../models/progress\";\nimport { ISetsStatus, Reps_setsStatus, Reps_findNextSetIndex } from \"../models/set\";\nimport { Weight_calculatePlates, Weight_print, Weight_formatOneSide } from \"../models/weight\";\nimport { IPlannerProgramExercise } from \"../pages/planner/models/types\";\nimport { IHistoryRecord, IProgram, ISettings, ISubscription } from \"../types\";\nimport { n } from \"./math\";\nimport { NativeWorkoutBridge_updateLiveActivity } from \"./nativeWorkoutBridge\";\nimport { SendMessage_print } from \"./sendMessage\";\nimport { Subscriptions_hasSubscription } from \"./subscriptions\";\nimport { UrlUtils_build } from \"./url\";\n\ndeclare const __HOST__: string;\n\nexport interface ILiveActivitySet {\n  status: ISetsStatus;\n  isWarmup: boolean;\n}\n\nexport interface ILiveActivityEntry {\n  exerciseName: string;\n  currentSet: number;\n  totalSets: number;\n  completedSets: ILiveActivitySet[];\n  canCompleteFromLiveActivity: boolean;\n  isWarmup: boolean;\n  entryIndex: number;\n  setIndex: number;\n\n  exerciseImageUrl?: string;\n  targetReps?: string;\n  targetWeight?: string;\n  targetRPE?: string;\n  targetTimer?: string;\n  plates?: string;\n  currentWeight?: string;\n  currentReps?: string;\n  isSetTimer?: boolean;\n}\n\nexport interface ILiveActivityRest {\n  restTimerSince: number;\n  restTimer: number;\n  // Whether the resting set is part of an `auto` circuit (so the live activity shows \"tap to update\" when\n  // the rest ends, to auto-advance to the next set's work timer). Non-auto rest just expires.\n  isAuto: boolean;\n}\n\nexport interface ILiveActivitySetTimer {\n  setTimerSince: number;\n  setTimer: number;\n  isOverflow: boolean;\n  isCompleted: boolean;\n  entryIndex: number;\n  setIndex: number;\n  restTimer: number;\n}\n\nexport interface ILiveActivityState {\n  restTimer?: ILiveActivityRest;\n  setTimer?: ILiveActivitySetTimer;\n  historyEntryState?: ILiveActivityEntry;\n  workoutStartTimestamp: number;\n  ignoreDoNotDisturb: boolean;\n}\n\nexport function LiveActivityManager_getLiveActivityEntry(\n  progress: IHistoryRecord,\n  entryIndex: number | undefined,\n  setIndex: number | undefined,\n  programExercise: IPlannerProgramExercise | undefined,\n  settings: ISettings\n): ILiveActivityEntry | undefined {\n  if (entryIndex == null || setIndex == null) {\n    return undefined;\n  }\n  const entry = progress.entries[entryIndex];\n  if (!entry) {\n    return undefined;\n  }\n  const exercise = Exercise_get(entry.exercise, settings.exercises);\n  const allSets = [...entry.warmupSets, ...entry.sets];\n  const set = allSets[setIndex];\n  if (setIndex === -1 || !set) {\n    return undefined;\n  }\n  const isNextSetWarmup = setIndex < entry.warmupSets.length;\n  const weightForPlates = set.completedWeight ?? set.weight;\n  const plates = weightForPlates\n    ? Weight_calculatePlates(weightForPlates, settings, weightForPlates.unit || settings.units, entry.exercise)\n    : undefined;\n  let exerciseImageUrl = ExerciseImageUtils_url(exercise, \"small\", settings);\n  if (exerciseImageUrl) {\n    exerciseImageUrl = UrlUtils_build(exerciseImageUrl, __HOST__)?.toString();\n  }\n  const hasUserPromptedVars = !!(programExercise && ProgramExercise_hasUserPromptedVars(programExercise));\n  const canCompleteFromLiveActivity = !Progress_shouldShowAmrapModal(\n    entry,\n    isNextSetWarmup ? setIndex : setIndex - entry.warmupSets.length,\n    isNextSetWarmup ? \"warmup\" : \"workout\",\n    hasUserPromptedVars,\n    settings\n  );\n\n  const isUnilateral = Exercise_getIsUnilateral(entry.exercise, settings);\n  const currentReps =\n    isUnilateral && set.completedRepsLeft != null\n      ? `${set.completedRepsLeft}/${set.completedReps ?? set.reps ?? 0}`\n      : (set.completedReps ?? set.reps);\n  const currentWeight = set.completedWeight ?? set.weight;\n  const state: ILiveActivityEntry = {\n    exerciseName: Exercise_fullName(exercise, settings),\n    exerciseImageUrl,\n    currentSet: setIndex + 1,\n    totalSets: allSets.length,\n    entryIndex: progress.entries.indexOf(entry),\n    setIndex,\n    completedSets: allSets.map((s, i) => ({\n      status: Reps_setsStatus([s]),\n      isWarmup: i < entry.warmupSets.length,\n    })),\n    targetReps: set.reps\n      ? `${set.minReps != null ? `${n(set.minReps)}-` : \"\"}${n(set.reps)}${set.isAmrap ? \"+\" : \"\"}`\n      : undefined,\n    targetWeight: set.weight ? `${Weight_print(set.weight)}${set.askWeight ? \"+\" : \"\"}` : undefined,\n    targetRPE: set.rpe != null ? `${n(set.rpe)}${set.logRpe ? \"+\" : \"\"}` : undefined,\n    targetTimer: set.timer != null ? set.timer.toString() : undefined,\n    plates:\n      (plates?.plates || []).length > 0 ? Weight_formatOneSide(settings, plates?.plates || [], entry.exercise) : \"None\",\n    currentWeight: currentWeight != null ? Weight_print(currentWeight) : undefined,\n    currentReps: currentReps != null ? currentReps.toString() : undefined,\n    isWarmup: isNextSetWarmup,\n    canCompleteFromLiveActivity,\n    isSetTimer: set.setTimer != null,\n  };\n  return state;\n}\n\nexport function LiveActivityManager_updateProgressLiveActivity(\n  program: IProgram | undefined,\n  progress: IHistoryRecord,\n  settings: ISettings,\n  subscription: ISubscription | undefined,\n  entryIndex: number | undefined,\n  setIndex: number | undefined,\n  restTimer: number | undefined,\n  restTimerSince: number | undefined\n): void {\n  const entry = entryIndex != null ? progress.entries[entryIndex] : undefined;\n  const evaluatedProgram = program ? Program_evaluate(program, settings) : undefined;\n  const programExercise =\n    evaluatedProgram && entry\n      ? Program_getProgramExercise(progress.day, evaluatedProgram, entry.programExerciseId)\n      : undefined;\n  LiveActivityManager_updateLiveActivity(\n    progress,\n    entryIndex,\n    setIndex,\n    restTimer,\n    restTimerSince,\n    programExercise,\n    settings,\n    subscription\n  );\n}\n\nexport function LiveActivityManager_updateLiveActivity(\n  progress: IHistoryRecord,\n  entryIndex: number | undefined,\n  setIndex: number | undefined,\n  restTimer: number | undefined,\n  restTimerSince: number | undefined,\n  programExercise: IPlannerProgramExercise | undefined,\n  settings: ISettings,\n  subscription?: ISubscription\n): void {\n  if (!subscription || !Subscriptions_hasSubscription(subscription)) {\n    return;\n  }\n  let liveActivityEntry = LiveActivityManager_getLiveActivityEntry(\n    progress,\n    entryIndex,\n    setIndex,\n    programExercise,\n    settings\n  );\n\n  // A running set timer takes over the live activity entirely: it shows the timed set's\n  // count-up clock and \"complete the set\" buttons instead of the next-exercise/rest layout.\n  // It's driven by `progress.setTimer` so every existing update call site reflects it\n  // automatically, and reverts to the normal layout the moment the clock is cleared.\n  const setTimerModal = progress.setTimer;\n  let setTimerState: ILiveActivitySetTimer | undefined;\n  if (setTimerModal) {\n    const timedEntry = progress.entries[setTimerModal.entryIndex];\n    const timedSet = timedEntry?.sets[setTimerModal.setIndex];\n    if (timedEntry && timedSet) {\n      const absoluteSetIndex = timedEntry.warmupSets.length + setTimerModal.setIndex;\n      const timedEntryState = LiveActivityManager_getLiveActivityEntry(\n        progress,\n        setTimerModal.entryIndex,\n        absoluteSetIndex,\n        programExercise,\n        settings\n      );\n      // Count current/total across warmups+work (the absolute index), matching the rest timer view — so a\n      // timed set after warmups reads \"4/5\" rather than the work-only \"2/3\".\n      liveActivityEntry = timedEntryState ?? liveActivityEntry;\n      setTimerState = {\n        setTimerSince: setTimerModal.startedAt,\n        setTimer: timedSet.setTimer ?? 0,\n        isOverflow: !!timedSet.isOverflowSetTimer,\n        isCompleted: !!timedSet.isCompleted,\n        entryIndex: setTimerModal.entryIndex,\n        setIndex: setTimerModal.setIndex,\n        restTimer: timedSet.timer ?? 0,\n      };\n    }\n  }\n\n  const restingSet =\n    progress.timerEntryIndex != null && progress.timerSetIndex != null\n      ? progress.entries[progress.timerEntryIndex]?.sets[progress.timerSetIndex]\n      : undefined;\n  const attributes: ILiveActivityState = {\n    workoutStartTimestamp: progress.startTime,\n    historyEntryState: liveActivityEntry,\n    setTimer: setTimerState,\n    restTimer:\n      setTimerState == null && progress.timerSince != null && progress.timer != null\n        ? {\n            restTimerSince: restTimerSince ?? progress.timerSince,\n            restTimer: restTimer ?? progress.timer,\n            isAuto: !!restingSet?.auto,\n          }\n        : undefined,\n    ignoreDoNotDisturb: !!settings.ignoreDoNotDisturb,\n  };\n  SendMessage_print(\n    `Main App: Updating live activity for ${liveActivityEntry?.exerciseName} (${liveActivityEntry?.entryIndex}/${liveActivityEntry?.setIndex})`\n  );\n  NativeWorkoutBridge_updateLiveActivity(attributes);\n}\n\nexport function LiveActivityManager_updateLiveActivityForNextEntry(\n  progress: IHistoryRecord,\n  entryIndex: number,\n  mode: \"workout\" | \"warmup\",\n  programExercise: IPlannerProgramExercise | undefined,\n  settings: ISettings,\n  subscription?: ISubscription\n): void {\n  const currentEntry = progress.entries[entryIndex];\n  if (!currentEntry) {\n    return;\n  }\n  const nextEntry = Progress_getNextEntry(progress, currentEntry, mode, true);\n  const nextEntryIndex = nextEntry ? progress.entries.indexOf(nextEntry) : undefined;\n  const nextSetIndex = nextEntry ? Reps_findNextSetIndex(nextEntry) : undefined;\n  LiveActivityManager_updateLiveActivity(\n    progress,\n    nextEntryIndex,\n    nextSetIndex,\n    progress.timer,\n    progress.timerSince,\n    programExercise,\n    settings,\n    subscription\n  );\n}\n","import RB from \"rollbar\";\nimport { Platform } from \"react-native\";\nimport { UrlUtils_build } from \"./url\";\nimport { IAffiliateData } from \"../types\";\nimport { IEventPayload } from \"../api/service\";\nimport { EventManager_isAvailable, EventManager_log } from \"./eventManager\";\n\ndeclare let Rollbar: RB;\ndeclare let __API_HOST__: string;\ndeclare let __COMMIT_HASH__: string;\n\nexport function LogUtils_log(\n  user: string,\n  action: string,\n  affiliates: Partial<Record<string, IAffiliateData>>,\n  subscriptions: string[],\n  referrer?: string,\n  landingPage?: string,\n  detail?: string\n): void {\n  const platform = {\n    name: Platform.OS,\n    version: \"RN\",\n  };\n\n  if (EventManager_isAvailable()) {\n    const event: IEventPayload = {\n      type: \"log\",\n      userId: user,\n      timestamp: Date.now(),\n      action,\n      detail,\n      affiliates,\n      subscriptions,\n      referrer,\n      landingPage,\n      platform,\n      commithash: typeof __COMMIT_HASH__ !== \"undefined\" ? __COMMIT_HASH__ : \"unknown\",\n    };\n    EventManager_log(JSON.stringify(event));\n    return;\n  }\n\n  const url = UrlUtils_build(`${__API_HOST__}/api/log`);\n  try {\n    fetch(url.toString(), {\n      method: \"POST\",\n      body: JSON.stringify({ user, action, detail, affiliates, platform, subscriptions, referrer, landingPage }),\n      credentials: \"include\",\n    });\n  } catch (e) {\n    if (Rollbar != null) {\n      Rollbar.error(\"Log failed\");\n    }\n  }\n}\n","export function MathUtils_round(value: number, to: number): number {\n  return MathUtils_roundFloat(Math.round(value / to) * to, 4);\n}\n\nexport function MathUtils_roundTo05(value: number): number {\n  return MathUtils_round(value, 0.5);\n}\n\nexport function MathUtils_roundTo005(value: number): number {\n  return MathUtils_round(value, 0.05);\n}\n\nexport function MathUtils_roundTo0005(value: number): number {\n  return MathUtils_round(value, 0.005);\n}\n\nexport function MathUtils_roundTo00005(value: number): number {\n  return MathUtils_round(value, 0.0005);\n}\n\nexport function MathUtils_roundTo000005(value: number): number {\n  return MathUtils_round(value, 0.00005);\n}\n\nexport function MathUtils_roundFloat(value: number, precision: number): number {\n  if (typeof value !== \"number\" || isNaN(value)) {\n    return 0;\n  }\n  return +value.toFixed(precision);\n}\n\nexport function MathUtils_applyOp(a: number, b: number, opr: \"+=\" | \"-=\" | \"*=\" | \"/=\" | \"=\"): number {\n  if (opr === \"=\") {\n    return b;\n  } else if (opr === \"+=\") {\n    return a + b;\n  } else if (opr === \"-=\") {\n    return a - b;\n  } else if (opr === \"*=\") {\n    return MathUtils_roundTo005(a * b);\n  } else {\n    return MathUtils_roundTo005(a / b);\n  }\n}\n\nexport function MathUtils_clamp(value: number, min?: number, max?: number): number {\n  if (min != null && max != null) {\n    return Math.max(min, Math.min(max, value));\n  } else if (min != null) {\n    return Math.max(min, value);\n  } else if (max != null) {\n    return Math.min(max, value);\n  } else {\n    return value;\n  }\n}\n\nexport function MathUtils_toWord(num?: number): string | undefined {\n  if (num == null) {\n    return undefined;\n  }\n  return [\"zero\", \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"ten\", \"eleven\", \"twelve\"][\n    num\n  ];\n}\n\nexport function MathUtils_parse(value?: string): number | undefined {\n  if (value == null) {\n    return undefined;\n  }\n  const num = Number(value);\n  return isNaN(num) ? undefined : num;\n}\n\n// Non-US iOS/Android keyboards use \",\" as the decimal separator, but Number()/parseFloat() only accept \".\"\nexport function MathUtils_normalizeNumStr(value: string): string {\n  return value.replace(/,/g, \".\");\n}\n\nexport function n(value: number, precision: number = 2): string {\n  return `${MathUtils_roundFloat(value, precision)}`;\n}\n\nexport function MathUtils_formatCompact(value: number, fractionDigits: number = 1): string {\n  if (!isFinite(value)) {\n    return `${value}`;\n  }\n  const abs = Math.abs(value);\n  const sign = value < 0 ? \"-\" : \"\";\n  const trim = (num: number): string => {\n    const fixed = num.toFixed(fractionDigits);\n    return fixed.replace(/\\.?0+$/, \"\");\n  };\n  if (abs >= 1e9) {\n    return `${sign}${trim(abs / 1e9)}b`;\n  }\n  if (abs >= 1e6) {\n    return `${sign}${trim(abs / 1e6)}m`;\n  }\n  if (abs >= 1e3) {\n    return `${sign}${trim(abs / 1e3)}k`;\n  }\n  return `${sign}${trim(abs)}`;\n}\n","import { UidFactory_generateUid } from \"./generator\";\nimport {\n  SendMessage_toIosAndAndroid,\n  SendMessage_isIos,\n  SendMessage_iosAppVersion,\n  SendMessage_isAndroid,\n  SendMessage_androidAppVersion,\n} from \"./sendMessage\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ninterface IPendingRequest<T = any> {\n  resolve: (value: T) => void;\n  reject: (error: Error) => void;\n  timeout: NodeJS.Timeout;\n}\n\ntype IStorageResponseGetResult = {\n  type: \"storageGetResult\";\n  key: string;\n  requestId: string;\n  value: string;\n};\n\ntype IStorageResponseSetResult = {\n  type: \"storageSetResult\";\n  key: string;\n  requestId: string;\n  success: boolean;\n};\n\ntype IStorageResponseDeleteResult = {\n  type: \"storageDeleteResult\";\n  key: string;\n  requestId: string;\n  success: boolean;\n};\n\ntype IStorageResponseHasResult = {\n  type: \"storageHasResult\";\n  key: string;\n  requestId: string;\n  exists: boolean;\n};\n\ntype IStorageResponseGetAllKeysResult = {\n  type: \"storageGetAllKeysResult\";\n  requestId: string;\n  keys: string[];\n};\n\ntype IStorageResponse =\n  | IStorageResponseGetResult\n  | IStorageResponseSetResult\n  | IStorageResponseDeleteResult\n  | IStorageResponseHasResult\n  | IStorageResponseGetAllKeysResult;\n\nexport class NativeStorage {\n  private readonly pendingRequests: Map<string, IPendingRequest>;\n\n  constructor() {\n    this.pendingRequests = new Map();\n    window.addEventListener(\"message\", (event) => {\n      if (event.data != null) {\n        this.handleResponse(event.data);\n      }\n    });\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  public async set<T = any>(key: string, value: T): Promise<boolean> {\n    const requestId = this.generateRequestId();\n    const promise = this.createPromise<boolean>(requestId);\n\n    SendMessage_toIosAndAndroid({\n      type: \"storageSet\",\n      key: key,\n      value: typeof value === \"string\" ? value : JSON.stringify(value),\n      requestId: requestId,\n    });\n\n    return promise;\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  public async get<T = any>(key: string): Promise<T | undefined> {\n    const requestId = this.generateRequestId();\n    const promise = this.createPromise<T | undefined>(requestId);\n\n    SendMessage_toIosAndAndroid({\n      type: \"storageGet\",\n      key: key,\n      requestId: requestId,\n    });\n\n    return promise;\n  }\n\n  public async delete(key: string): Promise<boolean> {\n    const requestId = this.generateRequestId();\n    const promise = this.createPromise<boolean>(requestId);\n\n    SendMessage_toIosAndAndroid({\n      type: \"storageDelete\",\n      key: key,\n      requestId: requestId,\n    });\n\n    return promise;\n  }\n\n  public async has(key: string): Promise<boolean> {\n    const requestId = this.generateRequestId();\n    const promise = this.createPromise<boolean>(requestId);\n\n    SendMessage_toIosAndAndroid({\n      type: \"storageHas\",\n      key: key,\n      requestId: requestId,\n    });\n\n    return promise;\n  }\n\n  public async getAllKeys(): Promise<string[]> {\n    const requestId = this.generateRequestId();\n    const promise = this.createPromise<string[]>(requestId);\n\n    SendMessage_toIosAndAndroid({\n      type: \"storageGetAllKeys\",\n      requestId: requestId,\n    });\n\n    return promise;\n  }\n\n  public async clear(): Promise<boolean> {\n    const keys = await this.getAllKeys();\n    await Promise.all(keys.map((key) => this.delete(key)));\n    return true;\n  }\n\n  public static isAvailable(): boolean {\n    return (\n      (SendMessage_isIos() && SendMessage_iosAppVersion() >= 12) ||\n      (SendMessage_isAndroid() && SendMessage_androidAppVersion() >= 21)\n    );\n  }\n\n  private generateRequestId(): string {\n    return `req_${UidFactory_generateUid(8)}`;\n  }\n\n  private handleResponse(data: IStorageResponse): void {\n    if (!data.requestId) {\n      return;\n    }\n\n    const pendingRequest = this.pendingRequests.get(data.requestId);\n    if (!pendingRequest) {\n      return;\n    }\n\n    clearTimeout(pendingRequest.timeout);\n    this.pendingRequests.delete(data.requestId);\n\n    if (data.type === \"storageSetResult\") {\n      pendingRequest.resolve(data.success ?? false);\n    } else if (data.type === \"storageGetResult\") {\n      const value = data.value;\n      pendingRequest.resolve(value);\n    } else if (data.type === \"storageDeleteResult\") {\n      pendingRequest.resolve(data.success ?? false);\n    } else if (data.type === \"storageHasResult\") {\n      pendingRequest.resolve(data.exists ?? false);\n    } else if (data.type === \"storageGetAllKeysResult\") {\n      pendingRequest.resolve(data.keys || []);\n    }\n  }\n\n  private createPromise<T>(requestId: string, timeoutMs: number = 5000): Promise<T> {\n    return new Promise((resolve, reject) => {\n      const timeout = setTimeout(() => {\n        if (this.pendingRequests.has(requestId)) {\n          this.pendingRequests.delete(requestId);\n          reject(new Error(`Native storage operation timed out (requestId: ${requestId})`));\n        }\n      }, timeoutMs);\n\n      this.pendingRequests.set(requestId, { resolve, reject, timeout });\n    });\n  }\n}\n","import { SendMessage_toAndroid, SendMessage_toIos } from \"./sendMessage\";\n\nexport type INativeTimerStartParams = {\n  duration: number;\n  title: string;\n  subtitleHeader: string;\n  subtitle: string;\n  bodyHeader: string;\n  body: string;\n  volume: number;\n  vibration: boolean;\n  ignoreDoNotDisturb: boolean;\n};\n\nexport function NativeTimerBridge_startTimer(params: INativeTimerStartParams): void {\n  const obj = {\n    type: \"startTimer\",\n    duration: params.duration.toString(),\n    title: params.title,\n    subtitleHeader: params.subtitleHeader,\n    subtitle: params.subtitle,\n    bodyHeader: params.bodyHeader,\n    body: params.body,\n    ignoreDoNotDisturb: params.ignoreDoNotDisturb ? \"true\" : \"false\",\n    vibration: params.vibration ? \"true\" : \"false\",\n    volume: params.volume.toString(),\n  };\n  SendMessage_toIos(obj);\n  SendMessage_toAndroid(obj);\n}\n\nexport function NativeTimerBridge_stopTimer(): void {\n  SendMessage_toIos({ type: \"stopTimer\" });\n  SendMessage_toAndroid({ type: \"stopTimer\" });\n}\n\nexport function NativeTimerBridge_playSound(volume: number, vibration: boolean, sound: string): boolean {\n  return (\n    SendMessage_toIos({ type: \"playSound\", volume: `${volume}`, vibration: vibration ? \"true\" : \"false\", sound }) ||\n    SendMessage_toAndroid({ type: \"playSound\", volume: `${volume}`, vibration: vibration ? \"true\" : \"false\", sound })\n  );\n}\n\nexport function NativeTimerBridge_subscribeOnScheduled(_handler: () => void): () => void {\n  // Web/WebView path: app.tsx already listens for window.postMessage({type:\"timerScheduled\"})\n  // and sets nativeNotificationScheduled. This subscription is a no-op for symmetry with .native.\n  return () => {};\n}\n","export type INativeWatchEvent = {\n  type:\n    | \"watchStorageMerge\"\n    | \"reloadStorageFromDisk\"\n    | \"liveActivityStorage\"\n    | \"endWorkout\"\n    | \"requestStorage\"\n    | \"requestAuth\"\n    | \"watchCrashReport\";\n  storage?: string;\n  deviceId?: string;\n  isLiveActivity?: boolean;\n  forceUpdateEntryIndex?: boolean;\n  data?: string;\n};\n\nexport type INativeWatchAuth = {\n  token: string;\n  expiresAt: number;\n  userId?: string;\n};\n\nexport function NativeWatchBridge_isAvailable(): boolean {\n  return false;\n}\n\nexport function NativeWatchBridge_subscribeToWatchEvents(_handler: (event: INativeWatchEvent) => void): () => void {\n  return () => {};\n}\n\nexport function NativeWatchBridge_sendStorageToWatch(_filteredStorageJson: string): void {}\n\nexport function NativeWatchBridge_sendAuthToWatch(_auth: INativeWatchAuth): void {}\n\nexport function NativeWatchBridge_sendNoAuthToWatch(): void {}\n\nexport function NativeWatchBridge_sendClearAuthToWatch(): void {}\n\nexport function NativeWatchBridge_clearWatchStorage(): void {}\n\nexport function NativeWatchBridge_sendFinishWorkoutToWatch(_saveToHealth: boolean): Promise<boolean> {\n  return Promise.resolve(false);\n}\n\nexport function NativeWatchBridge_sendDiscardWorkoutToWatch(): void {}\n\nexport function NativeWatchBridge_requestWatchLogs(): Promise<string> {\n  return Promise.resolve(\"\");\n}\n\nexport function NativeWatchBridge_isWatchPaired(): boolean {\n  return false;\n}\n","import { ILiveActivityState } from \"./liveActivityManager\";\nimport { SendMessage_toIosAndAndroid } from \"./sendMessage\";\n\nexport type INativeWorkoutBridgeLiveActivityAction = {\n  action: \"completeSet\" | \"addRestTime\" | \"skipRest\" | \"openApp\" | \"recordSetTimer\" | \"checkSetTimer\";\n  entryIndex?: number;\n  setIndex?: number;\n  addSeconds?: number;\n  elapsedSeconds?: number;\n  keepTiming?: boolean;\n};\n\nexport function NativeWorkoutBridge_pauseWorkout(): void {\n  SendMessage_toIosAndAndroid({ type: \"pauseWorkout\" });\n}\n\nexport function NativeWorkoutBridge_resumeWorkout(opts: {\n  reminder: number;\n  isStart: boolean;\n  hasSubscription: boolean;\n}): void {\n  SendMessage_toIosAndAndroid({\n    type: \"resumeWorkout\",\n    reminder: `${opts.reminder}`,\n    isStart: opts.isStart ? \"true\" : \"false\",\n    hasSubscription: opts.hasSubscription ? \"true\" : \"false\",\n  });\n}\n\nexport function NativeWorkoutBridge_finishWorkout(opts: {\n  healthSync: boolean;\n  calories: number;\n  intervals: string;\n}): void {\n  SendMessage_toIosAndAndroid({\n    type: \"finishWorkout\",\n    healthSync: opts.healthSync ? \"true\" : \"false\",\n    calories: `${opts.calories}`,\n    intervals: opts.intervals,\n  });\n}\n\nexport function NativeWorkoutBridge_discardWorkout(): void {\n  SendMessage_toIosAndAndroid({ type: \"pauseWorkout\" });\n  SendMessage_toIosAndAndroid({ type: \"discardWorkout\" });\n}\n\nexport function NativeWorkoutBridge_updateLiveActivity(state: ILiveActivityState): void {\n  SendMessage_toIosAndAndroid({ type: \"updateLiveActivity\", data: JSON.stringify(state) });\n}\n\nexport function NativeWorkoutBridge_subscribeToLiveActivityActions(\n  _handler: (event: INativeWorkoutBridgeLiveActivityAction) => void\n): () => void {\n  return () => {};\n}\n","export type INativeWorkoutMirroringEvent = {\n  type: \"heartRate\" | \"stateChanged\" | \"ended\" | \"failed\";\n  heartRate?: number;\n  isWatchWorkoutActive?: boolean;\n  didStartWatchWorkout?: boolean;\n  error?: string;\n};\n\nexport function NativeWorkoutMirroring_startWatchWorkout(): Promise<boolean> {\n  return Promise.resolve(false);\n}\n\nexport function NativeWorkoutMirroring_pauseWatchWorkout(): void {}\n\nexport function NativeWorkoutMirroring_resumeWatchWorkout(): void {}\n\nexport function NativeWorkoutMirroring_endWatchWorkout(): void {}\n\nexport function NativeWorkoutMirroring_resetWatchWorkoutState(): void {}\n\nexport function NativeWorkoutMirroring_isHealthKitAvailable(): boolean {\n  return false;\n}\n\nexport function NativeWorkoutMirroring_subscribe(_handler: (event: INativeWorkoutMirroringEvent) => void): () => void {\n  return () => {};\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { CollectionUtils_compact, CollectionUtils_remove } from \"./collection\";\nimport { INonNullObject } from \"./types\";\n\nexport function ObjectUtils_keys<T extends {}>(obj: T): Array<keyof T> {\n  return Object.keys(obj) as Array<keyof T>;\n}\n\nexport function ObjectUtils_values<T extends {}>(obj: T): Array<T[keyof T]> {\n  if (\"values\" in Object) {\n    return Object.values(obj);\n  } else {\n    return ObjectUtils_keys(obj).map((key) => obj[key]);\n  }\n}\n\nexport function ObjectUtils_entries<T extends {}>(obj: T): Array<[keyof T, T[keyof T]]> {\n  return ObjectUtils_keys(obj).map((key) => [key, obj[key]]);\n}\n\nexport function ObjectUtils_entriesNonnull<T extends {}>(obj: T): Array<[keyof T, NonNullable<T[keyof T]>]> {\n  return CollectionUtils_compact(ObjectUtils_keys(obj)).map((key) => [key, obj[key] as NonNullable<T[keyof T]>]);\n}\n\nexport function ObjectUtils_isEmpty<T extends {}>(obj: T): boolean {\n  return ObjectUtils_keys(obj).length === 0;\n}\n\nexport function ObjectUtils_isNotEmpty<T extends {}>(obj: T): boolean {\n  return !ObjectUtils_isEmpty(obj);\n}\n\nexport function ObjectUtils_isEqual<T extends Record<string, any>>(\n  obj1: T,\n  obj2: T,\n  ignoreKeys: string[] = []\n): boolean {\n  if (obj1 === obj2) {\n    return true;\n  }\n  // Create a stack for comparing objects\n  const stack: Array<[any, any]> = [[obj1, obj2]];\n\n  while (stack.length > 0) {\n    // Pop a pair of items from the stack\n    const [currentObj1, currentObj2] = stack.pop()!;\n    if (currentObj1 === currentObj2) {\n      continue;\n    }\n\n    // Check if both are objects\n    if (\n      typeof currentObj1 !== \"object\" ||\n      typeof currentObj2 !== \"object\" ||\n      currentObj1 == null ||\n      currentObj2 == null\n    ) {\n      if (currentObj1 !== currentObj2) {\n        return false;\n      }\n      continue;\n    }\n\n    // Get keys of both objects\n    const keys1 = Object.keys(currentObj1);\n    const keys2 = Object.keys(currentObj2);\n\n    // Iterate over keys and add nested objects to the stack\n    for (const key of new Set([...keys1, ...keys2])) {\n      if (ignoreKeys.indexOf(key) !== -1) {\n        continue;\n      }\n      stack.push([currentObj1[key], currentObj2[key]]);\n    }\n  }\n\n  // If all checks pass, the objects are equal\n  return true;\n}\n\nexport function ObjectUtils_diffPaths<T extends object>(obj1original: T, obj2original: T): string[] {\n  const result: string[] = [];\n  const queue: {\n    obj1: any;\n    obj2: any;\n    path: string;\n  }[] = [{ obj1: obj1original, obj2: obj2original, path: \"\" }];\n\n  while (queue.length > 0) {\n    const { obj1, obj2, path } = queue.shift()!;\n\n    if (obj1 === obj2) {\n      continue;\n    }\n\n    if (Object(obj1) !== obj1 || Object(obj2) !== obj2) {\n      if (obj1 !== obj2) {\n        // console.log(\"diffPath\", path, obj1, obj2);\n        result.push(path);\n      }\n      continue;\n    }\n\n    for (const key of new Set([...Object.keys(obj1), ...Object.keys(obj2)])) {\n      const newPath = path ? `${path}.${key}` : key;\n      queue.push({ obj1: obj1[key], obj2: obj2[key], path: newPath });\n    }\n  }\n\n  return result;\n}\n\nexport function ObjectUtils_diff<T extends Record<string, any>>(oldObj: T, newObj: T): T {\n  const chKeys = ObjectUtils_changedKeys(oldObj, newObj);\n  const result: Partial<T> = {};\n  for (const key of ObjectUtils_keys(chKeys)) {\n    const value = chKeys[key];\n    if (value === \"add\" || value === \"update\") {\n      result[key] = newObj[key];\n    }\n  }\n  return result as any;\n}\n\nexport function ObjectUtils_changedKeys<T extends {}>(\n  oldObj: T,\n  newObj: T,\n  eq: (a: any, b: any) => boolean = (a, b) => a === b\n): Partial<Record<keyof T, \"delete\" | \"update\" | \"add\">> {\n  let oldKeys = ObjectUtils_keys(oldObj);\n  const newKeys = ObjectUtils_keys(newObj);\n  const changes: Partial<Record<keyof T, \"delete\" | \"update\" | \"add\">> = {};\n\n  for (const newKey of newKeys) {\n    if (newObj[newKey] != null && oldObj[newKey] == null) {\n      changes[newKey] = \"add\";\n    } else if (newObj[newKey] == null && oldObj[newKey] != null) {\n      changes[newKey] = \"delete\";\n    } else if (newObj[newKey] != null && oldObj[newKey] != null) {\n      if (!eq(newObj[newKey], oldObj[newKey])) {\n        changes[newKey] = \"update\";\n      }\n    }\n    oldKeys = CollectionUtils_remove(oldKeys, newKey);\n  }\n  for (const oldKey of oldKeys) {\n    if (oldObj[oldKey] != null && newObj[oldKey] == null) {\n      changes[oldKey] = \"delete\";\n    }\n  }\n  return changes;\n}\n\nexport function ObjectUtils_mapValues<U, V, T extends Record<any, U>>(\n  obj: T,\n  fn: (x: U, k: keyof T) => V\n): Record<keyof T, V> {\n  return ObjectUtils_keys(obj).reduce<Record<keyof T, V>>(\n    (memo, k) => {\n      memo[k] = fn(obj[k], k);\n      return memo;\n    },\n    {} as Record<keyof T, V>\n  );\n}\n\nexport function ObjectUtils_filter<T extends {}>(obj: T, cb: (key: keyof T, value: T[keyof T]) => boolean): Partial<T> {\n  const filteredKeys = ObjectUtils_keys(obj).filter((key) => {\n    const value = obj[key];\n    return cb(key, value);\n  });\n  return filteredKeys.reduce<Partial<T>>((memo, k) => {\n    memo[k] = obj[k];\n    return memo;\n  }, {});\n}\n\nexport function ObjectUtils_compact<T extends Record<string, any>>(obj: T): INonNullObject<T> {\n  return Object.fromEntries(Object.entries(obj).filter(([_, value]) => value !== null)) as INonNullObject<T>;\n}\n\nexport function ObjectUtils_sortedByKeys<T extends {}>(\n  obj: T,\n  sortedKeys: Array<keyof T>\n): Array<[keyof T, T[keyof T]]> {\n  const arr: Array<[keyof T, T[keyof T]]> = [];\n  const copyObj = { ...obj };\n  for (const k of sortedKeys) {\n    arr.push([k, copyObj[k]]);\n    delete copyObj[k];\n  }\n  for (const k of ObjectUtils_keys(copyObj)) {\n    arr.push([k, copyObj[k]]);\n  }\n  return arr;\n}\n\nexport function ObjectUtils_pick<T extends {}, K extends keyof T, U extends Pick<T, K>>(obj: T, theKeys: K[]): U {\n  return ObjectUtils_keys(obj).reduce<U>((memo, key: any) => {\n    if (theKeys.indexOf(key) !== -1) {\n      (memo as any)[key] = (obj as any)[key];\n    }\n    return memo;\n  }, {} as any);\n}\n\nexport function ObjectUtils_omit<T extends {}, K extends keyof T, U extends Omit<T, K>>(\n  obj: T,\n  theKeys: readonly K[]\n): U {\n  return ObjectUtils_keys(obj).reduce<U>((memo, key: any) => {\n    if (theKeys.indexOf(key) === -1) {\n      (memo as any)[key] = (obj as any)[key];\n    }\n    return memo;\n  }, {} as any);\n}\n\nexport function ObjectUtils_combinedKeys<T extends Record<string, unknown>, U extends Record<string, unknown>>(\n  obj1: T,\n  obj2: U\n): Array<keyof T | keyof U> {\n  return Array.from(new Set(ObjectUtils_keys(obj1).concat(ObjectUtils_keys(obj2) as any)));\n}\n\nexport function ObjectUtils_findMaxValue<T extends Record<string, number | undefined>>(obj: T): number {\n  return ObjectUtils_keys(obj).reduce<number>((memo, key) => {\n    const v = obj[key];\n    if (v != null && v > memo) {\n      memo = v || 0;\n    }\n    return memo;\n  }, 0);\n}\n\nexport function ObjectUtils_findKeyByExpression<T extends Record<string, any>>(\n  obj: T,\n  expression: (key: keyof T, value: T[keyof T]) => boolean\n): keyof T | undefined {\n  for (const key of ObjectUtils_keys(obj)) {\n    if (expression(key, obj[key])) {\n      return key;\n    }\n  }\n  return undefined;\n}\n\n// A faithful `structuredClone` polyfill. We use it on every platform rather than the native\n// structuredClone because Hermes (React Native) doesn't ship one, and routing everything\n// through a single implementation keeps web and native byte-for-byte identical.\n//\n// It matches structuredClone's two defining properties that JSON.parse(JSON.stringify())\n// gets wrong, and that caused real crashes here:\n//   - Shared references are preserved, not duplicated. An evaluated program inlines the same\n//     reused exercise into hundreds of exercises; JSON.stringify expands that shared graph\n//     into a multi-hundred-MB string and throws \"String length exceeds limit\". Preserving the\n//     sharing keeps the clone the same size as the original.\n//   - Reference cycles are preserved instead of throwing.\n// It also preserves the values structuredClone keeps but JSON drops/mangles: NaN/Infinity,\n// `undefined`, Date/RegExp/Map/Set/ArrayBuffer/typed arrays.\n//\n// One deliberate deviation: native structuredClone THROWS a DataCloneError on functions and\n// symbols; we drop them instead (objects skip the key, arrays/maps/sets get `undefined`), the\n// way the previous JSON-based clone tolerated them. Uncommon container types structuredClone\n// also handles (Error, Blob/File, boxed primitives) are cloned as plain objects, since they\n// never appear in the state we clone.\nexport function ObjectUtils_clone<T>(obj: T): T {\n  return structuredCloneLike(obj, new WeakMap());\n}\n\nfunction structuredCloneLike<T>(obj: T, seen: WeakMap<object, unknown>): T {\n  if (obj === null) {\n    return obj;\n  }\n  const type = typeof obj;\n  if (type !== \"object\") {\n    // strings, numbers (NaN/Infinity/-0 preserved), booleans, bigint and undefined pass through.\n    return (type === \"function\" || type === \"symbol\" ? undefined : obj) as T;\n  }\n\n  const value = obj as object;\n  const existing = seen.get(value);\n  if (existing !== undefined) {\n    return existing as T;\n  }\n\n  if (value instanceof Date) {\n    const result = new Date(value.getTime());\n    seen.set(value, result);\n    return result as unknown as T;\n  }\n  if (value instanceof RegExp) {\n    const result = new RegExp(value.source, value.flags);\n    seen.set(value, result);\n    return result as unknown as T;\n  }\n  if (value instanceof ArrayBuffer) {\n    const result = value.slice(0);\n    seen.set(value, result);\n    return result as unknown as T;\n  }\n  if (ArrayBuffer.isView(value)) {\n    const view = value as ArrayBufferView & { length: number };\n    const buffer = structuredCloneLike(view.buffer, seen) as ArrayBuffer;\n    const result =\n      value instanceof DataView\n        ? new DataView(buffer, view.byteOffset, view.byteLength)\n        : new (value.constructor as new (b: ArrayBuffer, o: number, l: number) => ArrayBufferView)(\n            buffer,\n            view.byteOffset,\n            view.length\n          );\n    seen.set(value, result);\n    return result as unknown as T;\n  }\n  if (value instanceof Map) {\n    const result = new Map();\n    seen.set(value, result);\n    for (const [k, v] of value) {\n      result.set(structuredCloneLike(k, seen), structuredCloneLike(v, seen));\n    }\n    return result as unknown as T;\n  }\n  if (value instanceof Set) {\n    const result = new Set();\n    seen.set(value, result);\n    for (const v of value) {\n      result.add(structuredCloneLike(v, seen));\n    }\n    return result as unknown as T;\n  }\n  if (Array.isArray(value)) {\n    const result = new Array(value.length);\n    seen.set(value, result);\n    for (let i = 0; i < value.length; i += 1) {\n      if (i in value) {\n        result[i] = structuredCloneLike(value[i], seen);\n      }\n    }\n    return result as unknown as T;\n  }\n\n  const result: Record<string, unknown> = {};\n  seen.set(value, result);\n  for (const key of Object.keys(value)) {\n    const item = (value as Record<string, unknown>)[key];\n    if (typeof item === \"function\" || typeof item === \"symbol\") {\n      continue;\n    }\n    result[key] = structuredCloneLike(item, seen);\n  }\n  return result as unknown as T;\n}\n\nexport function ObjectUtils_fromArray<K extends string, V>(arr: Array<[K, V]>): Record<K, V> {\n  return arr.reduce<Record<K, V>>(\n    (memo, [key, value]) => {\n      memo[key] = value;\n      return memo;\n    },\n    {} as Record<K, V>\n  );\n}\n","import semanticColors from \"../../tailwind.semantic.generated.json\";\nimport { SafeLocalStorage_getItem, SafeLocalStorage_setItem } from \"./safeLocalStorage\";\nimport { Theme_apply } from \"./theme\";\n\nexport const PAGE_THEME_STORAGE_KEY = \"liftosaurSiteTheme\";\n\nexport function PageTheme_backgroundColor(theme: \"dark\" | \"light\"): string {\n  return semanticColors[theme].background.default;\n}\n\nexport function PageTheme_current(): \"dark\" | \"light\" {\n  return typeof document !== \"undefined\" && document.documentElement.classList.contains(\"dark\") ? \"dark\" : \"light\";\n}\n\nexport function PageTheme_set(theme: \"dark\" | \"light\"): void {\n  SafeLocalStorage_setItem(PAGE_THEME_STORAGE_KEY, theme);\n  Theme_apply(theme);\n  document.querySelector('meta[name=\"theme-color\"]')?.setAttribute(\"content\", PageTheme_backgroundColor(theme));\n}\n\nexport function PageTheme_toggle(): void {\n  PageTheme_set(PageTheme_current() === \"dark\" ? \"light\" : \"dark\");\n}\n\n// Uniwind's web runtime rewrites the theme class on <html> from the system color scheme while it is\n// being imported, so the stored choice has to be re-applied from the entry body, after that import.\nexport function PageTheme_restore(): void {\n  const stored = SafeLocalStorage_getItem(PAGE_THEME_STORAGE_KEY);\n  if (stored === \"dark\" || stored === \"light\") {\n    PageTheme_set(stored);\n  }\n}\n","import { PerfSampling_decide, IPerfSamplingDecision } from \"./perfSampling\";\n\ndeclare let __DEV__: boolean;\ndeclare const __PERF__: boolean | undefined;\n\n// Decided once per session and memoized so a session never flips tier mid-run.\nlet cached: IPerfSamplingDecision | undefined;\n\nfunction decision(): IPerfSamplingDecision {\n  if (cached != null) {\n    return cached;\n  }\n  if (__DEV__ || (typeof __PERF__ !== \"undefined\" && __PERF__ === true)) {\n    cached = { tier1: true, tier2: true };\n  } else {\n    cached = PerfSampling_decide();\n  }\n  return cached;\n}\n\n// Tier 1: always-on scorecard (aggregated in memory, one lg() event per screen visit).\nexport function PerfEnabled_tier1(): boolean {\n  return decision().tier1;\n}\n\n// Tier 2: raw per-event trace streamed to the network. Strict subset of Tier 1.\nexport function PerfEnabled_tier2(): boolean {\n  return decision().tier2;\n}\n\nexport function PerfEnabled_isEnabled(): boolean {\n  const d = decision();\n  return d.tier1 || d.tier2;\n}\n","export interface IPerfSamplingDecision {\n  tier1: boolean;\n  tier2: boolean;\n}\n\n// OTA-tunable: these are the single source of truth for how many production sessions report perf\n// data. Changing them ships in a normal JS bundle (no store release). Tier 2 is a strict subset of\n// Tier 1 (same uniform draw), so every raw-trace session also produces a scorecard.\n// Temporarily 1.0 for an initial characterization bake (full long-tail resolution). Drop back to\n// ~0.1–0.25 for steady-state monitoring once the shape of the problem is known.\nconst TIER1_RATE = 1.0;\n// Tier 2 (raw per-event stream to /api/_dev/perf) is deferred until that backend handler exists, so\n// it is disabled in production. Dev still gets it via the __DEV__ override in perfEnabled.ts. Set\n// this to e.g. 0.01 once the endpoint is built.\nconst TIER2_RATE = 0;\nconst KILL_SWITCH = false;\n\nexport function PerfSampling_decideFor(unit: number): IPerfSamplingDecision {\n  if (KILL_SWITCH) {\n    return { tier1: false, tier2: false };\n  }\n  return { tier1: unit < TIER1_RATE, tier2: unit < TIER2_RATE };\n}\n\nexport function PerfSampling_decide(): IPerfSamplingDecision {\n  return PerfSampling_decideFor(Math.random());\n}\n","import type { IPerfFrameWindow, IPerfRecentAction } from \"./perfTracker\";\n\nexport function PerfScorecard_setContextProvider(_provider: () => Record<string, number>): void {}\nexport function PerfScorecard_recordFrameWindow(_window: IPerfFrameWindow): void {}\nexport function PerfScorecard_recordLongTask(\n  _durationMs: number,\n  _screen: string | undefined,\n  _recent?: IPerfRecentAction[]\n): void {}\nexport function PerfScorecard_recordAction(_label: string, _durationMs: number): void {}\nexport function PerfScorecard_flush(): void {}\nexport function PerfScorecard_onScreenChange(_screen: string | undefined): void {}\n","import { lg } from \"./posthog\";\n\n// TEMP DIAGNOSTIC (remove after investigation): attributes the per-tap workout-screen commit cost\n// for two specific users who reported multi-second lag on set completion. Everything here is a no-op\n// unless the running device's tempUserId is in this list, so it's safe to ship in a normal bundle.\nconst TARGET_USER_IDS = [\"wtudhpsaxn\", \"xfuonfcjme\"];\n\n// A tap fires a burst of commits (the completion itself + the sync loading lifecycle). We only record\n// commits while a tap window is open (opened by PerfProbe_onAction) so mount/nav/timer commits that\n// no tap caused don't create noise, then flush once the burst goes quiet.\nconst FLUSH_QUIET_MS = 400;\n// A window with no commits (a tap that caused no render) still flushes so it can't latch onto a later,\n// unrelated commit.\nconst WINDOW_MAX_MS = 2500;\n\ntype IProfilerPhase = \"mount\" | \"update\" | \"nested-update\";\n\ninterface ISubtreeAgg {\n  commits: number;\n  sumMs: number;\n  maxMs: number;\n  mounts: number;\n  updates: number;\n}\n\nlet byId: Record<string, ISubtreeAgg> = {};\n// Which components actually re-rendered this tap (their body ran → memo did NOT bail), and the set of\n// prop keys whose reference changed on that render — i.e. what defeated the memo.\nlet renderCounts: Record<string, number> = {};\nlet renderChanges: Record<string, Set<string>> = {};\nlet triggerLabel: string | undefined;\nlet triggerReducerMs = 0;\nlet windowActive = false;\nlet flushTimer: ReturnType<typeof setTimeout> | undefined;\n\nexport function PerfProbe_isTarget(): boolean {\n  const uid =\n    (typeof globalThis !== \"undefined\" ? (globalThis as { tempUserId?: string }).tempUserId : undefined) ??\n    (typeof window !== \"undefined\" ? window.tempUserId : undefined);\n  return uid != null && TARGET_USER_IDS.indexOf(uid) >= 0;\n}\n\n// True only for a target user AND while a tap window is open — so the (potentially non-trivial) deep\n// prop diffing in usePerfWhyRender never runs for idle/background re-renders.\nexport function PerfProbe_isRecording(): boolean {\n  return windowActive && PerfProbe_isTarget();\n}\n\n// Opens a tap window for user-initiated actions only (not the sync/loading UpdateStates), so the burst\n// is labeled by the tap that started it and pre-tap commits are excluded.\nexport function PerfProbe_onAction(label: string, reducerMs: number): void {\n  if (!PerfProbe_isTarget()) {\n    return;\n  }\n  if (windowActive) {\n    // Two taps before the previous window drained — flush the old one under its own label first.\n    flush();\n  }\n  triggerLabel = label;\n  triggerReducerMs = reducerMs;\n  windowActive = true;\n  scheduleFlush(WINDOW_MAX_MS);\n}\n\nexport function PerfProbe_onCommit(id: string, phase: IProfilerPhase, durationMs: number): void {\n  if (!PerfProbe_isTarget() || !windowActive) {\n    return;\n  }\n  const agg = byId[id] ?? (byId[id] = { commits: 0, sumMs: 0, maxMs: 0, mounts: 0, updates: 0 });\n  agg.commits += 1;\n  agg.sumMs += durationMs;\n  agg.maxMs = Math.max(agg.maxMs, durationMs);\n  if (phase === \"mount\") {\n    agg.mounts += 1;\n  } else {\n    agg.updates += 1;\n  }\n  scheduleFlush(FLUSH_QUIET_MS);\n}\n\n// Called from usePerfWhyRender's post-commit useLayoutEffect inside a memoized component — so it only\n// fires when the memo did NOT bail and the render actually committed. changedKeys names the prop refs\n// that differed from the previous committed render (empty = identical props, i.e. a context/state/\n// forced re-render rather than a prop change).\nexport function PerfProbe_recordRender(component: string, changedKeys: string[]): void {\n  if (!PerfProbe_isTarget() || !windowActive) {\n    return;\n  }\n  renderCounts[component] = (renderCounts[component] ?? 0) + 1;\n  const set = renderChanges[component] ?? (renderChanges[component] = new Set<string>());\n  if (changedKeys.length === 0) {\n    set.add(\"<none>\");\n  } else {\n    for (const k of changedKeys) {\n      set.add(k);\n    }\n  }\n  // No scheduleFlush here on purpose: each instrumented component sits inside a PerfProbeSubtree whose\n  // own post-commit useLayoutEffect already schedules the flush for this same commit.\n}\n\nfunction scheduleFlush(ms: number): void {\n  if (flushTimer != null) {\n    clearTimeout(flushTimer);\n  }\n  flushTimer = setTimeout(flush, ms);\n}\n\nfunction flush(): void {\n  if (flushTimer != null) {\n    clearTimeout(flushTimer);\n  }\n  flushTimer = undefined;\n  windowActive = false;\n  const ids = Object.keys(byId);\n  const renderComps = Object.keys(renderCounts);\n  if (ids.length === 0 && renderComps.length === 0) {\n    triggerLabel = undefined;\n    triggerReducerMs = 0;\n    return;\n  }\n  const extra: Record<string, string | number> = {\n    trigger: triggerLabel ?? \"unknown\",\n    reducer_ms: Math.round(triggerReducerMs),\n  };\n  for (const id of ids) {\n    const a = byId[id];\n    extra[`${id}_commits`] = a.commits;\n    extra[`${id}_sum_ms`] = Math.round(a.sumMs);\n    extra[`${id}_max_ms`] = Math.round(a.maxMs);\n    extra[`${id}_mounts`] = a.mounts;\n    extra[`${id}_updates`] = a.updates;\n  }\n  for (const comp of renderComps) {\n    extra[`${comp}_renders`] = renderCounts[comp];\n    extra[`${comp}_changed`] = Array.from(renderChanges[comp] ?? []).join(\",\");\n  }\n  byId = {};\n  renderCounts = {};\n  renderChanges = {};\n  triggerLabel = undefined;\n  triggerReducerMs = 0;\n  lg(\"perf-set-complete\", extra);\n}\n","export interface IPerfRecentAction {\n  type: string;\n  desc?: string;\n  age_ms: number;\n}\n\nexport interface IPerfFrameWindow {\n  screen?: string;\n  frames_total: number;\n  frames_slow: number;\n  frames_frozen: number;\n  max_gap_ms: number;\n  window_ms: number;\n  ts: number;\n}\n\nexport type IPerfEvent =\n  | { type: \"nav\"; session: string; from?: string; to: string; tap_ts: number }\n  | {\n      type: \"longtask\";\n      session: string;\n      duration: number;\n      start: number;\n      screen?: string;\n      recent?: IPerfRecentAction[];\n    }\n  | {\n      type: \"framedrop\";\n      session: string;\n      thread: \"ui\" | \"js\";\n      gap_ms: number;\n      expected_ms: number;\n      screen?: string;\n      ts: number;\n    }\n  | {\n      type: \"frame_summary\";\n      session: string;\n      screen?: string;\n      frames_total: number;\n      frames_slow: number;\n      frames_frozen: number;\n      max_gap_ms: number;\n      window_ms: number;\n      ts: number;\n    }\n  | { type: \"session_start\"; session: string; ts: number; platform: string; build: string }\n  | {\n      type: \"mark\";\n      session: string;\n      screen: string;\n      phase: \"mount\" | \"commit\" | \"interactive\" | \"loaded\";\n      ts: number;\n      loaded_source?: \"auto\" | \"explicit\";\n    }\n  | {\n      type: \"render_count\";\n      session: string;\n      component: string;\n      delta: number;\n      total: number;\n      window_ms: number;\n      ts: number;\n    }\n  | {\n      type: \"memo_timing\";\n      session: string;\n      label: string;\n      duration_ms: number;\n      ts: number;\n    }\n  | {\n      type: \"scroll_start\" | \"scroll_end\";\n      session: string;\n      screen?: string;\n      label?: string;\n      ts: number;\n    }\n  | {\n      type: \"action\";\n      session: string;\n      action: string;\n      desc?: string;\n      duration_ms?: number;\n      ts: number;\n    }\n  | {\n      type: \"render_trace\";\n      session: string;\n      component: string;\n      ts: number;\n    }\n  | {\n      type: \"profile\";\n      session: string;\n      id: string;\n      phase: \"mount\" | \"update\" | \"nested-update\";\n      actual_ms: number;\n      base_ms: number;\n      ts: number;\n    };\n\nexport function PerfTracker_mark(_name: string, _screen?: string): void {}\nexport function PerfTracker_recordEvent(_event: IPerfEvent): void {}\nexport function PerfTracker_getSessionId(): string {\n  return \"noop\";\n}\nexport function PerfTracker_flush(): Promise<void> {\n  return Promise.resolve();\n}\nexport function PerfTracker_getRecent(_n: number): IPerfEvent[] {\n  return [];\n}\n","import { UrlUtils_build } from \"./url\";\nimport { SafeLocalStorage_getItem } from \"./safeLocalStorage\";\n\nexport function Platform_isiOS(userAgent?: string): boolean {\n  userAgent = userAgent || (typeof window !== \"undefined\" && window.navigator ? window.navigator.userAgent : \"\");\n  return /iPhone|iPad|iPod/i.test(userAgent);\n}\n\nexport function Platform_isAndroid(userAgent?: string): boolean {\n  userAgent = userAgent || (typeof window !== \"undefined\" && window.navigator ? window.navigator.userAgent : \"\");\n  return /Android/i.test(userAgent);\n}\n\nexport interface IOnelinkLandingParams {\n  id: string;\n  type: \"program\" | \"exercise\" | \"rep-max\";\n}\n\n// Identifies the SEO page a OneLink click originated from, so AppsFlyer can carry it through the\n// install (deferred deep link) and the native app can attribute the install to that page. The `id`\n// has no slashes on purpose - it goes into deep_link_value, and the native side reconstructs the path\n// from id + type, keeping web-cookie and native landing pages in the same format.\nexport function Platform_landingPageParams(pathname: string): IOnelinkLandingParams | undefined {\n  const programMatch = pathname.match(/^\\/programs\\/([^/]+)$/);\n  if (programMatch) {\n    return { id: programMatch[1], type: \"program\" };\n  }\n  const exerciseMatch = pathname.match(/^\\/exercises\\/([^/]+)$/);\n  if (exerciseMatch) {\n    return { id: exerciseMatch[1], type: \"exercise\" };\n  }\n  const repMaxMatch = pathname.match(/^\\/([a-z-]*rep-max-calculator)$/);\n  if (repMaxMatch) {\n    return { id: repMaxMatch[1], type: \"rep-max\" };\n  }\n  return undefined;\n}\n\nexport function Platform_onelink(noparams: boolean, type?: \"ios\" | \"android\"): string {\n  const url = UrlUtils_build(\"https://liftosaur.onelink.me/cG8a/aylyqael\");\n  let afr: string | undefined = undefined;\n  if (type) {\n    afr =\n      type === \"ios\"\n        ? \"https://apps.apple.com/us/app/liftosaur-scriptable-workouts/id1661880849\"\n        : \"https://play.google.com/store/apps/details?id=com.liftosaur.www.twa\";\n  }\n  if (typeof window !== \"undefined\" && !noparams) {\n    const currentSearchParams = new URL(window.location.href).searchParams;\n    const utmSource = currentSearchParams?.get(\"utm_source\") ?? SafeLocalStorage_getItem(\"utm_source\");\n    if (utmSource) {\n      url.searchParams.set(\"utm_source\", utmSource);\n      url.searchParams.set(\"pid\", `${utmSource}_int`);\n    }\n    const utmMedium = currentSearchParams?.get(\"utm_medium\") ?? SafeLocalStorage_getItem(\"utm_medium\");\n    if (utmMedium) {\n      url.searchParams.set(\"utm_medium\", utmMedium);\n      url.searchParams.set(\"af_channel\", utmMedium);\n    }\n    const utmCampaign = currentSearchParams?.get(\"utm_campaign\") ?? SafeLocalStorage_getItem(\"utm_campaign\");\n    if (utmCampaign) {\n      url.searchParams.set(\"utm_campaign\", utmCampaign);\n      url.searchParams.set(\"c\", utmCampaign);\n    }\n    const utmContent = currentSearchParams?.get(\"utm_content\") ?? SafeLocalStorage_getItem(\"utm_content\");\n    if (utmContent) {\n      url.searchParams.set(\"utm_content\", utmContent);\n      url.searchParams.set(\"af_ad\", utmContent);\n    }\n    const utmTerm = currentSearchParams?.get(\"utm_term\") ?? SafeLocalStorage_getItem(\"utm_term\");\n    if (utmTerm) {\n      url.searchParams.set(\"utm_term\", utmTerm);\n      url.searchParams.set(\"af_adset\", utmTerm);\n    }\n    const landing = Platform_landingPageParams(window.location.pathname);\n    if (landing) {\n      url.searchParams.set(\"deep_link_value\", landing.id);\n      url.searchParams.set(\"deep_link_sub1\", landing.type);\n      // Don't clobber a paid UTM source/campaign; only label as SEO when nothing else claimed it.\n      if (!url.searchParams.has(\"pid\")) {\n        url.searchParams.set(\"pid\", \"seo\");\n      }\n      if (!url.searchParams.has(\"c\")) {\n        url.searchParams.set(\"c\", `${landing.type}-pages`);\n      }\n      // deep_link_value is only a routing param, so AppsFlyer aggregate reports can't split by program.\n      // Mirror the slug/type into af_ad/af_adset (real attribution dimensions) so per-program installs\n      // and conversions are groupable in the dashboard.\n      if (!url.searchParams.has(\"af_adset\")) {\n        url.searchParams.set(\"af_adset\", `${landing.type}-pages`);\n      }\n      if (!url.searchParams.has(\"af_ad\")) {\n        url.searchParams.set(\"af_ad\", landing.id);\n      }\n    }\n    if (afr) {\n      url.searchParams.set(\"af_r\", afr);\n    }\n  }\n  return url.toString();\n}\n","import { IEventPayload, Service } from \"../api/service\";\nimport {\n  SendMessage_isIos,\n  SendMessage_isAndroid,\n  SendMessage_iosAppVersion,\n  SendMessage_androidAppVersion,\n  SendMessage_toIosAndAndroid,\n} from \"./sendMessage\";\nimport { AppAttribution_get } from \"./appAttribution\";\nimport { EventManager_isAvailable, EventManager_log } from \"./eventManager\";\nimport { AdminDebug_isDebugAccountId } from \"../models/adminDebug\";\n\ndeclare let __COMMIT_HASH__: string;\n\nconst trackedEvents = new Set<string>();\n\nexport function track(args: {\n  name?: string;\n  redditname?: string;\n  googlename?: string;\n  extra?: Record<string, string | number>;\n}): void {\n  if (typeof window === \"undefined\") {\n    return;\n  }\n  const eventName = args.name || args.googlename || args.redditname || \"\";\n  if (trackedEvents.has(eventName)) {\n    return;\n  }\n  trackedEvents.add(eventName);\n  if (window.gtag) {\n    window.gtag(\"event\", args.name || args.googlename, args.extra || {});\n  }\n  if (window.rdt) {\n    window.rdt(\"track\", args.name || args.redditname || \"\", args.extra || {});\n  }\n}\n\nexport function lgDebug(name: string, userId: string, extra?: Record<string, string | number>): void {\n  const currentUserId =\n    (typeof globalThis !== \"undefined\" ? (globalThis as { tempUserId?: string }).tempUserId : undefined) ??\n    (typeof window !== \"undefined\" ? window.tempUserId : undefined);\n  if (currentUserId === userId) {\n    lg(name, extra);\n  }\n}\n\nexport function lg(\n  name: string,\n  extra?: Record<string, string | number>,\n  service?: Service,\n  tempUserId?: string,\n  timestamp?: number\n): void {\n  tempUserId =\n    tempUserId ??\n    (typeof globalThis !== \"undefined\" ? (globalThis as { tempUserId?: string }).tempUserId : undefined) ??\n    (typeof window !== \"undefined\" ? window.tempUserId : undefined);\n\n  if (tempUserId == null) {\n    return;\n  }\n\n  // A debug sandbox must stay analytics-silent so the target-derived id never leaves the device.\n  if (AdminDebug_isDebugAccountId(tempUserId)) {\n    return;\n  }\n\n  const event: IEventPayload = {\n    type: \"event\",\n    timestamp: timestamp ?? Date.now(),\n    commithash: typeof __COMMIT_HASH__ !== \"undefined\" ? __COMMIT_HASH__ : \"unknown\",\n    ...AppAttribution_get(),\n    name,\n    extra,\n    userId: tempUserId,\n  };\n\n  if (\n    (SendMessage_isIos() && SendMessage_iosAppVersion() >= 13) ||\n    (SendMessage_isAndroid() && SendMessage_androidAppVersion() >= 22)\n  ) {\n    SendMessage_toIosAndAndroid({\n      type: \"event\",\n      data: JSON.stringify(event),\n      commithash: event.commithash,\n      userId: event.userId,\n    });\n    return;\n  }\n\n  if (EventManager_isAvailable()) {\n    EventManager_log(JSON.stringify(event));\n    return;\n  }\n\n  service =\n    service ?? (typeof window !== \"undefined\" && window.fetch ? new Service(window.fetch.bind(window)) : undefined);\n  if (service == null) {\n    return;\n  }\n\n  service.postEvent(event).catch((e) => {\n    // do nothing;\n  });\n}\n","import RB, { Dictionary, LogArgument } from \"rollbar\";\nimport { Service } from \"../api/service\";\nimport { IState } from \"../models/state\";\nimport { UidFactory_generateUid } from \"./generator\";\nimport { Encoder_encode } from \"./encoder\";\nimport {\n  Diagnostics_getLastActions,\n  Diagnostics_getLastState,\n  Diagnostics_getLastValidationErrors,\n} from \"./diagnostics\";\n\ndeclare let __ENV__: string;\ndeclare let __FULL_COMMIT_HASH__: string;\n\ninterface IOccurenceResponse {\n  err: number;\n  result: {\n    data: {\n      liftosaur_exception_id: string;\n    };\n  };\n}\n\ndeclare let __API_HOST__: string;\n\nexport const exceptionIgnores = [\n  \"Script error\",\n  \"Failed to fetch\",\n  \"Failed to register a ServiceWorker\",\n  \"The element has no supported sources\",\n  \"The operation was aborted\",\n  \"FetchEvent.respondWith received an error\",\n  \"play() failed because the user\",\n  \"play() request was interrupted\",\n  \"The request is not allowed by the user agent or the platform\",\n  \"Load failed\",\n  \"Function timed out\",\n  \"is out of range for changeset\",\n  \"when attempting to fetch resource\",\n  \"Selection points outside of document\",\n  \"Invalid position\",\n  \"outdated_client_storage\",\n  '{\"isTrusted\":true}',\n  \"Unable to resolve host\",\n  \"connection closed\",\n  \"Invalid change range\",\n  \"Empty response from API\",\n  \"_AutofillCallbackHandler\",\n  \"Incorrect locale information provided\",\n  \"chrome-extension://\",\n];\n\nexport async function RollbarUtils_load(item: string | number, token: string): Promise<void> {\n  const result = await fetch(`https://api.rollbar.com/api/1/instance/${item}`, {\n    headers: {\n      accept: \"application/json\",\n      \"X-Rollbar-Access-Token\": token,\n    },\n  });\n  const json = (await result.json()) as IOccurenceResponse;\n  if (json.err === 0) {\n    const id = json.result.data.liftosaur_exception_id;\n    const service = new Service(window.fetch.bind(window));\n    const data = await service.getExceptionData(id);\n    if (data == null) {\n      console.error(\"No exception info\");\n      return;\n    }\n    const { lastState, lastActions } = JSON.parse(data);\n    if (lastState && lastActions) {\n      const state = JSON.parse(lastState) as IState;\n      state.nosync = true;\n      window.replaceState(state);\n      console.log(\"Last Actions\");\n      console.log(JSON.parse(lastActions));\n    } else {\n      console.error(\"No last state or actions\");\n    }\n  } else {\n    console.error(json);\n  }\n}\n\nexport function RollbarUtils_checkIgnore(isUncaught: boolean, args: LogArgument[], item: Dictionary): boolean {\n  const firstArg = args[0];\n  const message = typeof firstArg === \"object\" && \"message\" in firstArg ? firstArg.message : firstArg;\n  if (message && typeof message === \"string\" && exceptionIgnores.some((i) => message.indexOf(i) !== -1)) {\n    return true;\n  }\n  return false;\n}\n\nexport function RollbarUtils_config(payload?: object): RB.Configuration {\n  return {\n    enabled: __ENV__ === \"production\" || __ENV__ === \"prod-lambda\" || __ENV__ === \"android\",\n    payload: {\n      environment: __ENV__,\n      client: {\n        javascript: {\n          source_map_enabled: true,\n          code_version: __FULL_COMMIT_HASH__,\n          guess_uncaught_frames: true,\n        },\n      },\n      ...(payload || {}),\n    },\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    transform: async (pld: any, item: any) => {\n      const shouldIgnore = RollbarUtils_checkIgnore(false, [item?.err?.message], item);\n      if (shouldIgnore) {\n        return;\n      }\n      const id = UidFactory_generateUid(12);\n      pld.liftosaur_exception_id = id;\n      pld.lftAndroidVersion = window.lftAndroidVersion;\n      pld.lftAndroidAppVersion = window.lftAndroidAppVersion;\n      pld.lftIosVersion = window.lftIosVersion;\n      pld.lftIosAppVersion = window.lftIosAppVersion;\n      pld.lftSystemDarkMode = window.lftSystemDarkMode;\n      const state = Diagnostics_getLastState() ?? window.state;\n      const lastActions = Diagnostics_getLastActions();\n      const validationErrors = Diagnostics_getLastValidationErrors();\n      const data = {\n        userid: pld.person?.id ?? window.tempUserId,\n        lastState: state ? JSON.stringify(state) : undefined,\n        lastActions: lastActions.length > 0 ? JSON.stringify(lastActions) : undefined,\n        validationErrors: validationErrors ? JSON.stringify(validationErrors) : undefined,\n      };\n      console.log(\"Sending exception\", data);\n      const compressed = await Encoder_encode(JSON.stringify(data));\n      fetch(`${__API_HOST__}/api/exception`, {\n        method: \"POST\",\n        body: JSON.stringify({ id, data: compressed }),\n        credentials: \"include\",\n      });\n    },\n    checkIgnore: RollbarUtils_checkIgnore,\n  };\n}\n\nif (typeof window !== \"undefined\") {\n  window.loadRollbar = RollbarUtils_load;\n}\n","// Accessing `window.localStorage` throws `SecurityError: The operation is insecure.` on iOS Safari\n// when storage is blocked (e.g. \"Block All Cookies\" or some private/embedded contexts). The throw\n// happens on the property access itself, so optional chaining (`window.localStorage?.`) can't guard it.\nexport function SafeLocalStorage_getItem(key: string): string | null {\n  try {\n    if (typeof window === \"undefined\") {\n      return null;\n    }\n    return window.localStorage.getItem(key);\n  } catch {\n    return null;\n  }\n}\n\nexport function SafeLocalStorage_setItem(key: string, value: string): void {\n  try {\n    if (typeof window === \"undefined\") {\n      return;\n    }\n    window.localStorage.setItem(key, value);\n  } catch {\n    // ignore - storage may be blocked or full\n  }\n}\n\nexport function SafeLocalStorage_removeItem(key: string): void {\n  try {\n    if (typeof window === \"undefined\") {\n      return;\n    }\n    window.localStorage.removeItem(key);\n  } catch {\n    // ignore - storage may be blocked\n  }\n}\n","// Generated by scripts/generate-theme-css.js — do not edit by hand.\nexport const SCALED_SPACINGS = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16, 20, 24, 28, 32, 36, 40, 44, 48, 56, 60, 64, 72, 80, 96];\nexport const SCALED_LEADINGS = [3, 4, 5, 6, 7, 8, 9, 10, 12];\n","declare global {\n  // eslint-disable-next-line @typescript-eslint/naming-convention\n  interface Window {\n    JSAndroidBridge?: {\n      sendMessage: (message: string) => void;\n    };\n    webkit?: {\n      messageHandlers?: {\n        liftosaurMessage?: {\n          postMessage: (message: Record<string, string | undefined>) => void;\n        };\n      };\n    };\n  }\n}\n\nlet receiveMessage: ((event: MessageEvent) => void) | undefined;\n\nexport function SendMessage_iosAppVersion(): number {\n  return parseInt(window.lftIosAppVersion || \"0\", 10);\n}\n\nexport function SendMessage_iosVersion(): number {\n  return parseInt(window.lftIosVersion || \"0\", 10);\n}\n\nexport function SendMessage_androidAppVersion(): number {\n  return parseInt(window.lftAndroidAppVersion || \"0\", 10);\n}\n\nexport function SendMessage_print(message: string): void {\n  SendMessage_toIosAndAndroid({ type: \"print\", value: message });\n}\n\nexport function SendMessage_androidVersion(): number {\n  return parseInt(window.lftAndroidVersion?.toString() || \"0\", 10);\n}\n\nexport function SendMessage_isIosOrAndroid(): boolean {\n  return SendMessage_isIos() || SendMessage_isAndroid();\n}\n\nexport function SendMessage_isIos(): boolean {\n  return (\n    typeof window !== \"undefined\" &&\n    !!(window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.liftosaurMessage)\n  );\n}\n\nexport function SendMessage_toIosWithResult<T>(obj: Record<string, string | undefined>): Promise<T | undefined> {\n  if (!SendMessage_isIos()) {\n    return Promise.resolve(undefined);\n  }\n  return new Promise((resolve) => {\n    SendMessage_toIos(obj);\n    if (receiveMessage != null) {\n      window.removeEventListener(\"message\", receiveMessage);\n    }\n    receiveMessage = (event) => {\n      if (event.data?.type === \"iosResponse\") {\n        if (receiveMessage != null) {\n          window.removeEventListener(\"message\", receiveMessage);\n          receiveMessage = undefined;\n        }\n        resolve(event.data);\n      }\n    };\n    window.addEventListener(\"message\", receiveMessage);\n  });\n}\n\nexport function SendMessage_toAndroidWithResult<T>(obj: Record<string, string | undefined>): Promise<T | undefined> {\n  if (!SendMessage_isAndroid()) {\n    return Promise.resolve(undefined);\n  }\n  return new Promise((resolve) => {\n    SendMessage_toAndroid(obj);\n    if (receiveMessage != null) {\n      window.removeEventListener(\"message\", receiveMessage);\n    }\n    receiveMessage = (event) => {\n      if (event.data?.type === \"androidResponse\") {\n        if (receiveMessage != null) {\n          window.removeEventListener(\"message\", receiveMessage);\n          receiveMessage = undefined;\n        }\n        resolve(event.data);\n      }\n    };\n    window.addEventListener(\"message\", receiveMessage);\n  });\n}\n\nexport function SendMessage_toIosAndAndroid(obj: Record<string, string | undefined>): boolean {\n  const toIosResult = SendMessage_toIos(obj);\n  const toAndroidResult = SendMessage_toAndroid(obj);\n  return toIosResult || toAndroidResult;\n}\n\nexport function SendMessage_toIosAndAndroidWithResult<T>(\n  obj: Record<string, string | undefined>\n): Promise<T | undefined> {\n  if (SendMessage_isIos()) {\n    return SendMessage_toIosWithResult(obj);\n  } else if (SendMessage_isAndroid()) {\n    return SendMessage_toAndroidWithResult(obj);\n  } else {\n    return Promise.resolve(undefined);\n  }\n}\n\nexport function SendMessage_toIos(obj: Record<string, string | undefined>): boolean {\n  if (\n    typeof window !== \"undefined\" &&\n    window.webkit &&\n    window.webkit.messageHandlers &&\n    window.webkit.messageHandlers.liftosaurMessage\n  ) {\n    try {\n      window.webkit.messageHandlers.liftosaurMessage.postMessage(obj);\n      return true;\n    } catch (e) {\n      console.error(\"Failed to send message to iOS bridge:\", e);\n      return false;\n    }\n  } else {\n    return false;\n  }\n}\n\nexport function SendMessage_toAndroid(obj: Record<string, string | undefined>): boolean {\n  if (typeof window !== \"undefined\" && window.JSAndroidBridge) {\n    try {\n      window.JSAndroidBridge.sendMessage(JSON.stringify(obj));\n      return true;\n    } catch (e) {\n      console.error(\"Failed to send message to Android bridge:\", e);\n      return false;\n    }\n  } else {\n    return false;\n  }\n}\n\nexport function SendMessage_isAndroid(): boolean {\n  return typeof window !== \"undefined\" && !!window.JSAndroidBridge;\n}\n","export function SetUtils_areEqual<T>(a: Set<T>, b: Set<T>): boolean {\n  if (a.size !== b.size) {\n    return false;\n  }\n  for (const item of a) {\n    if (!b.has(item)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nexport function SetUtils_areAllEqual<T>(sets: Set<T>[]): boolean {\n  if (sets.length < 2) {\n    return true;\n  }\n\n  const [first, ...rest] = sets;\n  for (const set of rest) {\n    if (!SetUtils_areEqual(first, set)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nexport function SetUtils_containsAnyValues<T>(within: Set<T>, from: Set<T>): boolean {\n  for (const item of from) {\n    if (within.has(item)) {\n      return true;\n    }\n  }\n  return false;\n}\n","export interface IGoogleSignInResult {\n  idToken?: string;\n  accessToken?: string;\n}\n\nexport interface IAppleSignInResult {\n  idToken: string;\n  code?: string;\n}\n\nexport async function SignIn_google(): Promise<IGoogleSignInResult | undefined> {\n  throw new Error(\"SignIn_google is only supported on native platforms\");\n}\n\nexport async function SignOut_google(): Promise<void> {\n  // no-op on web\n}\n\nexport async function SignIn_apple(): Promise<IAppleSignInResult | undefined> {\n  throw new Error(\"SignIn_apple is only supported on native platforms\");\n}\n","/* eslint-disable no-bitwise */\nexport function StringUtils_pad(str: string, width: number, fill: string = \"0\"): string {\n  return str.length >= width ? str : new Array(width - str.length + 1).join(fill) + str;\n}\n\nexport function StringUtils_capitalize(string: string): string {\n  return string[0].toUpperCase() + string.slice(1);\n}\n\nexport function StringUtils_pluralize(string: string, count: number): string {\n  return `${string}${count !== 1 ? \"s\" : \"\"}`;\n}\n\nexport function StringUtils_dashcase(string: string): string {\n  return string.replace(/[:,]/g, \"\").replace(/\\s+/g, \"-\").toLowerCase();\n}\n\nexport function StringUtils_undashcase(string: string): string {\n  return string.replace(/-/g, \" \");\n}\n\nexport function StringUtils_uncamelCase(string: string): string {\n  return string.replace(/([a-z])([A-Z])/g, \"$1 $2\");\n}\n\nexport function StringUtils_camelCase(string: string): string {\n  return string\n    .replace(/(?:^\\w|[A-Z]|\\b\\w)/g, (letter, index) => (index === 0 ? letter.toLowerCase() : letter.toUpperCase()))\n    .replace(/\\s+/g, \"\");\n}\n\nexport function StringUtils_snakecase(string: string): string {\n  return string.replace(/[:,]/g, \"\").replace(/\\s+/g, \"_\").toLowerCase();\n}\n\nexport function StringUtils_truncate(string: string, length: number): string {\n  if (string.length > length) {\n    return `${string.slice(0, length - 3)}...`;\n  } else {\n    return string;\n  }\n}\n\nexport function StringUtils_unindent(string: string): string {\n  const indent2 = string.split(\"\\n\").reduce<number | undefined>((memo, line) => {\n    const match = line.match(/^(\\s*)\\S/);\n    if (match != null) {\n      const spaces = match[1];\n      if (memo == null || memo > spaces.length) {\n        return spaces.length;\n      }\n    }\n    return memo;\n  }, undefined);\n  if (indent2 != null) {\n    return string\n      .split(\"\\n\")\n      .map((s) => (s.trim() === \"\" ? \"\" : s.slice(indent2, s.length).trimEnd()))\n      .join(\"\\n\");\n  } else {\n    return string;\n  }\n}\n\nexport function StringUtils_indent(string: string, spaces: number): string {\n  const indent2 = new Array(spaces + 1).join(\" \");\n  return string\n    .split(\"\\n\")\n    .map((s) => (s.trim() !== \"\" ? `${indent2}${s}` : s))\n    .join(\"\\n\");\n}\n\nexport function StringUtils_fuzzySearch(needle: string, haystack: string): boolean {\n  if (needle.length > haystack.length) {\n    return false;\n  } else if (needle === haystack) {\n    return true;\n  } else {\n    outer: for (let i = 0, j = 0; i < needle.length; i++) {\n      const nch = needle.charCodeAt(i);\n      while (j < haystack.length) {\n        // eslint-disable-next-line no-plusplus\n        if (haystack.charCodeAt(j++) === nch) {\n          continue outer;\n        }\n      }\n      return false;\n    }\n    return true;\n  }\n}\n\nexport function StringUtils_nextName(name: string): string {\n  const match = name.match(/(\\d+)$/);\n  if (match) {\n    const number = parseInt(match[0], 10);\n    return name.replace(/\\d+$/, (number + 1).toString());\n  }\n  return name + \" 2\";\n}\n\nexport function StringUtils_hashCode(str: string): number {\n  let hash = 0;\n  for (let i = 0; i < str.length; i++) {\n    hash = (hash << 5) - hash + str.charCodeAt(i);\n    hash |= 0; // Convert to 32bit integer\n  }\n  return hash;\n}\n\nexport function StringUtils_hashString(str: string): string {\n  return new Uint32Array([StringUtils_hashCode(str)])[0].toString(16);\n}\n\nexport function StringUtils_hashCode0To1(str: string): number {\n  const hash = Math.abs(StringUtils_hashCode(str));\n  return (hash % 10000) / 10000;\n}\n\nexport function StringUtils_cleanJson(str: string): string {\n  return str.trim().replace(/^[\\s\\S]*?(\\{[\\s\\S]*\\})[\\s\\S]*?$/, \"$1\");\n}\n","import type { ColorValue, StyleProp, ViewStyle } from \"react-native\";\nimport { Tailwind_colors, Tailwind_semantic } from \"./tailwindConfig\";\n\n// typeof-guarded: Metro/webpack define __DEV__, but this module also runs under node (tests).\ndeclare let __DEV__: boolean | undefined;\n\nfunction isDev(): boolean {\n  return typeof __DEV__ !== \"undefined\" && __DEV__ === true;\n}\n\n// \"500\" maps to the SemiBold face: Android/web don't bundle Poppins-Medium, and both native\n// renderers already treat 500-699 as SemiBold.\nexport type IFastTextFontWeight = \"400\" | \"500\" | \"600\" | \"700\";\n\nexport type IFastTextFontStyle = \"normal\" | \"italic\";\n\nexport type IFastTextDecoration = \"underline\" | \"line-through\";\n\nexport type IFastTextAlign = \"left\" | \"center\" | \"right\";\n\nexport interface IFastTextStyle {\n  color?: ColorValue;\n  backgroundColor?: ColorValue;\n  fontWeight?: IFastTextFontWeight;\n  fontSize?: number;\n  fontStyle?: IFastTextFontStyle;\n  textDecorationLine?: IFastTextDecoration;\n}\n\nexport interface IFastTextFragment extends IFastTextStyle {\n  start: number;\n  end: number;\n  // Web-only hook for preserving per-span data-testid/data-cy. Ignored natively\n  // (the native view is a single node).\n  testID?: string;\n}\n\nexport interface IFastTextBuild {\n  text: string;\n  fragments: IFastTextFragment[];\n}\n\nexport interface IFastTextSpan {\n  text: string;\n  style?: IFastTextStyle;\n  testID?: string;\n}\n\n// Base style (IFastTextStyle) applies to the whole string; `fragments` are\n// per-range overrides layered on top. The component is a dumb renderer — the\n// caller resolves all colors (ColorValue strings) and sizes (px).\nexport interface IFastTextProps extends IFastTextStyle {\n  text: string;\n  fragments?: IFastTextFragment[];\n  // Overrides the weight-based Poppins face mapping with a verbatim family name (e.g.\n  // \"Iosevka\" for monospace code). Base-level only — fragments differ in color, not font.\n  fontFamily?: string;\n  // Web-only: render with white-space: pre (no soft-wrap, whitespace preserved). Native\n  // achieves the same by being measured at unbounded width inside a horizontal ScrollView.\n  noWrap?: boolean;\n  // Web-only: soft-wrap long lines but keep the newlines and indentation the text already has\n  // (white-space: pre-wrap). Without it the browser collapses both, which turns a multi-line\n  // script into one run of prose. Native preserves them either way.\n  preserveWhitespace?: boolean;\n  paddingHorizontal?: number;\n  lineHeight?: number;\n  numberOfLines?: number;\n  textAlign?: IFastTextAlign;\n  style?: StyleProp<ViewStyle>;\n  // Native FastText draws text rather than using <Text>, so it exposes nothing to screen\n  // readers by default; the wrapper falls back to `text` when this is unset.\n  accessibilityLabel?: string;\n  testID?: string;\n  \"data-testid\"?: string;\n  \"data-cy\"?: string;\n}\n\nfunction hasStyle(style?: IFastTextStyle): style is IFastTextStyle {\n  if (style == null) {\n    return false;\n  }\n  return (\n    style.color != null ||\n    style.backgroundColor != null ||\n    style.fontWeight != null ||\n    style.fontSize != null ||\n    style.fontStyle != null ||\n    style.textDecorationLine != null\n  );\n}\n\nexport class StyledText {\n  private readonly parts: string[] = [];\n  private readonly fragments: IFastTextFragment[] = [];\n  private offset = 0;\n\n  public add(text: string | undefined | null, style?: IFastTextStyle, testID?: string): this {\n    if (text == null || text.length === 0) {\n      return this;\n    }\n    const start = this.offset;\n    const end = start + text.length;\n    this.parts.push(text);\n    this.offset = end;\n    if (hasStyle(style) || testID != null) {\n      this.fragments.push({ start, end, ...style, ...(testID != null ? { testID } : {}) });\n    }\n    return this;\n  }\n\n  public build(): IFastTextBuild {\n    return { text: this.parts.join(\"\"), fragments: this.fragments };\n  }\n}\n\nexport function StyledText_fragmentsToSpans(text: string, fragments?: IFastTextFragment[]): IFastTextSpan[] {\n  const sorted = (fragments ?? [])\n    .filter((f) => f.end > f.start && f.start < text.length)\n    .slice()\n    .sort((a, b) => a.start - b.start);\n  const spans: IFastTextSpan[] = [];\n  let cursor = 0;\n  for (const fragment of sorted) {\n    const start = Math.max(fragment.start, cursor);\n    const end = Math.min(fragment.end, text.length);\n    if (start > cursor) {\n      spans.push({ text: text.slice(cursor, start) });\n    }\n    if (end > start) {\n      const { start: _s, end: _e, testID, ...style } = fragment;\n      spans.push({ text: text.slice(start, end), style, ...(testID != null ? { testID } : {}) });\n      cursor = end;\n    }\n  }\n  if (cursor < text.length) {\n    spans.push({ text: text.slice(cursor) });\n  }\n  return spans;\n}\n\nexport type IFastTextSize = \"2xs\" | \"xs\" | \"sm\" | \"base\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\" | \"4xl\" | \"5xl\";\n\nconst BASE_REM = 16;\n\n// Mirrors the --text-* scale in useRem.ts / useRem.native.ts (px at rem=16).\nconst SIZE_PX: Record<IFastTextSize, number> = {\n  \"2xs\": 10,\n  xs: 12,\n  sm: 14,\n  base: 16,\n  lg: 18,\n  xl: 20,\n  \"2xl\": 24,\n  \"3xl\": 30,\n  \"4xl\": 36,\n  \"5xl\": 48,\n};\n\nexport function StyledText_remToPx(size: IFastTextSize, rem: number): number {\n  return SIZE_PX[size] * (rem / BASE_REM);\n}\n\nconst FONT_WEIGHT_CLASSES: Record<string, IFastTextFontWeight> = {\n  \"font-normal\": \"400\",\n  \"font-medium\": \"500\",\n  \"font-semibold\": \"600\",\n  \"font-bold\": \"700\",\n};\n\n// Resolves a Tailwind-ish class string into FastText styles so conversions from nested\n// <Text className=\"...\"> read like the JSX they replace:\n//   const cls = StyledText_cls(rem);\n//   builder.add(\"Plates: \", cls(\"text-sm text-text-secondary\"));\n// Supports text sizes, font weights, italic, underline/line-through, and text-*/bg-* colors\n// resolved via Tailwind_semantic() (e.g. text-text-secondary, text-syntax-weight, bg-background-subtle)\n// or Tailwind_colors() (e.g. text-yellow-600, bg-white).\nexport function StyledText_cls(rem: number): (className: string) => IFastTextStyle {\n  const semantic = Tailwind_semantic() as unknown as Record<string, Record<string, string> | undefined>;\n  const colors = Tailwind_colors() as unknown as Record<string, string | Record<string, string> | undefined>;\n\n  function resolveColor(rest: string): string | undefined {\n    const direct = colors[rest];\n    if (typeof direct === \"string\") {\n      return direct;\n    }\n    const dashIndex = rest.indexOf(\"-\");\n    if (dashIndex === -1) {\n      return undefined;\n    }\n    const head = rest.slice(0, dashIndex);\n    const tail = rest.slice(dashIndex + 1);\n    const fromSemantic = semantic[head]?.[tail];\n    if (fromSemantic != null) {\n      return fromSemantic;\n    }\n    const palette = colors[head];\n    return typeof palette === \"object\" ? palette?.[tail] : undefined;\n  }\n\n  return (className) => {\n    const style: IFastTextStyle = {};\n    for (const token of className.split(/\\s+/)) {\n      if (token.length === 0) {\n        continue;\n      }\n      const weight = FONT_WEIGHT_CLASSES[token];\n      if (weight != null) {\n        style.fontWeight = weight;\n      } else if (token === \"italic\") {\n        style.fontStyle = \"italic\";\n      } else if (token === \"not-italic\") {\n        style.fontStyle = \"normal\";\n      } else if (token === \"underline\" || token === \"line-through\") {\n        style.textDecorationLine = token;\n      } else if (token.startsWith(\"text-\")) {\n        const rest = token.slice(\"text-\".length);\n        if (rest in SIZE_PX) {\n          style.fontSize = StyledText_remToPx(rest as IFastTextSize, rem);\n        } else {\n          const color = resolveColor(rest);\n          if (color != null) {\n            style.color = color;\n          } else if (isDev()) {\n            console.warn(`StyledText_cls: unknown color class \"${token}\"`);\n          }\n        }\n      } else if (token.startsWith(\"bg-\")) {\n        const color = resolveColor(token.slice(\"bg-\".length));\n        if (color != null) {\n          style.backgroundColor = color;\n        } else if (isDev()) {\n          console.warn(`StyledText_cls: unknown color class \"${token}\"`);\n        }\n      } else if (isDev()) {\n        console.warn(`StyledText_cls: unsupported class \"${token}\"`);\n      }\n    }\n    return style;\n  };\n}\n","import { ISubscriptionReceipt } from \"../types\";\n\nexport function SubscriptionReceipts_cleanupApple(\n  apple: ISubscriptionReceipt[],\n  verdicts: ReadonlyMap<string, boolean>\n): ISubscriptionReceipt[] {\n  const valid = apple.filter((r) => verdicts.get(r.value) === true);\n  const newestValid = valid.reduce<ISubscriptionReceipt | undefined>(\n    (newest, r) => (newest == null || r.createdAt >= newest.createdAt ? r : newest),\n    undefined\n  );\n  // Receipts without a verdict appeared after verification started (sync merge or store restore) and\n  // must be kept - deciding from a stale snapshot is how valid receipts used to get tombstoned\n  // account-wide. Collapsing valid ones to a single newest receipt is still required: legacy Apple\n  // receipts are tens of KB, differ on every refresh, and all verify true while the account is\n  // active, so per-receipt pruning would let the array grow unboundedly.\n  const result = apple.filter((r) => !verdicts.has(r.value) || r === newestValid);\n  return result.length === apple.length ? apple : result;\n}\n","import { Service } from \"../api/service\";\nimport { IDispatch } from \"../ducks/types\";\nimport { IState, updateState } from \"../models/state\";\nimport { lb } from \"lens-shmens\";\nimport { ISubscription } from \"../types\";\nimport { UidFactory_generateUid } from \"./generator\";\nimport { CollectionUtils_removeBy } from \"./collection\";\nimport { SubscriptionReceipts_cleanupApple } from \"./subscriptionReceipts\";\nimport { Thunk_postevent } from \"../ducks/thunks\";\n\nexport function Subscriptions_hasSubscription(subscription: ISubscription): boolean {\n  if (subscription.key && subscription.key !== \"unclaimed\") {\n    return true;\n  }\n  const hasApple = hasAppleSubscription(subscription);\n  const hasGoogle = hasGoogleSubscription(subscription);\n  return hasApple || hasGoogle;\n}\n\nexport function Subscriptions_listOfSubscriptions(subscription: ISubscription): string[] {\n  const arr: string[] = [];\n  if ((subscription.apple || []).length > 0) {\n    arr.push(\"apple\");\n  }\n  if ((subscription.google || []).length > 0) {\n    arr.push(\"google\");\n  }\n  if (subscription.key === \"unclaimed\") {\n    arr.push(\"unclaimedkey\");\n  } else if (subscription.key) {\n    arr.push(\"key\");\n  }\n  return arr;\n}\n\nfunction hasAppleSubscription(subscription: ISubscription): boolean {\n  return subscription.apple.length > 0;\n}\n\nfunction hasGoogleSubscription(subscription: ISubscription): boolean {\n  return subscription.google.length > 0;\n}\n\nexport function Subscriptions_setAppleReceipt(dispatch: IDispatch, receipt: string): void {\n  updateState(\n    dispatch,\n    [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"subscription\")\n        .p(\"apple\")\n        .recordModify((v) => {\n          if (v.some((s) => s.value === receipt)) {\n            dispatch(Thunk_postevent(\"same-apple-receipt\"));\n            return v;\n          } else {\n            dispatch(Thunk_postevent(\"new-apple-receipt\"));\n            return [\n              ...v,\n              {\n                vtype: \"subscription_receipt\",\n                value: receipt,\n                id: UidFactory_generateUid(6),\n                createdAt: Date.now(),\n              },\n            ];\n          }\n        }),\n    ],\n    \"Set Apple receipt\"\n  );\n}\n\nexport function Subscriptions_setGooglePurchaseToken(dispatch: IDispatch, purchaseToken: string): void {\n  updateState(\n    dispatch,\n    [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"subscription\")\n        .p(\"google\")\n        .recordModify((v) => {\n          if (v.some((s) => s.value === purchaseToken)) {\n            return v;\n          } else {\n            return [\n              ...v,\n              {\n                vtype: \"subscription_receipt\",\n                value: purchaseToken,\n                id: UidFactory_generateUid(6),\n                createdAt: Date.now(),\n              },\n            ];\n          }\n        }),\n    ],\n    \"Set Google purchase token\"\n  );\n}\n\nexport function Subscriptions_cleanupOutdatedAppleReceipts(\n  dispatch: IDispatch,\n  userId: string,\n  service: Service,\n  subscription: ISubscription\n): Promise<void> {\n  return Promise.all(\n    subscription.apple.map<Promise<[string, boolean]>>(async (value) => {\n      return [value.value, await Subscriptions_verifyAppleReceipt(userId, service, value.value)];\n    })\n  ).then((results) => {\n    const verdicts = new Map(results);\n    updateState(\n      dispatch,\n      [\n        lb<IState>()\n          .p(\"storage\")\n          .p(\"subscription\")\n          .p(\"apple\")\n          .recordModify((apple) => SubscriptionReceipts_cleanupApple(apple, verdicts)),\n      ],\n      \"Clean up outdated Apple receipts\"\n    );\n  });\n}\n\nexport function Subscriptions_cleanupOutdatedGooglePurchaseTokens(\n  dispatch: IDispatch,\n  userId: string,\n  service: Service,\n  subscription: ISubscription\n): Promise<void> {\n  return Promise.all(\n    subscription.google.map<Promise<[string, boolean]>>(async (token) => {\n      return [token.id, await Subscriptions_verifyGooglePurchaseToken(service, userId, token.value)];\n    })\n  ).then((results) => {\n    for (const [id, result] of results) {\n      if (!result) {\n        updateState(\n          dispatch,\n          [\n            lb<IState>()\n              .p(\"storage\")\n              .p(\"subscription\")\n              .p(\"google\")\n              .recordModify((r) => {\n                return CollectionUtils_removeBy([...r], \"id\", id);\n              }),\n          ],\n          \"Cleanup outdated Google receipt\"\n        );\n      }\n    }\n  });\n}\n\nexport function Subscriptions_verifyAppleReceipt(userId: string, service: Service, receipt?: string): Promise<boolean> {\n  if (receipt != null) {\n    return service.verifyAppleReceipt(userId, receipt);\n  } else {\n    return Promise.resolve(false);\n  }\n}\n\nexport function Subscriptions_verifyGooglePurchaseToken(\n  service: Service,\n  userId: string,\n  purchaseToken?: string\n): Promise<boolean> {\n  if (purchaseToken != null) {\n    return service.verifyGooglePurchaseToken(userId, purchaseToken);\n  } else {\n    return Promise.resolve(false);\n  }\n}\n","import { IVersions, VersionTracker } from \"../models/versionTracker\";\nimport { ISettings, IStorage, IStatsWeight, IStatsPercentage, IStatsLength, STORAGE_VERSION_TYPES } from \"../types\";\nimport { CollectionUtils_compact, CollectionUtils_groupByKey } from \"./collection\";\nimport { ObjectUtils_values, ObjectUtils_filter, ObjectUtils_isEqual } from \"./object\";\nimport { lg } from \"./posthog\";\n\nexport type IStorageUpdate = Partial<Omit<IStorage, \"stats\" | \"settings\" | \"originalId\" | \"version\">> & {\n  settings: ISettingsUpdate;\n  originalId?: IStorage[\"originalId\"];\n  version: IStorage[\"version\"];\n  stats?: IStatsUpdate;\n  _versions?: IStorage[\"_versions\"];\n};\n\nexport type ISettingsUpdate = Partial<ISettings>;\n\nexport interface ISyncFetchRequest {\n  storage: IStorageUpdate;\n  userId?: string;\n  adminKey?: string;\n}\n\nexport type IStatsUpdateLength = IStatsLength[keyof IStatsLength] extends (infer A)[] | undefined\n  ? (A & { type: \"length\" })[]\n  : never;\nexport type IStatsUpdateWeight = IStatsWeight[keyof IStatsWeight] extends (infer A)[] | undefined\n  ? (A & { type: \"weight\" })[]\n  : never;\nexport type IStatsUpdatePercentage = IStatsPercentage[keyof IStatsPercentage] extends (infer A)[] | undefined\n  ? (A & { type: \"percentage\" })[]\n  : never;\nexport type IStatsUpdate = Partial<\n  Record<keyof IStatsLength, IStatsUpdateLength> &\n    Record<keyof IStatsWeight, IStatsUpdateWeight> &\n    Record<keyof IStatsPercentage, IStatsUpdatePercentage>\n>;\n\nexport interface IStorageUpdate2 {\n  versions?: IVersions<IStorage>;\n  storage?: Partial<IStorage>;\n  version: IStorage[\"version\"];\n  originalId?: IStorage[\"originalId\"];\n}\n\nexport function Sync_getStorageUpdate2(\n  currentStorage: IStorage,\n  lastStorage: IStorage,\n  deviceId?: string\n): IStorageUpdate2 {\n  const versionTracker = new VersionTracker(STORAGE_VERSION_TYPES, { deviceId });\n  const versionsDiff = versionTracker.diffVersions(lastStorage._versions, currentStorage._versions || {});\n  if (versionsDiff) {\n    const storageDiff = versionTracker.extractByVersions(currentStorage, versionsDiff);\n    const filledVersionsDiff = versionTracker.fillVersions(storageDiff, versionsDiff, Date.now());\n    let programs = storageDiff.programs;\n    const programIds = (storageDiff.programs || []).map((p) => p.id);\n    if (programIds.length !== new Set(programIds).size) {\n      const duplicatedPrograms = CollectionUtils_compact(\n        ObjectUtils_values(\n          ObjectUtils_filter(\n            CollectionUtils_groupByKey(storageDiff.programs || [], \"id\"),\n            (k, v) => v != null && v.length > 1\n          )\n        )\n      );\n      const duplicateInfo = duplicatedPrograms.map((arr) => {\n        const isEqual = arr.every((p) => ObjectUtils_isEqual(arr[0], p));\n        return { id: arr[0].id, name: arr.map((p) => p.name), isEqual };\n      });\n      lg(\"duplicate-programs\", { info: JSON.stringify(duplicateInfo) });\n      programs = CollectionUtils_compact(duplicatedPrograms.map((arr) => arr[arr.length - 1]));\n      storageDiff.programs = programs;\n    }\n    return {\n      version: currentStorage.version,\n      originalId: currentStorage.originalId,\n      versions: filledVersionsDiff,\n      storage: storageDiff,\n    };\n  } else {\n    return {\n      version: currentStorage.version,\n      originalId: currentStorage.originalId,\n    };\n  }\n}\n","import baseColors from \"../../tailwind.colors.json\";\nimport semanticColors from \"../../tailwind.semantic.generated.json\";\n\ntype IBaseColors = typeof baseColors;\ntype ISemanticColors = typeof semanticColors;\ntype IDeepString<T> = { [K in keyof T]: T[K] extends object ? IDeepString<T[K]> : string };\ntype ISemanticVars = IDeepString<ISemanticColors[\"light\"]>;\n\nexport const TAILWIND_PAGE_MARKER_CLASS = \"liftosaur-page\";\n\nlet isPageRenderContext = false;\n\nexport function Tailwind_markPageContext(): void {\n  isPageRenderContext = true;\n}\n\nexport function Tailwind_colors(): IBaseColors {\n  return baseColors;\n}\n\nfunction buildSemanticVars(): ISemanticVars {\n  const shape = semanticColors.light as Record<string, Record<string, string>>;\n  const result: Record<string, Record<string, string>> = {};\n  for (const category of Object.keys(shape)) {\n    const inner: Record<string, string> = {};\n    for (const name of Object.keys(shape[category])) {\n      inner[name] = `var(--color-${category}-${name})`;\n    }\n    result[category] = inner;\n  }\n  return result as unknown as ISemanticVars;\n}\n\nconst semanticVars: ISemanticVars = buildSemanticVars();\n\nexport function Tailwind_semantic(): ISemanticVars {\n  if (isPageRenderContext) {\n    return semanticVars;\n  }\n  if (typeof window === \"undefined\") {\n    return semanticColors.light as unknown as ISemanticVars;\n  }\n  const root = window.document.documentElement;\n  if (root.classList.contains(TAILWIND_PAGE_MARKER_CLASS)) {\n    return semanticVars;\n  }\n  const theme = root.classList.contains(\"dark\") ? \"dark\" : \"light\";\n  return semanticColors[theme] as unknown as ISemanticVars;\n}\n\nexport function Tailwind_isDark(): boolean {\n  return Tailwind_semantic().background.default === baseColors.black;\n}\n\nexport function Tailwind_semanticConcrete(): ISemanticVars {\n  return semanticColors.light as unknown as ISemanticVars;\n}\n","export function Theme_apply(theme: \"dark\" | \"light\"): void {\n  const root = document.documentElement;\n  if (theme === \"dark\") {\n    root.classList.add(\"dark\");\n    root.classList.remove(\"light\");\n  } else {\n    root.classList.add(\"light\");\n    root.classList.remove(\"dark\");\n  }\n}\n","import { StringUtils_pad } from \"./string\";\n\nexport function TimeUtils_formatHHMM(ms: number): string {\n  const minutes = Math.floor((ms / 1000 / 60) % 60);\n  const hours = Math.floor(ms / 1000 / 60 / 60);\n\n  const result = [StringUtils_pad(hours.toString(), 2), StringUtils_pad(minutes.toString(), 2)].join(\":\");\n\n  return result;\n}\n\nexport function TimeUtils_formatHOrMin(ms: number): { value: string; unit: \"h\" | \"min\" } {\n  const minutes = Math.floor((ms / 1000 / 60) % 60);\n  const hours = Math.floor(ms / 1000 / 60 / 60);\n  if (hours > 0) {\n    return { value: TimeUtils_formatHHMM(ms), unit: \"h\" };\n  } else {\n    return { value: `${minutes}`, unit: \"min\" };\n  }\n}\n\nexport function TimeUtils_formatHH(ms: number): string {\n  const hours = Math.floor(ms / 1000 / 60 / 60);\n  return StringUtils_pad(hours.toString(), 2);\n}\n\nexport function TimeUtils_formatMM(ms: number): string {\n  const minutes = Math.floor((ms / 1000 / 60) % 60);\n  return StringUtils_pad(minutes.toString(), 2);\n}\n\nexport function TimeUtils_formatSS(ms: number): string {\n  const seconds = Math.floor((ms / 1000) % 60);\n  return StringUtils_pad(seconds.toString(), 2);\n}\n\nexport function TimeUtils_formatMMSS(ms: number): string {\n  const seconds = Math.floor((ms / 1000) % 60);\n  const minutes = Math.floor((ms / 1000 / 60) % 60);\n  return [StringUtils_pad(minutes.toString(), 2), StringUtils_pad(seconds.toString(), 2)].join(\":\");\n}\n\nexport function TimeUtils_formatUTCHHMM(ms: number): string {\n  const date = new Date(ms);\n  const hours = StringUtils_pad(date.getUTCHours().toString(), 2);\n  const minutes = StringUtils_pad(date.getUTCMinutes().toString(), 2);\n  return [hours, minutes].join(\":\");\n}\n","let isUndoingRef = false;\n\nexport function UndoingFlag_set(value: boolean): void {\n  isUndoingRef = value;\n  if (typeof window !== \"undefined\") {\n    window.isUndoing = value;\n  }\n}\n\nexport function UndoingFlag_get(): boolean {\n  if (typeof window !== \"undefined\" && window.isUndoing != null) {\n    return window.isUndoing;\n  }\n  return isUndoingRef;\n}\n","import { IEither } from \"./types\";\nimport { URLPolyfill } from \"./urlPolyfill\";\n\n// Check if native URL is available (not available in QuickJS on watchOS)\nconst URLConstructor: typeof URL = typeof URL !== \"undefined\" ? URL : (URLPolyfill as unknown as typeof URL);\n\nexport function UrlUtils_build(url: string, base?: string | URL): URL {\n  if (base != null) {\n    base = base.toString().replace(\"liftosaur://\", \"https://\");\n  }\n  try {\n    return new URLConstructor(url, base);\n  } catch (e) {\n    let json: string | undefined;\n    try {\n      json = JSON.stringify(url);\n    } catch {}\n    throw new TypeError(`Failed to construct URL: ${json || url}`);\n  }\n}\n\nexport function UrlUtils_buildSafe(url: string, base?: string | URL): IEither<URL, string> {\n  try {\n    return { success: true, data: UrlUtils_build(url, base) };\n  } catch (e) {\n    return { success: false, error: e instanceof Error ? e.message : String(e) };\n  }\n}\n","// URL polyfill for environments without native URL support (e.g., QuickJS on watchOS)\n\ninterface IParsedURL {\n  protocol: string;\n  hostname: string;\n  port: string;\n  host: string;\n  pathname: string;\n  search: string;\n  hash: string;\n  username: string;\n  password: string;\n}\n\nfunction parseURL(url: string): IParsedURL | null {\n  const match = url.match(/^(([^:/?#]+):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/);\n  if (!match) {\n    return null;\n  }\n\n  const authority = match[4] || \"\";\n  let userInfo = \"\";\n  let host = authority;\n  const atIndex = authority.indexOf(\"@\");\n  if (atIndex !== -1) {\n    userInfo = authority.substring(0, atIndex);\n    host = authority.substring(atIndex + 1);\n  }\n\n  let username = \"\";\n  let password = \"\";\n  if (userInfo) {\n    const colonIndex = userInfo.indexOf(\":\");\n    if (colonIndex !== -1) {\n      username = userInfo.substring(0, colonIndex);\n      password = userInfo.substring(colonIndex + 1);\n    } else {\n      username = userInfo;\n    }\n  }\n\n  let hostname = host;\n  let port = \"\";\n  const portMatch = host.match(/^(.+):(\\d+)$/);\n  if (portMatch) {\n    hostname = portMatch[1];\n    port = portMatch[2];\n  }\n\n  return {\n    protocol: match[2] ? match[2] + \":\" : \"\",\n    hostname,\n    port,\n    host,\n    pathname: match[5] || \"\",\n    search: match[6] || \"\",\n    hash: match[8] || \"\",\n    username,\n    password,\n  };\n}\n\nexport class URLSearchParamsPolyfill {\n  private params: Map<string, string[]> = new Map();\n\n  constructor(init?: string | URLSearchParamsPolyfill | Record<string, string> | Array<[string, string]>) {\n    if (typeof init === \"string\") {\n      this._parseFromString(init);\n    } else if (init instanceof URLSearchParamsPolyfill) {\n      init.forEach((value, key) => this.append(key, value));\n    } else if (Array.isArray(init)) {\n      for (const [key, value] of init) {\n        this.append(key, value);\n      }\n    } else if (init && typeof init === \"object\") {\n      for (const key of Object.keys(init)) {\n        this.append(key, init[key]);\n      }\n    }\n  }\n\n  private _parseFromString(query: string): void {\n    if (query.startsWith(\"?\")) {\n      query = query.slice(1);\n    }\n    if (!query) {\n      return;\n    }\n    for (const pair of query.split(\"&\")) {\n      const eqIndex = pair.indexOf(\"=\");\n      if (eqIndex === -1) {\n        this.append(decodeURIComponent(pair), \"\");\n      } else {\n        const key = decodeURIComponent(pair.substring(0, eqIndex));\n        const value = decodeURIComponent(pair.substring(eqIndex + 1));\n        this.append(key, value);\n      }\n    }\n  }\n\n  public append(name: string, value: string): void {\n    const values = this.params.get(name) || [];\n    values.push(value);\n    this.params.set(name, values);\n  }\n\n  public delete(name: string, value?: string): void {\n    if (value === undefined) {\n      this.params.delete(name);\n    } else {\n      const values = this.params.get(name);\n      if (values) {\n        const filtered = values.filter((v) => v !== value);\n        if (filtered.length === 0) {\n          this.params.delete(name);\n        } else {\n          this.params.set(name, filtered);\n        }\n      }\n    }\n  }\n\n  public get(name: string): string | null {\n    const values = this.params.get(name);\n    return values ? values[0] : null;\n  }\n\n  public getAll(name: string): string[] {\n    return this.params.get(name) || [];\n  }\n\n  public has(name: string, value?: string): boolean {\n    if (!this.params.has(name)) {\n      return false;\n    }\n    if (value === undefined) {\n      return true;\n    }\n    const values = this.params.get(name)!;\n    return values.includes(value);\n  }\n\n  public set(name: string, value: string): void {\n    this.params.set(name, [value]);\n  }\n\n  public sort(): void {\n    const sorted = new Map([...this.params.entries()].sort((a, b) => a[0].localeCompare(b[0])));\n    this.params = sorted;\n  }\n\n  public toString(): string {\n    const parts: string[] = [];\n    this.params.forEach((values, key) => {\n      for (const value of values) {\n        parts.push(encodeURIComponent(key) + \"=\" + encodeURIComponent(value));\n      }\n    });\n    return parts.join(\"&\");\n  }\n\n  public forEach(\n    callback: (value: string, key: string, parent: URLSearchParamsPolyfill) => void,\n    thisArg?: unknown\n  ): void {\n    this.params.forEach((values, key) => {\n      for (const value of values) {\n        callback.call(thisArg, value, key, this);\n      }\n    });\n  }\n\n  public entries(): IterableIterator<[string, string]> {\n    const result: [string, string][] = [];\n    this.params.forEach((values, key) => {\n      for (const value of values) {\n        result.push([key, value]);\n      }\n    });\n    return result[Symbol.iterator]();\n  }\n\n  public keys(): IterableIterator<string> {\n    const result: string[] = [];\n    this.params.forEach((values, key) => {\n      for (let i = 0; i < values.length; i++) {\n        result.push(key);\n      }\n    });\n    return result[Symbol.iterator]();\n  }\n\n  public values(): IterableIterator<string> {\n    const result: string[] = [];\n    this.params.forEach((values) => {\n      for (const value of values) {\n        result.push(value);\n      }\n    });\n    return result[Symbol.iterator]();\n  }\n\n  public [Symbol.iterator](): IterableIterator<[string, string]> {\n    return this.entries();\n  }\n\n  public get size(): number {\n    let count = 0;\n    this.params.forEach((values) => {\n      count += values.length;\n    });\n    return count;\n  }\n}\n\nexport class URLPolyfill {\n  private _protocol: string = \"\";\n  private _hostname: string = \"\";\n  private _port: string = \"\";\n  private _pathname: string = \"\";\n  private _search: string = \"\";\n  private _hash: string = \"\";\n  private _username: string = \"\";\n  private _password: string = \"\";\n  private _searchParams: URLSearchParamsPolyfill;\n\n  constructor(url: string, base?: string | URLPolyfill) {\n    url = String(url);\n    if (base !== undefined) {\n      base = String(base);\n      const baseP = parseURL(base);\n      if (!baseP || !baseP.protocol) {\n        throw new TypeError(\"Invalid base URL\");\n      }\n\n      if (/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(url)) {\n        // Absolute URL\n        const p = parseURL(url);\n        if (p) {\n          this._protocol = p.protocol;\n          this._hostname = p.hostname;\n          this._port = p.port;\n          this._pathname = p.pathname;\n          this._search = p.search;\n          this._hash = p.hash;\n          this._username = p.username;\n          this._password = p.password;\n        }\n      } else if (url.indexOf(\"//\") === 0) {\n        // Protocol-relative URL\n        const p = parseURL(baseP.protocol + url);\n        if (p) {\n          this._protocol = p.protocol;\n          this._hostname = p.hostname;\n          this._port = p.port;\n          this._pathname = p.pathname;\n          this._search = p.search;\n          this._hash = p.hash;\n          this._username = p.username;\n          this._password = p.password;\n        }\n      } else if (url.indexOf(\"/\") === 0) {\n        // Absolute path\n        this._protocol = baseP.protocol;\n        this._hostname = baseP.hostname;\n        this._port = baseP.port;\n        this._username = baseP.username;\n        this._password = baseP.password;\n\n        let urlPart = url;\n        const hashIndex = urlPart.indexOf(\"#\");\n        if (hashIndex !== -1) {\n          this._hash = urlPart.substring(hashIndex);\n          urlPart = urlPart.substring(0, hashIndex);\n        }\n        const searchIndex = urlPart.indexOf(\"?\");\n        if (searchIndex !== -1) {\n          this._search = urlPart.substring(searchIndex);\n          this._pathname = urlPart.substring(0, searchIndex);\n        } else {\n          this._pathname = urlPart;\n        }\n      } else {\n        // Relative path\n        this._protocol = baseP.protocol;\n        this._hostname = baseP.hostname;\n        this._port = baseP.port;\n        this._username = baseP.username;\n        this._password = baseP.password;\n\n        const basePath = baseP.pathname.substring(0, baseP.pathname.lastIndexOf(\"/\") + 1);\n        let urlPart = url;\n        const hashIndex = urlPart.indexOf(\"#\");\n        if (hashIndex !== -1) {\n          this._hash = urlPart.substring(hashIndex);\n          urlPart = urlPart.substring(0, hashIndex);\n        }\n        const searchIndex = urlPart.indexOf(\"?\");\n        if (searchIndex !== -1) {\n          this._search = urlPart.substring(searchIndex);\n          this._pathname = basePath + urlPart.substring(0, searchIndex);\n        } else {\n          this._pathname = basePath + urlPart;\n        }\n      }\n    } else {\n      // No base URL\n      const p = parseURL(url);\n      if (!p || !p.protocol) {\n        throw new TypeError(\"Invalid URL\");\n      }\n      this._protocol = p.protocol;\n      this._hostname = p.hostname;\n      this._port = p.port;\n      this._pathname = p.pathname;\n      this._search = p.search;\n      this._hash = p.hash;\n      this._username = p.username;\n      this._password = p.password;\n    }\n\n    this._searchParams = new URLSearchParamsPolyfill(this._search);\n  }\n\n  public get protocol(): string {\n    return this._protocol;\n  }\n\n  public set protocol(value: string) {\n    this._protocol = value.endsWith(\":\") ? value : value + \":\";\n  }\n\n  public get hostname(): string {\n    return this._hostname;\n  }\n\n  public set hostname(value: string) {\n    this._hostname = value;\n  }\n\n  public get port(): string {\n    return this._port;\n  }\n\n  public set port(value: string) {\n    this._port = value;\n  }\n\n  public get host(): string {\n    return this._port ? this._hostname + \":\" + this._port : this._hostname;\n  }\n\n  public set host(value: string) {\n    const portMatch = value.match(/^(.+):(\\d+)$/);\n    if (portMatch) {\n      this._hostname = portMatch[1];\n      this._port = portMatch[2];\n    } else {\n      this._hostname = value;\n      this._port = \"\";\n    }\n  }\n\n  public get pathname(): string {\n    return this._pathname;\n  }\n\n  public set pathname(value: string) {\n    this._pathname = value.startsWith(\"/\") ? value : \"/\" + value;\n  }\n\n  public get search(): string {\n    return this._search;\n  }\n\n  public set search(value: string) {\n    this._search = value.startsWith(\"?\") ? value : value ? \"?\" + value : \"\";\n    this._searchParams = new URLSearchParamsPolyfill(this._search);\n  }\n\n  public get searchParams(): URLSearchParamsPolyfill {\n    return this._searchParams;\n  }\n\n  public get hash(): string {\n    return this._hash;\n  }\n\n  public set hash(value: string) {\n    this._hash = value.startsWith(\"#\") ? value : value ? \"#\" + value : \"\";\n  }\n\n  public get username(): string {\n    return this._username;\n  }\n\n  public set username(value: string) {\n    this._username = value;\n  }\n\n  public get password(): string {\n    return this._password;\n  }\n\n  public set password(value: string) {\n    this._password = value;\n  }\n\n  public get origin(): string {\n    return this._protocol + \"//\" + this.host;\n  }\n\n  public get href(): string {\n    let userinfo = \"\";\n    if (this._username) {\n      userinfo = this._username;\n      if (this._password) {\n        userinfo += \":\" + this._password;\n      }\n      userinfo += \"@\";\n    }\n    return this._protocol + \"//\" + userinfo + this.host + this._pathname + this._search + this._hash;\n  }\n\n  public set href(value: string) {\n    const p = parseURL(value);\n    if (!p || !p.protocol) {\n      throw new TypeError(\"Invalid URL\");\n    }\n    this._protocol = p.protocol;\n    this._hostname = p.hostname;\n    this._port = p.port;\n    this._pathname = p.pathname;\n    this._search = p.search;\n    this._hash = p.hash;\n    this._username = p.username;\n    this._password = p.password;\n    this._searchParams = new URLSearchParamsPolyfill(this._search);\n  }\n\n  public toString(): string {\n    return this.href;\n  }\n\n  public toJSON(): string {\n    return this.href;\n  }\n\n  public static canParse(url: string, base?: string): boolean {\n    try {\n      new URLPolyfill(url, base);\n      return true;\n    } catch {\n      return false;\n    }\n  }\n}\n","import { useCallback } from \"react\";\nimport { IGDispatch, IGThunk } from \"../ducks/types\";\nimport { useThunkReducer } from \"./useThunkReducer\";\nimport { ILensRecordingPayload } from \"lens-shmens\";\nimport { UrlUtils_build } from \"./url\";\n\ntype IAction<TState> = {\n  type: \"Update\";\n  lensRecording: ILensRecordingPayload<TState>[];\n  desc: string;\n};\n\nexport type ILensDispatchSimple<TState> = (lensRecording: ILensRecordingPayload<TState>, desc: string) => void;\n\nexport type ILensDispatch<TState> = (\n  lensRecording: ILensRecordingPayload<TState> | ILensRecordingPayload<TState>[],\n  desc: string\n) => void | Promise<void>;\n\nconst isLoggingEnabled =\n  typeof window !== \"undefined\" && window?.location\n    ? !!UrlUtils_build(window.location.href).searchParams.get(\"log\")\n    : false;\n\nexport function useLensReducer<TState, TEnv>(\n  initialState: TState,\n  env: TEnv,\n  onActions: Array<\n    (\n      action: IAction<TState> | IGThunk<TState, IAction<TState>, TEnv>,\n      oldState: TState,\n      newState: TState\n    ) => void | Promise<void>\n  > = []\n): [TState, ILensDispatch<TState>] {\n  const modifiedOnActions = onActions.map((onAction) => {\n    return (\n      dispatch: IGDispatch<TState, IAction<TState>, TEnv>,\n      action: IAction<TState> | IGThunk<TState, IAction<TState>, TEnv>,\n      oldState: TState,\n      newState: TState\n    ): void => {\n      onAction(action, oldState, newState);\n    };\n  });\n  const [hookState, thunkDispatch] = useThunkReducer<TState, IAction<TState>, TEnv>(\n    (state, action) => {\n      if (isLoggingEnabled) {\n        console.log(`%c-------${action.desc ? ` ${action.desc}` : \"\"}`, \"font-weight:bold\");\n      }\n      return action.lensRecording.reduce((memo, recording) => {\n        if (isLoggingEnabled) {\n          recording.log(\"state\");\n        }\n        const newState = recording.fn(memo);\n        if (isLoggingEnabled && recording.type === \"modify\") {\n          console.log(\"New Value: \", recording.value.v);\n        }\n        return newState;\n      }, state);\n    },\n    initialState,\n    env,\n    modifiedOnActions\n  );\n\n  const dispatch = useCallback(\n    (\n      lensRecording: ILensRecordingPayload<TState>[] | ILensRecordingPayload<TState>,\n      desc: string\n    ): void | Promise<void> => {\n      if (!Array.isArray(lensRecording)) {\n        lensRecording = [lensRecording];\n      }\n      return thunkDispatch({ type: \"Update\", lensRecording, desc });\n    },\n    [thunkDispatch]\n  );\n\n  return [hookState, dispatch];\n}\n","export function usePerfRenderCount(_componentName: string): void {}\n","import { useContext, useEffect, useRef, useState } from \"react\";\nimport type { NativeScrollEvent, NativeSyntheticEvent } from \"react-native\";\nimport { NavScreenScrollContext } from \"../navigation/NavScreenScrollContext\";\n\ninterface IIdleGlobal {\n  requestIdleCallback?: (cb: () => void, opts?: { timeout?: number }) => number;\n  cancelIdleCallback?: (handle: number) => void;\n}\n\nconst DEBUG = process.env.NODE_ENV !== \"production\";\n\nfunction dbg(label: string | undefined, message: string): void {\n  if (DEBUG) {\n    console.log(`[progressive${label ? ` ${label}` : \"\"}] ${message}`);\n  }\n}\n\ninterface IProgressiveOptions {\n  initialBatch?: number;\n  batchSize?: number;\n  threshold?: number;\n  rateLimitMs?: number;\n  // When set, idle-time revealing stops at this count. The rest is only revealed\n  // once the user scrolls near the bottom (avoids rendering long tails nobody looks at).\n  idleCap?: number;\n  debugLabel?: string;\n  resetKey?: unknown;\n}\n\nexport function useProgressiveCount(total: number, options?: IProgressiveOptions): number {\n  const initialBatch = options?.initialBatch ?? 4;\n  const batchSize = options?.batchSize ?? 4;\n  const threshold = options?.threshold ?? 600;\n  const rateLimitMs = options?.rateLimitMs ?? 200;\n  const idleCap = options?.idleCap;\n  const debugLabel = options?.debugLabel;\n  const resetKey = options?.resetKey;\n\n  const [count, setCount] = useState(() => Math.min(initialBatch, total));\n  const [prevResetKey, setPrevResetKey] = useState<unknown>(resetKey);\n  const unlockedRef = useRef(false);\n  let effectiveCount = count;\n  if (resetKey !== prevResetKey) {\n    setPrevResetKey(resetKey);\n    unlockedRef.current = false;\n    effectiveCount = Math.min(initialBatch, total);\n    setCount(effectiveCount);\n    dbg(debugLabel, `reset → ${effectiveCount}/${total} (resetKey changed)`);\n  }\n  const countRef = useRef(effectiveCount);\n  countRef.current = effectiveCount;\n  const lastBumpRef = useRef(0);\n\n  const mountedRef = useRef(false);\n  if (!mountedRef.current) {\n    mountedRef.current = true;\n    dbg(\n      debugLabel,\n      `mounted with ${count}/${total} items visible (initialBatch=${initialBatch}, batchSize=${batchSize})`\n    );\n  }\n\n  const ctx = useContext(NavScreenScrollContext);\n\n  useEffect(() => {\n    if (!ctx) {\n      return undefined;\n    }\n    return ctx.addScrollListener((e: NativeSyntheticEvent<NativeScrollEvent>) => {\n      if (countRef.current >= total) {\n        return;\n      }\n      const now = Date.now();\n      if (now - lastBumpRef.current < rateLimitMs) {\n        return;\n      }\n      const { contentOffset, contentSize, layoutMeasurement } = e.nativeEvent;\n      if (contentOffset.y + layoutMeasurement.height > contentSize.height - threshold) {\n        lastBumpRef.current = now;\n        unlockedRef.current = true;\n        const next = Math.min(countRef.current + batchSize, total);\n        countRef.current = next;\n        dbg(debugLabel, `scroll bump → ${next}/${total}`);\n        setCount(next);\n      }\n    });\n  }, [ctx, total, batchSize, threshold, rateLimitMs, debugLabel]);\n\n  useEffect(() => {\n    const idleTarget = idleCap == null || unlockedRef.current ? total : Math.min(idleCap, total);\n    if (count >= idleTarget) {\n      if (count > 0 && count === total) {\n        dbg(debugLabel, `complete: all ${total} items revealed`);\n      } else if (count === idleTarget) {\n        dbg(debugLabel, `idle cap reached at ${count}/${total}, waiting for scroll`);\n      }\n      return undefined;\n    }\n    const g = globalThis as unknown as IIdleGlobal;\n    const tick = (): void => {\n      const cap = idleCap == null || unlockedRef.current ? total : Math.min(idleCap, total);\n      const next = Math.min(countRef.current + batchSize, cap);\n      countRef.current = next;\n      dbg(debugLabel, `idle bump → ${next}/${total}`);\n      setCount(next);\n    };\n    if (g.requestIdleCallback) {\n      const handle = g.requestIdleCallback(tick, { timeout: 300 });\n      return () => g.cancelIdleCallback?.(handle);\n    }\n    const handle = setTimeout(tick, 50) as unknown as number;\n    return () => clearTimeout(handle);\n  }, [count, total, batchSize, idleCap, debugLabel]);\n\n  return Math.min(effectiveCount, total);\n}\n\nexport function useProgressiveItems<T>(items: T[], options?: IProgressiveOptions): T[] {\n  const count = useProgressiveCount(items.length, options);\n  return count >= items.length ? items : items.slice(0, count);\n}\n","import { useSyncExternalStore } from \"react\";\nimport { SCALED_SPACINGS, SCALED_LEADINGS } from \"./scaledSpacings.generated\";\n\nconst BASE_REM = 16;\nconst listeners = new Set<() => void>();\nlet currentRem: number | undefined = undefined;\n\nexport function useRem(): number {\n  return useSyncExternalStore(remSubscribe, remGet, remServerGet);\n}\n\nexport function useRemScale(): number {\n  return useRem() / BASE_REM;\n}\n\nexport function Rem_set(size: number): void {\n  if (typeof document !== \"undefined\") {\n    const root = document.documentElement;\n    root.style.fontSize = `${size}px`;\n    const scale = size / BASE_REM;\n    // --spacing is deliberately absent: paddings, margins and gaps are constant at every text\n    // size. Only type, and the boxes that have to keep containing it, grow.\n    const vars: Record<string, string> = {\n      \"--text-2xs\": `${10 * scale}px`,\n      \"--text-xs\": `${12 * scale}px`,\n      \"--text-sm\": `${14 * scale}px`,\n      \"--text-base\": `${16 * scale}px`,\n      \"--text-lg\": `${18 * scale}px`,\n      \"--text-xl\": `${20 * scale}px`,\n      \"--text-2xl\": `${24 * scale}px`,\n      \"--text-3xl\": `${30 * scale}px`,\n      \"--text-4xl\": `${36 * scale}px`,\n      \"--text-5xl\": `${48 * scale}px`,\n    };\n    for (const n of SCALED_SPACINGS) {\n      vars[`--spacing-scaled-${n}`] = `${n * 4 * scale}px`;\n    }\n    for (const n of SCALED_LEADINGS) {\n      vars[`--leading-scaled-${n}`] = `${n * 4 * scale}px`;\n    }\n    for (const [k, v] of Object.entries(vars)) {\n      root.style.setProperty(k, v);\n    }\n  }\n  currentRem = size;\n  for (const l of listeners) {\n    l();\n  }\n}\n\n// getSnapshot runs on every render of every subscriber (and there's one per icon),\n// so it must not call getComputedStyle - that forces a style recalc each time.\nfunction remGet(): number {\n  if (currentRem == null) {\n    if (typeof document === \"undefined\") {\n      return BASE_REM;\n    }\n    const fs = parseFloat(getComputedStyle(document.documentElement).fontSize);\n    currentRem = isNaN(fs) ? BASE_REM : fs;\n  }\n  return currentRem;\n}\n\nfunction remServerGet(): number {\n  return BASE_REM;\n}\n\nfunction remSubscribe(onChange: () => void): () => void {\n  listeners.add(onChange);\n  return () => {\n    listeners.delete(onChange);\n  };\n}\n","import { Reducer, useCallback, useRef, useState } from \"react\";\nimport { IGDispatch, IGThunk, IReducerOnIGAction } from \"../ducks/types\";\n\nexport function useThunkReducer<TState, TAction extends Record<string, unknown>, TEnv>(\n  reducer: Reducer<TState, TAction>,\n  initialState: TState,\n  env: TEnv,\n  onActions: IReducerOnIGAction<TState, TAction, TEnv>[] = []\n): [TState, IGDispatch<TState, TAction, TEnv>] {\n  const [hookState, setHookState] = useState(initialState);\n\n  // State management.\n  const state = useRef(hookState);\n  const getState = useCallback(() => state.current, [state]);\n  const setState = useCallback(\n    (newState: TState): void => {\n      state.current = newState;\n      setHookState(newState);\n    },\n    [state, setHookState]\n  );\n\n  // Reducer.\n  const reduce = useCallback((action: TAction): TState => reducer(getState(), action), [reducer, getState]);\n\n  // Augmented dispatcher.\n  const dispatch = useCallback(\n    (action: IGThunk<TState, TAction, TEnv> | TAction) => {\n      const oldState = state.current;\n      if (typeof action === \"function\") {\n        (action(dispatch, getState, env) as Promise<void>).then(() => {\n          for (const onAction of onActions) {\n            onAction(dispatch, action, oldState, state.current);\n          }\n        });\n      } else {\n        const newState = reduce(action);\n        setState(newState);\n        for (const onAction of onActions) {\n          onAction(dispatch, action, oldState, state.current);\n        }\n      }\n    },\n    [getState, setState, reduce]\n  );\n\n  return [hookState, dispatch];\n}\n","import { ISetsStatus, Reps_isFinished, Reps_isCompleted, Reps_isInRangeCompleted } from \"../models/set\";\nimport { ISet } from \"../types\";\nimport { Tailwind_semantic, Tailwind_colors } from \"./tailwindConfig\";\n\nexport function WorkoutExerciseUtils_getColor(sets: ISet[], isWarmup: boolean): string {\n  if (sets.length === 0) {\n    return \"purple\";\n  }\n  if (Reps_isFinished(sets)) {\n    if (isWarmup) {\n      return \"green\";\n    } else {\n      if (Reps_isCompleted(sets)) {\n        return \"green\";\n      } else if (Reps_isInRangeCompleted(sets)) {\n        return \"yellow\";\n      } else {\n        return \"red\";\n      }\n    }\n  } else {\n    return \"purple\";\n  }\n}\n\nexport function WorkoutExerciseUtils_getBgColor50(sets: ISet[], isWarmup: boolean): string {\n  const color = WorkoutExerciseUtils_getColor(sets, isWarmup);\n  if (color === \"green\") {\n    return \"bg-color-green50\";\n  } else if (color === \"red\") {\n    return \"bg-color-red50\";\n  } else if (color === \"yellow\") {\n    return \"bg-color-yellow50\";\n  } else {\n    return \"bg-color-purple50\";\n  }\n}\n\nexport function WorkoutExerciseUtils_getBgColor100(sets: ISet[], isWarmup: boolean): string {\n  const color = WorkoutExerciseUtils_getColor(sets, isWarmup);\n  if (color === \"green\") {\n    return \"bg-color-green100\";\n  } else if (color === \"red\") {\n    return \"bg-color-red100\";\n  } else if (color === \"yellow\") {\n    return \"bg-color-yellow100\";\n  } else {\n    return \"bg-color-purple100\";\n  }\n}\n\nexport function WorkoutExerciseUtils_getBgColor200(sets: ISet[], isWarmup: boolean): string {\n  const color = WorkoutExerciseUtils_getColor(sets, isWarmup);\n  if (color === \"green\") {\n    return \"bg-color-green200\";\n  } else if (color === \"red\") {\n    return \"bg-color-red200\";\n  } else if (color === \"yellow\") {\n    return \"bg-color-yellow200\";\n  } else {\n    return \"bg-color-purple200\";\n  }\n}\n\nexport function WorkoutExerciseUtils_getIconColor(sets: ISet[], isWarmup: boolean): string {\n  const color = WorkoutExerciseUtils_getColor(sets, isWarmup);\n  if (color === \"green\") {\n    return Tailwind_semantic().icon.green;\n  } else if (color === \"red\") {\n    return Tailwind_semantic().icon.red;\n  } else if (color === \"yellow\") {\n    return Tailwind_semantic().icon.yellow;\n  } else {\n    return Tailwind_semantic().icon.light;\n  }\n}\n\nexport function WorkoutExerciseUtils_getBorderColor100(sets: ISet[], isWarmup: boolean): string {\n  const color = WorkoutExerciseUtils_getColor(sets, isWarmup);\n  if (color === \"green\") {\n    return \"border-color-green100\";\n  } else if (color === \"red\") {\n    return \"border-color-red100\";\n  } else if (color === \"yellow\") {\n    return \"border-color-yellow100\";\n  } else {\n    return \"border-color-purple100\";\n  }\n}\n\nexport function WorkoutExerciseUtils_getBorderColor150(sets: ISet[], isWarmup: boolean): string {\n  const color = WorkoutExerciseUtils_getColor(sets, isWarmup);\n  if (color === \"green\") {\n    return \"border-color-green150\";\n  } else if (color === \"red\") {\n    return \"border-color-red150\";\n  } else if (color === \"yellow\") {\n    return \"border-color-yellow150\";\n  } else {\n    return \"border-color-purple150\";\n  }\n}\n\nexport function WorkoutExerciseUtils_getBorderColor200(sets: ISet[], isWarmup: boolean): string {\n  const color = WorkoutExerciseUtils_getColor(sets, isWarmup);\n  if (color === \"green\") {\n    return \"border-color-green200\";\n  } else if (color === \"red\") {\n    return \"border-color-red200\";\n  } else if (color === \"yellow\") {\n    return \"border-color-yellow200\";\n  } else {\n    return \"border-color-purple200\";\n  }\n}\n\nexport function WorkoutExerciseUtils_getBorderColor300(sets: ISet[], isWarmup: boolean): string {\n  const color = WorkoutExerciseUtils_getColor(sets, isWarmup);\n  if (color === \"green\") {\n    return \"border-color-green300\";\n  } else if (color === \"red\") {\n    return \"border-color-red300\";\n  } else if (color === \"yellow\") {\n    return \"border-color-yellow300\";\n  } else {\n    return \"border-color-purple300\";\n  }\n}\n\nexport function WorkoutExerciseUtils_setsStatusToColor(status: ISetsStatus): string {\n  switch (status) {\n    case \"success\":\n      return Tailwind_colors().green[600];\n    case \"in-range\":\n      return Tailwind_colors().yellow[600];\n    case \"failed\":\n      return Tailwind_colors().red[500];\n    case \"not-finished\":\n      return Tailwind_colors().lightgray[400];\n  }\n}\n\nexport function WorkoutExerciseUtils_setsStatusToBorderColor(status: ISetsStatus): string {\n  switch (status) {\n    case \"success\":\n      return \"border-green-700\";\n    case \"in-range\":\n      return \"border-yellow-700\";\n    case \"failed\":\n      return \"border-red-700\";\n    case \"not-finished\":\n      return \"border-gray-300\";\n  }\n}\n\nexport function WorkoutExerciseUtils_setsStatusToTextColor(status: ISetsStatus): string {\n  switch (status) {\n    case \"success\":\n      return \"text-green-600\";\n    case \"in-range\":\n      return \"text-yellow-600\";\n    case \"failed\":\n      return \"text-red-600\";\n    case \"not-finished\":\n      return \"text-gray-300\";\n  }\n}\n\n// Concrete-color twin of setsStatusToTextColor for FastText (which takes resolved colors,\n// not classNames). setsStatusToColor above is NOT it — that's the icon palette.\nexport function WorkoutExerciseUtils_setsStatusToTextColorValue(status: ISetsStatus): string {\n  switch (status) {\n    case \"success\":\n      return Tailwind_colors().green[600];\n    case \"in-range\":\n      return Tailwind_colors().yellow[600];\n    case \"failed\":\n      return Tailwind_colors().red[600];\n    case \"not-finished\":\n      // Closest custom-palette match to text-gray-300 (Tailwind default palette, #d1d5db).\n      return Tailwind_colors().lightgray[200];\n  }\n}\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\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.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(n); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction filterUniqueArray(arr) {\n  return arr.filter(function (val, index) {\n    return arr.lastIndexOf(val) === index;\n  });\n}\n\nexport default function assignStyle(base) {\n  for (var i = 0, len = arguments.length <= 1 ? 0 : arguments.length - 1; i < len; ++i) {\n    var style = i + 1 < 1 || arguments.length <= i + 1 ? undefined : arguments[i + 1];\n\n    for (var property in style) {\n      var value = style[property];\n      var baseValue = base[property];\n\n      if (baseValue && value) {\n        if (Array.isArray(baseValue)) {\n          base[property] = filterUniqueArray(baseValue.concat(value));\n          continue;\n        }\n\n        if (Array.isArray(value)) {\n          base[property] = filterUniqueArray([baseValue].concat(_toConsumableArray(value)));\n          continue;\n        }\n\n        if (_typeof(value) === 'object') {\n          base[property] = assignStyle({}, baseValue, value);\n          continue;\n        }\n      }\n\n      base[property] = value;\n    }\n  }\n\n  return base;\n}","var DASH = /-([a-z])/g;\nvar MS = /^Ms/g;\nvar cache = {};\n\nfunction toUpper(match) {\n  return match[1].toUpperCase();\n}\n\nexport default function camelCaseProperty(property) {\n  if (cache.hasOwnProperty(property)) {\n    return cache[property];\n  }\n\n  var camelProp = property.replace(DASH, toUpper).replace(MS, 'ms');\n  cache[property] = camelProp;\n  return camelProp;\n}","import hyphenateStyleName from 'hyphenate-style-name';\nexport default function hyphenateProperty(property) {\n  return hyphenateStyleName(property);\n}","import hyphenateProperty from './hyphenateProperty';\nexport default function cssifyDeclaration(property, value) {\n  return hyphenateProperty(property) + ':' + value;\n}","import cssifyDeclaration from './cssifyDeclaration';\nexport default function cssifyObject(style) {\n  var css = '';\n\n  for (var property in style) {\n    var value = style[property];\n\n    if (typeof value !== 'string' && typeof value !== 'number') {\n      continue;\n    } // prevents the semicolon after\n    // the last rule declaration\n\n\n    if (css) {\n      css += ';';\n    }\n\n    css += cssifyDeclaration(property, value);\n  }\n\n  return css;\n}","var RE = /^(Webkit|Moz|O|ms)/;\nexport default function isPrefixedProperty(property) {\n  return RE.test(property);\n}","var RE = /-webkit-|-moz-|-ms-/;\nexport default function isPrefixedValue(value) {\n  return typeof value === 'string' && RE.test(value);\n}","import hyphenateProperty from './hyphenateProperty';\nvar unitlessProperties = {\n  borderImageOutset: true,\n  borderImageSlice: true,\n  borderImageWidth: true,\n  fontWeight: true,\n  lineHeight: true,\n  opacity: 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 prefixedUnitlessProperties = ['animationIterationCount', 'boxFlex', 'boxFlexGroup', 'boxOrdinalGroup', 'columnCount', 'flex', 'flexGrow', 'flexPositive', 'flexShrink', 'flexNegative', 'flexOrder', 'gridColumn', 'gridColumnEnd', 'gridColumnStart', 'gridRow', 'gridRowEnd', 'gridRowStart', 'lineClamp', 'order'];\nvar prefixes = ['Webkit', 'ms', 'Moz', 'O'];\n\nfunction getPrefixedProperty(prefix, property) {\n  return prefix + property.charAt(0).toUpperCase() + property.slice(1);\n} // add all prefixed properties to the unitless properties\n\n\nfor (var i = 0, len = prefixedUnitlessProperties.length; i < len; ++i) {\n  var property = prefixedUnitlessProperties[i];\n  unitlessProperties[property] = true;\n\n  for (var j = 0, jLen = prefixes.length; j < jLen; ++j) {\n    unitlessProperties[getPrefixedProperty(prefixes[j], property)] = true;\n  }\n} // add all hypenated properties as well\n\n\nfor (var _property in unitlessProperties) {\n  unitlessProperties[hyphenateProperty(_property)] = true;\n}\n\nexport default function isUnitlessProperty(property) {\n  return unitlessProperties.hasOwnProperty(property);\n}","var RE = /^(ms|Webkit|Moz|O)/;\nexport default function unprefixProperty(property) {\n  var propertyWithoutPrefix = property.replace(RE, '');\n  return propertyWithoutPrefix.charAt(0).toLowerCase() + propertyWithoutPrefix.slice(1);\n}","import camelCaseProperty from './camelCaseProperty';\nimport unprefixProperty from './unprefixProperty';\nexport default function normalizeProperty(property) {\n  return unprefixProperty(camelCaseProperty(property));\n}","import hyphenateProperty from './hyphenateProperty';\nexport default function resolveArrayValue(property, value) {\n  return value.join(';' + hyphenateProperty(property) + ':');\n}","var RE = /(-ms-|-webkit-|-moz-|-o-)/g;\nexport default function unprefixValue(value) {\n  if (typeof value === 'string') {\n    return value.replace(RE, '');\n  }\n\n  return value;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = hyphenateProperty;\n\nvar _hyphenateStyleName = require(\"hyphenate-style-name\");\n\nvar _hyphenateStyleName2 = _interopRequireDefault(_hyphenateStyleName);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction hyphenateProperty(property) {\n  return (0, _hyphenateStyleName2[\"default\"])(property);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = isPrefixedValue;\nvar RE = /-webkit-|-moz-|-ms-/;\n\nfunction isPrefixedValue(value) {\n  return typeof value === 'string' && RE.test(value);\n}","const parseNumber = (color, len) => {\n\tif (typeof color !== 'number') return;\n\n\t// hex3: #c93 -> #cc9933\n\tif (len === 3) {\n\t\treturn {\n\t\t\tmode: 'rgb',\n\t\t\tr: (((color >> 8) & 0xf) | ((color >> 4) & 0xf0)) / 255,\n\t\t\tg: (((color >> 4) & 0xf) | (color & 0xf0)) / 255,\n\t\t\tb: ((color & 0xf) | ((color << 4) & 0xf0)) / 255\n\t\t};\n\t}\n\n\t// hex4: #c931 -> #cc993311\n\tif (len === 4) {\n\t\treturn {\n\t\t\tmode: 'rgb',\n\t\t\tr: (((color >> 12) & 0xf) | ((color >> 8) & 0xf0)) / 255,\n\t\t\tg: (((color >> 8) & 0xf) | ((color >> 4) & 0xf0)) / 255,\n\t\t\tb: (((color >> 4) & 0xf) | (color & 0xf0)) / 255,\n\t\t\talpha: ((color & 0xf) | ((color << 4) & 0xf0)) / 255\n\t\t};\n\t}\n\n\t// hex6: #f0f1f2\n\tif (len === 6) {\n\t\treturn {\n\t\t\tmode: 'rgb',\n\t\t\tr: ((color >> 16) & 0xff) / 255,\n\t\t\tg: ((color >> 8) & 0xff) / 255,\n\t\t\tb: (color & 0xff) / 255\n\t\t};\n\t}\n\n\t// hex8: #f0f1f2ff\n\tif (len === 8) {\n\t\treturn {\n\t\t\tmode: 'rgb',\n\t\t\tr: ((color >> 24) & 0xff) / 255,\n\t\t\tg: ((color >> 16) & 0xff) / 255,\n\t\t\tb: ((color >> 8) & 0xff) / 255,\n\t\t\talpha: (color & 0xff) / 255\n\t\t};\n\t}\n};\n\nexport default parseNumber;\n","const named = {\n\taliceblue: 0xf0f8ff,\n\tantiquewhite: 0xfaebd7,\n\taqua: 0x00ffff,\n\taquamarine: 0x7fffd4,\n\tazure: 0xf0ffff,\n\tbeige: 0xf5f5dc,\n\tbisque: 0xffe4c4,\n\tblack: 0x000000,\n\tblanchedalmond: 0xffebcd,\n\tblue: 0x0000ff,\n\tblueviolet: 0x8a2be2,\n\tbrown: 0xa52a2a,\n\tburlywood: 0xdeb887,\n\tcadetblue: 0x5f9ea0,\n\tchartreuse: 0x7fff00,\n\tchocolate: 0xd2691e,\n\tcoral: 0xff7f50,\n\tcornflowerblue: 0x6495ed,\n\tcornsilk: 0xfff8dc,\n\tcrimson: 0xdc143c,\n\tcyan: 0x00ffff,\n\tdarkblue: 0x00008b,\n\tdarkcyan: 0x008b8b,\n\tdarkgoldenrod: 0xb8860b,\n\tdarkgray: 0xa9a9a9,\n\tdarkgreen: 0x006400,\n\tdarkgrey: 0xa9a9a9,\n\tdarkkhaki: 0xbdb76b,\n\tdarkmagenta: 0x8b008b,\n\tdarkolivegreen: 0x556b2f,\n\tdarkorange: 0xff8c00,\n\tdarkorchid: 0x9932cc,\n\tdarkred: 0x8b0000,\n\tdarksalmon: 0xe9967a,\n\tdarkseagreen: 0x8fbc8f,\n\tdarkslateblue: 0x483d8b,\n\tdarkslategray: 0x2f4f4f,\n\tdarkslategrey: 0x2f4f4f,\n\tdarkturquoise: 0x00ced1,\n\tdarkviolet: 0x9400d3,\n\tdeeppink: 0xff1493,\n\tdeepskyblue: 0x00bfff,\n\tdimgray: 0x696969,\n\tdimgrey: 0x696969,\n\tdodgerblue: 0x1e90ff,\n\tfirebrick: 0xb22222,\n\tfloralwhite: 0xfffaf0,\n\tforestgreen: 0x228b22,\n\tfuchsia: 0xff00ff,\n\tgainsboro: 0xdcdcdc,\n\tghostwhite: 0xf8f8ff,\n\tgold: 0xffd700,\n\tgoldenrod: 0xdaa520,\n\tgray: 0x808080,\n\tgreen: 0x008000,\n\tgreenyellow: 0xadff2f,\n\tgrey: 0x808080,\n\thoneydew: 0xf0fff0,\n\thotpink: 0xff69b4,\n\tindianred: 0xcd5c5c,\n\tindigo: 0x4b0082,\n\tivory: 0xfffff0,\n\tkhaki: 0xf0e68c,\n\tlavender: 0xe6e6fa,\n\tlavenderblush: 0xfff0f5,\n\tlawngreen: 0x7cfc00,\n\tlemonchiffon: 0xfffacd,\n\tlightblue: 0xadd8e6,\n\tlightcoral: 0xf08080,\n\tlightcyan: 0xe0ffff,\n\tlightgoldenrodyellow: 0xfafad2,\n\tlightgray: 0xd3d3d3,\n\tlightgreen: 0x90ee90,\n\tlightgrey: 0xd3d3d3,\n\tlightpink: 0xffb6c1,\n\tlightsalmon: 0xffa07a,\n\tlightseagreen: 0x20b2aa,\n\tlightskyblue: 0x87cefa,\n\tlightslategray: 0x778899,\n\tlightslategrey: 0x778899,\n\tlightsteelblue: 0xb0c4de,\n\tlightyellow: 0xffffe0,\n\tlime: 0x00ff00,\n\tlimegreen: 0x32cd32,\n\tlinen: 0xfaf0e6,\n\tmagenta: 0xff00ff,\n\tmaroon: 0x800000,\n\tmediumaquamarine: 0x66cdaa,\n\tmediumblue: 0x0000cd,\n\tmediumorchid: 0xba55d3,\n\tmediumpurple: 0x9370db,\n\tmediumseagreen: 0x3cb371,\n\tmediumslateblue: 0x7b68ee,\n\tmediumspringgreen: 0x00fa9a,\n\tmediumturquoise: 0x48d1cc,\n\tmediumvioletred: 0xc71585,\n\tmidnightblue: 0x191970,\n\tmintcream: 0xf5fffa,\n\tmistyrose: 0xffe4e1,\n\tmoccasin: 0xffe4b5,\n\tnavajowhite: 0xffdead,\n\tnavy: 0x000080,\n\toldlace: 0xfdf5e6,\n\tolive: 0x808000,\n\tolivedrab: 0x6b8e23,\n\torange: 0xffa500,\n\torangered: 0xff4500,\n\torchid: 0xda70d6,\n\tpalegoldenrod: 0xeee8aa,\n\tpalegreen: 0x98fb98,\n\tpaleturquoise: 0xafeeee,\n\tpalevioletred: 0xdb7093,\n\tpapayawhip: 0xffefd5,\n\tpeachpuff: 0xffdab9,\n\tperu: 0xcd853f,\n\tpink: 0xffc0cb,\n\tplum: 0xdda0dd,\n\tpowderblue: 0xb0e0e6,\n\tpurple: 0x800080,\n\n\t// Added in CSS Colors Level 4:\n\t// https://drafts.csswg.org/css-color/#changes-from-3\n\trebeccapurple: 0x663399,\n\n\tred: 0xff0000,\n\trosybrown: 0xbc8f8f,\n\troyalblue: 0x4169e1,\n\tsaddlebrown: 0x8b4513,\n\tsalmon: 0xfa8072,\n\tsandybrown: 0xf4a460,\n\tseagreen: 0x2e8b57,\n\tseashell: 0xfff5ee,\n\tsienna: 0xa0522d,\n\tsilver: 0xc0c0c0,\n\tskyblue: 0x87ceeb,\n\tslateblue: 0x6a5acd,\n\tslategray: 0x708090,\n\tslategrey: 0x708090,\n\tsnow: 0xfffafa,\n\tspringgreen: 0x00ff7f,\n\tsteelblue: 0x4682b4,\n\ttan: 0xd2b48c,\n\tteal: 0x008080,\n\tthistle: 0xd8bfd8,\n\ttomato: 0xff6347,\n\tturquoise: 0x40e0d0,\n\tviolet: 0xee82ee,\n\twheat: 0xf5deb3,\n\twhite: 0xffffff,\n\twhitesmoke: 0xf5f5f5,\n\tyellow: 0xffff00,\n\tyellowgreen: 0x9acd32\n};\n\nexport default named;\n","import parseNumber from './parseNumber.js';\n\nconst hex = /^#?([0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{4}|[0-9a-f]{3})$/i;\n\nconst parseHex = color => {\n\tlet match;\n\t// eslint-disable-next-line no-cond-assign\n\treturn (match = color.match(hex))\n\t\t? parseNumber(parseInt(match[1], 16), match[1].length)\n\t\t: undefined;\n};\n\nexport default parseHex;\n","/*\n\tBasic building blocks for color regexes\n\t---------------------------------------\n\n\tThese regexes are expressed as strings\n\tto be interpolated in the color regexes.\n */\n\n// <number>\nexport const num = '([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)';\n\n// <number> or 'none'\nexport const num_none = `(?:${num}|none)`;\n\n// <percentage>\nexport const per = `${num}%`;\n\n// <percent> or 'none'\nexport const per_none = `(?:${num}%|none)`;\n\n// <number-percentage> (<alpha-value>)\nexport const num_per = `(?:${num}%|${num})`;\n\n// <number-percentage> (<alpha-value>) or 'none'\nexport const num_per_none = `(?:${num}%|${num}|none)`;\n\n// <hue>\nexport const hue = `(?:${num}(deg|grad|rad|turn)|${num})`;\n\n// <hue> or 'none'\nexport const hue_none = `(?:${num}(deg|grad|rad|turn)|${num}|none)`;\n\nexport const c = `\\\\s*,\\\\s*`; // comma\nexport const so = '\\\\s*'; // space, optional\nexport const s = `\\\\s+`; // space\n\nexport const rx_num_per_none = new RegExp('^' + num_per_none + '$');\n","import { num, per, num_per, c } from '../util/regex.js';\n\n/*\n\trgb() regular expressions for legacy format\n\tReference: https://drafts.csswg.org/css-color/#rgb-functions\n */\nconst rgb_num_old = new RegExp(\n\t`^rgba?\\\\(\\\\s*${num}${c}${num}${c}${num}\\\\s*(?:,\\\\s*${num_per}\\\\s*)?\\\\)$`\n);\n\nconst rgb_per_old = new RegExp(\n\t`^rgba?\\\\(\\\\s*${per}${c}${per}${c}${per}\\\\s*(?:,\\\\s*${num_per}\\\\s*)?\\\\)$`\n);\n\nconst parseRgbLegacy = color => {\n\tlet res = { mode: 'rgb' };\n\tlet match;\n\tif ((match = color.match(rgb_num_old))) {\n\t\tif (match[1] !== undefined) {\n\t\t\tres.r = match[1] / 255;\n\t\t}\n\t\tif (match[2] !== undefined) {\n\t\t\tres.g = match[2] / 255;\n\t\t}\n\t\tif (match[3] !== undefined) {\n\t\t\tres.b = match[3] / 255;\n\t\t}\n\t} else if ((match = color.match(rgb_per_old))) {\n\t\tif (match[1] !== undefined) {\n\t\t\tres.r = match[1] / 100;\n\t\t}\n\t\tif (match[2] !== undefined) {\n\t\t\tres.g = match[2] / 100;\n\t\t}\n\t\tif (match[3] !== undefined) {\n\t\t\tres.b = match[3] / 100;\n\t\t}\n\t} else {\n\t\treturn undefined;\n\t}\n\n\tif (match[4] !== undefined) {\n\t\tres.alpha = Math.max(0, Math.min(1, match[4] / 100));\n\t} else if (match[5] !== undefined) {\n\t\tres.alpha = Math.max(0, Math.min(1, +match[5]));\n\t}\n\n\treturn res;\n};\n\nexport default parseRgbLegacy;\n","import { converters } from './modes.js';\nimport prepare from './_prepare.js';\n\nconst converter =\n\t(target_mode = 'rgb') =>\n\tcolor =>\n\t\t(color = prepare(color, target_mode)) !== undefined\n\t\t\t? // if the color's mode corresponds to our target mode\n\t\t\t  color.mode === target_mode\n\t\t\t\t? // then just return the color\n\t\t\t\t  color\n\t\t\t\t: // otherwise check to see if we have a dedicated\n\t\t\t\t// converter for the target mode\n\t\t\t\tconverters[color.mode][target_mode]\n\t\t\t\t? // and return its result...\n\t\t\t\t  converters[color.mode][target_mode](color)\n\t\t\t\t: // ...otherwise pass through RGB as an intermediary step.\n\t\t\t\t// if the target mode is RGB...\n\t\t\t\ttarget_mode === 'rgb'\n\t\t\t\t? // just return the RGB\n\t\t\t\t  converters[color.mode].rgb(color)\n\t\t\t\t: // otherwise convert color.mode -> RGB -> target_mode\n\t\t\t\t  converters.rgb[target_mode](converters[color.mode].rgb(color))\n\t\t\t: undefined;\n\nexport default converter;\n","import parse from './parse.js';\n\nconst prepare = (color, mode) =>\n\tcolor === undefined\n\t\t? undefined\n\t\t: typeof color !== 'object'\n\t\t? parse(color)\n\t\t: color.mode !== undefined\n\t\t? color\n\t\t: mode\n\t\t? { ...color, mode }\n\t\t: undefined;\n\nexport default prepare;\n","import converter from './converter.js';\n\nconst converters = {};\nconst modes = {};\n\nconst parsers = [];\nconst colorProfiles = {};\n\nconst identity = v => v;\n\nconst useMode = definition => {\n\tconverters[definition.mode] = {\n\t\t...converters[definition.mode],\n\t\t...definition.toMode\n\t};\n\n\tObject.keys(definition.fromMode || {}).forEach(k => {\n\t\tif (!converters[k]) {\n\t\t\tconverters[k] = {};\n\t\t}\n\t\tconverters[k][definition.mode] = definition.fromMode[k];\n\t});\n\n\t// Color space channel ranges\n\tif (!definition.ranges) {\n\t\tdefinition.ranges = {};\n\t}\n\n\tif (!definition.difference) {\n\t\tdefinition.difference = {};\n\t}\n\n\tdefinition.channels.forEach(channel => {\n\t\t// undefined channel ranges default to the [0, 1] interval\n\t\tif (definition.ranges[channel] === undefined) {\n\t\t\tdefinition.ranges[channel] = [0, 1];\n\t\t}\n\n\t\tif (!definition.interpolate[channel]) {\n\t\t\tthrow new Error(`Missing interpolator for: ${channel}`);\n\t\t}\n\n\t\tif (typeof definition.interpolate[channel] === 'function') {\n\t\t\tdefinition.interpolate[channel] = {\n\t\t\t\tuse: definition.interpolate[channel]\n\t\t\t};\n\t\t}\n\n\t\tif (!definition.interpolate[channel].fixup) {\n\t\t\tdefinition.interpolate[channel].fixup = identity;\n\t\t}\n\t});\n\n\tmodes[definition.mode] = definition;\n\t(definition.parse || []).forEach(parser => {\n\t\tuseParser(parser, definition.mode);\n\t});\n\n\treturn converter(definition.mode);\n};\n\nconst getMode = mode => modes[mode];\n\nconst useParser = (parser, mode) => {\n\tif (typeof parser === 'string') {\n\t\tif (!mode) {\n\t\t\tthrow new Error(`'mode' required when 'parser' is a string`);\n\t\t}\n\t\tcolorProfiles[parser] = mode;\n\t} else if (typeof parser === 'function') {\n\t\tif (parsers.indexOf(parser) < 0) {\n\t\t\tparsers.push(parser);\n\t\t}\n\t}\n};\n\nconst removeParser = parser => {\n\tif (typeof parser === 'string') {\n\t\tdelete colorProfiles[parser];\n\t} else if (typeof parser === 'function') {\n\t\tconst idx = parsers.indexOf(parser);\n\t\tif (idx > 0) {\n\t\t\tparsers.splice(idx, 1);\n\t\t}\n\t}\n};\n\nexport {\n\tuseMode,\n\tgetMode,\n\tuseParser,\n\tremoveParser,\n\tconverters,\n\tparsers,\n\tcolorProfiles\n};\n","import { parsers, colorProfiles, getMode } from './modes.js';\n\n/* eslint-disable-next-line no-control-regex */\nconst IdentStartCodePoint = /[^\\x00-\\x7F]|[a-zA-Z_]/;\n\n/* eslint-disable-next-line no-control-regex */\nconst IdentCodePoint = /[^\\x00-\\x7F]|[-\\w]/;\n\nexport const Tok = {\n\tFunction: 'function',\n\tIdent: 'ident',\n\tNumber: 'number',\n\tPercentage: 'percentage',\n\tParenClose: ')',\n\tNone: 'none',\n\tHue: 'hue',\n\tAlpha: 'alpha'\n};\n\nlet _i = 0;\n\n/*\n\t4.3.10. Check if three code points would start a number\n\thttps://drafts.csswg.org/css-syntax/#starts-with-a-number\n */\nfunction is_num(chars) {\n\tlet ch = chars[_i];\n\tlet ch1 = chars[_i + 1];\n\tif (ch === '-' || ch === '+') {\n\t\treturn /\\d/.test(ch1) || (ch1 === '.' && /\\d/.test(chars[_i + 2]));\n\t}\n\tif (ch === '.') {\n\t\treturn /\\d/.test(ch1);\n\t}\n\treturn /\\d/.test(ch);\n}\n\n/*\n\tCheck if the stream starts with an identifier.\n */\n\nfunction is_ident(chars) {\n\tif (_i >= chars.length) {\n\t\treturn false;\n\t}\n\tlet ch = chars[_i];\n\tif (IdentStartCodePoint.test(ch)) {\n\t\treturn true;\n\t}\n\tif (ch === '-') {\n\t\tif (chars.length - _i < 2) {\n\t\t\treturn false;\n\t\t}\n\t\tlet ch1 = chars[_i + 1];\n\t\tif (ch1 === '-' || IdentStartCodePoint.test(ch1)) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\treturn false;\n}\n\n/*\n\t4.3.3. Consume a numeric token\n\thttps://drafts.csswg.org/css-syntax/#consume-numeric-token\n */\n\nconst huenits = {\n\tdeg: 1,\n\trad: 180 / Math.PI,\n\tgrad: 9 / 10,\n\tturn: 360\n};\n\nfunction num(chars) {\n\tlet value = '';\n\tif (chars[_i] === '-' || chars[_i] === '+') {\n\t\tvalue += chars[_i++];\n\t}\n\tvalue += digits(chars);\n\tif (chars[_i] === '.' && /\\d/.test(chars[_i + 1])) {\n\t\tvalue += chars[_i++] + digits(chars);\n\t}\n\tif (chars[_i] === 'e' || chars[_i] === 'E') {\n\t\tif (\n\t\t\t(chars[_i + 1] === '-' || chars[_i + 1] === '+') &&\n\t\t\t/\\d/.test(chars[_i + 2])\n\t\t) {\n\t\t\tvalue += chars[_i++] + chars[_i++] + digits(chars);\n\t\t} else if (/\\d/.test(chars[_i + 1])) {\n\t\t\tvalue += chars[_i++] + digits(chars);\n\t\t}\n\t}\n\tif (is_ident(chars)) {\n\t\tlet id = ident(chars);\n\t\tif (id === 'deg' || id === 'rad' || id === 'turn' || id === 'grad') {\n\t\t\treturn { type: Tok.Hue, value: value * huenits[id] };\n\t\t}\n\t\treturn undefined;\n\t}\n\tif (chars[_i] === '%') {\n\t\t_i++;\n\t\treturn { type: Tok.Percentage, value: +value };\n\t}\n\treturn { type: Tok.Number, value: +value };\n}\n\n/*\n\tConsume digits.\n */\nfunction digits(chars) {\n\tlet v = '';\n\twhile (/\\d/.test(chars[_i])) {\n\t\tv += chars[_i++];\n\t}\n\treturn v;\n}\n\n/*\n\tConsume an identifier.\n */\nfunction ident(chars) {\n\tlet v = '';\n\twhile (_i < chars.length && IdentCodePoint.test(chars[_i])) {\n\t\tv += chars[_i++];\n\t}\n\treturn v;\n}\n\n/*\n\tConsume an ident-like token.\n */\nfunction identlike(chars) {\n\tlet v = ident(chars);\n\tif (chars[_i] === '(') {\n\t\t_i++;\n\t\treturn { type: Tok.Function, value: v };\n\t}\n\tif (v === 'none') {\n\t\treturn { type: Tok.None, value: undefined };\n\t}\n\treturn { type: Tok.Ident, value: v };\n}\n\nexport function tokenize(str = '') {\n\tlet chars = str.trim();\n\tlet tokens = [];\n\tlet ch;\n\n\t/* reset counter */\n\t_i = 0;\n\n\twhile (_i < chars.length) {\n\t\tch = chars[_i++];\n\n\t\t/*\n\t\t\tConsume whitespace without emitting it\n\t\t */\n\t\tif (ch === '\\n' || ch === '\\t' || ch === ' ') {\n\t\t\twhile (\n\t\t\t\t_i < chars.length &&\n\t\t\t\t(chars[_i] === '\\n' || chars[_i] === '\\t' || chars[_i] === ' ')\n\t\t\t) {\n\t\t\t\t_i++;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (ch === ',') {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (ch === ')') {\n\t\t\ttokens.push({ type: Tok.ParenClose });\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (ch === '+') {\n\t\t\t_i--;\n\t\t\tif (is_num(chars)) {\n\t\t\t\ttokens.push(num(chars));\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (ch === '-') {\n\t\t\t_i--;\n\t\t\tif (is_num(chars)) {\n\t\t\t\ttokens.push(num(chars));\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (is_ident(chars)) {\n\t\t\t\ttokens.push({ type: Tok.Ident, value: ident(chars) });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (ch === '.') {\n\t\t\t_i--;\n\t\t\tif (is_num(chars)) {\n\t\t\t\ttokens.push(num(chars));\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (ch === '/') {\n\t\t\twhile (\n\t\t\t\t_i < chars.length &&\n\t\t\t\t(chars[_i] === '\\n' || chars[_i] === '\\t' || chars[_i] === ' ')\n\t\t\t) {\n\t\t\t\t_i++;\n\t\t\t}\n\t\t\tlet alpha;\n\t\t\tif (is_num(chars)) {\n\t\t\t\talpha = num(chars);\n\t\t\t\tif (alpha.type !== Tok.Hue) {\n\t\t\t\t\ttokens.push({ type: Tok.Alpha, value: alpha });\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (is_ident(chars)) {\n\t\t\t\tif (ident(chars) === 'none') {\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\ttype: Tok.Alpha,\n\t\t\t\t\t\tvalue: { type: Tok.None, value: undefined }\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (/\\d/.test(ch)) {\n\t\t\t_i--;\n\t\t\ttokens.push(num(chars));\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (IdentStartCodePoint.test(ch)) {\n\t\t\t_i--;\n\t\t\ttokens.push(identlike(chars));\n\t\t\tcontinue;\n\t\t}\n\n\t\t/*\n\t\t\tTreat everything not already handled as an error.\n\t\t */\n\t\treturn undefined;\n\t}\n\n\treturn tokens;\n}\n\nexport function parseColorSyntax(tokens) {\n\ttokens._i = 0;\n\tlet token = tokens[tokens._i++];\n\tif (!token || token.type !== Tok.Function || token.value !== 'color') {\n\t\treturn undefined;\n\t}\n\ttoken = tokens[tokens._i++];\n\tif (token.type !== Tok.Ident) {\n\t\treturn undefined;\n\t}\n\tconst mode = colorProfiles[token.value];\n\tif (!mode) {\n\t\treturn undefined;\n\t}\n\tconst res = { mode };\n\tconst coords = consumeCoords(tokens, false);\n\tif (!coords) {\n\t\treturn undefined;\n\t}\n\tconst channels = getMode(mode).channels;\n\tfor (let ii = 0, c, ch; ii < channels.length; ii++) {\n\t\tc = coords[ii];\n\t\tch = channels[ii];\n\t\tif (c.type !== Tok.None) {\n\t\t\tres[ch] = c.type === Tok.Number ? c.value : c.value / 100;\n\t\t\tif (ch === 'alpha') {\n\t\t\t\tres[ch] = Math.max(0, Math.min(1, res[ch]));\n\t\t\t}\n\t\t}\n\t}\n\treturn res;\n}\n\nfunction consumeCoords(tokens, includeHue) {\n\tconst coords = [];\n\tlet token;\n\twhile (tokens._i < tokens.length) {\n\t\ttoken = tokens[tokens._i++];\n\t\tif (\n\t\t\ttoken.type === Tok.None ||\n\t\t\ttoken.type === Tok.Number ||\n\t\t\ttoken.type === Tok.Alpha ||\n\t\t\ttoken.type === Tok.Percentage ||\n\t\t\t(includeHue && token.type === Tok.Hue)\n\t\t) {\n\t\t\tcoords.push(token);\n\t\t\tcontinue;\n\t\t}\n\t\tif (token.type === Tok.ParenClose) {\n\t\t\tif (tokens._i < tokens.length) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tif (coords.length < 3 || coords.length > 4) {\n\t\treturn undefined;\n\t}\n\n\tif (coords.length === 4) {\n\t\tif (coords[3].type !== Tok.Alpha) {\n\t\t\treturn undefined;\n\t\t}\n\t\tcoords[3] = coords[3].value;\n\t}\n\tif (coords.length === 3) {\n\t\tcoords.push({ type: Tok.None, value: undefined });\n\t}\n\n\treturn coords.every(c => c.type !== Tok.Alpha) ? coords : undefined;\n}\n\nexport function parseModernSyntax(tokens, includeHue) {\n\ttokens._i = 0;\n\tlet token = tokens[tokens._i++];\n\tif (!token || token.type !== Tok.Function) {\n\t\treturn undefined;\n\t}\n\tlet coords = consumeCoords(tokens, includeHue);\n\tif (!coords) {\n\t\treturn undefined;\n\t}\n\tcoords.unshift(token.value);\n\treturn coords;\n}\n\nconst parse = color => {\n\tif (typeof color !== 'string') {\n\t\treturn undefined;\n\t}\n\tconst tokens = tokenize(color);\n\tconst parsed = tokens ? parseModernSyntax(tokens, true) : undefined;\n\tlet result = undefined;\n\tlet i = 0;\n\tlet len = parsers.length;\n\twhile (i < len) {\n\t\tif ((result = parsers[i++](color, parsed)) !== undefined) {\n\t\t\treturn result;\n\t\t}\n\t}\n\treturn tokens ? parseColorSyntax(tokens) : undefined;\n};\n\nexport default parse;\n","import { lerp } from './lerp.js';\nimport { interpolatorPiecewise } from './piecewise.js';\n\nexport const interpolatorLinear = interpolatorPiecewise(lerp);\n","const get_classes = arr => {\n\tlet classes = [];\n\tfor (let i = 0; i < arr.length - 1; i++) {\n\t\tlet a = arr[i];\n\t\tlet b = arr[i + 1];\n\t\tif (a === undefined && b === undefined) {\n\t\t\tclasses.push(undefined);\n\t\t} else if (a !== undefined && b !== undefined) {\n\t\t\tclasses.push([a, b]);\n\t\t} else {\n\t\t\tclasses.push(a !== undefined ? [a, a] : [b, b]);\n\t\t}\n\t}\n\treturn classes;\n};\n\nconst interpolatorPiecewise = interpolator => arr => {\n\tlet classes = get_classes(arr);\n\treturn t => {\n\t\tlet cls = t * classes.length;\n\t\tlet idx = t >= 1 ? classes.length - 1 : Math.max(Math.floor(cls), 0);\n\t\tlet pair = classes[idx];\n\t\treturn pair === undefined\n\t\t\t? undefined\n\t\t\t: interpolator(pair[0], pair[1], cls - idx);\n\t};\n};\n\nexport { interpolatorPiecewise };\n","const lerp = (a, b, t) => a + t * (b - a);\nconst unlerp = (a, b, v) => (v - a) / (b - a);\n\nconst blerp = (a00, a01, a10, a11, tx, ty) => {\n\treturn lerp(lerp(a00, a01, tx), lerp(a10, a11, tx), ty);\n};\n\nconst trilerp = (\n\ta000,\n\ta010,\n\ta100,\n\ta110,\n\ta001,\n\ta011,\n\ta101,\n\ta111,\n\ttx,\n\tty,\n\ttz\n) => {\n\treturn lerp(\n\t\tblerp(a000, a010, a100, a110, tx, ty),\n\t\tblerp(a001, a011, a101, a111, tx, ty),\n\t\ttz\n\t);\n};\n\nexport { lerp, blerp, trilerp, unlerp };\n","const fixupAlpha = arr => {\n\tlet some_defined = false;\n\tlet res = arr.map(v => {\n\t\tif (v !== undefined) {\n\t\t\tsome_defined = true;\n\t\t\treturn v;\n\t\t}\n\t\treturn 1;\n\t});\n\treturn some_defined ? res : arr;\n};\n\nexport { fixupAlpha };\n","import parseNamed from './parseNamed.js';\nimport parseHex from './parseHex.js';\nimport parseRgbLegacy from './parseRgbLegacy.js';\nimport parseRgb from './parseRgb.js';\nimport parseTransparent from './parseTransparent.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\n/*\n\tsRGB color space\n */\n\nconst definition = {\n\tmode: 'rgb',\n\tchannels: ['r', 'g', 'b', 'alpha'],\n\tparse: [\n\t\tparseRgb,\n\t\tparseHex,\n\t\tparseRgbLegacy,\n\t\tparseNamed,\n\t\tparseTransparent,\n\t\t'srgb'\n\t],\n\tserialize: 'srgb',\n\tinterpolate: {\n\t\tr: interpolatorLinear,\n\t\tg: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\tgamut: true,\n\twhite: { r: 1, g: 1, b: 1 },\n\tblack: { r: 0, g: 0, b: 0 }\n};\n\nexport default definition;\n","import { Tok } from '../parse.js';\n\nfunction parseRgb(color, parsed) {\n\tif (!parsed || (parsed[0] !== 'rgb' && parsed[0] !== 'rgba')) {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'rgb' };\n\tconst [, r, g, b, alpha] = parsed;\n\tif (r.type === Tok.Hue || g.type === Tok.Hue || b.type === Tok.Hue) {\n\t\treturn undefined;\n\t}\n\tif (r.type !== Tok.None) {\n\t\tres.r = r.type === Tok.Number ? r.value / 255 : r.value / 100;\n\t}\n\tif (g.type !== Tok.None) {\n\t\tres.g = g.type === Tok.Number ? g.value / 255 : g.value / 100;\n\t}\n\tif (b.type !== Tok.None) {\n\t\tres.b = b.type === Tok.Number ? b.value / 255 : b.value / 100;\n\t}\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseRgb;\n","import parseNumber from './parseNumber.js';\nimport named from '../colors/named.js';\n\n// Also supports the `transparent` color as defined in:\n// https://drafts.csswg.org/css-color/#transparent-black\nconst parseNamed = color => {\n\treturn parseNumber(named[color.toLowerCase()], 6);\n};\n\nexport default parseNamed;\n","const parseTransparent = c =>\n\tc === 'transparent'\n\t\t? { mode: 'rgb', r: 0, g: 0, b: 0, alpha: 0 }\n\t\t: undefined;\n\nexport default parseTransparent;\n","/*\n\tConvert A98 RGB values to CIE XYZ D65\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\t* https://www.adobe.com/digitalimag/pdfs/AdobeRGB1998.pdf\n*/\n\nconst linearize = (v = 0) => Math.pow(Math.abs(v), 563 / 256) * Math.sign(v);\n\nconst convertA98ToXyz65 = a98 => {\n\tlet r = linearize(a98.r);\n\tlet g = linearize(a98.g);\n\tlet b = linearize(a98.b);\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx:\n\t\t\t0.5766690429101305 * r +\n\t\t\t0.1855582379065463 * g +\n\t\t\t0.1882286462349947 * b,\n\t\ty:\n\t\t\t0.297344975250536 * r +\n\t\t\t0.6273635662554661 * g +\n\t\t\t0.0752914584939979 * b,\n\t\tz:\n\t\t\t0.0270313613864123 * r +\n\t\t\t0.0706888525358272 * g +\n\t\t\t0.9913375368376386 * b\n\t};\n\tif (a98.alpha !== undefined) {\n\t\tres.alpha = a98.alpha;\n\t}\n\treturn res;\n};\n\nexport default convertA98ToXyz65;\n","/*\n\tConvert CIE XYZ D65 values to A98 RGB\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nconst gamma = v => Math.pow(Math.abs(v), 256 / 563) * Math.sign(v);\n\nconst convertXyz65ToA98 = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = {\n\t\tmode: 'a98',\n\t\tr: gamma(\n\t\t\tx * 2.0415879038107465 -\n\t\t\t\ty * 0.5650069742788597 -\n\t\t\t\t0.3447313507783297 * z\n\t\t),\n\t\tg: gamma(\n\t\t\tx * -0.9692436362808798 +\n\t\t\t\ty * 1.8759675015077206 +\n\t\t\t\t0.0415550574071756 * z\n\t\t),\n\t\tb: gamma(\n\t\t\tx * 0.0134442806320312 -\n\t\t\t\ty * 0.1183623922310184 +\n\t\t\t\t1.0151749943912058 * z\n\t\t)\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz65ToA98;\n","const fn = (c = 0) => {\n\tconst abs = Math.abs(c);\n\tif (abs <= 0.04045) {\n\t\treturn c / 12.92;\n\t}\n\treturn (Math.sign(c) || 1) * Math.pow((abs + 0.055) / 1.055, 2.4);\n};\n\nconst convertRgbToLrgb = ({ r, g, b, alpha }) => {\n\tlet res = {\n\t\tmode: 'lrgb',\n\t\tr: fn(r),\n\t\tg: fn(g),\n\t\tb: fn(b)\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertRgbToLrgb;\n","/*\n\tConvert sRGB values to CIE XYZ D65\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\t* https://observablehq.com/@danburzo/color-matrix-calculator\n*/\n\nimport convertRgbToLrgb from '../lrgb/convertRgbToLrgb.js';\n\nconst convertRgbToXyz65 = rgb => {\n\tlet { r, g, b, alpha } = convertRgbToLrgb(rgb);\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx:\n\t\t\t0.4123907992659593 * r +\n\t\t\t0.357584339383878 * g +\n\t\t\t0.1804807884018343 * b,\n\t\ty:\n\t\t\t0.2126390058715102 * r +\n\t\t\t0.715168678767756 * g +\n\t\t\t0.0721923153607337 * b,\n\t\tz:\n\t\t\t0.0193308187155918 * r +\n\t\t\t0.119194779794626 * g +\n\t\t\t0.9505321522496607 * b\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToXyz65;\n","const fn = (c = 0) => {\n\tconst abs = Math.abs(c);\n\tif (abs > 0.0031308) {\n\t\treturn (Math.sign(c) || 1) * (1.055 * Math.pow(abs, 1 / 2.4) - 0.055);\n\t}\n\treturn c * 12.92;\n};\n\nconst convertLrgbToRgb = ({ r, g, b, alpha }, mode = 'rgb') => {\n\tlet res = {\n\t\tmode,\n\t\tr: fn(r),\n\t\tg: fn(g),\n\t\tb: fn(b)\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertLrgbToRgb;\n","/*\n\tCIE XYZ D65 values to sRGB.\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\t* https://observablehq.com/@danburzo/color-matrix-calculator\n*/\n\nimport convertLrgbToRgb from '../lrgb/convertLrgbToRgb.js';\n\nconst convertXyz65ToRgb = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = convertLrgbToRgb({\n\t\tr:\n\t\t\tx * 3.2409699419045226 -\n\t\t\ty * 1.5373831775700939 -\n\t\t\t0.4986107602930034 * z,\n\t\tg:\n\t\t\tx * -0.9692436362808796 +\n\t\t\ty * 1.8759675015077204 +\n\t\t\t0.0415550574071756 * z,\n\t\tb:\n\t\t\tx * 0.0556300796969936 -\n\t\t\ty * 0.2039769588889765 +\n\t\t\t1.0569715142428784 * z\n\t});\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz65ToRgb;\n","import rgb from '../rgb/definition.js';\n\nimport convertA98ToXyz65 from './convertA98ToXyz65.js';\nimport convertXyz65ToA98 from './convertXyz65ToA98.js';\nimport convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\nimport convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\n\nconst definition = {\n\t...rgb,\n\tmode: 'a98',\n\tparse: ['a98-rgb'],\n\tserialize: 'a98-rgb',\n\n\tfromMode: {\n\t\trgb: color => convertXyz65ToA98(convertRgbToXyz65(color)),\n\t\txyz65: convertXyz65ToA98\n\t},\n\n\ttoMode: {\n\t\trgb: color => convertXyz65ToRgb(convertA98ToXyz65(color)),\n\t\txyz65: convertA98ToXyz65\n\t}\n};\n\nexport default definition;\n","const normalizeHue = hue => ((hue = hue % 360) < 0 ? hue + 360 : hue);\n\nexport default normalizeHue;\n","import normalizeHue from '../util/normalizeHue.js';\n\nconst hue = (hues, fn) => {\n\treturn hues\n\t\t.map((hue, idx, arr) => {\n\t\t\tif (hue === undefined) {\n\t\t\t\treturn hue;\n\t\t\t}\n\t\t\tlet normalized = normalizeHue(hue);\n\t\t\tif (idx === 0 || hues[idx - 1] === undefined) {\n\t\t\t\treturn normalized;\n\t\t\t}\n\t\t\treturn fn(normalized - normalizeHue(arr[idx - 1]));\n\t\t})\n\t\t.reduce((acc, curr) => {\n\t\t\tif (\n\t\t\t\t!acc.length ||\n\t\t\t\tcurr === undefined ||\n\t\t\t\tacc[acc.length - 1] === undefined\n\t\t\t) {\n\t\t\t\tacc.push(curr);\n\t\t\t\treturn acc;\n\t\t\t}\n\t\t\tacc.push(curr + acc[acc.length - 1]);\n\t\t\treturn acc;\n\t\t}, []);\n};\n\nconst fixupHueShorter = arr =>\n\thue(arr, d => (Math.abs(d) <= 180 ? d : d - 360 * Math.sign(d)));\nconst fixupHueLonger = arr =>\n\thue(arr, d => (Math.abs(d) >= 180 || d === 0 ? d : d - 360 * Math.sign(d)));\nconst fixupHueIncreasing = arr => hue(arr, d => (d >= 0 ? d : d + 360));\nconst fixupHueDecreasing = arr => hue(arr, d => (d <= 0 ? d : d - 360));\n\nexport {\n\tfixupHueShorter,\n\tfixupHueLonger,\n\tfixupHueIncreasing,\n\tfixupHueDecreasing\n};\n","export const M = [-0.14861, 1.78277, -0.29227, -0.90649, 1.97294, 0];\n\nexport const degToRad = Math.PI / 180;\nexport const radToDeg = 180 / Math.PI;\n","/*\n\tConvert a RGB color to the Cubehelix HSL color space.\n\n\tThis computation is not present in Green's paper:\n\thttps://arxiv.org/pdf/1108.5083.pdf\n\n\t...but can be derived from the inverse, HSL to RGB conversion.\n\n\tIt matches the math in Mike Bostock's D3 implementation:\n\n\thttps://github.com/d3/d3-color/blob/master/src/cubehelix.js\n */\n\nimport { radToDeg, M } from './constants.js';\n\nlet DE = M[3] * M[4];\nlet BE = M[1] * M[4];\nlet BCAD = M[1] * M[2] - M[0] * M[3];\n\nconst convertRgbToCubehelix = ({ r, g, b, alpha }) => {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\tlet l = (BCAD * b + r * DE - g * BE) / (BCAD + DE - BE);\n\tlet x = b - l;\n\tlet y = (M[4] * (g - l) - M[2] * x) / M[3];\n\n\tlet res = {\n\t\tmode: 'cubehelix',\n\t\tl: l,\n\t\ts:\n\t\t\tl === 0 || l === 1\n\t\t\t\t? undefined\n\t\t\t\t: Math.sqrt(x * x + y * y) / (M[4] * l * (1 - l))\n\t};\n\n\tif (res.s) res.h = Math.atan2(y, x) * radToDeg - 120;\n\tif (alpha !== undefined) res.alpha = alpha;\n\n\treturn res;\n};\n\nexport default convertRgbToCubehelix;\n","import { getMode } from './modes.js';\nimport converter from './converter.js';\nimport normalizeHue from './util/normalizeHue.js';\n\nconst differenceHueSaturation = (std, smp) => {\n\tif (std.h === undefined || smp.h === undefined || !std.s || !smp.s) {\n\t\treturn 0;\n\t}\n\tlet std_h = normalizeHue(std.h);\n\tlet smp_h = normalizeHue(smp.h);\n\tlet dH = Math.sin((((smp_h - std_h + 360) / 2) * Math.PI) / 180);\n\treturn 2 * Math.sqrt(std.s * smp.s) * dH;\n};\n\nconst differenceHueNaive = (std, smp) => {\n\tif (std.h === undefined || smp.h === undefined) {\n\t\treturn 0;\n\t}\n\tlet std_h = normalizeHue(std.h);\n\tlet smp_h = normalizeHue(smp.h);\n\tif (Math.abs(smp_h - std_h) > 180) {\n\t\t// todo should this be normalized once again?\n\t\treturn std_h - (smp_h - 360 * Math.sign(smp_h - std_h));\n\t}\n\treturn smp_h - std_h;\n};\n\nconst differenceHueChroma = (std, smp) => {\n\tif (std.h === undefined || smp.h === undefined || !std.c || !smp.c) {\n\t\treturn 0;\n\t}\n\tlet std_h = normalizeHue(std.h);\n\tlet smp_h = normalizeHue(smp.h);\n\tlet dH = Math.sin((((smp_h - std_h + 360) / 2) * Math.PI) / 180);\n\treturn 2 * Math.sqrt(std.c * smp.c) * dH;\n};\n\nconst differenceEuclidean = (mode = 'rgb', weights = [1, 1, 1, 0]) => {\n\tlet def = getMode(mode);\n\tlet channels = def.channels;\n\tlet diffs = def.difference;\n\tlet conv = converter(mode);\n\treturn (std, smp) => {\n\t\tlet ConvStd = conv(std);\n\t\tlet ConvSmp = conv(smp);\n\t\treturn Math.sqrt(\n\t\t\tchannels.reduce((sum, k, idx) => {\n\t\t\t\tlet delta = diffs[k]\n\t\t\t\t\t? diffs[k](ConvStd, ConvSmp)\n\t\t\t\t\t: ConvStd[k] - ConvSmp[k];\n\t\t\t\treturn (\n\t\t\t\t\tsum +\n\t\t\t\t\t(weights[idx] || 0) * Math.pow(isNaN(delta) ? 0 : delta, 2)\n\t\t\t\t);\n\t\t\t}, 0)\n\t\t);\n\t};\n};\n\nconst differenceCie76 = () => differenceEuclidean('lab65');\n\nconst differenceCie94 = (kL = 1, K1 = 0.045, K2 = 0.015) => {\n\tlet lab = converter('lab65');\n\n\treturn (std, smp) => {\n\t\tlet LabStd = lab(std);\n\t\tlet LabSmp = lab(smp);\n\n\t\t// Extract Lab values, and compute Chroma\n\t\tlet lStd = LabStd.l;\n\t\tlet aStd = LabStd.a;\n\t\tlet bStd = LabStd.b;\n\t\tlet cStd = Math.sqrt(aStd * aStd + bStd * bStd);\n\n\t\tlet lSmp = LabSmp.l;\n\t\tlet aSmp = LabSmp.a;\n\t\tlet bSmp = LabSmp.b;\n\t\tlet cSmp = Math.sqrt(aSmp * aSmp + bSmp * bSmp);\n\n\t\tlet dL2 = Math.pow(lStd - lSmp, 2);\n\t\tlet dC2 = Math.pow(cStd - cSmp, 2);\n\t\tlet dH2 = Math.pow(aStd - aSmp, 2) + Math.pow(bStd - bSmp, 2) - dC2;\n\n\t\treturn Math.sqrt(\n\t\t\tdL2 / Math.pow(kL, 2) +\n\t\t\t\tdC2 / Math.pow(1 + K1 * cStd, 2) +\n\t\t\t\tdH2 / Math.pow(1 + K2 * cStd, 2)\n\t\t);\n\t};\n};\n\n/*\n\tCIEDE2000 color difference, original Matlab implementation by Gaurav Sharma\n\tBased on \"The CIEDE2000 Color-Difference Formula: Implementation Notes, Supplementary Test Data, and Mathematical Observations\" \n\tby Gaurav Sharma, Wencheng Wu, Edul N. Dalal in Color Research and Application, vol. 30. No. 1, pp. 21-30, February 2005.\n\thttp://www2.ece.rochester.edu/~gsharma/ciede2000/\n */\n\nconst differenceCiede2000 = (Kl = 1, Kc = 1, Kh = 1) => {\n\tlet lab = converter('lab65');\n\treturn (std, smp) => {\n\t\tlet LabStd = lab(std);\n\t\tlet LabSmp = lab(smp);\n\n\t\tlet lStd = LabStd.l;\n\t\tlet aStd = LabStd.a;\n\t\tlet bStd = LabStd.b;\n\t\tlet cStd = Math.sqrt(aStd * aStd + bStd * bStd);\n\n\t\tlet lSmp = LabSmp.l;\n\t\tlet aSmp = LabSmp.a;\n\t\tlet bSmp = LabSmp.b;\n\t\tlet cSmp = Math.sqrt(aSmp * aSmp + bSmp * bSmp);\n\n\t\tlet cAvg = (cStd + cSmp) / 2;\n\n\t\tlet G =\n\t\t\t0.5 *\n\t\t\t(1 -\n\t\t\t\tMath.sqrt(\n\t\t\t\t\tMath.pow(cAvg, 7) / (Math.pow(cAvg, 7) + Math.pow(25, 7))\n\t\t\t\t));\n\n\t\tlet apStd = aStd * (1 + G);\n\t\tlet apSmp = aSmp * (1 + G);\n\n\t\tlet cpStd = Math.sqrt(apStd * apStd + bStd * bStd);\n\t\tlet cpSmp = Math.sqrt(apSmp * apSmp + bSmp * bSmp);\n\n\t\tlet hpStd =\n\t\t\tMath.abs(apStd) + Math.abs(bStd) === 0\n\t\t\t\t? 0\n\t\t\t\t: Math.atan2(bStd, apStd);\n\t\thpStd += (hpStd < 0) * 2 * Math.PI;\n\n\t\tlet hpSmp =\n\t\t\tMath.abs(apSmp) + Math.abs(bSmp) === 0\n\t\t\t\t? 0\n\t\t\t\t: Math.atan2(bSmp, apSmp);\n\t\thpSmp += (hpSmp < 0) * 2 * Math.PI;\n\n\t\tlet dL = lSmp - lStd;\n\t\tlet dC = cpSmp - cpStd;\n\n\t\tlet dhp = cpStd * cpSmp === 0 ? 0 : hpSmp - hpStd;\n\t\tdhp -= (dhp > Math.PI) * 2 * Math.PI;\n\t\tdhp += (dhp < -Math.PI) * 2 * Math.PI;\n\n\t\tlet dH = 2 * Math.sqrt(cpStd * cpSmp) * Math.sin(dhp / 2);\n\n\t\tlet Lp = (lStd + lSmp) / 2;\n\t\tlet Cp = (cpStd + cpSmp) / 2;\n\n\t\tlet hp;\n\t\tif (cpStd * cpSmp === 0) {\n\t\t\thp = hpStd + hpSmp;\n\t\t} else {\n\t\t\thp = (hpStd + hpSmp) / 2;\n\t\t\thp -= (Math.abs(hpStd - hpSmp) > Math.PI) * Math.PI;\n\t\t\thp += (hp < 0) * 2 * Math.PI;\n\t\t}\n\n\t\tlet Lpm50 = Math.pow(Lp - 50, 2);\n\t\tlet T =\n\t\t\t1 -\n\t\t\t0.17 * Math.cos(hp - Math.PI / 6) +\n\t\t\t0.24 * Math.cos(2 * hp) +\n\t\t\t0.32 * Math.cos(3 * hp + Math.PI / 30) -\n\t\t\t0.2 * Math.cos(4 * hp - (63 * Math.PI) / 180);\n\n\t\tlet Sl = 1 + (0.015 * Lpm50) / Math.sqrt(20 + Lpm50);\n\t\tlet Sc = 1 + 0.045 * Cp;\n\t\tlet Sh = 1 + 0.015 * Cp * T;\n\n\t\tlet deltaTheta =\n\t\t\t((30 * Math.PI) / 180) *\n\t\t\tMath.exp(-1 * Math.pow(((180 / Math.PI) * hp - 275) / 25, 2));\n\t\tlet Rc =\n\t\t\t2 *\n\t\t\tMath.sqrt(Math.pow(Cp, 7) / (Math.pow(Cp, 7) + Math.pow(25, 7)));\n\n\t\tlet Rt = -1 * Math.sin(2 * deltaTheta) * Rc;\n\n\t\treturn Math.sqrt(\n\t\t\tMath.pow(dL / (Kl * Sl), 2) +\n\t\t\t\tMath.pow(dC / (Kc * Sc), 2) +\n\t\t\t\tMath.pow(dH / (Kh * Sh), 2) +\n\t\t\t\t(((Rt * dC) / (Kc * Sc)) * dH) / (Kh * Sh)\n\t\t);\n\t};\n};\n\n/*\n\tCMC (l:c) difference formula\n\n\tReferences:\n\t\thttps://en.wikipedia.org/wiki/Color_difference#CMC_l:c_(1984)\n\t\thttp://www.brucelindbloom.com/index.html?Eqn_DeltaE_CMC.html\n */\nconst differenceCmc = (l = 1, c = 1) => {\n\tlet lab = converter('lab65');\n\n\t/*\n\t\tComparte two colors:\n\t\tstd - standard (first) color\n\t\tsmp - sample (second) color\n\t */\n\treturn (std, smp) => {\n\t\t// convert standard color to Lab\n\t\tlet LabStd = lab(std);\n\t\tlet lStd = LabStd.l;\n\t\tlet aStd = LabStd.a;\n\t\tlet bStd = LabStd.b;\n\n\t\t// Obtain hue/chroma\n\t\tlet cStd = Math.sqrt(aStd * aStd + bStd * bStd);\n\t\tlet hStd = Math.atan2(bStd, aStd);\n\t\thStd = hStd + 2 * Math.PI * (hStd < 0);\n\n\t\t// convert sample color to Lab, obtain LCh\n\t\tlet LabSmp = lab(smp);\n\t\tlet lSmp = LabSmp.l;\n\t\tlet aSmp = LabSmp.a;\n\t\tlet bSmp = LabSmp.b;\n\n\t\t// Obtain chroma\n\t\tlet cSmp = Math.sqrt(aSmp * aSmp + bSmp * bSmp);\n\n\t\t// lightness delta squared\n\t\tlet dL2 = Math.pow(lStd - lSmp, 2);\n\n\t\t// chroma delta squared\n\t\tlet dC2 = Math.pow(cStd - cSmp, 2);\n\n\t\t// hue delta squared\n\t\tlet dH2 = Math.pow(aStd - aSmp, 2) + Math.pow(bStd - bSmp, 2) - dC2;\n\n\t\tlet F = Math.sqrt(Math.pow(cStd, 4) / (Math.pow(cStd, 4) + 1900));\n\t\tlet T =\n\t\t\thStd >= (164 / 180) * Math.PI && hStd <= (345 / 180) * Math.PI\n\t\t\t\t? 0.56 + Math.abs(0.2 * Math.cos(hStd + (168 / 180) * Math.PI))\n\t\t\t\t: 0.36 + Math.abs(0.4 * Math.cos(hStd + (35 / 180) * Math.PI));\n\n\t\tlet Sl = lStd < 16 ? 0.511 : (0.040975 * lStd) / (1 + 0.01765 * lStd);\n\t\tlet Sc = (0.0638 * cStd) / (1 + 0.0131 * cStd) + 0.638;\n\t\tlet Sh = Sc * (F * T + 1 - F);\n\n\t\treturn Math.sqrt(\n\t\t\tdL2 / Math.pow(l * Sl, 2) +\n\t\t\t\tdC2 / Math.pow(c * Sc, 2) +\n\t\t\t\tdH2 / Math.pow(Sh, 2)\n\t\t);\n\t};\n};\n\n/*\n\n\tHyAB color difference formula, introduced in:\n\n\t\tAbasi S, Amani Tehran M, Fairchild MD. \n\t\t\"Distance metrics for very large color differences.\"\n\t\tColor Res Appl. 2019; 1–16. \n\t\thttps://doi.org/10.1002/col.22451\n\n\tPDF available at:\n\t\n\t\thttp://markfairchild.org/PDFs/PAP40.pdf\n */\nconst differenceHyab = () => {\n\tlet lab = converter('lab65');\n\treturn (std, smp) => {\n\t\tlet LabStd = lab(std);\n\t\tlet LabSmp = lab(smp);\n\t\tlet dL = LabStd.l - LabSmp.l;\n\t\tlet dA = LabStd.a - LabSmp.a;\n\t\tlet dB = LabStd.b - LabSmp.b;\n\t\treturn Math.abs(dL) + Math.sqrt(dA * dA + dB * dB);\n\t};\n};\n\n/*\n\t\"Measuring perceived color difference using YIQ NTSC\n\ttransmission color space in mobile applications\"\n\t\t\n\t\tby Yuriy Kotsarenko, Fernando Ramos in:\n\t\tProgramación Matemática y Software (2010) \n\n\tAvailable at:\n\t\t\n\t\thttp://www.progmat.uaem.mx:8080/artVol2Num2/Articulo3Vol2Num2.pdf\n */\nconst differenceKotsarenkoRamos = () =>\n\tdifferenceEuclidean('yiq', [0.5053, 0.299, 0.1957]);\n\n/*\n\tΔE_ITP, as defined in Rec. ITU-R BT.2124:\n\n\thttps://www.itu.int/rec/R-REC-BT.2124/en\n*/\nconst differenceItp = () =>\n\tdifferenceEuclidean('itp', [518400, 129600, 518400]);\n\nexport {\n\tdifferenceHueChroma,\n\tdifferenceHueSaturation,\n\tdifferenceHueNaive,\n\tdifferenceEuclidean,\n\tdifferenceCie76,\n\tdifferenceCie94,\n\tdifferenceCiede2000,\n\tdifferenceCmc,\n\tdifferenceHyab,\n\tdifferenceKotsarenkoRamos,\n\tdifferenceItp\n};\n","import converter from './converter.js';\nimport { getMode } from './modes.js';\n\nconst averageAngle = val => {\n\t// See: https://en.wikipedia.org/wiki/Mean_of_circular_quantities\n\tlet sum = val.reduce(\n\t\t(sum, val) => {\n\t\t\tif (val !== undefined) {\n\t\t\t\tlet rad = (val * Math.PI) / 180;\n\t\t\t\tsum.sin += Math.sin(rad);\n\t\t\t\tsum.cos += Math.cos(rad);\n\t\t\t}\n\t\t\treturn sum;\n\t\t},\n\t\t{ sin: 0, cos: 0 }\n\t);\n\tlet angle = (Math.atan2(sum.sin, sum.cos) * 180) / Math.PI;\n\treturn angle < 0 ? 360 + angle : angle;\n};\n\nconst averageNumber = val => {\n\tlet a = val.filter(v => v !== undefined);\n\treturn a.length ? a.reduce((sum, v) => sum + v, 0) / a.length : undefined;\n};\n\nconst isfn = o => typeof o === 'function';\n\nfunction average(colors, mode = 'rgb', overrides) {\n\tlet def = getMode(mode);\n\tlet cc = colors.map(converter(mode));\n\treturn def.channels.reduce(\n\t\t(res, ch) => {\n\t\t\tlet arr = cc.map(c => c[ch]).filter(val => val !== undefined);\n\t\t\tif (arr.length) {\n\t\t\t\tlet fn;\n\t\t\t\tif (isfn(overrides)) {\n\t\t\t\t\tfn = overrides;\n\t\t\t\t} else if (overrides && isfn(overrides[ch])) {\n\t\t\t\t\tfn = overrides[ch];\n\t\t\t\t} else if (def.average && isfn(def.average[ch])) {\n\t\t\t\t\tfn = def.average[ch];\n\t\t\t\t} else {\n\t\t\t\t\tfn = averageNumber;\n\t\t\t\t}\n\t\t\t\tres[ch] = fn(arr, ch);\n\t\t\t}\n\t\t\treturn res;\n\t\t},\n\t\t{ mode }\n\t);\n}\n\nexport { average, averageAngle, averageNumber };\n","/* \n\tDave Green's Cubehelix\n\t----------------------\n\n\tGreen, D. A., 2011, \"A colour scheme for the display of astronomical intensity images\", \n\tBulletin of the Astronomical Society of India, 39, 289. (2011BASI...39..289G at ADS.) \n\n\thttps://www.mrao.cam.ac.uk/%7Edag/CUBEHELIX/\n\thttps://arxiv.org/pdf/1108.5083.pdf\n\n\tAlthough Cubehelix was defined to be a method to obtain a colour scheme,\n\tit actually contains a definition of a colour space, as identified by \n\tMike Bostock and implemented in D3.js.\n\n\tGreen's paper introduces the following terminology:\n\n\t* \ta `lightness` dimension in the interval [0, 1] \n\t\ton which we interpolate to obtain the colour scheme\n\t*\ta `start` colour that is analogous to a Hue in HSL space\n\t*\ta number of `rotations` around the Hue cylinder.\n\t*\ta `hue` parameter which should more appropriately be called `saturation`\n\t\n\tAs such, the original definition of the Cubehelix scheme is actually an\n\tinterpolation between two colors in the Cubehelix space:\n\n\tH: start \t\t\t\tH: start + 360 * rotations\n\tS: hue \t\t\t->\t\tS: hue\n\tL: 0\t\t\t\t\tL: 1\n\n\tWe can therefore extend the interpolation to any two colors in this space,\n\twith a variable Saturation and a Lightness interval other than the fixed 0 -> 1.\n*/\n\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport convertRgbToCubehelix from './convertRgbToCubehelix.js';\nimport convertCubehelixToRgb from './convertCubehelixToRgb.js';\nimport { differenceHueSaturation } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'cubehelix',\n\tchannels: ['h', 's', 'l', 'alpha'],\n\tparse: ['--cubehelix'],\n\tserialize: '--cubehelix',\n\n\tranges: {\n\t\th: [0, 360],\n\t\ts: [0, 4.614],\n\t\tl: [0, 1]\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToCubehelix\n\t},\n\n\ttoMode: {\n\t\trgb: convertCubehelixToRgb\n\t},\n\n\tinterpolate: {\n\t\th: {\n\t\t\tuse: interpolatorLinear,\n\t\t\tfixup: fixupHueShorter\n\t\t},\n\t\ts: interpolatorLinear,\n\t\tl: interpolatorLinear,\n\t\talpha: {\n\t\t\tuse: interpolatorLinear,\n\t\t\tfixup: fixupAlpha\n\t\t}\n\t},\n\n\tdifference: {\n\t\th: differenceHueSaturation\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n","import { degToRad, M } from './constants.js';\n\nconst convertCubehelixToRgb = ({ h, s, l, alpha }) => {\n\tlet res = { mode: 'rgb' };\n\n\th = (h === undefined ? 0 : h + 120) * degToRad;\n\tif (l === undefined) l = 0;\n\n\tlet amp = s === undefined ? 0 : s * l * (1 - l);\n\n\tlet cosh = Math.cos(h);\n\tlet sinh = Math.sin(h);\n\n\tres.r = l + amp * (M[0] * cosh + M[1] * sinh);\n\tres.g = l + amp * (M[2] * cosh + M[3] * sinh);\n\tres.b = l + amp * (M[4] * cosh + M[5] * sinh);\n\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertCubehelixToRgb;\n","import normalizeHue from '../util/normalizeHue.js';\n\n/* \n\tReferences: \n\t\t* https://drafts.csswg.org/css-color/#lab-to-lch\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n*/\nconst convertLabToLch = ({ l, a, b, alpha }, mode = 'lch') => {\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\tlet c = Math.sqrt(a * a + b * b);\n\tlet res = { mode, l, c };\n\tif (c) res.h = normalizeHue((Math.atan2(b, a) * 180) / Math.PI);\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertLabToLch;\n","/* \n\tReferences: \n\t\t* https://drafts.csswg.org/css-color/#lch-to-lab\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n*/\nconst convertLchToLab = ({ l, c, h, alpha }, mode = 'lab') => {\n\tif (h === undefined) h = 0;\n\tlet res = {\n\t\tmode,\n\t\tl,\n\t\ta: c ? c * Math.cos((h / 180) * Math.PI) : 0,\n\t\tb: c ? c * Math.sin((h / 180) * Math.PI) : 0\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertLchToLab;\n","export const k = Math.pow(29, 3) / Math.pow(3, 3);\nexport const e = Math.pow(6, 3) / Math.pow(29, 3);\n","/*\n\tThe XYZ tristimulus values (white point)\n\tof standard illuminants for the CIE 1931 2° \n\tstandard observer.\n\n\tSee: https://en.wikipedia.org/wiki/Standard_illuminant\n */\n\nexport const D50 = {\n\tX: 0.3457 / 0.3585,\n\tY: 1,\n\tZ: (1 - 0.3457 - 0.3585) / 0.3585\n};\n\nexport const D65 = {\n\tX: 0.3127 / 0.329,\n\tY: 1,\n\tZ: (1 - 0.3127 - 0.329) / 0.329\n};\n\nexport const k = Math.pow(29, 3) / Math.pow(3, 3);\nexport const e = Math.pow(6, 3) / Math.pow(29, 3);\n","import { k, e } from '../xyz65/constants.js';\nimport { D65 } from '../constants.js';\n\nlet fn = v => (Math.pow(v, 3) > e ? Math.pow(v, 3) : (116 * v - 16) / k);\n\nconst convertLab65ToXyz65 = ({ l, a, b, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\n\tlet fy = (l + 16) / 116;\n\tlet fx = a / 500 + fy;\n\tlet fz = fy - b / 200;\n\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx: fn(fx) * D65.X,\n\t\ty: fn(fy) * D65.Y,\n\t\tz: fn(fz) * D65.Z\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertLab65ToXyz65;\n","import convertLab65ToXyz65 from './convertLab65ToXyz65.js';\nimport convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\n\nconst convertLab65ToRgb = lab => convertXyz65ToRgb(convertLab65ToXyz65(lab));\n\nexport default convertLab65ToRgb;\n","import { k, e } from '../xyz65/constants.js';\nimport { D65 } from '../constants.js';\n\nconst f = value => (value > e ? Math.cbrt(value) : (k * value + 16) / 116);\n\nconst convertXyz65ToLab65 = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet f0 = f(x / D65.X);\n\tlet f1 = f(y / D65.Y);\n\tlet f2 = f(z / D65.Z);\n\n\tlet res = {\n\t\tmode: 'lab65',\n\t\tl: 116 * f1 - 16,\n\t\ta: 500 * (f0 - f1),\n\t\tb: 200 * (f1 - f2)\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertXyz65ToLab65;\n","import convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\nimport convertXyz65ToLab65 from './convertXyz65ToLab65.js';\n\nconst convertRgbToLab65 = rgb => {\n\tlet res = convertXyz65ToLab65(convertRgbToXyz65(rgb));\n\n\t// Fixes achromatic RGB colors having a _slight_ chroma due to floating-point errors\n\t// and approximated computations in sRGB <-> CIELab.\n\t// See: https://github.com/d3/d3-color/pull/46\n\tif (rgb.r === rgb.b && rgb.b === rgb.g) {\n\t\tres.a = res.b = 0;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToLab65;\n","export const kE = 1;\nexport const kCH = 1;\nexport const θ = (26 / 180) * Math.PI;\nexport const cosθ = Math.cos(θ);\nexport const sinθ = Math.sin(θ);\nexport const factor = 100 / Math.log(139 / 100); // ~ 303.67\n","import { kCH, kE, sinθ, cosθ, θ, factor } from './constants.js';\n\n/*\n\tConvert DIN99o LCh to CIELab D65\n\t--------------------------------\n */\n\nconst convertDlchToLab65 = ({ l, c, h, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (c === undefined) c = 0;\n\tif (h === undefined) h = 0;\n\tlet res = {\n\t\tmode: 'lab65',\n\t\tl: (Math.exp((l * kE) / factor) - 1) / 0.0039\n\t};\n\n\tlet G = (Math.exp(0.0435 * c * kCH * kE) - 1) / 0.075;\n\tlet e = G * Math.cos((h / 180) * Math.PI - θ);\n\tlet f = G * Math.sin((h / 180) * Math.PI - θ);\n\tres.a = e * cosθ - (f / 0.83) * sinθ;\n\tres.b = e * sinθ + (f / 0.83) * cosθ;\n\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertDlchToLab65;\n","import { kCH, kE, sinθ, cosθ, θ, factor } from './constants.js';\nimport normalizeHue from '../util/normalizeHue.js';\n\n/*\n\tConvert CIELab D65 to DIN99o LCh\n\t================================\n */\n\nconst convertLab65ToDlch = ({ l, a, b, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\tlet e = a * cosθ + b * sinθ;\n\tlet f = 0.83 * (b * cosθ - a * sinθ);\n\tlet G = Math.sqrt(e * e + f * f);\n\tlet res = {\n\t\tmode: 'dlch',\n\t\tl: (factor / kE) * Math.log(1 + 0.0039 * l),\n\t\tc: Math.log(1 + 0.075 * G) / (0.0435 * kCH * kE)\n\t};\n\n\tif (res.c) {\n\t\tres.h = normalizeHue(((Math.atan2(f, e) + θ) / Math.PI) * 180);\n\t}\n\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertLab65ToDlch;\n","import convertLabToLch from '../lch/convertLabToLch.js';\nimport convertLchToLab from '../lch/convertLchToLab.js';\nimport convertLab65ToRgb from '../lab65/convertLab65ToRgb.js';\nimport convertRgbToLab65 from '../lab65/convertRgbToLab65.js';\nimport convertDlchToLab65 from '../dlch/convertDlchToLab65.js';\nimport convertLab65ToDlch from '../dlch/convertLab65ToDlch.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst convertDlabToLab65 = c => convertDlchToLab65(convertLabToLch(c, 'dlch'));\nconst convertLab65ToDlab = c => convertLchToLab(convertLab65ToDlch(c), 'dlab');\n\nconst definition = {\n\tmode: 'dlab',\n\n\tparse: ['--din99o-lab'],\n\tserialize: '--din99o-lab',\n\n\ttoMode: {\n\t\tlab65: convertDlabToLab65,\n\t\trgb: c => convertLab65ToRgb(convertDlabToLab65(c))\n\t},\n\n\tfromMode: {\n\t\tlab65: convertLab65ToDlab,\n\t\trgb: c => convertLab65ToDlab(convertRgbToLab65(c))\n\t},\n\n\tchannels: ['l', 'a', 'b', 'alpha'],\n\n\tranges: {\n\t\tl: [0, 100],\n\t\ta: [-40.09, 45.501],\n\t\tb: [-40.469, 44.344]\n\t},\n\n\tinterpolate: {\n\t\tl: interpolatorLinear,\n\t\ta: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: {\n\t\t\tuse: interpolatorLinear,\n\t\t\tfixup: fixupAlpha\n\t\t}\n\t}\n};\n\nexport default definition;\n","import convertLabToLch from '../lch/convertLabToLch.js';\nimport convertLchToLab from '../lch/convertLchToLab.js';\nimport convertDlchToLab65 from './convertDlchToLab65.js';\nimport convertLab65ToDlch from './convertLab65ToDlch.js';\nimport convertLab65ToRgb from '../lab65/convertLab65ToRgb.js';\nimport convertRgbToLab65 from '../lab65/convertRgbToLab65.js';\n\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueChroma } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'dlch',\n\n\tparse: ['--din99o-lch'],\n\tserialize: '--din99o-lch',\n\n\ttoMode: {\n\t\tlab65: convertDlchToLab65,\n\t\tdlab: c => convertLchToLab(c, 'dlab'),\n\t\trgb: c => convertLab65ToRgb(convertDlchToLab65(c))\n\t},\n\n\tfromMode: {\n\t\tlab65: convertLab65ToDlch,\n\t\tdlab: c => convertLabToLch(c, 'dlch'),\n\t\trgb: c => convertLab65ToDlch(convertRgbToLab65(c))\n\t},\n\n\tchannels: ['l', 'c', 'h', 'alpha'],\n\n\tranges: {\n\t\tl: [0, 100],\n\t\tc: [0, 51.484],\n\t\th: [0, 360]\n\t},\n\n\tinterpolate: {\n\t\tl: interpolatorLinear,\n\t\tc: interpolatorLinear,\n\t\th: {\n\t\t\tuse: interpolatorLinear,\n\t\t\tfixup: fixupHueShorter\n\t\t},\n\t\talpha: {\n\t\t\tuse: interpolatorLinear,\n\t\t\tfixup: fixupAlpha\n\t\t}\n\t},\n\n\tdifference: {\n\t\th: differenceHueChroma\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n","import convertHsiToRgb from './convertHsiToRgb.js';\nimport convertRgbToHsi from './convertRgbToHsi.js';\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueSaturation } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'hsi',\n\n\ttoMode: {\n\t\trgb: convertHsiToRgb\n\t},\n\n\tparse: ['--hsi'],\n\tserialize: '--hsi',\n\n\tfromMode: {\n\t\trgb: convertRgbToHsi\n\t},\n\n\tchannels: ['h', 's', 'i', 'alpha'],\n\n\tranges: {\n\t\th: [0, 360]\n\t},\n\n\tgamut: 'rgb',\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\ts: interpolatorLinear,\n\t\ti: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueSaturation\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n","import normalizeHue from '../util/normalizeHue.js';\n\n// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Converting_to_RGB\n\nexport default function convertHsiToRgb({ h, s, i, alpha }) {\n\th = normalizeHue(h !== undefined ? h : 0);\n\tif (s === undefined) s = 0;\n\tif (i === undefined) i = 0;\n\tlet f = Math.abs(((h / 60) % 2) - 1);\n\tlet res;\n\tswitch (Math.floor(h / 60)) {\n\t\tcase 0:\n\t\t\tres = {\n\t\t\t\tr: i * (1 + s * (3 / (2 - f) - 1)),\n\t\t\t\tg: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1)),\n\t\t\t\tb: i * (1 - s)\n\t\t\t};\n\t\t\tbreak;\n\t\tcase 1:\n\t\t\tres = {\n\t\t\t\tr: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1)),\n\t\t\t\tg: i * (1 + s * (3 / (2 - f) - 1)),\n\t\t\t\tb: i * (1 - s)\n\t\t\t};\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tres = {\n\t\t\t\tr: i * (1 - s),\n\t\t\t\tg: i * (1 + s * (3 / (2 - f) - 1)),\n\t\t\t\tb: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1))\n\t\t\t};\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tres = {\n\t\t\t\tr: i * (1 - s),\n\t\t\t\tg: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1)),\n\t\t\t\tb: i * (1 + s * (3 / (2 - f) - 1))\n\t\t\t};\n\t\t\tbreak;\n\t\tcase 4:\n\t\t\tres = {\n\t\t\t\tr: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1)),\n\t\t\t\tg: i * (1 - s),\n\t\t\t\tb: i * (1 + s * (3 / (2 - f) - 1))\n\t\t\t};\n\t\t\tbreak;\n\t\tcase 5:\n\t\t\tres = {\n\t\t\t\tr: i * (1 + s * (3 / (2 - f) - 1)),\n\t\t\t\tg: i * (1 - s),\n\t\t\t\tb: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1))\n\t\t\t};\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tres = { r: i * (1 - s), g: i * (1 - s), b: i * (1 - s) };\n\t}\n\n\tres.mode = 'rgb';\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n","// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Formal_derivation\n\nexport default function convertRgbToHsi({ r, g, b, alpha }) {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\tlet M = Math.max(r, g, b),\n\t\tm = Math.min(r, g, b);\n\tlet res = {\n\t\tmode: 'hsi',\n\t\ts: r + g + b === 0 ? 0 : 1 - (3 * m) / (r + g + b),\n\t\ti: (r + g + b) / 3\n\t};\n\tif (M - m !== 0)\n\t\tres.h =\n\t\t\t(M === r\n\t\t\t\t? (g - b) / (M - m) + (g < b) * 6\n\t\t\t\t: M === g\n\t\t\t\t? (b - r) / (M - m) + 2\n\t\t\t\t: (r - g) / (M - m) + 4) * 60;\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n","import hueToDeg from '../util/hue.js';\nimport { hue, per, num_per, c } from '../util/regex.js';\n\n/*\n\thsl() regular expressions for legacy format\n\tReference: https://drafts.csswg.org/css-color/#the-hsl-notation\n */\nconst hsl_old = new RegExp(\n\t`^hsla?\\\\(\\\\s*${hue}${c}${per}${c}${per}\\\\s*(?:,\\\\s*${num_per}\\\\s*)?\\\\)$`\n);\n\nconst parseHslLegacy = color => {\n\tlet match = color.match(hsl_old);\n\tif (!match) return;\n\tlet res = { mode: 'hsl' };\n\n\tif (match[3] !== undefined) {\n\t\tres.h = +match[3];\n\t} else if (match[1] !== undefined && match[2] !== undefined) {\n\t\tres.h = hueToDeg(match[1], match[2]);\n\t}\n\n\tif (match[4] !== undefined) {\n\t\tres.s = Math.min(Math.max(0, match[4] / 100), 1);\n\t}\n\n\tif (match[5] !== undefined) {\n\t\tres.l = Math.min(Math.max(0, match[5] / 100), 1);\n\t}\n\n\tif (match[6] !== undefined) {\n\t\tres.alpha = Math.max(0, Math.min(1, match[6] / 100));\n\t} else if (match[7] !== undefined) {\n\t\tres.alpha = Math.max(0, Math.min(1, +match[7]));\n\t}\n\treturn res;\n};\n\nexport default parseHslLegacy;\n","import convertHslToRgb from './convertHslToRgb.js';\nimport convertRgbToHsl from './convertRgbToHsl.js';\nimport parseHslLegacy from './parseHslLegacy.js';\nimport parseHsl from './parseHsl.js';\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueSaturation } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'hsl',\n\n\ttoMode: {\n\t\trgb: convertHslToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToHsl\n\t},\n\n\tchannels: ['h', 's', 'l', 'alpha'],\n\n\tranges: {\n\t\th: [0, 360]\n\t},\n\n\tgamut: 'rgb',\n\n\tparse: [parseHsl, parseHslLegacy],\n\tserialize: c =>\n\t\t`hsl(${c.h !== undefined ? c.h : 'none'} ${\n\t\t\tc.s !== undefined ? c.s * 100 + '%' : 'none'\n\t\t} ${c.l !== undefined ? c.l * 100 + '%' : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`,\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\ts: interpolatorLinear,\n\t\tl: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueSaturation\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n","import normalizeHue from '../util/normalizeHue.js';\n// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Converting_to_RGB\n\nexport default function convertHslToRgb({ h, s, l, alpha }) {\n\th = normalizeHue(h !== undefined ? h : 0);\n\tif (s === undefined) s = 0;\n\tif (l === undefined) l = 0;\n\tlet m1 = l + s * (l < 0.5 ? l : 1 - l);\n\tlet m2 = m1 - (m1 - l) * 2 * Math.abs(((h / 60) % 2) - 1);\n\tlet res;\n\tswitch (Math.floor(h / 60)) {\n\t\tcase 0:\n\t\t\tres = { r: m1, g: m2, b: 2 * l - m1 };\n\t\t\tbreak;\n\t\tcase 1:\n\t\t\tres = { r: m2, g: m1, b: 2 * l - m1 };\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tres = { r: 2 * l - m1, g: m1, b: m2 };\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tres = { r: 2 * l - m1, g: m2, b: m1 };\n\t\t\tbreak;\n\t\tcase 4:\n\t\t\tres = { r: m2, g: 2 * l - m1, b: m1 };\n\t\t\tbreak;\n\t\tcase 5:\n\t\t\tres = { r: m1, g: 2 * l - m1, b: m2 };\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tres = { r: 2 * l - m1, g: 2 * l - m1, b: 2 * l - m1 };\n\t}\n\tres.mode = 'rgb';\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n","// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Formal_derivation\n\nexport default function convertRgbToHsl({ r, g, b, alpha }) {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\tlet M = Math.max(r, g, b),\n\t\tm = Math.min(r, g, b);\n\tlet res = {\n\t\tmode: 'hsl',\n\t\ts: M === m ? 0 : (M - m) / (1 - Math.abs(M + m - 1)),\n\t\tl: 0.5 * (M + m)\n\t};\n\tif (M - m !== 0)\n\t\tres.h =\n\t\t\t(M === r\n\t\t\t\t? (g - b) / (M - m) + (g < b) * 6\n\t\t\t\t: M === g\n\t\t\t\t? (b - r) / (M - m) + 2\n\t\t\t\t: (r - g) / (M - m) + 4) * 60;\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n","import { Tok } from '../parse.js';\n\nfunction parseHsl(color, parsed) {\n\tif (!parsed || (parsed[0] !== 'hsl' && parsed[0] !== 'hsla')) {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'hsl' };\n\tconst [, h, s, l, alpha] = parsed;\n\n\tif (h.type !== Tok.None) {\n\t\tif (h.type === Tok.Percentage) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.h = h.value;\n\t}\n\n\tif (s.type !== Tok.None) {\n\t\tif (s.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.s = s.value / 100;\n\t}\n\n\tif (l.type !== Tok.None) {\n\t\tif (l.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.l = l.value / 100;\n\t}\n\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseHsl;\n","const hueToDeg = (val, unit) => {\n\tswitch (unit) {\n\t\tcase 'deg':\n\t\t\treturn +val;\n\t\tcase 'rad':\n\t\t\treturn (val / Math.PI) * 180;\n\t\tcase 'grad':\n\t\t\treturn (val / 10) * 9;\n\t\tcase 'turn':\n\t\t\treturn val * 360;\n\t}\n};\n\nexport default hueToDeg;\n","import normalizeHue from '../util/normalizeHue.js';\n\n// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Converting_to_RGB\n\nexport default function convertHsvToRgb({ h, s, v, alpha }) {\n\th = normalizeHue(h !== undefined ? h : 0);\n\tif (s === undefined) s = 0;\n\tif (v === undefined) v = 0;\n\tlet f = Math.abs(((h / 60) % 2) - 1);\n\tlet res;\n\tswitch (Math.floor(h / 60)) {\n\t\tcase 0:\n\t\t\tres = { r: v, g: v * (1 - s * f), b: v * (1 - s) };\n\t\t\tbreak;\n\t\tcase 1:\n\t\t\tres = { r: v * (1 - s * f), g: v, b: v * (1 - s) };\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tres = { r: v * (1 - s), g: v, b: v * (1 - s * f) };\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tres = { r: v * (1 - s), g: v * (1 - s * f), b: v };\n\t\t\tbreak;\n\t\tcase 4:\n\t\t\tres = { r: v * (1 - s * f), g: v * (1 - s), b: v };\n\t\t\tbreak;\n\t\tcase 5:\n\t\t\tres = { r: v, g: v * (1 - s), b: v * (1 - s * f) };\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tres = { r: v * (1 - s), g: v * (1 - s), b: v * (1 - s) };\n\t}\n\tres.mode = 'rgb';\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n","// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Formal_derivation\n\nexport default function convertRgbToHsv({ r, g, b, alpha }) {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\tlet M = Math.max(r, g, b),\n\t\tm = Math.min(r, g, b);\n\tlet res = {\n\t\tmode: 'hsv',\n\t\ts: M === 0 ? 0 : 1 - m / M,\n\t\tv: M\n\t};\n\tif (M - m !== 0)\n\t\tres.h =\n\t\t\t(M === r\n\t\t\t\t? (g - b) / (M - m) + (g < b) * 6\n\t\t\t\t: M === g\n\t\t\t\t? (b - r) / (M - m) + 2\n\t\t\t\t: (r - g) / (M - m) + 4) * 60;\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n","import convertHsvToRgb from './convertHsvToRgb.js';\nimport convertRgbToHsv from './convertRgbToHsv.js';\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueSaturation } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'hsv',\n\n\ttoMode: {\n\t\trgb: convertHsvToRgb\n\t},\n\n\tparse: ['--hsv'],\n\tserialize: '--hsv',\n\n\tfromMode: {\n\t\trgb: convertRgbToHsv\n\t},\n\n\tchannels: ['h', 's', 'v', 'alpha'],\n\n\tranges: {\n\t\th: [0, 360]\n\t},\n\n\tgamut: 'rgb',\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\ts: interpolatorLinear,\n\t\tv: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueSaturation\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n","import convertHwbToRgb from './convertHwbToRgb.js';\nimport convertRgbToHwb from './convertRgbToHwb.js';\nimport parseHwb from './parseHwb.js';\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueNaive } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'hwb',\n\n\ttoMode: {\n\t\trgb: convertHwbToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToHwb\n\t},\n\n\tchannels: ['h', 'w', 'b', 'alpha'],\n\n\tranges: {\n\t\th: [0, 360]\n\t},\n\n\tgamut: 'rgb',\n\n\tparse: [parseHwb],\n\tserialize: c =>\n\t\t`hwb(${c.h !== undefined ? c.h : 'none'} ${\n\t\t\tc.w !== undefined ? c.w * 100 + '%' : 'none'\n\t\t} ${c.b !== undefined ? c.b * 100 + '%' : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`,\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\tw: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueNaive\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n","/*\n\tHWB to RGB converter\n\t--------------------\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#hwb-to-rgb\n\t\t* https://en.wikipedia.org/wiki/HWB_color_model\n\t\t* http://alvyray.com/Papers/CG/HWB_JGTv208.pdf\n */\n\nimport convertHsvToRgb from '../hsv/convertHsvToRgb.js';\n\nexport default function convertHwbToRgb({ h, w, b, alpha }) {\n\tif (w === undefined) w = 0;\n\tif (b === undefined) b = 0;\n\t// normalize w + b to 1\n\tif (w + b > 1) {\n\t\tlet s = w + b;\n\t\tw /= s;\n\t\tb /= s;\n\t}\n\treturn convertHsvToRgb({\n\t\th: h,\n\t\ts: b === 1 ? 1 : 1 - w / (1 - b),\n\t\tv: 1 - b,\n\t\talpha: alpha\n\t});\n}\n","/*\n\tRGB to HWB converter\n\t--------------------\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#hwb-to-rgb\n\t\t* https://en.wikipedia.org/wiki/HWB_color_model\n\t\t* http://alvyray.com/Papers/CG/HWB_JGTv208.pdf\n */\n\nimport convertRgbToHsv from '../hsv/convertRgbToHsv.js';\n\nexport default function convertRgbToHwb(rgba) {\n\tlet hsv = convertRgbToHsv(rgba);\n\tif (hsv === undefined) return undefined;\n\tlet s = hsv.s !== undefined ? hsv.s : 0;\n\tlet v = hsv.v !== undefined ? hsv.v : 0;\n\tlet res = {\n\t\tmode: 'hwb',\n\t\tw: (1 - s) * v,\n\t\tb: 1 - v\n\t};\n\tif (hsv.h !== undefined) res.h = hsv.h;\n\tif (hsv.alpha !== undefined) res.alpha = hsv.alpha;\n\treturn res;\n}\n","import { Tok } from '../parse.js';\n\nfunction ParseHwb(color, parsed) {\n\tif (!parsed || parsed[0] !== 'hwb') {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'hwb' };\n\tconst [, h, w, b, alpha] = parsed;\n\n\tif (h.type !== Tok.None) {\n\t\tif (h.type === Tok.Percentage) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.h = h.value;\n\t}\n\n\tif (w.type !== Tok.None) {\n\t\tif (w.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.w = w.value / 100;\n\t}\n\n\tif (b.type !== Tok.None) {\n\t\tif (b.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.b = b.value / 100;\n\t}\n\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default ParseHwb;\n","/*\n\thttps://en.wikipedia.org/wiki/Transfer_functions_in_imaging\n*/\n\nexport const M1 = 0.1593017578125;\nexport const M2 = 78.84375;\nexport const C1 = 0.8359375;\nexport const C2 = 18.8515625;\nexport const C3 = 18.6875;\n\n/*\n\tPerceptual Quantizer, as defined in Rec. BT 2100-2 (2018)\n\n\t* https://www.itu.int/rec/R-REC-BT.2100-2-201807-I/en\n\t* https://en.wikipedia.org/wiki/Perceptual_quantizer\n*/\n\n/* PQ EOTF, defined for `v` in [0,1]. */\nexport function transferPqDecode(v) {\n\tif (v < 0) return 0;\n\tconst c = Math.pow(v, 1 / M2);\n\treturn 1e4 * Math.pow(Math.max(0, c - C1) / (C2 - C3 * c), 1 / M1);\n}\n\n/* PQ EOTF^-1, defined for `v` in [0, 1e4]. */\nexport function transferPqEncode(v) {\n\tif (v < 0) return 0;\n\tconst c = Math.pow(v / 1e4, M1);\n\treturn Math.pow((C1 + C2 * c) / (1 + C3 * c), M2);\n}\n","import { YW } from '../hdr/constants.js';\nimport { transferPqDecode } from '../hdr/transfer.js';\n\nconst toRel = c => Math.max(c / YW, 0);\n\nconst convertItpToXyz65 = ({ i, t, p, alpha }) => {\n\tif (i === undefined) i = 0;\n\tif (t === undefined) t = 0;\n\tif (p === undefined) p = 0;\n\n\tconst l = transferPqDecode(\n\t\ti + 0.008609037037932761 * t + 0.11102962500302593 * p\n\t);\n\tconst m = transferPqDecode(\n\t\ti - 0.00860903703793275 * t - 0.11102962500302599 * p\n\t);\n\tconst s = transferPqDecode(\n\t\ti + 0.5600313357106791 * t - 0.32062717498731885 * p\n\t);\n\n\tconst res = {\n\t\tmode: 'xyz65',\n\t\tx: toRel(\n\t\t\t2.0701522183894219 * l -\n\t\t\t\t1.3263473389671556 * m +\n\t\t\t\t0.2066510476294051 * s\n\t\t),\n\t\ty: toRel(\n\t\t\t0.3647385209748074 * l +\n\t\t\t\t0.680566024947227 * m -\n\t\t\t\t0.0453045459220346 * s\n\t\t),\n\t\tz: toRel(\n\t\t\t-0.049747207535812 * l -\n\t\t\t\t0.0492609666966138 * m +\n\t\t\t\t1.1880659249923042 * s\n\t\t)\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertItpToXyz65;\n","/*\n\tRelative XYZ has Y=1 for media white,\n\tBT.2048 says media white Y=203 (at PQ 58).\n\tSee: https://www.itu.int/dms_pub/itu-r/opb/rep/R-REP-BT.2408-3-2019-PDF-E.pdf\n*/\nexport const YW = 203;\n","import { YW } from '../hdr/constants.js';\nimport { transferPqEncode } from '../hdr/transfer.js';\n\nconst toAbs = (c = 0) => Math.max(c * YW, 0);\n\nconst convertXyz65ToItp = ({ x, y, z, alpha }) => {\n\tconst absX = toAbs(x);\n\tconst absY = toAbs(y);\n\tconst absZ = toAbs(z);\n\tconst l = transferPqEncode(\n\t\t0.3592832590121217 * absX +\n\t\t\t0.6976051147779502 * absY -\n\t\t\t0.0358915932320289 * absZ\n\t);\n\tconst m = transferPqEncode(\n\t\t-0.1920808463704995 * absX +\n\t\t\t1.1004767970374323 * absY +\n\t\t\t0.0753748658519118 * absZ\n\t);\n\tconst s = transferPqEncode(\n\t\t0.0070797844607477 * absX +\n\t\t\t0.0748396662186366 * absY +\n\t\t\t0.8433265453898765 * absZ\n\t);\n\n\tconst i = 0.5 * l + 0.5 * m;\n\tconst t = 1.61376953125 * l - 3.323486328125 * m + 1.709716796875 * s;\n\tconst p = 4.378173828125 * l - 4.24560546875 * m - 0.132568359375 * s;\n\n\tconst res = { mode: 'itp', i, t, p };\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertXyz65ToItp;\n","import { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport convertItpToXyz65 from './convertItpToXyz65.js';\nimport convertXyz65ToItp from './convertXyz65ToItp.js';\nimport convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\nimport convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\n\n/*\n  ICtCp (or ITP) color space, as defined in ITU-R Recommendation BT.2100.\n\n  ICtCp is drafted to be supported in CSS within\n  [CSS Color HDR Module Level 1](https://drafts.csswg.org/css-color-hdr/#ICtCp) spec.\n*/\n\nconst definition = {\n\tmode: 'itp',\n\tchannels: ['i', 't', 'p', 'alpha'],\n\tparse: ['--ictcp'],\n\tserialize: '--ictcp',\n\n\ttoMode: {\n\t\txyz65: convertItpToXyz65,\n\t\trgb: color => convertXyz65ToRgb(convertItpToXyz65(color))\n\t},\n\n\tfromMode: {\n\t\txyz65: convertXyz65ToItp,\n\t\trgb: color => convertXyz65ToItp(convertRgbToXyz65(color))\n\t},\n\n\tranges: {\n\t\ti: [0, 0.581],\n\t\tt: [-0.369, 0.272],\n\t\tp: [-0.164, 0.331]\n\t},\n\n\tinterpolate: {\n\t\ti: interpolatorLinear,\n\t\tt: interpolatorLinear,\n\t\tp: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n","import { M1 as n, C1, C2, C3 } from '../hdr/transfer.js';\nconst p = 134.03437499999998; // = 1.7 * 2523 / Math.pow(2, 5);\nconst d0 = 1.6295499532821566e-11;\n\n/* \n\tThe encoding function is derived from Perceptual Quantizer.\n*/\nconst jabPqEncode = v => {\n\tif (v < 0) return 0;\n\tlet vn = Math.pow(v / 10000, n);\n\treturn Math.pow((C1 + C2 * vn) / (1 + C3 * vn), p);\n};\n\n// Convert to Absolute XYZ\nconst abs = (v = 0) => Math.max(v * 203, 0);\n\nconst convertXyz65ToJab = ({ x, y, z, alpha }) => {\n\tx = abs(x);\n\ty = abs(y);\n\tz = abs(z);\n\n\tlet xp = 1.15 * x - 0.15 * z;\n\tlet yp = 0.66 * y + 0.34 * x;\n\n\tlet l = jabPqEncode(0.41478972 * xp + 0.579999 * yp + 0.014648 * z);\n\tlet m = jabPqEncode(-0.20151 * xp + 1.120649 * yp + 0.0531008 * z);\n\tlet s = jabPqEncode(-0.0166008 * xp + 0.2648 * yp + 0.6684799 * z);\n\n\tlet i = (l + m) / 2;\n\n\tlet res = {\n\t\tmode: 'jab',\n\t\tj: (0.44 * i) / (1 - 0.56 * i) - d0,\n\t\ta: 3.524 * l - 4.066708 * m + 0.542708 * s,\n\t\tb: 0.199076 * l + 1.096799 * m - 1.295875 * s\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertXyz65ToJab;\n","import { M1 as n, C1, C2, C3 } from '../hdr/transfer.js';\nconst p = 134.03437499999998; // = 1.7 * 2523 / Math.pow(2, 5);\nconst d0 = 1.6295499532821566e-11;\n\n/* \n\tThe encoding function is derived from Perceptual Quantizer.\n*/\nconst jabPqDecode = v => {\n\tif (v < 0) return 0;\n\tlet vp = Math.pow(v, 1 / p);\n\treturn 10000 * Math.pow((C1 - vp) / (C3 * vp - C2), 1 / n);\n};\n\nconst rel = v => v / 203;\n\nconst convertJabToXyz65 = ({ j, a, b, alpha }) => {\n\tif (j === undefined) j = 0;\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\tlet i = (j + d0) / (0.44 + 0.56 * (j + d0));\n\n\tlet l = jabPqDecode(i + 0.13860504 * a + 0.058047316 * b);\n\tlet m = jabPqDecode(i - 0.13860504 * a - 0.058047316 * b);\n\tlet s = jabPqDecode(i - 0.096019242 * a - 0.8118919 * b);\n\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx: rel(\n\t\t\t1.661373024652174 * l -\n\t\t\t\t0.914523081304348 * m +\n\t\t\t\t0.23136208173913045 * s\n\t\t),\n\t\ty: rel(\n\t\t\t-0.3250758611844533 * l +\n\t\t\t\t1.571847026732543 * m -\n\t\t\t\t0.21825383453227928 * s\n\t\t),\n\t\tz: rel(-0.090982811 * l - 0.31272829 * m + 1.5227666 * s)\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertJabToXyz65;\n","/*\n\tConvert sRGB to JzAzBz.\n\n\tFor achromatic sRGB colors, adjust the equivalent JzAzBz color\n\tto be achromatic as well, insteading of having a very slight chroma.\n */\n\nimport convertXyz65ToJab from './convertXyz65ToJab.js';\nimport convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\n\nconst convertRgbToJab = rgb => {\n\tlet res = convertXyz65ToJab(convertRgbToXyz65(rgb));\n\tif (rgb.r === rgb.b && rgb.b === rgb.g) {\n\t\tres.a = res.b = 0;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToJab;\n","import convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\nimport convertJabToXyz65 from './convertJabToXyz65.js';\n\nconst convertJabToRgb = color => convertXyz65ToRgb(convertJabToXyz65(color));\n\nexport default convertJabToRgb;\n","/*\n\tThe JzAzBz color space.\n\n\tBased on:\n\n\tMuhammad Safdar, Guihua Cui, Youn Jin Kim, and Ming Ronnier Luo, \n\t\"Perceptually uniform color space for image signals \n\tincluding high dynamic range and wide gamut,\" \n\tOpt. Express 25, 15131-15151 (2017) \n\n\thttps://doi.org/10.1364/OE.25.015131\n */\n\nimport convertXyz65ToJab from './convertXyz65ToJab.js';\nimport convertJabToXyz65 from './convertJabToXyz65.js';\nimport convertRgbToJab from './convertRgbToJab.js';\nimport convertJabToRgb from './convertJabToRgb.js';\n\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst definition = {\n\tmode: 'jab',\n\tchannels: ['j', 'a', 'b', 'alpha'],\n\n\tparse: ['--jzazbz'],\n\tserialize: '--jzazbz',\n\n\tfromMode: {\n\t\trgb: convertRgbToJab,\n\t\txyz65: convertXyz65ToJab\n\t},\n\n\ttoMode: {\n\t\trgb: convertJabToRgb,\n\t\txyz65: convertJabToXyz65\n\t},\n\n\tranges: {\n\t\tj: [0, 0.222],\n\t\ta: [-0.109, 0.129],\n\t\tb: [-0.185, 0.134]\n\t},\n\n\tinterpolate: {\n\t\tj: interpolatorLinear,\n\t\ta: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n","import normalizeHue from '../util/normalizeHue.js';\n\nconst convertJabToJch = ({ j, a, b, alpha }) => {\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\tlet c = Math.sqrt(a * a + b * b);\n\tlet res = {\n\t\tmode: 'jch',\n\t\tj,\n\t\tc\n\t};\n\tif (c) {\n\t\tres.h = normalizeHue((Math.atan2(b, a) * 180) / Math.PI);\n\t}\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertJabToJch;\n","const convertJchToJab = ({ j, c, h, alpha }) => {\n\tif (h === undefined) h = 0;\n\tlet res = {\n\t\tmode: 'jab',\n\t\tj,\n\t\ta: c ? c * Math.cos((h / 180) * Math.PI) : 0,\n\t\tb: c ? c * Math.sin((h / 180) * Math.PI) : 0\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertJchToJab;\n","import convertJabToJch from './convertJabToJch.js';\nimport convertJchToJab from './convertJchToJab.js';\nimport convertJabToRgb from '../jab/convertJabToRgb.js';\nimport convertRgbToJab from '../jab/convertRgbToJab.js';\n\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueChroma } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'jch',\n\n\tparse: ['--jzczhz'],\n\tserialize: '--jzczhz',\n\n\ttoMode: {\n\t\tjab: convertJchToJab,\n\t\trgb: c => convertJabToRgb(convertJchToJab(c))\n\t},\n\n\tfromMode: {\n\t\trgb: c => convertJabToJch(convertRgbToJab(c)),\n\t\tjab: convertJabToJch\n\t},\n\n\tchannels: ['j', 'c', 'h', 'alpha'],\n\n\tranges: {\n\t\tj: [0, 0.221],\n\t\tc: [0, 0.19],\n\t\th: [0, 360]\n\t},\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\tc: interpolatorLinear,\n\t\tj: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueChroma\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n","export const k = Math.pow(29, 3) / Math.pow(3, 3);\nexport const e = Math.pow(6, 3) / Math.pow(29, 3);\n","import { k, e } from '../xyz50/constants.js';\nimport { D50 } from '../constants.js';\n\nlet fn = v => (Math.pow(v, 3) > e ? Math.pow(v, 3) : (116 * v - 16) / k);\n\nconst convertLabToXyz50 = ({ l, a, b, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\tlet fy = (l + 16) / 116;\n\tlet fx = a / 500 + fy;\n\tlet fz = fy - b / 200;\n\n\tlet res = {\n\t\tmode: 'xyz50',\n\t\tx: fn(fx) * D50.X,\n\t\ty: fn(fy) * D50.Y,\n\t\tz: fn(fz) * D50.Z\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertLabToXyz50;\n","/*\n\tCIE XYZ D50 values to sRGB.\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nimport convertLrgbToRgb from '../lrgb/convertLrgbToRgb.js';\n\nconst convertXyz50ToRgb = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = convertLrgbToRgb({\n\t\tr:\n\t\t\tx * 3.1341359569958707 -\n\t\t\ty * 1.6173863321612538 -\n\t\t\t0.4906619460083532 * z,\n\t\tg:\n\t\t\tx * -0.978795502912089 +\n\t\t\ty * 1.916254567259524 +\n\t\t\t0.03344273116131949 * z,\n\t\tb:\n\t\t\tx * 0.07195537988411677 -\n\t\t\ty * 0.2289768264158322 +\n\t\t\t1.405386058324125 * z\n\t});\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz50ToRgb;\n","import convertLabToXyz50 from './convertLabToXyz50.js';\nimport convertXyz50ToRgb from '../xyz50/convertXyz50ToRgb.js';\n\nconst convertLabToRgb = lab => convertXyz50ToRgb(convertLabToXyz50(lab));\n\nexport default convertLabToRgb;\n","/*\n\tConvert sRGB values to CIE XYZ D50\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\n*/\n\nimport convertRgbToLrgb from '../lrgb/convertRgbToLrgb.js';\n\nconst convertRgbToXyz50 = rgb => {\n\tlet { r, g, b, alpha } = convertRgbToLrgb(rgb);\n\tlet res = {\n\t\tmode: 'xyz50',\n\t\tx:\n\t\t\t0.436065742824811 * r +\n\t\t\t0.3851514688337912 * g +\n\t\t\t0.14307845442264197 * b,\n\t\ty:\n\t\t\t0.22249319175623702 * r +\n\t\t\t0.7168870538238823 * g +\n\t\t\t0.06061979053616537 * b,\n\t\tz:\n\t\t\t0.013923904500943465 * r +\n\t\t\t0.09708128566574634 * g +\n\t\t\t0.7140993584005155 * b\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToXyz50;\n","import { k, e } from '../xyz50/constants.js';\nimport { D50 } from '../constants.js';\n\nconst f = value => (value > e ? Math.cbrt(value) : (k * value + 16) / 116);\n\nconst convertXyz50ToLab = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet f0 = f(x / D50.X);\n\tlet f1 = f(y / D50.Y);\n\tlet f2 = f(z / D50.Z);\n\n\tlet res = {\n\t\tmode: 'lab',\n\t\tl: 116 * f1 - 16,\n\t\ta: 500 * (f0 - f1),\n\t\tb: 200 * (f1 - f2)\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertXyz50ToLab;\n","import convertRgbToXyz50 from '../xyz50/convertRgbToXyz50.js';\nimport convertXyz50ToLab from './convertXyz50ToLab.js';\n\nconst convertRgbToLab = rgb => {\n\tlet res = convertXyz50ToLab(convertRgbToXyz50(rgb));\n\n\t// Fixes achromatic RGB colors having a _slight_ chroma due to floating-point errors\n\t// and approximated computations in sRGB <-> CIELab.\n\t// See: https://github.com/d3/d3-color/pull/46\n\tif (rgb.r === rgb.b && rgb.b === rgb.g) {\n\t\tres.a = res.b = 0;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToLab;\n","import convertLabToRgb from './convertLabToRgb.js';\nimport convertLabToXyz50 from './convertLabToXyz50.js';\nimport convertRgbToLab from './convertRgbToLab.js';\nimport convertXyz50ToLab from './convertXyz50ToLab.js';\nimport parseLab from './parseLab.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst definition = {\n\tmode: 'lab',\n\n\ttoMode: {\n\t\txyz50: convertLabToXyz50,\n\t\trgb: convertLabToRgb\n\t},\n\n\tfromMode: {\n\t\txyz50: convertXyz50ToLab,\n\t\trgb: convertRgbToLab\n\t},\n\n\tchannels: ['l', 'a', 'b', 'alpha'],\n\n\tranges: {\n\t\tl: [0, 100],\n\t\ta: [-125, 125],\n\t\tb: [-125, 125]\n\t},\n\n\tparse: [parseLab],\n\tserialize: c =>\n\t\t`lab(${c.l !== undefined ? c.l : 'none'} ${\n\t\t\tc.a !== undefined ? c.a : 'none'\n\t\t} ${c.b !== undefined ? c.b : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`,\n\n\tinterpolate: {\n\t\tl: interpolatorLinear,\n\t\ta: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n","import { Tok } from '../parse.js';\n\nfunction parseLab(color, parsed) {\n\tif (!parsed || parsed[0] !== 'lab') {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'lab' };\n\tconst [, l, a, b, alpha] = parsed;\n\tif (l.type === Tok.Hue || a.type === Tok.Hue || b.type === Tok.Hue) {\n\t\treturn undefined;\n\t}\n\tif (l.type !== Tok.None) {\n\t\tres.l = Math.min(Math.max(0, l.value), 100);\n\t}\n\tif (a.type !== Tok.None) {\n\t\tres.a = a.type === Tok.Number ? a.value : (a.value * 125) / 100;\n\t}\n\tif (b.type !== Tok.None) {\n\t\tres.b = b.type === Tok.Number ? b.value : (b.value * 125) / 100;\n\t}\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseLab;\n","import convertLab65ToRgb from './convertLab65ToRgb.js';\nimport convertLab65ToXyz65 from './convertLab65ToXyz65.js';\nimport convertRgbToLab65 from './convertRgbToLab65.js';\nimport convertXyz65ToLab65 from './convertXyz65ToLab65.js';\nimport lab from '../lab/definition.js';\n\nconst definition = {\n\t...lab,\n\tmode: 'lab65',\n\n\tparse: ['--lab-d65'],\n\tserialize: '--lab-d65',\n\n\ttoMode: {\n\t\txyz65: convertLab65ToXyz65,\n\t\trgb: convertLab65ToRgb\n\t},\n\n\tfromMode: {\n\t\txyz65: convertXyz65ToLab65,\n\t\trgb: convertRgbToLab65\n\t},\n\n\tranges: {\n\t\tl: [0, 100],\n\t\ta: [-125, 125],\n\t\tb: [-125, 125]\n\t}\n};\n\nexport default definition;\n","import convertLabToLch from './convertLabToLch.js';\nimport convertLchToLab from './convertLchToLab.js';\nimport convertLabToRgb from '../lab/convertLabToRgb.js';\nimport convertRgbToLab from '../lab/convertRgbToLab.js';\nimport parseLch from './parseLch.js';\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueChroma } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'lch',\n\n\ttoMode: {\n\t\tlab: convertLchToLab,\n\t\trgb: c => convertLabToRgb(convertLchToLab(c))\n\t},\n\n\tfromMode: {\n\t\trgb: c => convertLabToLch(convertRgbToLab(c)),\n\t\tlab: convertLabToLch\n\t},\n\n\tchannels: ['l', 'c', 'h', 'alpha'],\n\n\tranges: {\n\t\tl: [0, 100],\n\t\tc: [0, 150],\n\t\th: [0, 360]\n\t},\n\n\tparse: [parseLch],\n\tserialize: c =>\n\t\t`lch(${c.l !== undefined ? c.l : 'none'} ${\n\t\t\tc.c !== undefined ? c.c : 'none'\n\t\t} ${c.h !== undefined ? c.h : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`,\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\tc: interpolatorLinear,\n\t\tl: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueChroma\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n","import { Tok } from '../parse.js';\n\nfunction parseLch(color, parsed) {\n\tif (!parsed || parsed[0] !== 'lch') {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'lch' };\n\tconst [, l, c, h, alpha] = parsed;\n\tif (l.type !== Tok.None) {\n\t\tif (l.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.l = Math.min(Math.max(0, l.value), 100);\n\t}\n\tif (c.type !== Tok.None) {\n\t\tres.c = Math.max(\n\t\t\t0,\n\t\t\tc.type === Tok.Number ? c.value : (c.value * 150) / 100\n\t\t);\n\t}\n\tif (h.type !== Tok.None) {\n\t\tif (h.type === Tok.Percentage) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.h = h.value;\n\t}\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseLch;\n","import convertLabToLch from '../lch/convertLabToLch.js';\nimport convertLchToLab from '../lch/convertLchToLab.js';\nimport convertLab65ToRgb from '../lab65/convertLab65ToRgb.js';\nimport convertRgbToLab65 from '../lab65/convertRgbToLab65.js';\nimport lch from '../lch/definition.js';\n\nconst definition = {\n\t...lch,\n\tmode: 'lch65',\n\n\tparse: ['--lch-d65'],\n\tserialize: '--lch-d65',\n\n\ttoMode: {\n\t\tlab65: c => convertLchToLab(c, 'lab65'),\n\t\trgb: c => convertLab65ToRgb(convertLchToLab(c, 'lab65'))\n\t},\n\n\tfromMode: {\n\t\trgb: c => convertLabToLch(convertRgbToLab65(c), 'lch65'),\n\t\tlab65: c => convertLabToLch(c, 'lch65')\n\t},\n\n\tranges: {\n\t\tl: [0, 100],\n\t\tc: [0, 150],\n\t\th: [0, 360]\n\t}\n};\n\nexport default definition;\n","import normalizeHue from '../util/normalizeHue.js';\n\nconst convertLuvToLchuv = ({ l, u, v, alpha }) => {\n\tif (u === undefined) u = 0;\n\tif (v === undefined) v = 0;\n\tlet c = Math.sqrt(u * u + v * v);\n\tlet res = {\n\t\tmode: 'lchuv',\n\t\tl: l,\n\t\tc: c\n\t};\n\tif (c) {\n\t\tres.h = normalizeHue((Math.atan2(v, u) * 180) / Math.PI);\n\t}\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertLuvToLchuv;\n","const convertLchuvToLuv = ({ l, c, h, alpha }) => {\n\tif (h === undefined) h = 0;\n\tlet res = {\n\t\tmode: 'luv',\n\t\tl: l,\n\t\tu: c ? c * Math.cos((h / 180) * Math.PI) : 0,\n\t\tv: c ? c * Math.sin((h / 180) * Math.PI) : 0\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertLchuvToLuv;\n","import { k, e } from '../xyz50/constants.js';\nimport { D50 } from '../constants.js';\n\nexport const u_fn = (x, y, z) => (4 * x) / (x + 15 * y + 3 * z);\nexport const v_fn = (x, y, z) => (9 * y) / (x + 15 * y + 3 * z);\n\nexport const un = u_fn(D50.X, D50.Y, D50.Z);\nexport const vn = v_fn(D50.X, D50.Y, D50.Z);\n\nconst l_fn = value => (value <= e ? k * value : 116 * Math.cbrt(value) - 16);\n\nconst convertXyz50ToLuv = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet l = l_fn(y / D50.Y);\n\tlet u = u_fn(x, y, z);\n\tlet v = v_fn(x, y, z);\n\n\t// guard against NaNs produced by `xyz(0 0 0)` black\n\tif (!isFinite(u) || !isFinite(v)) {\n\t\tl = u = v = 0;\n\t} else {\n\t\tu = 13 * l * (u - un);\n\t\tv = 13 * l * (v - vn);\n\t}\n\n\tlet res = {\n\t\tmode: 'luv',\n\t\tl,\n\t\tu,\n\t\tv\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertXyz50ToLuv;\n","import { k } from '../xyz50/constants.js';\nimport { D50 } from '../constants.js';\n\nexport const u_fn = (x, y, z) => (4 * x) / (x + 15 * y + 3 * z);\nexport const v_fn = (x, y, z) => (9 * y) / (x + 15 * y + 3 * z);\n\nexport const un = u_fn(D50.X, D50.Y, D50.Z);\nexport const vn = v_fn(D50.X, D50.Y, D50.Z);\n\nconst convertLuvToXyz50 = ({ l, u, v, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (l === 0) {\n\t\treturn { mode: 'xyz50', x: 0, y: 0, z: 0 };\n\t}\n\n\tif (u === undefined) u = 0;\n\tif (v === undefined) v = 0;\n\n\tlet up = u / (13 * l) + un;\n\tlet vp = v / (13 * l) + vn;\n\tlet y = D50.Y * (l <= 8 ? l / k : Math.pow((l + 16) / 116, 3));\n\tlet x = (y * (9 * up)) / (4 * vp);\n\tlet z = (y * (12 - 3 * up - 20 * vp)) / (4 * vp);\n\n\tlet res = { mode: 'xyz50', x, y, z };\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertLuvToXyz50;\n","/*\n\tCIELChuv color space\n\t--------------------\n\n\tReference: \n\n\t\thttps://en.wikipedia.org/wiki/CIELUV\n */\n\nimport convertLuvToLchuv from './convertLuvToLchuv.js';\nimport convertLchuvToLuv from './convertLchuvToLuv.js';\nimport convertXyz50ToLuv from '../luv/convertXyz50ToLuv.js';\nimport convertLuvToXyz50 from '../luv/convertLuvToXyz50.js';\nimport convertXyz50ToRgb from '../xyz50/convertXyz50ToRgb.js';\nimport convertRgbToXyz50 from '../xyz50/convertRgbToXyz50.js';\n\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueChroma } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst convertRgbToLchuv = rgb =>\n\tconvertLuvToLchuv(convertXyz50ToLuv(convertRgbToXyz50(rgb)));\nconst convertLchuvToRgb = lchuv =>\n\tconvertXyz50ToRgb(convertLuvToXyz50(convertLchuvToLuv(lchuv)));\n\nconst definition = {\n\tmode: 'lchuv',\n\n\ttoMode: {\n\t\tluv: convertLchuvToLuv,\n\t\trgb: convertLchuvToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToLchuv,\n\t\tluv: convertLuvToLchuv\n\t},\n\n\tchannels: ['l', 'c', 'h', 'alpha'],\n\n\tparse: ['--lchuv'],\n\tserialize: '--lchuv',\n\n\tranges: {\n\t\tl: [0, 100],\n\t\tc: [0, 176.956],\n\t\th: [0, 360]\n\t},\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\tc: interpolatorLinear,\n\t\tl: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueChroma\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n","import rgb from '../rgb/definition.js';\nimport convertRgbToLrgb from './convertRgbToLrgb.js';\nimport convertLrgbToRgb from './convertLrgbToRgb.js';\n\nconst definition = {\n\t...rgb,\n\tmode: 'lrgb',\n\n\ttoMode: {\n\t\trgb: convertLrgbToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToLrgb\n\t},\n\n\tparse: ['srgb-linear'],\n\tserialize: 'srgb-linear'\n};\n\nexport default definition;\n","/*\n\tCIELUV color space\n\t------------------\n\n\tReference: \n\n\t\thttps://en.wikipedia.org/wiki/CIELUV\n */\n\nimport convertXyz50ToLuv from './convertXyz50ToLuv.js';\nimport convertLuvToXyz50 from './convertLuvToXyz50.js';\nimport convertXyz50ToRgb from '../xyz50/convertXyz50ToRgb.js';\nimport convertRgbToXyz50 from '../xyz50/convertRgbToXyz50.js';\n\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst definition = {\n\tmode: 'luv',\n\n\ttoMode: {\n\t\txyz50: convertLuvToXyz50,\n\t\trgb: luv => convertXyz50ToRgb(convertLuvToXyz50(luv))\n\t},\n\n\tfromMode: {\n\t\txyz50: convertXyz50ToLuv,\n\t\trgb: rgb => convertXyz50ToLuv(convertRgbToXyz50(rgb))\n\t},\n\n\tchannels: ['l', 'u', 'v', 'alpha'],\n\n\tparse: ['--luv'],\n\tserialize: '--luv',\n\n\tranges: {\n\t\tl: [0, 100],\n\t\tu: [-84.936, 175.042],\n\t\tv: [-125.882, 87.243]\n\t},\n\n\tinterpolate: {\n\t\tl: interpolatorLinear,\n\t\tu: interpolatorLinear,\n\t\tv: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n","const convertLrgbToOklab = ({ r, g, b, alpha }) => {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\n\tlet L = Math.cbrt(\n\t\t0.412221469470763 * r + 0.5363325372617348 * g + 0.0514459932675022 * b\n\t);\n\tlet M = Math.cbrt(\n\t\t0.2119034958178252 * r + 0.6806995506452344 * g + 0.1073969535369406 * b\n\t);\n\tlet S = Math.cbrt(\n\t\t0.0883024591900564 * r + 0.2817188391361215 * g + 0.6299787016738222 * b\n\t);\n\n\tlet res = {\n\t\tmode: 'oklab',\n\t\tl:\n\t\t\t0.210454268309314 * L +\n\t\t\t0.7936177747023054 * M -\n\t\t\t0.0040720430116193 * S,\n\t\ta:\n\t\t\t1.9779985324311684 * L -\n\t\t\t2.4285922420485799 * M +\n\t\t\t0.450593709617411 * S,\n\t\tb:\n\t\t\t0.0259040424655478 * L +\n\t\t\t0.7827717124575296 * M -\n\t\t\t0.8086757549230774 * S\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertLrgbToOklab;\n","import convertRgbToLrgb from '../lrgb/convertRgbToLrgb.js';\nimport convertLrgbToOklab from './convertLrgbToOklab.js';\n\nconst convertRgbToOklab = rgb => {\n\tlet res = convertLrgbToOklab(convertRgbToLrgb(rgb));\n\tif (rgb.r === rgb.b && rgb.b === rgb.g) {\n\t\tres.a = res.b = 0;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToOklab;\n","const convertOklabToLrgb = ({ l, a, b, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\n\tlet L = Math.pow(l + 0.3963377773761749 * a + 0.2158037573099136 * b, 3);\n\tlet M = Math.pow(l - 0.1055613458156586 * a - 0.0638541728258133 * b, 3);\n\tlet S = Math.pow(l - 0.0894841775298119 * a - 1.2914855480194092 * b, 3);\n\n\tlet res = {\n\t\tmode: 'lrgb',\n\t\tr:\n\t\t\t4.0767416360759574 * L -\n\t\t\t3.3077115392580616 * M +\n\t\t\t0.2309699031821044 * S,\n\t\tg:\n\t\t\t-1.2684379732850317 * L +\n\t\t\t2.6097573492876887 * M -\n\t\t\t0.3413193760026573 * S,\n\t\tb:\n\t\t\t-0.0041960761386756 * L -\n\t\t\t0.7034186179359362 * M +\n\t\t\t1.7076146940746117 * S\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertOklabToLrgb;\n","import convertLrgbToRgb from '../lrgb/convertLrgbToRgb.js';\nimport convertOklabToLrgb from './convertOklabToLrgb.js';\n\nconst convertOklabToRgb = c => convertLrgbToRgb(convertOklabToLrgb(c));\n\nexport default convertOklabToRgb;\n","/*\n\tAdapted from code by Björn Ottosson,\n\treleased under the MIT license:\n\n\tCopyright (c) 2021 Björn Ottosson\n\n\tPermission is hereby granted, free of charge, to any person obtaining a copy of\n\tthis software and associated documentation files (the \"Software\"), to deal in\n\tthe Software without restriction, including without limitation the rights to\n\tuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n\tof the Software, and to permit persons to whom the Software is furnished to do\n\tso, subject to the following conditions:\n\n\tThe above copyright notice and this permission notice shall be included in all\n\tcopies 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 THE\n\tSOFTWARE.\n */\n\nimport convertOklabToLrgb from '../oklab/convertOklabToLrgb.js';\n\nexport function toe(x) {\n\tconst k_1 = 0.206;\n\tconst k_2 = 0.03;\n\tconst k_3 = (1 + k_1) / (1 + k_2);\n\treturn (\n\t\t0.5 *\n\t\t(k_3 * x -\n\t\t\tk_1 +\n\t\t\tMath.sqrt((k_3 * x - k_1) * (k_3 * x - k_1) + 4 * k_2 * k_3 * x))\n\t);\n}\n\nexport function toe_inv(x) {\n\tconst k_1 = 0.206;\n\tconst k_2 = 0.03;\n\tconst k_3 = (1 + k_1) / (1 + k_2);\n\treturn (x * x + k_1 * x) / (k_3 * (x + k_2));\n}\n\n// Finds the maximum saturation possible for a given hue that fits in sRGB\n// Saturation here is defined as S = C/L\n// a and b must be normalized so a^2 + b^2 == 1\nfunction compute_max_saturation(a, b) {\n\t// Max saturation will be when one of r, g or b goes below zero.\n\n\t// Select different coefficients depending on which component goes below zero first\n\tlet k0, k1, k2, k3, k4, wl, wm, ws;\n\n\tif (-1.88170328 * a - 0.80936493 * b > 1) {\n\t\t// Red component\n\t\tk0 = +1.19086277;\n\t\tk1 = +1.76576728;\n\t\tk2 = +0.59662641;\n\t\tk3 = +0.75515197;\n\t\tk4 = +0.56771245;\n\t\twl = +4.0767416621;\n\t\twm = -3.3077115913;\n\t\tws = +0.2309699292;\n\t} else if (1.81444104 * a - 1.19445276 * b > 1) {\n\t\t// Green component\n\t\tk0 = +0.73956515;\n\t\tk1 = -0.45954404;\n\t\tk2 = +0.08285427;\n\t\tk3 = +0.1254107;\n\t\tk4 = +0.14503204;\n\t\twl = -1.2684380046;\n\t\twm = +2.6097574011;\n\t\tws = -0.3413193965;\n\t} else {\n\t\t// Blue component\n\t\tk0 = +1.35733652;\n\t\tk1 = -0.00915799;\n\t\tk2 = -1.1513021;\n\t\tk3 = -0.50559606;\n\t\tk4 = +0.00692167;\n\t\twl = -0.0041960863;\n\t\twm = -0.7034186147;\n\t\tws = +1.707614701;\n\t}\n\n\t// Approximate max saturation using a polynomial:\n\tlet S = k0 + k1 * a + k2 * b + k3 * a * a + k4 * a * b;\n\n\t// Do one step Halley's method to get closer\n\t// this gives an error less than 10e6, except for some blue hues where the dS/dh is close to infinite\n\t// this should be sufficient for most applications, otherwise do two/three steps\n\n\tlet k_l = +0.3963377774 * a + 0.2158037573 * b;\n\tlet k_m = -0.1055613458 * a - 0.0638541728 * b;\n\tlet k_s = -0.0894841775 * a - 1.291485548 * b;\n\n\t{\n\t\tlet l_ = 1 + S * k_l;\n\t\tlet m_ = 1 + S * k_m;\n\t\tlet s_ = 1 + S * k_s;\n\n\t\tlet l = l_ * l_ * l_;\n\t\tlet m = m_ * m_ * m_;\n\t\tlet s = s_ * s_ * s_;\n\n\t\tlet l_dS = 3 * k_l * l_ * l_;\n\t\tlet m_dS = 3 * k_m * m_ * m_;\n\t\tlet s_dS = 3 * k_s * s_ * s_;\n\n\t\tlet l_dS2 = 6 * k_l * k_l * l_;\n\t\tlet m_dS2 = 6 * k_m * k_m * m_;\n\t\tlet s_dS2 = 6 * k_s * k_s * s_;\n\n\t\tlet f = wl * l + wm * m + ws * s;\n\t\tlet f1 = wl * l_dS + wm * m_dS + ws * s_dS;\n\t\tlet f2 = wl * l_dS2 + wm * m_dS2 + ws * s_dS2;\n\n\t\tS = S - (f * f1) / (f1 * f1 - 0.5 * f * f2);\n\t}\n\n\treturn S;\n}\n\nexport function find_cusp(a, b) {\n\t// First, find the maximum saturation (saturation S = C/L)\n\tlet S_cusp = compute_max_saturation(a, b);\n\n\t// Convert to linear sRGB to find the first point where at least one of r,g or b >= 1:\n\tlet rgb = convertOklabToLrgb({ l: 1, a: S_cusp * a, b: S_cusp * b });\n\tlet L_cusp = Math.cbrt(1 / Math.max(rgb.r, rgb.g, rgb.b));\n\tlet C_cusp = L_cusp * S_cusp;\n\n\treturn [L_cusp, C_cusp];\n}\n\n// Finds intersection of the line defined by\n// L = L0 * (1 - t) + t * L1;\n// C = t * C1;\n// a and b must be normalized so a^2 + b^2 == 1\nfunction find_gamut_intersection(a, b, L1, C1, L0, cusp = null) {\n\tif (!cusp) {\n\t\t// Find the cusp of the gamut triangle\n\t\tcusp = find_cusp(a, b);\n\t}\n\n\t// Find the intersection for upper and lower half seprately\n\tlet t;\n\tif ((L1 - L0) * cusp[1] - (cusp[0] - L0) * C1 <= 0) {\n\t\t// Lower half\n\n\t\tt = (cusp[1] * L0) / (C1 * cusp[0] + cusp[1] * (L0 - L1));\n\t} else {\n\t\t// Upper half\n\n\t\t// First intersect with triangle\n\t\tt = (cusp[1] * (L0 - 1)) / (C1 * (cusp[0] - 1) + cusp[1] * (L0 - L1));\n\n\t\t// Then one step Halley's method\n\t\t{\n\t\t\tlet dL = L1 - L0;\n\t\t\tlet dC = C1;\n\n\t\t\tlet k_l = +0.3963377774 * a + 0.2158037573 * b;\n\t\t\tlet k_m = -0.1055613458 * a - 0.0638541728 * b;\n\t\t\tlet k_s = -0.0894841775 * a - 1.291485548 * b;\n\n\t\t\tlet l_dt = dL + dC * k_l;\n\t\t\tlet m_dt = dL + dC * k_m;\n\t\t\tlet s_dt = dL + dC * k_s;\n\n\t\t\t// If higher accuracy is required, 2 or 3 iterations of the following block can be used:\n\t\t\t{\n\t\t\t\tlet L = L0 * (1 - t) + t * L1;\n\t\t\t\tlet C = t * C1;\n\n\t\t\t\tlet l_ = L + C * k_l;\n\t\t\t\tlet m_ = L + C * k_m;\n\t\t\t\tlet s_ = L + C * k_s;\n\n\t\t\t\tlet l = l_ * l_ * l_;\n\t\t\t\tlet m = m_ * m_ * m_;\n\t\t\t\tlet s = s_ * s_ * s_;\n\n\t\t\t\tlet ldt = 3 * l_dt * l_ * l_;\n\t\t\t\tlet mdt = 3 * m_dt * m_ * m_;\n\t\t\t\tlet sdt = 3 * s_dt * s_ * s_;\n\n\t\t\t\tlet ldt2 = 6 * l_dt * l_dt * l_;\n\t\t\t\tlet mdt2 = 6 * m_dt * m_dt * m_;\n\t\t\t\tlet sdt2 = 6 * s_dt * s_dt * s_;\n\n\t\t\t\tlet r =\n\t\t\t\t\t4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s - 1;\n\t\t\t\tlet r1 =\n\t\t\t\t\t4.0767416621 * ldt -\n\t\t\t\t\t3.3077115913 * mdt +\n\t\t\t\t\t0.2309699292 * sdt;\n\t\t\t\tlet r2 =\n\t\t\t\t\t4.0767416621 * ldt2 -\n\t\t\t\t\t3.3077115913 * mdt2 +\n\t\t\t\t\t0.2309699292 * sdt2;\n\n\t\t\t\tlet u_r = r1 / (r1 * r1 - 0.5 * r * r2);\n\t\t\t\tlet t_r = -r * u_r;\n\n\t\t\t\tlet g =\n\t\t\t\t\t-1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s - 1;\n\t\t\t\tlet g1 =\n\t\t\t\t\t-1.2684380046 * ldt +\n\t\t\t\t\t2.6097574011 * mdt -\n\t\t\t\t\t0.3413193965 * sdt;\n\t\t\t\tlet g2 =\n\t\t\t\t\t-1.2684380046 * ldt2 +\n\t\t\t\t\t2.6097574011 * mdt2 -\n\t\t\t\t\t0.3413193965 * sdt2;\n\n\t\t\t\tlet u_g = g1 / (g1 * g1 - 0.5 * g * g2);\n\t\t\t\tlet t_g = -g * u_g;\n\n\t\t\t\tlet b =\n\t\t\t\t\t-0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s - 1;\n\t\t\t\tlet b1 =\n\t\t\t\t\t-0.0041960863 * ldt -\n\t\t\t\t\t0.7034186147 * mdt +\n\t\t\t\t\t1.707614701 * sdt;\n\t\t\t\tlet b2 =\n\t\t\t\t\t-0.0041960863 * ldt2 -\n\t\t\t\t\t0.7034186147 * mdt2 +\n\t\t\t\t\t1.707614701 * sdt2;\n\n\t\t\t\tlet u_b = b1 / (b1 * b1 - 0.5 * b * b2);\n\t\t\t\tlet t_b = -b * u_b;\n\n\t\t\t\tt_r = u_r >= 0 ? t_r : 10e5;\n\t\t\t\tt_g = u_g >= 0 ? t_g : 10e5;\n\t\t\t\tt_b = u_b >= 0 ? t_b : 10e5;\n\n\t\t\t\tt += Math.min(t_r, Math.min(t_g, t_b));\n\t\t\t}\n\t\t}\n\t}\n\n\treturn t;\n}\n\nexport function get_ST_max(a_, b_, cusp = null) {\n\tif (!cusp) {\n\t\tcusp = find_cusp(a_, b_);\n\t}\n\tlet L = cusp[0];\n\tlet C = cusp[1];\n\treturn [C / L, C / (1 - L)];\n}\n\nexport function get_ST_mid(a_, b_) {\n\tlet S =\n\t\t0.11516993 +\n\t\t1 /\n\t\t\t(+7.4477897 +\n\t\t\t\t4.1590124 * b_ +\n\t\t\t\ta_ *\n\t\t\t\t\t(-2.19557347 +\n\t\t\t\t\t\t1.75198401 * b_ +\n\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t(-2.13704948 -\n\t\t\t\t\t\t\t\t10.02301043 * b_ +\n\t\t\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t\t\t(-4.24894561 +\n\t\t\t\t\t\t\t\t\t\t5.38770819 * b_ +\n\t\t\t\t\t\t\t\t\t\t4.69891013 * a_))));\n\n\tlet T =\n\t\t0.11239642 +\n\t\t1 /\n\t\t\t(+1.6132032 -\n\t\t\t\t0.68124379 * b_ +\n\t\t\t\ta_ *\n\t\t\t\t\t(+0.40370612 +\n\t\t\t\t\t\t0.90148123 * b_ +\n\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t(-0.27087943 +\n\t\t\t\t\t\t\t\t0.6122399 * b_ +\n\t\t\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t\t\t(+0.00299215 -\n\t\t\t\t\t\t\t\t\t\t0.45399568 * b_ -\n\t\t\t\t\t\t\t\t\t\t0.14661872 * a_))));\n\n\treturn [S, T];\n}\n\nexport function get_Cs(L, a_, b_) {\n\tlet cusp = find_cusp(a_, b_);\n\n\tlet C_max = find_gamut_intersection(a_, b_, L, 1, L, cusp);\n\tlet ST_max = get_ST_max(a_, b_, cusp);\n\n\tlet S_mid =\n\t\t0.11516993 +\n\t\t1 /\n\t\t\t(+7.4477897 +\n\t\t\t\t4.1590124 * b_ +\n\t\t\t\ta_ *\n\t\t\t\t\t(-2.19557347 +\n\t\t\t\t\t\t1.75198401 * b_ +\n\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t(-2.13704948 -\n\t\t\t\t\t\t\t\t10.02301043 * b_ +\n\t\t\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t\t\t(-4.24894561 +\n\t\t\t\t\t\t\t\t\t\t5.38770819 * b_ +\n\t\t\t\t\t\t\t\t\t\t4.69891013 * a_))));\n\n\tlet T_mid =\n\t\t0.11239642 +\n\t\t1 /\n\t\t\t(+1.6132032 -\n\t\t\t\t0.68124379 * b_ +\n\t\t\t\ta_ *\n\t\t\t\t\t(+0.40370612 +\n\t\t\t\t\t\t0.90148123 * b_ +\n\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t(-0.27087943 +\n\t\t\t\t\t\t\t\t0.6122399 * b_ +\n\t\t\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t\t\t(+0.00299215 -\n\t\t\t\t\t\t\t\t\t\t0.45399568 * b_ -\n\t\t\t\t\t\t\t\t\t\t0.14661872 * a_))));\n\n\tlet k = C_max / Math.min(L * ST_max[0], (1 - L) * ST_max[1]);\n\n\tlet C_a = L * S_mid;\n\tlet C_b = (1 - L) * T_mid;\n\tlet C_mid =\n\t\t0.9 *\n\t\tk *\n\t\tMath.sqrt(\n\t\t\tMath.sqrt(\n\t\t\t\t1 / (1 / (C_a * C_a * C_a * C_a) + 1 / (C_b * C_b * C_b * C_b))\n\t\t\t)\n\t\t);\n\n\tC_a = L * 0.4;\n\tC_b = (1 - L) * 0.8;\n\tlet C_0 = Math.sqrt(1 / (1 / (C_a * C_a) + 1 / (C_b * C_b)));\n\treturn [C_0, C_mid, C_max];\n}\n","/*\n\tAdapted from code by Björn Ottosson,\n\treleased under the MIT license:\n\n\tCopyright (c) 2021 Björn Ottosson\n\n\tPermission is hereby granted, free of charge, to any person obtaining a copy of\n\tthis software and associated documentation files (the \"Software\"), to deal in\n\tthe Software without restriction, including without limitation the rights to\n\tuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n\tof the Software, and to permit persons to whom the Software is furnished to do\n\tso, subject to the following conditions:\n\n\tThe above copyright notice and this permission notice shall be included in all\n\tcopies 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 THE\n\tSOFTWARE.\n */\n\nimport normalizeHue from '../util/normalizeHue.js';\nimport { get_Cs, toe } from './helpers.js';\n\nexport default function convertOklabToOkhsl(lab) {\n\tconst l = lab.l !== undefined ? lab.l : 0;\n\tconst a = lab.a !== undefined ? lab.a : 0;\n\tconst b = lab.b !== undefined ? lab.b : 0;\n\n\tconst ret = { mode: 'okhsl', l: toe(l) };\n\n\tif (lab.alpha !== undefined) {\n\t\tret.alpha = lab.alpha;\n\t}\n\tlet c = Math.sqrt(a * a + b * b);\n\tif (!c) {\n\t\tret.s = 0;\n\t\treturn ret;\n\t}\n\tlet [C_0, C_mid, C_max] = get_Cs(l, a / c, b / c);\n\tlet s;\n\tif (c < C_mid) {\n\t\tlet k_0 = 0;\n\t\tlet k_1 = 0.8 * C_0;\n\t\tlet k_2 = 1 - k_1 / C_mid;\n\t\tlet t = (c - k_0) / (k_1 + k_2 * (c - k_0));\n\t\ts = t * 0.8;\n\t} else {\n\t\tlet k_0 = C_mid;\n\t\tlet k_1 = (0.2 * C_mid * C_mid * 1.25 * 1.25) / C_0;\n\t\tlet k_2 = 1 - k_1 / (C_max - C_mid);\n\t\tlet t = (c - k_0) / (k_1 + k_2 * (c - k_0));\n\t\ts = 0.8 + 0.2 * t;\n\t}\n\tif (s) {\n\t\tret.s = s;\n\t\tret.h = normalizeHue((Math.atan2(b, a) * 180) / Math.PI);\n\t}\n\treturn ret;\n}\n","/*\n\tAdapted from code by Björn Ottosson,\n\treleased under the MIT license:\n\n\tCopyright (c) 2021 Björn Ottosson\n\n\tPermission is hereby granted, free of charge, to any person obtaining a copy of\n\tthis software and associated documentation files (the \"Software\"), to deal in\n\tthe Software without restriction, including without limitation the rights to\n\tuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n\tof the Software, and to permit persons to whom the Software is furnished to do\n\tso, subject to the following conditions:\n\n\tThe above copyright notice and this permission notice shall be included in all\n\tcopies 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 THE\n\tSOFTWARE.\n */\n\nimport { toe_inv, get_Cs } from './helpers.js';\n\nexport default function convertOkhslToOklab(hsl) {\n\tlet h = hsl.h !== undefined ? hsl.h : 0;\n\tlet s = hsl.s !== undefined ? hsl.s : 0;\n\tlet l = hsl.l !== undefined ? hsl.l : 0;\n\n\tconst ret = { mode: 'oklab', l: toe_inv(l) };\n\n\tif (hsl.alpha !== undefined) {\n\t\tret.alpha = hsl.alpha;\n\t}\n\n\tif (!s || l === 1) {\n\t\tret.a = ret.b = 0;\n\t\treturn ret;\n\t}\n\n\tlet a_ = Math.cos((h / 180) * Math.PI);\n\tlet b_ = Math.sin((h / 180) * Math.PI);\n\tlet [C_0, C_mid, C_max] = get_Cs(ret.l, a_, b_);\n\tlet t, k_0, k_1, k_2;\n\tif (s < 0.8) {\n\t\tt = 1.25 * s;\n\t\tk_0 = 0;\n\t\tk_1 = 0.8 * C_0;\n\t\tk_2 = 1 - k_1 / C_mid;\n\t} else {\n\t\tt = 5 * (s - 0.8);\n\t\tk_0 = C_mid;\n\t\tk_1 = (0.2 * C_mid * C_mid * 1.25 * 1.25) / C_0;\n\t\tk_2 = 1 - k_1 / (C_max - C_mid);\n\t}\n\tlet C = k_0 + (t * k_1) / (1 - k_2 * t);\n\tret.a = C * a_;\n\tret.b = C * b_;\n\n\treturn ret;\n}\n","import convertRgbToOklab from '../oklab/convertRgbToOklab.js';\nimport convertOklabToRgb from '../oklab/convertOklabToRgb.js';\nimport convertOklabToOkhsl from './convertOklabToOkhsl.js';\nimport convertOkhslToOklab from './convertOkhslToOklab.js';\n\nimport modeHsl from '../hsl/definition.js';\n\nconst modeOkhsl = {\n\t...modeHsl,\n\tmode: 'okhsl',\n\tchannels: ['h', 's', 'l', 'alpha'],\n\tparse: ['--okhsl'],\n\tserialize: '--okhsl',\n\tfromMode: {\n\t\toklab: convertOklabToOkhsl,\n\t\trgb: c => convertOklabToOkhsl(convertRgbToOklab(c))\n\t},\n\ttoMode: {\n\t\toklab: convertOkhslToOklab,\n\t\trgb: c => convertOklabToRgb(convertOkhslToOklab(c))\n\t}\n};\n\nexport default modeOkhsl;\n","/*\n\tAdapted from code by Björn Ottosson,\n\treleased under the MIT license:\n\n\tCopyright (c) 2021 Björn Ottosson\n\n\tPermission is hereby granted, free of charge, to any person obtaining a copy of\n\tthis software and associated documentation files (the \"Software\"), to deal in\n\tthe Software without restriction, including without limitation the rights to\n\tuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n\tof the Software, and to permit persons to whom the Software is furnished to do\n\tso, subject to the following conditions:\n\n\tThe above copyright notice and this permission notice shall be included in all\n\tcopies 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 THE\n\tSOFTWARE.\n */\n\nimport normalizeHue from '../util/normalizeHue.js';\nimport convertOklabToLrgb from '../oklab/convertOklabToLrgb.js';\nimport { get_ST_max, toe_inv, toe } from '../okhsl/helpers.js';\n\nexport default function convertOklabToOkhsv(lab) {\n\tlet l = lab.l !== undefined ? lab.l : 0;\n\tlet a = lab.a !== undefined ? lab.a : 0;\n\tlet b = lab.b !== undefined ? lab.b : 0;\n\n\tlet c = Math.sqrt(a * a + b * b);\n\n\t// TODO: c = 0\n\tlet a_ = c ? a / c : 1;\n\tlet b_ = c ? b / c : 1;\n\n\tlet [S_max, T] = get_ST_max(a_, b_);\n\tlet S_0 = 0.5;\n\tlet k = 1 - S_0 / S_max;\n\n\tlet t = T / (c + l * T);\n\tlet L_v = t * l;\n\tlet C_v = t * c;\n\n\tlet L_vt = toe_inv(L_v);\n\tlet C_vt = (C_v * L_vt) / L_v;\n\n\tlet rgb_scale = convertOklabToLrgb({ l: L_vt, a: a_ * C_vt, b: b_ * C_vt });\n\tlet scale_L = Math.cbrt(\n\t\t1 / Math.max(rgb_scale.r, rgb_scale.g, rgb_scale.b, 0)\n\t);\n\n\tl = l / scale_L;\n\tc = ((c / scale_L) * toe(l)) / l;\n\tl = toe(l);\n\n\tconst ret = {\n\t\tmode: 'okhsv',\n\t\ts: c ? ((S_0 + T) * C_v) / (T * S_0 + T * k * C_v) : 0,\n\t\tv: l ? l / L_v : 0\n\t};\n\tif (ret.s) {\n\t\tret.h = normalizeHue((Math.atan2(b, a) * 180) / Math.PI);\n\t}\n\tif (lab.alpha !== undefined) {\n\t\tret.alpha = lab.alpha;\n\t}\n\treturn ret;\n}\n","/*\n\tCopyright (c) 2021 Björn Ottosson\n\n\tPermission is hereby granted, free of charge, to any person obtaining a copy of\n\tthis software and associated documentation files (the \"Software\"), to deal in\n\tthe Software without restriction, including without limitation the rights to\n\tuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n\tof the Software, and to permit persons to whom the Software is furnished to do\n\tso, subject to the following conditions:\n\n\tThe above copyright notice and this permission notice shall be included in all\n\tcopies 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 THE\n\tSOFTWARE.\n */\n\nimport convertOklabToLrgb from '../oklab/convertOklabToLrgb.js';\nimport { get_ST_max, toe_inv } from '../okhsl/helpers.js';\n\nexport default function convertOkhsvToOklab(hsv) {\n\tconst ret = { mode: 'oklab' };\n\tif (hsv.alpha !== undefined) {\n\t\tret.alpha = hsv.alpha;\n\t}\n\n\tconst h = hsv.h !== undefined ? hsv.h : 0;\n\tconst s = hsv.s !== undefined ? hsv.s : 0;\n\tconst v = hsv.v !== undefined ? hsv.v : 0;\n\n\tconst a_ = Math.cos((h / 180) * Math.PI);\n\tconst b_ = Math.sin((h / 180) * Math.PI);\n\n\tconst [S_max, T] = get_ST_max(a_, b_);\n\tconst S_0 = 0.5;\n\tconst k = 1 - S_0 / S_max;\n\tconst L_v = 1 - (s * S_0) / (S_0 + T - T * k * s);\n\tconst C_v = (s * T * S_0) / (S_0 + T - T * k * s);\n\n\tconst L_vt = toe_inv(L_v);\n\tconst C_vt = (C_v * L_vt) / L_v;\n\tconst rgb_scale = convertOklabToLrgb({\n\t\tl: L_vt,\n\t\ta: a_ * C_vt,\n\t\tb: b_ * C_vt\n\t});\n\tconst scale_L = Math.cbrt(\n\t\t1 / Math.max(rgb_scale.r, rgb_scale.g, rgb_scale.b, 0)\n\t);\n\n\tconst L_new = toe_inv(v * L_v);\n\tconst C = (C_v * L_new) / L_v;\n\n\tret.l = L_new * scale_L;\n\tret.a = C * a_ * scale_L;\n\tret.b = C * b_ * scale_L;\n\n\treturn ret;\n}\n","import convertRgbToOklab from '../oklab/convertRgbToOklab.js';\nimport convertOklabToRgb from '../oklab/convertOklabToRgb.js';\nimport convertOklabToOkhsv from './convertOklabToOkhsv.js';\nimport convertOkhsvToOklab from './convertOkhsvToOklab.js';\n\nimport modeHsv from '../hsv/definition.js';\n\nconst modeOkhsv = {\n\t...modeHsv,\n\tmode: 'okhsv',\n\tchannels: ['h', 's', 'v', 'alpha'],\n\tparse: ['--okhsv'],\n\tserialize: '--okhsv',\n\tfromMode: {\n\t\toklab: convertOklabToOkhsv,\n\t\trgb: c => convertOklabToOkhsv(convertRgbToOklab(c))\n\t},\n\ttoMode: {\n\t\toklab: convertOkhsvToOklab,\n\t\trgb: c => convertOklabToRgb(convertOkhsvToOklab(c))\n\t}\n};\n\nexport default modeOkhsv;\n","import convertOklabToLrgb from './convertOklabToLrgb.js';\nimport convertLrgbToOklab from './convertLrgbToOklab.js';\nimport convertRgbToOklab from './convertRgbToOklab.js';\nimport convertOklabToRgb from './convertOklabToRgb.js';\nimport parseOklab from './parseOklab.js';\n\nimport lab from '../lab/definition.js';\n\n/*\n\tOklab, a perceptual color space for image processing by Björn Ottosson\n\tReference: https://bottosson.github.io/posts/oklab/\n */\n\nconst definition = {\n\t...lab,\n\tmode: 'oklab',\n\n\ttoMode: {\n\t\tlrgb: convertOklabToLrgb,\n\t\trgb: convertOklabToRgb\n\t},\n\n\tfromMode: {\n\t\tlrgb: convertLrgbToOklab,\n\t\trgb: convertRgbToOklab\n\t},\n\n\tranges: {\n\t\tl: [0, 1],\n\t\ta: [-0.4, 0.4],\n\t\tb: [-0.4, 0.4]\n\t},\n\n\tparse: [parseOklab],\n\tserialize: c =>\n\t\t`oklab(${c.l !== undefined ? c.l : 'none'} ${\n\t\t\tc.a !== undefined ? c.a : 'none'\n\t\t} ${c.b !== undefined ? c.b : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`\n};\n\nexport default definition;\n","import { Tok } from '../parse.js';\n\nfunction parseOklab(color, parsed) {\n\tif (!parsed || parsed[0] !== 'oklab') {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'oklab' };\n\tconst [, l, a, b, alpha] = parsed;\n\tif (l.type === Tok.Hue || a.type === Tok.Hue || b.type === Tok.Hue) {\n\t\treturn undefined;\n\t}\n\tif (l.type !== Tok.None) {\n\t\tres.l = Math.min(\n\t\t\tMath.max(0, l.type === Tok.Number ? l.value : l.value / 100),\n\t\t\t1\n\t\t);\n\t}\n\tif (a.type !== Tok.None) {\n\t\tres.a = a.type === Tok.Number ? a.value : (a.value * 0.4) / 100;\n\t}\n\tif (b.type !== Tok.None) {\n\t\tres.b = b.type === Tok.Number ? b.value : (b.value * 0.4) / 100;\n\t}\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseOklab;\n","import lch from '../lch/definition.js';\nimport convertLabToLch from '../lch/convertLabToLch.js';\nimport convertLchToLab from '../lch/convertLchToLab.js';\nimport convertOklabToRgb from '../oklab/convertOklabToRgb.js';\nimport convertRgbToOklab from '../oklab/convertRgbToOklab.js';\nimport parseOklch from './parseOklch.js';\n\nconst definition = {\n\t...lch,\n\tmode: 'oklch',\n\n\ttoMode: {\n\t\toklab: c => convertLchToLab(c, 'oklab'),\n\t\trgb: c => convertOklabToRgb(convertLchToLab(c, 'oklab'))\n\t},\n\n\tfromMode: {\n\t\trgb: c => convertLabToLch(convertRgbToOklab(c), 'oklch'),\n\t\toklab: c => convertLabToLch(c, 'oklch')\n\t},\n\n\tparse: [parseOklch],\n\tserialize: c =>\n\t\t`oklch(${c.l !== undefined ? c.l : 'none'} ${\n\t\t\tc.c !== undefined ? c.c : 'none'\n\t\t} ${c.h !== undefined ? c.h : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`,\n\n\tranges: {\n\t\tl: [0, 1],\n\t\tc: [0, 0.4],\n\t\th: [0, 360]\n\t}\n};\n\nexport default definition;\n","import { Tok } from '../parse.js';\n\nfunction parseOklch(color, parsed) {\n\tif (!parsed || parsed[0] !== 'oklch') {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'oklch' };\n\tconst [, l, c, h, alpha] = parsed;\n\tif (l.type !== Tok.None) {\n\t\tif (l.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.l = Math.min(\n\t\t\tMath.max(0, l.type === Tok.Number ? l.value : l.value / 100),\n\t\t\t1\n\t\t);\n\t}\n\tif (c.type !== Tok.None) {\n\t\tres.c = Math.max(\n\t\t\t0,\n\t\t\tc.type === Tok.Number ? c.value : (c.value * 0.4) / 100\n\t\t);\n\t}\n\tif (h.type !== Tok.None) {\n\t\tif (h.type === Tok.Percentage) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.h = h.value;\n\t}\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseOklch;\n","/*\n\tConvert Display P3 values to CIE XYZ D65\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nimport convertRgbToLrgb from '../lrgb/convertRgbToLrgb.js';\n\nconst convertP3ToXyz65 = rgb => {\n\tlet { r, g, b, alpha } = convertRgbToLrgb(rgb);\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx:\n\t\t\t0.486570948648216 * r +\n\t\t\t0.265667693169093 * g +\n\t\t\t0.1982172852343625 * b,\n\t\ty:\n\t\t\t0.2289745640697487 * r +\n\t\t\t0.6917385218365062 * g +\n\t\t\t0.079286914093745 * b,\n\t\tz: 0.0 * r + 0.0451133818589026 * g + 1.043944368900976 * b\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertP3ToXyz65;\n","/*\n\tCIE XYZ D65 values to Display P3.\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nimport convertLrgbToRgb from '../lrgb/convertLrgbToRgb.js';\n\nconst convertXyz65ToP3 = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = convertLrgbToRgb(\n\t\t{\n\t\t\tr:\n\t\t\t\tx * 2.4934969119414263 -\n\t\t\t\ty * 0.9313836179191242 -\n\t\t\t\t0.402710784450717 * z,\n\t\t\tg:\n\t\t\t\tx * -0.8294889695615749 +\n\t\t\t\ty * 1.7626640603183465 +\n\t\t\t\t0.0236246858419436 * z,\n\t\t\tb:\n\t\t\t\tx * 0.0358458302437845 -\n\t\t\t\ty * 0.0761723892680418 +\n\t\t\t\t0.9568845240076871 * z\n\t\t},\n\t\t'p3'\n\t);\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz65ToP3;\n","import rgb from '../rgb/definition.js';\nimport convertP3ToXyz65 from './convertP3ToXyz65.js';\nimport convertXyz65ToP3 from './convertXyz65ToP3.js';\nimport convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\nimport convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\n\nconst definition = {\n\t...rgb,\n\tmode: 'p3',\n\tparse: ['display-p3'],\n\tserialize: 'display-p3',\n\n\tfromMode: {\n\t\trgb: color => convertXyz65ToP3(convertRgbToXyz65(color)),\n\t\txyz65: convertXyz65ToP3\n\t},\n\n\ttoMode: {\n\t\trgb: color => convertXyz65ToRgb(convertP3ToXyz65(color)),\n\t\txyz65: convertP3ToXyz65\n\t}\n};\n\nexport default definition;\n","/*\n\tConvert CIE XYZ D50 values to ProPhoto RGB\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nconst gamma = v => {\n\tlet abs = Math.abs(v);\n\tif (abs >= 1 / 512) {\n\t\treturn Math.sign(v) * Math.pow(abs, 1 / 1.8);\n\t}\n\treturn 16 * v;\n};\n\nconst convertXyz50ToProphoto = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = {\n\t\tmode: 'prophoto',\n\t\tr: gamma(\n\t\t\tx * 1.3457868816471585 -\n\t\t\t\ty * 0.2555720873797946 -\n\t\t\t\t0.0511018649755453 * z\n\t\t),\n\t\tg: gamma(\n\t\t\tx * -0.5446307051249019 +\n\t\t\t\ty * 1.5082477428451466 +\n\t\t\t\t0.0205274474364214 * z\n\t\t),\n\t\tb: gamma(x * 0.0 + y * 0.0 + 1.2119675456389452 * z)\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz50ToProphoto;\n","/*\n\tConvert ProPhoto RGB values to CIE XYZ D50\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nconst linearize = (v = 0) => {\n\tlet abs = Math.abs(v);\n\tif (abs >= 16 / 512) {\n\t\treturn Math.sign(v) * Math.pow(abs, 1.8);\n\t}\n\treturn v / 16;\n};\n\nconst convertProphotoToXyz50 = prophoto => {\n\tlet r = linearize(prophoto.r);\n\tlet g = linearize(prophoto.g);\n\tlet b = linearize(prophoto.b);\n\tlet res = {\n\t\tmode: 'xyz50',\n\t\tx:\n\t\t\t0.7977666449006423 * r +\n\t\t\t0.1351812974005331 * g +\n\t\t\t0.0313477341283922 * b,\n\t\ty:\n\t\t\t0.2880748288194013 * r +\n\t\t\t0.7118352342418731 * g +\n\t\t\t0.0000899369387256 * b,\n\t\tz: 0 * r + 0 * g + 0.8251046025104602 * b\n\t};\n\tif (prophoto.alpha !== undefined) {\n\t\tres.alpha = prophoto.alpha;\n\t}\n\treturn res;\n};\n\nexport default convertProphotoToXyz50;\n","import rgb from '../rgb/definition.js';\n\nimport convertXyz50ToProphoto from './convertXyz50ToProphoto.js';\nimport convertProphotoToXyz50 from './convertProphotoToXyz50.js';\n\nimport convertXyz50ToRgb from '../xyz50/convertXyz50ToRgb.js';\nimport convertRgbToXyz50 from '../xyz50/convertRgbToXyz50.js';\n\n/*\n\tProPhoto RGB Color space\n\n\tReferences:\n\t\t* https://en.wikipedia.org/wiki/ProPhoto_RGB_color_space\n */\n\nconst definition = {\n\t...rgb,\n\tmode: 'prophoto',\n\tparse: ['prophoto-rgb'],\n\tserialize: 'prophoto-rgb',\n\n\tfromMode: {\n\t\txyz50: convertXyz50ToProphoto,\n\t\trgb: color => convertXyz50ToProphoto(convertRgbToXyz50(color))\n\t},\n\n\ttoMode: {\n\t\txyz50: convertProphotoToXyz50,\n\t\trgb: color => convertXyz50ToRgb(convertProphotoToXyz50(color))\n\t}\n};\n\nexport default definition;\n","/*\n\tConvert CIE XYZ D65 values to Rec. 2020\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\t* https://www.itu.int/rec/R-REC-BT.2020/en\n*/\n\nconst α = 1.09929682680944;\nconst β = 0.018053968510807;\nconst gamma = v => {\n\tconst abs = Math.abs(v);\n\tif (abs > β) {\n\t\treturn (Math.sign(v) || 1) * (α * Math.pow(abs, 0.45) - (α - 1));\n\t}\n\treturn 4.5 * v;\n};\n\nconst convertXyz65ToRec2020 = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = {\n\t\tmode: 'rec2020',\n\t\tr: gamma(\n\t\t\tx * 1.7166511879712683 -\n\t\t\t\ty * 0.3556707837763925 -\n\t\t\t\t0.2533662813736599 * z\n\t\t),\n\t\tg: gamma(\n\t\t\tx * -0.6666843518324893 +\n\t\t\t\ty * 1.6164812366349395 +\n\t\t\t\t0.0157685458139111 * z\n\t\t),\n\t\tb: gamma(\n\t\t\tx * 0.0176398574453108 -\n\t\t\t\ty * 0.0427706132578085 +\n\t\t\t\t0.9421031212354739 * z\n\t\t)\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz65ToRec2020;\n","/*\n\tConvert Rec. 2020 values to CIE XYZ D65\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\t* https://www.itu.int/rec/R-REC-BT.2020/en\n*/\n\nconst α = 1.09929682680944;\nconst β = 0.018053968510807;\n\nconst linearize = (v = 0) => {\n\tlet abs = Math.abs(v);\n\tif (abs < β * 4.5) {\n\t\treturn v / 4.5;\n\t}\n\treturn (Math.sign(v) || 1) * Math.pow((abs + α - 1) / α, 1 / 0.45);\n};\n\nconst convertRec2020ToXyz65 = rec2020 => {\n\tlet r = linearize(rec2020.r);\n\tlet g = linearize(rec2020.g);\n\tlet b = linearize(rec2020.b);\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx:\n\t\t\t0.6369580483012911 * r +\n\t\t\t0.1446169035862083 * g +\n\t\t\t0.1688809751641721 * b,\n\t\ty:\n\t\t\t0.262700212011267 * r +\n\t\t\t0.6779980715188708 * g +\n\t\t\t0.059301716469862 * b,\n\t\tz: 0 * r + 0.0280726930490874 * g + 1.0609850577107909 * b\n\t};\n\tif (rec2020.alpha !== undefined) {\n\t\tres.alpha = rec2020.alpha;\n\t}\n\treturn res;\n};\n\nexport default convertRec2020ToXyz65;\n","import rgb from '../rgb/definition.js';\n\nimport convertXyz65ToRec2020 from './convertXyz65ToRec2020.js';\nimport convertRec2020ToXyz65 from './convertRec2020ToXyz65.js';\n\nimport convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\nimport convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\n\nconst definition = {\n\t...rgb,\n\tmode: 'rec2020',\n\n\tfromMode: {\n\t\txyz65: convertXyz65ToRec2020,\n\t\trgb: color => convertXyz65ToRec2020(convertRgbToXyz65(color))\n\t},\n\n\ttoMode: {\n\t\txyz65: convertRec2020ToXyz65,\n\t\trgb: color => convertXyz65ToRgb(convertRec2020ToXyz65(color))\n\t},\n\n\tparse: ['rec2020'],\n\tserialize: 'rec2020'\n};\n\nexport default definition;\n","export const bias = 0.00379307325527544933;\nexport const bias_cbrt = Math.cbrt(bias);\n","import convertRgbToLrgb from '../lrgb/convertRgbToLrgb.js';\nimport { bias, bias_cbrt } from './constants.js';\n\nconst transfer = v => Math.cbrt(v) - bias_cbrt;\n\nconst convertRgbToXyb = color => {\n\tconst { r, g, b, alpha } = convertRgbToLrgb(color);\n\tconst l = transfer(0.3 * r + 0.622 * g + 0.078 * b + bias);\n\tconst m = transfer(0.23 * r + 0.692 * g + 0.078 * b + bias);\n\tconst s = transfer(\n\t\t0.24342268924547819 * r +\n\t\t\t0.20476744424496821 * g +\n\t\t\t0.5518098665095536 * b +\n\t\t\tbias\n\t);\n\tconst res = {\n\t\tmode: 'xyb',\n\t\tx: (l - m) / 2,\n\t\ty: (l + m) / 2,\n\t\t/* Apply default chroma from luma (subtract Y from B) */\n\t\tb: s - (l + m) / 2\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertRgbToXyb;\n","import convertLrgbToRgb from '../lrgb/convertLrgbToRgb.js';\nimport { bias, bias_cbrt } from './constants.js';\n\nconst transfer = v => Math.pow(v + bias_cbrt, 3);\n\nconst convertXybToRgb = ({ x, y, b, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (b === undefined) b = 0;\n\tconst l = transfer(x + y) - bias;\n\tconst m = transfer(y - x) - bias;\n\t/* Account for chroma from luma: add Y back to B */\n\tconst s = transfer(b + y) - bias;\n\n\tconst res = convertLrgbToRgb({\n\t\tr:\n\t\t\t11.031566904639861 * l -\n\t\t\t9.866943908131562 * m -\n\t\t\t0.16462299650829934 * s,\n\t\tg:\n\t\t\t-3.2541473810744237 * l +\n\t\t\t4.418770377582723 * m -\n\t\t\t0.16462299650829934 * s,\n\t\tb:\n\t\t\t-3.6588512867136815 * l +\n\t\t\t2.7129230459360922 * m +\n\t\t\t1.9459282407775895 * s\n\t});\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertXybToRgb;\n","import { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport convertRgbToXyb from './convertRgbToXyb.js';\nimport convertXybToRgb from './convertXybToRgb.js';\n\n/*\n\tThe XYB color space, used in JPEG XL.\n\tReference: https://ds.jpeg.org/whitepapers/jpeg-xl-whitepaper.pdf\n*/\n\nconst definition = {\n\tmode: 'xyb',\n\tchannels: ['x', 'y', 'b', 'alpha'],\n\tparse: ['--xyb'],\n\tserialize: '--xyb',\n\n\ttoMode: {\n\t\trgb: convertXybToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToXyb\n\t},\n\n\tranges: {\n\t\tx: [-0.0154, 0.0281],\n\t\ty: [0, 0.8453],\n\t\tb: [-0.2778, 0.388]\n\t},\n\n\tinterpolate: {\n\t\tx: interpolatorLinear,\n\t\ty: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n","/*\n\tThe XYZ D50 color space\n\t-----------------------\n */\n\nimport convertXyz50ToRgb from './convertXyz50ToRgb.js';\nimport convertXyz50ToLab from '../lab/convertXyz50ToLab.js';\nimport convertRgbToXyz50 from './convertRgbToXyz50.js';\nimport convertLabToXyz50 from '../lab/convertLabToXyz50.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst definition = {\n\tmode: 'xyz50',\n\tparse: ['xyz-d50'],\n\tserialize: 'xyz-d50',\n\n\ttoMode: {\n\t\trgb: convertXyz50ToRgb,\n\t\tlab: convertXyz50ToLab\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToXyz50,\n\t\tlab: convertLabToXyz50\n\t},\n\n\tchannels: ['x', 'y', 'z', 'alpha'],\n\n\tranges: {\n\t\tx: [0, 0.964],\n\t\ty: [0, 0.999],\n\t\tz: [0, 0.825]\n\t},\n\n\tinterpolate: {\n\t\tx: interpolatorLinear,\n\t\ty: interpolatorLinear,\n\t\tz: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n","/*\n\tThe XYZ D65 color space\n\t-----------------------\n */\n\nimport convertXyz65ToRgb from './convertXyz65ToRgb.js';\nimport convertRgbToXyz65 from './convertRgbToXyz65.js';\n\nimport convertXyz65ToXyz50 from './convertXyz65ToXyz50.js';\nimport convertXyz50ToXyz65 from './convertXyz50ToXyz65.js';\n\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst definition = {\n\tmode: 'xyz65',\n\n\ttoMode: {\n\t\trgb: convertXyz65ToRgb,\n\t\txyz50: convertXyz65ToXyz50\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToXyz65,\n\t\txyz50: convertXyz50ToXyz65\n\t},\n\n\tranges: {\n\t\tx: [0, 0.95],\n\t\ty: [0, 1],\n\t\tz: [0, 1.088]\n\t},\n\n\tchannels: ['x', 'y', 'z', 'alpha'],\n\n\tparse: ['xyz', 'xyz-d65'],\n\tserialize: 'xyz-d65',\n\n\tinterpolate: {\n\t\tx: interpolatorLinear,\n\t\ty: interpolatorLinear,\n\t\tz: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n","/*\n\tChromatic adaptation of CIE XYZ from D65 to D50 white point\n\tusing the Bradford method.\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_ChromAdapt.html\t\n*/\n\nconst convertXyz65ToXyz50 = xyz65 => {\n\tlet { x, y, z, alpha } = xyz65;\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = {\n\t\tmode: 'xyz50',\n\t\tx:\n\t\t\t1.0479298208405488 * x +\n\t\t\t0.0229467933410191 * y -\n\t\t\t0.0501922295431356 * z,\n\t\ty:\n\t\t\t0.0296278156881593 * x +\n\t\t\t0.990434484573249 * y -\n\t\t\t0.0170738250293851 * z,\n\t\tz:\n\t\t\t-0.0092430581525912 * x +\n\t\t\t0.0150551448965779 * y +\n\t\t\t0.7518742899580008 * z\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz65ToXyz50;\n","/*\n\tChromatic adaptation of CIE XYZ from D50 to D65 white point\n\tusing the Bradford method.\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_ChromAdapt.html\t\n*/\n\nconst convertXyz50ToXyz65 = xyz50 => {\n\tlet { x, y, z, alpha } = xyz50;\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx:\n\t\t\t0.9554734527042182 * x -\n\t\t\t0.0230985368742614 * y +\n\t\t\t0.0632593086610217 * z,\n\t\ty:\n\t\t\t-0.0283697069632081 * x +\n\t\t\t1.0099954580058226 * y +\n\t\t\t0.021041398966943 * z,\n\t\tz:\n\t\t\t0.0123140016883199 * x -\n\t\t\t0.0205076964334779 * y +\n\t\t\t1.3303659366080753 * z\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz50ToXyz65;\n","import convertRgbToYiq from './convertRgbToYiq.js';\nimport convertYiqToRgb from './convertYiqToRgb.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\n/*\n\tYIQ Color Space\n\n\tReferences\n\t----------\n\n\tWikipedia:\n\t\thttps://en.wikipedia.org/wiki/YIQ\n\n\t\"Measuring perceived color difference using YIQ NTSC\n\ttransmission color space in mobile applications\"\n\t\t\n\t\tby Yuriy Kotsarenko, Fernando Ramos in:\n\t\tProgramación Matemática y Software (2010) \n\n\tAvailable at:\n\t\t\n\t\thttp://www.progmat.uaem.mx:8080/artVol2Num2/Articulo3Vol2Num2.pdf\n */\n\nconst definition = {\n\tmode: 'yiq',\n\n\ttoMode: {\n\t\trgb: convertYiqToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToYiq\n\t},\n\n\tchannels: ['y', 'i', 'q', 'alpha'],\n\n\tparse: ['--yiq'],\n\tserialize: '--yiq',\n\n\tranges: {\n\t\ti: [-0.595, 0.595],\n\t\tq: [-0.522, 0.522]\n\t},\n\n\tinterpolate: {\n\t\ty: interpolatorLinear,\n\t\ti: interpolatorLinear,\n\t\tq: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n","const convertYiqToRgb = ({ y, i, q, alpha }) => {\n\tif (y === undefined) y = 0;\n\tif (i === undefined) i = 0;\n\tif (q === undefined) q = 0;\n\tconst res = {\n\t\tmode: 'rgb',\n\t\tr: y + 0.95608445 * i + 0.6208885 * q,\n\t\tg: y - 0.27137664 * i - 0.6486059 * q,\n\t\tb: y - 1.10561724 * i + 1.70250126 * q\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertYiqToRgb;\n","const convertRgbToYiq = ({ r, g, b, alpha }) => {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\tconst res = {\n\t\tmode: 'yiq',\n\t\ty: 0.29889531 * r + 0.58662247 * g + 0.11448223 * b,\n\t\ti: 0.59597799 * r - 0.2741761 * g - 0.32180189 * b,\n\t\tq: 0.21147017 * r - 0.52261711 * g + 0.31114694 * b\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertRgbToYiq;\n","import converter from './converter.js';\nimport round from './round.js';\nimport prepare from './_prepare.js';\nimport { getMode } from './modes.js';\n\nlet twoDecimals = round(2);\n\nconst clamp = value => Math.max(0, Math.min(1, value || 0));\nconst fixup = value => Math.round(clamp(value) * 255);\n\nconst rgb = converter('rgb');\nconst hsl = converter('hsl');\n\nexport const serializeHex = color => {\n\tif (color === undefined) {\n\t\treturn undefined;\n\t}\n\n\tlet r = fixup(color.r);\n\tlet g = fixup(color.g);\n\tlet b = fixup(color.b);\n\n\treturn '#' + ((1 << 24) | (r << 16) | (g << 8) | b).toString(16).slice(1);\n};\n\nexport const serializeHex8 = color => {\n\tif (color === undefined) {\n\t\treturn undefined;\n\t}\n\n\tlet a = fixup(color.alpha !== undefined ? color.alpha : 1);\n\treturn serializeHex(color) + ((1 << 8) | a).toString(16).slice(1);\n};\n\nexport const serializeRgb = color => {\n\tif (color === undefined) {\n\t\treturn undefined;\n\t}\n\n\tlet r = fixup(color.r);\n\tlet g = fixup(color.g);\n\tlet b = fixup(color.b);\n\n\tif (color.alpha === undefined || color.alpha === 1) {\n\t\t// opaque color\n\t\treturn `rgb(${r}, ${g}, ${b})`;\n\t} else {\n\t\t// transparent color\n\t\treturn `rgba(${r}, ${g}, ${b}, ${twoDecimals(clamp(color.alpha))})`;\n\t}\n};\n\nexport const serializeHsl = color => {\n\tif (color === undefined) {\n\t\treturn undefined;\n\t}\n\n\tconst h = twoDecimals(color.h || 0);\n\tconst s = twoDecimals(clamp(color.s) * 100) + '%';\n\tconst l = twoDecimals(clamp(color.l) * 100) + '%';\n\n\tif (color.alpha === undefined || color.alpha === 1) {\n\t\t// opaque color\n\t\treturn `hsl(${h}, ${s}, ${l})`;\n\t} else {\n\t\t// transparent color\n\t\treturn `hsla(${h}, ${s}, ${l}, ${twoDecimals(clamp(color.alpha))})`;\n\t}\n};\n\nexport const formatCss = c => {\n\tconst color = prepare(c);\n\tif (!color) {\n\t\treturn undefined;\n\t}\n\tconst def = getMode(color.mode);\n\tif (!def.serialize || typeof def.serialize === 'string') {\n\t\tlet res = `color(${def.serialize || `--${color.mode}`} `;\n\t\tdef.channels.forEach((ch, i) => {\n\t\t\tif (ch !== 'alpha') {\n\t\t\t\tres +=\n\t\t\t\t\t(i ? ' ' : '') +\n\t\t\t\t\t(color[ch] !== undefined ? color[ch] : 'none');\n\t\t\t}\n\t\t});\n\t\tif (color.alpha !== undefined && color.alpha < 1) {\n\t\t\tres += ` / ${color.alpha}`;\n\t\t}\n\t\treturn res + ')';\n\t}\n\tif (typeof def.serialize === 'function') {\n\t\treturn def.serialize(color);\n\t}\n\treturn undefined;\n};\n\nexport const formatHex = c => serializeHex(rgb(c));\nexport const formatHex8 = c => serializeHex8(rgb(c));\nexport const formatRgb = c => serializeRgb(rgb(c));\nexport const formatHsl = c => serializeHsl(hsl(c));\n","// Color space definitions\nimport modeA98 from './a98/definition.js';\nimport modeCubehelix from './cubehelix/definition.js';\nimport modeDlab from './dlab/definition.js';\nimport modeDlch from './dlch/definition.js';\nimport modeHsi from './hsi/definition.js';\nimport modeHsl from './hsl/definition.js';\nimport modeHsv from './hsv/definition.js';\nimport modeHwb from './hwb/definition.js';\nimport modeItp from './itp/definition.js';\nimport modeJab from './jab/definition.js';\nimport modeJch from './jch/definition.js';\nimport modeLab from './lab/definition.js';\nimport modeLab65 from './lab65/definition.js';\nimport modeLch from './lch/definition.js';\nimport modeLch65 from './lch65/definition.js';\nimport modeLchuv from './lchuv/definition.js';\nimport modeLrgb from './lrgb/definition.js';\nimport modeLuv from './luv/definition.js';\nimport modeOkhsl from './okhsl/modeOkhsl.js';\nimport modeOkhsv from './okhsv/modeOkhsv.js';\nimport modeOklab from './oklab/definition.js';\nimport modeOklch from './oklch/definition.js';\nimport modeP3 from './p3/definition.js';\nimport modeProphoto from './prophoto/definition.js';\nimport modeRec2020 from './rec2020/definition.js';\nimport modeRgb from './rgb/definition.js';\nimport modeXyb from './xyb/definition.js';\nimport modeXyz50 from './xyz50/definition.js';\nimport modeXyz65 from './xyz65/definition.js';\nimport modeYiq from './yiq/definition.js';\nimport { useMode } from './modes.js';\n\nexport { default as converter } from './converter.js';\n\nexport {\n\tserializeHex,\n\tserializeHex8,\n\tserializeRgb,\n\tserializeHsl,\n\tformatHex,\n\tformatHex8,\n\tformatRgb,\n\tformatHsl,\n\tformatCss\n} from './formatter.js';\n\nexport { default as colorsNamed } from './colors/named.js';\nexport { default as blend } from './blend.js';\nexport { default as random } from './random.js';\n\nexport {\n\tfixupHueShorter,\n\tfixupHueLonger,\n\tfixupHueIncreasing,\n\tfixupHueDecreasing\n} from './fixup/hue.js';\n\nexport { fixupAlpha } from './fixup/alpha.js';\n\nexport {\n\tmapper,\n\tmapAlphaMultiply,\n\tmapAlphaDivide,\n\tmapTransferLinear,\n\tmapTransferGamma\n} from './map.js';\n\nexport { average, averageAngle, averageNumber } from './average.js';\n\nexport { default as round } from './round.js';\nexport {\n\tinterpolate,\n\tinterpolateWith,\n\tinterpolateWithPremultipliedAlpha\n} from './interpolate/interpolate.js';\n\nexport { interpolatorLinear } from './interpolate/linear.js';\n\nexport { interpolatorPiecewise } from './interpolate/piecewise.js';\n\nexport {\n\tinterpolatorSplineBasis,\n\tinterpolatorSplineBasisClosed\n} from './interpolate/splineBasis.js';\n\nexport {\n\tinterpolatorSplineNatural,\n\tinterpolatorSplineNaturalClosed\n} from './interpolate/splineNatural.js';\n\nexport {\n\tinterpolatorSplineMonotone,\n\tinterpolatorSplineMonotone2,\n\tinterpolatorSplineMonotoneClosed\n} from './interpolate/splineMonotone.js';\n\nexport { lerp, unlerp, blerp, trilerp } from './interpolate/lerp.js';\nexport { default as samples } from './samples.js';\nexport {\n\tdisplayable,\n\tinGamut,\n\tclampRgb,\n\tclampChroma,\n\tclampGamut,\n\ttoGamut\n} from './clamp.js';\nexport { default as nearest } from './nearest.js';\nexport { useMode, getMode, useParser, removeParser } from './modes.js';\nexport { default as parse } from './parse.js';\n\nexport {\n\tdifferenceEuclidean,\n\tdifferenceCie76,\n\tdifferenceCie94,\n\tdifferenceCiede2000,\n\tdifferenceCmc,\n\tdifferenceHyab,\n\tdifferenceHueSaturation,\n\tdifferenceHueChroma,\n\tdifferenceHueNaive,\n\tdifferenceKotsarenkoRamos,\n\tdifferenceItp\n} from './difference.js';\n\nexport {\n\tfilterBrightness,\n\tfilterContrast,\n\tfilterSepia,\n\tfilterInvert,\n\tfilterSaturate,\n\tfilterGrayscale,\n\tfilterHueRotate\n} from './filter.js';\n\nexport {\n\tfilterDeficiencyProt,\n\tfilterDeficiencyDeuter,\n\tfilterDeficiencyTrit\n} from './deficiency.js';\n\n// Easings\nexport { default as easingMidpoint } from './easing/midpoint.js';\nexport {\n\teasingSmoothstep,\n\teasingSmoothstepInverse\n} from './easing/smoothstep.js';\nexport { default as easingSmootherstep } from './easing/smootherstep.js';\nexport { default as easingInOutSine } from './easing/inOutSine.js';\nexport { default as easingGamma } from './easing/gamma.js';\n\nexport {\n\tluminance as wcagLuminance,\n\tcontrast as wcagContrast\n} from './wcag.js';\n\nexport { default as parseHsl } from './hsl/parseHsl.js';\nexport { default as parseHwb } from './hwb/parseHwb.js';\nexport { default as parseLab } from './lab/parseLab.js';\nexport { default as parseLch } from './lch/parseLch.js';\nexport { default as parseNamed } from './rgb/parseNamed.js';\nexport { default as parseTransparent } from './rgb/parseTransparent.js';\nexport { default as parseHex } from './rgb/parseHex.js';\nexport { default as parseRgb } from './rgb/parseRgb.js';\nexport { default as parseHslLegacy } from './hsl/parseHslLegacy.js';\nexport { default as parseRgbLegacy } from './rgb/parseRgbLegacy.js';\nexport { default as parseOklab } from './oklab/parseOklab.js';\nexport { default as parseOklch } from './oklch/parseOklch.js';\n\nexport { default as convertA98ToXyz65 } from './a98/convertA98ToXyz65.js';\nexport { default as convertCubehelixToRgb } from './cubehelix/convertCubehelixToRgb.js';\nexport { default as convertDlchToLab65 } from './dlch/convertDlchToLab65.js';\nexport { default as convertHsiToRgb } from './hsi/convertHsiToRgb.js';\nexport { default as convertHslToRgb } from './hsl/convertHslToRgb.js';\nexport { default as convertHsvToRgb } from './hsv/convertHsvToRgb.js';\nexport { default as convertHwbToRgb } from './hwb/convertHwbToRgb.js';\nexport { default as convertItpToXyz65 } from './itp/convertItpToXyz65.js';\nexport { default as convertJabToJch } from './jch/convertJabToJch.js';\nexport { default as convertJabToRgb } from './jab/convertJabToRgb.js';\nexport { default as convertJabToXyz65 } from './jab/convertJabToXyz65.js';\nexport { default as convertJchToJab } from './jch/convertJchToJab.js';\nexport { default as convertLab65ToDlch } from './dlch/convertLab65ToDlch.js';\nexport { default as convertLab65ToRgb } from './lab65/convertLab65ToRgb.js';\nexport { default as convertLab65ToXyz65 } from './lab65/convertLab65ToXyz65.js';\nexport { default as convertLabToLch } from './lch/convertLabToLch.js';\nexport { default as convertLabToRgb } from './lab/convertLabToRgb.js';\nexport { default as convertLabToXyz50 } from './lab/convertLabToXyz50.js';\nexport { default as convertLchToLab } from './lch/convertLchToLab.js';\nexport { default as convertLchuvToLuv } from './lchuv/convertLchuvToLuv.js';\nexport { default as convertLrgbToOklab } from './oklab/convertLrgbToOklab.js';\nexport { default as convertLrgbToRgb } from './lrgb/convertLrgbToRgb.js';\nexport { default as convertLuvToLchuv } from './lchuv/convertLuvToLchuv.js';\nexport { default as convertLuvToXyz50 } from './luv/convertLuvToXyz50.js';\nexport { default as convertOkhslToOklab } from './okhsl/convertOkhslToOklab.js';\nexport { default as convertOkhsvToOklab } from './okhsv/convertOkhsvToOklab.js';\nexport { default as convertOklabToLrgb } from './oklab/convertOklabToLrgb.js';\nexport { default as convertOklabToOkhsl } from './okhsl/convertOklabToOkhsl.js';\nexport { default as convertOklabToOkhsv } from './okhsv/convertOklabToOkhsv.js';\nexport { default as convertOklabToRgb } from './oklab/convertOklabToRgb.js';\nexport { default as convertP3ToXyz65 } from './p3/convertP3ToXyz65.js';\nexport { default as convertProphotoToXyz50 } from './prophoto/convertProphotoToXyz50.js';\nexport { default as convertRec2020ToXyz65 } from './rec2020/convertRec2020ToXyz65.js';\nexport { default as convertRgbToCubehelix } from './cubehelix/convertRgbToCubehelix.js';\nexport { default as convertRgbToHsi } from './hsi/convertRgbToHsi.js';\nexport { default as convertRgbToHsl } from './hsl/convertRgbToHsl.js';\nexport { default as convertRgbToHsv } from './hsv/convertRgbToHsv.js';\nexport { default as convertRgbToHwb } from './hwb/convertRgbToHwb.js';\nexport { default as convertRgbToJab } from './jab/convertRgbToJab.js';\nexport { default as convertRgbToLab } from './lab/convertRgbToLab.js';\nexport { default as convertRgbToLab65 } from './lab65/convertRgbToLab65.js';\nexport { default as convertRgbToLrgb } from './lrgb/convertRgbToLrgb.js';\nexport { default as convertRgbToOklab } from './oklab/convertRgbToOklab.js';\nexport { default as convertRgbToXyb } from './xyb/convertRgbToXyb.js';\nexport { default as convertRgbToXyz50 } from './xyz50/convertRgbToXyz50.js';\nexport { default as convertRgbToXyz65 } from './xyz65/convertRgbToXyz65.js';\nexport { default as convertRgbToYiq } from './yiq/convertRgbToYiq.js';\nexport { default as convertXybToRgb } from './xyb/convertXybToRgb.js';\nexport { default as convertXyz50ToLab } from './lab/convertXyz50ToLab.js';\nexport { default as convertXyz50ToLuv } from './luv/convertXyz50ToLuv.js';\nexport { default as convertXyz50ToProphoto } from './prophoto/convertXyz50ToProphoto.js';\nexport { default as convertXyz50ToRgb } from './xyz50/convertXyz50ToRgb.js';\nexport { default as convertXyz50ToXyz65 } from './xyz65/convertXyz50ToXyz65.js';\nexport { default as convertXyz65ToA98 } from './a98/convertXyz65ToA98.js';\nexport { default as convertXyz65ToItp } from './itp/convertXyz65ToItp.js';\nexport { default as convertXyz65ToJab } from './jab/convertXyz65ToJab.js';\nexport { default as convertXyz65ToLab65 } from './lab65/convertXyz65ToLab65.js';\nexport { default as convertXyz65ToP3 } from './p3/convertXyz65ToP3.js';\nexport { default as convertXyz65ToRec2020 } from './rec2020/convertXyz65ToRec2020.js';\nexport { default as convertXyz65ToRgb } from './xyz65/convertXyz65ToRgb.js';\nexport { default as convertXyz65ToXyz50 } from './xyz65/convertXyz65ToXyz50.js';\nexport { default as convertYiqToRgb } from './yiq/convertYiqToRgb.js';\n\nexport {\n\tmodeA98,\n\tmodeCubehelix,\n\tmodeDlab,\n\tmodeDlch,\n\tmodeHsi,\n\tmodeHsl,\n\tmodeHsv,\n\tmodeHwb,\n\tmodeItp,\n\tmodeJab,\n\tmodeJch,\n\tmodeLab,\n\tmodeLab65,\n\tmodeLch,\n\tmodeLch65,\n\tmodeLchuv,\n\tmodeLrgb,\n\tmodeLuv,\n\tmodeOkhsl,\n\tmodeOkhsv,\n\tmodeOklab,\n\tmodeOklch,\n\tmodeP3,\n\tmodeProphoto,\n\tmodeRec2020,\n\tmodeRgb,\n\tmodeXyb,\n\tmodeXyz50,\n\tmodeXyz65,\n\tmodeYiq\n};\n\nexport const a98 = useMode(modeA98);\nexport const cubehelix = useMode(modeCubehelix);\nexport const dlab = useMode(modeDlab);\nexport const dlch = useMode(modeDlch);\nexport const hsi = useMode(modeHsi);\nexport const hsl = useMode(modeHsl);\nexport const hsv = useMode(modeHsv);\nexport const hwb = useMode(modeHwb);\nexport const itp = useMode(modeItp);\nexport const jab = useMode(modeJab);\nexport const jch = useMode(modeJch);\nexport const lab = useMode(modeLab);\nexport const lab65 = useMode(modeLab65);\nexport const lch = useMode(modeLch);\nexport const lch65 = useMode(modeLch65);\nexport const lchuv = useMode(modeLchuv);\nexport const lrgb = useMode(modeLrgb);\nexport const luv = useMode(modeLuv);\nexport const okhsl = useMode(modeOkhsl);\nexport const okhsv = useMode(modeOkhsv);\nexport const oklab = useMode(modeOklab);\nexport const oklch = useMode(modeOklch);\nexport const p3 = useMode(modeP3);\nexport const prophoto = useMode(modeProphoto);\nexport const rec2020 = useMode(modeRec2020);\nexport const rgb = useMode(modeRgb);\nexport const xyb = useMode(modeXyb);\nexport const xyz50 = useMode(modeXyz50);\nexport const xyz65 = useMode(modeXyz65);\nexport const yiq = useMode(modeYiq);\n","'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn Object.propertyIsEnumerable.call(target, symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n","var has = Object.prototype.hasOwnProperty;\n\nfunction find(iter, tar, key) {\n\tfor (key of iter.keys()) {\n\t\tif (dequal(key, tar)) return key;\n\t}\n}\n\nfunction dequal(foo, bar) {\n\tvar ctor, len, tmp;\n\tif (foo === bar) return true;\n\n\tif (foo && bar && (ctor=foo.constructor) === bar.constructor) {\n\t\tif (ctor === Date) return foo.getTime() === bar.getTime();\n\t\tif (ctor === RegExp) return foo.toString() === bar.toString();\n\n\t\tif (ctor === Array) {\n\t\t\tif ((len=foo.length) === bar.length) {\n\t\t\t\twhile (len-- && dequal(foo[len], bar[len]));\n\t\t\t}\n\t\t\treturn len === -1;\n\t\t}\n\n\t\tif (ctor === Set) {\n\t\t\tif (foo.size !== bar.size) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tfor (len of foo) {\n\t\t\t\ttmp = len;\n\t\t\t\tif (tmp && typeof tmp === 'object') {\n\t\t\t\t\ttmp = find(bar, tmp);\n\t\t\t\t\tif (!tmp) return false;\n\t\t\t\t}\n\t\t\t\tif (!bar.has(tmp)) return false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tif (ctor === Map) {\n\t\t\tif (foo.size !== bar.size) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tfor (len of foo) {\n\t\t\t\ttmp = len[0];\n\t\t\t\tif (tmp && typeof tmp === 'object') {\n\t\t\t\t\ttmp = find(bar, tmp);\n\t\t\t\t\tif (!tmp) return false;\n\t\t\t\t}\n\t\t\t\tif (!dequal(len[1], bar.get(tmp))) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tif (ctor === ArrayBuffer) {\n\t\t\tfoo = new Uint8Array(foo);\n\t\t\tbar = new Uint8Array(bar);\n\t\t} else if (ctor === DataView) {\n\t\t\tif ((len=foo.byteLength) === bar.byteLength) {\n\t\t\t\twhile (len-- && foo.getInt8(len) === bar.getInt8(len));\n\t\t\t}\n\t\t\treturn len === -1;\n\t\t}\n\n\t\tif (ArrayBuffer.isView(foo)) {\n\t\t\tif ((len=foo.byteLength) === bar.byteLength) {\n\t\t\t\twhile (len-- && foo[len] === bar[len]);\n\t\t\t}\n\t\t\treturn len === -1;\n\t\t}\n\n\t\tif (!ctor || typeof foo === 'object') {\n\t\t\tlen = 0;\n\t\t\tfor (ctor in foo) {\n\t\t\t\tif (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false;\n\t\t\t\tif (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false;\n\t\t\t}\n\t\t\treturn Object.keys(bar).length === len;\n\t\t}\n\t}\n\n\treturn foo !== foo && bar !== bar;\n}\n\nexports.dequal = dequal;","'use strict';\n\n/******************************************************************************\n * Created 2008-08-19.\n *\n * Dijkstra path-finding functions. Adapted from the Dijkstar Python project.\n *\n * Copyright (C) 2008\n *   Wyatt Baldwin <self@wyattbaldwin.com>\n *   All rights reserved\n *\n * Licensed under the MIT license.\n *\n *   http://www.opensource.org/licenses/mit-license.php\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,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *****************************************************************************/\nvar dijkstra = {\n  single_source_shortest_paths: function(graph, s, d) {\n    // Predecessor map for each node that has been encountered.\n    // node ID => predecessor node ID\n    var predecessors = {};\n\n    // Costs of shortest paths from s to all nodes encountered.\n    // node ID => cost\n    var costs = {};\n    costs[s] = 0;\n\n    // Costs of shortest paths from s to all nodes encountered; differs from\n    // `costs` in that it provides easy access to the node that currently has\n    // the known shortest path from s.\n    // XXX: Do we actually need both `costs` and `open`?\n    var open = dijkstra.PriorityQueue.make();\n    open.push(s, 0);\n\n    var closest,\n        u, v,\n        cost_of_s_to_u,\n        adjacent_nodes,\n        cost_of_e,\n        cost_of_s_to_u_plus_cost_of_e,\n        cost_of_s_to_v,\n        first_visit;\n    while (!open.empty()) {\n      // In the nodes remaining in graph that have a known cost from s,\n      // find the node, u, that currently has the shortest path from s.\n      closest = open.pop();\n      u = closest.value;\n      cost_of_s_to_u = closest.cost;\n\n      // Get nodes adjacent to u...\n      adjacent_nodes = graph[u] || {};\n\n      // ...and explore the edges that connect u to those nodes, updating\n      // the cost of the shortest paths to any or all of those nodes as\n      // necessary. v is the node across the current edge from u.\n      for (v in adjacent_nodes) {\n        if (adjacent_nodes.hasOwnProperty(v)) {\n          // Get the cost of the edge running from u to v.\n          cost_of_e = adjacent_nodes[v];\n\n          // Cost of s to u plus the cost of u to v across e--this is *a*\n          // cost from s to v that may or may not be less than the current\n          // known cost to v.\n          cost_of_s_to_u_plus_cost_of_e = cost_of_s_to_u + cost_of_e;\n\n          // If we haven't visited v yet OR if the current known cost from s to\n          // v is greater than the new cost we just found (cost of s to u plus\n          // cost of u to v across e), update v's cost in the cost list and\n          // update v's predecessor in the predecessor list (it's now u).\n          cost_of_s_to_v = costs[v];\n          first_visit = (typeof costs[v] === 'undefined');\n          if (first_visit || cost_of_s_to_v > cost_of_s_to_u_plus_cost_of_e) {\n            costs[v] = cost_of_s_to_u_plus_cost_of_e;\n            open.push(v, cost_of_s_to_u_plus_cost_of_e);\n            predecessors[v] = u;\n          }\n        }\n      }\n    }\n\n    if (typeof d !== 'undefined' && typeof costs[d] === 'undefined') {\n      var msg = ['Could not find a path from ', s, ' to ', d, '.'].join('');\n      throw new Error(msg);\n    }\n\n    return predecessors;\n  },\n\n  extract_shortest_path_from_predecessor_list: function(predecessors, d) {\n    var nodes = [];\n    var u = d;\n    var predecessor;\n    while (u) {\n      nodes.push(u);\n      predecessor = predecessors[u];\n      u = predecessors[u];\n    }\n    nodes.reverse();\n    return nodes;\n  },\n\n  find_path: function(graph, s, d) {\n    var predecessors = dijkstra.single_source_shortest_paths(graph, s, d);\n    return dijkstra.extract_shortest_path_from_predecessor_list(\n      predecessors, d);\n  },\n\n  /**\n   * A very naive priority queue implementation.\n   */\n  PriorityQueue: {\n    make: function (opts) {\n      var T = dijkstra.PriorityQueue,\n          t = {},\n          key;\n      opts = opts || {};\n      for (key in T) {\n        if (T.hasOwnProperty(key)) {\n          t[key] = T[key];\n        }\n      }\n      t.queue = [];\n      t.sorter = opts.sorter || T.default_sorter;\n      return t;\n    },\n\n    default_sorter: function (a, b) {\n      return a.cost - b.cost;\n    },\n\n    /**\n     * Add a new item to the queue and ensure the highest priority element\n     * is at the front of the queue.\n     */\n    push: function (value, cost) {\n      var item = {value: value, cost: cost};\n      this.queue.push(item);\n      this.queue.sort(this.sorter);\n    },\n\n    /**\n     * Return the highest priority element in the queue.\n     */\n    pop: function () {\n      return this.queue.shift();\n    },\n\n    empty: function () {\n      return this.queue.length === 0;\n    }\n  }\n};\n\n\n// node.js module exports\nif (typeof module !== 'undefined') {\n  module.exports = dijkstra;\n}\n","'use strict'\n\nmodule.exports = function encodeUtf8 (input) {\n  var result = []\n  var size = input.length\n\n  for (var index = 0; index < size; index++) {\n    var point = input.charCodeAt(index)\n\n    if (point >= 0xD800 && point <= 0xDBFF && size > index + 1) {\n      var second = input.charCodeAt(index + 1)\n\n      if (second >= 0xDC00 && second <= 0xDFFF) {\n        // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n        point = (point - 0xD800) * 0x400 + second - 0xDC00 + 0x10000\n        index += 1\n      }\n    }\n\n    // US-ASCII\n    if (point < 0x80) {\n      result.push(point)\n      continue\n    }\n\n    // 2-byte UTF-8\n    if (point < 0x800) {\n      result.push((point >> 6) | 192)\n      result.push((point & 63) | 128)\n      continue\n    }\n\n    // 3-byte UTF-8\n    if (point < 0xD800 || (point >= 0xE000 && point < 0x10000)) {\n      result.push((point >> 12) | 224)\n      result.push(((point >> 6) & 63) | 128)\n      result.push((point & 63) | 128)\n      continue\n    }\n\n    // 4-byte UTF-8\n    if (point >= 0x10000 && point <= 0x10FFFF) {\n      result.push((point >> 18) | 240)\n      result.push(((point >> 12) & 63) | 128)\n      result.push(((point >> 6) & 63) | 128)\n      result.push((point & 63) | 128)\n      continue\n    }\n\n    // Invalid character\n    result.push(0xEF, 0xBF, 0xBD)\n  }\n\n  return new Uint8Array(result).buffer\n}\n","\"use strict\";\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\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 */\nfunction makeEmptyFunction(arg) {\n  return function () {\n    return arg;\n  };\n}\n/**\n * This function accepts and discards inputs; it has no side effects. This is\n * primarily useful idiomatically for overridable function endpoints which\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n */\n\n\nvar emptyFunction = function emptyFunction() {};\n\nemptyFunction.thatReturns = makeEmptyFunction;\nemptyFunction.thatReturnsFalse = makeEmptyFunction(false);\nemptyFunction.thatReturnsTrue = makeEmptyFunction(true);\nemptyFunction.thatReturnsNull = makeEmptyFunction(null);\n\nemptyFunction.thatReturnsThis = function () {\n  return this;\n};\n\nemptyFunction.thatReturnsArgument = function (arg) {\n  return arg;\n};\n\nmodule.exports = emptyFunction;","/**\n * Copyright (c) 2013-present, Facebook, Inc.\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'use strict';\n\nvar validateFormat = process.env.NODE_ENV !== \"production\" ? function (format) {\n  if (format === undefined) {\n    throw new Error('invariant(...): Second argument must be a string.');\n  }\n} : function (format) {};\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments to provide\n * information about what broke and what you were expecting.\n *\n * The invariant message will be stripped in production, but the invariant will\n * remain to ensure logic does not differ in production.\n */\n\nfunction invariant(condition, format) {\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  validateFormat(format);\n\n  if (!condition) {\n    var error;\n\n    if (format === undefined) {\n      error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n    } else {\n      var argIndex = 0;\n      error = new Error(format.replace(/%s/g, function () {\n        return String(args[argIndex++]);\n      }));\n      error.name = 'Invariant Violation';\n    }\n\n    error.framesToPop = 1; // Skip invariant's own stack frame.\n\n    throw error;\n  }\n}\n\nmodule.exports = invariant;","/**\n * Copyright (c) 2014-present, Facebook, Inc.\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';\n\nvar emptyFunction = require(\"./emptyFunction\");\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\n\nfunction printWarning(format) {\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\n  var argIndex = 0;\n  var message = 'Warning: ' + format.replace(/%s/g, function () {\n    return args[argIndex++];\n  });\n\n  if (typeof console !== 'undefined') {\n    console.error(message);\n  }\n\n  try {\n    // --- Welcome to debugging React ---\n    // This error was thrown as a convenience so that you can use this stack\n    // to find the callsite that caused this warning to fire.\n    throw new Error(message);\n  } catch (x) {}\n}\n\nvar warning = process.env.NODE_ENV !== \"production\" ? function (condition, format) {\n  if (format === undefined) {\n    throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\n  }\n\n  if (!condition) {\n    for (var _len2 = arguments.length, args = new Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n      args[_key2 - 2] = arguments[_key2];\n    }\n\n    printWarning.apply(void 0, [format].concat(args));\n  }\n} : emptyFunction;\nmodule.exports = warning;","/* eslint-disable no-var, prefer-template */\nvar uppercasePattern = /[A-Z]/g\nvar msPattern = /^ms-/\nvar cache = {}\n\nfunction toHyphenLower(match) {\n  return '-' + match.toLowerCase()\n}\n\nfunction hyphenateStyleName(name) {\n  if (cache.hasOwnProperty(name)) {\n    return cache[name]\n  }\n\n  var hName = name.replace(uppercasePattern, toHyphenLower)\n  return (cache[name] = msPattern.test(hName) ? '-' + hName : hName)\n}\n\nexport default hyphenateStyleName\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = createPrefixer;\n\nvar _prefixProperty = require('./utils/prefixProperty');\n\nvar _prefixProperty2 = _interopRequireDefault(_prefixProperty);\n\nvar _prefixValue = require('./utils/prefixValue');\n\nvar _prefixValue2 = _interopRequireDefault(_prefixValue);\n\nvar _addNewValuesOnly = require('./utils/addNewValuesOnly');\n\nvar _addNewValuesOnly2 = _interopRequireDefault(_addNewValuesOnly);\n\nvar _isObject = require('./utils/isObject');\n\nvar _isObject2 = _interopRequireDefault(_isObject);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction createPrefixer(_ref) {\n  var prefixMap = _ref.prefixMap,\n      plugins = _ref.plugins;\n\n  return function prefix(style) {\n    for (var property in style) {\n      var value = style[property];\n\n      // handle nested objects\n      if ((0, _isObject2.default)(value)) {\n        style[property] = prefix(value);\n        // handle array values\n      } else if (Array.isArray(value)) {\n        var combinedValue = [];\n\n        for (var i = 0, len = value.length; i < len; ++i) {\n          var processedValue = (0, _prefixValue2.default)(plugins, property, value[i], style, prefixMap);\n\n          (0, _addNewValuesOnly2.default)(combinedValue, processedValue || value[i]);\n        }\n\n        // only modify the value if it was touched\n        // by any plugin to prevent unnecessary mutations\n        if (combinedValue.length > 0) {\n          style[property] = combinedValue;\n        }\n      } else {\n        var _processedValue = (0, _prefixValue2.default)(plugins, property, value, style, prefixMap);\n\n        // only modify the value if it was touched\n        // by any plugin to prevent unnecessary mutations\n        if (_processedValue) {\n          style[property] = _processedValue;\n        }\n\n        style = (0, _prefixProperty2.default)(prefixMap, property, style);\n      }\n    }\n\n    return style;\n  };\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = crossFade;\n\nvar _cssInJsUtils = require('css-in-js-utils');\n\nvar CROSS_FADE_REGEX = /cross-fade\\(/g;\n// http://caniuse.com/#search=cross-fade\nvar prefixes = ['-webkit-', ''];\n\nfunction crossFade(property, value) {\n  if (typeof value === 'string' && !(0, _cssInJsUtils.isPrefixedValue)(value) && value.indexOf('cross-fade(') !== -1) {\n    return prefixes.map(function (prefix) {\n      return value.replace(CROSS_FADE_REGEX, prefix + 'cross-fade(');\n    });\n  }\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = imageSet;\n\nvar _isPrefixedValue = require('css-in-js-utils/lib/isPrefixedValue');\n\nvar _isPrefixedValue2 = _interopRequireDefault(_isPrefixedValue);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// http://caniuse.com/#feat=css-image-set\nvar prefixes = ['-webkit-', ''];\n\nfunction imageSet(property, value) {\n  if (typeof value === 'string' && !(0, _isPrefixedValue2.default)(value) && value.indexOf('image-set(') > -1) {\n    return prefixes.map(function (prefix) {\n      return value.replace(/image-set\\(/g, prefix + 'image-set(');\n    });\n  }\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = logical;\nvar alternativeProps = {\n  marginBlockStart: ['WebkitMarginBefore'],\n  marginBlockEnd: ['WebkitMarginAfter'],\n  marginInlineStart: ['WebkitMarginStart', 'MozMarginStart'],\n  marginInlineEnd: ['WebkitMarginEnd', 'MozMarginEnd'],\n  paddingBlockStart: ['WebkitPaddingBefore'],\n  paddingBlockEnd: ['WebkitPaddingAfter'],\n  paddingInlineStart: ['WebkitPaddingStart', 'MozPaddingStart'],\n  paddingInlineEnd: ['WebkitPaddingEnd', 'MozPaddingEnd'],\n  borderBlockStart: ['WebkitBorderBefore'],\n  borderBlockStartColor: ['WebkitBorderBeforeColor'],\n  borderBlockStartStyle: ['WebkitBorderBeforeStyle'],\n  borderBlockStartWidth: ['WebkitBorderBeforeWidth'],\n  borderBlockEnd: ['WebkitBorderAfter'],\n  borderBlockEndColor: ['WebkitBorderAfterColor'],\n  borderBlockEndStyle: ['WebkitBorderAfterStyle'],\n  borderBlockEndWidth: ['WebkitBorderAfterWidth'],\n  borderInlineStart: ['WebkitBorderStart', 'MozBorderStart'],\n  borderInlineStartColor: ['WebkitBorderStartColor', 'MozBorderStartColor'],\n  borderInlineStartStyle: ['WebkitBorderStartStyle', 'MozBorderStartStyle'],\n  borderInlineStartWidth: ['WebkitBorderStartWidth', 'MozBorderStartWidth'],\n  borderInlineEnd: ['WebkitBorderEnd', 'MozBorderEnd'],\n  borderInlineEndColor: ['WebkitBorderEndColor', 'MozBorderEndColor'],\n  borderInlineEndStyle: ['WebkitBorderEndStyle', 'MozBorderEndStyle'],\n  borderInlineEndWidth: ['WebkitBorderEndWidth', 'MozBorderEndWidth']\n};\n\nfunction logical(property, value, style) {\n  if (Object.prototype.hasOwnProperty.call(alternativeProps, property)) {\n    var alternativePropList = alternativeProps[property];\n    for (var i = 0, len = alternativePropList.length; i < len; ++i) {\n      style[alternativePropList[i]] = value;\n    }\n  }\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = position;\nfunction position(property, value) {\n  if (property === 'position' && value === 'sticky') {\n    return ['-webkit-sticky', 'sticky'];\n  }\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = sizing;\nvar prefixes = ['-webkit-', '-moz-', ''];\n\nvar properties = {\n  maxHeight: true,\n  maxWidth: true,\n  width: true,\n  height: true,\n  columnWidth: true,\n  minWidth: true,\n  minHeight: true\n};\nvar values = {\n  'min-content': true,\n  'max-content': true,\n  'fill-available': true,\n  'fit-content': true,\n  'contain-floats': true\n};\n\nfunction sizing(property, value) {\n  if (properties.hasOwnProperty(property) && values.hasOwnProperty(value)) {\n    return prefixes.map(function (prefix) {\n      return prefix + value;\n    });\n  }\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = transition;\n\nvar _hyphenateProperty = require('css-in-js-utils/lib/hyphenateProperty');\n\nvar _hyphenateProperty2 = _interopRequireDefault(_hyphenateProperty);\n\nvar _isPrefixedValue = require('css-in-js-utils/lib/isPrefixedValue');\n\nvar _isPrefixedValue2 = _interopRequireDefault(_isPrefixedValue);\n\nvar _capitalizeString = require('../utils/capitalizeString');\n\nvar _capitalizeString2 = _interopRequireDefault(_capitalizeString);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar properties = {\n  transition: true,\n  transitionProperty: true,\n  WebkitTransition: true,\n  WebkitTransitionProperty: true,\n  MozTransition: true,\n  MozTransitionProperty: true\n};\n\nvar prefixMapping = {\n  Webkit: '-webkit-',\n  Moz: '-moz-',\n  ms: '-ms-'\n};\n\nfunction prefixValue(value, propertyPrefixMap) {\n  if ((0, _isPrefixedValue2.default)(value)) {\n    return value;\n  }\n\n  // only split multi values, not cubic beziers\n  var multipleValues = value.split(/,(?![^()]*(?:\\([^()]*\\))?\\))/g);\n\n  for (var i = 0, len = multipleValues.length; i < len; ++i) {\n    var singleValue = multipleValues[i];\n    var values = [singleValue];\n    for (var property in propertyPrefixMap) {\n      var dashCaseProperty = (0, _hyphenateProperty2.default)(property);\n\n      if (singleValue.indexOf(dashCaseProperty) > -1 && dashCaseProperty !== 'order') {\n        var prefixes = propertyPrefixMap[property];\n        for (var j = 0, pLen = prefixes.length; j < pLen; ++j) {\n          // join all prefixes and create a new value\n          values.unshift(singleValue.replace(dashCaseProperty, prefixMapping[prefixes[j]] + dashCaseProperty));\n        }\n      }\n    }\n\n    multipleValues[i] = values.join(',');\n  }\n\n  return multipleValues.join(',');\n}\n\nfunction transition(property, value, style, propertyPrefixMap) {\n  // also check for already prefixed transitions\n  if (typeof value === 'string' && properties.hasOwnProperty(property)) {\n    var outputValue = prefixValue(value, propertyPrefixMap);\n    // if the property is already prefixed\n    var webkitOutput = outputValue.split(/,(?![^()]*(?:\\([^()]*\\))?\\))/g).filter(function (val) {\n      return !/-moz-|-ms-/.test(val);\n    }).join(',');\n\n    if (property.indexOf('Webkit') > -1) {\n      return webkitOutput;\n    }\n\n    var mozOutput = outputValue.split(/,(?![^()]*(?:\\([^()]*\\))?\\))/g).filter(function (val) {\n      return !/-webkit-|-ms-/.test(val);\n    }).join(',');\n\n    if (property.indexOf('Moz') > -1) {\n      return mozOutput;\n    }\n\n    style['Webkit' + (0, _capitalizeString2.default)(property)] = webkitOutput;\n    style['Moz' + (0, _capitalizeString2.default)(property)] = mozOutput;\n    return outputValue;\n  }\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = addNewValuesOnly;\nfunction addIfNew(list, value) {\n  if (list.indexOf(value) === -1) {\n    list.push(value);\n  }\n}\n\nfunction addNewValuesOnly(list, values) {\n  if (Array.isArray(values)) {\n    for (var i = 0, len = values.length; i < len; ++i) {\n      addIfNew(list, values[i]);\n    }\n  } else {\n    addIfNew(list, values);\n  }\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = capitalizeString;\nfunction capitalizeString(str) {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isObject;\nfunction isObject(value) {\n  return value instanceof Object && !Array.isArray(value);\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = prefixProperty;\n\nvar _capitalizeString = require('./capitalizeString');\n\nvar _capitalizeString2 = _interopRequireDefault(_capitalizeString);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction prefixProperty(prefixProperties, property, style) {\n  var requiredPrefixes = prefixProperties[property];\n\n  if (requiredPrefixes && style.hasOwnProperty(property)) {\n    var capitalizedProperty = (0, _capitalizeString2.default)(property);\n\n    for (var i = 0; i < requiredPrefixes.length; ++i) {\n      var prefixedProperty = requiredPrefixes[i] + capitalizedProperty;\n\n      if (!style[prefixedProperty]) {\n        style[prefixedProperty] = style[property];\n      }\n    }\n  }\n\n  return style;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = prefixValue;\nfunction prefixValue(plugins, property, value, style, metaData) {\n  for (var i = 0, len = plugins.length; i < len; ++i) {\n    var processedValue = plugins[i](property, value, style, metaData);\n\n    // we can stop processing if a value is returned\n    // as all plugin criteria are unique\n    if (processedValue) {\n      return processedValue;\n    }\n  }\n}","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n            r[k] = a[j];\n    return r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Lens = exports.lf = exports.lbu = exports.lb = exports.LensBuilder = exports.LensBuilderWithObject = exports.LensError = void 0;\nvar object_1 = require(\"./utils/object\");\nvar LENS_OPTIONAL_BREAK = Symbol(\"LENS_OPTIONAL_BREAK\");\nvar LensError = /** @class */ (function (_super) {\n    __extends(LensError, _super);\n    function LensError(m, lens, type, err, value) {\n        var _this = _super.call(this, m) || this;\n        _this.lens = lens;\n        _this.type = type;\n        _this.err = err;\n        _this.value = value;\n        // Set the prototype explicitly.\n        Object.setPrototypeOf(_this, LensError.prototype);\n        return _this;\n    }\n    return LensError;\n}(Error));\nexports.LensError = LensError;\nvar AbstractLensBuilder = /** @class */ (function () {\n    function AbstractLensBuilder(lens) {\n        this.lens = lens;\n    }\n    AbstractLensBuilder.prototype.get = function () {\n        return this.lens;\n    };\n    return AbstractLensBuilder;\n}());\nvar LensBuilderWithObject = /** @class */ (function (_super) {\n    __extends(LensBuilderWithObject, _super);\n    function LensBuilderWithObject(lens, obj) {\n        var _this = _super.call(this, lens) || this;\n        _this.obj = obj;\n        return _this;\n    }\n    LensBuilderWithObject.start = function (lensFactory, obj) {\n        return {\n            p: function (key) {\n                return new LensBuilderWithObject(lensFactory(key), obj);\n            },\n            pi: (function (key, fallback) {\n                var baseLens = lensFactory(key);\n                if (fallback !== undefined) {\n                    var lens = new Lens(function (s) { var _a; return ((_a = baseLens.get(s)) !== null && _a !== void 0 ? _a : fallback); }, baseLens.set, { from: baseLens.from, to: baseLens.to });\n                    return new LensBuilderWithObject(lens, obj);\n                }\n                baseLens._optional = true;\n                return new LensBuilderWithObject(baseLens, obj);\n            }),\n            i: function (index) {\n                // @ts-ignore\n                return new LensBuilderWithObject(lensFactory(index), obj);\n            },\n            find: function (cb) {\n                // @ts-ignore\n                return new LensBuilderWithObject(lensFactory(cb), obj);\n            },\n            findBy: function (key, value, isReverse) {\n                // @ts-ignore\n                return new LensBuilderWithObject(lensFactory(key, value, isReverse), obj);\n            },\n            get: function () {\n                return new Lens(function (s) { return s; }, function (s, v) { return v; }, { from: \"obj\", to: \"obj\" });\n            },\n            record: function (value, name) {\n                return Lens.buildLensRecording(new Lens(function (s) { return s; }, function (s, v) { return v; }, { from: \"obj\", to: \"obj\" }), value, name);\n            },\n            recordModify: function (fn, name) {\n                return Lens.buildLensModifyRecording(new Lens(function (s) { return s; }, function (s, v) { return v; }, { from: \"obj\", to: \"obj\" }), fn, {}, name);\n            },\n        };\n    };\n    LensBuilderWithObject.prototype.p = function (key) {\n        return new LensBuilderWithObject(this.lens.then(Lens.prop()(key)), this.obj);\n    };\n    LensBuilderWithObject.prototype.pi = function (key, fallback) {\n        var propLens = Lens.prop()(key);\n        if (fallback !== undefined) {\n            var lens = new Lens(function (s) { var _a; return ((_a = propLens.get(s)) !== null && _a !== void 0 ? _a : fallback); }, propLens.set, { from: propLens.from, to: propLens.to });\n            return new LensBuilderWithObject(this.lens.then(lens), this.obj);\n        }\n        propLens._optional = true;\n        return new LensBuilderWithObject(this.lens.then(propLens), this.obj);\n    };\n    LensBuilderWithObject.prototype.i = function (index) {\n        // @ts-ignore\n        return new LensBuilderWithObject(this.lens.then(Lens.index()(index)), this.obj);\n    };\n    LensBuilderWithObject.prototype.find = function (cb) {\n        // @ts-ignore\n        return new LensBuilderWithObject(this.lens.then(Lens.find()(cb)), this.obj);\n    };\n    LensBuilderWithObject.prototype.findBy = function (key, value, isReverse) {\n        // @ts-ignore\n        return new LensBuilderWithObject(this.lens.then(Lens.findBy()(key, value, isReverse)), this.obj);\n    };\n    LensBuilderWithObject.prototype.set = function (value) {\n        return this.lens.set(this.obj, value);\n    };\n    LensBuilderWithObject.prototype.modify = function (fn) {\n        return this.lens.modify(this.obj, fn);\n    };\n    return LensBuilderWithObject;\n}(AbstractLensBuilder));\nexports.LensBuilderWithObject = LensBuilderWithObject;\nvar LensBuilder = /** @class */ (function (_super) {\n    __extends(LensBuilder, _super);\n    function LensBuilder(lens, lensGetters) {\n        var _this = _super.call(this, lens) || this;\n        _this.lensGetters = lensGetters;\n        return _this;\n    }\n    LensBuilder.start = function (lensFactory, lensGetters) {\n        var _this = this;\n        return {\n            p: function (key) {\n                return new LensBuilder(lensFactory(key), lensGetters);\n            },\n            pi: (function (key, fallback) {\n                var baseLens = lensFactory(key);\n                if (fallback !== undefined) {\n                    var lens = new Lens(function (s) { var _a; return ((_a = baseLens.get(s)) !== null && _a !== void 0 ? _a : fallback); }, baseLens.set, { from: baseLens.from, to: baseLens.to });\n                    return new LensBuilder(lens, lensGetters);\n                }\n                baseLens._optional = true;\n                return new LensBuilder(baseLens, lensGetters);\n            }),\n            i: function (index) {\n                // @ts-ignore\n                return new LensBuilder(lensFactory(index), lensGetters);\n            },\n            find: function (cb) {\n                // @ts-ignore\n                return new LensBuilder(lensFactory(cb), _this.lensGetters);\n            },\n            findBy: function (key, value, isReverse) {\n                // @ts-ignore\n                return new LensBuilder(lensFactory(key, value, isReverse), _this.lensGetters);\n            },\n            get: function () {\n                return new Lens(function (s) { return s; }, function (s, v) { return v; }, { from: \"obj\", to: \"obj\" });\n            },\n            record: function (value, name) {\n                return Lens.buildLensRecording(new Lens(function (s) { return s; }, function (s, v) { return v; }, { from: \"obj\", to: \"obj\" }), value, name);\n            },\n            recordModify: function (fn, name) {\n                return Lens.buildLensModifyRecording(new Lens(function (s) { return s; }, function (s, v) { return v; }, { from: \"obj\", to: \"obj\" }), fn, {}, name);\n            },\n        };\n    };\n    LensBuilder.prototype.p = function (key) {\n        return new LensBuilder(this.lens.then(Lens.prop()(key)), this.lensGetters);\n    };\n    LensBuilder.prototype.i = function (index) {\n        // @ts-ignore\n        return new LensBuilder(this.lens.then(Lens.index()(index)), this.lensGetters);\n    };\n    LensBuilder.prototype.pi = function (key, fallback) {\n        var propLens = Lens.prop()(key);\n        if (fallback !== undefined) {\n            var lens = new Lens(function (s) { var _a; return ((_a = propLens.get(s)) !== null && _a !== void 0 ? _a : fallback); }, propLens.set, { from: propLens.from, to: propLens.to });\n            return new LensBuilder(this.lens.then(lens), this.lensGetters);\n        }\n        propLens._optional = true;\n        return new LensBuilder(this.lens.then(propLens), this.lensGetters);\n    };\n    LensBuilder.prototype.find = function (cb) {\n        // @ts-ignore\n        return new LensBuilder(this.lens.then(Lens.find()(cb)), this.lensGetters);\n    };\n    LensBuilder.prototype.findBy = function (key, value, isReverse) {\n        // @ts-ignore\n        return new LensBuilder(this.lens.then(Lens.findBy()(key, value, isReverse)), this.lensGetters);\n    };\n    LensBuilder.prototype.set = function (obj, value) {\n        return this.lens.set(obj, value);\n    };\n    LensBuilder.prototype.modify = function (obj, fn) {\n        return this.lens.modify(obj, fn);\n    };\n    LensBuilder.prototype.record = function (value, name) {\n        return Lens.buildLensRecording(this.lens, value, name);\n    };\n    LensBuilder.prototype.recordModify = function (fn, name) {\n        return Lens.buildLensModifyRecording(this.lens, fn, this.lensGetters, name);\n    };\n    return LensBuilder;\n}(AbstractLensBuilder));\nexports.LensBuilder = LensBuilder;\nfunction lb() {\n    return Lens.build({});\n}\nexports.lb = lb;\nfunction lbu(lens) {\n    return Lens.build(lens);\n}\nexports.lbu = lbu;\nfunction lf(obj) {\n    return Lens.from(obj);\n}\nexports.lf = lf;\nvar Lens = /** @class */ (function () {\n    function Lens(getter, setter, args) {\n        var _this = this;\n        this._optional = false;\n        this._getRaw = function (obj) {\n            try {\n                return getter(obj);\n            }\n            catch (e) {\n                var nestedErr = e instanceof LensError ? e.err : e;\n                throw new LensError(\"LensError: Error when getting \" + args.from + \" -> \" + args.to + \" (\" + nestedErr.message + \")\", _this, \"get\", nestedErr);\n            }\n        };\n        this.get = function (obj) {\n            var result = _this._getRaw(obj);\n            if (result === LENS_OPTIONAL_BREAK) {\n                return undefined;\n            }\n            return result;\n        };\n        this.set = function (obj, value) {\n            try {\n                return setter(obj, value);\n            }\n            catch (e) {\n                var nestedErr = e instanceof LensError ? e.err : e;\n                throw new LensError(\"LensError: Error when setting \" + args.from + \" -> \" + args.to + \" - \" + value + \" (\" + nestedErr.message + \")\", _this, \"set\", nestedErr, value);\n            }\n        };\n        this.from = Array.isArray(args.from) ? args.from : [args.from];\n        this.to = args.to;\n    }\n    Lens.buildLensModifyRecording = function (aLens, modifyFn, lensGetters, name) {\n        var _this = this;\n        var lens = aLens instanceof Lens ? aLens : aLens.get();\n        var value = { v: undefined };\n        var fn = function (obj) {\n            var getters = object_1.ObjectUtils.keys(lensGetters).reduce(function (memo, key) {\n                // @ts-ignore\n                memo[key] = lensGetters[key].get(obj);\n                return memo;\n            }, {});\n            return lens.modify(obj, function (v) {\n                var newValue = modifyFn(v, getters);\n                value.v = newValue;\n                return newValue;\n            });\n        };\n        // eslint-disable-next-line @typescript-eslint/unbound-method\n        fn.toString = function () {\n            return lens.toString() + \" = `modify`\";\n        };\n        var log = function (startName) {\n            for (var _i = 0, _a = Object.keys(lensGetters); _i < _a.length; _i++) {\n                var g = _a[_i];\n                var l = lensGetters[g];\n                var lensGetterStr = __spreadArrays([startName], l.from.slice(1), [l.to]).join(\" -> \");\n                console.log(\"getter: \", lensGetterStr);\n            }\n            if (name != null) {\n                console.log(name + \": \");\n            }\n            console.log(__spreadArrays([startName], lens.from.slice(1), [lens.to]).join(\" -> \"), \"=\", \"`modify`\");\n        };\n        return {\n            fn: fn,\n            str: fn.toString(),\n            lens: lens,\n            lensGetters: lensGetters,\n            value: value,\n            log: log,\n            type: \"modify\",\n            prepend: function (newLensOrBuilder) {\n                var newLens = newLensOrBuilder instanceof Lens ? newLensOrBuilder : newLensOrBuilder.get();\n                var combinedLens = newLens.then(lens);\n                var newLensGetters = object_1.ObjectUtils.keys(lensGetters).reduce(function (memo, key) {\n                    var newGetter = newLens.then(lensGetters[key]);\n                    memo[key] = newGetter;\n                    return memo;\n                }, {});\n                return _this.buildLensModifyRecording(combinedLens, modifyFn, newLensGetters, name);\n            },\n        };\n    };\n    Lens.buildLensRecording = function (aLens, value, name) {\n        var _this = this;\n        var lens = aLens instanceof Lens ? aLens : aLens.get();\n        var fn = function (obj) {\n            return lens.set(obj, value);\n        };\n        // eslint-disable-next-line @typescript-eslint/unbound-method\n        fn.toString = function () {\n            return lens.toString() + \" = \" + value;\n        };\n        var log = function (startName) {\n            if (name != null) {\n                console.log(name + \": \");\n            }\n            console.log(__spreadArrays([startName], lens.from.slice(1), [lens.to]).join(\" -> \"), \"=\", value);\n        };\n        return {\n            fn: fn,\n            str: fn.toString(),\n            lens: lens,\n            value: { v: value },\n            log: log,\n            type: \"set\",\n            prepend: function (newLensOrBuilder) {\n                var newLens = newLensOrBuilder instanceof Lens ? newLensOrBuilder : newLensOrBuilder.get();\n                var combinedLens = newLens.then(lens);\n                return _this.buildLensRecording(combinedLens, value, name);\n            },\n        };\n    };\n    Lens.build = function (lens) {\n        return LensBuilder.start(Lens.prop(), lens);\n    };\n    Lens.from = function (obj) {\n        return LensBuilderWithObject.start(Lens.prop(), obj);\n    };\n    Lens.propKey = function (key) {\n        return new Lens(function (s) { return s[key]; }, function (s, v) {\n            var _a;\n            if (s != null && s[key] === v) {\n                return s;\n            }\n            if (Array.isArray(s)) {\n                // @ts-ignore\n                return s.map(function (e, i) { return (i === key ? v : e); });\n            }\n            else {\n                return __assign(__assign({}, s), (_a = {}, _a[key] = v, _a));\n            }\n        }, { from: \"obj\", to: \"\" + key });\n    };\n    Lens.prop = function () {\n        return function (key) { return Lens.propKey(key); };\n    };\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    Lens.index = function () {\n        return function (index) {\n            return new Lens(function (a) { return a[index]; }, function (a, v) { return (a[index] === v ? a : a.map(function (e, i) { return (i === index ? v : e); })); }, { from: \"obj\", to: \"\" + index });\n        };\n    };\n    Lens.find = function () {\n        return function (cb) {\n            return new Lens(function (a) { return a.filter(cb)[0]; }, function (a, v) {\n                var changed = false;\n                var result = a.map(function (e) {\n                    if (cb(e) && e !== v) {\n                        changed = true;\n                        return v;\n                    }\n                    return e;\n                });\n                return (changed ? result : a);\n            }, { from: \"obj\", to: \"find()\" });\n        };\n    };\n    Lens.findBy = function () {\n        return function (key, value, isReverse) {\n            return new Lens(function (a) {\n                if (isReverse) {\n                    return a.filter(function (e) { return e[key] === value; }).reverse()[0];\n                }\n                else {\n                    return a.filter(function (e) { return e[key] === value; })[0];\n                }\n            }, function (a, v) {\n                var index = -1;\n                if (isReverse) {\n                    for (var i = a.length - 1; i >= 0; i--) {\n                        if (a[i][key] === value) {\n                            index = i;\n                            break;\n                        }\n                    }\n                }\n                else {\n                    for (var i = 0; i < a.length; i++) {\n                        if (a[i][key] === value) {\n                            index = i;\n                            break;\n                        }\n                    }\n                }\n                if (index === -1 || a[index] === v) {\n                    return a;\n                }\n                return a.map(function (e, i) { return (i === index ? v : e); });\n            }, { from: \"obj\", to: key + \" == \" + value });\n        };\n    };\n    Lens.prototype.modify = function (obj, f) {\n        if (this._optional) {\n            var current = this._getRaw(obj);\n            if (current === LENS_OPTIONAL_BREAK) {\n                return obj;\n            }\n            return this.set(obj, f(current));\n        }\n        return this.set(obj, f(this.get(obj)));\n    };\n    Lens.prototype.then = function (lens) {\n        var isOptional = this._optional;\n        var thisGetRaw = this._getRaw;\n        var thisSet = this.set;\n        var result = new Lens(function (obj) {\n            var nextObj = thisGetRaw(obj);\n            if (isOptional && (nextObj == null || nextObj === LENS_OPTIONAL_BREAK)) {\n                return LENS_OPTIONAL_BREAK;\n            }\n            return lens._getRaw(nextObj);\n        }, function (obj, value) {\n            var parent = thisGetRaw(obj);\n            if (isOptional && (parent == null || parent === LENS_OPTIONAL_BREAK)) {\n                return obj;\n            }\n            var newParent = lens.set(parent, value);\n            if (newParent === parent) {\n                return obj;\n            }\n            return thisSet(obj, newParent);\n        }, {\n            from: __spreadArrays(this.from, [this.to]),\n            to: lens.to,\n        });\n        if (this._optional || lens._optional) {\n            result._optional = true;\n        }\n        return result;\n    };\n    Lens.prototype.toString = function () {\n        if (this.from != null && this.to != null) {\n            return this.from.join(\" -> \") + \" -> \" + this.to;\n        }\n        else {\n            return \"Lens\";\n        }\n    };\n    Lens.prototype.record = function (value, name) {\n        return Lens.buildLensRecording(this, value, name);\n    };\n    Lens.prototype.recordModify = function (fn, name) {\n        return Lens.buildLensModifyRecording(this, fn, {}, name);\n    };\n    return Lens;\n}());\nexports.Lens = Lens;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ObjectUtils = void 0;\nvar ObjectUtils;\n(function (ObjectUtils) {\n    function keys(obj) {\n        return Object.keys(obj);\n    }\n    ObjectUtils.keys = keys;\n})(ObjectUtils = exports.ObjectUtils || (exports.ObjectUtils = {}));\n//# sourceMappingURL=object.js.map","'use strict';\n\nvar uc_micro = require('uc.micro');\n\nfunction reFactory (opts) {\n  const re = {};\n  opts = opts || {};\n\n  re.src_Any = uc_micro.Any.source;\n  re.src_Cc = uc_micro.Cc.source;\n  re.src_Z = uc_micro.Z.source;\n  re.src_P = uc_micro.P.source;\n\n  // \\p{\\Z\\P\\Cc\\CF} (white spaces + control + format + punctuation)\n  re.src_ZPCc = [re.src_Z, re.src_P, re.src_Cc].join('|');\n\n  // \\p{\\Z\\Cc} (white spaces + control)\n  re.src_ZCc = [re.src_Z, re.src_Cc].join('|');\n\n  // Experimental. List of chars, completely prohibited in links\n  // because can separate it from other part of text\n  const text_separators = '[><\\uff5c]';\n\n  // All possible word characters (everything without punctuation, spaces & controls)\n  // Defined via punctuation & spaces to save space\n  // Should be something like \\p{\\L\\N\\S\\M} (\\w but without `_`)\n  re.src_pseudo_letter = '(?:(?!' + text_separators + '|' + re.src_ZPCc + ')' + re.src_Any + ')';\n  // The same as abothe but without [0-9]\n  // var src_pseudo_letter_non_d = '(?:(?![0-9]|' + src_ZPCc + ')' + src_Any + ')';\n\n  re.src_ip4 =\n\n    '(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)';\n\n  // Prohibit any of \"@/[]()\" in user/pass to avoid wrong domain fetch.\n  re.src_auth = '(?:(?:(?!' + re.src_ZCc + '|[@/\\\\[\\\\]()]).)+@)?';\n\n  re.src_port =\n\n    '(?::(?:6(?:[0-4]\\\\d{3}|5(?:[0-4]\\\\d{2}|5(?:[0-2]\\\\d|3[0-5])))|[1-5]?\\\\d{1,4}))?';\n\n  re.src_host_terminator =\n\n    '(?=$|' + text_separators + '|' + re.src_ZPCc + ')' +\n    '(?!' + (opts['---'] ? '-(?!--)|' : '-|') + '_|:\\\\d|\\\\.-|\\\\.(?!$|' + re.src_ZPCc + '))';\n\n  re.src_path =\n\n    '(?:' +\n      '[/?#]' +\n        '(?:' +\n          '(?!' + re.src_ZCc + '|' + text_separators + '|[()[\\\\]{}.,\"\\'?!\\\\-;]).|' +\n          '\\\\[(?:(?!' + re.src_ZCc + '|\\\\]).)*\\\\]|' +\n          '\\\\((?:(?!' + re.src_ZCc + '|[)]).)*\\\\)|' +\n          '\\\\{(?:(?!' + re.src_ZCc + '|[}]).)*\\\\}|' +\n          '\\\\\"(?:(?!' + re.src_ZCc + '|[\"]).)+\\\\\"|' +\n          \"\\\\'(?:(?!\" + re.src_ZCc + \"|[']).)+\\\\'|\" +\n\n          // allow `I'm_king` if no pair found\n          \"\\\\'(?=\" + re.src_pseudo_letter + '|[-])|' +\n\n          // google has many dots in \"google search\" links (#66, #81).\n          // github has ... in commit range links,\n          // Restrict to\n          // - english\n          // - percent-encoded\n          // - parts of file path\n          // - params separator\n          // until more examples found.\n          '\\\\.{2,}[a-zA-Z0-9%/&]|' +\n\n          '\\\\.(?!' + re.src_ZCc + '|[.]|$)|' +\n          (opts['---']\n            ? '\\\\-(?!--(?:[^-]|$))(?:-*)|' // `---` => long dash, terminate\n            : '\\\\-+|'\n          ) +\n          // allow `,,,` in paths\n          ',(?!' + re.src_ZCc + '|$)|' +\n\n          // allow `;` if not followed by space-like char\n          ';(?!' + re.src_ZCc + '|$)|' +\n\n          // allow `!!!` in paths, but not at the end\n          '\\\\!+(?!' + re.src_ZCc + '|[!]|$)|' +\n\n          '\\\\?(?!' + re.src_ZCc + '|[?]|$)' +\n        ')+' +\n      '|\\\\/' +\n    ')?';\n\n  // Allow anything in markdown spec, forbid quote (\") at the first position\n  // because emails enclosed in quotes are far more common\n  re.src_email_name =\n\n    '[\\\\-;:&=\\\\+\\\\$,\\\\.a-zA-Z0-9_][\\\\-;:&=\\\\+\\\\$,\\\\\"\\\\.a-zA-Z0-9_]*';\n\n  re.src_xn =\n\n    'xn--[a-z0-9\\\\-]{1,59}';\n\n  // More to read about domain names\n  // http://serverfault.com/questions/638260/\n\n  re.src_domain_root =\n\n    // Allow letters & digits (http://test1)\n    '(?:' +\n      re.src_xn +\n      '|' +\n      re.src_pseudo_letter + '{1,63}' +\n    ')';\n\n  re.src_domain =\n\n    '(?:' +\n      re.src_xn +\n      '|' +\n      '(?:' + re.src_pseudo_letter + ')' +\n      '|' +\n      '(?:' + re.src_pseudo_letter + '(?:-|' + re.src_pseudo_letter + '){0,61}' + re.src_pseudo_letter + ')' +\n    ')';\n\n  re.src_host =\n\n    '(?:' +\n    // Don't need IP check, because digits are already allowed in normal domain names\n    //   src_ip4 +\n    // '|' +\n      '(?:(?:(?:' + re.src_domain + ')\\\\.)*' + re.src_domain/* _root */ + ')' +\n    ')';\n\n  re.tpl_host_fuzzy =\n\n    '(?:' +\n      re.src_ip4 +\n    '|' +\n      '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))' +\n    ')';\n\n  re.tpl_host_no_ip_fuzzy =\n\n    '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))';\n\n  re.src_host_strict =\n\n    re.src_host + re.src_host_terminator;\n\n  re.tpl_host_fuzzy_strict =\n\n    re.tpl_host_fuzzy + re.src_host_terminator;\n\n  re.src_host_port_strict =\n\n    re.src_host + re.src_port + re.src_host_terminator;\n\n  re.tpl_host_port_fuzzy_strict =\n\n    re.tpl_host_fuzzy + re.src_port + re.src_host_terminator;\n\n  re.tpl_host_port_no_ip_fuzzy_strict =\n\n    re.tpl_host_no_ip_fuzzy + re.src_port + re.src_host_terminator;\n\n  //\n  // Main rules\n  //\n\n  // Rude test fuzzy links by host, for quick deny\n  re.tpl_host_fuzzy_test =\n\n    'localhost|www\\\\.|\\\\.\\\\d{1,3}\\\\.|(?:\\\\.(?:%TLDS%)(?:' + re.src_ZPCc + '|>|$))';\n\n  re.tpl_email_fuzzy =\n\n      '(^|' + text_separators + '|\"|\\\\(|' + re.src_ZCc + ')' +\n      '(' + re.src_email_name + '@' + re.tpl_host_fuzzy_strict + ')';\n\n  re.tpl_link_fuzzy =\n      // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n      // but can start with > (markdown blockquote)\n      '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n      '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_fuzzy_strict + re.src_path + ')';\n\n  re.tpl_link_no_ip_fuzzy =\n      // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n      // but can start with > (markdown blockquote)\n      '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n      '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_no_ip_fuzzy_strict + re.src_path + ')';\n\n  return re\n}\n\n//\n// Helpers\n//\n\n// Merge objects\n//\nfunction assign (obj /* from1, from2, from3, ... */) {\n  const sources = Array.prototype.slice.call(arguments, 1);\n\n  sources.forEach(function (source) {\n    if (!source) { return }\n\n    Object.keys(source).forEach(function (key) {\n      obj[key] = source[key];\n    });\n  });\n\n  return obj\n}\n\nfunction _class (obj) { return Object.prototype.toString.call(obj) }\nfunction isString (obj) { return _class(obj) === '[object String]' }\nfunction isObject (obj) { return _class(obj) === '[object Object]' }\nfunction isRegExp (obj) { return _class(obj) === '[object RegExp]' }\nfunction isFunction (obj) { return _class(obj) === '[object Function]' }\n\nfunction escapeRE (str) { return str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&') }\n\n//\n\nconst defaultOptions = {\n  fuzzyLink: true,\n  fuzzyEmail: true,\n  fuzzyIP: false\n};\n\nfunction isOptionsObj (obj) {\n  return Object.keys(obj || {}).reduce(function (acc, k) {\n    /* eslint-disable-next-line no-prototype-builtins */\n    return acc || defaultOptions.hasOwnProperty(k)\n  }, false)\n}\n\nconst defaultSchemas = {\n  'http:': {\n    validate: function (text, pos, self) {\n      const tail = text.slice(pos);\n\n      if (!self.re.http) {\n        // compile lazily, because \"host\"-containing variables can change on tlds update.\n        self.re.http = new RegExp(\n          '^\\\\/\\\\/' + self.re.src_auth + self.re.src_host_port_strict + self.re.src_path, 'i'\n        );\n      }\n      if (self.re.http.test(tail)) {\n        return tail.match(self.re.http)[0].length\n      }\n      return 0\n    }\n  },\n  'https:': 'http:',\n  'ftp:': 'http:',\n  '//': {\n    validate: function (text, pos, self) {\n      const tail = text.slice(pos);\n\n      if (!self.re.no_http) {\n      // compile lazily, because \"host\"-containing variables can change on tlds update.\n        self.re.no_http = new RegExp(\n          '^' +\n          self.re.src_auth +\n          // Don't allow single-level domains, because of false positives like '//test'\n          // with code comments\n          '(?:localhost|(?:(?:' + self.re.src_domain + ')\\\\.)+' + self.re.src_domain_root + ')' +\n          self.re.src_port +\n          self.re.src_host_terminator +\n          self.re.src_path,\n\n          'i'\n        );\n      }\n\n      if (self.re.no_http.test(tail)) {\n        // should not be `://` & `///`, that protects from errors in protocol name\n        if (pos >= 3 && text[pos - 3] === ':') { return 0 }\n        if (pos >= 3 && text[pos - 3] === '/') { return 0 }\n        return tail.match(self.re.no_http)[0].length\n      }\n      return 0\n    }\n  },\n  'mailto:': {\n    validate: function (text, pos, self) {\n      const tail = text.slice(pos);\n\n      if (!self.re.mailto) {\n        self.re.mailto = new RegExp(\n          '^' + self.re.src_email_name + '@' + self.re.src_host_strict, 'i'\n        );\n      }\n      if (self.re.mailto.test(tail)) {\n        return tail.match(self.re.mailto)[0].length\n      }\n      return 0\n    }\n  }\n};\n\n// RE pattern for 2-character tlds (autogenerated by ./support/tlds_2char_gen.js)\n/* eslint-disable-next-line max-len */\nconst tlds_2ch_src_re = 'a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]';\n\n// DON'T try to make PRs with changes. Extend TLDs with LinkifyIt.tlds() instead\nconst tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф'.split('|');\n\nfunction resetScanCache (self) {\n  self.__index__ = -1;\n  self.__text_cache__ = '';\n}\n\nfunction createValidator (re) {\n  return function (text, pos) {\n    const tail = text.slice(pos);\n\n    if (re.test(tail)) {\n      return tail.match(re)[0].length\n    }\n    return 0\n  }\n}\n\nfunction createNormalizer () {\n  return function (match, self) {\n    self.normalize(match);\n  }\n}\n\n// Schemas compiler. Build regexps.\n//\nfunction compile (self) {\n  // Load & clone RE patterns.\n  const re = self.re = reFactory(self.__opts__);\n\n  // Define dynamic patterns\n  const tlds = self.__tlds__.slice();\n\n  self.onCompile();\n\n  if (!self.__tlds_replaced__) {\n    tlds.push(tlds_2ch_src_re);\n  }\n  tlds.push(re.src_xn);\n\n  re.src_tlds = tlds.join('|');\n\n  function untpl (tpl) { return tpl.replace('%TLDS%', re.src_tlds) }\n\n  re.email_fuzzy = RegExp(untpl(re.tpl_email_fuzzy), 'i');\n  re.link_fuzzy = RegExp(untpl(re.tpl_link_fuzzy), 'i');\n  re.link_no_ip_fuzzy = RegExp(untpl(re.tpl_link_no_ip_fuzzy), 'i');\n  re.host_fuzzy_test = RegExp(untpl(re.tpl_host_fuzzy_test), 'i');\n\n  //\n  // Compile each schema\n  //\n\n  const aliases = [];\n\n  self.__compiled__ = {}; // Reset compiled data\n\n  function schemaError (name, val) {\n    throw new Error('(LinkifyIt) Invalid schema \"' + name + '\": ' + val)\n  }\n\n  Object.keys(self.__schemas__).forEach(function (name) {\n    const val = self.__schemas__[name];\n\n    // skip disabled methods\n    if (val === null) { return }\n\n    const compiled = { validate: null, link: null };\n\n    self.__compiled__[name] = compiled;\n\n    if (isObject(val)) {\n      if (isRegExp(val.validate)) {\n        compiled.validate = createValidator(val.validate);\n      } else if (isFunction(val.validate)) {\n        compiled.validate = val.validate;\n      } else {\n        schemaError(name, val);\n      }\n\n      if (isFunction(val.normalize)) {\n        compiled.normalize = val.normalize;\n      } else if (!val.normalize) {\n        compiled.normalize = createNormalizer();\n      } else {\n        schemaError(name, val);\n      }\n\n      return\n    }\n\n    if (isString(val)) {\n      aliases.push(name);\n      return\n    }\n\n    schemaError(name, val);\n  });\n\n  //\n  // Compile postponed aliases\n  //\n\n  aliases.forEach(function (alias) {\n    if (!self.__compiled__[self.__schemas__[alias]]) {\n      // Silently fail on missed schemas to avoid errons on disable.\n      // schemaError(alias, self.__schemas__[alias]);\n      return\n    }\n\n    self.__compiled__[alias].validate =\n      self.__compiled__[self.__schemas__[alias]].validate;\n    self.__compiled__[alias].normalize =\n      self.__compiled__[self.__schemas__[alias]].normalize;\n  });\n\n  //\n  // Fake record for guessed links\n  //\n  self.__compiled__[''] = { validate: null, normalize: createNormalizer() };\n\n  //\n  // Build schema condition\n  //\n  const slist = Object.keys(self.__compiled__)\n    .filter(function (name) {\n      // Filter disabled & fake schemas\n      return name.length > 0 && self.__compiled__[name]\n    })\n    .map(escapeRE)\n    .join('|');\n  // (?!_) cause 1.5x slowdown\n  self.re.schema_test = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'i');\n  self.re.schema_search = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'ig');\n  self.re.schema_at_start = RegExp('^' + self.re.schema_search.source, 'i');\n\n  self.re.pretest = RegExp(\n    '(' + self.re.schema_test.source + ')|(' + self.re.host_fuzzy_test.source + ')|@',\n    'i'\n  );\n\n  //\n  // Cleanup\n  //\n\n  resetScanCache(self);\n}\n\n/**\n * class Match\n *\n * Match result. Single element of array, returned by [[LinkifyIt#match]]\n **/\nfunction Match (self, shift) {\n  const start = self.__index__;\n  const end = self.__last_index__;\n  const text = self.__text_cache__.slice(start, end);\n\n  /**\n   * Match#schema -> String\n   *\n   * Prefix (protocol) for matched string.\n   **/\n  this.schema = self.__schema__.toLowerCase();\n  /**\n   * Match#index -> Number\n   *\n   * First position of matched string.\n   **/\n  this.index = start + shift;\n  /**\n   * Match#lastIndex -> Number\n   *\n   * Next position after matched string.\n   **/\n  this.lastIndex = end + shift;\n  /**\n   * Match#raw -> String\n   *\n   * Matched string.\n   **/\n  this.raw = text;\n  /**\n   * Match#text -> String\n   *\n   * Notmalized text of matched string.\n   **/\n  this.text = text;\n  /**\n   * Match#url -> String\n   *\n   * Normalized url of matched string.\n   **/\n  this.url = text;\n}\n\nfunction createMatch (self, shift) {\n  const match = new Match(self, shift);\n\n  self.__compiled__[match.schema].normalize(match, self);\n\n  return match\n}\n\n/**\n * class LinkifyIt\n **/\n\n/**\n * new LinkifyIt(schemas, options)\n * - schemas (Object): Optional. Additional schemas to validate (prefix/validator)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Creates new linkifier instance with optional additional schemas.\n * Can be called without `new` keyword for convenience.\n *\n * By default understands:\n *\n * - `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links\n * - \"fuzzy\" links and emails (example.com, foo@bar.com).\n *\n * `schemas` is an object, where each key/value describes protocol/rule:\n *\n * - __key__ - link prefix (usually, protocol name with `:` at the end, `skype:`\n *   for example). `linkify-it` makes shure that prefix is not preceeded with\n *   alphanumeric char and symbols. Only whitespaces and punctuation allowed.\n * - __value__ - rule to check tail after link prefix\n *   - _String_ - just alias to existing rule\n *   - _Object_\n *     - _validate_ - validator function (should return matched length on success),\n *       or `RegExp`.\n *     - _normalize_ - optional function to normalize text & url of matched result\n *       (for example, for @twitter mentions).\n *\n * `options`:\n *\n * - __fuzzyLink__ - recognige URL-s without `http(s):` prefix. Default `true`.\n * - __fuzzyIP__ - allow IPs in fuzzy links above. Can conflict with some texts\n *   like version numbers. Default `false`.\n * - __fuzzyEmail__ - recognize emails without `mailto:` prefix.\n *\n **/\nfunction LinkifyIt (schemas, options) {\n  if (!(this instanceof LinkifyIt)) {\n    return new LinkifyIt(schemas, options)\n  }\n\n  if (!options) {\n    if (isOptionsObj(schemas)) {\n      options = schemas;\n      schemas = {};\n    }\n  }\n\n  this.__opts__ = assign({}, defaultOptions, options);\n\n  // Cache last tested result. Used to skip repeating steps on next `match` call.\n  this.__index__ = -1;\n  this.__last_index__ = -1; // Next scan position\n  this.__schema__ = '';\n  this.__text_cache__ = '';\n\n  this.__schemas__ = assign({}, defaultSchemas, schemas);\n  this.__compiled__ = {};\n\n  this.__tlds__ = tlds_default;\n  this.__tlds_replaced__ = false;\n\n  this.re = {};\n\n  compile(this);\n}\n\n/** chainable\n * LinkifyIt#add(schema, definition)\n * - schema (String): rule name (fixed pattern prefix)\n * - definition (String|RegExp|Object): schema definition\n *\n * Add new rule definition. See constructor description for details.\n **/\nLinkifyIt.prototype.add = function add (schema, definition) {\n  this.__schemas__[schema] = definition;\n  compile(this);\n  return this\n};\n\n/** chainable\n * LinkifyIt#set(options)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Set recognition options for links without schema.\n **/\nLinkifyIt.prototype.set = function set (options) {\n  this.__opts__ = assign(this.__opts__, options);\n  return this\n};\n\n/**\n * LinkifyIt#test(text) -> Boolean\n *\n * Searches linkifiable pattern and returns `true` on success or `false` on fail.\n **/\nLinkifyIt.prototype.test = function test (text) {\n  // Reset scan cache\n  this.__text_cache__ = text;\n  this.__index__ = -1;\n\n  if (!text.length) { return false }\n\n  let m, ml, me, len, shift, next, re, tld_pos, at_pos;\n\n  // try to scan for link with schema - that's the most simple rule\n  if (this.re.schema_test.test(text)) {\n    re = this.re.schema_search;\n    re.lastIndex = 0;\n    while ((m = re.exec(text)) !== null) {\n      len = this.testSchemaAt(text, m[2], re.lastIndex);\n      if (len) {\n        this.__schema__ = m[2];\n        this.__index__ = m.index + m[1].length;\n        this.__last_index__ = m.index + m[0].length + len;\n        break\n      }\n    }\n  }\n\n  if (this.__opts__.fuzzyLink && this.__compiled__['http:']) {\n    // guess schemaless links\n    tld_pos = text.search(this.re.host_fuzzy_test);\n    if (tld_pos >= 0) {\n      // if tld is located after found link - no need to check fuzzy pattern\n      if (this.__index__ < 0 || tld_pos < this.__index__) {\n        if ((ml = text.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy)) !== null) {\n          shift = ml.index + ml[1].length;\n\n          if (this.__index__ < 0 || shift < this.__index__) {\n            this.__schema__ = '';\n            this.__index__ = shift;\n            this.__last_index__ = ml.index + ml[0].length;\n          }\n        }\n      }\n    }\n  }\n\n  if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) {\n    // guess schemaless emails\n    at_pos = text.indexOf('@');\n    if (at_pos >= 0) {\n      // We can't skip this check, because this cases are possible:\n      // 192.168.1.1@gmail.com, my.in@example.com\n      if ((me = text.match(this.re.email_fuzzy)) !== null) {\n        shift = me.index + me[1].length;\n        next = me.index + me[0].length;\n\n        if (this.__index__ < 0 || shift < this.__index__ ||\n            (shift === this.__index__ && next > this.__last_index__)) {\n          this.__schema__ = 'mailto:';\n          this.__index__ = shift;\n          this.__last_index__ = next;\n        }\n      }\n    }\n  }\n\n  return this.__index__ >= 0\n};\n\n/**\n * LinkifyIt#pretest(text) -> Boolean\n *\n * Very quick check, that can give false positives. Returns true if link MAY BE\n * can exists. Can be used for speed optimization, when you need to check that\n * link NOT exists.\n **/\nLinkifyIt.prototype.pretest = function pretest (text) {\n  return this.re.pretest.test(text)\n};\n\n/**\n * LinkifyIt#testSchemaAt(text, name, position) -> Number\n * - text (String): text to scan\n * - name (String): rule (schema) name\n * - position (Number): text offset to check from\n *\n * Similar to [[LinkifyIt#test]] but checks only specific protocol tail exactly\n * at given position. Returns length of found pattern (0 on fail).\n **/\nLinkifyIt.prototype.testSchemaAt = function testSchemaAt (text, schema, pos) {\n  // If not supported schema check requested - terminate\n  if (!this.__compiled__[schema.toLowerCase()]) {\n    return 0\n  }\n  return this.__compiled__[schema.toLowerCase()].validate(text, pos, this)\n};\n\n/**\n * LinkifyIt#match(text) -> Array|null\n *\n * Returns array of found link descriptions or `null` on fail. We strongly\n * recommend to use [[LinkifyIt#test]] first, for best speed.\n *\n * ##### Result match description\n *\n * - __schema__ - link schema, can be empty for fuzzy links, or `//` for\n *   protocol-neutral  links.\n * - __index__ - offset of matched text\n * - __lastIndex__ - index of next char after mathch end\n * - __raw__ - matched text\n * - __text__ - normalized text\n * - __url__ - link, generated from matched text\n **/\nLinkifyIt.prototype.match = function match (text) {\n  const result = [];\n  let shift = 0;\n\n  // Try to take previous element from cache, if .test() called before\n  if (this.__index__ >= 0 && this.__text_cache__ === text) {\n    result.push(createMatch(this, shift));\n    shift = this.__last_index__;\n  }\n\n  // Cut head if cache was used\n  let tail = shift ? text.slice(shift) : text;\n\n  // Scan string until end reached\n  while (this.test(tail)) {\n    result.push(createMatch(this, shift));\n\n    tail = tail.slice(this.__last_index__);\n    shift += this.__last_index__;\n  }\n\n  if (result.length) {\n    return result\n  }\n\n  return null\n};\n\n/**\n * LinkifyIt#matchAtStart(text) -> Match|null\n *\n * Returns fully-formed (not fuzzy) link if it starts at the beginning\n * of the string, and null otherwise.\n **/\nLinkifyIt.prototype.matchAtStart = function matchAtStart (text) {\n  // Reset scan cache\n  this.__text_cache__ = text;\n  this.__index__ = -1;\n\n  if (!text.length) return null\n\n  const m = this.re.schema_at_start.exec(text);\n  if (!m) return null\n\n  const len = this.testSchemaAt(text, m[2], m[0].length);\n  if (!len) return null\n\n  this.__schema__ = m[2];\n  this.__index__ = m.index + m[1].length;\n  this.__last_index__ = m.index + m[0].length + len;\n\n  return createMatch(this, 0)\n};\n\n/** chainable\n * LinkifyIt#tlds(list [, keepOld]) -> this\n * - list (Array): list of tlds\n * - keepOld (Boolean): merge with current list if `true` (`false` by default)\n *\n * Load (or merge) new tlds list. Those are user for fuzzy links (without prefix)\n * to avoid false positives. By default this algorythm used:\n *\n * - hostname with any 2-letter root zones are ok.\n * - biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф\n *   are ok.\n * - encoded (`xn--...`) root zones are ok.\n *\n * If list is replaced, then exact match for 2-chars root zones will be checked.\n **/\nLinkifyIt.prototype.tlds = function tlds (list, keepOld) {\n  list = Array.isArray(list) ? list : [list];\n\n  if (!keepOld) {\n    this.__tlds__ = list.slice();\n    this.__tlds_replaced__ = true;\n    compile(this);\n    return this\n  }\n\n  this.__tlds__ = this.__tlds__.concat(list)\n    .sort()\n    .filter(function (el, idx, arr) {\n      return el !== arr[idx - 1]\n    })\n    .reverse();\n\n  compile(this);\n  return this\n};\n\n/**\n * LinkifyIt#normalize(match)\n *\n * Default normalizer (if schema does not define it's own).\n **/\nLinkifyIt.prototype.normalize = function normalize (match) {\n  // Do minimal possible changes by default. Need to collect feedback prior\n  // to move forward https://github.com/markdown-it/linkify-it/issues/1\n\n  if (!match.schema) { match.url = 'http://' + match.url; }\n\n  if (match.schema === 'mailto:' && !/^mailto:/i.test(match.url)) {\n    match.url = 'mailto:' + match.url;\n  }\n};\n\n/**\n * LinkifyIt#onCompile()\n *\n * Override to modify basic RegExp-s.\n **/\nLinkifyIt.prototype.onCompile = function onCompile () {\n};\n\nmodule.exports = LinkifyIt;\n","'use strict';\n\nvar mdurl = require('mdurl');\nvar ucmicro = require('uc.micro');\nvar entities = require('entities');\nvar LinkifyIt = require('linkify-it');\nvar punycode = require('punycode.js');\n\nfunction _interopNamespaceDefault(e) {\n  var n = Object.create(null);\n  if (e) {\n    Object.keys(e).forEach(function (k) {\n      if (k !== 'default') {\n        var d = Object.getOwnPropertyDescriptor(e, k);\n        Object.defineProperty(n, k, d.get ? d : {\n          enumerable: true,\n          get: function () { return e[k]; }\n        });\n      }\n    });\n  }\n  n.default = e;\n  return Object.freeze(n);\n}\n\nvar mdurl__namespace = /*#__PURE__*/_interopNamespaceDefault(mdurl);\nvar ucmicro__namespace = /*#__PURE__*/_interopNamespaceDefault(ucmicro);\n\n// Utilities\n//\n\nfunction _class(obj) {\n  return Object.prototype.toString.call(obj);\n}\nfunction isString(obj) {\n  return _class(obj) === '[object String]';\n}\nconst _hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction has(object, key) {\n  return _hasOwnProperty.call(object, key);\n}\n\n// Merge objects\n//\nfunction assign(obj /* from1, from2, from3, ... */) {\n  const sources = Array.prototype.slice.call(arguments, 1);\n  sources.forEach(function (source) {\n    if (!source) {\n      return;\n    }\n    if (typeof source !== 'object') {\n      throw new TypeError(source + 'must be object');\n    }\n    Object.keys(source).forEach(function (key) {\n      obj[key] = source[key];\n    });\n  });\n  return obj;\n}\n\n// Remove element from array and put another array at those position.\n// Useful for some operations with tokens\nfunction arrayReplaceAt(src, pos, newElements) {\n  return [].concat(src.slice(0, pos), newElements, src.slice(pos + 1));\n}\nfunction isValidEntityCode(c) {\n  /* eslint no-bitwise:0 */\n  // broken sequence\n  if (c >= 0xD800 && c <= 0xDFFF) {\n    return false;\n  }\n  // never used\n  if (c >= 0xFDD0 && c <= 0xFDEF) {\n    return false;\n  }\n  if ((c & 0xFFFF) === 0xFFFF || (c & 0xFFFF) === 0xFFFE) {\n    return false;\n  }\n  // control codes\n  if (c >= 0x00 && c <= 0x08) {\n    return false;\n  }\n  if (c === 0x0B) {\n    return false;\n  }\n  if (c >= 0x0E && c <= 0x1F) {\n    return false;\n  }\n  if (c >= 0x7F && c <= 0x9F) {\n    return false;\n  }\n  // out of range\n  if (c > 0x10FFFF) {\n    return false;\n  }\n  return true;\n}\nfunction fromCodePoint(c) {\n  /* eslint no-bitwise:0 */\n  if (c > 0xffff) {\n    c -= 0x10000;\n    const surrogate1 = 0xd800 + (c >> 10);\n    const surrogate2 = 0xdc00 + (c & 0x3ff);\n    return String.fromCharCode(surrogate1, surrogate2);\n  }\n  return String.fromCharCode(c);\n}\nconst UNESCAPE_MD_RE = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^_`{|}~])/g;\nconst ENTITY_RE = /&([a-z#][a-z0-9]{1,31});/gi;\nconst UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + '|' + ENTITY_RE.source, 'gi');\nconst DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))$/i;\nfunction replaceEntityPattern(match, name) {\n  if (name.charCodeAt(0) === 0x23 /* # */ && DIGITAL_ENTITY_TEST_RE.test(name)) {\n    const code = name[1].toLowerCase() === 'x' ? parseInt(name.slice(2), 16) : parseInt(name.slice(1), 10);\n    if (isValidEntityCode(code)) {\n      return fromCodePoint(code);\n    }\n    return match;\n  }\n  const decoded = entities.decodeHTML(match);\n  if (decoded !== match) {\n    return decoded;\n  }\n  return match;\n}\n\n/* function replaceEntities(str) {\n  if (str.indexOf('&') < 0) { return str; }\n\n  return str.replace(ENTITY_RE, replaceEntityPattern);\n} */\n\nfunction unescapeMd(str) {\n  if (str.indexOf('\\\\') < 0) {\n    return str;\n  }\n  return str.replace(UNESCAPE_MD_RE, '$1');\n}\nfunction unescapeAll(str) {\n  if (str.indexOf('\\\\') < 0 && str.indexOf('&') < 0) {\n    return str;\n  }\n  return str.replace(UNESCAPE_ALL_RE, function (match, escaped, entity) {\n    if (escaped) {\n      return escaped;\n    }\n    return replaceEntityPattern(match, entity);\n  });\n}\nconst HTML_ESCAPE_TEST_RE = /[&<>\"]/;\nconst HTML_ESCAPE_REPLACE_RE = /[&<>\"]/g;\nconst HTML_REPLACEMENTS = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;'\n};\nfunction replaceUnsafeChar(ch) {\n  return HTML_REPLACEMENTS[ch];\n}\nfunction escapeHtml(str) {\n  if (HTML_ESCAPE_TEST_RE.test(str)) {\n    return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar);\n  }\n  return str;\n}\nconst REGEXP_ESCAPE_RE = /[.?*+^$[\\]\\\\(){}|-]/g;\nfunction escapeRE(str) {\n  return str.replace(REGEXP_ESCAPE_RE, '\\\\$&');\n}\nfunction isSpace(code) {\n  switch (code) {\n    case 0x09:\n    case 0x20:\n      return true;\n  }\n  return false;\n}\n\n// Zs (unicode class) || [\\t\\f\\v\\r\\n]\nfunction isWhiteSpace(code) {\n  if (code >= 0x2000 && code <= 0x200A) {\n    return true;\n  }\n  switch (code) {\n    case 0x09: // \\t\n    case 0x0A: // \\n\n    case 0x0B: // \\v\n    case 0x0C: // \\f\n    case 0x0D: // \\r\n    case 0x20:\n    case 0xA0:\n    case 0x1680:\n    case 0x202F:\n    case 0x205F:\n    case 0x3000:\n      return true;\n  }\n  return false;\n}\n\n/* eslint-disable max-len */\n\n// Currently without astral characters support.\nfunction isPunctChar(ch) {\n  return ucmicro__namespace.P.test(ch) || ucmicro__namespace.S.test(ch);\n}\n\n// Markdown ASCII punctuation characters.\n//\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\n//\n// Don't confuse with unicode punctuation !!! It lacks some chars in ascii range.\n//\nfunction isMdAsciiPunct(ch) {\n  switch (ch) {\n    case 0x21 /* ! */:\n    case 0x22 /* \" */:\n    case 0x23 /* # */:\n    case 0x24 /* $ */:\n    case 0x25 /* % */:\n    case 0x26 /* & */:\n    case 0x27 /* ' */:\n    case 0x28 /* ( */:\n    case 0x29 /* ) */:\n    case 0x2A /* * */:\n    case 0x2B /* + */:\n    case 0x2C /* , */:\n    case 0x2D /* - */:\n    case 0x2E /* . */:\n    case 0x2F /* / */:\n    case 0x3A /* : */:\n    case 0x3B /* ; */:\n    case 0x3C /* < */:\n    case 0x3D /* = */:\n    case 0x3E /* > */:\n    case 0x3F /* ? */:\n    case 0x40 /* @ */:\n    case 0x5B /* [ */:\n    case 0x5C /* \\ */:\n    case 0x5D /* ] */:\n    case 0x5E /* ^ */:\n    case 0x5F /* _ */:\n    case 0x60 /* ` */:\n    case 0x7B /* { */:\n    case 0x7C /* | */:\n    case 0x7D /* } */:\n    case 0x7E /* ~ */:\n      return true;\n    default:\n      return false;\n  }\n}\n\n// Hepler to unify [reference labels].\n//\nfunction normalizeReference(str) {\n  // Trim and collapse whitespace\n  //\n  str = str.trim().replace(/\\s+/g, ' ');\n\n  // In node v10 'ẞ'.toLowerCase() === 'Ṿ', which is presumed to be a bug\n  // fixed in v12 (couldn't find any details).\n  //\n  // So treat this one as a special case\n  // (remove this when node v10 is no longer supported).\n  //\n  if ('ẞ'.toLowerCase() === 'Ṿ') {\n    str = str.replace(/ẞ/g, 'ß');\n  }\n\n  // .toLowerCase().toUpperCase() should get rid of all differences\n  // between letter variants.\n  //\n  // Simple .toLowerCase() doesn't normalize 125 code points correctly,\n  // and .toUpperCase doesn't normalize 6 of them (list of exceptions:\n  // İ, ϴ, ẞ, Ω, K, Å - those are already uppercased, but have differently\n  // uppercased versions).\n  //\n  // Here's an example showing how it happens. Lets take greek letter omega:\n  // uppercase U+0398 (Θ), U+03f4 (ϴ) and lowercase U+03b8 (θ), U+03d1 (ϑ)\n  //\n  // Unicode entries:\n  // 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;\n  // 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398\n  // 03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398\n  // 03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L;<compat> 0398;;;;N;;;;03B8;\n  //\n  // Case-insensitive comparison should treat all of them as equivalent.\n  //\n  // But .toLowerCase() doesn't change ϑ (it's already lowercase),\n  // and .toUpperCase() doesn't change ϴ (already uppercase).\n  //\n  // Applying first lower then upper case normalizes any character:\n  // '\\u0398\\u03f4\\u03b8\\u03d1'.toLowerCase().toUpperCase() === '\\u0398\\u0398\\u0398\\u0398'\n  //\n  // Note: this is equivalent to unicode case folding; unicode normalization\n  // is a different step that is not required here.\n  //\n  // Final result should be uppercased, because it's later stored in an object\n  // (this avoid a conflict with Object.prototype members,\n  // most notably, `__proto__`)\n  //\n  return str.toLowerCase().toUpperCase();\n}\n\n// Re-export libraries commonly used in both markdown-it and its plugins,\n// so plugins won't have to depend on them explicitly, which reduces their\n// bundled size (e.g. a browser build).\n//\nconst lib = {\n  mdurl: mdurl__namespace,\n  ucmicro: ucmicro__namespace\n};\n\nvar utils = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  arrayReplaceAt: arrayReplaceAt,\n  assign: assign,\n  escapeHtml: escapeHtml,\n  escapeRE: escapeRE,\n  fromCodePoint: fromCodePoint,\n  has: has,\n  isMdAsciiPunct: isMdAsciiPunct,\n  isPunctChar: isPunctChar,\n  isSpace: isSpace,\n  isString: isString,\n  isValidEntityCode: isValidEntityCode,\n  isWhiteSpace: isWhiteSpace,\n  lib: lib,\n  normalizeReference: normalizeReference,\n  unescapeAll: unescapeAll,\n  unescapeMd: unescapeMd\n});\n\n// Parse link label\n//\n// this function assumes that first character (\"[\") already matches;\n// returns the end of the label\n//\n\nfunction parseLinkLabel(state, start, disableNested) {\n  let level, found, marker, prevPos;\n  const max = state.posMax;\n  const oldPos = state.pos;\n  state.pos = start + 1;\n  level = 1;\n  while (state.pos < max) {\n    marker = state.src.charCodeAt(state.pos);\n    if (marker === 0x5D /* ] */) {\n      level--;\n      if (level === 0) {\n        found = true;\n        break;\n      }\n    }\n    prevPos = state.pos;\n    state.md.inline.skipToken(state);\n    if (marker === 0x5B /* [ */) {\n      if (prevPos === state.pos - 1) {\n        // increase level if we find text `[`, which is not a part of any token\n        level++;\n      } else if (disableNested) {\n        state.pos = oldPos;\n        return -1;\n      }\n    }\n  }\n  let labelEnd = -1;\n  if (found) {\n    labelEnd = state.pos;\n  }\n\n  // restore old state\n  state.pos = oldPos;\n  return labelEnd;\n}\n\n// Parse link destination\n//\n\nfunction parseLinkDestination(str, start, max) {\n  let code;\n  let pos = start;\n  const result = {\n    ok: false,\n    pos: 0,\n    str: ''\n  };\n  if (str.charCodeAt(pos) === 0x3C /* < */) {\n    pos++;\n    while (pos < max) {\n      code = str.charCodeAt(pos);\n      if (code === 0x0A /* \\n */) {\n        return result;\n      }\n      if (code === 0x3C /* < */) {\n        return result;\n      }\n      if (code === 0x3E /* > */) {\n        result.pos = pos + 1;\n        result.str = unescapeAll(str.slice(start + 1, pos));\n        result.ok = true;\n        return result;\n      }\n      if (code === 0x5C /* \\ */ && pos + 1 < max) {\n        pos += 2;\n        continue;\n      }\n      pos++;\n    }\n\n    // no closing '>'\n    return result;\n  }\n\n  // this should be ... } else { ... branch\n\n  let level = 0;\n  while (pos < max) {\n    code = str.charCodeAt(pos);\n    if (code === 0x20) {\n      break;\n    }\n\n    // ascii control characters\n    if (code < 0x20 || code === 0x7F) {\n      break;\n    }\n    if (code === 0x5C /* \\ */ && pos + 1 < max) {\n      if (str.charCodeAt(pos + 1) === 0x20) {\n        break;\n      }\n      pos += 2;\n      continue;\n    }\n    if (code === 0x28 /* ( */) {\n      level++;\n      if (level > 32) {\n        return result;\n      }\n    }\n    if (code === 0x29 /* ) */) {\n      if (level === 0) {\n        break;\n      }\n      level--;\n    }\n    pos++;\n  }\n  if (start === pos) {\n    return result;\n  }\n  if (level !== 0) {\n    return result;\n  }\n  result.str = unescapeAll(str.slice(start, pos));\n  result.pos = pos;\n  result.ok = true;\n  return result;\n}\n\n// Parse link title\n//\n\n\n// Parse link title within `str` in [start, max] range,\n// or continue previous parsing if `prev_state` is defined (equal to result of last execution).\n//\nfunction parseLinkTitle(str, start, max, prev_state) {\n  let code;\n  let pos = start;\n  const state = {\n    // if `true`, this is a valid link title\n    ok: false,\n    // if `true`, this link can be continued on the next line\n    can_continue: false,\n    // if `ok`, it's the position of the first character after the closing marker\n    pos: 0,\n    // if `ok`, it's the unescaped title\n    str: '',\n    // expected closing marker character code\n    marker: 0\n  };\n  if (prev_state) {\n    // this is a continuation of a previous parseLinkTitle call on the next line,\n    // used in reference links only\n    state.str = prev_state.str;\n    state.marker = prev_state.marker;\n  } else {\n    if (pos >= max) {\n      return state;\n    }\n    let marker = str.charCodeAt(pos);\n    if (marker !== 0x22 /* \" */ && marker !== 0x27 /* ' */ && marker !== 0x28 /* ( */) {\n      return state;\n    }\n    start++;\n    pos++;\n\n    // if opening marker is \"(\", switch it to closing marker \")\"\n    if (marker === 0x28) {\n      marker = 0x29;\n    }\n    state.marker = marker;\n  }\n  while (pos < max) {\n    code = str.charCodeAt(pos);\n    if (code === state.marker) {\n      state.pos = pos + 1;\n      state.str += unescapeAll(str.slice(start, pos));\n      state.ok = true;\n      return state;\n    } else if (code === 0x28 /* ( */ && state.marker === 0x29 /* ) */) {\n      return state;\n    } else if (code === 0x5C /* \\ */ && pos + 1 < max) {\n      pos++;\n    }\n    pos++;\n  }\n\n  // no closing marker found, but this link title may continue on the next line (for references)\n  state.can_continue = true;\n  state.str += unescapeAll(str.slice(start, pos));\n  return state;\n}\n\n// Just a shortcut for bulk export\n\nvar helpers = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  parseLinkDestination: parseLinkDestination,\n  parseLinkLabel: parseLinkLabel,\n  parseLinkTitle: parseLinkTitle\n});\n\n/**\n * class Renderer\n *\n * Generates HTML from parsed token stream. Each instance has independent\n * copy of rules. Those can be rewritten with ease. Also, you can add new\n * rules if you create plugin and adds new token types.\n **/\n\nconst default_rules = {};\ndefault_rules.code_inline = function (tokens, idx, options, env, slf) {\n  const token = tokens[idx];\n  return '<code' + slf.renderAttrs(token) + '>' + escapeHtml(token.content) + '</code>';\n};\ndefault_rules.code_block = function (tokens, idx, options, env, slf) {\n  const token = tokens[idx];\n  return '<pre' + slf.renderAttrs(token) + '><code>' + escapeHtml(tokens[idx].content) + '</code></pre>\\n';\n};\ndefault_rules.fence = function (tokens, idx, options, env, slf) {\n  const token = tokens[idx];\n  const info = token.info ? unescapeAll(token.info).trim() : '';\n  let langName = '';\n  let langAttrs = '';\n  if (info) {\n    const arr = info.split(/(\\s+)/g);\n    langName = arr[0];\n    langAttrs = arr.slice(2).join('');\n  }\n  let highlighted;\n  if (options.highlight) {\n    highlighted = options.highlight(token.content, langName, langAttrs) || escapeHtml(token.content);\n  } else {\n    highlighted = escapeHtml(token.content);\n  }\n  if (highlighted.indexOf('<pre') === 0) {\n    return highlighted + '\\n';\n  }\n\n  // If language exists, inject class gently, without modifying original token.\n  // May be, one day we will add .deepClone() for token and simplify this part, but\n  // now we prefer to keep things local.\n  if (info) {\n    const i = token.attrIndex('class');\n    const tmpAttrs = token.attrs ? token.attrs.slice() : [];\n    if (i < 0) {\n      tmpAttrs.push(['class', options.langPrefix + langName]);\n    } else {\n      tmpAttrs[i] = tmpAttrs[i].slice();\n      tmpAttrs[i][1] += ' ' + options.langPrefix + langName;\n    }\n\n    // Fake token just to render attributes\n    const tmpToken = {\n      attrs: tmpAttrs\n    };\n    return `<pre><code${slf.renderAttrs(tmpToken)}>${highlighted}</code></pre>\\n`;\n  }\n  return `<pre><code${slf.renderAttrs(token)}>${highlighted}</code></pre>\\n`;\n};\ndefault_rules.image = function (tokens, idx, options, env, slf) {\n  const token = tokens[idx];\n\n  // \"alt\" attr MUST be set, even if empty. Because it's mandatory and\n  // should be placed on proper position for tests.\n  //\n  // Replace content with actual value\n\n  token.attrs[token.attrIndex('alt')][1] = slf.renderInlineAsText(token.children, options, env);\n  return slf.renderToken(tokens, idx, options);\n};\ndefault_rules.hardbreak = function (tokens, idx, options /*, env */) {\n  return options.xhtmlOut ? '<br />\\n' : '<br>\\n';\n};\ndefault_rules.softbreak = function (tokens, idx, options /*, env */) {\n  return options.breaks ? options.xhtmlOut ? '<br />\\n' : '<br>\\n' : '\\n';\n};\ndefault_rules.text = function (tokens, idx /*, options, env */) {\n  return escapeHtml(tokens[idx].content);\n};\ndefault_rules.html_block = function (tokens, idx /*, options, env */) {\n  return tokens[idx].content;\n};\ndefault_rules.html_inline = function (tokens, idx /*, options, env */) {\n  return tokens[idx].content;\n};\n\n/**\n * new Renderer()\n *\n * Creates new [[Renderer]] instance and fill [[Renderer#rules]] with defaults.\n **/\nfunction Renderer() {\n  /**\n   * Renderer#rules -> Object\n   *\n   * Contains render rules for tokens. Can be updated and extended.\n   *\n   * ##### Example\n   *\n   * ```javascript\n   * var md = require('markdown-it')();\n   *\n   * md.renderer.rules.strong_open  = function () { return '<b>'; };\n   * md.renderer.rules.strong_close = function () { return '</b>'; };\n   *\n   * var result = md.renderInline(...);\n   * ```\n   *\n   * Each rule is called as independent static function with fixed signature:\n   *\n   * ```javascript\n   * function my_token_render(tokens, idx, options, env, renderer) {\n   *   // ...\n   *   return renderedHTML;\n   * }\n   * ```\n   *\n   * See [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.mjs)\n   * for more details and examples.\n   **/\n  this.rules = assign({}, default_rules);\n}\n\n/**\n * Renderer.renderAttrs(token) -> String\n *\n * Render token attributes to string.\n **/\nRenderer.prototype.renderAttrs = function renderAttrs(token) {\n  let i, l, result;\n  if (!token.attrs) {\n    return '';\n  }\n  result = '';\n  for (i = 0, l = token.attrs.length; i < l; i++) {\n    result += ' ' + escapeHtml(token.attrs[i][0]) + '=\"' + escapeHtml(token.attrs[i][1]) + '\"';\n  }\n  return result;\n};\n\n/**\n * Renderer.renderToken(tokens, idx, options) -> String\n * - tokens (Array): list of tokens\n * - idx (Numbed): token index to render\n * - options (Object): params of parser instance\n *\n * Default token renderer. Can be overriden by custom function\n * in [[Renderer#rules]].\n **/\nRenderer.prototype.renderToken = function renderToken(tokens, idx, options) {\n  const token = tokens[idx];\n  let result = '';\n\n  // Tight list paragraphs\n  if (token.hidden) {\n    return '';\n  }\n\n  // Insert a newline between hidden paragraph and subsequent opening\n  // block-level tag.\n  //\n  // For example, here we should insert a newline before blockquote:\n  //  - a\n  //    >\n  //\n  if (token.block && token.nesting !== -1 && idx && tokens[idx - 1].hidden) {\n    result += '\\n';\n  }\n\n  // Add token name, e.g. `<img`\n  result += (token.nesting === -1 ? '</' : '<') + token.tag;\n\n  // Encode attributes, e.g. `<img src=\"foo\"`\n  result += this.renderAttrs(token);\n\n  // Add a slash for self-closing tags, e.g. `<img src=\"foo\" /`\n  if (token.nesting === 0 && options.xhtmlOut) {\n    result += ' /';\n  }\n\n  // Check if we need to add a newline after this tag\n  let needLf = false;\n  if (token.block) {\n    needLf = true;\n    if (token.nesting === 1) {\n      if (idx + 1 < tokens.length) {\n        const nextToken = tokens[idx + 1];\n        if (nextToken.type === 'inline' || nextToken.hidden) {\n          // Block-level tag containing an inline tag.\n          //\n          needLf = false;\n        } else if (nextToken.nesting === -1 && nextToken.tag === token.tag) {\n          // Opening tag + closing tag of the same type. E.g. `<li></li>`.\n          //\n          needLf = false;\n        }\n      }\n    }\n  }\n  result += needLf ? '>\\n' : '>';\n  return result;\n};\n\n/**\n * Renderer.renderInline(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * The same as [[Renderer.render]], but for single token of `inline` type.\n **/\nRenderer.prototype.renderInline = function (tokens, options, env) {\n  let result = '';\n  const rules = this.rules;\n  for (let i = 0, len = tokens.length; i < len; i++) {\n    const type = tokens[i].type;\n    if (typeof rules[type] !== 'undefined') {\n      result += rules[type](tokens, i, options, env, this);\n    } else {\n      result += this.renderToken(tokens, i, options);\n    }\n  }\n  return result;\n};\n\n/** internal\n * Renderer.renderInlineAsText(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Special kludge for image `alt` attributes to conform CommonMark spec.\n * Don't try to use it! Spec requires to show `alt` content with stripped markup,\n * instead of simple escaping.\n **/\nRenderer.prototype.renderInlineAsText = function (tokens, options, env) {\n  let result = '';\n  for (let i = 0, len = tokens.length; i < len; i++) {\n    switch (tokens[i].type) {\n      case 'text':\n        result += tokens[i].content;\n        break;\n      case 'image':\n        result += this.renderInlineAsText(tokens[i].children, options, env);\n        break;\n      case 'html_inline':\n      case 'html_block':\n        result += tokens[i].content;\n        break;\n      case 'softbreak':\n      case 'hardbreak':\n        result += '\\n';\n        break;\n      // all other tokens are skipped\n    }\n  }\n  return result;\n};\n\n/**\n * Renderer.render(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Takes token stream and generates HTML. Probably, you will never need to call\n * this method directly.\n **/\nRenderer.prototype.render = function (tokens, options, env) {\n  let result = '';\n  const rules = this.rules;\n  for (let i = 0, len = tokens.length; i < len; i++) {\n    const type = tokens[i].type;\n    if (type === 'inline') {\n      result += this.renderInline(tokens[i].children, options, env);\n    } else if (typeof rules[type] !== 'undefined') {\n      result += rules[type](tokens, i, options, env, this);\n    } else {\n      result += this.renderToken(tokens, i, options, env);\n    }\n  }\n  return result;\n};\n\n/**\n * class Ruler\n *\n * Helper class, used by [[MarkdownIt#core]], [[MarkdownIt#block]] and\n * [[MarkdownIt#inline]] to manage sequences of functions (rules):\n *\n * - keep rules in defined order\n * - assign the name to each rule\n * - enable/disable rules\n * - add/replace rules\n * - allow assign rules to additional named chains (in the same)\n * - cacheing lists of active rules\n *\n * You will not need use this class directly until write plugins. For simple\n * rules control use [[MarkdownIt.disable]], [[MarkdownIt.enable]] and\n * [[MarkdownIt.use]].\n **/\n\n/**\n * new Ruler()\n **/\nfunction Ruler() {\n  // List of added rules. Each element is:\n  //\n  // {\n  //   name: XXX,\n  //   enabled: Boolean,\n  //   fn: Function(),\n  //   alt: [ name2, name3 ]\n  // }\n  //\n  this.__rules__ = [];\n\n  // Cached rule chains.\n  //\n  // First level - chain name, '' for default.\n  // Second level - diginal anchor for fast filtering by charcodes.\n  //\n  this.__cache__ = null;\n}\n\n// Helper methods, should not be used directly\n\n// Find rule index by name\n//\nRuler.prototype.__find__ = function (name) {\n  for (let i = 0; i < this.__rules__.length; i++) {\n    if (this.__rules__[i].name === name) {\n      return i;\n    }\n  }\n  return -1;\n};\n\n// Build rules lookup cache\n//\nRuler.prototype.__compile__ = function () {\n  const self = this;\n  const chains = [''];\n\n  // collect unique names\n  self.__rules__.forEach(function (rule) {\n    if (!rule.enabled) {\n      return;\n    }\n    rule.alt.forEach(function (altName) {\n      if (chains.indexOf(altName) < 0) {\n        chains.push(altName);\n      }\n    });\n  });\n  self.__cache__ = {};\n  chains.forEach(function (chain) {\n    self.__cache__[chain] = [];\n    self.__rules__.forEach(function (rule) {\n      if (!rule.enabled) {\n        return;\n      }\n      if (chain && rule.alt.indexOf(chain) < 0) {\n        return;\n      }\n      self.__cache__[chain].push(rule.fn);\n    });\n  });\n};\n\n/**\n * Ruler.at(name, fn [, options])\n * - name (String): rule name to replace.\n * - fn (Function): new rule function.\n * - options (Object): new rule options (not mandatory).\n *\n * Replace rule by name with new function & options. Throws error if name not\n * found.\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * Replace existing typographer replacement rule with new one:\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.at('replacements', function replace(state) {\n *   //...\n * });\n * ```\n **/\nRuler.prototype.at = function (name, fn, options) {\n  const index = this.__find__(name);\n  const opt = options || {};\n  if (index === -1) {\n    throw new Error('Parser rule not found: ' + name);\n  }\n  this.__rules__[index].fn = fn;\n  this.__rules__[index].alt = opt.alt || [];\n  this.__cache__ = null;\n};\n\n/**\n * Ruler.before(beforeName, ruleName, fn [, options])\n * - beforeName (String): new rule will be added before this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain before one with given name. See also\n * [[Ruler.after]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.block.ruler.before('paragraph', 'my_rule', function replace(state) {\n *   //...\n * });\n * ```\n **/\nRuler.prototype.before = function (beforeName, ruleName, fn, options) {\n  const index = this.__find__(beforeName);\n  const opt = options || {};\n  if (index === -1) {\n    throw new Error('Parser rule not found: ' + beforeName);\n  }\n  this.__rules__.splice(index, 0, {\n    name: ruleName,\n    enabled: true,\n    fn,\n    alt: opt.alt || []\n  });\n  this.__cache__ = null;\n};\n\n/**\n * Ruler.after(afterName, ruleName, fn [, options])\n * - afterName (String): new rule will be added after this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain after one with given name. See also\n * [[Ruler.before]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.inline.ruler.after('text', 'my_rule', function replace(state) {\n *   //...\n * });\n * ```\n **/\nRuler.prototype.after = function (afterName, ruleName, fn, options) {\n  const index = this.__find__(afterName);\n  const opt = options || {};\n  if (index === -1) {\n    throw new Error('Parser rule not found: ' + afterName);\n  }\n  this.__rules__.splice(index + 1, 0, {\n    name: ruleName,\n    enabled: true,\n    fn,\n    alt: opt.alt || []\n  });\n  this.__cache__ = null;\n};\n\n/**\n * Ruler.push(ruleName, fn [, options])\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Push new rule to the end of chain. See also\n * [[Ruler.before]], [[Ruler.after]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.push('my_rule', function replace(state) {\n *   //...\n * });\n * ```\n **/\nRuler.prototype.push = function (ruleName, fn, options) {\n  const opt = options || {};\n  this.__rules__.push({\n    name: ruleName,\n    enabled: true,\n    fn,\n    alt: opt.alt || []\n  });\n  this.__cache__ = null;\n};\n\n/**\n * Ruler.enable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to enable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.disable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.enable = function (list, ignoreInvalid) {\n  if (!Array.isArray(list)) {\n    list = [list];\n  }\n  const result = [];\n\n  // Search by name and enable\n  list.forEach(function (name) {\n    const idx = this.__find__(name);\n    if (idx < 0) {\n      if (ignoreInvalid) {\n        return;\n      }\n      throw new Error('Rules manager: invalid rule name ' + name);\n    }\n    this.__rules__[idx].enabled = true;\n    result.push(name);\n  }, this);\n  this.__cache__ = null;\n  return result;\n};\n\n/**\n * Ruler.enableOnly(list [, ignoreInvalid])\n * - list (String|Array): list of rule names to enable (whitelist).\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names, and disable everything else. If any rule name\n * not found - throw Error. Errors can be disabled by second param.\n *\n * See also [[Ruler.disable]], [[Ruler.enable]].\n **/\nRuler.prototype.enableOnly = function (list, ignoreInvalid) {\n  if (!Array.isArray(list)) {\n    list = [list];\n  }\n  this.__rules__.forEach(function (rule) {\n    rule.enabled = false;\n  });\n  this.enable(list, ignoreInvalid);\n};\n\n/**\n * Ruler.disable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Disable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.enable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.disable = function (list, ignoreInvalid) {\n  if (!Array.isArray(list)) {\n    list = [list];\n  }\n  const result = [];\n\n  // Search by name and disable\n  list.forEach(function (name) {\n    const idx = this.__find__(name);\n    if (idx < 0) {\n      if (ignoreInvalid) {\n        return;\n      }\n      throw new Error('Rules manager: invalid rule name ' + name);\n    }\n    this.__rules__[idx].enabled = false;\n    result.push(name);\n  }, this);\n  this.__cache__ = null;\n  return result;\n};\n\n/**\n * Ruler.getRules(chainName) -> Array\n *\n * Return array of active functions (rules) for given chain name. It analyzes\n * rules configuration, compiles caches if not exists and returns result.\n *\n * Default chain name is `''` (empty string). It can't be skipped. That's\n * done intentionally, to keep signature monomorphic for high speed.\n **/\nRuler.prototype.getRules = function (chainName) {\n  if (this.__cache__ === null) {\n    this.__compile__();\n  }\n\n  // Chain can be empty, if rules disabled. But we still have to return Array.\n  return this.__cache__[chainName] || [];\n};\n\n// Token class\n\n/**\n * class Token\n **/\n\n/**\n * new Token(type, tag, nesting)\n *\n * Create new token and fill passed properties.\n **/\nfunction Token(type, tag, nesting) {\n  /**\n   * Token#type -> String\n   *\n   * Type of the token (string, e.g. \"paragraph_open\")\n   **/\n  this.type = type;\n\n  /**\n   * Token#tag -> String\n   *\n   * html tag name, e.g. \"p\"\n   **/\n  this.tag = tag;\n\n  /**\n   * Token#attrs -> Array\n   *\n   * Html attributes. Format: `[ [ name1, value1 ], [ name2, value2 ] ]`\n   **/\n  this.attrs = null;\n\n  /**\n   * Token#map -> Array\n   *\n   * Source map info. Format: `[ line_begin, line_end ]`\n   **/\n  this.map = null;\n\n  /**\n   * Token#nesting -> Number\n   *\n   * Level change (number in {-1, 0, 1} set), where:\n   *\n   * -  `1` means the tag is opening\n   * -  `0` means the tag is self-closing\n   * - `-1` means the tag is closing\n   **/\n  this.nesting = nesting;\n\n  /**\n   * Token#level -> Number\n   *\n   * nesting level, the same as `state.level`\n   **/\n  this.level = 0;\n\n  /**\n   * Token#children -> Array\n   *\n   * An array of child nodes (inline and img tokens)\n   **/\n  this.children = null;\n\n  /**\n   * Token#content -> String\n   *\n   * In a case of self-closing tag (code, html, fence, etc.),\n   * it has contents of this tag.\n   **/\n  this.content = '';\n\n  /**\n   * Token#markup -> String\n   *\n   * '*' or '_' for emphasis, fence string for fence, etc.\n   **/\n  this.markup = '';\n\n  /**\n   * Token#info -> String\n   *\n   * Additional information:\n   *\n   * - Info string for \"fence\" tokens\n   * - The value \"auto\" for autolink \"link_open\" and \"link_close\" tokens\n   * - The string value of the item marker for ordered-list \"list_item_open\" tokens\n   **/\n  this.info = '';\n\n  /**\n   * Token#meta -> Object\n   *\n   * A place for plugins to store an arbitrary data\n   **/\n  this.meta = null;\n\n  /**\n   * Token#block -> Boolean\n   *\n   * True for block-level tokens, false for inline tokens.\n   * Used in renderer to calculate line breaks\n   **/\n  this.block = false;\n\n  /**\n   * Token#hidden -> Boolean\n   *\n   * If it's true, ignore this element when rendering. Used for tight lists\n   * to hide paragraphs.\n   **/\n  this.hidden = false;\n}\n\n/**\n * Token.attrIndex(name) -> Number\n *\n * Search attribute index by name.\n **/\nToken.prototype.attrIndex = function attrIndex(name) {\n  if (!this.attrs) {\n    return -1;\n  }\n  const attrs = this.attrs;\n  for (let i = 0, len = attrs.length; i < len; i++) {\n    if (attrs[i][0] === name) {\n      return i;\n    }\n  }\n  return -1;\n};\n\n/**\n * Token.attrPush(attrData)\n *\n * Add `[ name, value ]` attribute to list. Init attrs if necessary\n **/\nToken.prototype.attrPush = function attrPush(attrData) {\n  if (this.attrs) {\n    this.attrs.push(attrData);\n  } else {\n    this.attrs = [attrData];\n  }\n};\n\n/**\n * Token.attrSet(name, value)\n *\n * Set `name` attribute to `value`. Override old value if exists.\n **/\nToken.prototype.attrSet = function attrSet(name, value) {\n  const idx = this.attrIndex(name);\n  const attrData = [name, value];\n  if (idx < 0) {\n    this.attrPush(attrData);\n  } else {\n    this.attrs[idx] = attrData;\n  }\n};\n\n/**\n * Token.attrGet(name)\n *\n * Get the value of attribute `name`, or null if it does not exist.\n **/\nToken.prototype.attrGet = function attrGet(name) {\n  const idx = this.attrIndex(name);\n  let value = null;\n  if (idx >= 0) {\n    value = this.attrs[idx][1];\n  }\n  return value;\n};\n\n/**\n * Token.attrJoin(name, value)\n *\n * Join value to existing attribute via space. Or create new attribute if not\n * exists. Useful to operate with token classes.\n **/\nToken.prototype.attrJoin = function attrJoin(name, value) {\n  const idx = this.attrIndex(name);\n  if (idx < 0) {\n    this.attrPush([name, value]);\n  } else {\n    this.attrs[idx][1] = this.attrs[idx][1] + ' ' + value;\n  }\n};\n\n// Core state object\n//\n\nfunction StateCore(src, md, env) {\n  this.src = src;\n  this.env = env;\n  this.tokens = [];\n  this.inlineMode = false;\n  this.md = md; // link to parser instance\n}\n\n// re-export Token class to use in core rules\nStateCore.prototype.Token = Token;\n\n// Normalize input string\n\n// https://spec.commonmark.org/0.29/#line-ending\nconst NEWLINES_RE = /\\r\\n?|\\n/g;\nconst NULL_RE = /\\0/g;\nfunction normalize(state) {\n  let str;\n\n  // Normalize newlines\n  str = state.src.replace(NEWLINES_RE, '\\n');\n\n  // Replace NULL characters\n  str = str.replace(NULL_RE, '\\uFFFD');\n  state.src = str;\n}\n\nfunction block(state) {\n  let token;\n  if (state.inlineMode) {\n    token = new state.Token('inline', '', 0);\n    token.content = state.src;\n    token.map = [0, 1];\n    token.children = [];\n    state.tokens.push(token);\n  } else {\n    state.md.block.parse(state.src, state.md, state.env, state.tokens);\n  }\n}\n\nfunction inline(state) {\n  const tokens = state.tokens;\n\n  // Parse inlines\n  for (let i = 0, l = tokens.length; i < l; i++) {\n    const tok = tokens[i];\n    if (tok.type === 'inline') {\n      state.md.inline.parse(tok.content, state.md, state.env, tok.children);\n    }\n  }\n}\n\n// Replace link-like texts with link nodes.\n//\n// Currently restricted by `md.validateLink()` to http/https/ftp\n//\n\nfunction isLinkOpen$1(str) {\n  return /^<a[>\\s]/i.test(str);\n}\nfunction isLinkClose$1(str) {\n  return /^<\\/a\\s*>/i.test(str);\n}\nfunction linkify$1(state) {\n  const blockTokens = state.tokens;\n  if (!state.md.options.linkify) {\n    return;\n  }\n  for (let j = 0, l = blockTokens.length; j < l; j++) {\n    if (blockTokens[j].type !== 'inline' || !state.md.linkify.pretest(blockTokens[j].content)) {\n      continue;\n    }\n    let tokens = blockTokens[j].children;\n    let htmlLinkLevel = 0;\n\n    // We scan from the end, to keep position when new tags added.\n    // Use reversed logic in links start/end match\n    for (let i = tokens.length - 1; i >= 0; i--) {\n      const currentToken = tokens[i];\n\n      // Skip content of markdown links\n      if (currentToken.type === 'link_close') {\n        i--;\n        while (tokens[i].level !== currentToken.level && tokens[i].type !== 'link_open') {\n          i--;\n        }\n        continue;\n      }\n\n      // Skip content of html tag links\n      if (currentToken.type === 'html_inline') {\n        if (isLinkOpen$1(currentToken.content) && htmlLinkLevel > 0) {\n          htmlLinkLevel--;\n        }\n        if (isLinkClose$1(currentToken.content)) {\n          htmlLinkLevel++;\n        }\n      }\n      if (htmlLinkLevel > 0) {\n        continue;\n      }\n      if (currentToken.type === 'text' && state.md.linkify.test(currentToken.content)) {\n        const text = currentToken.content;\n        let links = state.md.linkify.match(text);\n\n        // Now split string to nodes\n        const nodes = [];\n        let level = currentToken.level;\n        let lastPos = 0;\n\n        // forbid escape sequence at the start of the string,\n        // this avoids http\\://example.com/ from being linkified as\n        // http:<a href=\"//example.com/\">//example.com/</a>\n        if (links.length > 0 && links[0].index === 0 && i > 0 && tokens[i - 1].type === 'text_special') {\n          links = links.slice(1);\n        }\n        for (let ln = 0; ln < links.length; ln++) {\n          const url = links[ln].url;\n          const fullUrl = state.md.normalizeLink(url);\n          if (!state.md.validateLink(fullUrl)) {\n            continue;\n          }\n          let urlText = links[ln].text;\n\n          // Linkifier might send raw hostnames like \"example.com\", where url\n          // starts with domain name. So we prepend http:// in those cases,\n          // and remove it afterwards.\n          //\n          if (!links[ln].schema) {\n            urlText = state.md.normalizeLinkText('http://' + urlText).replace(/^http:\\/\\//, '');\n          } else if (links[ln].schema === 'mailto:' && !/^mailto:/i.test(urlText)) {\n            urlText = state.md.normalizeLinkText('mailto:' + urlText).replace(/^mailto:/, '');\n          } else {\n            urlText = state.md.normalizeLinkText(urlText);\n          }\n          const pos = links[ln].index;\n          if (pos > lastPos) {\n            const token = new state.Token('text', '', 0);\n            token.content = text.slice(lastPos, pos);\n            token.level = level;\n            nodes.push(token);\n          }\n          const token_o = new state.Token('link_open', 'a', 1);\n          token_o.attrs = [['href', fullUrl]];\n          token_o.level = level++;\n          token_o.markup = 'linkify';\n          token_o.info = 'auto';\n          nodes.push(token_o);\n          const token_t = new state.Token('text', '', 0);\n          token_t.content = urlText;\n          token_t.level = level;\n          nodes.push(token_t);\n          const token_c = new state.Token('link_close', 'a', -1);\n          token_c.level = --level;\n          token_c.markup = 'linkify';\n          token_c.info = 'auto';\n          nodes.push(token_c);\n          lastPos = links[ln].lastIndex;\n        }\n        if (lastPos < text.length) {\n          const token = new state.Token('text', '', 0);\n          token.content = text.slice(lastPos);\n          token.level = level;\n          nodes.push(token);\n        }\n\n        // replace current node\n        blockTokens[j].children = tokens = arrayReplaceAt(tokens, i, nodes);\n      }\n    }\n  }\n}\n\n// Simple typographic replacements\n//\n// (c) (C) → ©\n// (tm) (TM) → ™\n// (r) (R) → ®\n// +- → ±\n// ... → … (also ?.... → ?.., !.... → !..)\n// ???????? → ???, !!!!! → !!!, `,,` → `,`\n// -- → &ndash;, --- → &mdash;\n//\n\n// TODO:\n// - fractionals 1/2, 1/4, 3/4 -> ½, ¼, ¾\n// - multiplications 2 x 4 -> 2 × 4\n\nconst RARE_RE = /\\+-|\\.\\.|\\?\\?\\?\\?|!!!!|,,|--/;\n\n// Workaround for phantomjs - need regex without /g flag,\n// or root check will fail every second time\nconst SCOPED_ABBR_TEST_RE = /\\((c|tm|r)\\)/i;\nconst SCOPED_ABBR_RE = /\\((c|tm|r)\\)/ig;\nconst SCOPED_ABBR = {\n  c: '©',\n  r: '®',\n  tm: '™'\n};\nfunction replaceFn(match, name) {\n  return SCOPED_ABBR[name.toLowerCase()];\n}\nfunction replace_scoped(inlineTokens) {\n  let inside_autolink = 0;\n  for (let i = inlineTokens.length - 1; i >= 0; i--) {\n    const token = inlineTokens[i];\n    if (token.type === 'text' && !inside_autolink) {\n      token.content = token.content.replace(SCOPED_ABBR_RE, replaceFn);\n    }\n    if (token.type === 'link_open' && token.info === 'auto') {\n      inside_autolink--;\n    }\n    if (token.type === 'link_close' && token.info === 'auto') {\n      inside_autolink++;\n    }\n  }\n}\nfunction replace_rare(inlineTokens) {\n  let inside_autolink = 0;\n  for (let i = inlineTokens.length - 1; i >= 0; i--) {\n    const token = inlineTokens[i];\n    if (token.type === 'text' && !inside_autolink) {\n      if (RARE_RE.test(token.content)) {\n        token.content = token.content.replace(/\\+-/g, '±')\n        // .., ..., ....... -> …\n        // but ?..... & !..... -> ?.. & !..\n        .replace(/\\.{2,}/g, '…').replace(/([?!])…/g, '$1..').replace(/([?!]){4,}/g, '$1$1$1').replace(/,{2,}/g, ',')\n        // em-dash\n        .replace(/(^|[^-])---(?=[^-]|$)/mg, '$1\\u2014')\n        // en-dash\n        .replace(/(^|\\s)--(?=\\s|$)/mg, '$1\\u2013').replace(/(^|[^-\\s])--(?=[^-\\s]|$)/mg, '$1\\u2013');\n      }\n    }\n    if (token.type === 'link_open' && token.info === 'auto') {\n      inside_autolink--;\n    }\n    if (token.type === 'link_close' && token.info === 'auto') {\n      inside_autolink++;\n    }\n  }\n}\nfunction replace(state) {\n  let blkIdx;\n  if (!state.md.options.typographer) {\n    return;\n  }\n  for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n    if (state.tokens[blkIdx].type !== 'inline') {\n      continue;\n    }\n    if (SCOPED_ABBR_TEST_RE.test(state.tokens[blkIdx].content)) {\n      replace_scoped(state.tokens[blkIdx].children);\n    }\n    if (RARE_RE.test(state.tokens[blkIdx].content)) {\n      replace_rare(state.tokens[blkIdx].children);\n    }\n  }\n}\n\n// Convert straight quotation marks to typographic ones\n//\n\nconst QUOTE_TEST_RE = /['\"]/;\nconst QUOTE_RE = /['\"]/g;\nconst APOSTROPHE = '\\u2019'; /* ’ */\n\nfunction replaceAt(str, index, ch) {\n  return str.slice(0, index) + ch + str.slice(index + 1);\n}\nfunction process_inlines(tokens, state) {\n  let j;\n  const stack = [];\n  for (let i = 0; i < tokens.length; i++) {\n    const token = tokens[i];\n    const thisLevel = tokens[i].level;\n    for (j = stack.length - 1; j >= 0; j--) {\n      if (stack[j].level <= thisLevel) {\n        break;\n      }\n    }\n    stack.length = j + 1;\n    if (token.type !== 'text') {\n      continue;\n    }\n    let text = token.content;\n    let pos = 0;\n    let max = text.length;\n\n    /* eslint no-labels:0,block-scoped-var:0 */\n    OUTER: while (pos < max) {\n      QUOTE_RE.lastIndex = pos;\n      const t = QUOTE_RE.exec(text);\n      if (!t) {\n        break;\n      }\n      let canOpen = true;\n      let canClose = true;\n      pos = t.index + 1;\n      const isSingle = t[0] === \"'\";\n\n      // Find previous character,\n      // default to space if it's the beginning of the line\n      //\n      let lastChar = 0x20;\n      if (t.index - 1 >= 0) {\n        lastChar = text.charCodeAt(t.index - 1);\n      } else {\n        for (j = i - 1; j >= 0; j--) {\n          if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // lastChar defaults to 0x20\n          if (!tokens[j].content) continue; // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n          lastChar = tokens[j].content.charCodeAt(tokens[j].content.length - 1);\n          break;\n        }\n      }\n\n      // Find next character,\n      // default to space if it's the end of the line\n      //\n      let nextChar = 0x20;\n      if (pos < max) {\n        nextChar = text.charCodeAt(pos);\n      } else {\n        for (j = i + 1; j < tokens.length; j++) {\n          if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // nextChar defaults to 0x20\n          if (!tokens[j].content) continue; // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n          nextChar = tokens[j].content.charCodeAt(0);\n          break;\n        }\n      }\n      const isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n      const isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n      const isLastWhiteSpace = isWhiteSpace(lastChar);\n      const isNextWhiteSpace = isWhiteSpace(nextChar);\n      if (isNextWhiteSpace) {\n        canOpen = false;\n      } else if (isNextPunctChar) {\n        if (!(isLastWhiteSpace || isLastPunctChar)) {\n          canOpen = false;\n        }\n      }\n      if (isLastWhiteSpace) {\n        canClose = false;\n      } else if (isLastPunctChar) {\n        if (!(isNextWhiteSpace || isNextPunctChar)) {\n          canClose = false;\n        }\n      }\n      if (nextChar === 0x22 /* \" */ && t[0] === '\"') {\n        if (lastChar >= 0x30 /* 0 */ && lastChar <= 0x39 /* 9 */) {\n          // special case: 1\"\" - count first quote as an inch\n          canClose = canOpen = false;\n        }\n      }\n      if (canOpen && canClose) {\n        // Replace quotes in the middle of punctuation sequence, but not\n        // in the middle of the words, i.e.:\n        //\n        // 1. foo \" bar \" baz - not replaced\n        // 2. foo-\"-bar-\"-baz - replaced\n        // 3. foo\"bar\"baz     - not replaced\n        //\n        canOpen = isLastPunctChar;\n        canClose = isNextPunctChar;\n      }\n      if (!canOpen && !canClose) {\n        // middle of word\n        if (isSingle) {\n          token.content = replaceAt(token.content, t.index, APOSTROPHE);\n        }\n        continue;\n      }\n      if (canClose) {\n        // this could be a closing quote, rewind the stack to get a match\n        for (j = stack.length - 1; j >= 0; j--) {\n          let item = stack[j];\n          if (stack[j].level < thisLevel) {\n            break;\n          }\n          if (item.single === isSingle && stack[j].level === thisLevel) {\n            item = stack[j];\n            let openQuote;\n            let closeQuote;\n            if (isSingle) {\n              openQuote = state.md.options.quotes[2];\n              closeQuote = state.md.options.quotes[3];\n            } else {\n              openQuote = state.md.options.quotes[0];\n              closeQuote = state.md.options.quotes[1];\n            }\n\n            // replace token.content *before* tokens[item.token].content,\n            // because, if they are pointing at the same token, replaceAt\n            // could mess up indices when quote length != 1\n            token.content = replaceAt(token.content, t.index, closeQuote);\n            tokens[item.token].content = replaceAt(tokens[item.token].content, item.pos, openQuote);\n            pos += closeQuote.length - 1;\n            if (item.token === i) {\n              pos += openQuote.length - 1;\n            }\n            text = token.content;\n            max = text.length;\n            stack.length = j;\n            continue OUTER;\n          }\n        }\n      }\n      if (canOpen) {\n        stack.push({\n          token: i,\n          pos: t.index,\n          single: isSingle,\n          level: thisLevel\n        });\n      } else if (canClose && isSingle) {\n        token.content = replaceAt(token.content, t.index, APOSTROPHE);\n      }\n    }\n  }\n}\nfunction smartquotes(state) {\n  /* eslint max-depth:0 */\n  if (!state.md.options.typographer) {\n    return;\n  }\n  for (let blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n    if (state.tokens[blkIdx].type !== 'inline' || !QUOTE_TEST_RE.test(state.tokens[blkIdx].content)) {\n      continue;\n    }\n    process_inlines(state.tokens[blkIdx].children, state);\n  }\n}\n\n// Join raw text tokens with the rest of the text\n//\n// This is set as a separate rule to provide an opportunity for plugins\n// to run text replacements after text join, but before escape join.\n//\n// For example, `\\:)` shouldn't be replaced with an emoji.\n//\n\nfunction text_join(state) {\n  let curr, last;\n  const blockTokens = state.tokens;\n  const l = blockTokens.length;\n  for (let j = 0; j < l; j++) {\n    if (blockTokens[j].type !== 'inline') continue;\n    const tokens = blockTokens[j].children;\n    const max = tokens.length;\n    for (curr = 0; curr < max; curr++) {\n      if (tokens[curr].type === 'text_special') {\n        tokens[curr].type = 'text';\n      }\n    }\n    for (curr = last = 0; curr < max; curr++) {\n      if (tokens[curr].type === 'text' && curr + 1 < max && tokens[curr + 1].type === 'text') {\n        // collapse two adjacent text nodes\n        tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content;\n      } else {\n        if (curr !== last) {\n          tokens[last] = tokens[curr];\n        }\n        last++;\n      }\n    }\n    if (curr !== last) {\n      tokens.length = last;\n    }\n  }\n}\n\n/** internal\n * class Core\n *\n * Top-level rules executor. Glues block/inline parsers and does intermediate\n * transformations.\n **/\n\nconst _rules$2 = [['normalize', normalize], ['block', block], ['inline', inline], ['linkify', linkify$1], ['replacements', replace], ['smartquotes', smartquotes],\n// `text_join` finds `text_special` tokens (for escape sequences)\n// and joins them with the rest of the text\n['text_join', text_join]];\n\n/**\n * new Core()\n **/\nfunction Core() {\n  /**\n   * Core#ruler -> Ruler\n   *\n   * [[Ruler]] instance. Keep configuration of core rules.\n   **/\n  this.ruler = new Ruler();\n  for (let i = 0; i < _rules$2.length; i++) {\n    this.ruler.push(_rules$2[i][0], _rules$2[i][1]);\n  }\n}\n\n/**\n * Core.process(state)\n *\n * Executes core chain rules.\n **/\nCore.prototype.process = function (state) {\n  const rules = this.ruler.getRules('');\n  for (let i = 0, l = rules.length; i < l; i++) {\n    rules[i](state);\n  }\n};\nCore.prototype.State = StateCore;\n\n// Parser state class\n\nfunction StateBlock(src, md, env, tokens) {\n  this.src = src;\n\n  // link to parser instance\n  this.md = md;\n  this.env = env;\n\n  //\n  // Internal state vartiables\n  //\n\n  this.tokens = tokens;\n  this.bMarks = []; // line begin offsets for fast jumps\n  this.eMarks = []; // line end offsets for fast jumps\n  this.tShift = []; // offsets of the first non-space characters (tabs not expanded)\n  this.sCount = []; // indents for each line (tabs expanded)\n\n  // An amount of virtual spaces (tabs expanded) between beginning\n  // of each line (bMarks) and real beginning of that line.\n  //\n  // It exists only as a hack because blockquotes override bMarks\n  // losing information in the process.\n  //\n  // It's used only when expanding tabs, you can think about it as\n  // an initial tab length, e.g. bsCount=21 applied to string `\\t123`\n  // means first tab should be expanded to 4-21%4 === 3 spaces.\n  //\n  this.bsCount = [];\n\n  // block parser variables\n\n  // required block content indent (for example, if we are\n  // inside a list, it would be positioned after list marker)\n  this.blkIndent = 0;\n  this.line = 0; // line index in src\n  this.lineMax = 0; // lines count\n  this.tight = false; // loose/tight mode for lists\n  this.ddIndent = -1; // indent of the current dd block (-1 if there isn't any)\n  this.listIndent = -1; // indent of the current list block (-1 if there isn't any)\n\n  // can be 'blockquote', 'list', 'root', 'paragraph' or 'reference'\n  // used in lists to determine if they interrupt a paragraph\n  this.parentType = 'root';\n  this.level = 0;\n\n  // Create caches\n  // Generate markers.\n  const s = this.src;\n  for (let start = 0, pos = 0, indent = 0, offset = 0, len = s.length, indent_found = false; pos < len; pos++) {\n    const ch = s.charCodeAt(pos);\n    if (!indent_found) {\n      if (isSpace(ch)) {\n        indent++;\n        if (ch === 0x09) {\n          offset += 4 - offset % 4;\n        } else {\n          offset++;\n        }\n        continue;\n      } else {\n        indent_found = true;\n      }\n    }\n    if (ch === 0x0A || pos === len - 1) {\n      if (ch !== 0x0A) {\n        pos++;\n      }\n      this.bMarks.push(start);\n      this.eMarks.push(pos);\n      this.tShift.push(indent);\n      this.sCount.push(offset);\n      this.bsCount.push(0);\n      indent_found = false;\n      indent = 0;\n      offset = 0;\n      start = pos + 1;\n    }\n  }\n\n  // Push fake entry to simplify cache bounds checks\n  this.bMarks.push(s.length);\n  this.eMarks.push(s.length);\n  this.tShift.push(0);\n  this.sCount.push(0);\n  this.bsCount.push(0);\n  this.lineMax = this.bMarks.length - 1; // don't count last fake line\n}\n\n// Push new token to \"stream\".\n//\nStateBlock.prototype.push = function (type, tag, nesting) {\n  const token = new Token(type, tag, nesting);\n  token.block = true;\n  if (nesting < 0) this.level--; // closing tag\n  token.level = this.level;\n  if (nesting > 0) this.level++; // opening tag\n\n  this.tokens.push(token);\n  return token;\n};\nStateBlock.prototype.isEmpty = function isEmpty(line) {\n  return this.bMarks[line] + this.tShift[line] >= this.eMarks[line];\n};\nStateBlock.prototype.skipEmptyLines = function skipEmptyLines(from) {\n  for (let max = this.lineMax; from < max; from++) {\n    if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) {\n      break;\n    }\n  }\n  return from;\n};\n\n// Skip spaces from given position.\nStateBlock.prototype.skipSpaces = function skipSpaces(pos) {\n  for (let max = this.src.length; pos < max; pos++) {\n    const ch = this.src.charCodeAt(pos);\n    if (!isSpace(ch)) {\n      break;\n    }\n  }\n  return pos;\n};\n\n// Skip spaces from given position in reverse.\nStateBlock.prototype.skipSpacesBack = function skipSpacesBack(pos, min) {\n  if (pos <= min) {\n    return pos;\n  }\n  while (pos > min) {\n    if (!isSpace(this.src.charCodeAt(--pos))) {\n      return pos + 1;\n    }\n  }\n  return pos;\n};\n\n// Skip char codes from given position\nStateBlock.prototype.skipChars = function skipChars(pos, code) {\n  for (let max = this.src.length; pos < max; pos++) {\n    if (this.src.charCodeAt(pos) !== code) {\n      break;\n    }\n  }\n  return pos;\n};\n\n// Skip char codes reverse from given position - 1\nStateBlock.prototype.skipCharsBack = function skipCharsBack(pos, code, min) {\n  if (pos <= min) {\n    return pos;\n  }\n  while (pos > min) {\n    if (code !== this.src.charCodeAt(--pos)) {\n      return pos + 1;\n    }\n  }\n  return pos;\n};\n\n// cut lines range from source.\nStateBlock.prototype.getLines = function getLines(begin, end, indent, keepLastLF) {\n  if (begin >= end) {\n    return '';\n  }\n  const queue = new Array(end - begin);\n  for (let i = 0, line = begin; line < end; line++, i++) {\n    let lineIndent = 0;\n    const lineStart = this.bMarks[line];\n    let first = lineStart;\n    let last;\n    if (line + 1 < end || keepLastLF) {\n      // No need for bounds check because we have fake entry on tail.\n      last = this.eMarks[line] + 1;\n    } else {\n      last = this.eMarks[line];\n    }\n    while (first < last && lineIndent < indent) {\n      const ch = this.src.charCodeAt(first);\n      if (isSpace(ch)) {\n        if (ch === 0x09) {\n          lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4;\n        } else {\n          lineIndent++;\n        }\n      } else if (first - lineStart < this.tShift[line]) {\n        // patched tShift masked characters to look like spaces (blockquotes, list markers)\n        lineIndent++;\n      } else {\n        break;\n      }\n      first++;\n    }\n    if (lineIndent > indent) {\n      // partially expanding tabs in code blocks, e.g '\\t\\tfoobar'\n      // with indent=2 becomes '  \\tfoobar'\n      queue[i] = new Array(lineIndent - indent + 1).join(' ') + this.src.slice(first, last);\n    } else {\n      queue[i] = this.src.slice(first, last);\n    }\n  }\n  return queue.join('');\n};\n\n// re-export Token class to use in block rules\nStateBlock.prototype.Token = Token;\n\n// GFM table, https://github.github.com/gfm/#tables-extension-\n\n\n// Limit the amount of empty autocompleted cells in a table,\n// see https://github.com/markdown-it/markdown-it/issues/1000,\n//\n// Both pulldown-cmark and commonmark-hs limit the number of cells this way to ~200k.\n// We set it to 65k, which can expand user input by a factor of x370\n// (256x256 square is 1.8kB expanded into 650kB).\nconst MAX_AUTOCOMPLETED_CELLS = 0x10000;\nfunction getLine(state, line) {\n  const pos = state.bMarks[line] + state.tShift[line];\n  const max = state.eMarks[line];\n  return state.src.slice(pos, max);\n}\nfunction escapedSplit(str) {\n  const result = [];\n  const max = str.length;\n  let pos = 0;\n  let ch = str.charCodeAt(pos);\n  let isEscaped = false;\n  let lastPos = 0;\n  let current = '';\n  while (pos < max) {\n    if (ch === 0x7c /* | */) {\n      if (!isEscaped) {\n        // pipe separating cells, '|'\n        result.push(current + str.substring(lastPos, pos));\n        current = '';\n        lastPos = pos + 1;\n      } else {\n        // escaped pipe, '\\|'\n        current += str.substring(lastPos, pos - 1);\n        lastPos = pos;\n      }\n    }\n    isEscaped = ch === 0x5c /* \\ */;\n    pos++;\n    ch = str.charCodeAt(pos);\n  }\n  result.push(current + str.substring(lastPos));\n  return result;\n}\nfunction table(state, startLine, endLine, silent) {\n  // should have at least two lines\n  if (startLine + 2 > endLine) {\n    return false;\n  }\n  let nextLine = startLine + 1;\n  if (state.sCount[nextLine] < state.blkIndent) {\n    return false;\n  }\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[nextLine] - state.blkIndent >= 4) {\n    return false;\n  }\n\n  // first character of the second line should be '|', '-', ':',\n  // and no other characters are allowed but spaces;\n  // basically, this is the equivalent of /^[-:|][-:|\\s]*$/ regexp\n\n  let pos = state.bMarks[nextLine] + state.tShift[nextLine];\n  if (pos >= state.eMarks[nextLine]) {\n    return false;\n  }\n  const firstCh = state.src.charCodeAt(pos++);\n  if (firstCh !== 0x7C /* | */ && firstCh !== 0x2D /* - */ && firstCh !== 0x3A /* : */) {\n    return false;\n  }\n  if (pos >= state.eMarks[nextLine]) {\n    return false;\n  }\n  const secondCh = state.src.charCodeAt(pos++);\n  if (secondCh !== 0x7C /* | */ && secondCh !== 0x2D /* - */ && secondCh !== 0x3A /* : */ && !isSpace(secondCh)) {\n    return false;\n  }\n\n  // if first character is '-', then second character must not be a space\n  // (due to parsing ambiguity with list)\n  if (firstCh === 0x2D /* - */ && isSpace(secondCh)) {\n    return false;\n  }\n  while (pos < state.eMarks[nextLine]) {\n    const ch = state.src.charCodeAt(pos);\n    if (ch !== 0x7C /* | */ && ch !== 0x2D /* - */ && ch !== 0x3A /* : */ && !isSpace(ch)) {\n      return false;\n    }\n    pos++;\n  }\n  let lineText = getLine(state, startLine + 1);\n  let columns = lineText.split('|');\n  const aligns = [];\n  for (let i = 0; i < columns.length; i++) {\n    const t = columns[i].trim();\n    if (!t) {\n      // allow empty columns before and after table, but not in between columns;\n      // e.g. allow ` |---| `, disallow ` ---||--- `\n      if (i === 0 || i === columns.length - 1) {\n        continue;\n      } else {\n        return false;\n      }\n    }\n    if (!/^:?-+:?$/.test(t)) {\n      return false;\n    }\n    if (t.charCodeAt(t.length - 1) === 0x3A /* : */) {\n      aligns.push(t.charCodeAt(0) === 0x3A /* : */ ? 'center' : 'right');\n    } else if (t.charCodeAt(0) === 0x3A /* : */) {\n      aligns.push('left');\n    } else {\n      aligns.push('');\n    }\n  }\n  lineText = getLine(state, startLine).trim();\n  if (lineText.indexOf('|') === -1) {\n    return false;\n  }\n  if (state.sCount[startLine] - state.blkIndent >= 4) {\n    return false;\n  }\n  columns = escapedSplit(lineText);\n  if (columns.length && columns[0] === '') columns.shift();\n  if (columns.length && columns[columns.length - 1] === '') columns.pop();\n\n  // header row will define an amount of columns in the entire table,\n  // and align row should be exactly the same (the rest of the rows can differ)\n  const columnCount = columns.length;\n  if (columnCount === 0 || columnCount !== aligns.length) {\n    return false;\n  }\n  if (silent) {\n    return true;\n  }\n  const oldParentType = state.parentType;\n  state.parentType = 'table';\n\n  // use 'blockquote' lists for termination because it's\n  // the most similar to tables\n  const terminatorRules = state.md.block.ruler.getRules('blockquote');\n  const token_to = state.push('table_open', 'table', 1);\n  const tableLines = [startLine, 0];\n  token_to.map = tableLines;\n  const token_tho = state.push('thead_open', 'thead', 1);\n  token_tho.map = [startLine, startLine + 1];\n  const token_htro = state.push('tr_open', 'tr', 1);\n  token_htro.map = [startLine, startLine + 1];\n  for (let i = 0; i < columns.length; i++) {\n    const token_ho = state.push('th_open', 'th', 1);\n    if (aligns[i]) {\n      token_ho.attrs = [['style', 'text-align:' + aligns[i]]];\n    }\n    const token_il = state.push('inline', '', 0);\n    token_il.content = columns[i].trim();\n    token_il.children = [];\n    state.push('th_close', 'th', -1);\n  }\n  state.push('tr_close', 'tr', -1);\n  state.push('thead_close', 'thead', -1);\n  let tbodyLines;\n  let autocompletedCells = 0;\n  for (nextLine = startLine + 2; nextLine < endLine; nextLine++) {\n    if (state.sCount[nextLine] < state.blkIndent) {\n      break;\n    }\n    let terminate = false;\n    for (let i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n    if (terminate) {\n      break;\n    }\n    lineText = getLine(state, nextLine).trim();\n    if (!lineText) {\n      break;\n    }\n    if (state.sCount[nextLine] - state.blkIndent >= 4) {\n      break;\n    }\n    columns = escapedSplit(lineText);\n    if (columns.length && columns[0] === '') columns.shift();\n    if (columns.length && columns[columns.length - 1] === '') columns.pop();\n\n    // note: autocomplete count can be negative if user specifies more columns than header,\n    // but that does not affect intended use (which is limiting expansion)\n    autocompletedCells += columnCount - columns.length;\n    if (autocompletedCells > MAX_AUTOCOMPLETED_CELLS) {\n      break;\n    }\n    if (nextLine === startLine + 2) {\n      const token_tbo = state.push('tbody_open', 'tbody', 1);\n      token_tbo.map = tbodyLines = [startLine + 2, 0];\n    }\n    const token_tro = state.push('tr_open', 'tr', 1);\n    token_tro.map = [nextLine, nextLine + 1];\n    for (let i = 0; i < columnCount; i++) {\n      const token_tdo = state.push('td_open', 'td', 1);\n      if (aligns[i]) {\n        token_tdo.attrs = [['style', 'text-align:' + aligns[i]]];\n      }\n      const token_il = state.push('inline', '', 0);\n      token_il.content = columns[i] ? columns[i].trim() : '';\n      token_il.children = [];\n      state.push('td_close', 'td', -1);\n    }\n    state.push('tr_close', 'tr', -1);\n  }\n  if (tbodyLines) {\n    state.push('tbody_close', 'tbody', -1);\n    tbodyLines[1] = nextLine;\n  }\n  state.push('table_close', 'table', -1);\n  tableLines[1] = nextLine;\n  state.parentType = oldParentType;\n  state.line = nextLine;\n  return true;\n}\n\n// Code block (4 spaces padded)\n\nfunction code(state, startLine, endLine /*, silent */) {\n  if (state.sCount[startLine] - state.blkIndent < 4) {\n    return false;\n  }\n  let nextLine = startLine + 1;\n  let last = nextLine;\n  while (nextLine < endLine) {\n    if (state.isEmpty(nextLine)) {\n      nextLine++;\n      continue;\n    }\n    if (state.sCount[nextLine] - state.blkIndent >= 4) {\n      nextLine++;\n      last = nextLine;\n      continue;\n    }\n    break;\n  }\n  state.line = last;\n  const token = state.push('code_block', 'code', 0);\n  token.content = state.getLines(startLine, last, 4 + state.blkIndent, false) + '\\n';\n  token.map = [startLine, state.line];\n  return true;\n}\n\n// fences (``` lang, ~~~ lang)\n\nfunction fence(state, startLine, endLine, silent) {\n  let pos = state.bMarks[startLine] + state.tShift[startLine];\n  let max = state.eMarks[startLine];\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) {\n    return false;\n  }\n  if (pos + 3 > max) {\n    return false;\n  }\n  const marker = state.src.charCodeAt(pos);\n  if (marker !== 0x7E /* ~ */ && marker !== 0x60 /* ` */) {\n    return false;\n  }\n\n  // scan marker length\n  let mem = pos;\n  pos = state.skipChars(pos, marker);\n  let len = pos - mem;\n  if (len < 3) {\n    return false;\n  }\n  const markup = state.src.slice(mem, pos);\n  const params = state.src.slice(pos, max);\n  if (marker === 0x60 /* ` */) {\n    if (params.indexOf(String.fromCharCode(marker)) >= 0) {\n      return false;\n    }\n  }\n\n  // Since start is found, we can report success here in validation mode\n  if (silent) {\n    return true;\n  }\n\n  // search end of block\n  let nextLine = startLine;\n  let haveEndMarker = false;\n  for (;;) {\n    nextLine++;\n    if (nextLine >= endLine) {\n      // unclosed block should be autoclosed by end of document.\n      // also block seems to be autoclosed by end of parent\n      break;\n    }\n    pos = mem = state.bMarks[nextLine] + state.tShift[nextLine];\n    max = state.eMarks[nextLine];\n    if (pos < max && state.sCount[nextLine] < state.blkIndent) {\n      // non-empty line with negative indent should stop the list:\n      // - ```\n      //  test\n      break;\n    }\n    if (state.src.charCodeAt(pos) !== marker) {\n      continue;\n    }\n    if (state.sCount[nextLine] - state.blkIndent >= 4) {\n      // closing fence should be indented less than 4 spaces\n      continue;\n    }\n    pos = state.skipChars(pos, marker);\n\n    // closing code fence must be at least as long as the opening one\n    if (pos - mem < len) {\n      continue;\n    }\n\n    // make sure tail has spaces only\n    pos = state.skipSpaces(pos);\n    if (pos < max) {\n      continue;\n    }\n    haveEndMarker = true;\n    // found!\n    break;\n  }\n\n  // If a fence has heading spaces, they should be removed from its inner block\n  len = state.sCount[startLine];\n  state.line = nextLine + (haveEndMarker ? 1 : 0);\n  const token = state.push('fence', 'code', 0);\n  token.info = params;\n  token.content = state.getLines(startLine + 1, nextLine, len, true);\n  token.markup = markup;\n  token.map = [startLine, state.line];\n  return true;\n}\n\n// Block quotes\n\nfunction blockquote(state, startLine, endLine, silent) {\n  let pos = state.bMarks[startLine] + state.tShift[startLine];\n  let max = state.eMarks[startLine];\n  const oldLineMax = state.lineMax;\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) {\n    return false;\n  }\n\n  // check the block quote marker\n  if (state.src.charCodeAt(pos) !== 0x3E /* > */) {\n    return false;\n  }\n\n  // we know that it's going to be a valid blockquote,\n  // so no point trying to find the end of it in silent mode\n  if (silent) {\n    return true;\n  }\n  const oldBMarks = [];\n  const oldBSCount = [];\n  const oldSCount = [];\n  const oldTShift = [];\n  const terminatorRules = state.md.block.ruler.getRules('blockquote');\n  const oldParentType = state.parentType;\n  state.parentType = 'blockquote';\n  let lastLineEmpty = false;\n  let nextLine;\n\n  // Search the end of the block\n  //\n  // Block ends with either:\n  //  1. an empty line outside:\n  //     ```\n  //     > test\n  //\n  //     ```\n  //  2. an empty line inside:\n  //     ```\n  //     >\n  //     test\n  //     ```\n  //  3. another tag:\n  //     ```\n  //     > test\n  //      - - -\n  //     ```\n  for (nextLine = startLine; nextLine < endLine; nextLine++) {\n    // check if it's outdented, i.e. it's inside list item and indented\n    // less than said list item:\n    //\n    // ```\n    // 1. anything\n    //    > current blockquote\n    // 2. checking this line\n    // ```\n    const isOutdented = state.sCount[nextLine] < state.blkIndent;\n    pos = state.bMarks[nextLine] + state.tShift[nextLine];\n    max = state.eMarks[nextLine];\n    if (pos >= max) {\n      // Case 1: line is not inside the blockquote, and this line is empty.\n      break;\n    }\n    if (state.src.charCodeAt(pos++) === 0x3E /* > */ && !isOutdented) {\n      // This line is inside the blockquote.\n\n      // set offset past spaces and \">\"\n      let initial = state.sCount[nextLine] + 1;\n      let spaceAfterMarker;\n      let adjustTab;\n\n      // skip one optional space after '>'\n      if (state.src.charCodeAt(pos) === 0x20 /* space */) {\n        // ' >   test '\n        //     ^ -- position start of line here:\n        pos++;\n        initial++;\n        adjustTab = false;\n        spaceAfterMarker = true;\n      } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n        spaceAfterMarker = true;\n        if ((state.bsCount[nextLine] + initial) % 4 === 3) {\n          // '  >\\t  test '\n          //       ^ -- position start of line here (tab has width===1)\n          pos++;\n          initial++;\n          adjustTab = false;\n        } else {\n          // ' >\\t  test '\n          //    ^ -- position start of line here + shift bsCount slightly\n          //         to make extra space appear\n          adjustTab = true;\n        }\n      } else {\n        spaceAfterMarker = false;\n      }\n      let offset = initial;\n      oldBMarks.push(state.bMarks[nextLine]);\n      state.bMarks[nextLine] = pos;\n      while (pos < max) {\n        const ch = state.src.charCodeAt(pos);\n        if (isSpace(ch)) {\n          if (ch === 0x09) {\n            offset += 4 - (offset + state.bsCount[nextLine] + (adjustTab ? 1 : 0)) % 4;\n          } else {\n            offset++;\n          }\n        } else {\n          break;\n        }\n        pos++;\n      }\n      lastLineEmpty = pos >= max;\n      oldBSCount.push(state.bsCount[nextLine]);\n      state.bsCount[nextLine] = state.sCount[nextLine] + 1 + (spaceAfterMarker ? 1 : 0);\n      oldSCount.push(state.sCount[nextLine]);\n      state.sCount[nextLine] = offset - initial;\n      oldTShift.push(state.tShift[nextLine]);\n      state.tShift[nextLine] = pos - state.bMarks[nextLine];\n      continue;\n    }\n\n    // Case 2: line is not inside the blockquote, and the last line was empty.\n    if (lastLineEmpty) {\n      break;\n    }\n\n    // Case 3: another tag found.\n    let terminate = false;\n    for (let i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n    if (terminate) {\n      // Quirk to enforce \"hard termination mode\" for paragraphs;\n      // normally if you call `tokenize(state, startLine, nextLine)`,\n      // paragraphs will look below nextLine for paragraph continuation,\n      // but if blockquote is terminated by another tag, they shouldn't\n      state.lineMax = nextLine;\n      if (state.blkIndent !== 0) {\n        // state.blkIndent was non-zero, we now set it to zero,\n        // so we need to re-calculate all offsets to appear as\n        // if indent wasn't changed\n        oldBMarks.push(state.bMarks[nextLine]);\n        oldBSCount.push(state.bsCount[nextLine]);\n        oldTShift.push(state.tShift[nextLine]);\n        oldSCount.push(state.sCount[nextLine]);\n        state.sCount[nextLine] -= state.blkIndent;\n      }\n      break;\n    }\n    oldBMarks.push(state.bMarks[nextLine]);\n    oldBSCount.push(state.bsCount[nextLine]);\n    oldTShift.push(state.tShift[nextLine]);\n    oldSCount.push(state.sCount[nextLine]);\n\n    // A negative indentation means that this is a paragraph continuation\n    //\n    state.sCount[nextLine] = -1;\n  }\n  const oldIndent = state.blkIndent;\n  state.blkIndent = 0;\n  const token_o = state.push('blockquote_open', 'blockquote', 1);\n  token_o.markup = '>';\n  const lines = [startLine, 0];\n  token_o.map = lines;\n  state.md.block.tokenize(state, startLine, nextLine);\n  const token_c = state.push('blockquote_close', 'blockquote', -1);\n  token_c.markup = '>';\n  state.lineMax = oldLineMax;\n  state.parentType = oldParentType;\n  lines[1] = state.line;\n\n  // Restore original tShift; this might not be necessary since the parser\n  // has already been here, but just to make sure we can do that.\n  for (let i = 0; i < oldTShift.length; i++) {\n    state.bMarks[i + startLine] = oldBMarks[i];\n    state.tShift[i + startLine] = oldTShift[i];\n    state.sCount[i + startLine] = oldSCount[i];\n    state.bsCount[i + startLine] = oldBSCount[i];\n  }\n  state.blkIndent = oldIndent;\n  return true;\n}\n\n// Horizontal rule\n\nfunction hr(state, startLine, endLine, silent) {\n  const max = state.eMarks[startLine];\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) {\n    return false;\n  }\n  let pos = state.bMarks[startLine] + state.tShift[startLine];\n  const marker = state.src.charCodeAt(pos++);\n\n  // Check hr marker\n  if (marker !== 0x2A /* * */ && marker !== 0x2D /* - */ && marker !== 0x5F /* _ */) {\n    return false;\n  }\n\n  // markers can be mixed with spaces, but there should be at least 3 of them\n\n  let cnt = 1;\n  while (pos < max) {\n    const ch = state.src.charCodeAt(pos++);\n    if (ch !== marker && !isSpace(ch)) {\n      return false;\n    }\n    if (ch === marker) {\n      cnt++;\n    }\n  }\n  if (cnt < 3) {\n    return false;\n  }\n  if (silent) {\n    return true;\n  }\n  state.line = startLine + 1;\n  const token = state.push('hr', 'hr', 0);\n  token.map = [startLine, state.line];\n  token.markup = Array(cnt + 1).join(String.fromCharCode(marker));\n  return true;\n}\n\n// Lists\n\n\n// Search `[-+*][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipBulletListMarker(state, startLine) {\n  const max = state.eMarks[startLine];\n  let pos = state.bMarks[startLine] + state.tShift[startLine];\n  const marker = state.src.charCodeAt(pos++);\n  // Check bullet\n  if (marker !== 0x2A /* * */ && marker !== 0x2D /* - */ && marker !== 0x2B /* + */) {\n    return -1;\n  }\n  if (pos < max) {\n    const ch = state.src.charCodeAt(pos);\n    if (!isSpace(ch)) {\n      // \" -test \" - is not a list item\n      return -1;\n    }\n  }\n  return pos;\n}\n\n// Search `\\d+[.)][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipOrderedListMarker(state, startLine) {\n  const start = state.bMarks[startLine] + state.tShift[startLine];\n  const max = state.eMarks[startLine];\n  let pos = start;\n\n  // List marker should have at least 2 chars (digit + dot)\n  if (pos + 1 >= max) {\n    return -1;\n  }\n  let ch = state.src.charCodeAt(pos++);\n  if (ch < 0x30 /* 0 */ || ch > 0x39 /* 9 */) {\n    return -1;\n  }\n  for (;;) {\n    // EOL -> fail\n    if (pos >= max) {\n      return -1;\n    }\n    ch = state.src.charCodeAt(pos++);\n    if (ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */) {\n      // List marker should have no more than 9 digits\n      // (prevents integer overflow in browsers)\n      if (pos - start >= 10) {\n        return -1;\n      }\n      continue;\n    }\n\n    // found valid marker\n    if (ch === 0x29 /* ) */ || ch === 0x2e /* . */) {\n      break;\n    }\n    return -1;\n  }\n  if (pos < max) {\n    ch = state.src.charCodeAt(pos);\n    if (!isSpace(ch)) {\n      // \" 1.test \" - is not a list item\n      return -1;\n    }\n  }\n  return pos;\n}\nfunction markTightParagraphs(state, idx) {\n  const level = state.level + 2;\n  for (let i = idx + 2, l = state.tokens.length - 2; i < l; i++) {\n    if (state.tokens[i].level === level && state.tokens[i].type === 'paragraph_open') {\n      state.tokens[i + 2].hidden = true;\n      state.tokens[i].hidden = true;\n      i += 2;\n    }\n  }\n}\nfunction list(state, startLine, endLine, silent) {\n  let max, pos, start, token;\n  let nextLine = startLine;\n  let tight = true;\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[nextLine] - state.blkIndent >= 4) {\n    return false;\n  }\n\n  // Special case:\n  //  - item 1\n  //   - item 2\n  //    - item 3\n  //     - item 4\n  //      - this one is a paragraph continuation\n  if (state.listIndent >= 0 && state.sCount[nextLine] - state.listIndent >= 4 && state.sCount[nextLine] < state.blkIndent) {\n    return false;\n  }\n  let isTerminatingParagraph = false;\n\n  // limit conditions when list can interrupt\n  // a paragraph (validation mode only)\n  if (silent && state.parentType === 'paragraph') {\n    // Next list item should still terminate previous list item;\n    //\n    // This code can fail if plugins use blkIndent as well as lists,\n    // but I hope the spec gets fixed long before that happens.\n    //\n    if (state.sCount[nextLine] >= state.blkIndent) {\n      isTerminatingParagraph = true;\n    }\n  }\n\n  // Detect list type and position after marker\n  let isOrdered;\n  let markerValue;\n  let posAfterMarker;\n  if ((posAfterMarker = skipOrderedListMarker(state, nextLine)) >= 0) {\n    isOrdered = true;\n    start = state.bMarks[nextLine] + state.tShift[nextLine];\n    markerValue = Number(state.src.slice(start, posAfterMarker - 1));\n\n    // If we're starting a new ordered list right after\n    // a paragraph, it should start with 1.\n    if (isTerminatingParagraph && markerValue !== 1) return false;\n  } else if ((posAfterMarker = skipBulletListMarker(state, nextLine)) >= 0) {\n    isOrdered = false;\n  } else {\n    return false;\n  }\n\n  // If we're starting a new unordered list right after\n  // a paragraph, first line should not be empty.\n  if (isTerminatingParagraph) {\n    if (state.skipSpaces(posAfterMarker) >= state.eMarks[nextLine]) return false;\n  }\n\n  // For validation mode we can terminate immediately\n  if (silent) {\n    return true;\n  }\n\n  // We should terminate list on style change. Remember first one to compare.\n  const markerCharCode = state.src.charCodeAt(posAfterMarker - 1);\n\n  // Start list\n  const listTokIdx = state.tokens.length;\n  if (isOrdered) {\n    token = state.push('ordered_list_open', 'ol', 1);\n    if (markerValue !== 1) {\n      token.attrs = [['start', markerValue]];\n    }\n  } else {\n    token = state.push('bullet_list_open', 'ul', 1);\n  }\n  const listLines = [nextLine, 0];\n  token.map = listLines;\n  token.markup = String.fromCharCode(markerCharCode);\n\n  //\n  // Iterate list items\n  //\n\n  let prevEmptyEnd = false;\n  const terminatorRules = state.md.block.ruler.getRules('list');\n  const oldParentType = state.parentType;\n  state.parentType = 'list';\n  while (nextLine < endLine) {\n    pos = posAfterMarker;\n    max = state.eMarks[nextLine];\n    const initial = state.sCount[nextLine] + posAfterMarker - (state.bMarks[nextLine] + state.tShift[nextLine]);\n    let offset = initial;\n    while (pos < max) {\n      const ch = state.src.charCodeAt(pos);\n      if (ch === 0x09) {\n        offset += 4 - (offset + state.bsCount[nextLine]) % 4;\n      } else if (ch === 0x20) {\n        offset++;\n      } else {\n        break;\n      }\n      pos++;\n    }\n    const contentStart = pos;\n    let indentAfterMarker;\n    if (contentStart >= max) {\n      // trimming space in \"-    \\n  3\" case, indent is 1 here\n      indentAfterMarker = 1;\n    } else {\n      indentAfterMarker = offset - initial;\n    }\n\n    // If we have more than 4 spaces, the indent is 1\n    // (the rest is just indented code block)\n    if (indentAfterMarker > 4) {\n      indentAfterMarker = 1;\n    }\n\n    // \"  -  test\"\n    //  ^^^^^ - calculating total length of this thing\n    const indent = initial + indentAfterMarker;\n\n    // Run subparser & write tokens\n    token = state.push('list_item_open', 'li', 1);\n    token.markup = String.fromCharCode(markerCharCode);\n    const itemLines = [nextLine, 0];\n    token.map = itemLines;\n    if (isOrdered) {\n      token.info = state.src.slice(start, posAfterMarker - 1);\n    }\n\n    // change current state, then restore it after parser subcall\n    const oldTight = state.tight;\n    const oldTShift = state.tShift[nextLine];\n    const oldSCount = state.sCount[nextLine];\n\n    //  - example list\n    // ^ listIndent position will be here\n    //   ^ blkIndent position will be here\n    //\n    const oldListIndent = state.listIndent;\n    state.listIndent = state.blkIndent;\n    state.blkIndent = indent;\n    state.tight = true;\n    state.tShift[nextLine] = contentStart - state.bMarks[nextLine];\n    state.sCount[nextLine] = offset;\n    if (contentStart >= max && state.isEmpty(nextLine + 1)) {\n      // workaround for this case\n      // (list item is empty, list terminates before \"foo\"):\n      // ~~~~~~~~\n      //   -\n      //\n      //     foo\n      // ~~~~~~~~\n      state.line = Math.min(state.line + 2, endLine);\n    } else {\n      state.md.block.tokenize(state, nextLine, endLine, true);\n    }\n\n    // If any of list item is tight, mark list as tight\n    if (!state.tight || prevEmptyEnd) {\n      tight = false;\n    }\n    // Item become loose if finish with empty line,\n    // but we should filter last element, because it means list finish\n    prevEmptyEnd = state.line - nextLine > 1 && state.isEmpty(state.line - 1);\n    state.blkIndent = state.listIndent;\n    state.listIndent = oldListIndent;\n    state.tShift[nextLine] = oldTShift;\n    state.sCount[nextLine] = oldSCount;\n    state.tight = oldTight;\n    token = state.push('list_item_close', 'li', -1);\n    token.markup = String.fromCharCode(markerCharCode);\n    nextLine = state.line;\n    itemLines[1] = nextLine;\n    if (nextLine >= endLine) {\n      break;\n    }\n\n    //\n    // Try to check if list is terminated or continued.\n    //\n    if (state.sCount[nextLine] < state.blkIndent) {\n      break;\n    }\n\n    // if it's indented more than 3 spaces, it should be a code block\n    if (state.sCount[nextLine] - state.blkIndent >= 4) {\n      break;\n    }\n\n    // fail if terminating block found\n    let terminate = false;\n    for (let i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n    if (terminate) {\n      break;\n    }\n\n    // fail if list has another type\n    if (isOrdered) {\n      posAfterMarker = skipOrderedListMarker(state, nextLine);\n      if (posAfterMarker < 0) {\n        break;\n      }\n      start = state.bMarks[nextLine] + state.tShift[nextLine];\n    } else {\n      posAfterMarker = skipBulletListMarker(state, nextLine);\n      if (posAfterMarker < 0) {\n        break;\n      }\n    }\n    if (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) {\n      break;\n    }\n  }\n\n  // Finalize list\n  if (isOrdered) {\n    token = state.push('ordered_list_close', 'ol', -1);\n  } else {\n    token = state.push('bullet_list_close', 'ul', -1);\n  }\n  token.markup = String.fromCharCode(markerCharCode);\n  listLines[1] = nextLine;\n  state.line = nextLine;\n  state.parentType = oldParentType;\n\n  // mark paragraphs tight if needed\n  if (tight) {\n    markTightParagraphs(state, listTokIdx);\n  }\n  return true;\n}\n\nfunction reference(state, startLine, _endLine, silent) {\n  let pos = state.bMarks[startLine] + state.tShift[startLine];\n  let max = state.eMarks[startLine];\n  let nextLine = startLine + 1;\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) {\n    return false;\n  }\n  if (state.src.charCodeAt(pos) !== 0x5B /* [ */) {\n    return false;\n  }\n  function getNextLine(nextLine) {\n    const endLine = state.lineMax;\n    if (nextLine >= endLine || state.isEmpty(nextLine)) {\n      // empty line or end of input\n      return null;\n    }\n    let isContinuation = false;\n\n    // this would be a code block normally, but after paragraph\n    // it's considered a lazy continuation regardless of what's there\n    if (state.sCount[nextLine] - state.blkIndent > 3) {\n      isContinuation = true;\n    }\n\n    // quirk for blockquotes, this line should already be checked by that rule\n    if (state.sCount[nextLine] < 0) {\n      isContinuation = true;\n    }\n    if (!isContinuation) {\n      const terminatorRules = state.md.block.ruler.getRules('reference');\n      const oldParentType = state.parentType;\n      state.parentType = 'reference';\n\n      // Some tags can terminate paragraph without empty line.\n      let terminate = false;\n      for (let i = 0, l = terminatorRules.length; i < l; i++) {\n        if (terminatorRules[i](state, nextLine, endLine, true)) {\n          terminate = true;\n          break;\n        }\n      }\n      state.parentType = oldParentType;\n      if (terminate) {\n        // terminated by another block\n        return null;\n      }\n    }\n    const pos = state.bMarks[nextLine] + state.tShift[nextLine];\n    const max = state.eMarks[nextLine];\n\n    // max + 1 explicitly includes the newline\n    return state.src.slice(pos, max + 1);\n  }\n  let str = state.src.slice(pos, max + 1);\n  max = str.length;\n  let labelEnd = -1;\n  for (pos = 1; pos < max; pos++) {\n    const ch = str.charCodeAt(pos);\n    if (ch === 0x5B /* [ */) {\n      return false;\n    } else if (ch === 0x5D /* ] */) {\n      labelEnd = pos;\n      break;\n    } else if (ch === 0x0A /* \\n */) {\n      const lineContent = getNextLine(nextLine);\n      if (lineContent !== null) {\n        str += lineContent;\n        max = str.length;\n        nextLine++;\n      }\n    } else if (ch === 0x5C /* \\ */) {\n      pos++;\n      if (pos < max && str.charCodeAt(pos) === 0x0A) {\n        const lineContent = getNextLine(nextLine);\n        if (lineContent !== null) {\n          str += lineContent;\n          max = str.length;\n          nextLine++;\n        }\n      }\n    }\n  }\n  if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 0x3A /* : */) {\n    return false;\n  }\n\n  // [label]:   destination   'title'\n  //         ^^^ skip optional whitespace here\n  for (pos = labelEnd + 2; pos < max; pos++) {\n    const ch = str.charCodeAt(pos);\n    if (ch === 0x0A) {\n      const lineContent = getNextLine(nextLine);\n      if (lineContent !== null) {\n        str += lineContent;\n        max = str.length;\n        nextLine++;\n      }\n    } else if (isSpace(ch)) ; else {\n      break;\n    }\n  }\n\n  // [label]:   destination   'title'\n  //            ^^^^^^^^^^^ parse this\n  const destRes = state.md.helpers.parseLinkDestination(str, pos, max);\n  if (!destRes.ok) {\n    return false;\n  }\n  const href = state.md.normalizeLink(destRes.str);\n  if (!state.md.validateLink(href)) {\n    return false;\n  }\n  pos = destRes.pos;\n\n  // save cursor state, we could require to rollback later\n  const destEndPos = pos;\n  const destEndLineNo = nextLine;\n\n  // [label]:   destination   'title'\n  //                       ^^^ skipping those spaces\n  const start = pos;\n  for (; pos < max; pos++) {\n    const ch = str.charCodeAt(pos);\n    if (ch === 0x0A) {\n      const lineContent = getNextLine(nextLine);\n      if (lineContent !== null) {\n        str += lineContent;\n        max = str.length;\n        nextLine++;\n      }\n    } else if (isSpace(ch)) ; else {\n      break;\n    }\n  }\n\n  // [label]:   destination   'title'\n  //                          ^^^^^^^ parse this\n  let titleRes = state.md.helpers.parseLinkTitle(str, pos, max);\n  while (titleRes.can_continue) {\n    const lineContent = getNextLine(nextLine);\n    if (lineContent === null) break;\n    str += lineContent;\n    pos = max;\n    max = str.length;\n    nextLine++;\n    titleRes = state.md.helpers.parseLinkTitle(str, pos, max, titleRes);\n  }\n  let title;\n  if (pos < max && start !== pos && titleRes.ok) {\n    title = titleRes.str;\n    pos = titleRes.pos;\n  } else {\n    title = '';\n    pos = destEndPos;\n    nextLine = destEndLineNo;\n  }\n\n  // skip trailing spaces until the rest of the line\n  while (pos < max) {\n    const ch = str.charCodeAt(pos);\n    if (!isSpace(ch)) {\n      break;\n    }\n    pos++;\n  }\n  if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n    if (title) {\n      // garbage at the end of the line after title,\n      // but it could still be a valid reference if we roll back\n      title = '';\n      pos = destEndPos;\n      nextLine = destEndLineNo;\n      while (pos < max) {\n        const ch = str.charCodeAt(pos);\n        if (!isSpace(ch)) {\n          break;\n        }\n        pos++;\n      }\n    }\n  }\n  if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n    // garbage at the end of the line\n    return false;\n  }\n  const label = normalizeReference(str.slice(1, labelEnd));\n  if (!label) {\n    // CommonMark 0.20 disallows empty labels\n    return false;\n  }\n\n  // Reference can not terminate anything. This check is for safety only.\n  /* istanbul ignore if */\n  if (silent) {\n    return true;\n  }\n  if (typeof state.env.references === 'undefined') {\n    state.env.references = {};\n  }\n  if (typeof state.env.references[label] === 'undefined') {\n    state.env.references[label] = {\n      title,\n      href\n    };\n  }\n  state.line = nextLine;\n  return true;\n}\n\n// List of valid html blocks names, according to commonmark spec\n// https://spec.commonmark.org/0.30/#html-blocks\n\nvar block_names = ['address', 'article', 'aside', 'base', 'basefont', 'blockquote', 'body', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dialog', 'dir', 'div', 'dl', 'dt', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hr', 'html', 'iframe', 'legend', 'li', 'link', 'main', 'menu', 'menuitem', 'nav', 'noframes', 'ol', 'optgroup', 'option', 'p', 'param', 'search', 'section', 'summary', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul'];\n\n// Regexps to match html elements\n\nconst attr_name = '[a-zA-Z_:][a-zA-Z0-9:._-]*';\nconst unquoted = '[^\"\\'=<>`\\\\x00-\\\\x20]+';\nconst single_quoted = \"'[^']*'\";\nconst double_quoted = '\"[^\"]*\"';\nconst attr_value = '(?:' + unquoted + '|' + single_quoted + '|' + double_quoted + ')';\nconst attribute = '(?:\\\\s+' + attr_name + '(?:\\\\s*=\\\\s*' + attr_value + ')?)';\nconst open_tag = '<[A-Za-z][A-Za-z0-9\\\\-]*' + attribute + '*\\\\s*\\\\/?>';\nconst close_tag = '<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>';\nconst comment = '<!---?>|<!--(?:[^-]|-[^-]|--[^>])*-->';\nconst processing = '<[?][\\\\s\\\\S]*?[?]>';\nconst declaration = '<![A-Za-z][^>]*>';\nconst cdata = '<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>';\nconst HTML_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + '|' + comment + '|' + processing + '|' + declaration + '|' + cdata + ')');\nconst HTML_OPEN_CLOSE_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + ')');\n\n// HTML block\n\n\n// An array of opening and corresponding closing sequences for html tags,\n// last argument defines whether it can terminate a paragraph or not\n//\nconst HTML_SEQUENCES = [[/^<(script|pre|style|textarea)(?=(\\s|>|$))/i, /<\\/(script|pre|style|textarea)>/i, true], [/^<!--/, /-->/, true], [/^<\\?/, /\\?>/, true], [/^<![A-Z]/, />/, true], [/^<!\\[CDATA\\[/, /\\]\\]>/, true], [new RegExp('^</?(' + block_names.join('|') + ')(?=(\\\\s|/?>|$))', 'i'), /^$/, true], [new RegExp(HTML_OPEN_CLOSE_TAG_RE.source + '\\\\s*$'), /^$/, false]];\nfunction html_block(state, startLine, endLine, silent) {\n  let pos = state.bMarks[startLine] + state.tShift[startLine];\n  let max = state.eMarks[startLine];\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) {\n    return false;\n  }\n  if (!state.md.options.html) {\n    return false;\n  }\n  if (state.src.charCodeAt(pos) !== 0x3C /* < */) {\n    return false;\n  }\n  let lineText = state.src.slice(pos, max);\n  let i = 0;\n  for (; i < HTML_SEQUENCES.length; i++) {\n    if (HTML_SEQUENCES[i][0].test(lineText)) {\n      break;\n    }\n  }\n  if (i === HTML_SEQUENCES.length) {\n    return false;\n  }\n  if (silent) {\n    // true if this sequence can be a terminator, false otherwise\n    return HTML_SEQUENCES[i][2];\n  }\n  let nextLine = startLine + 1;\n\n  // If we are here - we detected HTML block.\n  // Let's roll down till block end.\n  if (!HTML_SEQUENCES[i][1].test(lineText)) {\n    for (; nextLine < endLine; nextLine++) {\n      if (state.sCount[nextLine] < state.blkIndent) {\n        break;\n      }\n      pos = state.bMarks[nextLine] + state.tShift[nextLine];\n      max = state.eMarks[nextLine];\n      lineText = state.src.slice(pos, max);\n      if (HTML_SEQUENCES[i][1].test(lineText)) {\n        if (lineText.length !== 0) {\n          nextLine++;\n        }\n        break;\n      }\n    }\n  }\n  state.line = nextLine;\n  const token = state.push('html_block', '', 0);\n  token.map = [startLine, nextLine];\n  token.content = state.getLines(startLine, nextLine, state.blkIndent, true);\n  return true;\n}\n\n// heading (#, ##, ...)\n\nfunction heading(state, startLine, endLine, silent) {\n  let pos = state.bMarks[startLine] + state.tShift[startLine];\n  let max = state.eMarks[startLine];\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) {\n    return false;\n  }\n  let ch = state.src.charCodeAt(pos);\n  if (ch !== 0x23 /* # */ || pos >= max) {\n    return false;\n  }\n\n  // count heading level\n  let level = 1;\n  ch = state.src.charCodeAt(++pos);\n  while (ch === 0x23 /* # */ && pos < max && level <= 6) {\n    level++;\n    ch = state.src.charCodeAt(++pos);\n  }\n  if (level > 6 || pos < max && !isSpace(ch)) {\n    return false;\n  }\n  if (silent) {\n    return true;\n  }\n\n  // Let's cut tails like '    ###  ' from the end of string\n\n  max = state.skipSpacesBack(max, pos);\n  const tmp = state.skipCharsBack(max, 0x23, pos); // #\n  if (tmp > pos && isSpace(state.src.charCodeAt(tmp - 1))) {\n    max = tmp;\n  }\n  state.line = startLine + 1;\n  const token_o = state.push('heading_open', 'h' + String(level), 1);\n  token_o.markup = '########'.slice(0, level);\n  token_o.map = [startLine, state.line];\n  const token_i = state.push('inline', '', 0);\n  token_i.content = state.src.slice(pos, max).trim();\n  token_i.map = [startLine, state.line];\n  token_i.children = [];\n  const token_c = state.push('heading_close', 'h' + String(level), -1);\n  token_c.markup = '########'.slice(0, level);\n  return true;\n}\n\n// lheading (---, ===)\n\nfunction lheading(state, startLine, endLine /*, silent */) {\n  const terminatorRules = state.md.block.ruler.getRules('paragraph');\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) {\n    return false;\n  }\n  const oldParentType = state.parentType;\n  state.parentType = 'paragraph'; // use paragraph to match terminatorRules\n\n  // jump line-by-line until empty one or EOF\n  let level = 0;\n  let marker;\n  let nextLine = startLine + 1;\n  for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n    // this would be a code block normally, but after paragraph\n    // it's considered a lazy continuation regardless of what's there\n    if (state.sCount[nextLine] - state.blkIndent > 3) {\n      continue;\n    }\n\n    //\n    // Check for underline in setext header\n    //\n    if (state.sCount[nextLine] >= state.blkIndent) {\n      let pos = state.bMarks[nextLine] + state.tShift[nextLine];\n      const max = state.eMarks[nextLine];\n      if (pos < max) {\n        marker = state.src.charCodeAt(pos);\n        if (marker === 0x2D /* - */ || marker === 0x3D /* = */) {\n          pos = state.skipChars(pos, marker);\n          pos = state.skipSpaces(pos);\n          if (pos >= max) {\n            level = marker === 0x3D /* = */ ? 1 : 2;\n            break;\n          }\n        }\n      }\n    }\n\n    // quirk for blockquotes, this line should already be checked by that rule\n    if (state.sCount[nextLine] < 0) {\n      continue;\n    }\n\n    // Some tags can terminate paragraph without empty line.\n    let terminate = false;\n    for (let i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n    if (terminate) {\n      break;\n    }\n  }\n  if (!level) {\n    // Didn't find valid underline\n    return false;\n  }\n  const content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n  state.line = nextLine + 1;\n  const token_o = state.push('heading_open', 'h' + String(level), 1);\n  token_o.markup = String.fromCharCode(marker);\n  token_o.map = [startLine, state.line];\n  const token_i = state.push('inline', '', 0);\n  token_i.content = content;\n  token_i.map = [startLine, state.line - 1];\n  token_i.children = [];\n  const token_c = state.push('heading_close', 'h' + String(level), -1);\n  token_c.markup = String.fromCharCode(marker);\n  state.parentType = oldParentType;\n  return true;\n}\n\n// Paragraph\n\nfunction paragraph(state, startLine, endLine) {\n  const terminatorRules = state.md.block.ruler.getRules('paragraph');\n  const oldParentType = state.parentType;\n  let nextLine = startLine + 1;\n  state.parentType = 'paragraph';\n\n  // jump line-by-line until empty one or EOF\n  for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n    // this would be a code block normally, but after paragraph\n    // it's considered a lazy continuation regardless of what's there\n    if (state.sCount[nextLine] - state.blkIndent > 3) {\n      continue;\n    }\n\n    // quirk for blockquotes, this line should already be checked by that rule\n    if (state.sCount[nextLine] < 0) {\n      continue;\n    }\n\n    // Some tags can terminate paragraph without empty line.\n    let terminate = false;\n    for (let i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n    if (terminate) {\n      break;\n    }\n  }\n  const content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n  state.line = nextLine;\n  const token_o = state.push('paragraph_open', 'p', 1);\n  token_o.map = [startLine, state.line];\n  const token_i = state.push('inline', '', 0);\n  token_i.content = content;\n  token_i.map = [startLine, state.line];\n  token_i.children = [];\n  state.push('paragraph_close', 'p', -1);\n  state.parentType = oldParentType;\n  return true;\n}\n\n/** internal\n * class ParserBlock\n *\n * Block-level tokenizer.\n **/\n\nconst _rules$1 = [\n// First 2 params - rule name & source. Secondary array - list of rules,\n// which can be terminated by this one.\n['table', table, ['paragraph', 'reference']], ['code', code], ['fence', fence, ['paragraph', 'reference', 'blockquote', 'list']], ['blockquote', blockquote, ['paragraph', 'reference', 'blockquote', 'list']], ['hr', hr, ['paragraph', 'reference', 'blockquote', 'list']], ['list', list, ['paragraph', 'reference', 'blockquote']], ['reference', reference], ['html_block', html_block, ['paragraph', 'reference', 'blockquote']], ['heading', heading, ['paragraph', 'reference', 'blockquote']], ['lheading', lheading], ['paragraph', paragraph]];\n\n/**\n * new ParserBlock()\n **/\nfunction ParserBlock() {\n  /**\n   * ParserBlock#ruler -> Ruler\n   *\n   * [[Ruler]] instance. Keep configuration of block rules.\n   **/\n  this.ruler = new Ruler();\n  for (let i = 0; i < _rules$1.length; i++) {\n    this.ruler.push(_rules$1[i][0], _rules$1[i][1], {\n      alt: (_rules$1[i][2] || []).slice()\n    });\n  }\n}\n\n// Generate tokens for input range\n//\nParserBlock.prototype.tokenize = function (state, startLine, endLine) {\n  const rules = this.ruler.getRules('');\n  const len = rules.length;\n  const maxNesting = state.md.options.maxNesting;\n  let line = startLine;\n  let hasEmptyLines = false;\n  while (line < endLine) {\n    state.line = line = state.skipEmptyLines(line);\n    if (line >= endLine) {\n      break;\n    }\n\n    // Termination condition for nested calls.\n    // Nested calls currently used for blockquotes & lists\n    if (state.sCount[line] < state.blkIndent) {\n      break;\n    }\n\n    // If nesting level exceeded - skip tail to the end. That's not ordinary\n    // situation and we should not care about content.\n    if (state.level >= maxNesting) {\n      state.line = endLine;\n      break;\n    }\n\n    // Try all possible rules.\n    // On success, rule should:\n    //\n    // - update `state.line`\n    // - update `state.tokens`\n    // - return true\n    const prevLine = state.line;\n    let ok = false;\n    for (let i = 0; i < len; i++) {\n      ok = rules[i](state, line, endLine, false);\n      if (ok) {\n        if (prevLine >= state.line) {\n          throw new Error(\"block rule didn't increment state.line\");\n        }\n        break;\n      }\n    }\n\n    // this can only happen if user disables paragraph rule\n    if (!ok) throw new Error('none of the block rules matched');\n\n    // set state.tight if we had an empty line before current tag\n    // i.e. latest empty line should not count\n    state.tight = !hasEmptyLines;\n\n    // paragraph might \"eat\" one newline after it in nested lists\n    if (state.isEmpty(state.line - 1)) {\n      hasEmptyLines = true;\n    }\n    line = state.line;\n    if (line < endLine && state.isEmpty(line)) {\n      hasEmptyLines = true;\n      line++;\n      state.line = line;\n    }\n  }\n};\n\n/**\n * ParserBlock.parse(str, md, env, outTokens)\n *\n * Process input string and push block tokens into `outTokens`\n **/\nParserBlock.prototype.parse = function (src, md, env, outTokens) {\n  if (!src) {\n    return;\n  }\n  const state = new this.State(src, md, env, outTokens);\n  this.tokenize(state, state.line, state.lineMax);\n};\nParserBlock.prototype.State = StateBlock;\n\n// Inline parser state\n\nfunction StateInline(src, md, env, outTokens) {\n  this.src = src;\n  this.env = env;\n  this.md = md;\n  this.tokens = outTokens;\n  this.tokens_meta = Array(outTokens.length);\n  this.pos = 0;\n  this.posMax = this.src.length;\n  this.level = 0;\n  this.pending = '';\n  this.pendingLevel = 0;\n\n  // Stores { start: end } pairs. Useful for backtrack\n  // optimization of pairs parse (emphasis, strikes).\n  this.cache = {};\n\n  // List of emphasis-like delimiters for current tag\n  this.delimiters = [];\n\n  // Stack of delimiter lists for upper level tags\n  this._prev_delimiters = [];\n\n  // backtick length => last seen position\n  this.backticks = {};\n  this.backticksScanned = false;\n\n  // Counter used to disable inline linkify-it execution\n  // inside <a> and markdown links\n  this.linkLevel = 0;\n}\n\n// Flush pending text\n//\nStateInline.prototype.pushPending = function () {\n  const token = new Token('text', '', 0);\n  token.content = this.pending;\n  token.level = this.pendingLevel;\n  this.tokens.push(token);\n  this.pending = '';\n  return token;\n};\n\n// Push new token to \"stream\".\n// If pending text exists - flush it as text token\n//\nStateInline.prototype.push = function (type, tag, nesting) {\n  if (this.pending) {\n    this.pushPending();\n  }\n  const token = new Token(type, tag, nesting);\n  let token_meta = null;\n  if (nesting < 0) {\n    // closing tag\n    this.level--;\n    this.delimiters = this._prev_delimiters.pop();\n  }\n  token.level = this.level;\n  if (nesting > 0) {\n    // opening tag\n    this.level++;\n    this._prev_delimiters.push(this.delimiters);\n    this.delimiters = [];\n    token_meta = {\n      delimiters: this.delimiters\n    };\n  }\n  this.pendingLevel = this.level;\n  this.tokens.push(token);\n  this.tokens_meta.push(token_meta);\n  return token;\n};\n\n// Scan a sequence of emphasis-like markers, and determine whether\n// it can start an emphasis sequence or end an emphasis sequence.\n//\n//  - start - position to scan from (it should point at a valid marker);\n//  - canSplitWord - determine if these markers can be found inside a word\n//\nStateInline.prototype.scanDelims = function (start, canSplitWord) {\n  const max = this.posMax;\n  const marker = this.src.charCodeAt(start);\n\n  // treat beginning of the line as a whitespace\n  const lastChar = start > 0 ? this.src.charCodeAt(start - 1) : 0x20;\n  let pos = start;\n  while (pos < max && this.src.charCodeAt(pos) === marker) {\n    pos++;\n  }\n  const count = pos - start;\n\n  // treat end of the line as a whitespace\n  const nextChar = pos < max ? this.src.charCodeAt(pos) : 0x20;\n  const isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n  const isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n  const isLastWhiteSpace = isWhiteSpace(lastChar);\n  const isNextWhiteSpace = isWhiteSpace(nextChar);\n  const left_flanking = !isNextWhiteSpace && (!isNextPunctChar || isLastWhiteSpace || isLastPunctChar);\n  const right_flanking = !isLastWhiteSpace && (!isLastPunctChar || isNextWhiteSpace || isNextPunctChar);\n  const can_open = left_flanking && (canSplitWord || !right_flanking || isLastPunctChar);\n  const can_close = right_flanking && (canSplitWord || !left_flanking || isNextPunctChar);\n  return {\n    can_open,\n    can_close,\n    length: count\n  };\n};\n\n// re-export Token class to use in block rules\nStateInline.prototype.Token = Token;\n\n// Skip text characters for text token, place those to pending buffer\n// and increment current pos\n\n// Rule to skip pure text\n// '{}$%@~+=:' reserved for extentions\n\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n\n// !!!! Don't confuse with \"Markdown ASCII Punctuation\" chars\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\nfunction isTerminatorChar(ch) {\n  switch (ch) {\n    case 0x0A /* \\n */:\n    case 0x21 /* ! */:\n    case 0x23 /* # */:\n    case 0x24 /* $ */:\n    case 0x25 /* % */:\n    case 0x26 /* & */:\n    case 0x2A /* * */:\n    case 0x2B /* + */:\n    case 0x2D /* - */:\n    case 0x3A /* : */:\n    case 0x3C /* < */:\n    case 0x3D /* = */:\n    case 0x3E /* > */:\n    case 0x40 /* @ */:\n    case 0x5B /* [ */:\n    case 0x5C /* \\ */:\n    case 0x5D /* ] */:\n    case 0x5E /* ^ */:\n    case 0x5F /* _ */:\n    case 0x60 /* ` */:\n    case 0x7B /* { */:\n    case 0x7D /* } */:\n    case 0x7E /* ~ */:\n      return true;\n    default:\n      return false;\n  }\n}\nfunction text(state, silent) {\n  let pos = state.pos;\n  while (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) {\n    pos++;\n  }\n  if (pos === state.pos) {\n    return false;\n  }\n  if (!silent) {\n    state.pending += state.src.slice(state.pos, pos);\n  }\n  state.pos = pos;\n  return true;\n}\n\n// Alternative implementation, for memory.\n//\n// It costs 10% of performance, but allows extend terminators list, if place it\n// to `ParserInline` property. Probably, will switch to it sometime, such\n// flexibility required.\n\n/*\nvar TERMINATOR_RE = /[\\n!#$%&*+\\-:<=>@[\\\\\\]^_`{}~]/;\n\nmodule.exports = function text(state, silent) {\n  var pos = state.pos,\n      idx = state.src.slice(pos).search(TERMINATOR_RE);\n\n  // first char is terminator -> empty text\n  if (idx === 0) { return false; }\n\n  // no terminator -> text till end of string\n  if (idx < 0) {\n    if (!silent) { state.pending += state.src.slice(pos); }\n    state.pos = state.src.length;\n    return true;\n  }\n\n  if (!silent) { state.pending += state.src.slice(pos, pos + idx); }\n\n  state.pos += idx;\n\n  return true;\n}; */\n\n// Process links like https://example.org/\n\n// RFC3986: scheme = ALPHA *( ALPHA / DIGIT / \"+\" / \"-\" / \".\" )\nconst SCHEME_RE = /(?:^|[^a-z0-9.+-])([a-z][a-z0-9.+-]*)$/i;\nfunction linkify(state, silent) {\n  if (!state.md.options.linkify) return false;\n  if (state.linkLevel > 0) return false;\n  const pos = state.pos;\n  const max = state.posMax;\n  if (pos + 3 > max) return false;\n  if (state.src.charCodeAt(pos) !== 0x3A /* : */) return false;\n  if (state.src.charCodeAt(pos + 1) !== 0x2F /* / */) return false;\n  if (state.src.charCodeAt(pos + 2) !== 0x2F /* / */) return false;\n  const match = state.pending.match(SCHEME_RE);\n  if (!match) return false;\n  const proto = match[1];\n  const link = state.md.linkify.matchAtStart(state.src.slice(pos - proto.length));\n  if (!link) return false;\n  let url = link.url;\n\n  // invalid link, but still detected by linkify somehow;\n  // need to check to prevent infinite loop below\n  if (url.length <= proto.length) return false;\n\n  // disallow '*' at the end of the link (conflicts with emphasis)\n  // do manual backsearch to avoid perf issues with regex /\\*+$/ on \"****...****a\".\n  let urlEnd = url.length;\n  while (urlEnd > 0 && url.charCodeAt(urlEnd - 1) === 0x2A /* * */) {\n    urlEnd--;\n  }\n  if (urlEnd !== url.length) {\n    url = url.slice(0, urlEnd);\n  }\n  const fullUrl = state.md.normalizeLink(url);\n  if (!state.md.validateLink(fullUrl)) return false;\n  if (!silent) {\n    state.pending = state.pending.slice(0, -proto.length);\n    const token_o = state.push('link_open', 'a', 1);\n    token_o.attrs = [['href', fullUrl]];\n    token_o.markup = 'linkify';\n    token_o.info = 'auto';\n    const token_t = state.push('text', '', 0);\n    token_t.content = state.md.normalizeLinkText(url);\n    const token_c = state.push('link_close', 'a', -1);\n    token_c.markup = 'linkify';\n    token_c.info = 'auto';\n  }\n  state.pos += url.length - proto.length;\n  return true;\n}\n\n// Proceess '\\n'\n\nfunction newline(state, silent) {\n  let pos = state.pos;\n  if (state.src.charCodeAt(pos) !== 0x0A /* \\n */) {\n    return false;\n  }\n  const pmax = state.pending.length - 1;\n  const max = state.posMax;\n\n  // '  \\n' -> hardbreak\n  // Lookup in pending chars is bad practice! Don't copy to other rules!\n  // Pending string is stored in concat mode, indexed lookups will cause\n  // convertion to flat mode.\n  if (!silent) {\n    if (pmax >= 0 && state.pending.charCodeAt(pmax) === 0x20) {\n      if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 0x20) {\n        // Find whitespaces tail of pending chars.\n        let ws = pmax - 1;\n        while (ws >= 1 && state.pending.charCodeAt(ws - 1) === 0x20) ws--;\n        state.pending = state.pending.slice(0, ws);\n        state.push('hardbreak', 'br', 0);\n      } else {\n        state.pending = state.pending.slice(0, -1);\n        state.push('softbreak', 'br', 0);\n      }\n    } else {\n      state.push('softbreak', 'br', 0);\n    }\n  }\n  pos++;\n\n  // skip heading spaces for next line\n  while (pos < max && isSpace(state.src.charCodeAt(pos))) {\n    pos++;\n  }\n  state.pos = pos;\n  return true;\n}\n\n// Process escaped chars and hardbreaks\n\nconst ESCAPED = [];\nfor (let i = 0; i < 256; i++) {\n  ESCAPED.push(0);\n}\n'\\\\!\"#$%&\\'()*+,./:;<=>?@[]^_`{|}~-'.split('').forEach(function (ch) {\n  ESCAPED[ch.charCodeAt(0)] = 1;\n});\nfunction escape(state, silent) {\n  let pos = state.pos;\n  const max = state.posMax;\n  if (state.src.charCodeAt(pos) !== 0x5C /* \\ */) return false;\n  pos++;\n\n  // '\\' at the end of the inline block\n  if (pos >= max) return false;\n  let ch1 = state.src.charCodeAt(pos);\n  if (ch1 === 0x0A) {\n    if (!silent) {\n      state.push('hardbreak', 'br', 0);\n    }\n    pos++;\n    // skip leading whitespaces from next line\n    while (pos < max) {\n      ch1 = state.src.charCodeAt(pos);\n      if (!isSpace(ch1)) break;\n      pos++;\n    }\n    state.pos = pos;\n    return true;\n  }\n  let escapedStr = state.src[pos];\n  if (ch1 >= 0xD800 && ch1 <= 0xDBFF && pos + 1 < max) {\n    const ch2 = state.src.charCodeAt(pos + 1);\n    if (ch2 >= 0xDC00 && ch2 <= 0xDFFF) {\n      escapedStr += state.src[pos + 1];\n      pos++;\n    }\n  }\n  const origStr = '\\\\' + escapedStr;\n  if (!silent) {\n    const token = state.push('text_special', '', 0);\n    if (ch1 < 256 && ESCAPED[ch1] !== 0) {\n      token.content = escapedStr;\n    } else {\n      token.content = origStr;\n    }\n    token.markup = origStr;\n    token.info = 'escape';\n  }\n  state.pos = pos + 1;\n  return true;\n}\n\n// Parse backticks\n\nfunction backtick(state, silent) {\n  let pos = state.pos;\n  const ch = state.src.charCodeAt(pos);\n  if (ch !== 0x60 /* ` */) {\n    return false;\n  }\n  const start = pos;\n  pos++;\n  const max = state.posMax;\n\n  // scan marker length\n  while (pos < max && state.src.charCodeAt(pos) === 0x60 /* ` */) {\n    pos++;\n  }\n  const marker = state.src.slice(start, pos);\n  const openerLength = marker.length;\n  if (state.backticksScanned && (state.backticks[openerLength] || 0) <= start) {\n    if (!silent) state.pending += marker;\n    state.pos += openerLength;\n    return true;\n  }\n  let matchEnd = pos;\n  let matchStart;\n\n  // Nothing found in the cache, scan until the end of the line (or until marker is found)\n  while ((matchStart = state.src.indexOf('`', matchEnd)) !== -1) {\n    matchEnd = matchStart + 1;\n\n    // scan marker length\n    while (matchEnd < max && state.src.charCodeAt(matchEnd) === 0x60 /* ` */) {\n      matchEnd++;\n    }\n    const closerLength = matchEnd - matchStart;\n    if (closerLength === openerLength) {\n      // Found matching closer length.\n      if (!silent) {\n        const token = state.push('code_inline', 'code', 0);\n        token.markup = marker;\n        token.content = state.src.slice(pos, matchStart).replace(/\\n/g, ' ').replace(/^ (.+) $/, '$1');\n      }\n      state.pos = matchEnd;\n      return true;\n    }\n\n    // Some different length found, put it in cache as upper limit of where closer can be found\n    state.backticks[closerLength] = matchStart;\n  }\n\n  // Scanned through the end, didn't find anything\n  state.backticksScanned = true;\n  if (!silent) state.pending += marker;\n  state.pos += openerLength;\n  return true;\n}\n\n// ~~strike through~~\n//\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nfunction strikethrough_tokenize(state, silent) {\n  const start = state.pos;\n  const marker = state.src.charCodeAt(start);\n  if (silent) {\n    return false;\n  }\n  if (marker !== 0x7E /* ~ */) {\n    return false;\n  }\n  const scanned = state.scanDelims(state.pos, true);\n  let len = scanned.length;\n  const ch = String.fromCharCode(marker);\n  if (len < 2) {\n    return false;\n  }\n  let token;\n  if (len % 2) {\n    token = state.push('text', '', 0);\n    token.content = ch;\n    len--;\n  }\n  for (let i = 0; i < len; i += 2) {\n    token = state.push('text', '', 0);\n    token.content = ch + ch;\n    state.delimiters.push({\n      marker,\n      length: 0,\n      // disable \"rule of 3\" length checks meant for emphasis\n      token: state.tokens.length - 1,\n      end: -1,\n      open: scanned.can_open,\n      close: scanned.can_close\n    });\n  }\n  state.pos += scanned.length;\n  return true;\n}\nfunction postProcess$1(state, delimiters) {\n  let token;\n  const loneMarkers = [];\n  const max = delimiters.length;\n  for (let i = 0; i < max; i++) {\n    const startDelim = delimiters[i];\n    if (startDelim.marker !== 0x7E /* ~ */) {\n      continue;\n    }\n    if (startDelim.end === -1) {\n      continue;\n    }\n    const endDelim = delimiters[startDelim.end];\n    token = state.tokens[startDelim.token];\n    token.type = 's_open';\n    token.tag = 's';\n    token.nesting = 1;\n    token.markup = '~~';\n    token.content = '';\n    token = state.tokens[endDelim.token];\n    token.type = 's_close';\n    token.tag = 's';\n    token.nesting = -1;\n    token.markup = '~~';\n    token.content = '';\n    if (state.tokens[endDelim.token - 1].type === 'text' && state.tokens[endDelim.token - 1].content === '~') {\n      loneMarkers.push(endDelim.token - 1);\n    }\n  }\n\n  // If a marker sequence has an odd number of characters, it's splitted\n  // like this: `~~~~~` -> `~` + `~~` + `~~`, leaving one marker at the\n  // start of the sequence.\n  //\n  // So, we have to move all those markers after subsequent s_close tags.\n  //\n  while (loneMarkers.length) {\n    const i = loneMarkers.pop();\n    let j = i + 1;\n    while (j < state.tokens.length && state.tokens[j].type === 's_close') {\n      j++;\n    }\n    j--;\n    if (i !== j) {\n      token = state.tokens[j];\n      state.tokens[j] = state.tokens[i];\n      state.tokens[i] = token;\n    }\n  }\n}\n\n// Walk through delimiter list and replace text tokens with tags\n//\nfunction strikethrough_postProcess(state) {\n  const tokens_meta = state.tokens_meta;\n  const max = state.tokens_meta.length;\n  postProcess$1(state, state.delimiters);\n  for (let curr = 0; curr < max; curr++) {\n    if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n      postProcess$1(state, tokens_meta[curr].delimiters);\n    }\n  }\n}\nvar r_strikethrough = {\n  tokenize: strikethrough_tokenize,\n  postProcess: strikethrough_postProcess\n};\n\n// Process *this* and _that_\n//\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nfunction emphasis_tokenize(state, silent) {\n  const start = state.pos;\n  const marker = state.src.charCodeAt(start);\n  if (silent) {\n    return false;\n  }\n  if (marker !== 0x5F /* _ */ && marker !== 0x2A /* * */) {\n    return false;\n  }\n  const scanned = state.scanDelims(state.pos, marker === 0x2A);\n  for (let i = 0; i < scanned.length; i++) {\n    const token = state.push('text', '', 0);\n    token.content = String.fromCharCode(marker);\n    state.delimiters.push({\n      // Char code of the starting marker (number).\n      //\n      marker,\n      // Total length of these series of delimiters.\n      //\n      length: scanned.length,\n      // A position of the token this delimiter corresponds to.\n      //\n      token: state.tokens.length - 1,\n      // If this delimiter is matched as a valid opener, `end` will be\n      // equal to its position, otherwise it's `-1`.\n      //\n      end: -1,\n      // Boolean flags that determine if this delimiter could open or close\n      // an emphasis.\n      //\n      open: scanned.can_open,\n      close: scanned.can_close\n    });\n  }\n  state.pos += scanned.length;\n  return true;\n}\nfunction postProcess(state, delimiters) {\n  const max = delimiters.length;\n  for (let i = max - 1; i >= 0; i--) {\n    const startDelim = delimiters[i];\n    if (startDelim.marker !== 0x5F /* _ */ && startDelim.marker !== 0x2A /* * */) {\n      continue;\n    }\n\n    // Process only opening markers\n    if (startDelim.end === -1) {\n      continue;\n    }\n    const endDelim = delimiters[startDelim.end];\n\n    // If the previous delimiter has the same marker and is adjacent to this one,\n    // merge those into one strong delimiter.\n    //\n    // `<em><em>whatever</em></em>` -> `<strong>whatever</strong>`\n    //\n    const isStrong = i > 0 && delimiters[i - 1].end === startDelim.end + 1 &&\n    // check that first two markers match and adjacent\n    delimiters[i - 1].marker === startDelim.marker && delimiters[i - 1].token === startDelim.token - 1 &&\n    // check that last two markers are adjacent (we can safely assume they match)\n    delimiters[startDelim.end + 1].token === endDelim.token + 1;\n    const ch = String.fromCharCode(startDelim.marker);\n    const token_o = state.tokens[startDelim.token];\n    token_o.type = isStrong ? 'strong_open' : 'em_open';\n    token_o.tag = isStrong ? 'strong' : 'em';\n    token_o.nesting = 1;\n    token_o.markup = isStrong ? ch + ch : ch;\n    token_o.content = '';\n    const token_c = state.tokens[endDelim.token];\n    token_c.type = isStrong ? 'strong_close' : 'em_close';\n    token_c.tag = isStrong ? 'strong' : 'em';\n    token_c.nesting = -1;\n    token_c.markup = isStrong ? ch + ch : ch;\n    token_c.content = '';\n    if (isStrong) {\n      state.tokens[delimiters[i - 1].token].content = '';\n      state.tokens[delimiters[startDelim.end + 1].token].content = '';\n      i--;\n    }\n  }\n}\n\n// Walk through delimiter list and replace text tokens with tags\n//\nfunction emphasis_post_process(state) {\n  const tokens_meta = state.tokens_meta;\n  const max = state.tokens_meta.length;\n  postProcess(state, state.delimiters);\n  for (let curr = 0; curr < max; curr++) {\n    if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n      postProcess(state, tokens_meta[curr].delimiters);\n    }\n  }\n}\nvar r_emphasis = {\n  tokenize: emphasis_tokenize,\n  postProcess: emphasis_post_process\n};\n\n// Process [link](<to> \"stuff\")\n\nfunction link(state, silent) {\n  let code, label, res, ref;\n  let href = '';\n  let title = '';\n  let start = state.pos;\n  let parseReference = true;\n  if (state.src.charCodeAt(state.pos) !== 0x5B /* [ */) {\n    return false;\n  }\n  const oldPos = state.pos;\n  const max = state.posMax;\n  const labelStart = state.pos + 1;\n  const labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true);\n\n  // parser failed to find ']', so it's not a valid link\n  if (labelEnd < 0) {\n    return false;\n  }\n  let pos = labelEnd + 1;\n  if (pos < max && state.src.charCodeAt(pos) === 0x28 /* ( */) {\n    //\n    // Inline link\n    //\n\n    // might have found a valid shortcut link, disable reference parsing\n    parseReference = false;\n\n    // [link](  <href>  \"title\"  )\n    //        ^^ skipping these spaces\n    pos++;\n    for (; pos < max; pos++) {\n      code = state.src.charCodeAt(pos);\n      if (!isSpace(code) && code !== 0x0A) {\n        break;\n      }\n    }\n    if (pos >= max) {\n      return false;\n    }\n\n    // [link](  <href>  \"title\"  )\n    //          ^^^^^^ parsing link destination\n    start = pos;\n    res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n    if (res.ok) {\n      href = state.md.normalizeLink(res.str);\n      if (state.md.validateLink(href)) {\n        pos = res.pos;\n      } else {\n        href = '';\n      }\n\n      // [link](  <href>  \"title\"  )\n      //                ^^ skipping these spaces\n      start = pos;\n      for (; pos < max; pos++) {\n        code = state.src.charCodeAt(pos);\n        if (!isSpace(code) && code !== 0x0A) {\n          break;\n        }\n      }\n\n      // [link](  <href>  \"title\"  )\n      //                  ^^^^^^^ parsing link title\n      res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n      if (pos < max && start !== pos && res.ok) {\n        title = res.str;\n        pos = res.pos;\n\n        // [link](  <href>  \"title\"  )\n        //                         ^^ skipping these spaces\n        for (; pos < max; pos++) {\n          code = state.src.charCodeAt(pos);\n          if (!isSpace(code) && code !== 0x0A) {\n            break;\n          }\n        }\n      }\n    }\n    if (pos >= max || state.src.charCodeAt(pos) !== 0x29 /* ) */) {\n      // parsing a valid shortcut link failed, fallback to reference\n      parseReference = true;\n    }\n    pos++;\n  }\n  if (parseReference) {\n    //\n    // Link reference\n    //\n    if (typeof state.env.references === 'undefined') {\n      return false;\n    }\n    if (pos < max && state.src.charCodeAt(pos) === 0x5B /* [ */) {\n      start = pos + 1;\n      pos = state.md.helpers.parseLinkLabel(state, pos);\n      if (pos >= 0) {\n        label = state.src.slice(start, pos++);\n      } else {\n        pos = labelEnd + 1;\n      }\n    } else {\n      pos = labelEnd + 1;\n    }\n\n    // covers label === '' and label === undefined\n    // (collapsed reference link and shortcut reference link respectively)\n    if (!label) {\n      label = state.src.slice(labelStart, labelEnd);\n    }\n    ref = state.env.references[normalizeReference(label)];\n    if (!ref) {\n      state.pos = oldPos;\n      return false;\n    }\n    href = ref.href;\n    title = ref.title;\n  }\n\n  //\n  // We found the end of the link, and know for a fact it's a valid link;\n  // so all that's left to do is to call tokenizer.\n  //\n  if (!silent) {\n    state.pos = labelStart;\n    state.posMax = labelEnd;\n    const token_o = state.push('link_open', 'a', 1);\n    const attrs = [['href', href]];\n    token_o.attrs = attrs;\n    if (title) {\n      attrs.push(['title', title]);\n    }\n    state.linkLevel++;\n    state.md.inline.tokenize(state);\n    state.linkLevel--;\n    state.push('link_close', 'a', -1);\n  }\n  state.pos = pos;\n  state.posMax = max;\n  return true;\n}\n\n// Process ![image](<src> \"title\")\n\nfunction image(state, silent) {\n  let code, content, label, pos, ref, res, title, start;\n  let href = '';\n  const oldPos = state.pos;\n  const max = state.posMax;\n  if (state.src.charCodeAt(state.pos) !== 0x21 /* ! */) {\n    return false;\n  }\n  if (state.src.charCodeAt(state.pos + 1) !== 0x5B /* [ */) {\n    return false;\n  }\n  const labelStart = state.pos + 2;\n  const labelEnd = state.md.helpers.parseLinkLabel(state, state.pos + 1, false);\n\n  // parser failed to find ']', so it's not a valid link\n  if (labelEnd < 0) {\n    return false;\n  }\n  pos = labelEnd + 1;\n  if (pos < max && state.src.charCodeAt(pos) === 0x28 /* ( */) {\n    //\n    // Inline link\n    //\n\n    // [link](  <href>  \"title\"  )\n    //        ^^ skipping these spaces\n    pos++;\n    for (; pos < max; pos++) {\n      code = state.src.charCodeAt(pos);\n      if (!isSpace(code) && code !== 0x0A) {\n        break;\n      }\n    }\n    if (pos >= max) {\n      return false;\n    }\n\n    // [link](  <href>  \"title\"  )\n    //          ^^^^^^ parsing link destination\n    start = pos;\n    res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n    if (res.ok) {\n      href = state.md.normalizeLink(res.str);\n      if (state.md.validateLink(href)) {\n        pos = res.pos;\n      } else {\n        href = '';\n      }\n    }\n\n    // [link](  <href>  \"title\"  )\n    //                ^^ skipping these spaces\n    start = pos;\n    for (; pos < max; pos++) {\n      code = state.src.charCodeAt(pos);\n      if (!isSpace(code) && code !== 0x0A) {\n        break;\n      }\n    }\n\n    // [link](  <href>  \"title\"  )\n    //                  ^^^^^^^ parsing link title\n    res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n    if (pos < max && start !== pos && res.ok) {\n      title = res.str;\n      pos = res.pos;\n\n      // [link](  <href>  \"title\"  )\n      //                         ^^ skipping these spaces\n      for (; pos < max; pos++) {\n        code = state.src.charCodeAt(pos);\n        if (!isSpace(code) && code !== 0x0A) {\n          break;\n        }\n      }\n    } else {\n      title = '';\n    }\n    if (pos >= max || state.src.charCodeAt(pos) !== 0x29 /* ) */) {\n      state.pos = oldPos;\n      return false;\n    }\n    pos++;\n  } else {\n    //\n    // Link reference\n    //\n    if (typeof state.env.references === 'undefined') {\n      return false;\n    }\n    if (pos < max && state.src.charCodeAt(pos) === 0x5B /* [ */) {\n      start = pos + 1;\n      pos = state.md.helpers.parseLinkLabel(state, pos);\n      if (pos >= 0) {\n        label = state.src.slice(start, pos++);\n      } else {\n        pos = labelEnd + 1;\n      }\n    } else {\n      pos = labelEnd + 1;\n    }\n\n    // covers label === '' and label === undefined\n    // (collapsed reference link and shortcut reference link respectively)\n    if (!label) {\n      label = state.src.slice(labelStart, labelEnd);\n    }\n    ref = state.env.references[normalizeReference(label)];\n    if (!ref) {\n      state.pos = oldPos;\n      return false;\n    }\n    href = ref.href;\n    title = ref.title;\n  }\n\n  //\n  // We found the end of the link, and know for a fact it's a valid link;\n  // so all that's left to do is to call tokenizer.\n  //\n  if (!silent) {\n    content = state.src.slice(labelStart, labelEnd);\n    const tokens = [];\n    state.md.inline.parse(content, state.md, state.env, tokens);\n    const token = state.push('image', 'img', 0);\n    const attrs = [['src', href], ['alt', '']];\n    token.attrs = attrs;\n    token.children = tokens;\n    token.content = content;\n    if (title) {\n      attrs.push(['title', title]);\n    }\n  }\n  state.pos = pos;\n  state.posMax = max;\n  return true;\n}\n\n// Process autolinks '<protocol:...>'\n\n/* eslint max-len:0 */\nconst EMAIL_RE = /^([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/* eslint-disable-next-line no-control-regex */\nconst AUTOLINK_RE = /^([a-zA-Z][a-zA-Z0-9+.-]{1,31}):([^<>\\x00-\\x20]*)$/;\nfunction autolink(state, silent) {\n  let pos = state.pos;\n  if (state.src.charCodeAt(pos) !== 0x3C /* < */) {\n    return false;\n  }\n  const start = state.pos;\n  const max = state.posMax;\n  for (;;) {\n    if (++pos >= max) return false;\n    const ch = state.src.charCodeAt(pos);\n    if (ch === 0x3C /* < */) return false;\n    if (ch === 0x3E /* > */) break;\n  }\n  const url = state.src.slice(start + 1, pos);\n  if (AUTOLINK_RE.test(url)) {\n    const fullUrl = state.md.normalizeLink(url);\n    if (!state.md.validateLink(fullUrl)) {\n      return false;\n    }\n    if (!silent) {\n      const token_o = state.push('link_open', 'a', 1);\n      token_o.attrs = [['href', fullUrl]];\n      token_o.markup = 'autolink';\n      token_o.info = 'auto';\n      const token_t = state.push('text', '', 0);\n      token_t.content = state.md.normalizeLinkText(url);\n      const token_c = state.push('link_close', 'a', -1);\n      token_c.markup = 'autolink';\n      token_c.info = 'auto';\n    }\n    state.pos += url.length + 2;\n    return true;\n  }\n  if (EMAIL_RE.test(url)) {\n    const fullUrl = state.md.normalizeLink('mailto:' + url);\n    if (!state.md.validateLink(fullUrl)) {\n      return false;\n    }\n    if (!silent) {\n      const token_o = state.push('link_open', 'a', 1);\n      token_o.attrs = [['href', fullUrl]];\n      token_o.markup = 'autolink';\n      token_o.info = 'auto';\n      const token_t = state.push('text', '', 0);\n      token_t.content = state.md.normalizeLinkText(url);\n      const token_c = state.push('link_close', 'a', -1);\n      token_c.markup = 'autolink';\n      token_c.info = 'auto';\n    }\n    state.pos += url.length + 2;\n    return true;\n  }\n  return false;\n}\n\n// Process html tags\n\nfunction isLinkOpen(str) {\n  return /^<a[>\\s]/i.test(str);\n}\nfunction isLinkClose(str) {\n  return /^<\\/a\\s*>/i.test(str);\n}\nfunction isLetter(ch) {\n  /* eslint no-bitwise:0 */\n  const lc = ch | 0x20; // to lower case\n  return lc >= 0x61 /* a */ && lc <= 0x7a /* z */;\n}\nfunction html_inline(state, silent) {\n  if (!state.md.options.html) {\n    return false;\n  }\n\n  // Check start\n  const max = state.posMax;\n  const pos = state.pos;\n  if (state.src.charCodeAt(pos) !== 0x3C /* < */ || pos + 2 >= max) {\n    return false;\n  }\n\n  // Quick fail on second char\n  const ch = state.src.charCodeAt(pos + 1);\n  if (ch !== 0x21 /* ! */ && ch !== 0x3F /* ? */ && ch !== 0x2F /* / */ && !isLetter(ch)) {\n    return false;\n  }\n  const match = state.src.slice(pos).match(HTML_TAG_RE);\n  if (!match) {\n    return false;\n  }\n  if (!silent) {\n    const token = state.push('html_inline', '', 0);\n    token.content = match[0];\n    if (isLinkOpen(token.content)) state.linkLevel++;\n    if (isLinkClose(token.content)) state.linkLevel--;\n  }\n  state.pos += match[0].length;\n  return true;\n}\n\n// Process html entity - &#123;, &#xAF;, &quot;, ...\n\nconst DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i;\nconst NAMED_RE = /^&([a-z][a-z0-9]{1,31});/i;\nfunction entity(state, silent) {\n  const pos = state.pos;\n  const max = state.posMax;\n  if (state.src.charCodeAt(pos) !== 0x26 /* & */) return false;\n  if (pos + 1 >= max) return false;\n  const ch = state.src.charCodeAt(pos + 1);\n  if (ch === 0x23 /* # */) {\n    const match = state.src.slice(pos).match(DIGITAL_RE);\n    if (match) {\n      if (!silent) {\n        const code = match[1][0].toLowerCase() === 'x' ? parseInt(match[1].slice(1), 16) : parseInt(match[1], 10);\n        const token = state.push('text_special', '', 0);\n        token.content = isValidEntityCode(code) ? fromCodePoint(code) : fromCodePoint(0xFFFD);\n        token.markup = match[0];\n        token.info = 'entity';\n      }\n      state.pos += match[0].length;\n      return true;\n    }\n  } else {\n    const match = state.src.slice(pos).match(NAMED_RE);\n    if (match) {\n      const decoded = entities.decodeHTML(match[0]);\n      if (decoded !== match[0]) {\n        if (!silent) {\n          const token = state.push('text_special', '', 0);\n          token.content = decoded;\n          token.markup = match[0];\n          token.info = 'entity';\n        }\n        state.pos += match[0].length;\n        return true;\n      }\n    }\n  }\n  return false;\n}\n\n// For each opening emphasis-like marker find a matching closing one\n//\n\nfunction processDelimiters(delimiters) {\n  const openersBottom = {};\n  const max = delimiters.length;\n  if (!max) return;\n\n  // headerIdx is the first delimiter of the current (where closer is) delimiter run\n  let headerIdx = 0;\n  let lastTokenIdx = -2; // needs any value lower than -1\n  const jumps = [];\n  for (let closerIdx = 0; closerIdx < max; closerIdx++) {\n    const closer = delimiters[closerIdx];\n    jumps.push(0);\n\n    // markers belong to same delimiter run if:\n    //  - they have adjacent tokens\n    //  - AND markers are the same\n    //\n    if (delimiters[headerIdx].marker !== closer.marker || lastTokenIdx !== closer.token - 1) {\n      headerIdx = closerIdx;\n    }\n    lastTokenIdx = closer.token;\n\n    // Length is only used for emphasis-specific \"rule of 3\",\n    // if it's not defined (in strikethrough or 3rd party plugins),\n    // we can default it to 0 to disable those checks.\n    //\n    closer.length = closer.length || 0;\n    if (!closer.close) continue;\n\n    // Previously calculated lower bounds (previous fails)\n    // for each marker, each delimiter length modulo 3,\n    // and for whether this closer can be an opener;\n    // https://github.com/commonmark/cmark/commit/34250e12ccebdc6372b8b49c44fab57c72443460\n    /* eslint-disable-next-line no-prototype-builtins */\n    if (!openersBottom.hasOwnProperty(closer.marker)) {\n      openersBottom[closer.marker] = [-1, -1, -1, -1, -1, -1];\n    }\n    const minOpenerIdx = openersBottom[closer.marker][(closer.open ? 3 : 0) + closer.length % 3];\n    let openerIdx = headerIdx - jumps[headerIdx] - 1;\n    let newMinOpenerIdx = openerIdx;\n    for (; openerIdx > minOpenerIdx; openerIdx -= jumps[openerIdx] + 1) {\n      const opener = delimiters[openerIdx];\n      if (opener.marker !== closer.marker) continue;\n      if (opener.open && opener.end < 0) {\n        let isOddMatch = false;\n\n        // from spec:\n        //\n        // If one of the delimiters can both open and close emphasis, then the\n        // sum of the lengths of the delimiter runs containing the opening and\n        // closing delimiters must not be a multiple of 3 unless both lengths\n        // are multiples of 3.\n        //\n        if (opener.close || closer.open) {\n          if ((opener.length + closer.length) % 3 === 0) {\n            if (opener.length % 3 !== 0 || closer.length % 3 !== 0) {\n              isOddMatch = true;\n            }\n          }\n        }\n        if (!isOddMatch) {\n          // If previous delimiter cannot be an opener, we can safely skip\n          // the entire sequence in future checks. This is required to make\n          // sure algorithm has linear complexity (see *_*_*_*_*_... case).\n          //\n          const lastJump = openerIdx > 0 && !delimiters[openerIdx - 1].open ? jumps[openerIdx - 1] + 1 : 0;\n          jumps[closerIdx] = closerIdx - openerIdx + lastJump;\n          jumps[openerIdx] = lastJump;\n          closer.open = false;\n          opener.end = closerIdx;\n          opener.close = false;\n          newMinOpenerIdx = -1;\n          // treat next token as start of run,\n          // it optimizes skips in **<...>**a**<...>** pathological case\n          lastTokenIdx = -2;\n          break;\n        }\n      }\n    }\n    if (newMinOpenerIdx !== -1) {\n      // If match for this delimiter run failed, we want to set lower bound for\n      // future lookups. This is required to make sure algorithm has linear\n      // complexity.\n      //\n      // See details here:\n      // https://github.com/commonmark/cmark/issues/178#issuecomment-270417442\n      //\n      openersBottom[closer.marker][(closer.open ? 3 : 0) + (closer.length || 0) % 3] = newMinOpenerIdx;\n    }\n  }\n}\nfunction link_pairs(state) {\n  const tokens_meta = state.tokens_meta;\n  const max = state.tokens_meta.length;\n  processDelimiters(state.delimiters);\n  for (let curr = 0; curr < max; curr++) {\n    if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n      processDelimiters(tokens_meta[curr].delimiters);\n    }\n  }\n}\n\n// Clean up tokens after emphasis and strikethrough postprocessing:\n// merge adjacent text nodes into one and re-calculate all token levels\n//\n// This is necessary because initially emphasis delimiter markers (*, _, ~)\n// are treated as their own separate text tokens. Then emphasis rule either\n// leaves them as text (needed to merge with adjacent text) or turns them\n// into opening/closing tags (which messes up levels inside).\n//\n\nfunction fragments_join(state) {\n  let curr, last;\n  let level = 0;\n  const tokens = state.tokens;\n  const max = state.tokens.length;\n  for (curr = last = 0; curr < max; curr++) {\n    // re-calculate levels after emphasis/strikethrough turns some text nodes\n    // into opening/closing tags\n    if (tokens[curr].nesting < 0) level--; // closing tag\n    tokens[curr].level = level;\n    if (tokens[curr].nesting > 0) level++; // opening tag\n\n    if (tokens[curr].type === 'text' && curr + 1 < max && tokens[curr + 1].type === 'text') {\n      // collapse two adjacent text nodes\n      tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content;\n    } else {\n      if (curr !== last) {\n        tokens[last] = tokens[curr];\n      }\n      last++;\n    }\n  }\n  if (curr !== last) {\n    tokens.length = last;\n  }\n}\n\n/** internal\n * class ParserInline\n *\n * Tokenizes paragraph content.\n **/\n\n\n// Parser rules\n\nconst _rules = [['text', text], ['linkify', linkify], ['newline', newline], ['escape', escape], ['backticks', backtick], ['strikethrough', r_strikethrough.tokenize], ['emphasis', r_emphasis.tokenize], ['link', link], ['image', image], ['autolink', autolink], ['html_inline', html_inline], ['entity', entity]];\n\n// `rule2` ruleset was created specifically for emphasis/strikethrough\n// post-processing and may be changed in the future.\n//\n// Don't use this for anything except pairs (plugins working with `balance_pairs`).\n//\nconst _rules2 = [['balance_pairs', link_pairs], ['strikethrough', r_strikethrough.postProcess], ['emphasis', r_emphasis.postProcess],\n// rules for pairs separate '**' into its own text tokens, which may be left unused,\n// rule below merges unused segments back with the rest of the text\n['fragments_join', fragments_join]];\n\n/**\n * new ParserInline()\n **/\nfunction ParserInline() {\n  /**\n   * ParserInline#ruler -> Ruler\n   *\n   * [[Ruler]] instance. Keep configuration of inline rules.\n   **/\n  this.ruler = new Ruler();\n  for (let i = 0; i < _rules.length; i++) {\n    this.ruler.push(_rules[i][0], _rules[i][1]);\n  }\n\n  /**\n   * ParserInline#ruler2 -> Ruler\n   *\n   * [[Ruler]] instance. Second ruler used for post-processing\n   * (e.g. in emphasis-like rules).\n   **/\n  this.ruler2 = new Ruler();\n  for (let i = 0; i < _rules2.length; i++) {\n    this.ruler2.push(_rules2[i][0], _rules2[i][1]);\n  }\n}\n\n// Skip single token by running all rules in validation mode;\n// returns `true` if any rule reported success\n//\nParserInline.prototype.skipToken = function (state) {\n  const pos = state.pos;\n  const rules = this.ruler.getRules('');\n  const len = rules.length;\n  const maxNesting = state.md.options.maxNesting;\n  const cache = state.cache;\n  if (typeof cache[pos] !== 'undefined') {\n    state.pos = cache[pos];\n    return;\n  }\n  let ok = false;\n  if (state.level < maxNesting) {\n    for (let i = 0; i < len; i++) {\n      // Increment state.level and decrement it later to limit recursion.\n      // It's harmless to do here, because no tokens are created. But ideally,\n      // we'd need a separate private state variable for this purpose.\n      //\n      state.level++;\n      ok = rules[i](state, true);\n      state.level--;\n      if (ok) {\n        if (pos >= state.pos) {\n          throw new Error(\"inline rule didn't increment state.pos\");\n        }\n        break;\n      }\n    }\n  } else {\n    // Too much nesting, just skip until the end of the paragraph.\n    //\n    // NOTE: this will cause links to behave incorrectly in the following case,\n    //       when an amount of `[` is exactly equal to `maxNesting + 1`:\n    //\n    //       [[[[[[[[[[[[[[[[[[[[[foo]()\n    //\n    // TODO: remove this workaround when CM standard will allow nested links\n    //       (we can replace it by preventing links from being parsed in\n    //       validation mode)\n    //\n    state.pos = state.posMax;\n  }\n  if (!ok) {\n    state.pos++;\n  }\n  cache[pos] = state.pos;\n};\n\n// Generate tokens for input range\n//\nParserInline.prototype.tokenize = function (state) {\n  const rules = this.ruler.getRules('');\n  const len = rules.length;\n  const end = state.posMax;\n  const maxNesting = state.md.options.maxNesting;\n  while (state.pos < end) {\n    // Try all possible rules.\n    // On success, rule should:\n    //\n    // - update `state.pos`\n    // - update `state.tokens`\n    // - return true\n    const prevPos = state.pos;\n    let ok = false;\n    if (state.level < maxNesting) {\n      for (let i = 0; i < len; i++) {\n        ok = rules[i](state, false);\n        if (ok) {\n          if (prevPos >= state.pos) {\n            throw new Error(\"inline rule didn't increment state.pos\");\n          }\n          break;\n        }\n      }\n    }\n    if (ok) {\n      if (state.pos >= end) {\n        break;\n      }\n      continue;\n    }\n    state.pending += state.src[state.pos++];\n  }\n  if (state.pending) {\n    state.pushPending();\n  }\n};\n\n/**\n * ParserInline.parse(str, md, env, outTokens)\n *\n * Process input string and push inline tokens into `outTokens`\n **/\nParserInline.prototype.parse = function (str, md, env, outTokens) {\n  const state = new this.State(str, md, env, outTokens);\n  this.tokenize(state);\n  const rules = this.ruler2.getRules('');\n  const len = rules.length;\n  for (let i = 0; i < len; i++) {\n    rules[i](state);\n  }\n};\nParserInline.prototype.State = StateInline;\n\n// markdown-it default options\n\nvar cfg_default = {\n  options: {\n    // Enable HTML tags in source\n    html: false,\n    // Use '/' to close single tags (<br />)\n    xhtmlOut: false,\n    // Convert '\\n' in paragraphs into <br>\n    breaks: false,\n    // CSS language prefix for fenced blocks\n    langPrefix: 'language-',\n    // autoconvert URL-like texts to links\n    linkify: false,\n    // Enable some language-neutral replacements + quotes beautification\n    typographer: false,\n    // Double + single quotes replacement pairs, when typographer enabled,\n    // and smartquotes on. Could be either a String or an Array.\n    //\n    // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n    // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n    quotes: '\\u201c\\u201d\\u2018\\u2019',\n    /* “”‘’ */\n\n    // Highlighter function. Should return escaped HTML,\n    // or '' if the source string is not changed and should be escaped externaly.\n    // If result starts with <pre... internal wrapper is skipped.\n    //\n    // function (/*str, lang*/) { return ''; }\n    //\n    highlight: null,\n    // Internal protection, recursion limit\n    maxNesting: 100\n  },\n  components: {\n    core: {},\n    block: {},\n    inline: {}\n  }\n};\n\n// \"Zero\" preset, with nothing enabled. Useful for manual configuring of simple\n// modes. For example, to parse bold/italic only.\n\nvar cfg_zero = {\n  options: {\n    // Enable HTML tags in source\n    html: false,\n    // Use '/' to close single tags (<br />)\n    xhtmlOut: false,\n    // Convert '\\n' in paragraphs into <br>\n    breaks: false,\n    // CSS language prefix for fenced blocks\n    langPrefix: 'language-',\n    // autoconvert URL-like texts to links\n    linkify: false,\n    // Enable some language-neutral replacements + quotes beautification\n    typographer: false,\n    // Double + single quotes replacement pairs, when typographer enabled,\n    // and smartquotes on. Could be either a String or an Array.\n    //\n    // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n    // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n    quotes: '\\u201c\\u201d\\u2018\\u2019',\n    /* “”‘’ */\n\n    // Highlighter function. Should return escaped HTML,\n    // or '' if the source string is not changed and should be escaped externaly.\n    // If result starts with <pre... internal wrapper is skipped.\n    //\n    // function (/*str, lang*/) { return ''; }\n    //\n    highlight: null,\n    // Internal protection, recursion limit\n    maxNesting: 20\n  },\n  components: {\n    core: {\n      rules: ['normalize', 'block', 'inline', 'text_join']\n    },\n    block: {\n      rules: ['paragraph']\n    },\n    inline: {\n      rules: ['text'],\n      rules2: ['balance_pairs', 'fragments_join']\n    }\n  }\n};\n\n// Commonmark default options\n\nvar cfg_commonmark = {\n  options: {\n    // Enable HTML tags in source\n    html: true,\n    // Use '/' to close single tags (<br />)\n    xhtmlOut: true,\n    // Convert '\\n' in paragraphs into <br>\n    breaks: false,\n    // CSS language prefix for fenced blocks\n    langPrefix: 'language-',\n    // autoconvert URL-like texts to links\n    linkify: false,\n    // Enable some language-neutral replacements + quotes beautification\n    typographer: false,\n    // Double + single quotes replacement pairs, when typographer enabled,\n    // and smartquotes on. Could be either a String or an Array.\n    //\n    // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n    // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n    quotes: '\\u201c\\u201d\\u2018\\u2019',\n    /* “”‘’ */\n\n    // Highlighter function. Should return escaped HTML,\n    // or '' if the source string is not changed and should be escaped externaly.\n    // If result starts with <pre... internal wrapper is skipped.\n    //\n    // function (/*str, lang*/) { return ''; }\n    //\n    highlight: null,\n    // Internal protection, recursion limit\n    maxNesting: 20\n  },\n  components: {\n    core: {\n      rules: ['normalize', 'block', 'inline', 'text_join']\n    },\n    block: {\n      rules: ['blockquote', 'code', 'fence', 'heading', 'hr', 'html_block', 'lheading', 'list', 'reference', 'paragraph']\n    },\n    inline: {\n      rules: ['autolink', 'backticks', 'emphasis', 'entity', 'escape', 'html_inline', 'image', 'link', 'newline', 'text'],\n      rules2: ['balance_pairs', 'emphasis', 'fragments_join']\n    }\n  }\n};\n\n// Main parser class\n\nconst config = {\n  default: cfg_default,\n  zero: cfg_zero,\n  commonmark: cfg_commonmark\n};\n\n//\n// This validator can prohibit more than really needed to prevent XSS. It's a\n// tradeoff to keep code simple and to be secure by default.\n//\n// If you need different setup - override validator method as you wish. Or\n// replace it with dummy function and use external sanitizer.\n//\n\nconst BAD_PROTO_RE = /^(vbscript|javascript|file|data):/;\nconst GOOD_DATA_RE = /^data:image\\/(gif|png|jpeg|webp);/;\nfunction validateLink(url) {\n  // url should be normalized at this point, and existing entities are decoded\n  const str = url.trim().toLowerCase();\n  return BAD_PROTO_RE.test(str) ? GOOD_DATA_RE.test(str) : true;\n}\nconst RECODE_HOSTNAME_FOR = ['http:', 'https:', 'mailto:'];\nfunction normalizeLink(url) {\n  const parsed = mdurl__namespace.parse(url, true);\n  if (parsed.hostname) {\n    // Encode hostnames in urls like:\n    // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n    //\n    // We don't encode unknown schemas, because it's likely that we encode\n    // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n    //\n    if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n      try {\n        parsed.hostname = punycode.toASCII(parsed.hostname);\n      } catch (er) {/**/}\n    }\n  }\n  return mdurl__namespace.encode(mdurl__namespace.format(parsed));\n}\nfunction normalizeLinkText(url) {\n  const parsed = mdurl__namespace.parse(url, true);\n  if (parsed.hostname) {\n    // Encode hostnames in urls like:\n    // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n    //\n    // We don't encode unknown schemas, because it's likely that we encode\n    // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n    //\n    if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n      try {\n        parsed.hostname = punycode.toUnicode(parsed.hostname);\n      } catch (er) {/**/}\n    }\n  }\n\n  // add '%' to exclude list because of https://github.com/markdown-it/markdown-it/issues/720\n  return mdurl__namespace.decode(mdurl__namespace.format(parsed), mdurl__namespace.decode.defaultChars + '%');\n}\n\n/**\n * class MarkdownIt\n *\n * Main parser/renderer class.\n *\n * ##### Usage\n *\n * ```javascript\n * // node.js, \"classic\" way:\n * var MarkdownIt = require('markdown-it'),\n *     md = new MarkdownIt();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // node.js, the same, but with sugar:\n * var md = require('markdown-it')();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // browser without AMD, added to \"window\" on script load\n * // Note, there are no dash.\n * var md = window.markdownit();\n * var result = md.render('# markdown-it rulezz!');\n * ```\n *\n * Single line rendering, without paragraph wrap:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * var result = md.renderInline('__markdown-it__ rulezz!');\n * ```\n **/\n\n/**\n * new MarkdownIt([presetName, options])\n * - presetName (String): optional, `commonmark` / `zero`\n * - options (Object)\n *\n * Creates parser instanse with given config. Can be called without `new`.\n *\n * ##### presetName\n *\n * MarkdownIt provides named presets as a convenience to quickly\n * enable/disable active syntax rules and options for common use cases.\n *\n * - [\"commonmark\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/commonmark.mjs) -\n *   configures parser to strict [CommonMark](http://commonmark.org/) mode.\n * - [default](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/default.mjs) -\n *   similar to GFM, used when no preset name given. Enables all available rules,\n *   but still without html, typographer & autolinker.\n * - [\"zero\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/zero.mjs) -\n *   all rules disabled. Useful to quickly setup your config via `.enable()`.\n *   For example, when you need only `bold` and `italic` markup and nothing else.\n *\n * ##### options:\n *\n * - __html__ - `false`. Set `true` to enable HTML tags in source. Be careful!\n *   That's not safe! You may need external sanitizer to protect output from XSS.\n *   It's better to extend features via plugins, instead of enabling HTML.\n * - __xhtmlOut__ - `false`. Set `true` to add '/' when closing single tags\n *   (`<br />`). This is needed only for full CommonMark compatibility. In real\n *   world you will need HTML output.\n * - __breaks__ - `false`. Set `true` to convert `\\n` in paragraphs into `<br>`.\n * - __langPrefix__ - `language-`. CSS language class prefix for fenced blocks.\n *   Can be useful for external highlighters.\n * - __linkify__ - `false`. Set `true` to autoconvert URL-like text to links.\n * - __typographer__  - `false`. Set `true` to enable [some language-neutral\n *   replacement](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/replacements.mjs) +\n *   quotes beautification (smartquotes).\n * - __quotes__ - `“”‘’`, String or Array. Double + single quotes replacement\n *   pairs, when typographer enabled and smartquotes on. For example, you can\n *   use `'«»„“'` for Russian, `'„“‚‘'` for German, and\n *   `['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›']` for French (including nbsp).\n * - __highlight__ - `null`. Highlighter function for fenced code blocks.\n *   Highlighter `function (str, lang)` should return escaped HTML. It can also\n *   return empty string if the source was not changed and should be escaped\n *   externaly. If result starts with <pre... internal wrapper is skipped.\n *\n * ##### Example\n *\n * ```javascript\n * // commonmark mode\n * var md = require('markdown-it')('commonmark');\n *\n * // default mode\n * var md = require('markdown-it')();\n *\n * // enable everything\n * var md = require('markdown-it')({\n *   html: true,\n *   linkify: true,\n *   typographer: true\n * });\n * ```\n *\n * ##### Syntax highlighting\n *\n * ```js\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * var md = require('markdown-it')({\n *   highlight: function (str, lang) {\n *     if (lang && hljs.getLanguage(lang)) {\n *       try {\n *         return hljs.highlight(str, { language: lang, ignoreIllegals: true }).value;\n *       } catch (__) {}\n *     }\n *\n *     return ''; // use external default escaping\n *   }\n * });\n * ```\n *\n * Or with full wrapper override (if you need assign class to `<pre>` or `<code>`):\n *\n * ```javascript\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * // Actual default values\n * var md = require('markdown-it')({\n *   highlight: function (str, lang) {\n *     if (lang && hljs.getLanguage(lang)) {\n *       try {\n *         return '<pre><code class=\"hljs\">' +\n *                hljs.highlight(str, { language: lang, ignoreIllegals: true }).value +\n *                '</code></pre>';\n *       } catch (__) {}\n *     }\n *\n *     return '<pre><code class=\"hljs\">' + md.utils.escapeHtml(str) + '</code></pre>';\n *   }\n * });\n * ```\n *\n **/\nfunction MarkdownIt(presetName, options) {\n  if (!(this instanceof MarkdownIt)) {\n    return new MarkdownIt(presetName, options);\n  }\n  if (!options) {\n    if (!isString(presetName)) {\n      options = presetName || {};\n      presetName = 'default';\n    }\n  }\n\n  /**\n   * MarkdownIt#inline -> ParserInline\n   *\n   * Instance of [[ParserInline]]. You may need it to add new rules when\n   * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n   * [[MarkdownIt.enable]].\n   **/\n  this.inline = new ParserInline();\n\n  /**\n   * MarkdownIt#block -> ParserBlock\n   *\n   * Instance of [[ParserBlock]]. You may need it to add new rules when\n   * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n   * [[MarkdownIt.enable]].\n   **/\n  this.block = new ParserBlock();\n\n  /**\n   * MarkdownIt#core -> Core\n   *\n   * Instance of [[Core]] chain executor. You may need it to add new rules when\n   * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n   * [[MarkdownIt.enable]].\n   **/\n  this.core = new Core();\n\n  /**\n   * MarkdownIt#renderer -> Renderer\n   *\n   * Instance of [[Renderer]]. Use it to modify output look. Or to add rendering\n   * rules for new token types, generated by plugins.\n   *\n   * ##### Example\n   *\n   * ```javascript\n   * var md = require('markdown-it')();\n   *\n   * function myToken(tokens, idx, options, env, self) {\n   *   //...\n   *   return result;\n   * };\n   *\n   * md.renderer.rules['my_token'] = myToken\n   * ```\n   *\n   * See [[Renderer]] docs and [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.mjs).\n   **/\n  this.renderer = new Renderer();\n\n  /**\n   * MarkdownIt#linkify -> LinkifyIt\n   *\n   * [linkify-it](https://github.com/markdown-it/linkify-it) instance.\n   * Used by [linkify](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/linkify.mjs)\n   * rule.\n   **/\n  this.linkify = new LinkifyIt();\n\n  /**\n   * MarkdownIt#validateLink(url) -> Boolean\n   *\n   * Link validation function. CommonMark allows too much in links. By default\n   * we disable `javascript:`, `vbscript:`, `file:` schemas, and almost all `data:...` schemas\n   * except some embedded image types.\n   *\n   * You can change this behaviour:\n   *\n   * ```javascript\n   * var md = require('markdown-it')();\n   * // enable everything\n   * md.validateLink = function () { return true; }\n   * ```\n   **/\n  this.validateLink = validateLink;\n\n  /**\n   * MarkdownIt#normalizeLink(url) -> String\n   *\n   * Function used to encode link url to a machine-readable format,\n   * which includes url-encoding, punycode, etc.\n   **/\n  this.normalizeLink = normalizeLink;\n\n  /**\n   * MarkdownIt#normalizeLinkText(url) -> String\n   *\n   * Function used to decode link url to a human-readable format`\n   **/\n  this.normalizeLinkText = normalizeLinkText;\n\n  // Expose utils & helpers for easy acces from plugins\n\n  /**\n   * MarkdownIt#utils -> utils\n   *\n   * Assorted utility functions, useful to write plugins. See details\n   * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/common/utils.mjs).\n   **/\n  this.utils = utils;\n\n  /**\n   * MarkdownIt#helpers -> helpers\n   *\n   * Link components parser functions, useful to write plugins. See details\n   * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/helpers).\n   **/\n  this.helpers = assign({}, helpers);\n  this.options = {};\n  this.configure(presetName);\n  if (options) {\n    this.set(options);\n  }\n}\n\n/** chainable\n * MarkdownIt.set(options)\n *\n * Set parser options (in the same format as in constructor). Probably, you\n * will never need it, but you can change options after constructor call.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n *             .set({ html: true, breaks: true })\n *             .set({ typographer, true });\n * ```\n *\n * __Note:__ To achieve the best possible performance, don't modify a\n * `markdown-it` instance options on the fly. If you need multiple configurations\n * it's best to create multiple instances and initialize each with separate\n * config.\n **/\nMarkdownIt.prototype.set = function (options) {\n  assign(this.options, options);\n  return this;\n};\n\n/** chainable, internal\n * MarkdownIt.configure(presets)\n *\n * Batch load of all options and compenent settings. This is internal method,\n * and you probably will not need it. But if you will - see available presets\n * and data structure [here](https://github.com/markdown-it/markdown-it/tree/master/lib/presets)\n *\n * We strongly recommend to use presets instead of direct config loads. That\n * will give better compatibility with next versions.\n **/\nMarkdownIt.prototype.configure = function (presets) {\n  const self = this;\n  if (isString(presets)) {\n    const presetName = presets;\n    presets = config[presetName];\n    if (!presets) {\n      throw new Error('Wrong `markdown-it` preset \"' + presetName + '\", check name');\n    }\n  }\n  if (!presets) {\n    throw new Error('Wrong `markdown-it` preset, can\\'t be empty');\n  }\n  if (presets.options) {\n    self.set(presets.options);\n  }\n  if (presets.components) {\n    Object.keys(presets.components).forEach(function (name) {\n      if (presets.components[name].rules) {\n        self[name].ruler.enableOnly(presets.components[name].rules);\n      }\n      if (presets.components[name].rules2) {\n        self[name].ruler2.enableOnly(presets.components[name].rules2);\n      }\n    });\n  }\n  return this;\n};\n\n/** chainable\n * MarkdownIt.enable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to enable\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable list or rules. It will automatically find appropriate components,\n * containing rules with given names. If rule not found, and `ignoreInvalid`\n * not set - throws exception.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n *             .enable(['sub', 'sup'])\n *             .disable('smartquotes');\n * ```\n **/\nMarkdownIt.prototype.enable = function (list, ignoreInvalid) {\n  let result = [];\n  if (!Array.isArray(list)) {\n    list = [list];\n  }\n  ['core', 'block', 'inline'].forEach(function (chain) {\n    result = result.concat(this[chain].ruler.enable(list, true));\n  }, this);\n  result = result.concat(this.inline.ruler2.enable(list, true));\n  const missed = list.filter(function (name) {\n    return result.indexOf(name) < 0;\n  });\n  if (missed.length && !ignoreInvalid) {\n    throw new Error('MarkdownIt. Failed to enable unknown rule(s): ' + missed);\n  }\n  return this;\n};\n\n/** chainable\n * MarkdownIt.disable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * The same as [[MarkdownIt.enable]], but turn specified rules off.\n **/\nMarkdownIt.prototype.disable = function (list, ignoreInvalid) {\n  let result = [];\n  if (!Array.isArray(list)) {\n    list = [list];\n  }\n  ['core', 'block', 'inline'].forEach(function (chain) {\n    result = result.concat(this[chain].ruler.disable(list, true));\n  }, this);\n  result = result.concat(this.inline.ruler2.disable(list, true));\n  const missed = list.filter(function (name) {\n    return result.indexOf(name) < 0;\n  });\n  if (missed.length && !ignoreInvalid) {\n    throw new Error('MarkdownIt. Failed to disable unknown rule(s): ' + missed);\n  }\n  return this;\n};\n\n/** chainable\n * MarkdownIt.use(plugin, params)\n *\n * Load specified plugin with given params into current parser instance.\n * It's just a sugar to call `plugin(md, params)` with curring.\n *\n * ##### Example\n *\n * ```javascript\n * var iterator = require('markdown-it-for-inline');\n * var md = require('markdown-it')()\n *             .use(iterator, 'foo_replace', 'text', function (tokens, idx) {\n *               tokens[idx].content = tokens[idx].content.replace(/foo/g, 'bar');\n *             });\n * ```\n **/\nMarkdownIt.prototype.use = function (plugin /*, params, ... */) {\n  const args = [this].concat(Array.prototype.slice.call(arguments, 1));\n  plugin.apply(plugin, args);\n  return this;\n};\n\n/** internal\n * MarkdownIt.parse(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Parse input string and return list of block tokens (special token type\n * \"inline\" will contain list of inline tokens). You should not call this\n * method directly, until you write custom renderer (for example, to produce\n * AST).\n *\n * `env` is used to pass data between \"distributed\" rules and return additional\n * metadata like reference info, needed for the renderer. It also can be used to\n * inject data in specific cases. Usually, you will be ok to pass `{}`,\n * and then pass updated object to renderer.\n **/\nMarkdownIt.prototype.parse = function (src, env) {\n  if (typeof src !== 'string') {\n    throw new Error('Input data should be a String');\n  }\n  const state = new this.core.State(src, this, env);\n  this.core.process(state);\n  return state.tokens;\n};\n\n/**\n * MarkdownIt.render(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Render markdown string into html. It does all magic for you :).\n *\n * `env` can be used to inject additional metadata (`{}` by default).\n * But you will not need it with high probability. See also comment\n * in [[MarkdownIt.parse]].\n **/\nMarkdownIt.prototype.render = function (src, env) {\n  env = env || {};\n  return this.renderer.render(this.parse(src, env), this.options, env);\n};\n\n/** internal\n * MarkdownIt.parseInline(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * The same as [[MarkdownIt.parse]] but skip all block rules. It returns the\n * block tokens list with the single `inline` element, containing parsed inline\n * tokens in `children` property. Also updates `env` object.\n **/\nMarkdownIt.prototype.parseInline = function (src, env) {\n  const state = new this.core.State(src, this, env);\n  state.inlineMode = true;\n  this.core.process(state);\n  return state.tokens;\n};\n\n/**\n * MarkdownIt.renderInline(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Similar to [[MarkdownIt.render]] but for single paragraph content. Result\n * will NOT be wrapped into `<p>` tags.\n **/\nMarkdownIt.prototype.renderInline = function (src, env) {\n  env = env || {};\n  return this.renderer.render(this.parseInline(src, env), this.options, env);\n};\n\nmodule.exports = MarkdownIt;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodeXML = exports.decodeHTMLStrict = exports.decodeHTMLAttribute = exports.decodeHTML = exports.determineBranch = exports.EntityDecoder = exports.DecodingMode = exports.BinTrieFlags = exports.fromCodePoint = exports.replaceCodePoint = exports.decodeCodePoint = exports.xmlDecodeTree = exports.htmlDecodeTree = void 0;\nvar decode_data_html_js_1 = __importDefault(require(\"./generated/decode-data-html.js\"));\nexports.htmlDecodeTree = decode_data_html_js_1.default;\nvar decode_data_xml_js_1 = __importDefault(require(\"./generated/decode-data-xml.js\"));\nexports.xmlDecodeTree = decode_data_xml_js_1.default;\nvar decode_codepoint_js_1 = __importStar(require(\"./decode_codepoint.js\"));\nexports.decodeCodePoint = decode_codepoint_js_1.default;\nvar decode_codepoint_js_2 = require(\"./decode_codepoint.js\");\nObject.defineProperty(exports, \"replaceCodePoint\", { enumerable: true, get: function () { return decode_codepoint_js_2.replaceCodePoint; } });\nObject.defineProperty(exports, \"fromCodePoint\", { enumerable: true, get: function () { return decode_codepoint_js_2.fromCodePoint; } });\nvar CharCodes;\n(function (CharCodes) {\n    CharCodes[CharCodes[\"NUM\"] = 35] = \"NUM\";\n    CharCodes[CharCodes[\"SEMI\"] = 59] = \"SEMI\";\n    CharCodes[CharCodes[\"EQUALS\"] = 61] = \"EQUALS\";\n    CharCodes[CharCodes[\"ZERO\"] = 48] = \"ZERO\";\n    CharCodes[CharCodes[\"NINE\"] = 57] = \"NINE\";\n    CharCodes[CharCodes[\"LOWER_A\"] = 97] = \"LOWER_A\";\n    CharCodes[CharCodes[\"LOWER_F\"] = 102] = \"LOWER_F\";\n    CharCodes[CharCodes[\"LOWER_X\"] = 120] = \"LOWER_X\";\n    CharCodes[CharCodes[\"LOWER_Z\"] = 122] = \"LOWER_Z\";\n    CharCodes[CharCodes[\"UPPER_A\"] = 65] = \"UPPER_A\";\n    CharCodes[CharCodes[\"UPPER_F\"] = 70] = \"UPPER_F\";\n    CharCodes[CharCodes[\"UPPER_Z\"] = 90] = \"UPPER_Z\";\n})(CharCodes || (CharCodes = {}));\n/** Bit that needs to be set to convert an upper case ASCII character to lower case */\nvar TO_LOWER_BIT = 32;\nvar BinTrieFlags;\n(function (BinTrieFlags) {\n    BinTrieFlags[BinTrieFlags[\"VALUE_LENGTH\"] = 49152] = \"VALUE_LENGTH\";\n    BinTrieFlags[BinTrieFlags[\"BRANCH_LENGTH\"] = 16256] = \"BRANCH_LENGTH\";\n    BinTrieFlags[BinTrieFlags[\"JUMP_TABLE\"] = 127] = \"JUMP_TABLE\";\n})(BinTrieFlags = exports.BinTrieFlags || (exports.BinTrieFlags = {}));\nfunction isNumber(code) {\n    return code >= CharCodes.ZERO && code <= CharCodes.NINE;\n}\nfunction isHexadecimalCharacter(code) {\n    return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F) ||\n        (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F));\n}\nfunction isAsciiAlphaNumeric(code) {\n    return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z) ||\n        (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z) ||\n        isNumber(code));\n}\n/**\n * Checks if the given character is a valid end character for an entity in an attribute.\n *\n * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.\n * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state\n */\nfunction isEntityInAttributeInvalidEnd(code) {\n    return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);\n}\nvar EntityDecoderState;\n(function (EntityDecoderState) {\n    EntityDecoderState[EntityDecoderState[\"EntityStart\"] = 0] = \"EntityStart\";\n    EntityDecoderState[EntityDecoderState[\"NumericStart\"] = 1] = \"NumericStart\";\n    EntityDecoderState[EntityDecoderState[\"NumericDecimal\"] = 2] = \"NumericDecimal\";\n    EntityDecoderState[EntityDecoderState[\"NumericHex\"] = 3] = \"NumericHex\";\n    EntityDecoderState[EntityDecoderState[\"NamedEntity\"] = 4] = \"NamedEntity\";\n})(EntityDecoderState || (EntityDecoderState = {}));\nvar DecodingMode;\n(function (DecodingMode) {\n    /** Entities in text nodes that can end with any character. */\n    DecodingMode[DecodingMode[\"Legacy\"] = 0] = \"Legacy\";\n    /** Only allow entities terminated with a semicolon. */\n    DecodingMode[DecodingMode[\"Strict\"] = 1] = \"Strict\";\n    /** Entities in attributes have limitations on ending characters. */\n    DecodingMode[DecodingMode[\"Attribute\"] = 2] = \"Attribute\";\n})(DecodingMode = exports.DecodingMode || (exports.DecodingMode = {}));\n/**\n * Token decoder with support of writing partial entities.\n */\nvar EntityDecoder = /** @class */ (function () {\n    function EntityDecoder(\n    /** The tree used to decode entities. */\n    decodeTree, \n    /**\n     * The function that is called when a codepoint is decoded.\n     *\n     * For multi-byte named entities, this will be called multiple times,\n     * with the second codepoint, and the same `consumed` value.\n     *\n     * @param codepoint The decoded codepoint.\n     * @param consumed The number of bytes consumed by the decoder.\n     */\n    emitCodePoint, \n    /** An object that is used to produce errors. */\n    errors) {\n        this.decodeTree = decodeTree;\n        this.emitCodePoint = emitCodePoint;\n        this.errors = errors;\n        /** The current state of the decoder. */\n        this.state = EntityDecoderState.EntityStart;\n        /** Characters that were consumed while parsing an entity. */\n        this.consumed = 1;\n        /**\n         * The result of the entity.\n         *\n         * Either the result index of a numeric entity, or the codepoint of a\n         * numeric entity.\n         */\n        this.result = 0;\n        /** The current index in the decode tree. */\n        this.treeIndex = 0;\n        /** The number of characters that were consumed in excess. */\n        this.excess = 1;\n        /** The mode in which the decoder is operating. */\n        this.decodeMode = DecodingMode.Strict;\n    }\n    /** Resets the instance to make it reusable. */\n    EntityDecoder.prototype.startEntity = function (decodeMode) {\n        this.decodeMode = decodeMode;\n        this.state = EntityDecoderState.EntityStart;\n        this.result = 0;\n        this.treeIndex = 0;\n        this.excess = 1;\n        this.consumed = 1;\n    };\n    /**\n     * Write an entity to the decoder. This can be called multiple times with partial entities.\n     * If the entity is incomplete, the decoder will return -1.\n     *\n     * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the\n     * entity is incomplete, and resume when the next string is written.\n     *\n     * @param string The string containing the entity (or a continuation of the entity).\n     * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    EntityDecoder.prototype.write = function (str, offset) {\n        switch (this.state) {\n            case EntityDecoderState.EntityStart: {\n                if (str.charCodeAt(offset) === CharCodes.NUM) {\n                    this.state = EntityDecoderState.NumericStart;\n                    this.consumed += 1;\n                    return this.stateNumericStart(str, offset + 1);\n                }\n                this.state = EntityDecoderState.NamedEntity;\n                return this.stateNamedEntity(str, offset);\n            }\n            case EntityDecoderState.NumericStart: {\n                return this.stateNumericStart(str, offset);\n            }\n            case EntityDecoderState.NumericDecimal: {\n                return this.stateNumericDecimal(str, offset);\n            }\n            case EntityDecoderState.NumericHex: {\n                return this.stateNumericHex(str, offset);\n            }\n            case EntityDecoderState.NamedEntity: {\n                return this.stateNamedEntity(str, offset);\n            }\n        }\n    };\n    /**\n     * Switches between the numeric decimal and hexadecimal states.\n     *\n     * Equivalent to the `Numeric character reference state` in the HTML spec.\n     *\n     * @param str The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    EntityDecoder.prototype.stateNumericStart = function (str, offset) {\n        if (offset >= str.length) {\n            return -1;\n        }\n        if ((str.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {\n            this.state = EntityDecoderState.NumericHex;\n            this.consumed += 1;\n            return this.stateNumericHex(str, offset + 1);\n        }\n        this.state = EntityDecoderState.NumericDecimal;\n        return this.stateNumericDecimal(str, offset);\n    };\n    EntityDecoder.prototype.addToNumericResult = function (str, start, end, base) {\n        if (start !== end) {\n            var digitCount = end - start;\n            this.result =\n                this.result * Math.pow(base, digitCount) +\n                    parseInt(str.substr(start, digitCount), base);\n            this.consumed += digitCount;\n        }\n    };\n    /**\n     * Parses a hexadecimal numeric entity.\n     *\n     * Equivalent to the `Hexademical character reference state` in the HTML spec.\n     *\n     * @param str The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    EntityDecoder.prototype.stateNumericHex = function (str, offset) {\n        var startIdx = offset;\n        while (offset < str.length) {\n            var char = str.charCodeAt(offset);\n            if (isNumber(char) || isHexadecimalCharacter(char)) {\n                offset += 1;\n            }\n            else {\n                this.addToNumericResult(str, startIdx, offset, 16);\n                return this.emitNumericEntity(char, 3);\n            }\n        }\n        this.addToNumericResult(str, startIdx, offset, 16);\n        return -1;\n    };\n    /**\n     * Parses a decimal numeric entity.\n     *\n     * Equivalent to the `Decimal character reference state` in the HTML spec.\n     *\n     * @param str The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    EntityDecoder.prototype.stateNumericDecimal = function (str, offset) {\n        var startIdx = offset;\n        while (offset < str.length) {\n            var char = str.charCodeAt(offset);\n            if (isNumber(char)) {\n                offset += 1;\n            }\n            else {\n                this.addToNumericResult(str, startIdx, offset, 10);\n                return this.emitNumericEntity(char, 2);\n            }\n        }\n        this.addToNumericResult(str, startIdx, offset, 10);\n        return -1;\n    };\n    /**\n     * Validate and emit a numeric entity.\n     *\n     * Implements the logic from the `Hexademical character reference start\n     * state` and `Numeric character reference end state` in the HTML spec.\n     *\n     * @param lastCp The last code point of the entity. Used to see if the\n     *               entity was terminated with a semicolon.\n     * @param expectedLength The minimum number of characters that should be\n     *                       consumed. Used to validate that at least one digit\n     *                       was consumed.\n     * @returns The number of characters that were consumed.\n     */\n    EntityDecoder.prototype.emitNumericEntity = function (lastCp, expectedLength) {\n        var _a;\n        // Ensure we consumed at least one digit.\n        if (this.consumed <= expectedLength) {\n            (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n            return 0;\n        }\n        // Figure out if this is a legit end of the entity\n        if (lastCp === CharCodes.SEMI) {\n            this.consumed += 1;\n        }\n        else if (this.decodeMode === DecodingMode.Strict) {\n            return 0;\n        }\n        this.emitCodePoint((0, decode_codepoint_js_1.replaceCodePoint)(this.result), this.consumed);\n        if (this.errors) {\n            if (lastCp !== CharCodes.SEMI) {\n                this.errors.missingSemicolonAfterCharacterReference();\n            }\n            this.errors.validateNumericCharacterReference(this.result);\n        }\n        return this.consumed;\n    };\n    /**\n     * Parses a named entity.\n     *\n     * Equivalent to the `Named character reference state` in the HTML spec.\n     *\n     * @param str The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    EntityDecoder.prototype.stateNamedEntity = function (str, offset) {\n        var decodeTree = this.decodeTree;\n        var current = decodeTree[this.treeIndex];\n        // The mask is the number of bytes of the value, including the current byte.\n        var valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n        for (; offset < str.length; offset++, this.excess++) {\n            var char = str.charCodeAt(offset);\n            this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);\n            if (this.treeIndex < 0) {\n                return this.result === 0 ||\n                    // If we are parsing an attribute\n                    (this.decodeMode === DecodingMode.Attribute &&\n                        // We shouldn't have consumed any characters after the entity,\n                        (valueLength === 0 ||\n                            // And there should be no invalid characters.\n                            isEntityInAttributeInvalidEnd(char)))\n                    ? 0\n                    : this.emitNotTerminatedNamedEntity();\n            }\n            current = decodeTree[this.treeIndex];\n            valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n            // If the branch is a value, store it and continue\n            if (valueLength !== 0) {\n                // If the entity is terminated by a semicolon, we are done.\n                if (char === CharCodes.SEMI) {\n                    return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);\n                }\n                // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.\n                if (this.decodeMode !== DecodingMode.Strict) {\n                    this.result = this.treeIndex;\n                    this.consumed += this.excess;\n                    this.excess = 0;\n                }\n            }\n        }\n        return -1;\n    };\n    /**\n     * Emit a named entity that was not terminated with a semicolon.\n     *\n     * @returns The number of characters consumed.\n     */\n    EntityDecoder.prototype.emitNotTerminatedNamedEntity = function () {\n        var _a;\n        var _b = this, result = _b.result, decodeTree = _b.decodeTree;\n        var valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;\n        this.emitNamedEntityData(result, valueLength, this.consumed);\n        (_a = this.errors) === null || _a === void 0 ? void 0 : _a.missingSemicolonAfterCharacterReference();\n        return this.consumed;\n    };\n    /**\n     * Emit a named entity.\n     *\n     * @param result The index of the entity in the decode tree.\n     * @param valueLength The number of bytes in the entity.\n     * @param consumed The number of characters consumed.\n     *\n     * @returns The number of characters consumed.\n     */\n    EntityDecoder.prototype.emitNamedEntityData = function (result, valueLength, consumed) {\n        var decodeTree = this.decodeTree;\n        this.emitCodePoint(valueLength === 1\n            ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH\n            : decodeTree[result + 1], consumed);\n        if (valueLength === 3) {\n            // For multi-byte values, we need to emit the second byte.\n            this.emitCodePoint(decodeTree[result + 2], consumed);\n        }\n        return consumed;\n    };\n    /**\n     * Signal to the parser that the end of the input was reached.\n     *\n     * Remaining data will be emitted and relevant errors will be produced.\n     *\n     * @returns The number of characters consumed.\n     */\n    EntityDecoder.prototype.end = function () {\n        var _a;\n        switch (this.state) {\n            case EntityDecoderState.NamedEntity: {\n                // Emit a named entity if we have one.\n                return this.result !== 0 &&\n                    (this.decodeMode !== DecodingMode.Attribute ||\n                        this.result === this.treeIndex)\n                    ? this.emitNotTerminatedNamedEntity()\n                    : 0;\n            }\n            // Otherwise, emit a numeric entity if we have one.\n            case EntityDecoderState.NumericDecimal: {\n                return this.emitNumericEntity(0, 2);\n            }\n            case EntityDecoderState.NumericHex: {\n                return this.emitNumericEntity(0, 3);\n            }\n            case EntityDecoderState.NumericStart: {\n                (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n                return 0;\n            }\n            case EntityDecoderState.EntityStart: {\n                // Return 0 if we have no entity.\n                return 0;\n            }\n        }\n    };\n    return EntityDecoder;\n}());\nexports.EntityDecoder = EntityDecoder;\n/**\n * Creates a function that decodes entities in a string.\n *\n * @param decodeTree The decode tree.\n * @returns A function that decodes entities in a string.\n */\nfunction getDecoder(decodeTree) {\n    var ret = \"\";\n    var decoder = new EntityDecoder(decodeTree, function (str) { return (ret += (0, decode_codepoint_js_1.fromCodePoint)(str)); });\n    return function decodeWithTrie(str, decodeMode) {\n        var lastIndex = 0;\n        var offset = 0;\n        while ((offset = str.indexOf(\"&\", offset)) >= 0) {\n            ret += str.slice(lastIndex, offset);\n            decoder.startEntity(decodeMode);\n            var len = decoder.write(str, \n            // Skip the \"&\"\n            offset + 1);\n            if (len < 0) {\n                lastIndex = offset + decoder.end();\n                break;\n            }\n            lastIndex = offset + len;\n            // If `len` is 0, skip the current `&` and continue.\n            offset = len === 0 ? lastIndex + 1 : lastIndex;\n        }\n        var result = ret + str.slice(lastIndex);\n        // Make sure we don't keep a reference to the final string.\n        ret = \"\";\n        return result;\n    };\n}\n/**\n * Determines the branch of the current node that is taken given the current\n * character. This function is used to traverse the trie.\n *\n * @param decodeTree The trie.\n * @param current The current node.\n * @param nodeIdx The index right after the current node and its value.\n * @param char The current character.\n * @returns The index of the next node, or -1 if no branch is taken.\n */\nfunction determineBranch(decodeTree, current, nodeIdx, char) {\n    var branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n    var jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n    // Case 1: Single branch encoded in jump offset\n    if (branchCount === 0) {\n        return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1;\n    }\n    // Case 2: Multiple branches encoded in jump table\n    if (jumpOffset) {\n        var value = char - jumpOffset;\n        return value < 0 || value >= branchCount\n            ? -1\n            : decodeTree[nodeIdx + value] - 1;\n    }\n    // Case 3: Multiple branches encoded in dictionary\n    // Binary search for the character.\n    var lo = nodeIdx;\n    var hi = lo + branchCount - 1;\n    while (lo <= hi) {\n        var mid = (lo + hi) >>> 1;\n        var midVal = decodeTree[mid];\n        if (midVal < char) {\n            lo = mid + 1;\n        }\n        else if (midVal > char) {\n            hi = mid - 1;\n        }\n        else {\n            return decodeTree[mid + branchCount];\n        }\n    }\n    return -1;\n}\nexports.determineBranch = determineBranch;\nvar htmlDecoder = getDecoder(decode_data_html_js_1.default);\nvar xmlDecoder = getDecoder(decode_data_xml_js_1.default);\n/**\n * Decodes an HTML string.\n *\n * @param str The string to decode.\n * @param mode The decoding mode.\n * @returns The decoded string.\n */\nfunction decodeHTML(str, mode) {\n    if (mode === void 0) { mode = DecodingMode.Legacy; }\n    return htmlDecoder(str, mode);\n}\nexports.decodeHTML = decodeHTML;\n/**\n * Decodes an HTML string in an attribute.\n *\n * @param str The string to decode.\n * @returns The decoded string.\n */\nfunction decodeHTMLAttribute(str) {\n    return htmlDecoder(str, DecodingMode.Attribute);\n}\nexports.decodeHTMLAttribute = decodeHTMLAttribute;\n/**\n * Decodes an HTML string, requiring all entities to be terminated by a semicolon.\n *\n * @param str The string to decode.\n * @returns The decoded string.\n */\nfunction decodeHTMLStrict(str) {\n    return htmlDecoder(str, DecodingMode.Strict);\n}\nexports.decodeHTMLStrict = decodeHTMLStrict;\n/**\n * Decodes an XML string, requiring all entities to be terminated by a semicolon.\n *\n * @param str The string to decode.\n * @returns The decoded string.\n */\nfunction decodeXML(str) {\n    return xmlDecoder(str, DecodingMode.Strict);\n}\nexports.decodeXML = decodeXML;\n//# sourceMappingURL=decode.js.map","\"use strict\";\n// Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134\nvar _a;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.replaceCodePoint = exports.fromCodePoint = void 0;\nvar decodeMap = new Map([\n    [0, 65533],\n    // C1 Unicode control character reference replacements\n    [128, 8364],\n    [130, 8218],\n    [131, 402],\n    [132, 8222],\n    [133, 8230],\n    [134, 8224],\n    [135, 8225],\n    [136, 710],\n    [137, 8240],\n    [138, 352],\n    [139, 8249],\n    [140, 338],\n    [142, 381],\n    [145, 8216],\n    [146, 8217],\n    [147, 8220],\n    [148, 8221],\n    [149, 8226],\n    [150, 8211],\n    [151, 8212],\n    [152, 732],\n    [153, 8482],\n    [154, 353],\n    [155, 8250],\n    [156, 339],\n    [158, 382],\n    [159, 376],\n]);\n/**\n * Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point.\n */\nexports.fromCodePoint = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins\n(_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function (codePoint) {\n    var output = \"\";\n    if (codePoint > 0xffff) {\n        codePoint -= 0x10000;\n        output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800);\n        codePoint = 0xdc00 | (codePoint & 0x3ff);\n    }\n    output += String.fromCharCode(codePoint);\n    return output;\n};\n/**\n * Replace the given code point with a replacement character if it is a\n * surrogate or is outside the valid range. Otherwise return the code\n * point unchanged.\n */\nfunction replaceCodePoint(codePoint) {\n    var _a;\n    if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) {\n        return 0xfffd;\n    }\n    return (_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint;\n}\nexports.replaceCodePoint = replaceCodePoint;\n/**\n * Replace the code point if relevant, then convert it to a string.\n *\n * @deprecated Use `fromCodePoint(replaceCodePoint(codePoint))` instead.\n * @param codePoint The code point to decode.\n * @returns The decoded code point.\n */\nfunction decodeCodePoint(codePoint) {\n    return (0, exports.fromCodePoint)(replaceCodePoint(codePoint));\n}\nexports.default = decodeCodePoint;\n//# sourceMappingURL=decode_codepoint.js.map","\"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.encodeNonAsciiHTML = exports.encodeHTML = void 0;\nvar encode_html_js_1 = __importDefault(require(\"./generated/encode-html.js\"));\nvar escape_js_1 = require(\"./escape.js\");\nvar htmlReplacer = /[\\t\\n!-,./:-@[-`\\f{-}$\\x80-\\uFFFF]/g;\n/**\n * Encodes all characters in the input using HTML entities. This includes\n * characters that are valid ASCII characters in HTML documents, such as `#`.\n *\n * To get a more compact output, consider using the `encodeNonAsciiHTML`\n * function, which will only encode characters that are not valid in HTML\n * documents, as well as non-ASCII characters.\n *\n * If a character has no equivalent entity, a numeric hexadecimal reference\n * (eg. `&#xfc;`) will be used.\n */\nfunction encodeHTML(data) {\n    return encodeHTMLTrieRe(htmlReplacer, data);\n}\nexports.encodeHTML = encodeHTML;\n/**\n * Encodes all non-ASCII characters, as well as characters not valid in HTML\n * documents using HTML entities. This function will not encode characters that\n * are valid in HTML documents, such as `#`.\n *\n * If a character has no equivalent entity, a numeric hexadecimal reference\n * (eg. `&#xfc;`) will be used.\n */\nfunction encodeNonAsciiHTML(data) {\n    return encodeHTMLTrieRe(escape_js_1.xmlReplacer, data);\n}\nexports.encodeNonAsciiHTML = encodeNonAsciiHTML;\nfunction encodeHTMLTrieRe(regExp, str) {\n    var ret = \"\";\n    var lastIdx = 0;\n    var match;\n    while ((match = regExp.exec(str)) !== null) {\n        var i = match.index;\n        ret += str.substring(lastIdx, i);\n        var char = str.charCodeAt(i);\n        var next = encode_html_js_1.default.get(char);\n        if (typeof next === \"object\") {\n            // We are in a branch. Try to match the next char.\n            if (i + 1 < str.length) {\n                var nextChar = str.charCodeAt(i + 1);\n                var value = typeof next.n === \"number\"\n                    ? next.n === nextChar\n                        ? next.o\n                        : undefined\n                    : next.n.get(nextChar);\n                if (value !== undefined) {\n                    ret += value;\n                    lastIdx = regExp.lastIndex += 1;\n                    continue;\n                }\n            }\n            next = next.v;\n        }\n        // We might have a tree node without a value; skip and use a numeric entity.\n        if (next !== undefined) {\n            ret += next;\n            lastIdx = i + 1;\n        }\n        else {\n            var cp = (0, escape_js_1.getCodePoint)(str, i);\n            ret += \"&#x\".concat(cp.toString(16), \";\");\n            // Increase by 1 if we have a surrogate pair\n            lastIdx = regExp.lastIndex += Number(cp !== char);\n        }\n    }\n    return ret + str.substr(lastIdx);\n}\n//# sourceMappingURL=encode.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.escapeText = exports.escapeAttribute = exports.escapeUTF8 = exports.escape = exports.encodeXML = exports.getCodePoint = exports.xmlReplacer = void 0;\nexports.xmlReplacer = /[\"&'<>$\\x80-\\uFFFF]/g;\nvar xmlCodeMap = new Map([\n    [34, \"&quot;\"],\n    [38, \"&amp;\"],\n    [39, \"&apos;\"],\n    [60, \"&lt;\"],\n    [62, \"&gt;\"],\n]);\n// For compatibility with node < 4, we wrap `codePointAt`\nexports.getCodePoint = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\nString.prototype.codePointAt != null\n    ? function (str, index) { return str.codePointAt(index); }\n    : // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n        function (c, index) {\n            return (c.charCodeAt(index) & 0xfc00) === 0xd800\n                ? (c.charCodeAt(index) - 0xd800) * 0x400 +\n                    c.charCodeAt(index + 1) -\n                    0xdc00 +\n                    0x10000\n                : c.charCodeAt(index);\n        };\n/**\n * Encodes all non-ASCII characters, as well as characters not valid in XML\n * documents using XML entities.\n *\n * If a character has no equivalent entity, a\n * numeric hexadecimal reference (eg. `&#xfc;`) will be used.\n */\nfunction encodeXML(str) {\n    var ret = \"\";\n    var lastIdx = 0;\n    var match;\n    while ((match = exports.xmlReplacer.exec(str)) !== null) {\n        var i = match.index;\n        var char = str.charCodeAt(i);\n        var next = xmlCodeMap.get(char);\n        if (next !== undefined) {\n            ret += str.substring(lastIdx, i) + next;\n            lastIdx = i + 1;\n        }\n        else {\n            ret += \"\".concat(str.substring(lastIdx, i), \"&#x\").concat((0, exports.getCodePoint)(str, i).toString(16), \";\");\n            // Increase by 1 if we have a surrogate pair\n            lastIdx = exports.xmlReplacer.lastIndex += Number((char & 0xfc00) === 0xd800);\n        }\n    }\n    return ret + str.substr(lastIdx);\n}\nexports.encodeXML = encodeXML;\n/**\n * Encodes all non-ASCII characters, as well as characters not valid in XML\n * documents using numeric hexadecimal reference (eg. `&#xfc;`).\n *\n * Have a look at `escapeUTF8` if you want a more concise output at the expense\n * of reduced transportability.\n *\n * @param data String to escape.\n */\nexports.escape = encodeXML;\n/**\n * Creates a function that escapes all characters matched by the given regular\n * expression using the given map of characters to escape to their entities.\n *\n * @param regex Regular expression to match characters to escape.\n * @param map Map of characters to escape to their entities.\n *\n * @returns Function that escapes all characters matched by the given regular\n * expression using the given map of characters to escape to their entities.\n */\nfunction getEscaper(regex, map) {\n    return function escape(data) {\n        var match;\n        var lastIdx = 0;\n        var result = \"\";\n        while ((match = regex.exec(data))) {\n            if (lastIdx !== match.index) {\n                result += data.substring(lastIdx, match.index);\n            }\n            // We know that this character will be in the map.\n            result += map.get(match[0].charCodeAt(0));\n            // Every match will be of length 1\n            lastIdx = match.index + 1;\n        }\n        return result + data.substring(lastIdx);\n    };\n}\n/**\n * Encodes all characters not valid in XML documents using XML entities.\n *\n * Note that the output will be character-set dependent.\n *\n * @param data String to escape.\n */\nexports.escapeUTF8 = getEscaper(/[&<>'\"]/g, xmlCodeMap);\n/**\n * Encodes all characters that have to be escaped in HTML attributes,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n *\n * @param data String to escape.\n */\nexports.escapeAttribute = getEscaper(/[\"&\\u00A0]/g, new Map([\n    [34, \"&quot;\"],\n    [38, \"&amp;\"],\n    [160, \"&nbsp;\"],\n]));\n/**\n * Encodes all characters that have to be escaped in HTML text,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n *\n * @param data String to escape.\n */\nexports.escapeText = getEscaper(/[&<>\\u00A0]/g, new Map([\n    [38, \"&amp;\"],\n    [60, \"&lt;\"],\n    [62, \"&gt;\"],\n    [160, \"&nbsp;\"],\n]));\n//# sourceMappingURL=escape.js.map","\"use strict\";\n// Generated using scripts/write-decode-map.ts\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = new Uint16Array(\n// prettier-ignore\n\"\\u1d41<\\xd5\\u0131\\u028a\\u049d\\u057b\\u05d0\\u0675\\u06de\\u07a2\\u07d6\\u080f\\u0a4a\\u0a91\\u0da1\\u0e6d\\u0f09\\u0f26\\u10ca\\u1228\\u12e1\\u1415\\u149d\\u14c3\\u14df\\u1525\\0\\0\\0\\0\\0\\0\\u156b\\u16cd\\u198d\\u1c12\\u1ddd\\u1f7e\\u2060\\u21b0\\u228d\\u23c0\\u23fb\\u2442\\u2824\\u2912\\u2d08\\u2e48\\u2fce\\u3016\\u32ba\\u3639\\u37ac\\u38fe\\u3a28\\u3a71\\u3ae0\\u3b2e\\u0800EMabcfglmnoprstu\\\\bfms\\x7f\\x84\\x8b\\x90\\x95\\x98\\xa6\\xb3\\xb9\\xc8\\xcflig\\u803b\\xc6\\u40c6P\\u803b&\\u4026cute\\u803b\\xc1\\u40c1reve;\\u4102\\u0100iyx}rc\\u803b\\xc2\\u40c2;\\u4410r;\\uc000\\ud835\\udd04rave\\u803b\\xc0\\u40c0pha;\\u4391acr;\\u4100d;\\u6a53\\u0100gp\\x9d\\xa1on;\\u4104f;\\uc000\\ud835\\udd38plyFunction;\\u6061ing\\u803b\\xc5\\u40c5\\u0100cs\\xbe\\xc3r;\\uc000\\ud835\\udc9cign;\\u6254ilde\\u803b\\xc3\\u40c3ml\\u803b\\xc4\\u40c4\\u0400aceforsu\\xe5\\xfb\\xfe\\u0117\\u011c\\u0122\\u0127\\u012a\\u0100cr\\xea\\xf2kslash;\\u6216\\u0176\\xf6\\xf8;\\u6ae7ed;\\u6306y;\\u4411\\u0180crt\\u0105\\u010b\\u0114ause;\\u6235noullis;\\u612ca;\\u4392r;\\uc000\\ud835\\udd05pf;\\uc000\\ud835\\udd39eve;\\u42d8c\\xf2\\u0113mpeq;\\u624e\\u0700HOacdefhilorsu\\u014d\\u0151\\u0156\\u0180\\u019e\\u01a2\\u01b5\\u01b7\\u01ba\\u01dc\\u0215\\u0273\\u0278\\u027ecy;\\u4427PY\\u803b\\xa9\\u40a9\\u0180cpy\\u015d\\u0162\\u017aute;\\u4106\\u0100;i\\u0167\\u0168\\u62d2talDifferentialD;\\u6145leys;\\u612d\\u0200aeio\\u0189\\u018e\\u0194\\u0198ron;\\u410cdil\\u803b\\xc7\\u40c7rc;\\u4108nint;\\u6230ot;\\u410a\\u0100dn\\u01a7\\u01adilla;\\u40b8terDot;\\u40b7\\xf2\\u017fi;\\u43a7rcle\\u0200DMPT\\u01c7\\u01cb\\u01d1\\u01d6ot;\\u6299inus;\\u6296lus;\\u6295imes;\\u6297o\\u0100cs\\u01e2\\u01f8kwiseContourIntegral;\\u6232eCurly\\u0100DQ\\u0203\\u020foubleQuote;\\u601duote;\\u6019\\u0200lnpu\\u021e\\u0228\\u0247\\u0255on\\u0100;e\\u0225\\u0226\\u6237;\\u6a74\\u0180git\\u022f\\u0236\\u023aruent;\\u6261nt;\\u622fourIntegral;\\u622e\\u0100fr\\u024c\\u024e;\\u6102oduct;\\u6210nterClockwiseContourIntegral;\\u6233oss;\\u6a2fcr;\\uc000\\ud835\\udc9ep\\u0100;C\\u0284\\u0285\\u62d3ap;\\u624d\\u0580DJSZacefios\\u02a0\\u02ac\\u02b0\\u02b4\\u02b8\\u02cb\\u02d7\\u02e1\\u02e6\\u0333\\u048d\\u0100;o\\u0179\\u02a5trahd;\\u6911cy;\\u4402cy;\\u4405cy;\\u440f\\u0180grs\\u02bf\\u02c4\\u02c7ger;\\u6021r;\\u61a1hv;\\u6ae4\\u0100ay\\u02d0\\u02d5ron;\\u410e;\\u4414l\\u0100;t\\u02dd\\u02de\\u6207a;\\u4394r;\\uc000\\ud835\\udd07\\u0100af\\u02eb\\u0327\\u0100cm\\u02f0\\u0322ritical\\u0200ADGT\\u0300\\u0306\\u0316\\u031ccute;\\u40b4o\\u0174\\u030b\\u030d;\\u42d9bleAcute;\\u42ddrave;\\u4060ilde;\\u42dcond;\\u62c4ferentialD;\\u6146\\u0470\\u033d\\0\\0\\0\\u0342\\u0354\\0\\u0405f;\\uc000\\ud835\\udd3b\\u0180;DE\\u0348\\u0349\\u034d\\u40a8ot;\\u60dcqual;\\u6250ble\\u0300CDLRUV\\u0363\\u0372\\u0382\\u03cf\\u03e2\\u03f8ontourIntegra\\xec\\u0239o\\u0274\\u0379\\0\\0\\u037b\\xbb\\u0349nArrow;\\u61d3\\u0100eo\\u0387\\u03a4ft\\u0180ART\\u0390\\u0396\\u03a1rrow;\\u61d0ightArrow;\\u61d4e\\xe5\\u02cang\\u0100LR\\u03ab\\u03c4eft\\u0100AR\\u03b3\\u03b9rrow;\\u67f8ightArrow;\\u67faightArrow;\\u67f9ight\\u0100AT\\u03d8\\u03derrow;\\u61d2ee;\\u62a8p\\u0241\\u03e9\\0\\0\\u03efrrow;\\u61d1ownArrow;\\u61d5erticalBar;\\u6225n\\u0300ABLRTa\\u0412\\u042a\\u0430\\u045e\\u047f\\u037crrow\\u0180;BU\\u041d\\u041e\\u0422\\u6193ar;\\u6913pArrow;\\u61f5reve;\\u4311eft\\u02d2\\u043a\\0\\u0446\\0\\u0450ightVector;\\u6950eeVector;\\u695eector\\u0100;B\\u0459\\u045a\\u61bdar;\\u6956ight\\u01d4\\u0467\\0\\u0471eeVector;\\u695fector\\u0100;B\\u047a\\u047b\\u61c1ar;\\u6957ee\\u0100;A\\u0486\\u0487\\u62a4rrow;\\u61a7\\u0100ct\\u0492\\u0497r;\\uc000\\ud835\\udc9frok;\\u4110\\u0800NTacdfglmopqstux\\u04bd\\u04c0\\u04c4\\u04cb\\u04de\\u04e2\\u04e7\\u04ee\\u04f5\\u0521\\u052f\\u0536\\u0552\\u055d\\u0560\\u0565G;\\u414aH\\u803b\\xd0\\u40d0cute\\u803b\\xc9\\u40c9\\u0180aiy\\u04d2\\u04d7\\u04dcron;\\u411arc\\u803b\\xca\\u40ca;\\u442dot;\\u4116r;\\uc000\\ud835\\udd08rave\\u803b\\xc8\\u40c8ement;\\u6208\\u0100ap\\u04fa\\u04fecr;\\u4112ty\\u0253\\u0506\\0\\0\\u0512mallSquare;\\u65fberySmallSquare;\\u65ab\\u0100gp\\u0526\\u052aon;\\u4118f;\\uc000\\ud835\\udd3csilon;\\u4395u\\u0100ai\\u053c\\u0549l\\u0100;T\\u0542\\u0543\\u6a75ilde;\\u6242librium;\\u61cc\\u0100ci\\u0557\\u055ar;\\u6130m;\\u6a73a;\\u4397ml\\u803b\\xcb\\u40cb\\u0100ip\\u056a\\u056fsts;\\u6203onentialE;\\u6147\\u0280cfios\\u0585\\u0588\\u058d\\u05b2\\u05ccy;\\u4424r;\\uc000\\ud835\\udd09lled\\u0253\\u0597\\0\\0\\u05a3mallSquare;\\u65fcerySmallSquare;\\u65aa\\u0370\\u05ba\\0\\u05bf\\0\\0\\u05c4f;\\uc000\\ud835\\udd3dAll;\\u6200riertrf;\\u6131c\\xf2\\u05cb\\u0600JTabcdfgorst\\u05e8\\u05ec\\u05ef\\u05fa\\u0600\\u0612\\u0616\\u061b\\u061d\\u0623\\u066c\\u0672cy;\\u4403\\u803b>\\u403emma\\u0100;d\\u05f7\\u05f8\\u4393;\\u43dcreve;\\u411e\\u0180eiy\\u0607\\u060c\\u0610dil;\\u4122rc;\\u411c;\\u4413ot;\\u4120r;\\uc000\\ud835\\udd0a;\\u62d9pf;\\uc000\\ud835\\udd3eeater\\u0300EFGLST\\u0635\\u0644\\u064e\\u0656\\u065b\\u0666qual\\u0100;L\\u063e\\u063f\\u6265ess;\\u62dbullEqual;\\u6267reater;\\u6aa2ess;\\u6277lantEqual;\\u6a7eilde;\\u6273cr;\\uc000\\ud835\\udca2;\\u626b\\u0400Aacfiosu\\u0685\\u068b\\u0696\\u069b\\u069e\\u06aa\\u06be\\u06caRDcy;\\u442a\\u0100ct\\u0690\\u0694ek;\\u42c7;\\u405eirc;\\u4124r;\\u610clbertSpace;\\u610b\\u01f0\\u06af\\0\\u06b2f;\\u610dizontalLine;\\u6500\\u0100ct\\u06c3\\u06c5\\xf2\\u06a9rok;\\u4126mp\\u0144\\u06d0\\u06d8ownHum\\xf0\\u012fqual;\\u624f\\u0700EJOacdfgmnostu\\u06fa\\u06fe\\u0703\\u0707\\u070e\\u071a\\u071e\\u0721\\u0728\\u0744\\u0778\\u078b\\u078f\\u0795cy;\\u4415lig;\\u4132cy;\\u4401cute\\u803b\\xcd\\u40cd\\u0100iy\\u0713\\u0718rc\\u803b\\xce\\u40ce;\\u4418ot;\\u4130r;\\u6111rave\\u803b\\xcc\\u40cc\\u0180;ap\\u0720\\u072f\\u073f\\u0100cg\\u0734\\u0737r;\\u412ainaryI;\\u6148lie\\xf3\\u03dd\\u01f4\\u0749\\0\\u0762\\u0100;e\\u074d\\u074e\\u622c\\u0100gr\\u0753\\u0758ral;\\u622bsection;\\u62c2isible\\u0100CT\\u076c\\u0772omma;\\u6063imes;\\u6062\\u0180gpt\\u077f\\u0783\\u0788on;\\u412ef;\\uc000\\ud835\\udd40a;\\u4399cr;\\u6110ilde;\\u4128\\u01eb\\u079a\\0\\u079ecy;\\u4406l\\u803b\\xcf\\u40cf\\u0280cfosu\\u07ac\\u07b7\\u07bc\\u07c2\\u07d0\\u0100iy\\u07b1\\u07b5rc;\\u4134;\\u4419r;\\uc000\\ud835\\udd0dpf;\\uc000\\ud835\\udd41\\u01e3\\u07c7\\0\\u07ccr;\\uc000\\ud835\\udca5rcy;\\u4408kcy;\\u4404\\u0380HJacfos\\u07e4\\u07e8\\u07ec\\u07f1\\u07fd\\u0802\\u0808cy;\\u4425cy;\\u440cppa;\\u439a\\u0100ey\\u07f6\\u07fbdil;\\u4136;\\u441ar;\\uc000\\ud835\\udd0epf;\\uc000\\ud835\\udd42cr;\\uc000\\ud835\\udca6\\u0580JTaceflmost\\u0825\\u0829\\u082c\\u0850\\u0863\\u09b3\\u09b8\\u09c7\\u09cd\\u0a37\\u0a47cy;\\u4409\\u803b<\\u403c\\u0280cmnpr\\u0837\\u083c\\u0841\\u0844\\u084dute;\\u4139bda;\\u439bg;\\u67ealacetrf;\\u6112r;\\u619e\\u0180aey\\u0857\\u085c\\u0861ron;\\u413ddil;\\u413b;\\u441b\\u0100fs\\u0868\\u0970t\\u0500ACDFRTUVar\\u087e\\u08a9\\u08b1\\u08e0\\u08e6\\u08fc\\u092f\\u095b\\u0390\\u096a\\u0100nr\\u0883\\u088fgleBracket;\\u67e8row\\u0180;BR\\u0899\\u089a\\u089e\\u6190ar;\\u61e4ightArrow;\\u61c6eiling;\\u6308o\\u01f5\\u08b7\\0\\u08c3bleBracket;\\u67e6n\\u01d4\\u08c8\\0\\u08d2eeVector;\\u6961ector\\u0100;B\\u08db\\u08dc\\u61c3ar;\\u6959loor;\\u630aight\\u0100AV\\u08ef\\u08f5rrow;\\u6194ector;\\u694e\\u0100er\\u0901\\u0917e\\u0180;AV\\u0909\\u090a\\u0910\\u62a3rrow;\\u61a4ector;\\u695aiangle\\u0180;BE\\u0924\\u0925\\u0929\\u62b2ar;\\u69cfqual;\\u62b4p\\u0180DTV\\u0937\\u0942\\u094cownVector;\\u6951eeVector;\\u6960ector\\u0100;B\\u0956\\u0957\\u61bfar;\\u6958ector\\u0100;B\\u0965\\u0966\\u61bcar;\\u6952ight\\xe1\\u039cs\\u0300EFGLST\\u097e\\u098b\\u0995\\u099d\\u09a2\\u09adqualGreater;\\u62daullEqual;\\u6266reater;\\u6276ess;\\u6aa1lantEqual;\\u6a7dilde;\\u6272r;\\uc000\\ud835\\udd0f\\u0100;e\\u09bd\\u09be\\u62d8ftarrow;\\u61daidot;\\u413f\\u0180npw\\u09d4\\u0a16\\u0a1bg\\u0200LRlr\\u09de\\u09f7\\u0a02\\u0a10eft\\u0100AR\\u09e6\\u09ecrrow;\\u67f5ightArrow;\\u67f7ightArrow;\\u67f6eft\\u0100ar\\u03b3\\u0a0aight\\xe1\\u03bfight\\xe1\\u03caf;\\uc000\\ud835\\udd43er\\u0100LR\\u0a22\\u0a2ceftArrow;\\u6199ightArrow;\\u6198\\u0180cht\\u0a3e\\u0a40\\u0a42\\xf2\\u084c;\\u61b0rok;\\u4141;\\u626a\\u0400acefiosu\\u0a5a\\u0a5d\\u0a60\\u0a77\\u0a7c\\u0a85\\u0a8b\\u0a8ep;\\u6905y;\\u441c\\u0100dl\\u0a65\\u0a6fiumSpace;\\u605flintrf;\\u6133r;\\uc000\\ud835\\udd10nusPlus;\\u6213pf;\\uc000\\ud835\\udd44c\\xf2\\u0a76;\\u439c\\u0480Jacefostu\\u0aa3\\u0aa7\\u0aad\\u0ac0\\u0b14\\u0b19\\u0d91\\u0d97\\u0d9ecy;\\u440acute;\\u4143\\u0180aey\\u0ab4\\u0ab9\\u0aberon;\\u4147dil;\\u4145;\\u441d\\u0180gsw\\u0ac7\\u0af0\\u0b0eative\\u0180MTV\\u0ad3\\u0adf\\u0ae8ediumSpace;\\u600bhi\\u0100cn\\u0ae6\\u0ad8\\xeb\\u0ad9eryThi\\xee\\u0ad9ted\\u0100GL\\u0af8\\u0b06reaterGreate\\xf2\\u0673essLes\\xf3\\u0a48Line;\\u400ar;\\uc000\\ud835\\udd11\\u0200Bnpt\\u0b22\\u0b28\\u0b37\\u0b3areak;\\u6060BreakingSpace;\\u40a0f;\\u6115\\u0680;CDEGHLNPRSTV\\u0b55\\u0b56\\u0b6a\\u0b7c\\u0ba1\\u0beb\\u0c04\\u0c5e\\u0c84\\u0ca6\\u0cd8\\u0d61\\u0d85\\u6aec\\u0100ou\\u0b5b\\u0b64ngruent;\\u6262pCap;\\u626doubleVerticalBar;\\u6226\\u0180lqx\\u0b83\\u0b8a\\u0b9bement;\\u6209ual\\u0100;T\\u0b92\\u0b93\\u6260ilde;\\uc000\\u2242\\u0338ists;\\u6204reater\\u0380;EFGLST\\u0bb6\\u0bb7\\u0bbd\\u0bc9\\u0bd3\\u0bd8\\u0be5\\u626fqual;\\u6271ullEqual;\\uc000\\u2267\\u0338reater;\\uc000\\u226b\\u0338ess;\\u6279lantEqual;\\uc000\\u2a7e\\u0338ilde;\\u6275ump\\u0144\\u0bf2\\u0bfdownHump;\\uc000\\u224e\\u0338qual;\\uc000\\u224f\\u0338e\\u0100fs\\u0c0a\\u0c27tTriangle\\u0180;BE\\u0c1a\\u0c1b\\u0c21\\u62eaar;\\uc000\\u29cf\\u0338qual;\\u62ecs\\u0300;EGLST\\u0c35\\u0c36\\u0c3c\\u0c44\\u0c4b\\u0c58\\u626equal;\\u6270reater;\\u6278ess;\\uc000\\u226a\\u0338lantEqual;\\uc000\\u2a7d\\u0338ilde;\\u6274ested\\u0100GL\\u0c68\\u0c79reaterGreater;\\uc000\\u2aa2\\u0338essLess;\\uc000\\u2aa1\\u0338recedes\\u0180;ES\\u0c92\\u0c93\\u0c9b\\u6280qual;\\uc000\\u2aaf\\u0338lantEqual;\\u62e0\\u0100ei\\u0cab\\u0cb9verseElement;\\u620cghtTriangle\\u0180;BE\\u0ccb\\u0ccc\\u0cd2\\u62ebar;\\uc000\\u29d0\\u0338qual;\\u62ed\\u0100qu\\u0cdd\\u0d0cuareSu\\u0100bp\\u0ce8\\u0cf9set\\u0100;E\\u0cf0\\u0cf3\\uc000\\u228f\\u0338qual;\\u62e2erset\\u0100;E\\u0d03\\u0d06\\uc000\\u2290\\u0338qual;\\u62e3\\u0180bcp\\u0d13\\u0d24\\u0d4eset\\u0100;E\\u0d1b\\u0d1e\\uc000\\u2282\\u20d2qual;\\u6288ceeds\\u0200;EST\\u0d32\\u0d33\\u0d3b\\u0d46\\u6281qual;\\uc000\\u2ab0\\u0338lantEqual;\\u62e1ilde;\\uc000\\u227f\\u0338erset\\u0100;E\\u0d58\\u0d5b\\uc000\\u2283\\u20d2qual;\\u6289ilde\\u0200;EFT\\u0d6e\\u0d6f\\u0d75\\u0d7f\\u6241qual;\\u6244ullEqual;\\u6247ilde;\\u6249erticalBar;\\u6224cr;\\uc000\\ud835\\udca9ilde\\u803b\\xd1\\u40d1;\\u439d\\u0700Eacdfgmoprstuv\\u0dbd\\u0dc2\\u0dc9\\u0dd5\\u0ddb\\u0de0\\u0de7\\u0dfc\\u0e02\\u0e20\\u0e22\\u0e32\\u0e3f\\u0e44lig;\\u4152cute\\u803b\\xd3\\u40d3\\u0100iy\\u0dce\\u0dd3rc\\u803b\\xd4\\u40d4;\\u441eblac;\\u4150r;\\uc000\\ud835\\udd12rave\\u803b\\xd2\\u40d2\\u0180aei\\u0dee\\u0df2\\u0df6cr;\\u414cga;\\u43a9cron;\\u439fpf;\\uc000\\ud835\\udd46enCurly\\u0100DQ\\u0e0e\\u0e1aoubleQuote;\\u601cuote;\\u6018;\\u6a54\\u0100cl\\u0e27\\u0e2cr;\\uc000\\ud835\\udcaaash\\u803b\\xd8\\u40d8i\\u016c\\u0e37\\u0e3cde\\u803b\\xd5\\u40d5es;\\u6a37ml\\u803b\\xd6\\u40d6er\\u0100BP\\u0e4b\\u0e60\\u0100ar\\u0e50\\u0e53r;\\u603eac\\u0100ek\\u0e5a\\u0e5c;\\u63deet;\\u63b4arenthesis;\\u63dc\\u0480acfhilors\\u0e7f\\u0e87\\u0e8a\\u0e8f\\u0e92\\u0e94\\u0e9d\\u0eb0\\u0efcrtialD;\\u6202y;\\u441fr;\\uc000\\ud835\\udd13i;\\u43a6;\\u43a0usMinus;\\u40b1\\u0100ip\\u0ea2\\u0eadncareplan\\xe5\\u069df;\\u6119\\u0200;eio\\u0eb9\\u0eba\\u0ee0\\u0ee4\\u6abbcedes\\u0200;EST\\u0ec8\\u0ec9\\u0ecf\\u0eda\\u627aqual;\\u6aaflantEqual;\\u627cilde;\\u627eme;\\u6033\\u0100dp\\u0ee9\\u0eeeuct;\\u620fortion\\u0100;a\\u0225\\u0ef9l;\\u621d\\u0100ci\\u0f01\\u0f06r;\\uc000\\ud835\\udcab;\\u43a8\\u0200Ufos\\u0f11\\u0f16\\u0f1b\\u0f1fOT\\u803b\\\"\\u4022r;\\uc000\\ud835\\udd14pf;\\u611acr;\\uc000\\ud835\\udcac\\u0600BEacefhiorsu\\u0f3e\\u0f43\\u0f47\\u0f60\\u0f73\\u0fa7\\u0faa\\u0fad\\u1096\\u10a9\\u10b4\\u10bearr;\\u6910G\\u803b\\xae\\u40ae\\u0180cnr\\u0f4e\\u0f53\\u0f56ute;\\u4154g;\\u67ebr\\u0100;t\\u0f5c\\u0f5d\\u61a0l;\\u6916\\u0180aey\\u0f67\\u0f6c\\u0f71ron;\\u4158dil;\\u4156;\\u4420\\u0100;v\\u0f78\\u0f79\\u611cerse\\u0100EU\\u0f82\\u0f99\\u0100lq\\u0f87\\u0f8eement;\\u620builibrium;\\u61cbpEquilibrium;\\u696fr\\xbb\\u0f79o;\\u43a1ght\\u0400ACDFTUVa\\u0fc1\\u0feb\\u0ff3\\u1022\\u1028\\u105b\\u1087\\u03d8\\u0100nr\\u0fc6\\u0fd2gleBracket;\\u67e9row\\u0180;BL\\u0fdc\\u0fdd\\u0fe1\\u6192ar;\\u61e5eftArrow;\\u61c4eiling;\\u6309o\\u01f5\\u0ff9\\0\\u1005bleBracket;\\u67e7n\\u01d4\\u100a\\0\\u1014eeVector;\\u695dector\\u0100;B\\u101d\\u101e\\u61c2ar;\\u6955loor;\\u630b\\u0100er\\u102d\\u1043e\\u0180;AV\\u1035\\u1036\\u103c\\u62a2rrow;\\u61a6ector;\\u695biangle\\u0180;BE\\u1050\\u1051\\u1055\\u62b3ar;\\u69d0qual;\\u62b5p\\u0180DTV\\u1063\\u106e\\u1078ownVector;\\u694feeVector;\\u695cector\\u0100;B\\u1082\\u1083\\u61bear;\\u6954ector\\u0100;B\\u1091\\u1092\\u61c0ar;\\u6953\\u0100pu\\u109b\\u109ef;\\u611dndImplies;\\u6970ightarrow;\\u61db\\u0100ch\\u10b9\\u10bcr;\\u611b;\\u61b1leDelayed;\\u69f4\\u0680HOacfhimoqstu\\u10e4\\u10f1\\u10f7\\u10fd\\u1119\\u111e\\u1151\\u1156\\u1161\\u1167\\u11b5\\u11bb\\u11bf\\u0100Cc\\u10e9\\u10eeHcy;\\u4429y;\\u4428FTcy;\\u442ccute;\\u415a\\u0280;aeiy\\u1108\\u1109\\u110e\\u1113\\u1117\\u6abcron;\\u4160dil;\\u415erc;\\u415c;\\u4421r;\\uc000\\ud835\\udd16ort\\u0200DLRU\\u112a\\u1134\\u113e\\u1149ownArrow\\xbb\\u041eeftArrow\\xbb\\u089aightArrow\\xbb\\u0fddpArrow;\\u6191gma;\\u43a3allCircle;\\u6218pf;\\uc000\\ud835\\udd4a\\u0272\\u116d\\0\\0\\u1170t;\\u621aare\\u0200;ISU\\u117b\\u117c\\u1189\\u11af\\u65a1ntersection;\\u6293u\\u0100bp\\u118f\\u119eset\\u0100;E\\u1197\\u1198\\u628fqual;\\u6291erset\\u0100;E\\u11a8\\u11a9\\u6290qual;\\u6292nion;\\u6294cr;\\uc000\\ud835\\udcaear;\\u62c6\\u0200bcmp\\u11c8\\u11db\\u1209\\u120b\\u0100;s\\u11cd\\u11ce\\u62d0et\\u0100;E\\u11cd\\u11d5qual;\\u6286\\u0100ch\\u11e0\\u1205eeds\\u0200;EST\\u11ed\\u11ee\\u11f4\\u11ff\\u627bqual;\\u6ab0lantEqual;\\u627dilde;\\u627fTh\\xe1\\u0f8c;\\u6211\\u0180;es\\u1212\\u1213\\u1223\\u62d1rset\\u0100;E\\u121c\\u121d\\u6283qual;\\u6287et\\xbb\\u1213\\u0580HRSacfhiors\\u123e\\u1244\\u1249\\u1255\\u125e\\u1271\\u1276\\u129f\\u12c2\\u12c8\\u12d1ORN\\u803b\\xde\\u40deADE;\\u6122\\u0100Hc\\u124e\\u1252cy;\\u440by;\\u4426\\u0100bu\\u125a\\u125c;\\u4009;\\u43a4\\u0180aey\\u1265\\u126a\\u126fron;\\u4164dil;\\u4162;\\u4422r;\\uc000\\ud835\\udd17\\u0100ei\\u127b\\u1289\\u01f2\\u1280\\0\\u1287efore;\\u6234a;\\u4398\\u0100cn\\u128e\\u1298kSpace;\\uc000\\u205f\\u200aSpace;\\u6009lde\\u0200;EFT\\u12ab\\u12ac\\u12b2\\u12bc\\u623cqual;\\u6243ullEqual;\\u6245ilde;\\u6248pf;\\uc000\\ud835\\udd4bipleDot;\\u60db\\u0100ct\\u12d6\\u12dbr;\\uc000\\ud835\\udcafrok;\\u4166\\u0ae1\\u12f7\\u130e\\u131a\\u1326\\0\\u132c\\u1331\\0\\0\\0\\0\\0\\u1338\\u133d\\u1377\\u1385\\0\\u13ff\\u1404\\u140a\\u1410\\u0100cr\\u12fb\\u1301ute\\u803b\\xda\\u40dar\\u0100;o\\u1307\\u1308\\u619fcir;\\u6949r\\u01e3\\u1313\\0\\u1316y;\\u440eve;\\u416c\\u0100iy\\u131e\\u1323rc\\u803b\\xdb\\u40db;\\u4423blac;\\u4170r;\\uc000\\ud835\\udd18rave\\u803b\\xd9\\u40d9acr;\\u416a\\u0100di\\u1341\\u1369er\\u0100BP\\u1348\\u135d\\u0100ar\\u134d\\u1350r;\\u405fac\\u0100ek\\u1357\\u1359;\\u63dfet;\\u63b5arenthesis;\\u63ddon\\u0100;P\\u1370\\u1371\\u62c3lus;\\u628e\\u0100gp\\u137b\\u137fon;\\u4172f;\\uc000\\ud835\\udd4c\\u0400ADETadps\\u1395\\u13ae\\u13b8\\u13c4\\u03e8\\u13d2\\u13d7\\u13f3rrow\\u0180;BD\\u1150\\u13a0\\u13a4ar;\\u6912ownArrow;\\u61c5ownArrow;\\u6195quilibrium;\\u696eee\\u0100;A\\u13cb\\u13cc\\u62a5rrow;\\u61a5own\\xe1\\u03f3er\\u0100LR\\u13de\\u13e8eftArrow;\\u6196ightArrow;\\u6197i\\u0100;l\\u13f9\\u13fa\\u43d2on;\\u43a5ing;\\u416ecr;\\uc000\\ud835\\udcb0ilde;\\u4168ml\\u803b\\xdc\\u40dc\\u0480Dbcdefosv\\u1427\\u142c\\u1430\\u1433\\u143e\\u1485\\u148a\\u1490\\u1496ash;\\u62abar;\\u6aeby;\\u4412ash\\u0100;l\\u143b\\u143c\\u62a9;\\u6ae6\\u0100er\\u1443\\u1445;\\u62c1\\u0180bty\\u144c\\u1450\\u147aar;\\u6016\\u0100;i\\u144f\\u1455cal\\u0200BLST\\u1461\\u1465\\u146a\\u1474ar;\\u6223ine;\\u407ceparator;\\u6758ilde;\\u6240ThinSpace;\\u600ar;\\uc000\\ud835\\udd19pf;\\uc000\\ud835\\udd4dcr;\\uc000\\ud835\\udcb1dash;\\u62aa\\u0280cefos\\u14a7\\u14ac\\u14b1\\u14b6\\u14bcirc;\\u4174dge;\\u62c0r;\\uc000\\ud835\\udd1apf;\\uc000\\ud835\\udd4ecr;\\uc000\\ud835\\udcb2\\u0200fios\\u14cb\\u14d0\\u14d2\\u14d8r;\\uc000\\ud835\\udd1b;\\u439epf;\\uc000\\ud835\\udd4fcr;\\uc000\\ud835\\udcb3\\u0480AIUacfosu\\u14f1\\u14f5\\u14f9\\u14fd\\u1504\\u150f\\u1514\\u151a\\u1520cy;\\u442fcy;\\u4407cy;\\u442ecute\\u803b\\xdd\\u40dd\\u0100iy\\u1509\\u150drc;\\u4176;\\u442br;\\uc000\\ud835\\udd1cpf;\\uc000\\ud835\\udd50cr;\\uc000\\ud835\\udcb4ml;\\u4178\\u0400Hacdefos\\u1535\\u1539\\u153f\\u154b\\u154f\\u155d\\u1560\\u1564cy;\\u4416cute;\\u4179\\u0100ay\\u1544\\u1549ron;\\u417d;\\u4417ot;\\u417b\\u01f2\\u1554\\0\\u155boWidt\\xe8\\u0ad9a;\\u4396r;\\u6128pf;\\u6124cr;\\uc000\\ud835\\udcb5\\u0be1\\u1583\\u158a\\u1590\\0\\u15b0\\u15b6\\u15bf\\0\\0\\0\\0\\u15c6\\u15db\\u15eb\\u165f\\u166d\\0\\u1695\\u169b\\u16b2\\u16b9\\0\\u16becute\\u803b\\xe1\\u40e1reve;\\u4103\\u0300;Ediuy\\u159c\\u159d\\u15a1\\u15a3\\u15a8\\u15ad\\u623e;\\uc000\\u223e\\u0333;\\u623frc\\u803b\\xe2\\u40e2te\\u80bb\\xb4\\u0306;\\u4430lig\\u803b\\xe6\\u40e6\\u0100;r\\xb2\\u15ba;\\uc000\\ud835\\udd1erave\\u803b\\xe0\\u40e0\\u0100ep\\u15ca\\u15d6\\u0100fp\\u15cf\\u15d4sym;\\u6135\\xe8\\u15d3ha;\\u43b1\\u0100ap\\u15dfc\\u0100cl\\u15e4\\u15e7r;\\u4101g;\\u6a3f\\u0264\\u15f0\\0\\0\\u160a\\u0280;adsv\\u15fa\\u15fb\\u15ff\\u1601\\u1607\\u6227nd;\\u6a55;\\u6a5clope;\\u6a58;\\u6a5a\\u0380;elmrsz\\u1618\\u1619\\u161b\\u161e\\u163f\\u164f\\u1659\\u6220;\\u69a4e\\xbb\\u1619sd\\u0100;a\\u1625\\u1626\\u6221\\u0461\\u1630\\u1632\\u1634\\u1636\\u1638\\u163a\\u163c\\u163e;\\u69a8;\\u69a9;\\u69aa;\\u69ab;\\u69ac;\\u69ad;\\u69ae;\\u69aft\\u0100;v\\u1645\\u1646\\u621fb\\u0100;d\\u164c\\u164d\\u62be;\\u699d\\u0100pt\\u1654\\u1657h;\\u6222\\xbb\\xb9arr;\\u637c\\u0100gp\\u1663\\u1667on;\\u4105f;\\uc000\\ud835\\udd52\\u0380;Eaeiop\\u12c1\\u167b\\u167d\\u1682\\u1684\\u1687\\u168a;\\u6a70cir;\\u6a6f;\\u624ad;\\u624bs;\\u4027rox\\u0100;e\\u12c1\\u1692\\xf1\\u1683ing\\u803b\\xe5\\u40e5\\u0180cty\\u16a1\\u16a6\\u16a8r;\\uc000\\ud835\\udcb6;\\u402amp\\u0100;e\\u12c1\\u16af\\xf1\\u0288ilde\\u803b\\xe3\\u40e3ml\\u803b\\xe4\\u40e4\\u0100ci\\u16c2\\u16c8onin\\xf4\\u0272nt;\\u6a11\\u0800Nabcdefiklnoprsu\\u16ed\\u16f1\\u1730\\u173c\\u1743\\u1748\\u1778\\u177d\\u17e0\\u17e6\\u1839\\u1850\\u170d\\u193d\\u1948\\u1970ot;\\u6aed\\u0100cr\\u16f6\\u171ek\\u0200ceps\\u1700\\u1705\\u170d\\u1713ong;\\u624cpsilon;\\u43f6rime;\\u6035im\\u0100;e\\u171a\\u171b\\u623dq;\\u62cd\\u0176\\u1722\\u1726ee;\\u62bded\\u0100;g\\u172c\\u172d\\u6305e\\xbb\\u172drk\\u0100;t\\u135c\\u1737brk;\\u63b6\\u0100oy\\u1701\\u1741;\\u4431quo;\\u601e\\u0280cmprt\\u1753\\u175b\\u1761\\u1764\\u1768aus\\u0100;e\\u010a\\u0109ptyv;\\u69b0s\\xe9\\u170cno\\xf5\\u0113\\u0180ahw\\u176f\\u1771\\u1773;\\u43b2;\\u6136een;\\u626cr;\\uc000\\ud835\\udd1fg\\u0380costuvw\\u178d\\u179d\\u17b3\\u17c1\\u17d5\\u17db\\u17de\\u0180aiu\\u1794\\u1796\\u179a\\xf0\\u0760rc;\\u65efp\\xbb\\u1371\\u0180dpt\\u17a4\\u17a8\\u17adot;\\u6a00lus;\\u6a01imes;\\u6a02\\u0271\\u17b9\\0\\0\\u17becup;\\u6a06ar;\\u6605riangle\\u0100du\\u17cd\\u17d2own;\\u65bdp;\\u65b3plus;\\u6a04e\\xe5\\u1444\\xe5\\u14adarow;\\u690d\\u0180ako\\u17ed\\u1826\\u1835\\u0100cn\\u17f2\\u1823k\\u0180lst\\u17fa\\u05ab\\u1802ozenge;\\u69ebriangle\\u0200;dlr\\u1812\\u1813\\u1818\\u181d\\u65b4own;\\u65beeft;\\u65c2ight;\\u65b8k;\\u6423\\u01b1\\u182b\\0\\u1833\\u01b2\\u182f\\0\\u1831;\\u6592;\\u65914;\\u6593ck;\\u6588\\u0100eo\\u183e\\u184d\\u0100;q\\u1843\\u1846\\uc000=\\u20e5uiv;\\uc000\\u2261\\u20e5t;\\u6310\\u0200ptwx\\u1859\\u185e\\u1867\\u186cf;\\uc000\\ud835\\udd53\\u0100;t\\u13cb\\u1863om\\xbb\\u13cctie;\\u62c8\\u0600DHUVbdhmptuv\\u1885\\u1896\\u18aa\\u18bb\\u18d7\\u18db\\u18ec\\u18ff\\u1905\\u190a\\u1910\\u1921\\u0200LRlr\\u188e\\u1890\\u1892\\u1894;\\u6557;\\u6554;\\u6556;\\u6553\\u0280;DUdu\\u18a1\\u18a2\\u18a4\\u18a6\\u18a8\\u6550;\\u6566;\\u6569;\\u6564;\\u6567\\u0200LRlr\\u18b3\\u18b5\\u18b7\\u18b9;\\u655d;\\u655a;\\u655c;\\u6559\\u0380;HLRhlr\\u18ca\\u18cb\\u18cd\\u18cf\\u18d1\\u18d3\\u18d5\\u6551;\\u656c;\\u6563;\\u6560;\\u656b;\\u6562;\\u655fox;\\u69c9\\u0200LRlr\\u18e4\\u18e6\\u18e8\\u18ea;\\u6555;\\u6552;\\u6510;\\u650c\\u0280;DUdu\\u06bd\\u18f7\\u18f9\\u18fb\\u18fd;\\u6565;\\u6568;\\u652c;\\u6534inus;\\u629flus;\\u629eimes;\\u62a0\\u0200LRlr\\u1919\\u191b\\u191d\\u191f;\\u655b;\\u6558;\\u6518;\\u6514\\u0380;HLRhlr\\u1930\\u1931\\u1933\\u1935\\u1937\\u1939\\u193b\\u6502;\\u656a;\\u6561;\\u655e;\\u653c;\\u6524;\\u651c\\u0100ev\\u0123\\u1942bar\\u803b\\xa6\\u40a6\\u0200ceio\\u1951\\u1956\\u195a\\u1960r;\\uc000\\ud835\\udcb7mi;\\u604fm\\u0100;e\\u171a\\u171cl\\u0180;bh\\u1968\\u1969\\u196b\\u405c;\\u69c5sub;\\u67c8\\u016c\\u1974\\u197el\\u0100;e\\u1979\\u197a\\u6022t\\xbb\\u197ap\\u0180;Ee\\u012f\\u1985\\u1987;\\u6aae\\u0100;q\\u06dc\\u06db\\u0ce1\\u19a7\\0\\u19e8\\u1a11\\u1a15\\u1a32\\0\\u1a37\\u1a50\\0\\0\\u1ab4\\0\\0\\u1ac1\\0\\0\\u1b21\\u1b2e\\u1b4d\\u1b52\\0\\u1bfd\\0\\u1c0c\\u0180cpr\\u19ad\\u19b2\\u19ddute;\\u4107\\u0300;abcds\\u19bf\\u19c0\\u19c4\\u19ca\\u19d5\\u19d9\\u6229nd;\\u6a44rcup;\\u6a49\\u0100au\\u19cf\\u19d2p;\\u6a4bp;\\u6a47ot;\\u6a40;\\uc000\\u2229\\ufe00\\u0100eo\\u19e2\\u19e5t;\\u6041\\xee\\u0693\\u0200aeiu\\u19f0\\u19fb\\u1a01\\u1a05\\u01f0\\u19f5\\0\\u19f8s;\\u6a4don;\\u410ddil\\u803b\\xe7\\u40e7rc;\\u4109ps\\u0100;s\\u1a0c\\u1a0d\\u6a4cm;\\u6a50ot;\\u410b\\u0180dmn\\u1a1b\\u1a20\\u1a26il\\u80bb\\xb8\\u01adptyv;\\u69b2t\\u8100\\xa2;e\\u1a2d\\u1a2e\\u40a2r\\xe4\\u01b2r;\\uc000\\ud835\\udd20\\u0180cei\\u1a3d\\u1a40\\u1a4dy;\\u4447ck\\u0100;m\\u1a47\\u1a48\\u6713ark\\xbb\\u1a48;\\u43c7r\\u0380;Ecefms\\u1a5f\\u1a60\\u1a62\\u1a6b\\u1aa4\\u1aaa\\u1aae\\u65cb;\\u69c3\\u0180;el\\u1a69\\u1a6a\\u1a6d\\u42c6q;\\u6257e\\u0261\\u1a74\\0\\0\\u1a88rrow\\u0100lr\\u1a7c\\u1a81eft;\\u61baight;\\u61bb\\u0280RSacd\\u1a92\\u1a94\\u1a96\\u1a9a\\u1a9f\\xbb\\u0f47;\\u64c8st;\\u629birc;\\u629aash;\\u629dnint;\\u6a10id;\\u6aefcir;\\u69c2ubs\\u0100;u\\u1abb\\u1abc\\u6663it\\xbb\\u1abc\\u02ec\\u1ac7\\u1ad4\\u1afa\\0\\u1b0aon\\u0100;e\\u1acd\\u1ace\\u403a\\u0100;q\\xc7\\xc6\\u026d\\u1ad9\\0\\0\\u1ae2a\\u0100;t\\u1ade\\u1adf\\u402c;\\u4040\\u0180;fl\\u1ae8\\u1ae9\\u1aeb\\u6201\\xee\\u1160e\\u0100mx\\u1af1\\u1af6ent\\xbb\\u1ae9e\\xf3\\u024d\\u01e7\\u1afe\\0\\u1b07\\u0100;d\\u12bb\\u1b02ot;\\u6a6dn\\xf4\\u0246\\u0180fry\\u1b10\\u1b14\\u1b17;\\uc000\\ud835\\udd54o\\xe4\\u0254\\u8100\\xa9;s\\u0155\\u1b1dr;\\u6117\\u0100ao\\u1b25\\u1b29rr;\\u61b5ss;\\u6717\\u0100cu\\u1b32\\u1b37r;\\uc000\\ud835\\udcb8\\u0100bp\\u1b3c\\u1b44\\u0100;e\\u1b41\\u1b42\\u6acf;\\u6ad1\\u0100;e\\u1b49\\u1b4a\\u6ad0;\\u6ad2dot;\\u62ef\\u0380delprvw\\u1b60\\u1b6c\\u1b77\\u1b82\\u1bac\\u1bd4\\u1bf9arr\\u0100lr\\u1b68\\u1b6a;\\u6938;\\u6935\\u0270\\u1b72\\0\\0\\u1b75r;\\u62dec;\\u62dfarr\\u0100;p\\u1b7f\\u1b80\\u61b6;\\u693d\\u0300;bcdos\\u1b8f\\u1b90\\u1b96\\u1ba1\\u1ba5\\u1ba8\\u622arcap;\\u6a48\\u0100au\\u1b9b\\u1b9ep;\\u6a46p;\\u6a4aot;\\u628dr;\\u6a45;\\uc000\\u222a\\ufe00\\u0200alrv\\u1bb5\\u1bbf\\u1bde\\u1be3rr\\u0100;m\\u1bbc\\u1bbd\\u61b7;\\u693cy\\u0180evw\\u1bc7\\u1bd4\\u1bd8q\\u0270\\u1bce\\0\\0\\u1bd2re\\xe3\\u1b73u\\xe3\\u1b75ee;\\u62ceedge;\\u62cfen\\u803b\\xa4\\u40a4earrow\\u0100lr\\u1bee\\u1bf3eft\\xbb\\u1b80ight\\xbb\\u1bbde\\xe4\\u1bdd\\u0100ci\\u1c01\\u1c07onin\\xf4\\u01f7nt;\\u6231lcty;\\u632d\\u0980AHabcdefhijlorstuwz\\u1c38\\u1c3b\\u1c3f\\u1c5d\\u1c69\\u1c75\\u1c8a\\u1c9e\\u1cac\\u1cb7\\u1cfb\\u1cff\\u1d0d\\u1d7b\\u1d91\\u1dab\\u1dbb\\u1dc6\\u1dcdr\\xf2\\u0381ar;\\u6965\\u0200glrs\\u1c48\\u1c4d\\u1c52\\u1c54ger;\\u6020eth;\\u6138\\xf2\\u1133h\\u0100;v\\u1c5a\\u1c5b\\u6010\\xbb\\u090a\\u016b\\u1c61\\u1c67arow;\\u690fa\\xe3\\u0315\\u0100ay\\u1c6e\\u1c73ron;\\u410f;\\u4434\\u0180;ao\\u0332\\u1c7c\\u1c84\\u0100gr\\u02bf\\u1c81r;\\u61catseq;\\u6a77\\u0180glm\\u1c91\\u1c94\\u1c98\\u803b\\xb0\\u40b0ta;\\u43b4ptyv;\\u69b1\\u0100ir\\u1ca3\\u1ca8sht;\\u697f;\\uc000\\ud835\\udd21ar\\u0100lr\\u1cb3\\u1cb5\\xbb\\u08dc\\xbb\\u101e\\u0280aegsv\\u1cc2\\u0378\\u1cd6\\u1cdc\\u1ce0m\\u0180;os\\u0326\\u1cca\\u1cd4nd\\u0100;s\\u0326\\u1cd1uit;\\u6666amma;\\u43ddin;\\u62f2\\u0180;io\\u1ce7\\u1ce8\\u1cf8\\u40f7de\\u8100\\xf7;o\\u1ce7\\u1cf0ntimes;\\u62c7n\\xf8\\u1cf7cy;\\u4452c\\u026f\\u1d06\\0\\0\\u1d0arn;\\u631eop;\\u630d\\u0280lptuw\\u1d18\\u1d1d\\u1d22\\u1d49\\u1d55lar;\\u4024f;\\uc000\\ud835\\udd55\\u0280;emps\\u030b\\u1d2d\\u1d37\\u1d3d\\u1d42q\\u0100;d\\u0352\\u1d33ot;\\u6251inus;\\u6238lus;\\u6214quare;\\u62a1blebarwedg\\xe5\\xfan\\u0180adh\\u112e\\u1d5d\\u1d67ownarrow\\xf3\\u1c83arpoon\\u0100lr\\u1d72\\u1d76ef\\xf4\\u1cb4igh\\xf4\\u1cb6\\u0162\\u1d7f\\u1d85karo\\xf7\\u0f42\\u026f\\u1d8a\\0\\0\\u1d8ern;\\u631fop;\\u630c\\u0180cot\\u1d98\\u1da3\\u1da6\\u0100ry\\u1d9d\\u1da1;\\uc000\\ud835\\udcb9;\\u4455l;\\u69f6rok;\\u4111\\u0100dr\\u1db0\\u1db4ot;\\u62f1i\\u0100;f\\u1dba\\u1816\\u65bf\\u0100ah\\u1dc0\\u1dc3r\\xf2\\u0429a\\xf2\\u0fa6angle;\\u69a6\\u0100ci\\u1dd2\\u1dd5y;\\u445fgrarr;\\u67ff\\u0900Dacdefglmnopqrstux\\u1e01\\u1e09\\u1e19\\u1e38\\u0578\\u1e3c\\u1e49\\u1e61\\u1e7e\\u1ea5\\u1eaf\\u1ebd\\u1ee1\\u1f2a\\u1f37\\u1f44\\u1f4e\\u1f5a\\u0100Do\\u1e06\\u1d34o\\xf4\\u1c89\\u0100cs\\u1e0e\\u1e14ute\\u803b\\xe9\\u40e9ter;\\u6a6e\\u0200aioy\\u1e22\\u1e27\\u1e31\\u1e36ron;\\u411br\\u0100;c\\u1e2d\\u1e2e\\u6256\\u803b\\xea\\u40ealon;\\u6255;\\u444dot;\\u4117\\u0100Dr\\u1e41\\u1e45ot;\\u6252;\\uc000\\ud835\\udd22\\u0180;rs\\u1e50\\u1e51\\u1e57\\u6a9aave\\u803b\\xe8\\u40e8\\u0100;d\\u1e5c\\u1e5d\\u6a96ot;\\u6a98\\u0200;ils\\u1e6a\\u1e6b\\u1e72\\u1e74\\u6a99nters;\\u63e7;\\u6113\\u0100;d\\u1e79\\u1e7a\\u6a95ot;\\u6a97\\u0180aps\\u1e85\\u1e89\\u1e97cr;\\u4113ty\\u0180;sv\\u1e92\\u1e93\\u1e95\\u6205et\\xbb\\u1e93p\\u01001;\\u1e9d\\u1ea4\\u0133\\u1ea1\\u1ea3;\\u6004;\\u6005\\u6003\\u0100gs\\u1eaa\\u1eac;\\u414bp;\\u6002\\u0100gp\\u1eb4\\u1eb8on;\\u4119f;\\uc000\\ud835\\udd56\\u0180als\\u1ec4\\u1ece\\u1ed2r\\u0100;s\\u1eca\\u1ecb\\u62d5l;\\u69e3us;\\u6a71i\\u0180;lv\\u1eda\\u1edb\\u1edf\\u43b5on\\xbb\\u1edb;\\u43f5\\u0200csuv\\u1eea\\u1ef3\\u1f0b\\u1f23\\u0100io\\u1eef\\u1e31rc\\xbb\\u1e2e\\u0269\\u1ef9\\0\\0\\u1efb\\xed\\u0548ant\\u0100gl\\u1f02\\u1f06tr\\xbb\\u1e5dess\\xbb\\u1e7a\\u0180aei\\u1f12\\u1f16\\u1f1als;\\u403dst;\\u625fv\\u0100;D\\u0235\\u1f20D;\\u6a78parsl;\\u69e5\\u0100Da\\u1f2f\\u1f33ot;\\u6253rr;\\u6971\\u0180cdi\\u1f3e\\u1f41\\u1ef8r;\\u612fo\\xf4\\u0352\\u0100ah\\u1f49\\u1f4b;\\u43b7\\u803b\\xf0\\u40f0\\u0100mr\\u1f53\\u1f57l\\u803b\\xeb\\u40ebo;\\u60ac\\u0180cip\\u1f61\\u1f64\\u1f67l;\\u4021s\\xf4\\u056e\\u0100eo\\u1f6c\\u1f74ctatio\\xee\\u0559nential\\xe5\\u0579\\u09e1\\u1f92\\0\\u1f9e\\0\\u1fa1\\u1fa7\\0\\0\\u1fc6\\u1fcc\\0\\u1fd3\\0\\u1fe6\\u1fea\\u2000\\0\\u2008\\u205allingdotse\\xf1\\u1e44y;\\u4444male;\\u6640\\u0180ilr\\u1fad\\u1fb3\\u1fc1lig;\\u8000\\ufb03\\u0269\\u1fb9\\0\\0\\u1fbdg;\\u8000\\ufb00ig;\\u8000\\ufb04;\\uc000\\ud835\\udd23lig;\\u8000\\ufb01lig;\\uc000fj\\u0180alt\\u1fd9\\u1fdc\\u1fe1t;\\u666dig;\\u8000\\ufb02ns;\\u65b1of;\\u4192\\u01f0\\u1fee\\0\\u1ff3f;\\uc000\\ud835\\udd57\\u0100ak\\u05bf\\u1ff7\\u0100;v\\u1ffc\\u1ffd\\u62d4;\\u6ad9artint;\\u6a0d\\u0100ao\\u200c\\u2055\\u0100cs\\u2011\\u2052\\u03b1\\u201a\\u2030\\u2038\\u2045\\u2048\\0\\u2050\\u03b2\\u2022\\u2025\\u2027\\u202a\\u202c\\0\\u202e\\u803b\\xbd\\u40bd;\\u6153\\u803b\\xbc\\u40bc;\\u6155;\\u6159;\\u615b\\u01b3\\u2034\\0\\u2036;\\u6154;\\u6156\\u02b4\\u203e\\u2041\\0\\0\\u2043\\u803b\\xbe\\u40be;\\u6157;\\u615c5;\\u6158\\u01b6\\u204c\\0\\u204e;\\u615a;\\u615d8;\\u615el;\\u6044wn;\\u6322cr;\\uc000\\ud835\\udcbb\\u0880Eabcdefgijlnorstv\\u2082\\u2089\\u209f\\u20a5\\u20b0\\u20b4\\u20f0\\u20f5\\u20fa\\u20ff\\u2103\\u2112\\u2138\\u0317\\u213e\\u2152\\u219e\\u0100;l\\u064d\\u2087;\\u6a8c\\u0180cmp\\u2090\\u2095\\u209dute;\\u41f5ma\\u0100;d\\u209c\\u1cda\\u43b3;\\u6a86reve;\\u411f\\u0100iy\\u20aa\\u20aerc;\\u411d;\\u4433ot;\\u4121\\u0200;lqs\\u063e\\u0642\\u20bd\\u20c9\\u0180;qs\\u063e\\u064c\\u20c4lan\\xf4\\u0665\\u0200;cdl\\u0665\\u20d2\\u20d5\\u20e5c;\\u6aa9ot\\u0100;o\\u20dc\\u20dd\\u6a80\\u0100;l\\u20e2\\u20e3\\u6a82;\\u6a84\\u0100;e\\u20ea\\u20ed\\uc000\\u22db\\ufe00s;\\u6a94r;\\uc000\\ud835\\udd24\\u0100;g\\u0673\\u061bmel;\\u6137cy;\\u4453\\u0200;Eaj\\u065a\\u210c\\u210e\\u2110;\\u6a92;\\u6aa5;\\u6aa4\\u0200Eaes\\u211b\\u211d\\u2129\\u2134;\\u6269p\\u0100;p\\u2123\\u2124\\u6a8arox\\xbb\\u2124\\u0100;q\\u212e\\u212f\\u6a88\\u0100;q\\u212e\\u211bim;\\u62e7pf;\\uc000\\ud835\\udd58\\u0100ci\\u2143\\u2146r;\\u610am\\u0180;el\\u066b\\u214e\\u2150;\\u6a8e;\\u6a90\\u8300>;cdlqr\\u05ee\\u2160\\u216a\\u216e\\u2173\\u2179\\u0100ci\\u2165\\u2167;\\u6aa7r;\\u6a7aot;\\u62d7Par;\\u6995uest;\\u6a7c\\u0280adels\\u2184\\u216a\\u2190\\u0656\\u219b\\u01f0\\u2189\\0\\u218epro\\xf8\\u209er;\\u6978q\\u0100lq\\u063f\\u2196les\\xf3\\u2088i\\xed\\u066b\\u0100en\\u21a3\\u21adrtneqq;\\uc000\\u2269\\ufe00\\xc5\\u21aa\\u0500Aabcefkosy\\u21c4\\u21c7\\u21f1\\u21f5\\u21fa\\u2218\\u221d\\u222f\\u2268\\u227dr\\xf2\\u03a0\\u0200ilmr\\u21d0\\u21d4\\u21d7\\u21dbrs\\xf0\\u1484f\\xbb\\u2024il\\xf4\\u06a9\\u0100dr\\u21e0\\u21e4cy;\\u444a\\u0180;cw\\u08f4\\u21eb\\u21efir;\\u6948;\\u61adar;\\u610firc;\\u4125\\u0180alr\\u2201\\u220e\\u2213rts\\u0100;u\\u2209\\u220a\\u6665it\\xbb\\u220alip;\\u6026con;\\u62b9r;\\uc000\\ud835\\udd25s\\u0100ew\\u2223\\u2229arow;\\u6925arow;\\u6926\\u0280amopr\\u223a\\u223e\\u2243\\u225e\\u2263rr;\\u61fftht;\\u623bk\\u0100lr\\u2249\\u2253eftarrow;\\u61a9ightarrow;\\u61aaf;\\uc000\\ud835\\udd59bar;\\u6015\\u0180clt\\u226f\\u2274\\u2278r;\\uc000\\ud835\\udcbdas\\xe8\\u21f4rok;\\u4127\\u0100bp\\u2282\\u2287ull;\\u6043hen\\xbb\\u1c5b\\u0ae1\\u22a3\\0\\u22aa\\0\\u22b8\\u22c5\\u22ce\\0\\u22d5\\u22f3\\0\\0\\u22f8\\u2322\\u2367\\u2362\\u237f\\0\\u2386\\u23aa\\u23b4cute\\u803b\\xed\\u40ed\\u0180;iy\\u0771\\u22b0\\u22b5rc\\u803b\\xee\\u40ee;\\u4438\\u0100cx\\u22bc\\u22bfy;\\u4435cl\\u803b\\xa1\\u40a1\\u0100fr\\u039f\\u22c9;\\uc000\\ud835\\udd26rave\\u803b\\xec\\u40ec\\u0200;ino\\u073e\\u22dd\\u22e9\\u22ee\\u0100in\\u22e2\\u22e6nt;\\u6a0ct;\\u622dfin;\\u69dcta;\\u6129lig;\\u4133\\u0180aop\\u22fe\\u231a\\u231d\\u0180cgt\\u2305\\u2308\\u2317r;\\u412b\\u0180elp\\u071f\\u230f\\u2313in\\xe5\\u078ear\\xf4\\u0720h;\\u4131f;\\u62b7ed;\\u41b5\\u0280;cfot\\u04f4\\u232c\\u2331\\u233d\\u2341are;\\u6105in\\u0100;t\\u2338\\u2339\\u621eie;\\u69dddo\\xf4\\u2319\\u0280;celp\\u0757\\u234c\\u2350\\u235b\\u2361al;\\u62ba\\u0100gr\\u2355\\u2359er\\xf3\\u1563\\xe3\\u234darhk;\\u6a17rod;\\u6a3c\\u0200cgpt\\u236f\\u2372\\u2376\\u237by;\\u4451on;\\u412ff;\\uc000\\ud835\\udd5aa;\\u43b9uest\\u803b\\xbf\\u40bf\\u0100ci\\u238a\\u238fr;\\uc000\\ud835\\udcben\\u0280;Edsv\\u04f4\\u239b\\u239d\\u23a1\\u04f3;\\u62f9ot;\\u62f5\\u0100;v\\u23a6\\u23a7\\u62f4;\\u62f3\\u0100;i\\u0777\\u23aelde;\\u4129\\u01eb\\u23b8\\0\\u23bccy;\\u4456l\\u803b\\xef\\u40ef\\u0300cfmosu\\u23cc\\u23d7\\u23dc\\u23e1\\u23e7\\u23f5\\u0100iy\\u23d1\\u23d5rc;\\u4135;\\u4439r;\\uc000\\ud835\\udd27ath;\\u4237pf;\\uc000\\ud835\\udd5b\\u01e3\\u23ec\\0\\u23f1r;\\uc000\\ud835\\udcbfrcy;\\u4458kcy;\\u4454\\u0400acfghjos\\u240b\\u2416\\u2422\\u2427\\u242d\\u2431\\u2435\\u243bppa\\u0100;v\\u2413\\u2414\\u43ba;\\u43f0\\u0100ey\\u241b\\u2420dil;\\u4137;\\u443ar;\\uc000\\ud835\\udd28reen;\\u4138cy;\\u4445cy;\\u445cpf;\\uc000\\ud835\\udd5ccr;\\uc000\\ud835\\udcc0\\u0b80ABEHabcdefghjlmnoprstuv\\u2470\\u2481\\u2486\\u248d\\u2491\\u250e\\u253d\\u255a\\u2580\\u264e\\u265e\\u2665\\u2679\\u267d\\u269a\\u26b2\\u26d8\\u275d\\u2768\\u278b\\u27c0\\u2801\\u2812\\u0180art\\u2477\\u247a\\u247cr\\xf2\\u09c6\\xf2\\u0395ail;\\u691barr;\\u690e\\u0100;g\\u0994\\u248b;\\u6a8bar;\\u6962\\u0963\\u24a5\\0\\u24aa\\0\\u24b1\\0\\0\\0\\0\\0\\u24b5\\u24ba\\0\\u24c6\\u24c8\\u24cd\\0\\u24f9ute;\\u413amptyv;\\u69b4ra\\xee\\u084cbda;\\u43bbg\\u0180;dl\\u088e\\u24c1\\u24c3;\\u6991\\xe5\\u088e;\\u6a85uo\\u803b\\xab\\u40abr\\u0400;bfhlpst\\u0899\\u24de\\u24e6\\u24e9\\u24eb\\u24ee\\u24f1\\u24f5\\u0100;f\\u089d\\u24e3s;\\u691fs;\\u691d\\xeb\\u2252p;\\u61abl;\\u6939im;\\u6973l;\\u61a2\\u0180;ae\\u24ff\\u2500\\u2504\\u6aabil;\\u6919\\u0100;s\\u2509\\u250a\\u6aad;\\uc000\\u2aad\\ufe00\\u0180abr\\u2515\\u2519\\u251drr;\\u690crk;\\u6772\\u0100ak\\u2522\\u252cc\\u0100ek\\u2528\\u252a;\\u407b;\\u405b\\u0100es\\u2531\\u2533;\\u698bl\\u0100du\\u2539\\u253b;\\u698f;\\u698d\\u0200aeuy\\u2546\\u254b\\u2556\\u2558ron;\\u413e\\u0100di\\u2550\\u2554il;\\u413c\\xec\\u08b0\\xe2\\u2529;\\u443b\\u0200cqrs\\u2563\\u2566\\u256d\\u257da;\\u6936uo\\u0100;r\\u0e19\\u1746\\u0100du\\u2572\\u2577har;\\u6967shar;\\u694bh;\\u61b2\\u0280;fgqs\\u258b\\u258c\\u0989\\u25f3\\u25ff\\u6264t\\u0280ahlrt\\u2598\\u25a4\\u25b7\\u25c2\\u25e8rrow\\u0100;t\\u0899\\u25a1a\\xe9\\u24f6arpoon\\u0100du\\u25af\\u25b4own\\xbb\\u045ap\\xbb\\u0966eftarrows;\\u61c7ight\\u0180ahs\\u25cd\\u25d6\\u25derrow\\u0100;s\\u08f4\\u08a7arpoon\\xf3\\u0f98quigarro\\xf7\\u21f0hreetimes;\\u62cb\\u0180;qs\\u258b\\u0993\\u25falan\\xf4\\u09ac\\u0280;cdgs\\u09ac\\u260a\\u260d\\u261d\\u2628c;\\u6aa8ot\\u0100;o\\u2614\\u2615\\u6a7f\\u0100;r\\u261a\\u261b\\u6a81;\\u6a83\\u0100;e\\u2622\\u2625\\uc000\\u22da\\ufe00s;\\u6a93\\u0280adegs\\u2633\\u2639\\u263d\\u2649\\u264bppro\\xf8\\u24c6ot;\\u62d6q\\u0100gq\\u2643\\u2645\\xf4\\u0989gt\\xf2\\u248c\\xf4\\u099bi\\xed\\u09b2\\u0180ilr\\u2655\\u08e1\\u265asht;\\u697c;\\uc000\\ud835\\udd29\\u0100;E\\u099c\\u2663;\\u6a91\\u0161\\u2669\\u2676r\\u0100du\\u25b2\\u266e\\u0100;l\\u0965\\u2673;\\u696alk;\\u6584cy;\\u4459\\u0280;acht\\u0a48\\u2688\\u268b\\u2691\\u2696r\\xf2\\u25c1orne\\xf2\\u1d08ard;\\u696bri;\\u65fa\\u0100io\\u269f\\u26a4dot;\\u4140ust\\u0100;a\\u26ac\\u26ad\\u63b0che\\xbb\\u26ad\\u0200Eaes\\u26bb\\u26bd\\u26c9\\u26d4;\\u6268p\\u0100;p\\u26c3\\u26c4\\u6a89rox\\xbb\\u26c4\\u0100;q\\u26ce\\u26cf\\u6a87\\u0100;q\\u26ce\\u26bbim;\\u62e6\\u0400abnoptwz\\u26e9\\u26f4\\u26f7\\u271a\\u272f\\u2741\\u2747\\u2750\\u0100nr\\u26ee\\u26f1g;\\u67ecr;\\u61fdr\\xeb\\u08c1g\\u0180lmr\\u26ff\\u270d\\u2714eft\\u0100ar\\u09e6\\u2707ight\\xe1\\u09f2apsto;\\u67fcight\\xe1\\u09fdparrow\\u0100lr\\u2725\\u2729ef\\xf4\\u24edight;\\u61ac\\u0180afl\\u2736\\u2739\\u273dr;\\u6985;\\uc000\\ud835\\udd5dus;\\u6a2dimes;\\u6a34\\u0161\\u274b\\u274fst;\\u6217\\xe1\\u134e\\u0180;ef\\u2757\\u2758\\u1800\\u65cange\\xbb\\u2758ar\\u0100;l\\u2764\\u2765\\u4028t;\\u6993\\u0280achmt\\u2773\\u2776\\u277c\\u2785\\u2787r\\xf2\\u08a8orne\\xf2\\u1d8car\\u0100;d\\u0f98\\u2783;\\u696d;\\u600eri;\\u62bf\\u0300achiqt\\u2798\\u279d\\u0a40\\u27a2\\u27ae\\u27bbquo;\\u6039r;\\uc000\\ud835\\udcc1m\\u0180;eg\\u09b2\\u27aa\\u27ac;\\u6a8d;\\u6a8f\\u0100bu\\u252a\\u27b3o\\u0100;r\\u0e1f\\u27b9;\\u601arok;\\u4142\\u8400<;cdhilqr\\u082b\\u27d2\\u2639\\u27dc\\u27e0\\u27e5\\u27ea\\u27f0\\u0100ci\\u27d7\\u27d9;\\u6aa6r;\\u6a79re\\xe5\\u25f2mes;\\u62c9arr;\\u6976uest;\\u6a7b\\u0100Pi\\u27f5\\u27f9ar;\\u6996\\u0180;ef\\u2800\\u092d\\u181b\\u65c3r\\u0100du\\u2807\\u280dshar;\\u694ahar;\\u6966\\u0100en\\u2817\\u2821rtneqq;\\uc000\\u2268\\ufe00\\xc5\\u281e\\u0700Dacdefhilnopsu\\u2840\\u2845\\u2882\\u288e\\u2893\\u28a0\\u28a5\\u28a8\\u28da\\u28e2\\u28e4\\u0a83\\u28f3\\u2902Dot;\\u623a\\u0200clpr\\u284e\\u2852\\u2863\\u287dr\\u803b\\xaf\\u40af\\u0100et\\u2857\\u2859;\\u6642\\u0100;e\\u285e\\u285f\\u6720se\\xbb\\u285f\\u0100;s\\u103b\\u2868to\\u0200;dlu\\u103b\\u2873\\u2877\\u287bow\\xee\\u048cef\\xf4\\u090f\\xf0\\u13d1ker;\\u65ae\\u0100oy\\u2887\\u288cmma;\\u6a29;\\u443cash;\\u6014asuredangle\\xbb\\u1626r;\\uc000\\ud835\\udd2ao;\\u6127\\u0180cdn\\u28af\\u28b4\\u28c9ro\\u803b\\xb5\\u40b5\\u0200;acd\\u1464\\u28bd\\u28c0\\u28c4s\\xf4\\u16a7ir;\\u6af0ot\\u80bb\\xb7\\u01b5us\\u0180;bd\\u28d2\\u1903\\u28d3\\u6212\\u0100;u\\u1d3c\\u28d8;\\u6a2a\\u0163\\u28de\\u28e1p;\\u6adb\\xf2\\u2212\\xf0\\u0a81\\u0100dp\\u28e9\\u28eeels;\\u62a7f;\\uc000\\ud835\\udd5e\\u0100ct\\u28f8\\u28fdr;\\uc000\\ud835\\udcc2pos\\xbb\\u159d\\u0180;lm\\u2909\\u290a\\u290d\\u43bctimap;\\u62b8\\u0c00GLRVabcdefghijlmoprstuvw\\u2942\\u2953\\u297e\\u2989\\u2998\\u29da\\u29e9\\u2a15\\u2a1a\\u2a58\\u2a5d\\u2a83\\u2a95\\u2aa4\\u2aa8\\u2b04\\u2b07\\u2b44\\u2b7f\\u2bae\\u2c34\\u2c67\\u2c7c\\u2ce9\\u0100gt\\u2947\\u294b;\\uc000\\u22d9\\u0338\\u0100;v\\u2950\\u0bcf\\uc000\\u226b\\u20d2\\u0180elt\\u295a\\u2972\\u2976ft\\u0100ar\\u2961\\u2967rrow;\\u61cdightarrow;\\u61ce;\\uc000\\u22d8\\u0338\\u0100;v\\u297b\\u0c47\\uc000\\u226a\\u20d2ightarrow;\\u61cf\\u0100Dd\\u298e\\u2993ash;\\u62afash;\\u62ae\\u0280bcnpt\\u29a3\\u29a7\\u29ac\\u29b1\\u29ccla\\xbb\\u02deute;\\u4144g;\\uc000\\u2220\\u20d2\\u0280;Eiop\\u0d84\\u29bc\\u29c0\\u29c5\\u29c8;\\uc000\\u2a70\\u0338d;\\uc000\\u224b\\u0338s;\\u4149ro\\xf8\\u0d84ur\\u0100;a\\u29d3\\u29d4\\u666el\\u0100;s\\u29d3\\u0b38\\u01f3\\u29df\\0\\u29e3p\\u80bb\\xa0\\u0b37mp\\u0100;e\\u0bf9\\u0c00\\u0280aeouy\\u29f4\\u29fe\\u2a03\\u2a10\\u2a13\\u01f0\\u29f9\\0\\u29fb;\\u6a43on;\\u4148dil;\\u4146ng\\u0100;d\\u0d7e\\u2a0aot;\\uc000\\u2a6d\\u0338p;\\u6a42;\\u443dash;\\u6013\\u0380;Aadqsx\\u0b92\\u2a29\\u2a2d\\u2a3b\\u2a41\\u2a45\\u2a50rr;\\u61d7r\\u0100hr\\u2a33\\u2a36k;\\u6924\\u0100;o\\u13f2\\u13f0ot;\\uc000\\u2250\\u0338ui\\xf6\\u0b63\\u0100ei\\u2a4a\\u2a4ear;\\u6928\\xed\\u0b98ist\\u0100;s\\u0ba0\\u0b9fr;\\uc000\\ud835\\udd2b\\u0200Eest\\u0bc5\\u2a66\\u2a79\\u2a7c\\u0180;qs\\u0bbc\\u2a6d\\u0be1\\u0180;qs\\u0bbc\\u0bc5\\u2a74lan\\xf4\\u0be2i\\xed\\u0bea\\u0100;r\\u0bb6\\u2a81\\xbb\\u0bb7\\u0180Aap\\u2a8a\\u2a8d\\u2a91r\\xf2\\u2971rr;\\u61aear;\\u6af2\\u0180;sv\\u0f8d\\u2a9c\\u0f8c\\u0100;d\\u2aa1\\u2aa2\\u62fc;\\u62facy;\\u445a\\u0380AEadest\\u2ab7\\u2aba\\u2abe\\u2ac2\\u2ac5\\u2af6\\u2af9r\\xf2\\u2966;\\uc000\\u2266\\u0338rr;\\u619ar;\\u6025\\u0200;fqs\\u0c3b\\u2ace\\u2ae3\\u2aeft\\u0100ar\\u2ad4\\u2ad9rro\\xf7\\u2ac1ightarro\\xf7\\u2a90\\u0180;qs\\u0c3b\\u2aba\\u2aealan\\xf4\\u0c55\\u0100;s\\u0c55\\u2af4\\xbb\\u0c36i\\xed\\u0c5d\\u0100;r\\u0c35\\u2afei\\u0100;e\\u0c1a\\u0c25i\\xe4\\u0d90\\u0100pt\\u2b0c\\u2b11f;\\uc000\\ud835\\udd5f\\u8180\\xac;in\\u2b19\\u2b1a\\u2b36\\u40acn\\u0200;Edv\\u0b89\\u2b24\\u2b28\\u2b2e;\\uc000\\u22f9\\u0338ot;\\uc000\\u22f5\\u0338\\u01e1\\u0b89\\u2b33\\u2b35;\\u62f7;\\u62f6i\\u0100;v\\u0cb8\\u2b3c\\u01e1\\u0cb8\\u2b41\\u2b43;\\u62fe;\\u62fd\\u0180aor\\u2b4b\\u2b63\\u2b69r\\u0200;ast\\u0b7b\\u2b55\\u2b5a\\u2b5flle\\xec\\u0b7bl;\\uc000\\u2afd\\u20e5;\\uc000\\u2202\\u0338lint;\\u6a14\\u0180;ce\\u0c92\\u2b70\\u2b73u\\xe5\\u0ca5\\u0100;c\\u0c98\\u2b78\\u0100;e\\u0c92\\u2b7d\\xf1\\u0c98\\u0200Aait\\u2b88\\u2b8b\\u2b9d\\u2ba7r\\xf2\\u2988rr\\u0180;cw\\u2b94\\u2b95\\u2b99\\u619b;\\uc000\\u2933\\u0338;\\uc000\\u219d\\u0338ghtarrow\\xbb\\u2b95ri\\u0100;e\\u0ccb\\u0cd6\\u0380chimpqu\\u2bbd\\u2bcd\\u2bd9\\u2b04\\u0b78\\u2be4\\u2bef\\u0200;cer\\u0d32\\u2bc6\\u0d37\\u2bc9u\\xe5\\u0d45;\\uc000\\ud835\\udcc3ort\\u026d\\u2b05\\0\\0\\u2bd6ar\\xe1\\u2b56m\\u0100;e\\u0d6e\\u2bdf\\u0100;q\\u0d74\\u0d73su\\u0100bp\\u2beb\\u2bed\\xe5\\u0cf8\\xe5\\u0d0b\\u0180bcp\\u2bf6\\u2c11\\u2c19\\u0200;Ees\\u2bff\\u2c00\\u0d22\\u2c04\\u6284;\\uc000\\u2ac5\\u0338et\\u0100;e\\u0d1b\\u2c0bq\\u0100;q\\u0d23\\u2c00c\\u0100;e\\u0d32\\u2c17\\xf1\\u0d38\\u0200;Ees\\u2c22\\u2c23\\u0d5f\\u2c27\\u6285;\\uc000\\u2ac6\\u0338et\\u0100;e\\u0d58\\u2c2eq\\u0100;q\\u0d60\\u2c23\\u0200gilr\\u2c3d\\u2c3f\\u2c45\\u2c47\\xec\\u0bd7lde\\u803b\\xf1\\u40f1\\xe7\\u0c43iangle\\u0100lr\\u2c52\\u2c5ceft\\u0100;e\\u0c1a\\u2c5a\\xf1\\u0c26ight\\u0100;e\\u0ccb\\u2c65\\xf1\\u0cd7\\u0100;m\\u2c6c\\u2c6d\\u43bd\\u0180;es\\u2c74\\u2c75\\u2c79\\u4023ro;\\u6116p;\\u6007\\u0480DHadgilrs\\u2c8f\\u2c94\\u2c99\\u2c9e\\u2ca3\\u2cb0\\u2cb6\\u2cd3\\u2ce3ash;\\u62adarr;\\u6904p;\\uc000\\u224d\\u20d2ash;\\u62ac\\u0100et\\u2ca8\\u2cac;\\uc000\\u2265\\u20d2;\\uc000>\\u20d2nfin;\\u69de\\u0180Aet\\u2cbd\\u2cc1\\u2cc5rr;\\u6902;\\uc000\\u2264\\u20d2\\u0100;r\\u2cca\\u2ccd\\uc000<\\u20d2ie;\\uc000\\u22b4\\u20d2\\u0100At\\u2cd8\\u2cdcrr;\\u6903rie;\\uc000\\u22b5\\u20d2im;\\uc000\\u223c\\u20d2\\u0180Aan\\u2cf0\\u2cf4\\u2d02rr;\\u61d6r\\u0100hr\\u2cfa\\u2cfdk;\\u6923\\u0100;o\\u13e7\\u13e5ear;\\u6927\\u1253\\u1a95\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\u2d2d\\0\\u2d38\\u2d48\\u2d60\\u2d65\\u2d72\\u2d84\\u1b07\\0\\0\\u2d8d\\u2dab\\0\\u2dc8\\u2dce\\0\\u2ddc\\u2e19\\u2e2b\\u2e3e\\u2e43\\u0100cs\\u2d31\\u1a97ute\\u803b\\xf3\\u40f3\\u0100iy\\u2d3c\\u2d45r\\u0100;c\\u1a9e\\u2d42\\u803b\\xf4\\u40f4;\\u443e\\u0280abios\\u1aa0\\u2d52\\u2d57\\u01c8\\u2d5alac;\\u4151v;\\u6a38old;\\u69bclig;\\u4153\\u0100cr\\u2d69\\u2d6dir;\\u69bf;\\uc000\\ud835\\udd2c\\u036f\\u2d79\\0\\0\\u2d7c\\0\\u2d82n;\\u42dbave\\u803b\\xf2\\u40f2;\\u69c1\\u0100bm\\u2d88\\u0df4ar;\\u69b5\\u0200acit\\u2d95\\u2d98\\u2da5\\u2da8r\\xf2\\u1a80\\u0100ir\\u2d9d\\u2da0r;\\u69beoss;\\u69bbn\\xe5\\u0e52;\\u69c0\\u0180aei\\u2db1\\u2db5\\u2db9cr;\\u414dga;\\u43c9\\u0180cdn\\u2dc0\\u2dc5\\u01cdron;\\u43bf;\\u69b6pf;\\uc000\\ud835\\udd60\\u0180ael\\u2dd4\\u2dd7\\u01d2r;\\u69b7rp;\\u69b9\\u0380;adiosv\\u2dea\\u2deb\\u2dee\\u2e08\\u2e0d\\u2e10\\u2e16\\u6228r\\xf2\\u1a86\\u0200;efm\\u2df7\\u2df8\\u2e02\\u2e05\\u6a5dr\\u0100;o\\u2dfe\\u2dff\\u6134f\\xbb\\u2dff\\u803b\\xaa\\u40aa\\u803b\\xba\\u40bagof;\\u62b6r;\\u6a56lope;\\u6a57;\\u6a5b\\u0180clo\\u2e1f\\u2e21\\u2e27\\xf2\\u2e01ash\\u803b\\xf8\\u40f8l;\\u6298i\\u016c\\u2e2f\\u2e34de\\u803b\\xf5\\u40f5es\\u0100;a\\u01db\\u2e3as;\\u6a36ml\\u803b\\xf6\\u40f6bar;\\u633d\\u0ae1\\u2e5e\\0\\u2e7d\\0\\u2e80\\u2e9d\\0\\u2ea2\\u2eb9\\0\\0\\u2ecb\\u0e9c\\0\\u2f13\\0\\0\\u2f2b\\u2fbc\\0\\u2fc8r\\u0200;ast\\u0403\\u2e67\\u2e72\\u0e85\\u8100\\xb6;l\\u2e6d\\u2e6e\\u40b6le\\xec\\u0403\\u0269\\u2e78\\0\\0\\u2e7bm;\\u6af3;\\u6afdy;\\u443fr\\u0280cimpt\\u2e8b\\u2e8f\\u2e93\\u1865\\u2e97nt;\\u4025od;\\u402eil;\\u6030enk;\\u6031r;\\uc000\\ud835\\udd2d\\u0180imo\\u2ea8\\u2eb0\\u2eb4\\u0100;v\\u2ead\\u2eae\\u43c6;\\u43d5ma\\xf4\\u0a76ne;\\u660e\\u0180;tv\\u2ebf\\u2ec0\\u2ec8\\u43c0chfork\\xbb\\u1ffd;\\u43d6\\u0100au\\u2ecf\\u2edfn\\u0100ck\\u2ed5\\u2eddk\\u0100;h\\u21f4\\u2edb;\\u610e\\xf6\\u21f4s\\u0480;abcdemst\\u2ef3\\u2ef4\\u1908\\u2ef9\\u2efd\\u2f04\\u2f06\\u2f0a\\u2f0e\\u402bcir;\\u6a23ir;\\u6a22\\u0100ou\\u1d40\\u2f02;\\u6a25;\\u6a72n\\u80bb\\xb1\\u0e9dim;\\u6a26wo;\\u6a27\\u0180ipu\\u2f19\\u2f20\\u2f25ntint;\\u6a15f;\\uc000\\ud835\\udd61nd\\u803b\\xa3\\u40a3\\u0500;Eaceinosu\\u0ec8\\u2f3f\\u2f41\\u2f44\\u2f47\\u2f81\\u2f89\\u2f92\\u2f7e\\u2fb6;\\u6ab3p;\\u6ab7u\\xe5\\u0ed9\\u0100;c\\u0ece\\u2f4c\\u0300;acens\\u0ec8\\u2f59\\u2f5f\\u2f66\\u2f68\\u2f7eppro\\xf8\\u2f43urlye\\xf1\\u0ed9\\xf1\\u0ece\\u0180aes\\u2f6f\\u2f76\\u2f7approx;\\u6ab9qq;\\u6ab5im;\\u62e8i\\xed\\u0edfme\\u0100;s\\u2f88\\u0eae\\u6032\\u0180Eas\\u2f78\\u2f90\\u2f7a\\xf0\\u2f75\\u0180dfp\\u0eec\\u2f99\\u2faf\\u0180als\\u2fa0\\u2fa5\\u2faalar;\\u632eine;\\u6312urf;\\u6313\\u0100;t\\u0efb\\u2fb4\\xef\\u0efbrel;\\u62b0\\u0100ci\\u2fc0\\u2fc5r;\\uc000\\ud835\\udcc5;\\u43c8ncsp;\\u6008\\u0300fiopsu\\u2fda\\u22e2\\u2fdf\\u2fe5\\u2feb\\u2ff1r;\\uc000\\ud835\\udd2epf;\\uc000\\ud835\\udd62rime;\\u6057cr;\\uc000\\ud835\\udcc6\\u0180aeo\\u2ff8\\u3009\\u3013t\\u0100ei\\u2ffe\\u3005rnion\\xf3\\u06b0nt;\\u6a16st\\u0100;e\\u3010\\u3011\\u403f\\xf1\\u1f19\\xf4\\u0f14\\u0a80ABHabcdefhilmnoprstux\\u3040\\u3051\\u3055\\u3059\\u30e0\\u310e\\u312b\\u3147\\u3162\\u3172\\u318e\\u3206\\u3215\\u3224\\u3229\\u3258\\u326e\\u3272\\u3290\\u32b0\\u32b7\\u0180art\\u3047\\u304a\\u304cr\\xf2\\u10b3\\xf2\\u03ddail;\\u691car\\xf2\\u1c65ar;\\u6964\\u0380cdenqrt\\u3068\\u3075\\u3078\\u307f\\u308f\\u3094\\u30cc\\u0100eu\\u306d\\u3071;\\uc000\\u223d\\u0331te;\\u4155i\\xe3\\u116emptyv;\\u69b3g\\u0200;del\\u0fd1\\u3089\\u308b\\u308d;\\u6992;\\u69a5\\xe5\\u0fd1uo\\u803b\\xbb\\u40bbr\\u0580;abcfhlpstw\\u0fdc\\u30ac\\u30af\\u30b7\\u30b9\\u30bc\\u30be\\u30c0\\u30c3\\u30c7\\u30cap;\\u6975\\u0100;f\\u0fe0\\u30b4s;\\u6920;\\u6933s;\\u691e\\xeb\\u225d\\xf0\\u272el;\\u6945im;\\u6974l;\\u61a3;\\u619d\\u0100ai\\u30d1\\u30d5il;\\u691ao\\u0100;n\\u30db\\u30dc\\u6236al\\xf3\\u0f1e\\u0180abr\\u30e7\\u30ea\\u30eer\\xf2\\u17e5rk;\\u6773\\u0100ak\\u30f3\\u30fdc\\u0100ek\\u30f9\\u30fb;\\u407d;\\u405d\\u0100es\\u3102\\u3104;\\u698cl\\u0100du\\u310a\\u310c;\\u698e;\\u6990\\u0200aeuy\\u3117\\u311c\\u3127\\u3129ron;\\u4159\\u0100di\\u3121\\u3125il;\\u4157\\xec\\u0ff2\\xe2\\u30fa;\\u4440\\u0200clqs\\u3134\\u3137\\u313d\\u3144a;\\u6937dhar;\\u6969uo\\u0100;r\\u020e\\u020dh;\\u61b3\\u0180acg\\u314e\\u315f\\u0f44l\\u0200;ips\\u0f78\\u3158\\u315b\\u109cn\\xe5\\u10bbar\\xf4\\u0fa9t;\\u65ad\\u0180ilr\\u3169\\u1023\\u316esht;\\u697d;\\uc000\\ud835\\udd2f\\u0100ao\\u3177\\u3186r\\u0100du\\u317d\\u317f\\xbb\\u047b\\u0100;l\\u1091\\u3184;\\u696c\\u0100;v\\u318b\\u318c\\u43c1;\\u43f1\\u0180gns\\u3195\\u31f9\\u31fcht\\u0300ahlrst\\u31a4\\u31b0\\u31c2\\u31d8\\u31e4\\u31eerrow\\u0100;t\\u0fdc\\u31ada\\xe9\\u30c8arpoon\\u0100du\\u31bb\\u31bfow\\xee\\u317ep\\xbb\\u1092eft\\u0100ah\\u31ca\\u31d0rrow\\xf3\\u0feaarpoon\\xf3\\u0551ightarrows;\\u61c9quigarro\\xf7\\u30cbhreetimes;\\u62ccg;\\u42daingdotse\\xf1\\u1f32\\u0180ahm\\u320d\\u3210\\u3213r\\xf2\\u0feaa\\xf2\\u0551;\\u600foust\\u0100;a\\u321e\\u321f\\u63b1che\\xbb\\u321fmid;\\u6aee\\u0200abpt\\u3232\\u323d\\u3240\\u3252\\u0100nr\\u3237\\u323ag;\\u67edr;\\u61fer\\xeb\\u1003\\u0180afl\\u3247\\u324a\\u324er;\\u6986;\\uc000\\ud835\\udd63us;\\u6a2eimes;\\u6a35\\u0100ap\\u325d\\u3267r\\u0100;g\\u3263\\u3264\\u4029t;\\u6994olint;\\u6a12ar\\xf2\\u31e3\\u0200achq\\u327b\\u3280\\u10bc\\u3285quo;\\u603ar;\\uc000\\ud835\\udcc7\\u0100bu\\u30fb\\u328ao\\u0100;r\\u0214\\u0213\\u0180hir\\u3297\\u329b\\u32a0re\\xe5\\u31f8mes;\\u62cai\\u0200;efl\\u32aa\\u1059\\u1821\\u32ab\\u65b9tri;\\u69celuhar;\\u6968;\\u611e\\u0d61\\u32d5\\u32db\\u32df\\u332c\\u3338\\u3371\\0\\u337a\\u33a4\\0\\0\\u33ec\\u33f0\\0\\u3428\\u3448\\u345a\\u34ad\\u34b1\\u34ca\\u34f1\\0\\u3616\\0\\0\\u3633cute;\\u415bqu\\xef\\u27ba\\u0500;Eaceinpsy\\u11ed\\u32f3\\u32f5\\u32ff\\u3302\\u330b\\u330f\\u331f\\u3326\\u3329;\\u6ab4\\u01f0\\u32fa\\0\\u32fc;\\u6ab8on;\\u4161u\\xe5\\u11fe\\u0100;d\\u11f3\\u3307il;\\u415frc;\\u415d\\u0180Eas\\u3316\\u3318\\u331b;\\u6ab6p;\\u6abaim;\\u62e9olint;\\u6a13i\\xed\\u1204;\\u4441ot\\u0180;be\\u3334\\u1d47\\u3335\\u62c5;\\u6a66\\u0380Aacmstx\\u3346\\u334a\\u3357\\u335b\\u335e\\u3363\\u336drr;\\u61d8r\\u0100hr\\u3350\\u3352\\xeb\\u2228\\u0100;o\\u0a36\\u0a34t\\u803b\\xa7\\u40a7i;\\u403bwar;\\u6929m\\u0100in\\u3369\\xf0nu\\xf3\\xf1t;\\u6736r\\u0100;o\\u3376\\u2055\\uc000\\ud835\\udd30\\u0200acoy\\u3382\\u3386\\u3391\\u33a0rp;\\u666f\\u0100hy\\u338b\\u338fcy;\\u4449;\\u4448rt\\u026d\\u3399\\0\\0\\u339ci\\xe4\\u1464ara\\xec\\u2e6f\\u803b\\xad\\u40ad\\u0100gm\\u33a8\\u33b4ma\\u0180;fv\\u33b1\\u33b2\\u33b2\\u43c3;\\u43c2\\u0400;deglnpr\\u12ab\\u33c5\\u33c9\\u33ce\\u33d6\\u33de\\u33e1\\u33e6ot;\\u6a6a\\u0100;q\\u12b1\\u12b0\\u0100;E\\u33d3\\u33d4\\u6a9e;\\u6aa0\\u0100;E\\u33db\\u33dc\\u6a9d;\\u6a9fe;\\u6246lus;\\u6a24arr;\\u6972ar\\xf2\\u113d\\u0200aeit\\u33f8\\u3408\\u340f\\u3417\\u0100ls\\u33fd\\u3404lsetm\\xe9\\u336ahp;\\u6a33parsl;\\u69e4\\u0100dl\\u1463\\u3414e;\\u6323\\u0100;e\\u341c\\u341d\\u6aaa\\u0100;s\\u3422\\u3423\\u6aac;\\uc000\\u2aac\\ufe00\\u0180flp\\u342e\\u3433\\u3442tcy;\\u444c\\u0100;b\\u3438\\u3439\\u402f\\u0100;a\\u343e\\u343f\\u69c4r;\\u633ff;\\uc000\\ud835\\udd64a\\u0100dr\\u344d\\u0402es\\u0100;u\\u3454\\u3455\\u6660it\\xbb\\u3455\\u0180csu\\u3460\\u3479\\u349f\\u0100au\\u3465\\u346fp\\u0100;s\\u1188\\u346b;\\uc000\\u2293\\ufe00p\\u0100;s\\u11b4\\u3475;\\uc000\\u2294\\ufe00u\\u0100bp\\u347f\\u348f\\u0180;es\\u1197\\u119c\\u3486et\\u0100;e\\u1197\\u348d\\xf1\\u119d\\u0180;es\\u11a8\\u11ad\\u3496et\\u0100;e\\u11a8\\u349d\\xf1\\u11ae\\u0180;af\\u117b\\u34a6\\u05b0r\\u0165\\u34ab\\u05b1\\xbb\\u117car\\xf2\\u1148\\u0200cemt\\u34b9\\u34be\\u34c2\\u34c5r;\\uc000\\ud835\\udcc8tm\\xee\\xf1i\\xec\\u3415ar\\xe6\\u11be\\u0100ar\\u34ce\\u34d5r\\u0100;f\\u34d4\\u17bf\\u6606\\u0100an\\u34da\\u34edight\\u0100ep\\u34e3\\u34eapsilo\\xee\\u1ee0h\\xe9\\u2eafs\\xbb\\u2852\\u0280bcmnp\\u34fb\\u355e\\u1209\\u358b\\u358e\\u0480;Edemnprs\\u350e\\u350f\\u3511\\u3515\\u351e\\u3523\\u352c\\u3531\\u3536\\u6282;\\u6ac5ot;\\u6abd\\u0100;d\\u11da\\u351aot;\\u6ac3ult;\\u6ac1\\u0100Ee\\u3528\\u352a;\\u6acb;\\u628alus;\\u6abfarr;\\u6979\\u0180eiu\\u353d\\u3552\\u3555t\\u0180;en\\u350e\\u3545\\u354bq\\u0100;q\\u11da\\u350feq\\u0100;q\\u352b\\u3528m;\\u6ac7\\u0100bp\\u355a\\u355c;\\u6ad5;\\u6ad3c\\u0300;acens\\u11ed\\u356c\\u3572\\u3579\\u357b\\u3326ppro\\xf8\\u32faurlye\\xf1\\u11fe\\xf1\\u11f3\\u0180aes\\u3582\\u3588\\u331bppro\\xf8\\u331aq\\xf1\\u3317g;\\u666a\\u0680123;Edehlmnps\\u35a9\\u35ac\\u35af\\u121c\\u35b2\\u35b4\\u35c0\\u35c9\\u35d5\\u35da\\u35df\\u35e8\\u35ed\\u803b\\xb9\\u40b9\\u803b\\xb2\\u40b2\\u803b\\xb3\\u40b3;\\u6ac6\\u0100os\\u35b9\\u35bct;\\u6abeub;\\u6ad8\\u0100;d\\u1222\\u35c5ot;\\u6ac4s\\u0100ou\\u35cf\\u35d2l;\\u67c9b;\\u6ad7arr;\\u697bult;\\u6ac2\\u0100Ee\\u35e4\\u35e6;\\u6acc;\\u628blus;\\u6ac0\\u0180eiu\\u35f4\\u3609\\u360ct\\u0180;en\\u121c\\u35fc\\u3602q\\u0100;q\\u1222\\u35b2eq\\u0100;q\\u35e7\\u35e4m;\\u6ac8\\u0100bp\\u3611\\u3613;\\u6ad4;\\u6ad6\\u0180Aan\\u361c\\u3620\\u362drr;\\u61d9r\\u0100hr\\u3626\\u3628\\xeb\\u222e\\u0100;o\\u0a2b\\u0a29war;\\u692alig\\u803b\\xdf\\u40df\\u0be1\\u3651\\u365d\\u3660\\u12ce\\u3673\\u3679\\0\\u367e\\u36c2\\0\\0\\0\\0\\0\\u36db\\u3703\\0\\u3709\\u376c\\0\\0\\0\\u3787\\u0272\\u3656\\0\\0\\u365bget;\\u6316;\\u43c4r\\xeb\\u0e5f\\u0180aey\\u3666\\u366b\\u3670ron;\\u4165dil;\\u4163;\\u4442lrec;\\u6315r;\\uc000\\ud835\\udd31\\u0200eiko\\u3686\\u369d\\u36b5\\u36bc\\u01f2\\u368b\\0\\u3691e\\u01004f\\u1284\\u1281a\\u0180;sv\\u3698\\u3699\\u369b\\u43b8ym;\\u43d1\\u0100cn\\u36a2\\u36b2k\\u0100as\\u36a8\\u36aeppro\\xf8\\u12c1im\\xbb\\u12acs\\xf0\\u129e\\u0100as\\u36ba\\u36ae\\xf0\\u12c1rn\\u803b\\xfe\\u40fe\\u01ec\\u031f\\u36c6\\u22e7es\\u8180\\xd7;bd\\u36cf\\u36d0\\u36d8\\u40d7\\u0100;a\\u190f\\u36d5r;\\u6a31;\\u6a30\\u0180eps\\u36e1\\u36e3\\u3700\\xe1\\u2a4d\\u0200;bcf\\u0486\\u36ec\\u36f0\\u36f4ot;\\u6336ir;\\u6af1\\u0100;o\\u36f9\\u36fc\\uc000\\ud835\\udd65rk;\\u6ada\\xe1\\u3362rime;\\u6034\\u0180aip\\u370f\\u3712\\u3764d\\xe5\\u1248\\u0380adempst\\u3721\\u374d\\u3740\\u3751\\u3757\\u375c\\u375fngle\\u0280;dlqr\\u3730\\u3731\\u3736\\u3740\\u3742\\u65b5own\\xbb\\u1dbbeft\\u0100;e\\u2800\\u373e\\xf1\\u092e;\\u625cight\\u0100;e\\u32aa\\u374b\\xf1\\u105aot;\\u65ecinus;\\u6a3alus;\\u6a39b;\\u69cdime;\\u6a3bezium;\\u63e2\\u0180cht\\u3772\\u377d\\u3781\\u0100ry\\u3777\\u377b;\\uc000\\ud835\\udcc9;\\u4446cy;\\u445brok;\\u4167\\u0100io\\u378b\\u378ex\\xf4\\u1777head\\u0100lr\\u3797\\u37a0eftarro\\xf7\\u084fightarrow\\xbb\\u0f5d\\u0900AHabcdfghlmoprstuw\\u37d0\\u37d3\\u37d7\\u37e4\\u37f0\\u37fc\\u380e\\u381c\\u3823\\u3834\\u3851\\u385d\\u386b\\u38a9\\u38cc\\u38d2\\u38ea\\u38f6r\\xf2\\u03edar;\\u6963\\u0100cr\\u37dc\\u37e2ute\\u803b\\xfa\\u40fa\\xf2\\u1150r\\u01e3\\u37ea\\0\\u37edy;\\u445eve;\\u416d\\u0100iy\\u37f5\\u37farc\\u803b\\xfb\\u40fb;\\u4443\\u0180abh\\u3803\\u3806\\u380br\\xf2\\u13adlac;\\u4171a\\xf2\\u13c3\\u0100ir\\u3813\\u3818sht;\\u697e;\\uc000\\ud835\\udd32rave\\u803b\\xf9\\u40f9\\u0161\\u3827\\u3831r\\u0100lr\\u382c\\u382e\\xbb\\u0957\\xbb\\u1083lk;\\u6580\\u0100ct\\u3839\\u384d\\u026f\\u383f\\0\\0\\u384arn\\u0100;e\\u3845\\u3846\\u631cr\\xbb\\u3846op;\\u630fri;\\u65f8\\u0100al\\u3856\\u385acr;\\u416b\\u80bb\\xa8\\u0349\\u0100gp\\u3862\\u3866on;\\u4173f;\\uc000\\ud835\\udd66\\u0300adhlsu\\u114b\\u3878\\u387d\\u1372\\u3891\\u38a0own\\xe1\\u13b3arpoon\\u0100lr\\u3888\\u388cef\\xf4\\u382digh\\xf4\\u382fi\\u0180;hl\\u3899\\u389a\\u389c\\u43c5\\xbb\\u13faon\\xbb\\u389aparrows;\\u61c8\\u0180cit\\u38b0\\u38c4\\u38c8\\u026f\\u38b6\\0\\0\\u38c1rn\\u0100;e\\u38bc\\u38bd\\u631dr\\xbb\\u38bdop;\\u630eng;\\u416fri;\\u65f9cr;\\uc000\\ud835\\udcca\\u0180dir\\u38d9\\u38dd\\u38e2ot;\\u62f0lde;\\u4169i\\u0100;f\\u3730\\u38e8\\xbb\\u1813\\u0100am\\u38ef\\u38f2r\\xf2\\u38a8l\\u803b\\xfc\\u40fcangle;\\u69a7\\u0780ABDacdeflnoprsz\\u391c\\u391f\\u3929\\u392d\\u39b5\\u39b8\\u39bd\\u39df\\u39e4\\u39e8\\u39f3\\u39f9\\u39fd\\u3a01\\u3a20r\\xf2\\u03f7ar\\u0100;v\\u3926\\u3927\\u6ae8;\\u6ae9as\\xe8\\u03e1\\u0100nr\\u3932\\u3937grt;\\u699c\\u0380eknprst\\u34e3\\u3946\\u394b\\u3952\\u395d\\u3964\\u3996app\\xe1\\u2415othin\\xe7\\u1e96\\u0180hir\\u34eb\\u2ec8\\u3959op\\xf4\\u2fb5\\u0100;h\\u13b7\\u3962\\xef\\u318d\\u0100iu\\u3969\\u396dgm\\xe1\\u33b3\\u0100bp\\u3972\\u3984setneq\\u0100;q\\u397d\\u3980\\uc000\\u228a\\ufe00;\\uc000\\u2acb\\ufe00setneq\\u0100;q\\u398f\\u3992\\uc000\\u228b\\ufe00;\\uc000\\u2acc\\ufe00\\u0100hr\\u399b\\u399fet\\xe1\\u369ciangle\\u0100lr\\u39aa\\u39afeft\\xbb\\u0925ight\\xbb\\u1051y;\\u4432ash\\xbb\\u1036\\u0180elr\\u39c4\\u39d2\\u39d7\\u0180;be\\u2dea\\u39cb\\u39cfar;\\u62bbq;\\u625alip;\\u62ee\\u0100bt\\u39dc\\u1468a\\xf2\\u1469r;\\uc000\\ud835\\udd33tr\\xe9\\u39aesu\\u0100bp\\u39ef\\u39f1\\xbb\\u0d1c\\xbb\\u0d59pf;\\uc000\\ud835\\udd67ro\\xf0\\u0efbtr\\xe9\\u39b4\\u0100cu\\u3a06\\u3a0br;\\uc000\\ud835\\udccb\\u0100bp\\u3a10\\u3a18n\\u0100Ee\\u3980\\u3a16\\xbb\\u397en\\u0100Ee\\u3992\\u3a1e\\xbb\\u3990igzag;\\u699a\\u0380cefoprs\\u3a36\\u3a3b\\u3a56\\u3a5b\\u3a54\\u3a61\\u3a6airc;\\u4175\\u0100di\\u3a40\\u3a51\\u0100bg\\u3a45\\u3a49ar;\\u6a5fe\\u0100;q\\u15fa\\u3a4f;\\u6259erp;\\u6118r;\\uc000\\ud835\\udd34pf;\\uc000\\ud835\\udd68\\u0100;e\\u1479\\u3a66at\\xe8\\u1479cr;\\uc000\\ud835\\udccc\\u0ae3\\u178e\\u3a87\\0\\u3a8b\\0\\u3a90\\u3a9b\\0\\0\\u3a9d\\u3aa8\\u3aab\\u3aaf\\0\\0\\u3ac3\\u3ace\\0\\u3ad8\\u17dc\\u17dftr\\xe9\\u17d1r;\\uc000\\ud835\\udd35\\u0100Aa\\u3a94\\u3a97r\\xf2\\u03c3r\\xf2\\u09f6;\\u43be\\u0100Aa\\u3aa1\\u3aa4r\\xf2\\u03b8r\\xf2\\u09eba\\xf0\\u2713is;\\u62fb\\u0180dpt\\u17a4\\u3ab5\\u3abe\\u0100fl\\u3aba\\u17a9;\\uc000\\ud835\\udd69im\\xe5\\u17b2\\u0100Aa\\u3ac7\\u3acar\\xf2\\u03cer\\xf2\\u0a01\\u0100cq\\u3ad2\\u17b8r;\\uc000\\ud835\\udccd\\u0100pt\\u17d6\\u3adcr\\xe9\\u17d4\\u0400acefiosu\\u3af0\\u3afd\\u3b08\\u3b0c\\u3b11\\u3b15\\u3b1b\\u3b21c\\u0100uy\\u3af6\\u3afbte\\u803b\\xfd\\u40fd;\\u444f\\u0100iy\\u3b02\\u3b06rc;\\u4177;\\u444bn\\u803b\\xa5\\u40a5r;\\uc000\\ud835\\udd36cy;\\u4457pf;\\uc000\\ud835\\udd6acr;\\uc000\\ud835\\udcce\\u0100cm\\u3b26\\u3b29y;\\u444el\\u803b\\xff\\u40ff\\u0500acdefhiosw\\u3b42\\u3b48\\u3b54\\u3b58\\u3b64\\u3b69\\u3b6d\\u3b74\\u3b7a\\u3b80cute;\\u417a\\u0100ay\\u3b4d\\u3b52ron;\\u417e;\\u4437ot;\\u417c\\u0100et\\u3b5d\\u3b61tr\\xe6\\u155fa;\\u43b6r;\\uc000\\ud835\\udd37cy;\\u4436grarr;\\u61ddpf;\\uc000\\ud835\\udd6bcr;\\uc000\\ud835\\udccf\\u0100jn\\u3b85\\u3b87;\\u600dj;\\u600c\"\n    .split(\"\")\n    .map(function (c) { return c.charCodeAt(0); }));\n//# sourceMappingURL=decode-data-html.js.map","\"use strict\";\n// Generated using scripts/write-decode-map.ts\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = new Uint16Array(\n// prettier-ignore\n\"\\u0200aglq\\t\\x15\\x18\\x1b\\u026d\\x0f\\0\\0\\x12p;\\u4026os;\\u4027t;\\u403et;\\u403cuot;\\u4022\"\n    .split(\"\")\n    .map(function (c) { return c.charCodeAt(0); }));\n//# sourceMappingURL=decode-data-xml.js.map","\"use strict\";\n// Generated using scripts/write-encode-map.ts\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction restoreDiff(arr) {\n    for (var i = 1; i < arr.length; i++) {\n        arr[i][0] += arr[i - 1][0] + 1;\n    }\n    return arr;\n}\n// prettier-ignore\nexports.default = new Map(/* #__PURE__ */ restoreDiff([[9, \"&Tab;\"], [0, \"&NewLine;\"], [22, \"&excl;\"], [0, \"&quot;\"], [0, \"&num;\"], [0, \"&dollar;\"], [0, \"&percnt;\"], [0, \"&amp;\"], [0, \"&apos;\"], [0, \"&lpar;\"], [0, \"&rpar;\"], [0, \"&ast;\"], [0, \"&plus;\"], [0, \"&comma;\"], [1, \"&period;\"], [0, \"&sol;\"], [10, \"&colon;\"], [0, \"&semi;\"], [0, { v: \"&lt;\", n: 8402, o: \"&nvlt;\" }], [0, { v: \"&equals;\", n: 8421, o: \"&bne;\" }], [0, { v: \"&gt;\", n: 8402, o: \"&nvgt;\" }], [0, \"&quest;\"], [0, \"&commat;\"], [26, \"&lbrack;\"], [0, \"&bsol;\"], [0, \"&rbrack;\"], [0, \"&Hat;\"], [0, \"&lowbar;\"], [0, \"&DiacriticalGrave;\"], [5, { n: 106, o: \"&fjlig;\" }], [20, \"&lbrace;\"], [0, \"&verbar;\"], [0, \"&rbrace;\"], [34, \"&nbsp;\"], [0, \"&iexcl;\"], [0, \"&cent;\"], [0, \"&pound;\"], [0, \"&curren;\"], [0, \"&yen;\"], [0, \"&brvbar;\"], [0, \"&sect;\"], [0, \"&die;\"], [0, \"&copy;\"], [0, \"&ordf;\"], [0, \"&laquo;\"], [0, \"&not;\"], [0, \"&shy;\"], [0, \"&circledR;\"], [0, \"&macr;\"], [0, \"&deg;\"], [0, \"&PlusMinus;\"], [0, \"&sup2;\"], [0, \"&sup3;\"], [0, \"&acute;\"], [0, \"&micro;\"], [0, \"&para;\"], [0, \"&centerdot;\"], [0, \"&cedil;\"], [0, \"&sup1;\"], [0, \"&ordm;\"], [0, \"&raquo;\"], [0, \"&frac14;\"], [0, \"&frac12;\"], [0, \"&frac34;\"], [0, \"&iquest;\"], [0, \"&Agrave;\"], [0, \"&Aacute;\"], [0, \"&Acirc;\"], [0, \"&Atilde;\"], [0, \"&Auml;\"], [0, \"&angst;\"], [0, \"&AElig;\"], [0, \"&Ccedil;\"], [0, \"&Egrave;\"], [0, \"&Eacute;\"], [0, \"&Ecirc;\"], [0, \"&Euml;\"], [0, \"&Igrave;\"], [0, \"&Iacute;\"], [0, \"&Icirc;\"], [0, \"&Iuml;\"], [0, \"&ETH;\"], [0, \"&Ntilde;\"], [0, \"&Ograve;\"], [0, \"&Oacute;\"], [0, \"&Ocirc;\"], [0, \"&Otilde;\"], [0, \"&Ouml;\"], [0, \"&times;\"], [0, \"&Oslash;\"], [0, \"&Ugrave;\"], [0, \"&Uacute;\"], [0, \"&Ucirc;\"], [0, \"&Uuml;\"], [0, \"&Yacute;\"], [0, \"&THORN;\"], [0, \"&szlig;\"], [0, \"&agrave;\"], [0, \"&aacute;\"], [0, \"&acirc;\"], [0, \"&atilde;\"], [0, \"&auml;\"], [0, \"&aring;\"], [0, \"&aelig;\"], [0, \"&ccedil;\"], [0, \"&egrave;\"], [0, \"&eacute;\"], [0, \"&ecirc;\"], [0, \"&euml;\"], [0, \"&igrave;\"], [0, \"&iacute;\"], [0, \"&icirc;\"], [0, \"&iuml;\"], [0, \"&eth;\"], [0, \"&ntilde;\"], [0, \"&ograve;\"], [0, \"&oacute;\"], [0, \"&ocirc;\"], [0, \"&otilde;\"], [0, \"&ouml;\"], [0, \"&div;\"], [0, \"&oslash;\"], [0, \"&ugrave;\"], [0, \"&uacute;\"], [0, \"&ucirc;\"], [0, \"&uuml;\"], [0, \"&yacute;\"], [0, \"&thorn;\"], [0, \"&yuml;\"], [0, \"&Amacr;\"], [0, \"&amacr;\"], [0, \"&Abreve;\"], [0, \"&abreve;\"], [0, \"&Aogon;\"], [0, \"&aogon;\"], [0, \"&Cacute;\"], [0, \"&cacute;\"], [0, \"&Ccirc;\"], [0, \"&ccirc;\"], [0, \"&Cdot;\"], [0, \"&cdot;\"], [0, \"&Ccaron;\"], [0, \"&ccaron;\"], [0, \"&Dcaron;\"], [0, \"&dcaron;\"], [0, \"&Dstrok;\"], [0, \"&dstrok;\"], [0, \"&Emacr;\"], [0, \"&emacr;\"], [2, \"&Edot;\"], [0, \"&edot;\"], [0, \"&Eogon;\"], [0, \"&eogon;\"], [0, \"&Ecaron;\"], [0, \"&ecaron;\"], [0, \"&Gcirc;\"], [0, \"&gcirc;\"], [0, \"&Gbreve;\"], [0, \"&gbreve;\"], [0, \"&Gdot;\"], [0, \"&gdot;\"], [0, \"&Gcedil;\"], [1, \"&Hcirc;\"], [0, \"&hcirc;\"], [0, \"&Hstrok;\"], [0, \"&hstrok;\"], [0, \"&Itilde;\"], [0, \"&itilde;\"], [0, \"&Imacr;\"], [0, \"&imacr;\"], [2, \"&Iogon;\"], [0, \"&iogon;\"], [0, \"&Idot;\"], [0, \"&imath;\"], [0, \"&IJlig;\"], [0, \"&ijlig;\"], [0, \"&Jcirc;\"], [0, \"&jcirc;\"], [0, \"&Kcedil;\"], [0, \"&kcedil;\"], [0, \"&kgreen;\"], [0, \"&Lacute;\"], [0, \"&lacute;\"], [0, \"&Lcedil;\"], [0, \"&lcedil;\"], [0, \"&Lcaron;\"], [0, \"&lcaron;\"], [0, \"&Lmidot;\"], [0, \"&lmidot;\"], [0, \"&Lstrok;\"], [0, \"&lstrok;\"], [0, \"&Nacute;\"], [0, \"&nacute;\"], [0, \"&Ncedil;\"], [0, \"&ncedil;\"], [0, \"&Ncaron;\"], [0, \"&ncaron;\"], [0, \"&napos;\"], [0, \"&ENG;\"], [0, \"&eng;\"], [0, \"&Omacr;\"], [0, \"&omacr;\"], [2, \"&Odblac;\"], [0, \"&odblac;\"], [0, \"&OElig;\"], [0, \"&oelig;\"], [0, \"&Racute;\"], [0, \"&racute;\"], [0, \"&Rcedil;\"], [0, \"&rcedil;\"], [0, \"&Rcaron;\"], [0, \"&rcaron;\"], [0, \"&Sacute;\"], [0, \"&sacute;\"], [0, \"&Scirc;\"], [0, \"&scirc;\"], [0, \"&Scedil;\"], [0, \"&scedil;\"], [0, \"&Scaron;\"], [0, \"&scaron;\"], [0, \"&Tcedil;\"], [0, \"&tcedil;\"], [0, \"&Tcaron;\"], [0, \"&tcaron;\"], [0, \"&Tstrok;\"], [0, \"&tstrok;\"], [0, \"&Utilde;\"], [0, \"&utilde;\"], [0, \"&Umacr;\"], [0, \"&umacr;\"], [0, \"&Ubreve;\"], [0, \"&ubreve;\"], [0, \"&Uring;\"], [0, \"&uring;\"], [0, \"&Udblac;\"], [0, \"&udblac;\"], [0, \"&Uogon;\"], [0, \"&uogon;\"], [0, \"&Wcirc;\"], [0, \"&wcirc;\"], [0, \"&Ycirc;\"], [0, \"&ycirc;\"], [0, \"&Yuml;\"], [0, \"&Zacute;\"], [0, \"&zacute;\"], [0, \"&Zdot;\"], [0, \"&zdot;\"], [0, \"&Zcaron;\"], [0, \"&zcaron;\"], [19, \"&fnof;\"], [34, \"&imped;\"], [63, \"&gacute;\"], [65, \"&jmath;\"], [142, \"&circ;\"], [0, \"&caron;\"], [16, \"&breve;\"], [0, \"&DiacriticalDot;\"], [0, \"&ring;\"], [0, \"&ogon;\"], [0, \"&DiacriticalTilde;\"], [0, \"&dblac;\"], [51, \"&DownBreve;\"], [127, \"&Alpha;\"], [0, \"&Beta;\"], [0, \"&Gamma;\"], [0, \"&Delta;\"], [0, \"&Epsilon;\"], [0, \"&Zeta;\"], [0, \"&Eta;\"], [0, \"&Theta;\"], [0, \"&Iota;\"], [0, \"&Kappa;\"], [0, \"&Lambda;\"], [0, \"&Mu;\"], [0, \"&Nu;\"], [0, \"&Xi;\"], [0, \"&Omicron;\"], [0, \"&Pi;\"], [0, \"&Rho;\"], [1, \"&Sigma;\"], [0, \"&Tau;\"], [0, \"&Upsilon;\"], [0, \"&Phi;\"], [0, \"&Chi;\"], [0, \"&Psi;\"], [0, \"&ohm;\"], [7, \"&alpha;\"], [0, \"&beta;\"], [0, \"&gamma;\"], [0, \"&delta;\"], [0, \"&epsi;\"], [0, \"&zeta;\"], [0, \"&eta;\"], [0, \"&theta;\"], [0, \"&iota;\"], [0, \"&kappa;\"], [0, \"&lambda;\"], [0, \"&mu;\"], [0, \"&nu;\"], [0, \"&xi;\"], [0, \"&omicron;\"], [0, \"&pi;\"], [0, \"&rho;\"], [0, \"&sigmaf;\"], [0, \"&sigma;\"], [0, \"&tau;\"], [0, \"&upsi;\"], [0, \"&phi;\"], [0, \"&chi;\"], [0, \"&psi;\"], [0, \"&omega;\"], [7, \"&thetasym;\"], [0, \"&Upsi;\"], [2, \"&phiv;\"], [0, \"&piv;\"], [5, \"&Gammad;\"], [0, \"&digamma;\"], [18, \"&kappav;\"], [0, \"&rhov;\"], [3, \"&epsiv;\"], [0, \"&backepsilon;\"], [10, \"&IOcy;\"], [0, \"&DJcy;\"], [0, \"&GJcy;\"], [0, \"&Jukcy;\"], [0, \"&DScy;\"], [0, \"&Iukcy;\"], [0, \"&YIcy;\"], [0, \"&Jsercy;\"], [0, \"&LJcy;\"], [0, \"&NJcy;\"], [0, \"&TSHcy;\"], [0, \"&KJcy;\"], [1, \"&Ubrcy;\"], [0, \"&DZcy;\"], [0, \"&Acy;\"], [0, \"&Bcy;\"], [0, \"&Vcy;\"], [0, \"&Gcy;\"], [0, \"&Dcy;\"], [0, \"&IEcy;\"], [0, \"&ZHcy;\"], [0, \"&Zcy;\"], [0, \"&Icy;\"], [0, \"&Jcy;\"], [0, \"&Kcy;\"], [0, \"&Lcy;\"], [0, \"&Mcy;\"], [0, \"&Ncy;\"], [0, \"&Ocy;\"], [0, \"&Pcy;\"], [0, \"&Rcy;\"], [0, \"&Scy;\"], [0, \"&Tcy;\"], [0, \"&Ucy;\"], [0, \"&Fcy;\"], [0, \"&KHcy;\"], [0, \"&TScy;\"], [0, \"&CHcy;\"], [0, \"&SHcy;\"], [0, \"&SHCHcy;\"], [0, \"&HARDcy;\"], [0, \"&Ycy;\"], [0, \"&SOFTcy;\"], [0, \"&Ecy;\"], [0, \"&YUcy;\"], [0, \"&YAcy;\"], [0, \"&acy;\"], [0, \"&bcy;\"], [0, \"&vcy;\"], [0, \"&gcy;\"], [0, \"&dcy;\"], [0, \"&iecy;\"], [0, \"&zhcy;\"], [0, \"&zcy;\"], [0, \"&icy;\"], [0, \"&jcy;\"], [0, \"&kcy;\"], [0, \"&lcy;\"], [0, \"&mcy;\"], [0, \"&ncy;\"], [0, \"&ocy;\"], [0, \"&pcy;\"], [0, \"&rcy;\"], [0, \"&scy;\"], [0, \"&tcy;\"], [0, \"&ucy;\"], [0, \"&fcy;\"], [0, \"&khcy;\"], [0, \"&tscy;\"], [0, \"&chcy;\"], [0, \"&shcy;\"], [0, \"&shchcy;\"], [0, \"&hardcy;\"], [0, \"&ycy;\"], [0, \"&softcy;\"], [0, \"&ecy;\"], [0, \"&yucy;\"], [0, \"&yacy;\"], [1, \"&iocy;\"], [0, \"&djcy;\"], [0, \"&gjcy;\"], [0, \"&jukcy;\"], [0, \"&dscy;\"], [0, \"&iukcy;\"], [0, \"&yicy;\"], [0, \"&jsercy;\"], [0, \"&ljcy;\"], [0, \"&njcy;\"], [0, \"&tshcy;\"], [0, \"&kjcy;\"], [1, \"&ubrcy;\"], [0, \"&dzcy;\"], [7074, \"&ensp;\"], [0, \"&emsp;\"], [0, \"&emsp13;\"], [0, \"&emsp14;\"], [1, \"&numsp;\"], [0, \"&puncsp;\"], [0, \"&ThinSpace;\"], [0, \"&hairsp;\"], [0, \"&NegativeMediumSpace;\"], [0, \"&zwnj;\"], [0, \"&zwj;\"], [0, \"&lrm;\"], [0, \"&rlm;\"], [0, \"&dash;\"], [2, \"&ndash;\"], [0, \"&mdash;\"], [0, \"&horbar;\"], [0, \"&Verbar;\"], [1, \"&lsquo;\"], [0, \"&CloseCurlyQuote;\"], [0, \"&lsquor;\"], [1, \"&ldquo;\"], [0, \"&CloseCurlyDoubleQuote;\"], [0, \"&bdquo;\"], [1, \"&dagger;\"], [0, \"&Dagger;\"], [0, \"&bull;\"], [2, \"&nldr;\"], [0, \"&hellip;\"], [9, \"&permil;\"], [0, \"&pertenk;\"], [0, \"&prime;\"], [0, \"&Prime;\"], [0, \"&tprime;\"], [0, \"&backprime;\"], [3, \"&lsaquo;\"], [0, \"&rsaquo;\"], [3, \"&oline;\"], [2, \"&caret;\"], [1, \"&hybull;\"], [0, \"&frasl;\"], [10, \"&bsemi;\"], [7, \"&qprime;\"], [7, { v: \"&MediumSpace;\", n: 8202, o: \"&ThickSpace;\" }], [0, \"&NoBreak;\"], [0, \"&af;\"], [0, \"&InvisibleTimes;\"], [0, \"&ic;\"], [72, \"&euro;\"], [46, \"&tdot;\"], [0, \"&DotDot;\"], [37, \"&complexes;\"], [2, \"&incare;\"], [4, \"&gscr;\"], [0, \"&hamilt;\"], [0, \"&Hfr;\"], [0, \"&Hopf;\"], [0, \"&planckh;\"], [0, \"&hbar;\"], [0, \"&imagline;\"], [0, \"&Ifr;\"], [0, \"&lagran;\"], [0, \"&ell;\"], [1, \"&naturals;\"], [0, \"&numero;\"], [0, \"&copysr;\"], [0, \"&weierp;\"], [0, \"&Popf;\"], [0, \"&Qopf;\"], [0, \"&realine;\"], [0, \"&real;\"], [0, \"&reals;\"], [0, \"&rx;\"], [3, \"&trade;\"], [1, \"&integers;\"], [2, \"&mho;\"], [0, \"&zeetrf;\"], [0, \"&iiota;\"], [2, \"&bernou;\"], [0, \"&Cayleys;\"], [1, \"&escr;\"], [0, \"&Escr;\"], [0, \"&Fouriertrf;\"], [1, \"&Mellintrf;\"], [0, \"&order;\"], [0, \"&alefsym;\"], [0, \"&beth;\"], [0, \"&gimel;\"], [0, \"&daleth;\"], [12, \"&CapitalDifferentialD;\"], [0, \"&dd;\"], [0, \"&ee;\"], [0, \"&ii;\"], [10, \"&frac13;\"], [0, \"&frac23;\"], [0, \"&frac15;\"], [0, \"&frac25;\"], [0, \"&frac35;\"], [0, \"&frac45;\"], [0, \"&frac16;\"], [0, \"&frac56;\"], [0, \"&frac18;\"], [0, \"&frac38;\"], [0, \"&frac58;\"], [0, \"&frac78;\"], [49, \"&larr;\"], [0, \"&ShortUpArrow;\"], [0, \"&rarr;\"], [0, \"&darr;\"], [0, \"&harr;\"], [0, \"&updownarrow;\"], [0, \"&nwarr;\"], [0, \"&nearr;\"], [0, \"&LowerRightArrow;\"], [0, \"&LowerLeftArrow;\"], [0, \"&nlarr;\"], [0, \"&nrarr;\"], [1, { v: \"&rarrw;\", n: 824, o: \"&nrarrw;\" }], [0, \"&Larr;\"], [0, \"&Uarr;\"], [0, \"&Rarr;\"], [0, \"&Darr;\"], [0, \"&larrtl;\"], [0, \"&rarrtl;\"], [0, \"&LeftTeeArrow;\"], [0, \"&mapstoup;\"], [0, \"&map;\"], [0, \"&DownTeeArrow;\"], [1, \"&hookleftarrow;\"], [0, \"&hookrightarrow;\"], [0, \"&larrlp;\"], [0, \"&looparrowright;\"], [0, \"&harrw;\"], [0, \"&nharr;\"], [1, \"&lsh;\"], [0, \"&rsh;\"], [0, \"&ldsh;\"], [0, \"&rdsh;\"], [1, \"&crarr;\"], [0, \"&cularr;\"], [0, \"&curarr;\"], [2, \"&circlearrowleft;\"], [0, \"&circlearrowright;\"], [0, \"&leftharpoonup;\"], [0, \"&DownLeftVector;\"], [0, \"&RightUpVector;\"], [0, \"&LeftUpVector;\"], [0, \"&rharu;\"], [0, \"&DownRightVector;\"], [0, \"&dharr;\"], [0, \"&dharl;\"], [0, \"&RightArrowLeftArrow;\"], [0, \"&udarr;\"], [0, \"&LeftArrowRightArrow;\"], [0, \"&leftleftarrows;\"], [0, \"&upuparrows;\"], [0, \"&rightrightarrows;\"], [0, \"&ddarr;\"], [0, \"&leftrightharpoons;\"], [0, \"&Equilibrium;\"], [0, \"&nlArr;\"], [0, \"&nhArr;\"], [0, \"&nrArr;\"], [0, \"&DoubleLeftArrow;\"], [0, \"&DoubleUpArrow;\"], [0, \"&DoubleRightArrow;\"], [0, \"&dArr;\"], [0, \"&DoubleLeftRightArrow;\"], [0, \"&DoubleUpDownArrow;\"], [0, \"&nwArr;\"], [0, \"&neArr;\"], [0, \"&seArr;\"], [0, \"&swArr;\"], [0, \"&lAarr;\"], [0, \"&rAarr;\"], [1, \"&zigrarr;\"], [6, \"&larrb;\"], [0, \"&rarrb;\"], [15, \"&DownArrowUpArrow;\"], [7, \"&loarr;\"], [0, \"&roarr;\"], [0, \"&hoarr;\"], [0, \"&forall;\"], [0, \"&comp;\"], [0, { v: \"&part;\", n: 824, o: \"&npart;\" }], [0, \"&exist;\"], [0, \"&nexist;\"], [0, \"&empty;\"], [1, \"&Del;\"], [0, \"&Element;\"], [0, \"&NotElement;\"], [1, \"&ni;\"], [0, \"&notni;\"], [2, \"&prod;\"], [0, \"&coprod;\"], [0, \"&sum;\"], [0, \"&minus;\"], [0, \"&MinusPlus;\"], [0, \"&dotplus;\"], [1, \"&Backslash;\"], [0, \"&lowast;\"], [0, \"&compfn;\"], [1, \"&radic;\"], [2, \"&prop;\"], [0, \"&infin;\"], [0, \"&angrt;\"], [0, { v: \"&ang;\", n: 8402, o: \"&nang;\" }], [0, \"&angmsd;\"], [0, \"&angsph;\"], [0, \"&mid;\"], [0, \"&nmid;\"], [0, \"&DoubleVerticalBar;\"], [0, \"&NotDoubleVerticalBar;\"], [0, \"&and;\"], [0, \"&or;\"], [0, { v: \"&cap;\", n: 65024, o: \"&caps;\" }], [0, { v: \"&cup;\", n: 65024, o: \"&cups;\" }], [0, \"&int;\"], [0, \"&Int;\"], [0, \"&iiint;\"], [0, \"&conint;\"], [0, \"&Conint;\"], [0, \"&Cconint;\"], [0, \"&cwint;\"], [0, \"&ClockwiseContourIntegral;\"], [0, \"&awconint;\"], [0, \"&there4;\"], [0, \"&becaus;\"], [0, \"&ratio;\"], [0, \"&Colon;\"], [0, \"&dotminus;\"], [1, \"&mDDot;\"], [0, \"&homtht;\"], [0, { v: \"&sim;\", n: 8402, o: \"&nvsim;\" }], [0, { v: \"&backsim;\", n: 817, o: \"&race;\" }], [0, { v: \"&ac;\", n: 819, o: \"&acE;\" }], [0, \"&acd;\"], [0, \"&VerticalTilde;\"], [0, \"&NotTilde;\"], [0, { v: \"&eqsim;\", n: 824, o: \"&nesim;\" }], [0, \"&sime;\"], [0, \"&NotTildeEqual;\"], [0, \"&cong;\"], [0, \"&simne;\"], [0, \"&ncong;\"], [0, \"&ap;\"], [0, \"&nap;\"], [0, \"&ape;\"], [0, { v: \"&apid;\", n: 824, o: \"&napid;\" }], [0, \"&backcong;\"], [0, { v: \"&asympeq;\", n: 8402, o: \"&nvap;\" }], [0, { v: \"&bump;\", n: 824, o: \"&nbump;\" }], [0, { v: \"&bumpe;\", n: 824, o: \"&nbumpe;\" }], [0, { v: \"&doteq;\", n: 824, o: \"&nedot;\" }], [0, \"&doteqdot;\"], [0, \"&efDot;\"], [0, \"&erDot;\"], [0, \"&Assign;\"], [0, \"&ecolon;\"], [0, \"&ecir;\"], [0, \"&circeq;\"], [1, \"&wedgeq;\"], [0, \"&veeeq;\"], [1, \"&triangleq;\"], [2, \"&equest;\"], [0, \"&ne;\"], [0, { v: \"&Congruent;\", n: 8421, o: \"&bnequiv;\" }], [0, \"&nequiv;\"], [1, { v: \"&le;\", n: 8402, o: \"&nvle;\" }], [0, { v: \"&ge;\", n: 8402, o: \"&nvge;\" }], [0, { v: \"&lE;\", n: 824, o: \"&nlE;\" }], [0, { v: \"&gE;\", n: 824, o: \"&ngE;\" }], [0, { v: \"&lnE;\", n: 65024, o: \"&lvertneqq;\" }], [0, { v: \"&gnE;\", n: 65024, o: \"&gvertneqq;\" }], [0, { v: \"&ll;\", n: new Map(/* #__PURE__ */ restoreDiff([[824, \"&nLtv;\"], [7577, \"&nLt;\"]])) }], [0, { v: \"&gg;\", n: new Map(/* #__PURE__ */ restoreDiff([[824, \"&nGtv;\"], [7577, \"&nGt;\"]])) }], [0, \"&between;\"], [0, \"&NotCupCap;\"], [0, \"&nless;\"], [0, \"&ngt;\"], [0, \"&nle;\"], [0, \"&nge;\"], [0, \"&lesssim;\"], [0, \"&GreaterTilde;\"], [0, \"&nlsim;\"], [0, \"&ngsim;\"], [0, \"&LessGreater;\"], [0, \"&gl;\"], [0, \"&NotLessGreater;\"], [0, \"&NotGreaterLess;\"], [0, \"&pr;\"], [0, \"&sc;\"], [0, \"&prcue;\"], [0, \"&sccue;\"], [0, \"&PrecedesTilde;\"], [0, { v: \"&scsim;\", n: 824, o: \"&NotSucceedsTilde;\" }], [0, \"&NotPrecedes;\"], [0, \"&NotSucceeds;\"], [0, { v: \"&sub;\", n: 8402, o: \"&NotSubset;\" }], [0, { v: \"&sup;\", n: 8402, o: \"&NotSuperset;\" }], [0, \"&nsub;\"], [0, \"&nsup;\"], [0, \"&sube;\"], [0, \"&supe;\"], [0, \"&NotSubsetEqual;\"], [0, \"&NotSupersetEqual;\"], [0, { v: \"&subne;\", n: 65024, o: \"&varsubsetneq;\" }], [0, { v: \"&supne;\", n: 65024, o: \"&varsupsetneq;\" }], [1, \"&cupdot;\"], [0, \"&UnionPlus;\"], [0, { v: \"&sqsub;\", n: 824, o: \"&NotSquareSubset;\" }], [0, { v: \"&sqsup;\", n: 824, o: \"&NotSquareSuperset;\" }], [0, \"&sqsube;\"], [0, \"&sqsupe;\"], [0, { v: \"&sqcap;\", n: 65024, o: \"&sqcaps;\" }], [0, { v: \"&sqcup;\", n: 65024, o: \"&sqcups;\" }], [0, \"&CirclePlus;\"], [0, \"&CircleMinus;\"], [0, \"&CircleTimes;\"], [0, \"&osol;\"], [0, \"&CircleDot;\"], [0, \"&circledcirc;\"], [0, \"&circledast;\"], [1, \"&circleddash;\"], [0, \"&boxplus;\"], [0, \"&boxminus;\"], [0, \"&boxtimes;\"], [0, \"&dotsquare;\"], [0, \"&RightTee;\"], [0, \"&dashv;\"], [0, \"&DownTee;\"], [0, \"&bot;\"], [1, \"&models;\"], [0, \"&DoubleRightTee;\"], [0, \"&Vdash;\"], [0, \"&Vvdash;\"], [0, \"&VDash;\"], [0, \"&nvdash;\"], [0, \"&nvDash;\"], [0, \"&nVdash;\"], [0, \"&nVDash;\"], [0, \"&prurel;\"], [1, \"&LeftTriangle;\"], [0, \"&RightTriangle;\"], [0, { v: \"&LeftTriangleEqual;\", n: 8402, o: \"&nvltrie;\" }], [0, { v: \"&RightTriangleEqual;\", n: 8402, o: \"&nvrtrie;\" }], [0, \"&origof;\"], [0, \"&imof;\"], [0, \"&multimap;\"], [0, \"&hercon;\"], [0, \"&intcal;\"], [0, \"&veebar;\"], [1, \"&barvee;\"], [0, \"&angrtvb;\"], [0, \"&lrtri;\"], [0, \"&bigwedge;\"], [0, \"&bigvee;\"], [0, \"&bigcap;\"], [0, \"&bigcup;\"], [0, \"&diam;\"], [0, \"&sdot;\"], [0, \"&sstarf;\"], [0, \"&divideontimes;\"], [0, \"&bowtie;\"], [0, \"&ltimes;\"], [0, \"&rtimes;\"], [0, \"&leftthreetimes;\"], [0, \"&rightthreetimes;\"], [0, \"&backsimeq;\"], [0, \"&curlyvee;\"], [0, \"&curlywedge;\"], [0, \"&Sub;\"], [0, \"&Sup;\"], [0, \"&Cap;\"], [0, \"&Cup;\"], [0, \"&fork;\"], [0, \"&epar;\"], [0, \"&lessdot;\"], [0, \"&gtdot;\"], [0, { v: \"&Ll;\", n: 824, o: \"&nLl;\" }], [0, { v: \"&Gg;\", n: 824, o: \"&nGg;\" }], [0, { v: \"&leg;\", n: 65024, o: \"&lesg;\" }], [0, { v: \"&gel;\", n: 65024, o: \"&gesl;\" }], [2, \"&cuepr;\"], [0, \"&cuesc;\"], [0, \"&NotPrecedesSlantEqual;\"], [0, \"&NotSucceedsSlantEqual;\"], [0, \"&NotSquareSubsetEqual;\"], [0, \"&NotSquareSupersetEqual;\"], [2, \"&lnsim;\"], [0, \"&gnsim;\"], [0, \"&precnsim;\"], [0, \"&scnsim;\"], [0, \"&nltri;\"], [0, \"&NotRightTriangle;\"], [0, \"&nltrie;\"], [0, \"&NotRightTriangleEqual;\"], [0, \"&vellip;\"], [0, \"&ctdot;\"], [0, \"&utdot;\"], [0, \"&dtdot;\"], [0, \"&disin;\"], [0, \"&isinsv;\"], [0, \"&isins;\"], [0, { v: \"&isindot;\", n: 824, o: \"&notindot;\" }], [0, \"&notinvc;\"], [0, \"&notinvb;\"], [1, { v: \"&isinE;\", n: 824, o: \"&notinE;\" }], [0, \"&nisd;\"], [0, \"&xnis;\"], [0, \"&nis;\"], [0, \"&notnivc;\"], [0, \"&notnivb;\"], [6, \"&barwed;\"], [0, \"&Barwed;\"], [1, \"&lceil;\"], [0, \"&rceil;\"], [0, \"&LeftFloor;\"], [0, \"&rfloor;\"], [0, \"&drcrop;\"], [0, \"&dlcrop;\"], [0, \"&urcrop;\"], [0, \"&ulcrop;\"], [0, \"&bnot;\"], [1, \"&profline;\"], [0, \"&profsurf;\"], [1, \"&telrec;\"], [0, \"&target;\"], [5, \"&ulcorn;\"], [0, \"&urcorn;\"], [0, \"&dlcorn;\"], [0, \"&drcorn;\"], [2, \"&frown;\"], [0, \"&smile;\"], [9, \"&cylcty;\"], [0, \"&profalar;\"], [7, \"&topbot;\"], [6, \"&ovbar;\"], [1, \"&solbar;\"], [60, \"&angzarr;\"], [51, \"&lmoustache;\"], [0, \"&rmoustache;\"], [2, \"&OverBracket;\"], [0, \"&bbrk;\"], [0, \"&bbrktbrk;\"], [37, \"&OverParenthesis;\"], [0, \"&UnderParenthesis;\"], [0, \"&OverBrace;\"], [0, \"&UnderBrace;\"], [2, \"&trpezium;\"], [4, \"&elinters;\"], [59, \"&blank;\"], [164, \"&circledS;\"], [55, \"&boxh;\"], [1, \"&boxv;\"], [9, \"&boxdr;\"], [3, \"&boxdl;\"], [3, \"&boxur;\"], [3, \"&boxul;\"], [3, \"&boxvr;\"], [7, \"&boxvl;\"], [7, \"&boxhd;\"], [7, \"&boxhu;\"], [7, \"&boxvh;\"], [19, \"&boxH;\"], [0, \"&boxV;\"], [0, \"&boxdR;\"], [0, \"&boxDr;\"], [0, \"&boxDR;\"], [0, \"&boxdL;\"], [0, \"&boxDl;\"], [0, \"&boxDL;\"], [0, \"&boxuR;\"], [0, \"&boxUr;\"], [0, \"&boxUR;\"], [0, \"&boxuL;\"], [0, \"&boxUl;\"], [0, \"&boxUL;\"], [0, \"&boxvR;\"], [0, \"&boxVr;\"], [0, \"&boxVR;\"], [0, \"&boxvL;\"], [0, \"&boxVl;\"], [0, \"&boxVL;\"], [0, \"&boxHd;\"], [0, \"&boxhD;\"], [0, \"&boxHD;\"], [0, \"&boxHu;\"], [0, \"&boxhU;\"], [0, \"&boxHU;\"], [0, \"&boxvH;\"], [0, \"&boxVh;\"], [0, \"&boxVH;\"], [19, \"&uhblk;\"], [3, \"&lhblk;\"], [3, \"&block;\"], [8, \"&blk14;\"], [0, \"&blk12;\"], [0, \"&blk34;\"], [13, \"&square;\"], [8, \"&blacksquare;\"], [0, \"&EmptyVerySmallSquare;\"], [1, \"&rect;\"], [0, \"&marker;\"], [2, \"&fltns;\"], [1, \"&bigtriangleup;\"], [0, \"&blacktriangle;\"], [0, \"&triangle;\"], [2, \"&blacktriangleright;\"], [0, \"&rtri;\"], [3, \"&bigtriangledown;\"], [0, \"&blacktriangledown;\"], [0, \"&dtri;\"], [2, \"&blacktriangleleft;\"], [0, \"&ltri;\"], [6, \"&loz;\"], [0, \"&cir;\"], [32, \"&tridot;\"], [2, \"&bigcirc;\"], [8, \"&ultri;\"], [0, \"&urtri;\"], [0, \"&lltri;\"], [0, \"&EmptySmallSquare;\"], [0, \"&FilledSmallSquare;\"], [8, \"&bigstar;\"], [0, \"&star;\"], [7, \"&phone;\"], [49, \"&female;\"], [1, \"&male;\"], [29, \"&spades;\"], [2, \"&clubs;\"], [1, \"&hearts;\"], [0, \"&diamondsuit;\"], [3, \"&sung;\"], [2, \"&flat;\"], [0, \"&natural;\"], [0, \"&sharp;\"], [163, \"&check;\"], [3, \"&cross;\"], [8, \"&malt;\"], [21, \"&sext;\"], [33, \"&VerticalSeparator;\"], [25, \"&lbbrk;\"], [0, \"&rbbrk;\"], [84, \"&bsolhsub;\"], [0, \"&suphsol;\"], [28, \"&LeftDoubleBracket;\"], [0, \"&RightDoubleBracket;\"], [0, \"&lang;\"], [0, \"&rang;\"], [0, \"&Lang;\"], [0, \"&Rang;\"], [0, \"&loang;\"], [0, \"&roang;\"], [7, \"&longleftarrow;\"], [0, \"&longrightarrow;\"], [0, \"&longleftrightarrow;\"], [0, \"&DoubleLongLeftArrow;\"], [0, \"&DoubleLongRightArrow;\"], [0, \"&DoubleLongLeftRightArrow;\"], [1, \"&longmapsto;\"], [2, \"&dzigrarr;\"], [258, \"&nvlArr;\"], [0, \"&nvrArr;\"], [0, \"&nvHarr;\"], [0, \"&Map;\"], [6, \"&lbarr;\"], [0, \"&bkarow;\"], [0, \"&lBarr;\"], [0, \"&dbkarow;\"], [0, \"&drbkarow;\"], [0, \"&DDotrahd;\"], [0, \"&UpArrowBar;\"], [0, \"&DownArrowBar;\"], [2, \"&Rarrtl;\"], [2, \"&latail;\"], [0, \"&ratail;\"], [0, \"&lAtail;\"], [0, \"&rAtail;\"], [0, \"&larrfs;\"], [0, \"&rarrfs;\"], [0, \"&larrbfs;\"], [0, \"&rarrbfs;\"], [2, \"&nwarhk;\"], [0, \"&nearhk;\"], [0, \"&hksearow;\"], [0, \"&hkswarow;\"], [0, \"&nwnear;\"], [0, \"&nesear;\"], [0, \"&seswar;\"], [0, \"&swnwar;\"], [8, { v: \"&rarrc;\", n: 824, o: \"&nrarrc;\" }], [1, \"&cudarrr;\"], [0, \"&ldca;\"], [0, \"&rdca;\"], [0, \"&cudarrl;\"], [0, \"&larrpl;\"], [2, \"&curarrm;\"], [0, \"&cularrp;\"], [7, \"&rarrpl;\"], [2, \"&harrcir;\"], [0, \"&Uarrocir;\"], [0, \"&lurdshar;\"], [0, \"&ldrushar;\"], [2, \"&LeftRightVector;\"], [0, \"&RightUpDownVector;\"], [0, \"&DownLeftRightVector;\"], [0, \"&LeftUpDownVector;\"], [0, \"&LeftVectorBar;\"], [0, \"&RightVectorBar;\"], [0, \"&RightUpVectorBar;\"], [0, \"&RightDownVectorBar;\"], [0, \"&DownLeftVectorBar;\"], [0, \"&DownRightVectorBar;\"], [0, \"&LeftUpVectorBar;\"], [0, \"&LeftDownVectorBar;\"], [0, \"&LeftTeeVector;\"], [0, \"&RightTeeVector;\"], [0, \"&RightUpTeeVector;\"], [0, \"&RightDownTeeVector;\"], [0, \"&DownLeftTeeVector;\"], [0, \"&DownRightTeeVector;\"], [0, \"&LeftUpTeeVector;\"], [0, \"&LeftDownTeeVector;\"], [0, \"&lHar;\"], [0, \"&uHar;\"], [0, \"&rHar;\"], [0, \"&dHar;\"], [0, \"&luruhar;\"], [0, \"&ldrdhar;\"], [0, \"&ruluhar;\"], [0, \"&rdldhar;\"], [0, \"&lharul;\"], [0, \"&llhard;\"], [0, \"&rharul;\"], [0, \"&lrhard;\"], [0, \"&udhar;\"], [0, \"&duhar;\"], [0, \"&RoundImplies;\"], [0, \"&erarr;\"], [0, \"&simrarr;\"], [0, \"&larrsim;\"], [0, \"&rarrsim;\"], [0, \"&rarrap;\"], [0, \"&ltlarr;\"], [1, \"&gtrarr;\"], [0, \"&subrarr;\"], [1, \"&suplarr;\"], [0, \"&lfisht;\"], [0, \"&rfisht;\"], [0, \"&ufisht;\"], [0, \"&dfisht;\"], [5, \"&lopar;\"], [0, \"&ropar;\"], [4, \"&lbrke;\"], [0, \"&rbrke;\"], [0, \"&lbrkslu;\"], [0, \"&rbrksld;\"], [0, \"&lbrksld;\"], [0, \"&rbrkslu;\"], [0, \"&langd;\"], [0, \"&rangd;\"], [0, \"&lparlt;\"], [0, \"&rpargt;\"], [0, \"&gtlPar;\"], [0, \"&ltrPar;\"], [3, \"&vzigzag;\"], [1, \"&vangrt;\"], [0, \"&angrtvbd;\"], [6, \"&ange;\"], [0, \"&range;\"], [0, \"&dwangle;\"], [0, \"&uwangle;\"], [0, \"&angmsdaa;\"], [0, \"&angmsdab;\"], [0, \"&angmsdac;\"], [0, \"&angmsdad;\"], [0, \"&angmsdae;\"], [0, \"&angmsdaf;\"], [0, \"&angmsdag;\"], [0, \"&angmsdah;\"], [0, \"&bemptyv;\"], [0, \"&demptyv;\"], [0, \"&cemptyv;\"], [0, \"&raemptyv;\"], [0, \"&laemptyv;\"], [0, \"&ohbar;\"], [0, \"&omid;\"], [0, \"&opar;\"], [1, \"&operp;\"], [1, \"&olcross;\"], [0, \"&odsold;\"], [1, \"&olcir;\"], [0, \"&ofcir;\"], [0, \"&olt;\"], [0, \"&ogt;\"], [0, \"&cirscir;\"], [0, \"&cirE;\"], [0, \"&solb;\"], [0, \"&bsolb;\"], [3, \"&boxbox;\"], [3, \"&trisb;\"], [0, \"&rtriltri;\"], [0, { v: \"&LeftTriangleBar;\", n: 824, o: \"&NotLeftTriangleBar;\" }], [0, { v: \"&RightTriangleBar;\", n: 824, o: \"&NotRightTriangleBar;\" }], [11, \"&iinfin;\"], [0, \"&infintie;\"], [0, \"&nvinfin;\"], [4, \"&eparsl;\"], [0, \"&smeparsl;\"], [0, \"&eqvparsl;\"], [5, \"&blacklozenge;\"], [8, \"&RuleDelayed;\"], [1, \"&dsol;\"], [9, \"&bigodot;\"], [0, \"&bigoplus;\"], [0, \"&bigotimes;\"], [1, \"&biguplus;\"], [1, \"&bigsqcup;\"], [5, \"&iiiint;\"], [0, \"&fpartint;\"], [2, \"&cirfnint;\"], [0, \"&awint;\"], [0, \"&rppolint;\"], [0, \"&scpolint;\"], [0, \"&npolint;\"], [0, \"&pointint;\"], [0, \"&quatint;\"], [0, \"&intlarhk;\"], [10, \"&pluscir;\"], [0, \"&plusacir;\"], [0, \"&simplus;\"], [0, \"&plusdu;\"], [0, \"&plussim;\"], [0, \"&plustwo;\"], [1, \"&mcomma;\"], [0, \"&minusdu;\"], [2, \"&loplus;\"], [0, \"&roplus;\"], [0, \"&Cross;\"], [0, \"&timesd;\"], [0, \"&timesbar;\"], [1, \"&smashp;\"], [0, \"&lotimes;\"], [0, \"&rotimes;\"], [0, \"&otimesas;\"], [0, \"&Otimes;\"], [0, \"&odiv;\"], [0, \"&triplus;\"], [0, \"&triminus;\"], [0, \"&tritime;\"], [0, \"&intprod;\"], [2, \"&amalg;\"], [0, \"&capdot;\"], [1, \"&ncup;\"], [0, \"&ncap;\"], [0, \"&capand;\"], [0, \"&cupor;\"], [0, \"&cupcap;\"], [0, \"&capcup;\"], [0, \"&cupbrcap;\"], [0, \"&capbrcup;\"], [0, \"&cupcup;\"], [0, \"&capcap;\"], [0, \"&ccups;\"], [0, \"&ccaps;\"], [2, \"&ccupssm;\"], [2, \"&And;\"], [0, \"&Or;\"], [0, \"&andand;\"], [0, \"&oror;\"], [0, \"&orslope;\"], [0, \"&andslope;\"], [1, \"&andv;\"], [0, \"&orv;\"], [0, \"&andd;\"], [0, \"&ord;\"], [1, \"&wedbar;\"], [6, \"&sdote;\"], [3, \"&simdot;\"], [2, { v: \"&congdot;\", n: 824, o: \"&ncongdot;\" }], [0, \"&easter;\"], [0, \"&apacir;\"], [0, { v: \"&apE;\", n: 824, o: \"&napE;\" }], [0, \"&eplus;\"], [0, \"&pluse;\"], [0, \"&Esim;\"], [0, \"&Colone;\"], [0, \"&Equal;\"], [1, \"&ddotseq;\"], [0, \"&equivDD;\"], [0, \"&ltcir;\"], [0, \"&gtcir;\"], [0, \"&ltquest;\"], [0, \"&gtquest;\"], [0, { v: \"&leqslant;\", n: 824, o: \"&nleqslant;\" }], [0, { v: \"&geqslant;\", n: 824, o: \"&ngeqslant;\" }], [0, \"&lesdot;\"], [0, \"&gesdot;\"], [0, \"&lesdoto;\"], [0, \"&gesdoto;\"], [0, \"&lesdotor;\"], [0, \"&gesdotol;\"], [0, \"&lap;\"], [0, \"&gap;\"], [0, \"&lne;\"], [0, \"&gne;\"], [0, \"&lnap;\"], [0, \"&gnap;\"], [0, \"&lEg;\"], [0, \"&gEl;\"], [0, \"&lsime;\"], [0, \"&gsime;\"], [0, \"&lsimg;\"], [0, \"&gsiml;\"], [0, \"&lgE;\"], [0, \"&glE;\"], [0, \"&lesges;\"], [0, \"&gesles;\"], [0, \"&els;\"], [0, \"&egs;\"], [0, \"&elsdot;\"], [0, \"&egsdot;\"], [0, \"&el;\"], [0, \"&eg;\"], [2, \"&siml;\"], [0, \"&simg;\"], [0, \"&simlE;\"], [0, \"&simgE;\"], [0, { v: \"&LessLess;\", n: 824, o: \"&NotNestedLessLess;\" }], [0, { v: \"&GreaterGreater;\", n: 824, o: \"&NotNestedGreaterGreater;\" }], [1, \"&glj;\"], [0, \"&gla;\"], [0, \"&ltcc;\"], [0, \"&gtcc;\"], [0, \"&lescc;\"], [0, \"&gescc;\"], [0, \"&smt;\"], [0, \"&lat;\"], [0, { v: \"&smte;\", n: 65024, o: \"&smtes;\" }], [0, { v: \"&late;\", n: 65024, o: \"&lates;\" }], [0, \"&bumpE;\"], [0, { v: \"&PrecedesEqual;\", n: 824, o: \"&NotPrecedesEqual;\" }], [0, { v: \"&sce;\", n: 824, o: \"&NotSucceedsEqual;\" }], [2, \"&prE;\"], [0, \"&scE;\"], [0, \"&precneqq;\"], [0, \"&scnE;\"], [0, \"&prap;\"], [0, \"&scap;\"], [0, \"&precnapprox;\"], [0, \"&scnap;\"], [0, \"&Pr;\"], [0, \"&Sc;\"], [0, \"&subdot;\"], [0, \"&supdot;\"], [0, \"&subplus;\"], [0, \"&supplus;\"], [0, \"&submult;\"], [0, \"&supmult;\"], [0, \"&subedot;\"], [0, \"&supedot;\"], [0, { v: \"&subE;\", n: 824, o: \"&nsubE;\" }], [0, { v: \"&supE;\", n: 824, o: \"&nsupE;\" }], [0, \"&subsim;\"], [0, \"&supsim;\"], [2, { v: \"&subnE;\", n: 65024, o: \"&varsubsetneqq;\" }], [0, { v: \"&supnE;\", n: 65024, o: \"&varsupsetneqq;\" }], [2, \"&csub;\"], [0, \"&csup;\"], [0, \"&csube;\"], [0, \"&csupe;\"], [0, \"&subsup;\"], [0, \"&supsub;\"], [0, \"&subsub;\"], [0, \"&supsup;\"], [0, \"&suphsub;\"], [0, \"&supdsub;\"], [0, \"&forkv;\"], [0, \"&topfork;\"], [0, \"&mlcp;\"], [8, \"&Dashv;\"], [1, \"&Vdashl;\"], [0, \"&Barv;\"], [0, \"&vBar;\"], [0, \"&vBarv;\"], [1, \"&Vbar;\"], [0, \"&Not;\"], [0, \"&bNot;\"], [0, \"&rnmid;\"], [0, \"&cirmid;\"], [0, \"&midcir;\"], [0, \"&topcir;\"], [0, \"&nhpar;\"], [0, \"&parsim;\"], [9, { v: \"&parsl;\", n: 8421, o: \"&nparsl;\" }], [44343, { n: new Map(/* #__PURE__ */ restoreDiff([[56476, \"&Ascr;\"], [1, \"&Cscr;\"], [0, \"&Dscr;\"], [2, \"&Gscr;\"], [2, \"&Jscr;\"], [0, \"&Kscr;\"], [2, \"&Nscr;\"], [0, \"&Oscr;\"], [0, \"&Pscr;\"], [0, \"&Qscr;\"], [1, \"&Sscr;\"], [0, \"&Tscr;\"], [0, \"&Uscr;\"], [0, \"&Vscr;\"], [0, \"&Wscr;\"], [0, \"&Xscr;\"], [0, \"&Yscr;\"], [0, \"&Zscr;\"], [0, \"&ascr;\"], [0, \"&bscr;\"], [0, \"&cscr;\"], [0, \"&dscr;\"], [1, \"&fscr;\"], [1, \"&hscr;\"], [0, \"&iscr;\"], [0, \"&jscr;\"], [0, \"&kscr;\"], [0, \"&lscr;\"], [0, \"&mscr;\"], [0, \"&nscr;\"], [1, \"&pscr;\"], [0, \"&qscr;\"], [0, \"&rscr;\"], [0, \"&sscr;\"], [0, \"&tscr;\"], [0, \"&uscr;\"], [0, \"&vscr;\"], [0, \"&wscr;\"], [0, \"&xscr;\"], [0, \"&yscr;\"], [0, \"&zscr;\"], [52, \"&Afr;\"], [0, \"&Bfr;\"], [1, \"&Dfr;\"], [0, \"&Efr;\"], [0, \"&Ffr;\"], [0, \"&Gfr;\"], [2, \"&Jfr;\"], [0, \"&Kfr;\"], [0, \"&Lfr;\"], [0, \"&Mfr;\"], [0, \"&Nfr;\"], [0, \"&Ofr;\"], [0, \"&Pfr;\"], [0, \"&Qfr;\"], [1, \"&Sfr;\"], [0, \"&Tfr;\"], [0, \"&Ufr;\"], [0, \"&Vfr;\"], [0, \"&Wfr;\"], [0, \"&Xfr;\"], [0, \"&Yfr;\"], [1, \"&afr;\"], [0, \"&bfr;\"], [0, \"&cfr;\"], [0, \"&dfr;\"], [0, \"&efr;\"], [0, \"&ffr;\"], [0, \"&gfr;\"], [0, \"&hfr;\"], [0, \"&ifr;\"], [0, \"&jfr;\"], [0, \"&kfr;\"], [0, \"&lfr;\"], [0, \"&mfr;\"], [0, \"&nfr;\"], [0, \"&ofr;\"], [0, \"&pfr;\"], [0, \"&qfr;\"], [0, \"&rfr;\"], [0, \"&sfr;\"], [0, \"&tfr;\"], [0, \"&ufr;\"], [0, \"&vfr;\"], [0, \"&wfr;\"], [0, \"&xfr;\"], [0, \"&yfr;\"], [0, \"&zfr;\"], [0, \"&Aopf;\"], [0, \"&Bopf;\"], [1, \"&Dopf;\"], [0, \"&Eopf;\"], [0, \"&Fopf;\"], [0, \"&Gopf;\"], [1, \"&Iopf;\"], [0, \"&Jopf;\"], [0, \"&Kopf;\"], [0, \"&Lopf;\"], [0, \"&Mopf;\"], [1, \"&Oopf;\"], [3, \"&Sopf;\"], [0, \"&Topf;\"], [0, \"&Uopf;\"], [0, \"&Vopf;\"], [0, \"&Wopf;\"], [0, \"&Xopf;\"], [0, \"&Yopf;\"], [1, \"&aopf;\"], [0, \"&bopf;\"], [0, \"&copf;\"], [0, \"&dopf;\"], [0, \"&eopf;\"], [0, \"&fopf;\"], [0, \"&gopf;\"], [0, \"&hopf;\"], [0, \"&iopf;\"], [0, \"&jopf;\"], [0, \"&kopf;\"], [0, \"&lopf;\"], [0, \"&mopf;\"], [0, \"&nopf;\"], [0, \"&oopf;\"], [0, \"&popf;\"], [0, \"&qopf;\"], [0, \"&ropf;\"], [0, \"&sopf;\"], [0, \"&topf;\"], [0, \"&uopf;\"], [0, \"&vopf;\"], [0, \"&wopf;\"], [0, \"&xopf;\"], [0, \"&yopf;\"], [0, \"&zopf;\"]])) }], [8906, \"&fflig;\"], [0, \"&filig;\"], [0, \"&fllig;\"], [0, \"&ffilig;\"], [0, \"&ffllig;\"]]));\n//# sourceMappingURL=encode-html.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodeXMLStrict = exports.decodeHTML5Strict = exports.decodeHTML4Strict = exports.decodeHTML5 = exports.decodeHTML4 = exports.decodeHTMLAttribute = exports.decodeHTMLStrict = exports.decodeHTML = exports.decodeXML = exports.DecodingMode = exports.EntityDecoder = exports.encodeHTML5 = exports.encodeHTML4 = exports.encodeNonAsciiHTML = exports.encodeHTML = exports.escapeText = exports.escapeAttribute = exports.escapeUTF8 = exports.escape = exports.encodeXML = exports.encode = exports.decodeStrict = exports.decode = exports.EncodingMode = exports.EntityLevel = void 0;\nvar decode_js_1 = require(\"./decode.js\");\nvar encode_js_1 = require(\"./encode.js\");\nvar escape_js_1 = require(\"./escape.js\");\n/** The level of entities to support. */\nvar EntityLevel;\n(function (EntityLevel) {\n    /** Support only XML entities. */\n    EntityLevel[EntityLevel[\"XML\"] = 0] = \"XML\";\n    /** Support HTML entities, which are a superset of XML entities. */\n    EntityLevel[EntityLevel[\"HTML\"] = 1] = \"HTML\";\n})(EntityLevel = exports.EntityLevel || (exports.EntityLevel = {}));\nvar EncodingMode;\n(function (EncodingMode) {\n    /**\n     * The output is UTF-8 encoded. Only characters that need escaping within\n     * XML will be escaped.\n     */\n    EncodingMode[EncodingMode[\"UTF8\"] = 0] = \"UTF8\";\n    /**\n     * The output consists only of ASCII characters. Characters that need\n     * escaping within HTML, and characters that aren't ASCII characters will\n     * be escaped.\n     */\n    EncodingMode[EncodingMode[\"ASCII\"] = 1] = \"ASCII\";\n    /**\n     * Encode all characters that have an equivalent entity, as well as all\n     * characters that are not ASCII characters.\n     */\n    EncodingMode[EncodingMode[\"Extensive\"] = 2] = \"Extensive\";\n    /**\n     * Encode all characters that have to be escaped in HTML attributes,\n     * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n     */\n    EncodingMode[EncodingMode[\"Attribute\"] = 3] = \"Attribute\";\n    /**\n     * Encode all characters that have to be escaped in HTML text,\n     * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n     */\n    EncodingMode[EncodingMode[\"Text\"] = 4] = \"Text\";\n})(EncodingMode = exports.EncodingMode || (exports.EncodingMode = {}));\n/**\n * Decodes a string with entities.\n *\n * @param data String to decode.\n * @param options Decoding options.\n */\nfunction decode(data, options) {\n    if (options === void 0) { options = EntityLevel.XML; }\n    var level = typeof options === \"number\" ? options : options.level;\n    if (level === EntityLevel.HTML) {\n        var mode = typeof options === \"object\" ? options.mode : undefined;\n        return (0, decode_js_1.decodeHTML)(data, mode);\n    }\n    return (0, decode_js_1.decodeXML)(data);\n}\nexports.decode = decode;\n/**\n * Decodes a string with entities. Does not allow missing trailing semicolons for entities.\n *\n * @param data String to decode.\n * @param options Decoding options.\n * @deprecated Use `decode` with the `mode` set to `Strict`.\n */\nfunction decodeStrict(data, options) {\n    var _a;\n    if (options === void 0) { options = EntityLevel.XML; }\n    var opts = typeof options === \"number\" ? { level: options } : options;\n    (_a = opts.mode) !== null && _a !== void 0 ? _a : (opts.mode = decode_js_1.DecodingMode.Strict);\n    return decode(data, opts);\n}\nexports.decodeStrict = decodeStrict;\n/**\n * Encodes a string with entities.\n *\n * @param data String to encode.\n * @param options Encoding options.\n */\nfunction encode(data, options) {\n    if (options === void 0) { options = EntityLevel.XML; }\n    var opts = typeof options === \"number\" ? { level: options } : options;\n    // Mode `UTF8` just escapes XML entities\n    if (opts.mode === EncodingMode.UTF8)\n        return (0, escape_js_1.escapeUTF8)(data);\n    if (opts.mode === EncodingMode.Attribute)\n        return (0, escape_js_1.escapeAttribute)(data);\n    if (opts.mode === EncodingMode.Text)\n        return (0, escape_js_1.escapeText)(data);\n    if (opts.level === EntityLevel.HTML) {\n        if (opts.mode === EncodingMode.ASCII) {\n            return (0, encode_js_1.encodeNonAsciiHTML)(data);\n        }\n        return (0, encode_js_1.encodeHTML)(data);\n    }\n    // ASCII and Extensive are equivalent\n    return (0, escape_js_1.encodeXML)(data);\n}\nexports.encode = encode;\nvar escape_js_2 = require(\"./escape.js\");\nObject.defineProperty(exports, \"encodeXML\", { enumerable: true, get: function () { return escape_js_2.encodeXML; } });\nObject.defineProperty(exports, \"escape\", { enumerable: true, get: function () { return escape_js_2.escape; } });\nObject.defineProperty(exports, \"escapeUTF8\", { enumerable: true, get: function () { return escape_js_2.escapeUTF8; } });\nObject.defineProperty(exports, \"escapeAttribute\", { enumerable: true, get: function () { return escape_js_2.escapeAttribute; } });\nObject.defineProperty(exports, \"escapeText\", { enumerable: true, get: function () { return escape_js_2.escapeText; } });\nvar encode_js_2 = require(\"./encode.js\");\nObject.defineProperty(exports, \"encodeHTML\", { enumerable: true, get: function () { return encode_js_2.encodeHTML; } });\nObject.defineProperty(exports, \"encodeNonAsciiHTML\", { enumerable: true, get: function () { return encode_js_2.encodeNonAsciiHTML; } });\n// Legacy aliases (deprecated)\nObject.defineProperty(exports, \"encodeHTML4\", { enumerable: true, get: function () { return encode_js_2.encodeHTML; } });\nObject.defineProperty(exports, \"encodeHTML5\", { enumerable: true, get: function () { return encode_js_2.encodeHTML; } });\nvar decode_js_2 = require(\"./decode.js\");\nObject.defineProperty(exports, \"EntityDecoder\", { enumerable: true, get: function () { return decode_js_2.EntityDecoder; } });\nObject.defineProperty(exports, \"DecodingMode\", { enumerable: true, get: function () { return decode_js_2.DecodingMode; } });\nObject.defineProperty(exports, \"decodeXML\", { enumerable: true, get: function () { return decode_js_2.decodeXML; } });\nObject.defineProperty(exports, \"decodeHTML\", { enumerable: true, get: function () { return decode_js_2.decodeHTML; } });\nObject.defineProperty(exports, \"decodeHTMLStrict\", { enumerable: true, get: function () { return decode_js_2.decodeHTMLStrict; } });\nObject.defineProperty(exports, \"decodeHTMLAttribute\", { enumerable: true, get: function () { return decode_js_2.decodeHTMLAttribute; } });\n// Legacy aliases (deprecated)\nObject.defineProperty(exports, \"decodeHTML4\", { enumerable: true, get: function () { return decode_js_2.decodeHTML; } });\nObject.defineProperty(exports, \"decodeHTML5\", { enumerable: true, get: function () { return decode_js_2.decodeHTML; } });\nObject.defineProperty(exports, \"decodeHTML4Strict\", { enumerable: true, get: function () { return decode_js_2.decodeHTMLStrict; } });\nObject.defineProperty(exports, \"decodeHTML5Strict\", { enumerable: true, get: function () { return decode_js_2.decodeHTMLStrict; } });\nObject.defineProperty(exports, \"decodeXMLStrict\", { enumerable: true, get: function () { return decode_js_2.decodeXML; } });\n//# sourceMappingURL=index.js.map","'use strict';\n\n/* eslint-disable no-bitwise */\n\nconst decodeCache = {};\n\nfunction getDecodeCache (exclude) {\n  let cache = decodeCache[exclude];\n  if (cache) { return cache }\n\n  cache = decodeCache[exclude] = [];\n\n  for (let i = 0; i < 128; i++) {\n    const ch = String.fromCharCode(i);\n    cache.push(ch);\n  }\n\n  for (let i = 0; i < exclude.length; i++) {\n    const ch = exclude.charCodeAt(i);\n    cache[ch] = '%' + ('0' + ch.toString(16).toUpperCase()).slice(-2);\n  }\n\n  return cache\n}\n\n// Decode percent-encoded string.\n//\nfunction decode (string, exclude) {\n  if (typeof exclude !== 'string') {\n    exclude = decode.defaultChars;\n  }\n\n  const cache = getDecodeCache(exclude);\n\n  return string.replace(/(%[a-f0-9]{2})+/gi, function (seq) {\n    let result = '';\n\n    for (let i = 0, l = seq.length; i < l; i += 3) {\n      const b1 = parseInt(seq.slice(i + 1, i + 3), 16);\n\n      if (b1 < 0x80) {\n        result += cache[b1];\n        continue\n      }\n\n      if ((b1 & 0xE0) === 0xC0 && (i + 3 < l)) {\n        // 110xxxxx 10xxxxxx\n        const b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n\n        if ((b2 & 0xC0) === 0x80) {\n          const chr = ((b1 << 6) & 0x7C0) | (b2 & 0x3F);\n\n          if (chr < 0x80) {\n            result += '\\ufffd\\ufffd';\n          } else {\n            result += String.fromCharCode(chr);\n          }\n\n          i += 3;\n          continue\n        }\n      }\n\n      if ((b1 & 0xF0) === 0xE0 && (i + 6 < l)) {\n        // 1110xxxx 10xxxxxx 10xxxxxx\n        const b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n        const b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n\n        if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n          const chr = ((b1 << 12) & 0xF000) | ((b2 << 6) & 0xFC0) | (b3 & 0x3F);\n\n          if (chr < 0x800 || (chr >= 0xD800 && chr <= 0xDFFF)) {\n            result += '\\ufffd\\ufffd\\ufffd';\n          } else {\n            result += String.fromCharCode(chr);\n          }\n\n          i += 6;\n          continue\n        }\n      }\n\n      if ((b1 & 0xF8) === 0xF0 && (i + 9 < l)) {\n        // 111110xx 10xxxxxx 10xxxxxx 10xxxxxx\n        const b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n        const b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n        const b4 = parseInt(seq.slice(i + 10, i + 12), 16);\n\n        if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80 && (b4 & 0xC0) === 0x80) {\n          let chr = ((b1 << 18) & 0x1C0000) | ((b2 << 12) & 0x3F000) | ((b3 << 6) & 0xFC0) | (b4 & 0x3F);\n\n          if (chr < 0x10000 || chr > 0x10FFFF) {\n            result += '\\ufffd\\ufffd\\ufffd\\ufffd';\n          } else {\n            chr -= 0x10000;\n            result += String.fromCharCode(0xD800 + (chr >> 10), 0xDC00 + (chr & 0x3FF));\n          }\n\n          i += 9;\n          continue\n        }\n      }\n\n      result += '\\ufffd';\n    }\n\n    return result\n  })\n}\n\ndecode.defaultChars = ';/?:@&=+$,#';\ndecode.componentChars = '';\n\nconst encodeCache = {};\n\n// Create a lookup array where anything but characters in `chars` string\n// and alphanumeric chars is percent-encoded.\n//\nfunction getEncodeCache (exclude) {\n  let cache = encodeCache[exclude];\n  if (cache) { return cache }\n\n  cache = encodeCache[exclude] = [];\n\n  for (let i = 0; i < 128; i++) {\n    const ch = String.fromCharCode(i);\n\n    if (/^[0-9a-z]$/i.test(ch)) {\n      // always allow unencoded alphanumeric characters\n      cache.push(ch);\n    } else {\n      cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2));\n    }\n  }\n\n  for (let i = 0; i < exclude.length; i++) {\n    cache[exclude.charCodeAt(i)] = exclude[i];\n  }\n\n  return cache\n}\n\n// Encode unsafe characters with percent-encoding, skipping already\n// encoded sequences.\n//\n//  - string       - string to encode\n//  - exclude      - list of characters to ignore (in addition to a-zA-Z0-9)\n//  - keepEscaped  - don't encode '%' in a correct escape sequence (default: true)\n//\nfunction encode (string, exclude, keepEscaped) {\n  if (typeof exclude !== 'string') {\n    // encode(string, keepEscaped)\n    keepEscaped = exclude;\n    exclude = encode.defaultChars;\n  }\n\n  if (typeof keepEscaped === 'undefined') {\n    keepEscaped = true;\n  }\n\n  const cache = getEncodeCache(exclude);\n  let result = '';\n\n  for (let i = 0, l = string.length; i < l; i++) {\n    const code = string.charCodeAt(i);\n\n    if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) {\n      if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) {\n        result += string.slice(i, i + 3);\n        i += 2;\n        continue\n      }\n    }\n\n    if (code < 128) {\n      result += cache[code];\n      continue\n    }\n\n    if (code >= 0xD800 && code <= 0xDFFF) {\n      if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) {\n        const nextCode = string.charCodeAt(i + 1);\n        if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {\n          result += encodeURIComponent(string[i] + string[i + 1]);\n          i++;\n          continue\n        }\n      }\n      result += '%EF%BF%BD';\n      continue\n    }\n\n    result += encodeURIComponent(string[i]);\n  }\n\n  return result\n}\n\nencode.defaultChars = \";/?:@&=+$,-_.!~*'()#\";\nencode.componentChars = \"-_.!~*'()\";\n\nfunction format (url) {\n  let result = '';\n\n  result += url.protocol || '';\n  result += url.slashes ? '//' : '';\n  result += url.auth ? url.auth + '@' : '';\n\n  if (url.hostname && url.hostname.indexOf(':') !== -1) {\n    // ipv6 address\n    result += '[' + url.hostname + ']';\n  } else {\n    result += url.hostname || '';\n  }\n\n  result += url.port ? ':' + url.port : '';\n  result += url.pathname || '';\n  result += url.search || '';\n  result += url.hash || '';\n\n  return result\n}\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\n//\n// Changes from joyent/node:\n//\n// 1. No leading slash in paths,\n//    e.g. in `url.parse('http://foo?bar')` pathname is ``, not `/`\n//\n// 2. Backslashes are not replaced with slashes,\n//    so `http:\\\\example.org\\` is treated like a relative path\n//\n// 3. Trailing colon is treated like a part of the path,\n//    i.e. in `http://example.org:foo` pathname is `:foo`\n//\n// 4. Nothing is URL-encoded in the resulting object,\n//    (in joyent/node some chars in auth and paths are encoded)\n//\n// 5. `url.parse()` does not have `parseQueryString` argument\n//\n// 6. Removed extraneous result properties: `host`, `path`, `query`, etc.,\n//    which can be constructed using other parts of the url.\n//\n\nfunction Url () {\n  this.protocol = null;\n  this.slashes = null;\n  this.auth = null;\n  this.port = null;\n  this.hostname = null;\n  this.hash = null;\n  this.search = null;\n  this.pathname = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nconst protocolPattern = /^([a-z0-9.+-]+:)/i;\nconst portPattern = /:[0-9]*$/;\n\n// Special case for a simple path URL\n/* eslint-disable-next-line no-useless-escape */\nconst simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/;\n\n// RFC 2396: characters reserved for delimiting URLs.\n// We actually just auto-escape these.\nconst delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'];\n\n// RFC 2396: characters not allowed for various reasons.\nconst unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims);\n\n// Allowed by RFCs, but cause of XSS attacks.  Always escape these.\nconst autoEscape = ['\\''].concat(unwise);\n// Characters that are never ever allowed in a hostname.\n// Note that any invalid chars are also handled, but these\n// are the ones that are *expected* to be seen, so we fast-path\n// them.\nconst nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape);\nconst hostEndingChars = ['/', '?', '#'];\nconst hostnameMaxLen = 255;\nconst hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/;\nconst hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/;\n// protocols that can allow \"unsafe\" and \"unwise\" chars.\n// protocols that never have a hostname.\nconst hostlessProtocol = {\n  javascript: true,\n  'javascript:': true\n};\n// protocols that always contain a // bit.\nconst slashedProtocol = {\n  http: true,\n  https: true,\n  ftp: true,\n  gopher: true,\n  file: true,\n  'http:': true,\n  'https:': true,\n  'ftp:': true,\n  'gopher:': true,\n  'file:': true\n};\n\nfunction urlParse (url, slashesDenoteHost) {\n  if (url && url instanceof Url) return url\n\n  const u = new Url();\n  u.parse(url, slashesDenoteHost);\n  return u\n}\n\nUrl.prototype.parse = function (url, slashesDenoteHost) {\n  let lowerProto, hec, slashes;\n  let rest = url;\n\n  // trim before proceeding.\n  // This is to support parse stuff like \"  http://foo.com  \\n\"\n  rest = rest.trim();\n\n  if (!slashesDenoteHost && url.split('#').length === 1) {\n    // Try fast path regexp\n    const simplePath = simplePathPattern.exec(rest);\n    if (simplePath) {\n      this.pathname = simplePath[1];\n      if (simplePath[2]) {\n        this.search = simplePath[2];\n      }\n      return this\n    }\n  }\n\n  let proto = protocolPattern.exec(rest);\n  if (proto) {\n    proto = proto[0];\n    lowerProto = proto.toLowerCase();\n    this.protocol = proto;\n    rest = rest.substr(proto.length);\n  }\n\n  // figure out if it's got a host\n  // user@server is *always* interpreted as a hostname, and url\n  // resolution will treat //foo/bar as host=foo,path=bar because that's\n  // how the browser resolves relative URLs.\n  /* eslint-disable-next-line no-useless-escape */\n  if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n    slashes = rest.substr(0, 2) === '//';\n    if (slashes && !(proto && hostlessProtocol[proto])) {\n      rest = rest.substr(2);\n      this.slashes = true;\n    }\n  }\n\n  if (!hostlessProtocol[proto] &&\n      (slashes || (proto && !slashedProtocol[proto]))) {\n    // there's a hostname.\n    // the first instance of /, ?, ;, or # ends the host.\n    //\n    // If there is an @ in the hostname, then non-host chars *are* allowed\n    // to the left of the last @ sign, unless some host-ending character\n    // comes *before* the @-sign.\n    // URLs are obnoxious.\n    //\n    // ex:\n    // http://a@b@c/ => user:a@b host:c\n    // http://a@b?@c => user:a host:c path:/?@c\n\n    // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n    // Review our test case against browsers more comprehensively.\n\n    // find the first instance of any hostEndingChars\n    let hostEnd = -1;\n    for (let i = 0; i < hostEndingChars.length; i++) {\n      hec = rest.indexOf(hostEndingChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n        hostEnd = hec;\n      }\n    }\n\n    // at this point, either we have an explicit point where the\n    // auth portion cannot go past, or the last @ char is the decider.\n    let auth, atSign;\n    if (hostEnd === -1) {\n      // atSign can be anywhere.\n      atSign = rest.lastIndexOf('@');\n    } else {\n      // atSign must be in auth portion.\n      // http://a@b/c@d => host:b auth:a path:/c@d\n      atSign = rest.lastIndexOf('@', hostEnd);\n    }\n\n    // Now we have a portion which is definitely the auth.\n    // Pull that off.\n    if (atSign !== -1) {\n      auth = rest.slice(0, atSign);\n      rest = rest.slice(atSign + 1);\n      this.auth = auth;\n    }\n\n    // the host is the remaining to the left of the first non-host char\n    hostEnd = -1;\n    for (let i = 0; i < nonHostChars.length; i++) {\n      hec = rest.indexOf(nonHostChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n        hostEnd = hec;\n      }\n    }\n    // if we still have not hit it, then the entire thing is a host.\n    if (hostEnd === -1) {\n      hostEnd = rest.length;\n    }\n\n    if (rest[hostEnd - 1] === ':') { hostEnd--; }\n    const host = rest.slice(0, hostEnd);\n    rest = rest.slice(hostEnd);\n\n    // pull out port.\n    this.parseHost(host);\n\n    // we've indicated that there is a hostname,\n    // so even if it's empty, it has to be present.\n    this.hostname = this.hostname || '';\n\n    // if hostname begins with [ and ends with ]\n    // assume that it's an IPv6 address.\n    const ipv6Hostname = this.hostname[0] === '[' &&\n        this.hostname[this.hostname.length - 1] === ']';\n\n    // validate a little.\n    if (!ipv6Hostname) {\n      const hostparts = this.hostname.split(/\\./);\n      for (let i = 0, l = hostparts.length; i < l; i++) {\n        const part = hostparts[i];\n        if (!part) { continue }\n        if (!part.match(hostnamePartPattern)) {\n          let newpart = '';\n          for (let j = 0, k = part.length; j < k; j++) {\n            if (part.charCodeAt(j) > 127) {\n              // we replace non-ASCII char with a temporary placeholder\n              // we need this to make sure size of hostname is not\n              // broken by replacing non-ASCII by nothing\n              newpart += 'x';\n            } else {\n              newpart += part[j];\n            }\n          }\n          // we test again with ASCII char only\n          if (!newpart.match(hostnamePartPattern)) {\n            const validParts = hostparts.slice(0, i);\n            const notHost = hostparts.slice(i + 1);\n            const bit = part.match(hostnamePartStart);\n            if (bit) {\n              validParts.push(bit[1]);\n              notHost.unshift(bit[2]);\n            }\n            if (notHost.length) {\n              rest = notHost.join('.') + rest;\n            }\n            this.hostname = validParts.join('.');\n            break\n          }\n        }\n      }\n    }\n\n    if (this.hostname.length > hostnameMaxLen) {\n      this.hostname = '';\n    }\n\n    // strip [ and ] from the hostname\n    // the host field still retains them, though\n    if (ipv6Hostname) {\n      this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n    }\n  }\n\n  // chop off from the tail first.\n  const hash = rest.indexOf('#');\n  if (hash !== -1) {\n    // got a fragment string.\n    this.hash = rest.substr(hash);\n    rest = rest.slice(0, hash);\n  }\n  const qm = rest.indexOf('?');\n  if (qm !== -1) {\n    this.search = rest.substr(qm);\n    rest = rest.slice(0, qm);\n  }\n  if (rest) { this.pathname = rest; }\n  if (slashedProtocol[lowerProto] &&\n      this.hostname && !this.pathname) {\n    this.pathname = '';\n  }\n\n  return this\n};\n\nUrl.prototype.parseHost = function (host) {\n  let port = portPattern.exec(host);\n  if (port) {\n    port = port[0];\n    if (port !== ':') {\n      this.port = port.substr(1);\n    }\n    host = host.substr(0, host.length - port.length);\n  }\n  if (host) { this.hostname = host; }\n};\n\nexports.decode = decode;\nexports.encode = encode;\nexports.format = format;\nexports.parse = urlParse;\n","(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global[\"micro-memoize\"] = factory());\n})(this, (function () { 'use strict';\n\n    /**\n     * @constant DEFAULT_OPTIONS_KEYS the default options keys\n     */\n    var DEFAULT_OPTIONS_KEYS = {\n        isEqual: true,\n        isMatchingKey: true,\n        isPromise: true,\n        maxSize: true,\n        onCacheAdd: true,\n        onCacheChange: true,\n        onCacheHit: true,\n        transformKey: true,\n    };\n    /**\n     * @function slice\n     *\n     * @description\n     * slice.call() pre-bound\n     */\n    var slice = Array.prototype.slice;\n    /**\n     * @function cloneArray\n     *\n     * @description\n     * clone the array-like object and return the new array\n     *\n     * @param arrayLike the array-like object to clone\n     * @returns the clone as an array\n     */\n    function cloneArray(arrayLike) {\n        var length = arrayLike.length;\n        if (!length) {\n            return [];\n        }\n        if (length === 1) {\n            return [arrayLike[0]];\n        }\n        if (length === 2) {\n            return [arrayLike[0], arrayLike[1]];\n        }\n        if (length === 3) {\n            return [arrayLike[0], arrayLike[1], arrayLike[2]];\n        }\n        return slice.call(arrayLike, 0);\n    }\n    /**\n     * @function getCustomOptions\n     *\n     * @description\n     * get the custom options on the object passed\n     *\n     * @param options the memoization options passed\n     * @returns the custom options passed\n     */\n    function getCustomOptions(options) {\n        var customOptions = {};\n        /* eslint-disable no-restricted-syntax */\n        for (var key in options) {\n            if (!DEFAULT_OPTIONS_KEYS[key]) {\n                customOptions[key] = options[key];\n            }\n        }\n        /* eslint-enable */\n        return customOptions;\n    }\n    /**\n     * @function isMemoized\n     *\n     * @description\n     * is the function passed already memoized\n     *\n     * @param fn the function to test\n     * @returns is the function already memoized\n     */\n    function isMemoized(fn) {\n        return typeof fn === 'function' && fn.isMemoized;\n    }\n    /**\n     * @function isSameValueZero\n     *\n     * @description\n     * are the objects equal based on SameValueZero equality\n     *\n     * @param object1 the first object to compare\n     * @param object2 the second object to compare\n     * @returns are the two objects equal\n     */\n    function isSameValueZero(object1, object2) {\n        // eslint-disable-next-line no-self-compare\n        return object1 === object2 || (object1 !== object1 && object2 !== object2);\n    }\n    /**\n     * @function mergeOptions\n     *\n     * @description\n     * merge the options into the target\n     *\n     * @param existingOptions the options provided\n     * @param newOptions the options to include\n     * @returns the merged options\n     */\n    function mergeOptions(existingOptions, newOptions) {\n        var target = {};\n        /* eslint-disable no-restricted-syntax */\n        for (var key in existingOptions) {\n            target[key] = existingOptions[key];\n        }\n        for (var key in newOptions) {\n            target[key] = newOptions[key];\n        }\n        /* eslint-enable */\n        return target;\n    }\n\n    // utils\n    var Cache = /** @class */ (function () {\n        function Cache(options) {\n            this.keys = [];\n            this.values = [];\n            this.options = options;\n            var isMatchingKeyFunction = typeof options.isMatchingKey === 'function';\n            if (isMatchingKeyFunction) {\n                this.getKeyIndex = this._getKeyIndexFromMatchingKey;\n            }\n            else if (options.maxSize > 1) {\n                this.getKeyIndex = this._getKeyIndexForMany;\n            }\n            else {\n                this.getKeyIndex = this._getKeyIndexForSingle;\n            }\n            this.canTransformKey = typeof options.transformKey === 'function';\n            this.shouldCloneArguments = this.canTransformKey || isMatchingKeyFunction;\n            this.shouldUpdateOnAdd = typeof options.onCacheAdd === 'function';\n            this.shouldUpdateOnChange = typeof options.onCacheChange === 'function';\n            this.shouldUpdateOnHit = typeof options.onCacheHit === 'function';\n        }\n        Object.defineProperty(Cache.prototype, \"size\", {\n            /**\n             * The number of cached [key,value] results.\n             */\n            get: function () {\n                return this.keys.length;\n            },\n            enumerable: false,\n            configurable: true\n        });\n        Object.defineProperty(Cache.prototype, \"snapshot\", {\n            /**\n             * A copy of the cache at a moment in time. This is useful\n             * to compare changes over time, since the cache mutates\n             * internally for performance reasons.\n             */\n            get: function () {\n                return {\n                    keys: cloneArray(this.keys),\n                    size: this.size,\n                    values: cloneArray(this.values),\n                };\n            },\n            enumerable: false,\n            configurable: true\n        });\n        /**\n         * Gets the matching key index when a custom key matcher is used.\n         */\n        Cache.prototype._getKeyIndexFromMatchingKey = function (keyToMatch) {\n            var _a = this.options, isMatchingKey = _a.isMatchingKey, maxSize = _a.maxSize;\n            var keys = this.keys;\n            var keysLength = keys.length;\n            if (!keysLength) {\n                return -1;\n            }\n            if (isMatchingKey(keys[0], keyToMatch)) {\n                return 0;\n            }\n            if (maxSize > 1) {\n                for (var index = 1; index < keysLength; index++) {\n                    if (isMatchingKey(keys[index], keyToMatch)) {\n                        return index;\n                    }\n                }\n            }\n            return -1;\n        };\n        /**\n         * Gets the matching key index when multiple keys are used.\n         */\n        Cache.prototype._getKeyIndexForMany = function (keyToMatch) {\n            var isEqual = this.options.isEqual;\n            var keys = this.keys;\n            var keysLength = keys.length;\n            if (!keysLength) {\n                return -1;\n            }\n            if (keysLength === 1) {\n                return this._getKeyIndexForSingle(keyToMatch);\n            }\n            var keyLength = keyToMatch.length;\n            var existingKey;\n            var argIndex;\n            if (keyLength > 1) {\n                for (var index = 0; index < keysLength; index++) {\n                    existingKey = keys[index];\n                    if (existingKey.length === keyLength) {\n                        argIndex = 0;\n                        for (; argIndex < keyLength; argIndex++) {\n                            if (!isEqual(existingKey[argIndex], keyToMatch[argIndex])) {\n                                break;\n                            }\n                        }\n                        if (argIndex === keyLength) {\n                            return index;\n                        }\n                    }\n                }\n            }\n            else {\n                for (var index = 0; index < keysLength; index++) {\n                    existingKey = keys[index];\n                    if (existingKey.length === keyLength &&\n                        isEqual(existingKey[0], keyToMatch[0])) {\n                        return index;\n                    }\n                }\n            }\n            return -1;\n        };\n        /**\n         * Gets the matching key index when a single key is used.\n         */\n        Cache.prototype._getKeyIndexForSingle = function (keyToMatch) {\n            var keys = this.keys;\n            if (!keys.length) {\n                return -1;\n            }\n            var existingKey = keys[0];\n            var length = existingKey.length;\n            if (keyToMatch.length !== length) {\n                return -1;\n            }\n            var isEqual = this.options.isEqual;\n            if (length > 1) {\n                for (var index = 0; index < length; index++) {\n                    if (!isEqual(existingKey[index], keyToMatch[index])) {\n                        return -1;\n                    }\n                }\n                return 0;\n            }\n            return isEqual(existingKey[0], keyToMatch[0]) ? 0 : -1;\n        };\n        /**\n         * Order the array based on a Least-Recently-Used basis.\n         */\n        Cache.prototype.orderByLru = function (key, value, startingIndex) {\n            var keys = this.keys;\n            var values = this.values;\n            var currentLength = keys.length;\n            var index = startingIndex;\n            while (index--) {\n                keys[index + 1] = keys[index];\n                values[index + 1] = values[index];\n            }\n            keys[0] = key;\n            values[0] = value;\n            var maxSize = this.options.maxSize;\n            if (currentLength === maxSize && startingIndex === currentLength) {\n                keys.pop();\n                values.pop();\n            }\n            else if (startingIndex >= maxSize) {\n                // eslint-disable-next-line no-multi-assign\n                keys.length = values.length = maxSize;\n            }\n        };\n        /**\n         * Update the promise method to auto-remove from cache if rejected, and\n         * if resolved then fire cache hit / changed.\n         */\n        Cache.prototype.updateAsyncCache = function (memoized) {\n            var _this = this;\n            var _a = this.options, onCacheChange = _a.onCacheChange, onCacheHit = _a.onCacheHit;\n            var firstKey = this.keys[0];\n            var firstValue = this.values[0];\n            this.values[0] = firstValue.then(function (value) {\n                if (_this.shouldUpdateOnHit) {\n                    onCacheHit(_this, _this.options, memoized);\n                }\n                if (_this.shouldUpdateOnChange) {\n                    onCacheChange(_this, _this.options, memoized);\n                }\n                return value;\n            }, function (error) {\n                var keyIndex = _this.getKeyIndex(firstKey);\n                if (keyIndex !== -1) {\n                    _this.keys.splice(keyIndex, 1);\n                    _this.values.splice(keyIndex, 1);\n                }\n                throw error;\n            });\n        };\n        return Cache;\n    }());\n\n    function createMemoizedFunction(fn, options) {\n        if (options === void 0) { options = {}; }\n        if (isMemoized(fn)) {\n            return createMemoizedFunction(fn.fn, mergeOptions(fn.options, options));\n        }\n        if (typeof fn !== 'function') {\n            throw new TypeError('You must pass a function to `memoize`.');\n        }\n        var _a = options.isEqual, isEqual = _a === void 0 ? isSameValueZero : _a, isMatchingKey = options.isMatchingKey, _b = options.isPromise, isPromise = _b === void 0 ? false : _b, _c = options.maxSize, maxSize = _c === void 0 ? 1 : _c, onCacheAdd = options.onCacheAdd, onCacheChange = options.onCacheChange, onCacheHit = options.onCacheHit, transformKey = options.transformKey;\n        var normalizedOptions = mergeOptions({\n            isEqual: isEqual,\n            isMatchingKey: isMatchingKey,\n            isPromise: isPromise,\n            maxSize: maxSize,\n            onCacheAdd: onCacheAdd,\n            onCacheChange: onCacheChange,\n            onCacheHit: onCacheHit,\n            transformKey: transformKey,\n        }, getCustomOptions(options));\n        var cache = new Cache(normalizedOptions);\n        var keys = cache.keys, values = cache.values, canTransformKey = cache.canTransformKey, shouldCloneArguments = cache.shouldCloneArguments, shouldUpdateOnAdd = cache.shouldUpdateOnAdd, shouldUpdateOnChange = cache.shouldUpdateOnChange, shouldUpdateOnHit = cache.shouldUpdateOnHit;\n        var memoized = function () {\n            var key = shouldCloneArguments\n                ? cloneArray(arguments)\n                : arguments;\n            if (canTransformKey) {\n                key = transformKey(key);\n            }\n            var keyIndex = keys.length ? cache.getKeyIndex(key) : -1;\n            if (keyIndex !== -1) {\n                if (shouldUpdateOnHit) {\n                    onCacheHit(cache, normalizedOptions, memoized);\n                }\n                if (keyIndex) {\n                    cache.orderByLru(keys[keyIndex], values[keyIndex], keyIndex);\n                    if (shouldUpdateOnChange) {\n                        onCacheChange(cache, normalizedOptions, memoized);\n                    }\n                }\n            }\n            else {\n                var newValue = fn.apply(this, arguments);\n                var newKey = shouldCloneArguments\n                    ? key\n                    : cloneArray(arguments);\n                cache.orderByLru(newKey, newValue, keys.length);\n                if (isPromise) {\n                    cache.updateAsyncCache(memoized);\n                }\n                if (shouldUpdateOnAdd) {\n                    onCacheAdd(cache, normalizedOptions, memoized);\n                }\n                if (shouldUpdateOnChange) {\n                    onCacheChange(cache, normalizedOptions, memoized);\n                }\n            }\n            return values[0];\n        };\n        memoized.cache = cache;\n        memoized.fn = fn;\n        memoized.isMemoized = true;\n        memoized.options = normalizedOptions;\n        return memoized;\n    }\n\n    return createMemoizedFunction;\n\n}));\n//# sourceMappingURL=micro-memoize.js.map\n","'use strict';\n\nfunction nullthrows(x, message) {\n  if (x != null) {\n    return x;\n  }\n  var error = new Error(message !== undefined ? message : 'Got unexpected ' + x);\n  error.framesToPop = 1; // Skip nullthrows's own stack frame.\n  throw error;\n}\n\nmodule.exports = nullthrows;\nmodule.exports.default = nullthrows;\n\nObject.defineProperty(module.exports, '__esModule', {value: true});\n","/* @license\nPapa Parse\nv5.4.1\nhttps://github.com/mholt/PapaParse\nLicense: MIT\n*/\n!function(e,t){\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof module&&\"undefined\"!=typeof exports?module.exports=t():e.Papa=t()}(this,function s(){\"use strict\";var f=\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:void 0!==f?f:{};var n=!f.document&&!!f.postMessage,o=f.IS_PAPA_WORKER||!1,a={},u=0,b={parse:function(e,t){var r=(t=t||{}).dynamicTyping||!1;J(r)&&(t.dynamicTypingFunction=r,r={});if(t.dynamicTyping=r,t.transform=!!J(t.transform)&&t.transform,t.worker&&b.WORKERS_SUPPORTED){var i=function(){if(!b.WORKERS_SUPPORTED)return!1;var e=(r=f.URL||f.webkitURL||null,i=s.toString(),b.BLOB_URL||(b.BLOB_URL=r.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; \",\"(\",i,\")();\"],{type:\"text/javascript\"})))),t=new f.Worker(e);var r,i;return t.onmessage=_,t.id=u++,a[t.id]=t}();return i.userStep=t.step,i.userChunk=t.chunk,i.userComplete=t.complete,i.userError=t.error,t.step=J(t.step),t.chunk=J(t.chunk),t.complete=J(t.complete),t.error=J(t.error),delete t.worker,void i.postMessage({input:e,config:t,workerId:i.id})}var n=null;b.NODE_STREAM_INPUT,\"string\"==typeof e?(e=function(e){if(65279===e.charCodeAt(0))return e.slice(1);return e}(e),n=t.download?new l(t):new p(t)):!0===e.readable&&J(e.read)&&J(e.on)?n=new g(t):(f.File&&e instanceof File||e instanceof Object)&&(n=new c(t));return n.stream(e)},unparse:function(e,t){var n=!1,_=!0,m=\",\",y=\"\\r\\n\",s='\"',a=s+s,r=!1,i=null,o=!1;!function(){if(\"object\"!=typeof t)return;\"string\"!=typeof t.delimiter||b.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||(r=t.skipEmptyLines);\"string\"==typeof t.newline&&(y=t.newline);\"string\"==typeof t.quoteChar&&(s=t.quoteChar);\"boolean\"==typeof t.header&&(_=t.header);if(Array.isArray(t.columns)){if(0===t.columns.length)throw new Error(\"Option columns is empty\");i=t.columns}void 0!==t.escapeChar&&(a=t.escapeChar+s);(\"boolean\"==typeof t.escapeFormulae||t.escapeFormulae instanceof RegExp)&&(o=t.escapeFormulae instanceof RegExp?t.escapeFormulae:/^[=+\\-@\\t\\r].*$/)}();var u=new RegExp(Q(s),\"g\");\"string\"==typeof e&&(e=JSON.parse(e));if(Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return h(null,e,r);if(\"object\"==typeof e[0])return h(i||Object.keys(e[0]),e,r)}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||i),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])),h(e.fields||[],e.data||[],r);throw new Error(\"Unable to serialize unrecognized input\");function h(e,t,r){var i=\"\";\"string\"==typeof e&&(e=JSON.parse(e)),\"string\"==typeof t&&(t=JSON.parse(t));var n=Array.isArray(e)&&0<e.length,s=!Array.isArray(t[0]);if(n&&_){for(var a=0;a<e.length;a++)0<a&&(i+=m),i+=v(e[a],a);0<t.length&&(i+=y)}for(var o=0;o<t.length;o++){var u=n?e.length:t[o].length,h=!1,f=n?0===Object.keys(t[o]).length:0===t[o].length;if(r&&!n&&(h=\"greedy\"===r?\"\"===t[o].join(\"\").trim():1===t[o].length&&0===t[o][0].length),\"greedy\"===r&&n){for(var d=[],l=0;l<u;l++){var c=s?e[l]:l;d.push(t[o][c])}h=\"\"===d.join(\"\").trim()}if(!h){for(var p=0;p<u;p++){0<p&&!f&&(i+=m);var g=n&&s?e[p]:p;i+=v(t[o][g],p)}o<t.length-1&&(!r||0<u&&!f)&&(i+=y)}}return i}function v(e,t){if(null==e)return\"\";if(e.constructor===Date)return JSON.stringify(e).slice(1,25);var r=!1;o&&\"string\"==typeof e&&o.test(e)&&(e=\"'\"+e,r=!0);var i=e.toString().replace(u,a);return(r=r||!0===n||\"function\"==typeof n&&n(e,t)||Array.isArray(n)&&n[t]||function(e,t){for(var r=0;r<t.length;r++)if(-1<e.indexOf(t[r]))return!0;return!1}(i,b.BAD_DELIMITERS)||-1<i.indexOf(m)||\" \"===i.charAt(0)||\" \"===i.charAt(i.length-1))?s+i+s:i}}};if(b.RECORD_SEP=String.fromCharCode(30),b.UNIT_SEP=String.fromCharCode(31),b.BYTE_ORDER_MARK=\"\\ufeff\",b.BAD_DELIMITERS=[\"\\r\",\"\\n\",'\"',b.BYTE_ORDER_MARK],b.WORKERS_SUPPORTED=!n&&!!f.Worker,b.NODE_STREAM_INPUT=1,b.LocalChunkSize=10485760,b.RemoteChunkSize=5242880,b.DefaultDelimiter=\",\",b.Parser=E,b.ParserHandle=r,b.NetworkStreamer=l,b.FileStreamer=c,b.StringStreamer=p,b.ReadableStreamStreamer=g,f.jQuery){var d=f.jQuery;d.fn.parse=function(o){var r=o.config||{},u=[];return this.each(function(e){if(!(\"INPUT\"===d(this).prop(\"tagName\").toUpperCase()&&\"file\"===d(this).attr(\"type\").toLowerCase()&&f.FileReader)||!this.files||0===this.files.length)return!0;for(var t=0;t<this.files.length;t++)u.push({file:this.files[t],inputElem:this,instanceConfig:d.extend({},r)})}),e(),this;function e(){if(0!==u.length){var e,t,r,i,n=u[0];if(J(o.before)){var s=o.before(n.file,n.inputElem);if(\"object\"==typeof s){if(\"abort\"===s.action)return e=\"AbortError\",t=n.file,r=n.inputElem,i=s.reason,void(J(o.error)&&o.error({name:e},t,r,i));if(\"skip\"===s.action)return void h();\"object\"==typeof s.config&&(n.instanceConfig=d.extend(n.instanceConfig,s.config))}else if(\"skip\"===s)return void h()}var a=n.instanceConfig.complete;n.instanceConfig.complete=function(e){J(a)&&a(e,n.file,n.inputElem),h()},b.parse(n.file,n.instanceConfig)}else J(o.complete)&&o.complete()}function h(){u.splice(0,1),e()}}}function h(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=w(e);t.chunkSize=parseInt(t.chunkSize),e.step||e.chunk||(t.chunkSize=null);this._handle=new r(t),(this._handle.streamer=this)._config=t}.call(this,e),this.parseChunk=function(e,t){if(this.isFirstChunk&&J(this._config.beforeFirstChunk)){var r=this._config.beforeFirstChunk(e);void 0!==r&&(e=r)}this.isFirstChunk=!1,this._halted=!1;var i=this._partialLine+e;this._partialLine=\"\";var n=this._handle.parse(i,this._baseIndex,!this._finished);if(!this._handle.paused()&&!this._handle.aborted()){var s=n.meta.cursor;this._finished||(this._partialLine=i.substring(s-this._baseIndex),this._baseIndex=s),n&&n.data&&(this._rowCount+=n.data.length);var a=this._finished||this._config.preview&&this._rowCount>=this._config.preview;if(o)f.postMessage({results:n,workerId:b.WORKER_ID,finished:a});else if(J(this._config.chunk)&&!t){if(this._config.chunk(n,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);n=void 0,this._completeResults=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(n.data),this._completeResults.errors=this._completeResults.errors.concat(n.errors),this._completeResults.meta=n.meta),this._completed||!a||!J(this._config.complete)||n&&n.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),a||n&&n.meta.paused||this._nextChunk(),n}this._halted=!0},this._sendError=function(e){J(this._config.error)?this._config.error(e):o&&this._config.error&&f.postMessage({workerId:b.WORKER_ID,error:e,finished:!1})}}function l(e){var i;(e=e||{}).chunkSize||(e.chunkSize=b.RemoteChunkSize),h.call(this,e),this._nextChunk=n?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(i=new XMLHttpRequest,this._config.withCredentials&&(i.withCredentials=this._config.withCredentials),n||(i.onload=v(this._chunkLoaded,this),i.onerror=v(this._chunkError,this)),i.open(this._config.downloadRequestBody?\"POST\":\"GET\",this._input,!n),this._config.downloadRequestHeaders){var e=this._config.downloadRequestHeaders;for(var t in e)i.setRequestHeader(t,e[t])}if(this._config.chunkSize){var r=this._start+this._config.chunkSize-1;i.setRequestHeader(\"Range\",\"bytes=\"+this._start+\"-\"+r)}try{i.send(this._config.downloadRequestBody)}catch(e){this._chunkError(e.message)}n&&0===i.status&&this._chunkError()}},this._chunkLoaded=function(){4===i.readyState&&(i.status<200||400<=i.status?this._chunkError():(this._start+=this._config.chunkSize?this._config.chunkSize:i.responseText.length,this._finished=!this._config.chunkSize||this._start>=function(e){var t=e.getResponseHeader(\"Content-Range\");if(null===t)return-1;return parseInt(t.substring(t.lastIndexOf(\"/\")+1))}(i),this.parseChunk(i.responseText)))},this._chunkError=function(e){var t=i.statusText||e;this._sendError(new Error(t))}}function c(e){var i,n;(e=e||{}).chunkSize||(e.chunkSize=b.LocalChunkSize),h.call(this,e);var s=\"undefined\"!=typeof FileReader;this.stream=function(e){this._input=e,n=e.slice||e.webkitSlice||e.mozSlice,s?((i=new FileReader).onload=v(this._chunkLoaded,this),i.onerror=v(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;if(this._config.chunkSize){var t=Math.min(this._start+this._config.chunkSize,this._input.size);e=n.call(e,this._start,t)}var r=i.readAsText(e,this._config.encoding);s||this._chunkLoaded({target:{result:r}})},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 p(e){var r;h.call(this,e=e||{}),this.stream=function(e){return r=e,this._nextChunk()},this._nextChunk=function(){if(!this._finished){var e,t=this._config.chunkSize;return t?(e=r.substring(0,t),r=r.substring(t)):(e=r,r=\"\"),this._finished=!r,this.parseChunk(e)}}}function g(e){h.call(this,e=e||{});var t=[],r=!0,i=!1;this.pause=function(){h.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){h.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(){i&&1===t.length&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):r=!0},this._streamData=v(function(e){try{t.push(\"string\"==typeof e?e:e.toString(this._config.encoding)),r&&(r=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}},this),this._streamError=v(function(e){this._streamCleanUp(),this._sendError(e)},this),this._streamEnd=v(function(){this._streamCleanUp(),i=!0,this._streamData(\"\")},this),this._streamCleanUp=v(function(){this._input.removeListener(\"data\",this._streamData),this._input.removeListener(\"end\",this._streamEnd),this._input.removeListener(\"error\",this._streamError)},this)}function r(m){var a,o,u,i=Math.pow(2,53),n=-i,s=/^\\s*-?(\\d+\\.?|\\.\\d+|\\d+\\.\\d+)([eE][-+]?\\d+)?\\s*$/,h=/^((\\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)))$/,t=this,r=0,f=0,d=!1,e=!1,l=[],c={data:[],errors:[],meta:{}};if(J(m.step)){var p=m.step;m.step=function(e){if(c=e,_())g();else{if(g(),0===c.data.length)return;r+=e.data.length,m.preview&&r>m.preview?o.abort():(c.data=c.data[0],p(c,t))}}}function y(e){return\"greedy\"===m.skipEmptyLines?\"\"===e.join(\"\").trim():1===e.length&&0===e[0].length}function g(){return c&&u&&(k(\"Delimiter\",\"UndetectableDelimiter\",\"Unable to auto-detect delimiting character; defaulted to '\"+b.DefaultDelimiter+\"'\"),u=!1),m.skipEmptyLines&&(c.data=c.data.filter(function(e){return!y(e)})),_()&&function(){if(!c)return;function e(e,t){J(m.transformHeader)&&(e=m.transformHeader(e,t)),l.push(e)}if(Array.isArray(c.data[0])){for(var t=0;_()&&t<c.data.length;t++)c.data[t].forEach(e);c.data.splice(0,1)}else c.data.forEach(e)}(),function(){if(!c||!m.header&&!m.dynamicTyping&&!m.transform)return c;function e(e,t){var r,i=m.header?{}:[];for(r=0;r<e.length;r++){var n=r,s=e[r];m.header&&(n=r>=l.length?\"__parsed_extra\":l[r]),m.transform&&(s=m.transform(s,n)),s=v(n,s),\"__parsed_extra\"===n?(i[n]=i[n]||[],i[n].push(s)):i[n]=s}return m.header&&(r>l.length?k(\"FieldMismatch\",\"TooManyFields\",\"Too many fields: expected \"+l.length+\" fields but parsed \"+r,f+t):r<l.length&&k(\"FieldMismatch\",\"TooFewFields\",\"Too few fields: expected \"+l.length+\" fields but parsed \"+r,f+t)),i}var t=1;!c.data.length||Array.isArray(c.data[0])?(c.data=c.data.map(e),t=c.data.length):c.data=e(c.data,0);m.header&&c.meta&&(c.meta.fields=l);return f+=t,c}()}function _(){return m.header&&0===l.length}function v(e,t){return r=e,m.dynamicTypingFunction&&void 0===m.dynamicTyping[r]&&(m.dynamicTyping[r]=m.dynamicTypingFunction(r)),!0===(m.dynamicTyping[r]||m.dynamicTyping)?\"true\"===t||\"TRUE\"===t||\"false\"!==t&&\"FALSE\"!==t&&(function(e){if(s.test(e)){var t=parseFloat(e);if(n<t&&t<i)return!0}return!1}(t)?parseFloat(t):h.test(t)?new Date(t):\"\"===t?null:t):t;var r}function k(e,t,r,i){var n={type:e,code:t,message:r};void 0!==i&&(n.row=i),c.errors.push(n)}this.parse=function(e,t,r){var i=m.quoteChar||'\"';if(m.newline||(m.newline=function(e,t){e=e.substring(0,1048576);var r=new RegExp(Q(t)+\"([^]*?)\"+Q(t),\"gm\"),i=(e=e.replace(r,\"\")).split(\"\\r\"),n=e.split(\"\\n\"),s=1<n.length&&n[0].length<i[0].length;if(1===i.length||s)return\"\\n\";for(var a=0,o=0;o<i.length;o++)\"\\n\"===i[o][0]&&a++;return a>=i.length/2?\"\\r\\n\":\"\\r\"}(e,i)),u=!1,m.delimiter)J(m.delimiter)&&(m.delimiter=m.delimiter(e),c.meta.delimiter=m.delimiter);else{var n=function(e,t,r,i,n){var s,a,o,u;n=n||[\",\",\"\\t\",\"|\",\";\",b.RECORD_SEP,b.UNIT_SEP];for(var h=0;h<n.length;h++){var f=n[h],d=0,l=0,c=0;o=void 0;for(var p=new E({comments:i,delimiter:f,newline:t,preview:10}).parse(e),g=0;g<p.data.length;g++)if(r&&y(p.data[g]))c++;else{var _=p.data[g].length;l+=_,void 0!==o?0<_&&(d+=Math.abs(_-o),o=_):o=_}0<p.data.length&&(l/=p.data.length-c),(void 0===a||d<=a)&&(void 0===u||u<l)&&1.99<l&&(a=d,s=f,u=l)}return{successful:!!(m.delimiter=s),bestDelimiter:s}}(e,m.newline,m.skipEmptyLines,m.comments,m.delimitersToGuess);n.successful?m.delimiter=n.bestDelimiter:(u=!0,m.delimiter=b.DefaultDelimiter),c.meta.delimiter=m.delimiter}var s=w(m);return m.preview&&m.header&&s.preview++,a=e,o=new E(s),c=o.parse(a,t,r),g(),d?{meta:{paused:!0}}:c||{meta:{paused:!1}}},this.paused=function(){return d},this.pause=function(){d=!0,o.abort(),a=J(m.chunk)?\"\":a.substring(o.getCharIndex())},this.resume=function(){t.streamer._halted?(d=!1,t.streamer.parseChunk(a,!0)):setTimeout(t.resume,3)},this.aborted=function(){return e},this.abort=function(){e=!0,o.abort(),c.meta.aborted=!0,J(m.complete)&&m.complete(c),a=\"\"}}function Q(e){return e.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}function E(j){var z,M=(j=j||{}).delimiter,P=j.newline,U=j.comments,q=j.step,N=j.preview,B=j.fastMode,K=z=void 0===j.quoteChar||null===j.quoteChar?'\"':j.quoteChar;if(void 0!==j.escapeChar&&(K=j.escapeChar),(\"string\"!=typeof M||-1<b.BAD_DELIMITERS.indexOf(M))&&(M=\",\"),U===M)throw new Error(\"Comment character same as delimiter\");!0===U?U=\"#\":(\"string\"!=typeof U||-1<b.BAD_DELIMITERS.indexOf(U))&&(U=!1),\"\\n\"!==P&&\"\\r\"!==P&&\"\\r\\n\"!==P&&(P=\"\\n\");var W=0,H=!1;this.parse=function(i,t,r){if(\"string\"!=typeof i)throw new Error(\"Input must be a string\");var n=i.length,e=M.length,s=P.length,a=U.length,o=J(q),u=[],h=[],f=[],d=W=0;if(!i)return L();if(j.header&&!t){var l=i.split(P)[0].split(M),c=[],p={},g=!1;for(var _ in l){var m=l[_];J(j.transformHeader)&&(m=j.transformHeader(m,_));var y=m,v=p[m]||0;for(0<v&&(g=!0,y=m+\"_\"+v),p[m]=v+1;c.includes(y);)y=y+\"_\"+v;c.push(y)}if(g){var k=i.split(P);k[0]=c.join(M),i=k.join(P)}}if(B||!1!==B&&-1===i.indexOf(z)){for(var b=i.split(P),E=0;E<b.length;E++){if(f=b[E],W+=f.length,E!==b.length-1)W+=P.length;else if(r)return L();if(!U||f.substring(0,a)!==U){if(o){if(u=[],I(f.split(M)),F(),H)return L()}else I(f.split(M));if(N&&N<=E)return u=u.slice(0,N),L(!0)}}return L()}for(var w=i.indexOf(M,W),R=i.indexOf(P,W),C=new RegExp(Q(K)+Q(z),\"g\"),S=i.indexOf(z,W);;)if(i[W]!==z)if(U&&0===f.length&&i.substring(W,W+a)===U){if(-1===R)return L();W=R+s,R=i.indexOf(P,W),w=i.indexOf(M,W)}else if(-1!==w&&(w<R||-1===R))f.push(i.substring(W,w)),W=w+e,w=i.indexOf(M,W);else{if(-1===R)break;if(f.push(i.substring(W,R)),D(R+s),o&&(F(),H))return L();if(N&&u.length>=N)return L(!0)}else for(S=W,W++;;){if(-1===(S=i.indexOf(z,S+1)))return r||h.push({type:\"Quotes\",code:\"MissingQuotes\",message:\"Quoted field unterminated\",row:u.length,index:W}),T();if(S===n-1)return T(i.substring(W,S).replace(C,z));if(z!==K||i[S+1]!==K){if(z===K||0===S||i[S-1]!==K){-1!==w&&w<S+1&&(w=i.indexOf(M,S+1)),-1!==R&&R<S+1&&(R=i.indexOf(P,S+1));var O=A(-1===R?w:Math.min(w,R));if(i.substr(S+1+O,e)===M){f.push(i.substring(W,S).replace(C,z)),i[W=S+1+O+e]!==z&&(S=i.indexOf(z,W)),w=i.indexOf(M,W),R=i.indexOf(P,W);break}var x=A(R);if(i.substring(S+1+x,S+1+x+s)===P){if(f.push(i.substring(W,S).replace(C,z)),D(S+1+x+s),w=i.indexOf(M,W),S=i.indexOf(z,W),o&&(F(),H))return L();if(N&&u.length>=N)return L(!0);break}h.push({type:\"Quotes\",code:\"InvalidQuotes\",message:\"Trailing quote on quoted field is malformed\",row:u.length,index:W}),S++}}else S++}return T();function I(e){u.push(e),d=W}function A(e){var t=0;if(-1!==e){var r=i.substring(S+1,e);r&&\"\"===r.trim()&&(t=r.length)}return t}function T(e){return r||(void 0===e&&(e=i.substring(W)),f.push(e),W=n,I(f),o&&F()),L()}function D(e){W=e,I(f),f=[],R=i.indexOf(P,W)}function L(e){return{data:u,errors:h,meta:{delimiter:M,linebreak:P,aborted:H,truncated:!!e,cursor:d+(t||0)}}}function F(){q(L()),u=[],h=[]}},this.abort=function(){H=!0},this.getCharIndex=function(){return W}}function _(e){var t=e.data,r=a[t.workerId],i=!1;if(t.error)r.userError(t.error,t.file);else if(t.results&&t.results.data){var n={abort:function(){i=!0,m(t.workerId,{data:[],errors:[],meta:{aborted:!0}})},pause:y,resume:y};if(J(r.userStep)){for(var s=0;s<t.results.data.length&&(r.userStep({data:t.results.data[s],errors:t.results.errors,meta:t.results.meta},n),!i);s++);delete t.results}else J(r.userChunk)&&(r.userChunk(t.results,n,t.file),delete t.results)}t.finished&&!i&&m(t.workerId,t.results)}function m(e,t){var r=a[e];J(r.userComplete)&&r.userComplete(t),r.terminate(),delete a[e]}function y(){throw new Error(\"Not implemented.\")}function w(e){if(\"object\"!=typeof e||null===e)return e;var t=Array.isArray(e)?[]:{};for(var r in e)t[r]=w(e[r]);return t}function v(e,t){return function(){e.apply(t,arguments)}}function J(e){return\"function\"==typeof e}return o&&(f.onmessage=function(e){var t=e.data;void 0===b.WORKER_ID&&t&&(b.WORKER_ID=t.workerId);if(\"string\"==typeof t.input)f.postMessage({workerId:b.WORKER_ID,results:b.parse(t.input,t.config),finished:!0});else if(f.File&&t.input instanceof File||t.input instanceof Object){var r=b.parse(t.input,t.config);r&&f.postMessage({workerId:b.WORKER_ID,results:r,finished:!0})}}),(l.prototype=Object.create(h.prototype)).constructor=l,(c.prototype=Object.create(h.prototype)).constructor=c,(p.prototype=Object.create(p.prototype)).constructor=p,(g.prototype=Object.create(h.prototype)).constructor=g,b});","'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7F]/; // Note: U+007F DEL is excluded too.\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, callback) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = callback(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {String} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(domain, callback) {\n\tconst parts = domain.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tdomain = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tdomain = domain.replace(regexSeparators, '\\x2E');\n\tconst labels = domain.split('.');\n\tconst encoded = map(labels, callback).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = codePoints => String.fromCodePoint(...codePoints);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint >= 0x30 && codePoint < 0x3A) {\n\t\treturn 26 + (codePoint - 0x30);\n\t}\n\tif (codePoint >= 0x41 && codePoint < 0x5B) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint >= 0x61 && codePoint < 0x7B) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t//  0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tconst oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\t\t\tif (digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tconst inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tconst basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue === n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.3.1',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nexport { ucs2decode, ucs2encode, decode, encode, toASCII, toUnicode };\nexport default punycode;\n","\nconst canPromise = require('./can-promise')\n\nconst QRCode = require('./core/qrcode')\nconst CanvasRenderer = require('./renderer/canvas')\nconst SvgRenderer = require('./renderer/svg-tag.js')\n\nfunction renderCanvas (renderFunc, canvas, text, opts, cb) {\n  const args = [].slice.call(arguments, 1)\n  const argsNum = args.length\n  const isLastArgCb = typeof args[argsNum - 1] === 'function'\n\n  if (!isLastArgCb && !canPromise()) {\n    throw new Error('Callback required as last argument')\n  }\n\n  if (isLastArgCb) {\n    if (argsNum < 2) {\n      throw new Error('Too few arguments provided')\n    }\n\n    if (argsNum === 2) {\n      cb = text\n      text = canvas\n      canvas = opts = undefined\n    } else if (argsNum === 3) {\n      if (canvas.getContext && typeof cb === 'undefined') {\n        cb = opts\n        opts = undefined\n      } else {\n        cb = opts\n        opts = text\n        text = canvas\n        canvas = undefined\n      }\n    }\n  } else {\n    if (argsNum < 1) {\n      throw new Error('Too few arguments provided')\n    }\n\n    if (argsNum === 1) {\n      text = canvas\n      canvas = opts = undefined\n    } else if (argsNum === 2 && !canvas.getContext) {\n      opts = text\n      text = canvas\n      canvas = undefined\n    }\n\n    return new Promise(function (resolve, reject) {\n      try {\n        const data = QRCode.create(text, opts)\n        resolve(renderFunc(data, canvas, opts))\n      } catch (e) {\n        reject(e)\n      }\n    })\n  }\n\n  try {\n    const data = QRCode.create(text, opts)\n    cb(null, renderFunc(data, canvas, opts))\n  } catch (e) {\n    cb(e)\n  }\n}\n\nexports.create = QRCode.create\nexports.toCanvas = renderCanvas.bind(null, CanvasRenderer.render)\nexports.toDataURL = renderCanvas.bind(null, CanvasRenderer.renderToDataURL)\n\n// only svg for now.\nexports.toString = renderCanvas.bind(null, function (data, _, opts) {\n  return SvgRenderer.render(data, opts)\n})\n","// can-promise has a crash in some versions of react native that dont have\n// standard global objects\n// https://github.com/soldair/node-qrcode/issues/157\n\nmodule.exports = function () {\n  return typeof Promise === 'function' && Promise.prototype && Promise.prototype.then\n}\n","/**\n * Alignment pattern are fixed reference pattern in defined positions\n * in a matrix symbology, which enables the decode software to re-synchronise\n * the coordinate mapping of the image modules in the event of moderate amounts\n * of distortion of the image.\n *\n * Alignment patterns are present only in QR Code symbols of version 2 or larger\n * and their number depends on the symbol version.\n */\n\nconst getSymbolSize = require('./utils').getSymbolSize\n\n/**\n * Calculate the row/column coordinates of the center module of each alignment pattern\n * for the specified QR Code version.\n *\n * The alignment patterns are positioned symmetrically on either side of the diagonal\n * running from the top left corner of the symbol to the bottom right corner.\n *\n * Since positions are simmetrical only half of the coordinates are returned.\n * Each item of the array will represent in turn the x and y coordinate.\n * @see {@link getPositions}\n *\n * @param  {Number} version QR Code version\n * @return {Array}          Array of coordinate\n */\nexports.getRowColCoords = function getRowColCoords (version) {\n  if (version === 1) return []\n\n  const posCount = Math.floor(version / 7) + 2\n  const size = getSymbolSize(version)\n  const intervals = size === 145 ? 26 : Math.ceil((size - 13) / (2 * posCount - 2)) * 2\n  const positions = [size - 7] // Last coord is always (size - 7)\n\n  for (let i = 1; i < posCount - 1; i++) {\n    positions[i] = positions[i - 1] - intervals\n  }\n\n  positions.push(6) // First coord is always 6\n\n  return positions.reverse()\n}\n\n/**\n * Returns an array containing the positions of each alignment pattern.\n * Each array's element represent the center point of the pattern as (x, y) coordinates\n *\n * Coordinates are calculated expanding the row/column coordinates returned by {@link getRowColCoords}\n * and filtering out the items that overlaps with finder pattern\n *\n * @example\n * For a Version 7 symbol {@link getRowColCoords} returns values 6, 22 and 38.\n * The alignment patterns, therefore, are to be centered on (row, column)\n * positions (6,22), (22,6), (22,22), (22,38), (38,22), (38,38).\n * Note that the coordinates (6,6), (6,38), (38,6) are occupied by finder patterns\n * and are not therefore used for alignment patterns.\n *\n * let pos = getPositions(7)\n * // [[6,22], [22,6], [22,22], [22,38], [38,22], [38,38]]\n *\n * @param  {Number} version QR Code version\n * @return {Array}          Array of coordinates\n */\nexports.getPositions = function getPositions (version) {\n  const coords = []\n  const pos = exports.getRowColCoords(version)\n  const posLength = pos.length\n\n  for (let i = 0; i < posLength; i++) {\n    for (let j = 0; j < posLength; j++) {\n      // Skip if position is occupied by finder patterns\n      if ((i === 0 && j === 0) || // top-left\n          (i === 0 && j === posLength - 1) || // bottom-left\n          (i === posLength - 1 && j === 0)) { // top-right\n        continue\n      }\n\n      coords.push([pos[i], pos[j]])\n    }\n  }\n\n  return coords\n}\n","const Mode = require('./mode')\n\n/**\n * Array of characters available in alphanumeric mode\n *\n * As per QR Code specification, to each character\n * is assigned a value from 0 to 44 which in this case coincides\n * with the array index\n *\n * @type {Array}\n */\nconst ALPHA_NUM_CHARS = [\n  '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',\n  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',\n  'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',\n  ' ', '$', '%', '*', '+', '-', '.', '/', ':'\n]\n\nfunction AlphanumericData (data) {\n  this.mode = Mode.ALPHANUMERIC\n  this.data = data\n}\n\nAlphanumericData.getBitsLength = function getBitsLength (length) {\n  return 11 * Math.floor(length / 2) + 6 * (length % 2)\n}\n\nAlphanumericData.prototype.getLength = function getLength () {\n  return this.data.length\n}\n\nAlphanumericData.prototype.getBitsLength = function getBitsLength () {\n  return AlphanumericData.getBitsLength(this.data.length)\n}\n\nAlphanumericData.prototype.write = function write (bitBuffer) {\n  let i\n\n  // Input data characters are divided into groups of two characters\n  // and encoded as 11-bit binary codes.\n  for (i = 0; i + 2 <= this.data.length; i += 2) {\n    // The character value of the first character is multiplied by 45\n    let value = ALPHA_NUM_CHARS.indexOf(this.data[i]) * 45\n\n    // The character value of the second digit is added to the product\n    value += ALPHA_NUM_CHARS.indexOf(this.data[i + 1])\n\n    // The sum is then stored as 11-bit binary number\n    bitBuffer.put(value, 11)\n  }\n\n  // If the number of input data characters is not a multiple of two,\n  // the character value of the final character is encoded as a 6-bit binary number.\n  if (this.data.length % 2) {\n    bitBuffer.put(ALPHA_NUM_CHARS.indexOf(this.data[i]), 6)\n  }\n}\n\nmodule.exports = AlphanumericData\n","function BitBuffer () {\n  this.buffer = []\n  this.length = 0\n}\n\nBitBuffer.prototype = {\n\n  get: function (index) {\n    const bufIndex = Math.floor(index / 8)\n    return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1) === 1\n  },\n\n  put: function (num, length) {\n    for (let i = 0; i < length; i++) {\n      this.putBit(((num >>> (length - i - 1)) & 1) === 1)\n    }\n  },\n\n  getLengthInBits: function () {\n    return this.length\n  },\n\n  putBit: function (bit) {\n    const bufIndex = Math.floor(this.length / 8)\n    if (this.buffer.length <= bufIndex) {\n      this.buffer.push(0)\n    }\n\n    if (bit) {\n      this.buffer[bufIndex] |= (0x80 >>> (this.length % 8))\n    }\n\n    this.length++\n  }\n}\n\nmodule.exports = BitBuffer\n","/**\n * Helper class to handle QR Code symbol modules\n *\n * @param {Number} size Symbol size\n */\nfunction BitMatrix (size) {\n  if (!size || size < 1) {\n    throw new Error('BitMatrix size must be defined and greater than 0')\n  }\n\n  this.size = size\n  this.data = new Uint8Array(size * size)\n  this.reservedBit = new Uint8Array(size * size)\n}\n\n/**\n * Set bit value at specified location\n * If reserved flag is set, this bit will be ignored during masking process\n *\n * @param {Number}  row\n * @param {Number}  col\n * @param {Boolean} value\n * @param {Boolean} reserved\n */\nBitMatrix.prototype.set = function (row, col, value, reserved) {\n  const index = row * this.size + col\n  this.data[index] = value\n  if (reserved) this.reservedBit[index] = true\n}\n\n/**\n * Returns bit value at specified location\n *\n * @param  {Number}  row\n * @param  {Number}  col\n * @return {Boolean}\n */\nBitMatrix.prototype.get = function (row, col) {\n  return this.data[row * this.size + col]\n}\n\n/**\n * Applies xor operator at specified location\n * (used during masking process)\n *\n * @param {Number}  row\n * @param {Number}  col\n * @param {Boolean} value\n */\nBitMatrix.prototype.xor = function (row, col, value) {\n  this.data[row * this.size + col] ^= value\n}\n\n/**\n * Check if bit at specified location is reserved\n *\n * @param {Number}   row\n * @param {Number}   col\n * @return {Boolean}\n */\nBitMatrix.prototype.isReserved = function (row, col) {\n  return this.reservedBit[row * this.size + col]\n}\n\nmodule.exports = BitMatrix\n","const encodeUtf8 = require('encode-utf8')\nconst Mode = require('./mode')\n\nfunction ByteData (data) {\n  this.mode = Mode.BYTE\n  if (typeof (data) === 'string') {\n    data = encodeUtf8(data)\n  }\n  this.data = new Uint8Array(data)\n}\n\nByteData.getBitsLength = function getBitsLength (length) {\n  return length * 8\n}\n\nByteData.prototype.getLength = function getLength () {\n  return this.data.length\n}\n\nByteData.prototype.getBitsLength = function getBitsLength () {\n  return ByteData.getBitsLength(this.data.length)\n}\n\nByteData.prototype.write = function (bitBuffer) {\n  for (let i = 0, l = this.data.length; i < l; i++) {\n    bitBuffer.put(this.data[i], 8)\n  }\n}\n\nmodule.exports = ByteData\n","const ECLevel = require('./error-correction-level')\r\n\r\nconst EC_BLOCKS_TABLE = [\r\n// L  M  Q  H\r\n  1, 1, 1, 1,\r\n  1, 1, 1, 1,\r\n  1, 1, 2, 2,\r\n  1, 2, 2, 4,\r\n  1, 2, 4, 4,\r\n  2, 4, 4, 4,\r\n  2, 4, 6, 5,\r\n  2, 4, 6, 6,\r\n  2, 5, 8, 8,\r\n  4, 5, 8, 8,\r\n  4, 5, 8, 11,\r\n  4, 8, 10, 11,\r\n  4, 9, 12, 16,\r\n  4, 9, 16, 16,\r\n  6, 10, 12, 18,\r\n  6, 10, 17, 16,\r\n  6, 11, 16, 19,\r\n  6, 13, 18, 21,\r\n  7, 14, 21, 25,\r\n  8, 16, 20, 25,\r\n  8, 17, 23, 25,\r\n  9, 17, 23, 34,\r\n  9, 18, 25, 30,\r\n  10, 20, 27, 32,\r\n  12, 21, 29, 35,\r\n  12, 23, 34, 37,\r\n  12, 25, 34, 40,\r\n  13, 26, 35, 42,\r\n  14, 28, 38, 45,\r\n  15, 29, 40, 48,\r\n  16, 31, 43, 51,\r\n  17, 33, 45, 54,\r\n  18, 35, 48, 57,\r\n  19, 37, 51, 60,\r\n  19, 38, 53, 63,\r\n  20, 40, 56, 66,\r\n  21, 43, 59, 70,\r\n  22, 45, 62, 74,\r\n  24, 47, 65, 77,\r\n  25, 49, 68, 81\r\n]\r\n\r\nconst EC_CODEWORDS_TABLE = [\r\n// L  M  Q  H\r\n  7, 10, 13, 17,\r\n  10, 16, 22, 28,\r\n  15, 26, 36, 44,\r\n  20, 36, 52, 64,\r\n  26, 48, 72, 88,\r\n  36, 64, 96, 112,\r\n  40, 72, 108, 130,\r\n  48, 88, 132, 156,\r\n  60, 110, 160, 192,\r\n  72, 130, 192, 224,\r\n  80, 150, 224, 264,\r\n  96, 176, 260, 308,\r\n  104, 198, 288, 352,\r\n  120, 216, 320, 384,\r\n  132, 240, 360, 432,\r\n  144, 280, 408, 480,\r\n  168, 308, 448, 532,\r\n  180, 338, 504, 588,\r\n  196, 364, 546, 650,\r\n  224, 416, 600, 700,\r\n  224, 442, 644, 750,\r\n  252, 476, 690, 816,\r\n  270, 504, 750, 900,\r\n  300, 560, 810, 960,\r\n  312, 588, 870, 1050,\r\n  336, 644, 952, 1110,\r\n  360, 700, 1020, 1200,\r\n  390, 728, 1050, 1260,\r\n  420, 784, 1140, 1350,\r\n  450, 812, 1200, 1440,\r\n  480, 868, 1290, 1530,\r\n  510, 924, 1350, 1620,\r\n  540, 980, 1440, 1710,\r\n  570, 1036, 1530, 1800,\r\n  570, 1064, 1590, 1890,\r\n  600, 1120, 1680, 1980,\r\n  630, 1204, 1770, 2100,\r\n  660, 1260, 1860, 2220,\r\n  720, 1316, 1950, 2310,\r\n  750, 1372, 2040, 2430\r\n]\r\n\r\n/**\r\n * Returns the number of error correction block that the QR Code should contain\r\n * for the specified version and error correction level.\r\n *\r\n * @param  {Number} version              QR Code version\r\n * @param  {Number} errorCorrectionLevel Error correction level\r\n * @return {Number}                      Number of error correction blocks\r\n */\r\nexports.getBlocksCount = function getBlocksCount (version, errorCorrectionLevel) {\r\n  switch (errorCorrectionLevel) {\r\n    case ECLevel.L:\r\n      return EC_BLOCKS_TABLE[(version - 1) * 4 + 0]\r\n    case ECLevel.M:\r\n      return EC_BLOCKS_TABLE[(version - 1) * 4 + 1]\r\n    case ECLevel.Q:\r\n      return EC_BLOCKS_TABLE[(version - 1) * 4 + 2]\r\n    case ECLevel.H:\r\n      return EC_BLOCKS_TABLE[(version - 1) * 4 + 3]\r\n    default:\r\n      return undefined\r\n  }\r\n}\r\n\r\n/**\r\n * Returns the number of error correction codewords to use for the specified\r\n * version and error correction level.\r\n *\r\n * @param  {Number} version              QR Code version\r\n * @param  {Number} errorCorrectionLevel Error correction level\r\n * @return {Number}                      Number of error correction codewords\r\n */\r\nexports.getTotalCodewordsCount = function getTotalCodewordsCount (version, errorCorrectionLevel) {\r\n  switch (errorCorrectionLevel) {\r\n    case ECLevel.L:\r\n      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 0]\r\n    case ECLevel.M:\r\n      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 1]\r\n    case ECLevel.Q:\r\n      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 2]\r\n    case ECLevel.H:\r\n      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 3]\r\n    default:\r\n      return undefined\r\n  }\r\n}\r\n","exports.L = { bit: 1 }\nexports.M = { bit: 0 }\nexports.Q = { bit: 3 }\nexports.H = { bit: 2 }\n\nfunction fromString (string) {\n  if (typeof string !== 'string') {\n    throw new Error('Param is not a string')\n  }\n\n  const lcStr = string.toLowerCase()\n\n  switch (lcStr) {\n    case 'l':\n    case 'low':\n      return exports.L\n\n    case 'm':\n    case 'medium':\n      return exports.M\n\n    case 'q':\n    case 'quartile':\n      return exports.Q\n\n    case 'h':\n    case 'high':\n      return exports.H\n\n    default:\n      throw new Error('Unknown EC Level: ' + string)\n  }\n}\n\nexports.isValid = function isValid (level) {\n  return level && typeof level.bit !== 'undefined' &&\n    level.bit >= 0 && level.bit < 4\n}\n\nexports.from = function from (value, defaultValue) {\n  if (exports.isValid(value)) {\n    return value\n  }\n\n  try {\n    return fromString(value)\n  } catch (e) {\n    return defaultValue\n  }\n}\n","const getSymbolSize = require('./utils').getSymbolSize\nconst FINDER_PATTERN_SIZE = 7\n\n/**\n * Returns an array containing the positions of each finder pattern.\n * Each array's element represent the top-left point of the pattern as (x, y) coordinates\n *\n * @param  {Number} version QR Code version\n * @return {Array}          Array of coordinates\n */\nexports.getPositions = function getPositions (version) {\n  const size = getSymbolSize(version)\n\n  return [\n    // top-left\n    [0, 0],\n    // top-right\n    [size - FINDER_PATTERN_SIZE, 0],\n    // bottom-left\n    [0, size - FINDER_PATTERN_SIZE]\n  ]\n}\n","const Utils = require('./utils')\n\nconst G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0)\nconst G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1)\nconst G15_BCH = Utils.getBCHDigit(G15)\n\n/**\n * Returns format information with relative error correction bits\n *\n * The format information is a 15-bit sequence containing 5 data bits,\n * with 10 error correction bits calculated using the (15, 5) BCH code.\n *\n * @param  {Number} errorCorrectionLevel Error correction level\n * @param  {Number} mask                 Mask pattern\n * @return {Number}                      Encoded format information bits\n */\nexports.getEncodedBits = function getEncodedBits (errorCorrectionLevel, mask) {\n  const data = ((errorCorrectionLevel.bit << 3) | mask)\n  let d = data << 10\n\n  while (Utils.getBCHDigit(d) - G15_BCH >= 0) {\n    d ^= (G15 << (Utils.getBCHDigit(d) - G15_BCH))\n  }\n\n  // xor final data with mask pattern in order to ensure that\n  // no combination of Error Correction Level and data mask pattern\n  // will result in an all-zero data string\n  return ((data << 10) | d) ^ G15_MASK\n}\n","const EXP_TABLE = new Uint8Array(512)\nconst LOG_TABLE = new Uint8Array(256)\n/**\n * Precompute the log and anti-log tables for faster computation later\n *\n * For each possible value in the galois field 2^8, we will pre-compute\n * the logarithm and anti-logarithm (exponential) of this value\n *\n * ref {@link https://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_for_coders#Introduction_to_mathematical_fields}\n */\n;(function initTables () {\n  let x = 1\n  for (let i = 0; i < 255; i++) {\n    EXP_TABLE[i] = x\n    LOG_TABLE[x] = i\n\n    x <<= 1 // multiply by 2\n\n    // The QR code specification says to use byte-wise modulo 100011101 arithmetic.\n    // This means that when a number is 256 or larger, it should be XORed with 0x11D.\n    if (x & 0x100) { // similar to x >= 256, but a lot faster (because 0x100 == 256)\n      x ^= 0x11D\n    }\n  }\n\n  // Optimization: double the size of the anti-log table so that we don't need to mod 255 to\n  // stay inside the bounds (because we will mainly use this table for the multiplication of\n  // two GF numbers, no more).\n  // @see {@link mul}\n  for (let i = 255; i < 512; i++) {\n    EXP_TABLE[i] = EXP_TABLE[i - 255]\n  }\n}())\n\n/**\n * Returns log value of n inside Galois Field\n *\n * @param  {Number} n\n * @return {Number}\n */\nexports.log = function log (n) {\n  if (n < 1) throw new Error('log(' + n + ')')\n  return LOG_TABLE[n]\n}\n\n/**\n * Returns anti-log value of n inside Galois Field\n *\n * @param  {Number} n\n * @return {Number}\n */\nexports.exp = function exp (n) {\n  return EXP_TABLE[n]\n}\n\n/**\n * Multiplies two number inside Galois Field\n *\n * @param  {Number} x\n * @param  {Number} y\n * @return {Number}\n */\nexports.mul = function mul (x, y) {\n  if (x === 0 || y === 0) return 0\n\n  // should be EXP_TABLE[(LOG_TABLE[x] + LOG_TABLE[y]) % 255] if EXP_TABLE wasn't oversized\n  // @see {@link initTables}\n  return EXP_TABLE[LOG_TABLE[x] + LOG_TABLE[y]]\n}\n","const Mode = require('./mode')\nconst Utils = require('./utils')\n\nfunction KanjiData (data) {\n  this.mode = Mode.KANJI\n  this.data = data\n}\n\nKanjiData.getBitsLength = function getBitsLength (length) {\n  return length * 13\n}\n\nKanjiData.prototype.getLength = function getLength () {\n  return this.data.length\n}\n\nKanjiData.prototype.getBitsLength = function getBitsLength () {\n  return KanjiData.getBitsLength(this.data.length)\n}\n\nKanjiData.prototype.write = function (bitBuffer) {\n  let i\n\n  // In the Shift JIS system, Kanji characters are represented by a two byte combination.\n  // These byte values are shifted from the JIS X 0208 values.\n  // JIS X 0208 gives details of the shift coded representation.\n  for (i = 0; i < this.data.length; i++) {\n    let value = Utils.toSJIS(this.data[i])\n\n    // For characters with Shift JIS values from 0x8140 to 0x9FFC:\n    if (value >= 0x8140 && value <= 0x9FFC) {\n      // Subtract 0x8140 from Shift JIS value\n      value -= 0x8140\n\n    // For characters with Shift JIS values from 0xE040 to 0xEBBF\n    } else if (value >= 0xE040 && value <= 0xEBBF) {\n      // Subtract 0xC140 from Shift JIS value\n      value -= 0xC140\n    } else {\n      throw new Error(\n        'Invalid SJIS character: ' + this.data[i] + '\\n' +\n        'Make sure your charset is UTF-8')\n    }\n\n    // Multiply most significant byte of result by 0xC0\n    // and add least significant byte to product\n    value = (((value >>> 8) & 0xff) * 0xC0) + (value & 0xff)\n\n    // Convert result to a 13-bit binary string\n    bitBuffer.put(value, 13)\n  }\n}\n\nmodule.exports = KanjiData\n","/**\n * Data mask pattern reference\n * @type {Object}\n */\nexports.Patterns = {\n  PATTERN000: 0,\n  PATTERN001: 1,\n  PATTERN010: 2,\n  PATTERN011: 3,\n  PATTERN100: 4,\n  PATTERN101: 5,\n  PATTERN110: 6,\n  PATTERN111: 7\n}\n\n/**\n * Weighted penalty scores for the undesirable features\n * @type {Object}\n */\nconst PenaltyScores = {\n  N1: 3,\n  N2: 3,\n  N3: 40,\n  N4: 10\n}\n\n/**\n * Check if mask pattern value is valid\n *\n * @param  {Number}  mask    Mask pattern\n * @return {Boolean}         true if valid, false otherwise\n */\nexports.isValid = function isValid (mask) {\n  return mask != null && mask !== '' && !isNaN(mask) && mask >= 0 && mask <= 7\n}\n\n/**\n * Returns mask pattern from a value.\n * If value is not valid, returns undefined\n *\n * @param  {Number|String} value        Mask pattern value\n * @return {Number}                     Valid mask pattern or undefined\n */\nexports.from = function from (value) {\n  return exports.isValid(value) ? parseInt(value, 10) : undefined\n}\n\n/**\n* Find adjacent modules in row/column with the same color\n* and assign a penalty value.\n*\n* Points: N1 + i\n* i is the amount by which the number of adjacent modules of the same color exceeds 5\n*/\nexports.getPenaltyN1 = function getPenaltyN1 (data) {\n  const size = data.size\n  let points = 0\n  let sameCountCol = 0\n  let sameCountRow = 0\n  let lastCol = null\n  let lastRow = null\n\n  for (let row = 0; row < size; row++) {\n    sameCountCol = sameCountRow = 0\n    lastCol = lastRow = null\n\n    for (let col = 0; col < size; col++) {\n      let module = data.get(row, col)\n      if (module === lastCol) {\n        sameCountCol++\n      } else {\n        if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)\n        lastCol = module\n        sameCountCol = 1\n      }\n\n      module = data.get(col, row)\n      if (module === lastRow) {\n        sameCountRow++\n      } else {\n        if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)\n        lastRow = module\n        sameCountRow = 1\n      }\n    }\n\n    if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)\n    if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)\n  }\n\n  return points\n}\n\n/**\n * Find 2x2 blocks with the same color and assign a penalty value\n *\n * Points: N2 * (m - 1) * (n - 1)\n */\nexports.getPenaltyN2 = function getPenaltyN2 (data) {\n  const size = data.size\n  let points = 0\n\n  for (let row = 0; row < size - 1; row++) {\n    for (let col = 0; col < size - 1; col++) {\n      const last = data.get(row, col) +\n        data.get(row, col + 1) +\n        data.get(row + 1, col) +\n        data.get(row + 1, col + 1)\n\n      if (last === 4 || last === 0) points++\n    }\n  }\n\n  return points * PenaltyScores.N2\n}\n\n/**\n * Find 1:1:3:1:1 ratio (dark:light:dark:light:dark) pattern in row/column,\n * preceded or followed by light area 4 modules wide\n *\n * Points: N3 * number of pattern found\n */\nexports.getPenaltyN3 = function getPenaltyN3 (data) {\n  const size = data.size\n  let points = 0\n  let bitsCol = 0\n  let bitsRow = 0\n\n  for (let row = 0; row < size; row++) {\n    bitsCol = bitsRow = 0\n    for (let col = 0; col < size; col++) {\n      bitsCol = ((bitsCol << 1) & 0x7FF) | data.get(row, col)\n      if (col >= 10 && (bitsCol === 0x5D0 || bitsCol === 0x05D)) points++\n\n      bitsRow = ((bitsRow << 1) & 0x7FF) | data.get(col, row)\n      if (col >= 10 && (bitsRow === 0x5D0 || bitsRow === 0x05D)) points++\n    }\n  }\n\n  return points * PenaltyScores.N3\n}\n\n/**\n * Calculate proportion of dark modules in entire symbol\n *\n * Points: N4 * k\n *\n * k is the rating of the deviation of the proportion of dark modules\n * in the symbol from 50% in steps of 5%\n */\nexports.getPenaltyN4 = function getPenaltyN4 (data) {\n  let darkCount = 0\n  const modulesCount = data.data.length\n\n  for (let i = 0; i < modulesCount; i++) darkCount += data.data[i]\n\n  const k = Math.abs(Math.ceil((darkCount * 100 / modulesCount) / 5) - 10)\n\n  return k * PenaltyScores.N4\n}\n\n/**\n * Return mask value at given position\n *\n * @param  {Number} maskPattern Pattern reference value\n * @param  {Number} i           Row\n * @param  {Number} j           Column\n * @return {Boolean}            Mask value\n */\nfunction getMaskAt (maskPattern, i, j) {\n  switch (maskPattern) {\n    case exports.Patterns.PATTERN000: return (i + j) % 2 === 0\n    case exports.Patterns.PATTERN001: return i % 2 === 0\n    case exports.Patterns.PATTERN010: return j % 3 === 0\n    case exports.Patterns.PATTERN011: return (i + j) % 3 === 0\n    case exports.Patterns.PATTERN100: return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 === 0\n    case exports.Patterns.PATTERN101: return (i * j) % 2 + (i * j) % 3 === 0\n    case exports.Patterns.PATTERN110: return ((i * j) % 2 + (i * j) % 3) % 2 === 0\n    case exports.Patterns.PATTERN111: return ((i * j) % 3 + (i + j) % 2) % 2 === 0\n\n    default: throw new Error('bad maskPattern:' + maskPattern)\n  }\n}\n\n/**\n * Apply a mask pattern to a BitMatrix\n *\n * @param  {Number}    pattern Pattern reference number\n * @param  {BitMatrix} data    BitMatrix data\n */\nexports.applyMask = function applyMask (pattern, data) {\n  const size = data.size\n\n  for (let col = 0; col < size; col++) {\n    for (let row = 0; row < size; row++) {\n      if (data.isReserved(row, col)) continue\n      data.xor(row, col, getMaskAt(pattern, row, col))\n    }\n  }\n}\n\n/**\n * Returns the best mask pattern for data\n *\n * @param  {BitMatrix} data\n * @return {Number} Mask pattern reference number\n */\nexports.getBestMask = function getBestMask (data, setupFormatFunc) {\n  const numPatterns = Object.keys(exports.Patterns).length\n  let bestPattern = 0\n  let lowerPenalty = Infinity\n\n  for (let p = 0; p < numPatterns; p++) {\n    setupFormatFunc(p)\n    exports.applyMask(p, data)\n\n    // Calculate penalty\n    const penalty =\n      exports.getPenaltyN1(data) +\n      exports.getPenaltyN2(data) +\n      exports.getPenaltyN3(data) +\n      exports.getPenaltyN4(data)\n\n    // Undo previously applied mask\n    exports.applyMask(p, data)\n\n    if (penalty < lowerPenalty) {\n      lowerPenalty = penalty\n      bestPattern = p\n    }\n  }\n\n  return bestPattern\n}\n","const VersionCheck = require('./version-check')\nconst Regex = require('./regex')\n\n/**\n * Numeric mode encodes data from the decimal digit set (0 - 9)\n * (byte values 30HEX to 39HEX).\n * Normally, 3 data characters are represented by 10 bits.\n *\n * @type {Object}\n */\nexports.NUMERIC = {\n  id: 'Numeric',\n  bit: 1 << 0,\n  ccBits: [10, 12, 14]\n}\n\n/**\n * Alphanumeric mode encodes data from a set of 45 characters,\n * i.e. 10 numeric digits (0 - 9),\n *      26 alphabetic characters (A - Z),\n *   and 9 symbols (SP, $, %, *, +, -, ., /, :).\n * Normally, two input characters are represented by 11 bits.\n *\n * @type {Object}\n */\nexports.ALPHANUMERIC = {\n  id: 'Alphanumeric',\n  bit: 1 << 1,\n  ccBits: [9, 11, 13]\n}\n\n/**\n * In byte mode, data is encoded at 8 bits per character.\n *\n * @type {Object}\n */\nexports.BYTE = {\n  id: 'Byte',\n  bit: 1 << 2,\n  ccBits: [8, 16, 16]\n}\n\n/**\n * The Kanji mode efficiently encodes Kanji characters in accordance with\n * the Shift JIS system based on JIS X 0208.\n * The Shift JIS values are shifted from the JIS X 0208 values.\n * JIS X 0208 gives details of the shift coded representation.\n * Each two-byte character value is compacted to a 13-bit binary codeword.\n *\n * @type {Object}\n */\nexports.KANJI = {\n  id: 'Kanji',\n  bit: 1 << 3,\n  ccBits: [8, 10, 12]\n}\n\n/**\n * Mixed mode will contain a sequences of data in a combination of any of\n * the modes described above\n *\n * @type {Object}\n */\nexports.MIXED = {\n  bit: -1\n}\n\n/**\n * Returns the number of bits needed to store the data length\n * according to QR Code specifications.\n *\n * @param  {Mode}   mode    Data mode\n * @param  {Number} version QR Code version\n * @return {Number}         Number of bits\n */\nexports.getCharCountIndicator = function getCharCountIndicator (mode, version) {\n  if (!mode.ccBits) throw new Error('Invalid mode: ' + mode)\n\n  if (!VersionCheck.isValid(version)) {\n    throw new Error('Invalid version: ' + version)\n  }\n\n  if (version >= 1 && version < 10) return mode.ccBits[0]\n  else if (version < 27) return mode.ccBits[1]\n  return mode.ccBits[2]\n}\n\n/**\n * Returns the most efficient mode to store the specified data\n *\n * @param  {String} dataStr Input data string\n * @return {Mode}           Best mode\n */\nexports.getBestModeForData = function getBestModeForData (dataStr) {\n  if (Regex.testNumeric(dataStr)) return exports.NUMERIC\n  else if (Regex.testAlphanumeric(dataStr)) return exports.ALPHANUMERIC\n  else if (Regex.testKanji(dataStr)) return exports.KANJI\n  else return exports.BYTE\n}\n\n/**\n * Return mode name as string\n *\n * @param {Mode} mode Mode object\n * @returns {String}  Mode name\n */\nexports.toString = function toString (mode) {\n  if (mode && mode.id) return mode.id\n  throw new Error('Invalid mode')\n}\n\n/**\n * Check if input param is a valid mode object\n *\n * @param   {Mode}    mode Mode object\n * @returns {Boolean} True if valid mode, false otherwise\n */\nexports.isValid = function isValid (mode) {\n  return mode && mode.bit && mode.ccBits\n}\n\n/**\n * Get mode object from its name\n *\n * @param   {String} string Mode name\n * @returns {Mode}          Mode object\n */\nfunction fromString (string) {\n  if (typeof string !== 'string') {\n    throw new Error('Param is not a string')\n  }\n\n  const lcStr = string.toLowerCase()\n\n  switch (lcStr) {\n    case 'numeric':\n      return exports.NUMERIC\n    case 'alphanumeric':\n      return exports.ALPHANUMERIC\n    case 'kanji':\n      return exports.KANJI\n    case 'byte':\n      return exports.BYTE\n    default:\n      throw new Error('Unknown mode: ' + string)\n  }\n}\n\n/**\n * Returns mode from a value.\n * If value is not a valid mode, returns defaultValue\n *\n * @param  {Mode|String} value        Encoding mode\n * @param  {Mode}        defaultValue Fallback value\n * @return {Mode}                     Encoding mode\n */\nexports.from = function from (value, defaultValue) {\n  if (exports.isValid(value)) {\n    return value\n  }\n\n  try {\n    return fromString(value)\n  } catch (e) {\n    return defaultValue\n  }\n}\n","const Mode = require('./mode')\n\nfunction NumericData (data) {\n  this.mode = Mode.NUMERIC\n  this.data = data.toString()\n}\n\nNumericData.getBitsLength = function getBitsLength (length) {\n  return 10 * Math.floor(length / 3) + ((length % 3) ? ((length % 3) * 3 + 1) : 0)\n}\n\nNumericData.prototype.getLength = function getLength () {\n  return this.data.length\n}\n\nNumericData.prototype.getBitsLength = function getBitsLength () {\n  return NumericData.getBitsLength(this.data.length)\n}\n\nNumericData.prototype.write = function write (bitBuffer) {\n  let i, group, value\n\n  // The input data string is divided into groups of three digits,\n  // and each group is converted to its 10-bit binary equivalent.\n  for (i = 0; i + 3 <= this.data.length; i += 3) {\n    group = this.data.substr(i, 3)\n    value = parseInt(group, 10)\n\n    bitBuffer.put(value, 10)\n  }\n\n  // If the number of input digits is not an exact multiple of three,\n  // the final one or two digits are converted to 4 or 7 bits respectively.\n  const remainingNum = this.data.length - i\n  if (remainingNum > 0) {\n    group = this.data.substr(i)\n    value = parseInt(group, 10)\n\n    bitBuffer.put(value, remainingNum * 3 + 1)\n  }\n}\n\nmodule.exports = NumericData\n","const GF = require('./galois-field')\n\n/**\n * Multiplies two polynomials inside Galois Field\n *\n * @param  {Uint8Array} p1 Polynomial\n * @param  {Uint8Array} p2 Polynomial\n * @return {Uint8Array}    Product of p1 and p2\n */\nexports.mul = function mul (p1, p2) {\n  const coeff = new Uint8Array(p1.length + p2.length - 1)\n\n  for (let i = 0; i < p1.length; i++) {\n    for (let j = 0; j < p2.length; j++) {\n      coeff[i + j] ^= GF.mul(p1[i], p2[j])\n    }\n  }\n\n  return coeff\n}\n\n/**\n * Calculate the remainder of polynomials division\n *\n * @param  {Uint8Array} divident Polynomial\n * @param  {Uint8Array} divisor  Polynomial\n * @return {Uint8Array}          Remainder\n */\nexports.mod = function mod (divident, divisor) {\n  let result = new Uint8Array(divident)\n\n  while ((result.length - divisor.length) >= 0) {\n    const coeff = result[0]\n\n    for (let i = 0; i < divisor.length; i++) {\n      result[i] ^= GF.mul(divisor[i], coeff)\n    }\n\n    // remove all zeros from buffer head\n    let offset = 0\n    while (offset < result.length && result[offset] === 0) offset++\n    result = result.slice(offset)\n  }\n\n  return result\n}\n\n/**\n * Generate an irreducible generator polynomial of specified degree\n * (used by Reed-Solomon encoder)\n *\n * @param  {Number} degree Degree of the generator polynomial\n * @return {Uint8Array}    Buffer containing polynomial coefficients\n */\nexports.generateECPolynomial = function generateECPolynomial (degree) {\n  let poly = new Uint8Array([1])\n  for (let i = 0; i < degree; i++) {\n    poly = exports.mul(poly, new Uint8Array([1, GF.exp(i)]))\n  }\n\n  return poly\n}\n","const Utils = require('./utils')\nconst ECLevel = require('./error-correction-level')\nconst BitBuffer = require('./bit-buffer')\nconst BitMatrix = require('./bit-matrix')\nconst AlignmentPattern = require('./alignment-pattern')\nconst FinderPattern = require('./finder-pattern')\nconst MaskPattern = require('./mask-pattern')\nconst ECCode = require('./error-correction-code')\nconst ReedSolomonEncoder = require('./reed-solomon-encoder')\nconst Version = require('./version')\nconst FormatInfo = require('./format-info')\nconst Mode = require('./mode')\nconst Segments = require('./segments')\n\n/**\n * QRCode for JavaScript\n *\n * modified by Ryan Day for nodejs support\n * Copyright (c) 2011 Ryan Day\n *\n * Licensed under the MIT license:\n *   http://www.opensource.org/licenses/mit-license.php\n *\n//---------------------------------------------------------------------\n// QRCode for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n//   http://www.opensource.org/licenses/mit-license.php\n//\n// The word \"QR Code\" is registered trademark of\n// DENSO WAVE INCORPORATED\n//   http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n*/\n\n/**\n * Add finder patterns bits to matrix\n *\n * @param  {BitMatrix} matrix  Modules matrix\n * @param  {Number}    version QR Code version\n */\nfunction setupFinderPattern (matrix, version) {\n  const size = matrix.size\n  const pos = FinderPattern.getPositions(version)\n\n  for (let i = 0; i < pos.length; i++) {\n    const row = pos[i][0]\n    const col = pos[i][1]\n\n    for (let r = -1; r <= 7; r++) {\n      if (row + r <= -1 || size <= row + r) continue\n\n      for (let c = -1; c <= 7; c++) {\n        if (col + c <= -1 || size <= col + c) continue\n\n        if ((r >= 0 && r <= 6 && (c === 0 || c === 6)) ||\n          (c >= 0 && c <= 6 && (r === 0 || r === 6)) ||\n          (r >= 2 && r <= 4 && c >= 2 && c <= 4)) {\n          matrix.set(row + r, col + c, true, true)\n        } else {\n          matrix.set(row + r, col + c, false, true)\n        }\n      }\n    }\n  }\n}\n\n/**\n * Add timing pattern bits to matrix\n *\n * Note: this function must be called before {@link setupAlignmentPattern}\n *\n * @param  {BitMatrix} matrix Modules matrix\n */\nfunction setupTimingPattern (matrix) {\n  const size = matrix.size\n\n  for (let r = 8; r < size - 8; r++) {\n    const value = r % 2 === 0\n    matrix.set(r, 6, value, true)\n    matrix.set(6, r, value, true)\n  }\n}\n\n/**\n * Add alignment patterns bits to matrix\n *\n * Note: this function must be called after {@link setupTimingPattern}\n *\n * @param  {BitMatrix} matrix  Modules matrix\n * @param  {Number}    version QR Code version\n */\nfunction setupAlignmentPattern (matrix, version) {\n  const pos = AlignmentPattern.getPositions(version)\n\n  for (let i = 0; i < pos.length; i++) {\n    const row = pos[i][0]\n    const col = pos[i][1]\n\n    for (let r = -2; r <= 2; r++) {\n      for (let c = -2; c <= 2; c++) {\n        if (r === -2 || r === 2 || c === -2 || c === 2 ||\n          (r === 0 && c === 0)) {\n          matrix.set(row + r, col + c, true, true)\n        } else {\n          matrix.set(row + r, col + c, false, true)\n        }\n      }\n    }\n  }\n}\n\n/**\n * Add version info bits to matrix\n *\n * @param  {BitMatrix} matrix  Modules matrix\n * @param  {Number}    version QR Code version\n */\nfunction setupVersionInfo (matrix, version) {\n  const size = matrix.size\n  const bits = Version.getEncodedBits(version)\n  let row, col, mod\n\n  for (let i = 0; i < 18; i++) {\n    row = Math.floor(i / 3)\n    col = i % 3 + size - 8 - 3\n    mod = ((bits >> i) & 1) === 1\n\n    matrix.set(row, col, mod, true)\n    matrix.set(col, row, mod, true)\n  }\n}\n\n/**\n * Add format info bits to matrix\n *\n * @param  {BitMatrix} matrix               Modules matrix\n * @param  {ErrorCorrectionLevel}    errorCorrectionLevel Error correction level\n * @param  {Number}    maskPattern          Mask pattern reference value\n */\nfunction setupFormatInfo (matrix, errorCorrectionLevel, maskPattern) {\n  const size = matrix.size\n  const bits = FormatInfo.getEncodedBits(errorCorrectionLevel, maskPattern)\n  let i, mod\n\n  for (i = 0; i < 15; i++) {\n    mod = ((bits >> i) & 1) === 1\n\n    // vertical\n    if (i < 6) {\n      matrix.set(i, 8, mod, true)\n    } else if (i < 8) {\n      matrix.set(i + 1, 8, mod, true)\n    } else {\n      matrix.set(size - 15 + i, 8, mod, true)\n    }\n\n    // horizontal\n    if (i < 8) {\n      matrix.set(8, size - i - 1, mod, true)\n    } else if (i < 9) {\n      matrix.set(8, 15 - i - 1 + 1, mod, true)\n    } else {\n      matrix.set(8, 15 - i - 1, mod, true)\n    }\n  }\n\n  // fixed module\n  matrix.set(size - 8, 8, 1, true)\n}\n\n/**\n * Add encoded data bits to matrix\n *\n * @param  {BitMatrix}  matrix Modules matrix\n * @param  {Uint8Array} data   Data codewords\n */\nfunction setupData (matrix, data) {\n  const size = matrix.size\n  let inc = -1\n  let row = size - 1\n  let bitIndex = 7\n  let byteIndex = 0\n\n  for (let col = size - 1; col > 0; col -= 2) {\n    if (col === 6) col--\n\n    while (true) {\n      for (let c = 0; c < 2; c++) {\n        if (!matrix.isReserved(row, col - c)) {\n          let dark = false\n\n          if (byteIndex < data.length) {\n            dark = (((data[byteIndex] >>> bitIndex) & 1) === 1)\n          }\n\n          matrix.set(row, col - c, dark)\n          bitIndex--\n\n          if (bitIndex === -1) {\n            byteIndex++\n            bitIndex = 7\n          }\n        }\n      }\n\n      row += inc\n\n      if (row < 0 || size <= row) {\n        row -= inc\n        inc = -inc\n        break\n      }\n    }\n  }\n}\n\n/**\n * Create encoded codewords from data input\n *\n * @param  {Number}   version              QR Code version\n * @param  {ErrorCorrectionLevel}   errorCorrectionLevel Error correction level\n * @param  {ByteData} data                 Data input\n * @return {Uint8Array}                    Buffer containing encoded codewords\n */\nfunction createData (version, errorCorrectionLevel, segments) {\n  // Prepare data buffer\n  const buffer = new BitBuffer()\n\n  segments.forEach(function (data) {\n    // prefix data with mode indicator (4 bits)\n    buffer.put(data.mode.bit, 4)\n\n    // Prefix data with character count indicator.\n    // The character count indicator is a string of bits that represents the\n    // number of characters that are being encoded.\n    // The character count indicator must be placed after the mode indicator\n    // and must be a certain number of bits long, depending on the QR version\n    // and data mode\n    // @see {@link Mode.getCharCountIndicator}.\n    buffer.put(data.getLength(), Mode.getCharCountIndicator(data.mode, version))\n\n    // add binary data sequence to buffer\n    data.write(buffer)\n  })\n\n  // Calculate required number of bits\n  const totalCodewords = Utils.getSymbolTotalCodewords(version)\n  const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n  const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8\n\n  // Add a terminator.\n  // If the bit string is shorter than the total number of required bits,\n  // a terminator of up to four 0s must be added to the right side of the string.\n  // If the bit string is more than four bits shorter than the required number of bits,\n  // add four 0s to the end.\n  if (buffer.getLengthInBits() + 4 <= dataTotalCodewordsBits) {\n    buffer.put(0, 4)\n  }\n\n  // If the bit string is fewer than four bits shorter, add only the number of 0s that\n  // are needed to reach the required number of bits.\n\n  // After adding the terminator, if the number of bits in the string is not a multiple of 8,\n  // pad the string on the right with 0s to make the string's length a multiple of 8.\n  while (buffer.getLengthInBits() % 8 !== 0) {\n    buffer.putBit(0)\n  }\n\n  // Add pad bytes if the string is still shorter than the total number of required bits.\n  // Extend the buffer to fill the data capacity of the symbol corresponding to\n  // the Version and Error Correction Level by adding the Pad Codewords 11101100 (0xEC)\n  // and 00010001 (0x11) alternately.\n  const remainingByte = (dataTotalCodewordsBits - buffer.getLengthInBits()) / 8\n  for (let i = 0; i < remainingByte; i++) {\n    buffer.put(i % 2 ? 0x11 : 0xEC, 8)\n  }\n\n  return createCodewords(buffer, version, errorCorrectionLevel)\n}\n\n/**\n * Encode input data with Reed-Solomon and return codewords with\n * relative error correction bits\n *\n * @param  {BitBuffer} bitBuffer            Data to encode\n * @param  {Number}    version              QR Code version\n * @param  {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @return {Uint8Array}                     Buffer containing encoded codewords\n */\nfunction createCodewords (bitBuffer, version, errorCorrectionLevel) {\n  // Total codewords for this QR code version (Data + Error correction)\n  const totalCodewords = Utils.getSymbolTotalCodewords(version)\n\n  // Total number of error correction codewords\n  const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n\n  // Total number of data codewords\n  const dataTotalCodewords = totalCodewords - ecTotalCodewords\n\n  // Total number of blocks\n  const ecTotalBlocks = ECCode.getBlocksCount(version, errorCorrectionLevel)\n\n  // Calculate how many blocks each group should contain\n  const blocksInGroup2 = totalCodewords % ecTotalBlocks\n  const blocksInGroup1 = ecTotalBlocks - blocksInGroup2\n\n  const totalCodewordsInGroup1 = Math.floor(totalCodewords / ecTotalBlocks)\n\n  const dataCodewordsInGroup1 = Math.floor(dataTotalCodewords / ecTotalBlocks)\n  const dataCodewordsInGroup2 = dataCodewordsInGroup1 + 1\n\n  // Number of EC codewords is the same for both groups\n  const ecCount = totalCodewordsInGroup1 - dataCodewordsInGroup1\n\n  // Initialize a Reed-Solomon encoder with a generator polynomial of degree ecCount\n  const rs = new ReedSolomonEncoder(ecCount)\n\n  let offset = 0\n  const dcData = new Array(ecTotalBlocks)\n  const ecData = new Array(ecTotalBlocks)\n  let maxDataSize = 0\n  const buffer = new Uint8Array(bitBuffer.buffer)\n\n  // Divide the buffer into the required number of blocks\n  for (let b = 0; b < ecTotalBlocks; b++) {\n    const dataSize = b < blocksInGroup1 ? dataCodewordsInGroup1 : dataCodewordsInGroup2\n\n    // extract a block of data from buffer\n    dcData[b] = buffer.slice(offset, offset + dataSize)\n\n    // Calculate EC codewords for this data block\n    ecData[b] = rs.encode(dcData[b])\n\n    offset += dataSize\n    maxDataSize = Math.max(maxDataSize, dataSize)\n  }\n\n  // Create final data\n  // Interleave the data and error correction codewords from each block\n  const data = new Uint8Array(totalCodewords)\n  let index = 0\n  let i, r\n\n  // Add data codewords\n  for (i = 0; i < maxDataSize; i++) {\n    for (r = 0; r < ecTotalBlocks; r++) {\n      if (i < dcData[r].length) {\n        data[index++] = dcData[r][i]\n      }\n    }\n  }\n\n  // Apped EC codewords\n  for (i = 0; i < ecCount; i++) {\n    for (r = 0; r < ecTotalBlocks; r++) {\n      data[index++] = ecData[r][i]\n    }\n  }\n\n  return data\n}\n\n/**\n * Build QR Code symbol\n *\n * @param  {String} data                 Input string\n * @param  {Number} version              QR Code version\n * @param  {ErrorCorretionLevel} errorCorrectionLevel Error level\n * @param  {MaskPattern} maskPattern     Mask pattern\n * @return {Object}                      Object containing symbol data\n */\nfunction createSymbol (data, version, errorCorrectionLevel, maskPattern) {\n  let segments\n\n  if (Array.isArray(data)) {\n    segments = Segments.fromArray(data)\n  } else if (typeof data === 'string') {\n    let estimatedVersion = version\n\n    if (!estimatedVersion) {\n      const rawSegments = Segments.rawSplit(data)\n\n      // Estimate best version that can contain raw splitted segments\n      estimatedVersion = Version.getBestVersionForData(rawSegments, errorCorrectionLevel)\n    }\n\n    // Build optimized segments\n    // If estimated version is undefined, try with the highest version\n    segments = Segments.fromString(data, estimatedVersion || 40)\n  } else {\n    throw new Error('Invalid data')\n  }\n\n  // Get the min version that can contain data\n  const bestVersion = Version.getBestVersionForData(segments, errorCorrectionLevel)\n\n  // If no version is found, data cannot be stored\n  if (!bestVersion) {\n    throw new Error('The amount of data is too big to be stored in a QR Code')\n  }\n\n  // If not specified, use min version as default\n  if (!version) {\n    version = bestVersion\n\n  // Check if the specified version can contain the data\n  } else if (version < bestVersion) {\n    throw new Error('\\n' +\n      'The chosen QR Code version cannot contain this amount of data.\\n' +\n      'Minimum version required to store current data is: ' + bestVersion + '.\\n'\n    )\n  }\n\n  const dataBits = createData(version, errorCorrectionLevel, segments)\n\n  // Allocate matrix buffer\n  const moduleCount = Utils.getSymbolSize(version)\n  const modules = new BitMatrix(moduleCount)\n\n  // Add function modules\n  setupFinderPattern(modules, version)\n  setupTimingPattern(modules)\n  setupAlignmentPattern(modules, version)\n\n  // Add temporary dummy bits for format info just to set them as reserved.\n  // This is needed to prevent these bits from being masked by {@link MaskPattern.applyMask}\n  // since the masking operation must be performed only on the encoding region.\n  // These blocks will be replaced with correct values later in code.\n  setupFormatInfo(modules, errorCorrectionLevel, 0)\n\n  if (version >= 7) {\n    setupVersionInfo(modules, version)\n  }\n\n  // Add data codewords\n  setupData(modules, dataBits)\n\n  if (isNaN(maskPattern)) {\n    // Find best mask pattern\n    maskPattern = MaskPattern.getBestMask(modules,\n      setupFormatInfo.bind(null, modules, errorCorrectionLevel))\n  }\n\n  // Apply mask pattern\n  MaskPattern.applyMask(maskPattern, modules)\n\n  // Replace format info bits with correct values\n  setupFormatInfo(modules, errorCorrectionLevel, maskPattern)\n\n  return {\n    modules: modules,\n    version: version,\n    errorCorrectionLevel: errorCorrectionLevel,\n    maskPattern: maskPattern,\n    segments: segments\n  }\n}\n\n/**\n * QR Code\n *\n * @param {String | Array} data                 Input data\n * @param {Object} options                      Optional configurations\n * @param {Number} options.version              QR Code version\n * @param {String} options.errorCorrectionLevel Error correction level\n * @param {Function} options.toSJISFunc         Helper func to convert utf8 to sjis\n */\nexports.create = function create (data, options) {\n  if (typeof data === 'undefined' || data === '') {\n    throw new Error('No input text')\n  }\n\n  let errorCorrectionLevel = ECLevel.M\n  let version\n  let mask\n\n  if (typeof options !== 'undefined') {\n    // Use higher error correction level as default\n    errorCorrectionLevel = ECLevel.from(options.errorCorrectionLevel, ECLevel.M)\n    version = Version.from(options.version)\n    mask = MaskPattern.from(options.maskPattern)\n\n    if (options.toSJISFunc) {\n      Utils.setToSJISFunction(options.toSJISFunc)\n    }\n  }\n\n  return createSymbol(data, version, errorCorrectionLevel, mask)\n}\n","const Polynomial = require('./polynomial')\n\nfunction ReedSolomonEncoder (degree) {\n  this.genPoly = undefined\n  this.degree = degree\n\n  if (this.degree) this.initialize(this.degree)\n}\n\n/**\n * Initialize the encoder.\n * The input param should correspond to the number of error correction codewords.\n *\n * @param  {Number} degree\n */\nReedSolomonEncoder.prototype.initialize = function initialize (degree) {\n  // create an irreducible generator polynomial\n  this.degree = degree\n  this.genPoly = Polynomial.generateECPolynomial(this.degree)\n}\n\n/**\n * Encodes a chunk of data\n *\n * @param  {Uint8Array} data Buffer containing input data\n * @return {Uint8Array}      Buffer containing encoded data\n */\nReedSolomonEncoder.prototype.encode = function encode (data) {\n  if (!this.genPoly) {\n    throw new Error('Encoder not initialized')\n  }\n\n  // Calculate EC for this data block\n  // extends data size to data+genPoly size\n  const paddedData = new Uint8Array(data.length + this.degree)\n  paddedData.set(data)\n\n  // The error correction codewords are the remainder after dividing the data codewords\n  // by a generator polynomial\n  const remainder = Polynomial.mod(paddedData, this.genPoly)\n\n  // return EC data blocks (last n byte, where n is the degree of genPoly)\n  // If coefficients number in remainder are less than genPoly degree,\n  // pad with 0s to the left to reach the needed number of coefficients\n  const start = this.degree - remainder.length\n  if (start > 0) {\n    const buff = new Uint8Array(this.degree)\n    buff.set(remainder, start)\n\n    return buff\n  }\n\n  return remainder\n}\n\nmodule.exports = ReedSolomonEncoder\n","const numeric = '[0-9]+'\nconst alphanumeric = '[A-Z $%*+\\\\-./:]+'\nlet kanji = '(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|' +\n  '[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|' +\n  '[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|' +\n  '[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+'\nkanji = kanji.replace(/u/g, '\\\\u')\n\nconst byte = '(?:(?![A-Z0-9 $%*+\\\\-./:]|' + kanji + ')(?:.|[\\r\\n]))+'\n\nexports.KANJI = new RegExp(kanji, 'g')\nexports.BYTE_KANJI = new RegExp('[^A-Z0-9 $%*+\\\\-./:]+', 'g')\nexports.BYTE = new RegExp(byte, 'g')\nexports.NUMERIC = new RegExp(numeric, 'g')\nexports.ALPHANUMERIC = new RegExp(alphanumeric, 'g')\n\nconst TEST_KANJI = new RegExp('^' + kanji + '$')\nconst TEST_NUMERIC = new RegExp('^' + numeric + '$')\nconst TEST_ALPHANUMERIC = new RegExp('^[A-Z0-9 $%*+\\\\-./:]+$')\n\nexports.testKanji = function testKanji (str) {\n  return TEST_KANJI.test(str)\n}\n\nexports.testNumeric = function testNumeric (str) {\n  return TEST_NUMERIC.test(str)\n}\n\nexports.testAlphanumeric = function testAlphanumeric (str) {\n  return TEST_ALPHANUMERIC.test(str)\n}\n","const Mode = require('./mode')\nconst NumericData = require('./numeric-data')\nconst AlphanumericData = require('./alphanumeric-data')\nconst ByteData = require('./byte-data')\nconst KanjiData = require('./kanji-data')\nconst Regex = require('./regex')\nconst Utils = require('./utils')\nconst dijkstra = require('dijkstrajs')\n\n/**\n * Returns UTF8 byte length\n *\n * @param  {String} str Input string\n * @return {Number}     Number of byte\n */\nfunction getStringByteLength (str) {\n  return unescape(encodeURIComponent(str)).length\n}\n\n/**\n * Get a list of segments of the specified mode\n * from a string\n *\n * @param  {Mode}   mode Segment mode\n * @param  {String} str  String to process\n * @return {Array}       Array of object with segments data\n */\nfunction getSegments (regex, mode, str) {\n  const segments = []\n  let result\n\n  while ((result = regex.exec(str)) !== null) {\n    segments.push({\n      data: result[0],\n      index: result.index,\n      mode: mode,\n      length: result[0].length\n    })\n  }\n\n  return segments\n}\n\n/**\n * Extracts a series of segments with the appropriate\n * modes from a string\n *\n * @param  {String} dataStr Input string\n * @return {Array}          Array of object with segments data\n */\nfunction getSegmentsFromString (dataStr) {\n  const numSegs = getSegments(Regex.NUMERIC, Mode.NUMERIC, dataStr)\n  const alphaNumSegs = getSegments(Regex.ALPHANUMERIC, Mode.ALPHANUMERIC, dataStr)\n  let byteSegs\n  let kanjiSegs\n\n  if (Utils.isKanjiModeEnabled()) {\n    byteSegs = getSegments(Regex.BYTE, Mode.BYTE, dataStr)\n    kanjiSegs = getSegments(Regex.KANJI, Mode.KANJI, dataStr)\n  } else {\n    byteSegs = getSegments(Regex.BYTE_KANJI, Mode.BYTE, dataStr)\n    kanjiSegs = []\n  }\n\n  const segs = numSegs.concat(alphaNumSegs, byteSegs, kanjiSegs)\n\n  return segs\n    .sort(function (s1, s2) {\n      return s1.index - s2.index\n    })\n    .map(function (obj) {\n      return {\n        data: obj.data,\n        mode: obj.mode,\n        length: obj.length\n      }\n    })\n}\n\n/**\n * Returns how many bits are needed to encode a string of\n * specified length with the specified mode\n *\n * @param  {Number} length String length\n * @param  {Mode} mode     Segment mode\n * @return {Number}        Bit length\n */\nfunction getSegmentBitsLength (length, mode) {\n  switch (mode) {\n    case Mode.NUMERIC:\n      return NumericData.getBitsLength(length)\n    case Mode.ALPHANUMERIC:\n      return AlphanumericData.getBitsLength(length)\n    case Mode.KANJI:\n      return KanjiData.getBitsLength(length)\n    case Mode.BYTE:\n      return ByteData.getBitsLength(length)\n  }\n}\n\n/**\n * Merges adjacent segments which have the same mode\n *\n * @param  {Array} segs Array of object with segments data\n * @return {Array}      Array of object with segments data\n */\nfunction mergeSegments (segs) {\n  return segs.reduce(function (acc, curr) {\n    const prevSeg = acc.length - 1 >= 0 ? acc[acc.length - 1] : null\n    if (prevSeg && prevSeg.mode === curr.mode) {\n      acc[acc.length - 1].data += curr.data\n      return acc\n    }\n\n    acc.push(curr)\n    return acc\n  }, [])\n}\n\n/**\n * Generates a list of all possible nodes combination which\n * will be used to build a segments graph.\n *\n * Nodes are divided by groups. Each group will contain a list of all the modes\n * in which is possible to encode the given text.\n *\n * For example the text '12345' can be encoded as Numeric, Alphanumeric or Byte.\n * The group for '12345' will contain then 3 objects, one for each\n * possible encoding mode.\n *\n * Each node represents a possible segment.\n *\n * @param  {Array} segs Array of object with segments data\n * @return {Array}      Array of object with segments data\n */\nfunction buildNodes (segs) {\n  const nodes = []\n  for (let i = 0; i < segs.length; i++) {\n    const seg = segs[i]\n\n    switch (seg.mode) {\n      case Mode.NUMERIC:\n        nodes.push([seg,\n          { data: seg.data, mode: Mode.ALPHANUMERIC, length: seg.length },\n          { data: seg.data, mode: Mode.BYTE, length: seg.length }\n        ])\n        break\n      case Mode.ALPHANUMERIC:\n        nodes.push([seg,\n          { data: seg.data, mode: Mode.BYTE, length: seg.length }\n        ])\n        break\n      case Mode.KANJI:\n        nodes.push([seg,\n          { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\n        ])\n        break\n      case Mode.BYTE:\n        nodes.push([\n          { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\n        ])\n    }\n  }\n\n  return nodes\n}\n\n/**\n * Builds a graph from a list of nodes.\n * All segments in each node group will be connected with all the segments of\n * the next group and so on.\n *\n * At each connection will be assigned a weight depending on the\n * segment's byte length.\n *\n * @param  {Array} nodes    Array of object with segments data\n * @param  {Number} version QR Code version\n * @return {Object}         Graph of all possible segments\n */\nfunction buildGraph (nodes, version) {\n  const table = {}\n  const graph = { start: {} }\n  let prevNodeIds = ['start']\n\n  for (let i = 0; i < nodes.length; i++) {\n    const nodeGroup = nodes[i]\n    const currentNodeIds = []\n\n    for (let j = 0; j < nodeGroup.length; j++) {\n      const node = nodeGroup[j]\n      const key = '' + i + j\n\n      currentNodeIds.push(key)\n      table[key] = { node: node, lastCount: 0 }\n      graph[key] = {}\n\n      for (let n = 0; n < prevNodeIds.length; n++) {\n        const prevNodeId = prevNodeIds[n]\n\n        if (table[prevNodeId] && table[prevNodeId].node.mode === node.mode) {\n          graph[prevNodeId][key] =\n            getSegmentBitsLength(table[prevNodeId].lastCount + node.length, node.mode) -\n            getSegmentBitsLength(table[prevNodeId].lastCount, node.mode)\n\n          table[prevNodeId].lastCount += node.length\n        } else {\n          if (table[prevNodeId]) table[prevNodeId].lastCount = node.length\n\n          graph[prevNodeId][key] = getSegmentBitsLength(node.length, node.mode) +\n            4 + Mode.getCharCountIndicator(node.mode, version) // switch cost\n        }\n      }\n    }\n\n    prevNodeIds = currentNodeIds\n  }\n\n  for (let n = 0; n < prevNodeIds.length; n++) {\n    graph[prevNodeIds[n]].end = 0\n  }\n\n  return { map: graph, table: table }\n}\n\n/**\n * Builds a segment from a specified data and mode.\n * If a mode is not specified, the more suitable will be used.\n *\n * @param  {String} data             Input data\n * @param  {Mode | String} modesHint Data mode\n * @return {Segment}                 Segment\n */\nfunction buildSingleSegment (data, modesHint) {\n  let mode\n  const bestMode = Mode.getBestModeForData(data)\n\n  mode = Mode.from(modesHint, bestMode)\n\n  // Make sure data can be encoded\n  if (mode !== Mode.BYTE && mode.bit < bestMode.bit) {\n    throw new Error('\"' + data + '\"' +\n      ' cannot be encoded with mode ' + Mode.toString(mode) +\n      '.\\n Suggested mode is: ' + Mode.toString(bestMode))\n  }\n\n  // Use Mode.BYTE if Kanji support is disabled\n  if (mode === Mode.KANJI && !Utils.isKanjiModeEnabled()) {\n    mode = Mode.BYTE\n  }\n\n  switch (mode) {\n    case Mode.NUMERIC:\n      return new NumericData(data)\n\n    case Mode.ALPHANUMERIC:\n      return new AlphanumericData(data)\n\n    case Mode.KANJI:\n      return new KanjiData(data)\n\n    case Mode.BYTE:\n      return new ByteData(data)\n  }\n}\n\n/**\n * Builds a list of segments from an array.\n * Array can contain Strings or Objects with segment's info.\n *\n * For each item which is a string, will be generated a segment with the given\n * string and the more appropriate encoding mode.\n *\n * For each item which is an object, will be generated a segment with the given\n * data and mode.\n * Objects must contain at least the property \"data\".\n * If property \"mode\" is not present, the more suitable mode will be used.\n *\n * @param  {Array} array Array of objects with segments data\n * @return {Array}       Array of Segments\n */\nexports.fromArray = function fromArray (array) {\n  return array.reduce(function (acc, seg) {\n    if (typeof seg === 'string') {\n      acc.push(buildSingleSegment(seg, null))\n    } else if (seg.data) {\n      acc.push(buildSingleSegment(seg.data, seg.mode))\n    }\n\n    return acc\n  }, [])\n}\n\n/**\n * Builds an optimized sequence of segments from a string,\n * which will produce the shortest possible bitstream.\n *\n * @param  {String} data    Input string\n * @param  {Number} version QR Code version\n * @return {Array}          Array of segments\n */\nexports.fromString = function fromString (data, version) {\n  const segs = getSegmentsFromString(data, Utils.isKanjiModeEnabled())\n\n  const nodes = buildNodes(segs)\n  const graph = buildGraph(nodes, version)\n  const path = dijkstra.find_path(graph.map, 'start', 'end')\n\n  const optimizedSegs = []\n  for (let i = 1; i < path.length - 1; i++) {\n    optimizedSegs.push(graph.table[path[i]].node)\n  }\n\n  return exports.fromArray(mergeSegments(optimizedSegs))\n}\n\n/**\n * Splits a string in various segments with the modes which\n * best represent their content.\n * The produced segments are far from being optimized.\n * The output of this function is only used to estimate a QR Code version\n * which may contain the data.\n *\n * @param  {string} data Input string\n * @return {Array}       Array of segments\n */\nexports.rawSplit = function rawSplit (data) {\n  return exports.fromArray(\n    getSegmentsFromString(data, Utils.isKanjiModeEnabled())\n  )\n}\n","let toSJISFunction\nconst CODEWORDS_COUNT = [\n  0, // Not used\n  26, 44, 70, 100, 134, 172, 196, 242, 292, 346,\n  404, 466, 532, 581, 655, 733, 815, 901, 991, 1085,\n  1156, 1258, 1364, 1474, 1588, 1706, 1828, 1921, 2051, 2185,\n  2323, 2465, 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706\n]\n\n/**\n * Returns the QR Code size for the specified version\n *\n * @param  {Number} version QR Code version\n * @return {Number}         size of QR code\n */\nexports.getSymbolSize = function getSymbolSize (version) {\n  if (!version) throw new Error('\"version\" cannot be null or undefined')\n  if (version < 1 || version > 40) throw new Error('\"version\" should be in range from 1 to 40')\n  return version * 4 + 17\n}\n\n/**\n * Returns the total number of codewords used to store data and EC information.\n *\n * @param  {Number} version QR Code version\n * @return {Number}         Data length in bits\n */\nexports.getSymbolTotalCodewords = function getSymbolTotalCodewords (version) {\n  return CODEWORDS_COUNT[version]\n}\n\n/**\n * Encode data with Bose-Chaudhuri-Hocquenghem\n *\n * @param  {Number} data Value to encode\n * @return {Number}      Encoded value\n */\nexports.getBCHDigit = function (data) {\n  let digit = 0\n\n  while (data !== 0) {\n    digit++\n    data >>>= 1\n  }\n\n  return digit\n}\n\nexports.setToSJISFunction = function setToSJISFunction (f) {\n  if (typeof f !== 'function') {\n    throw new Error('\"toSJISFunc\" is not a valid function.')\n  }\n\n  toSJISFunction = f\n}\n\nexports.isKanjiModeEnabled = function () {\n  return typeof toSJISFunction !== 'undefined'\n}\n\nexports.toSJIS = function toSJIS (kanji) {\n  return toSJISFunction(kanji)\n}\n","/**\n * Check if QR Code version is valid\n *\n * @param  {Number}  version QR Code version\n * @return {Boolean}         true if valid version, false otherwise\n */\nexports.isValid = function isValid (version) {\n  return !isNaN(version) && version >= 1 && version <= 40\n}\n","const Utils = require('./utils')\nconst ECCode = require('./error-correction-code')\nconst ECLevel = require('./error-correction-level')\nconst Mode = require('./mode')\nconst VersionCheck = require('./version-check')\n\n// Generator polynomial used to encode version information\nconst G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0)\nconst G18_BCH = Utils.getBCHDigit(G18)\n\nfunction getBestVersionForDataLength (mode, length, errorCorrectionLevel) {\n  for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {\n    if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, mode)) {\n      return currentVersion\n    }\n  }\n\n  return undefined\n}\n\nfunction getReservedBitsCount (mode, version) {\n  // Character count indicator + mode indicator bits\n  return Mode.getCharCountIndicator(mode, version) + 4\n}\n\nfunction getTotalBitsFromDataArray (segments, version) {\n  let totalBits = 0\n\n  segments.forEach(function (data) {\n    const reservedBits = getReservedBitsCount(data.mode, version)\n    totalBits += reservedBits + data.getBitsLength()\n  })\n\n  return totalBits\n}\n\nfunction getBestVersionForMixedData (segments, errorCorrectionLevel) {\n  for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {\n    const length = getTotalBitsFromDataArray(segments, currentVersion)\n    if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, Mode.MIXED)) {\n      return currentVersion\n    }\n  }\n\n  return undefined\n}\n\n/**\n * Returns version number from a value.\n * If value is not a valid version, returns defaultValue\n *\n * @param  {Number|String} value        QR Code version\n * @param  {Number}        defaultValue Fallback value\n * @return {Number}                     QR Code version number\n */\nexports.from = function from (value, defaultValue) {\n  if (VersionCheck.isValid(value)) {\n    return parseInt(value, 10)\n  }\n\n  return defaultValue\n}\n\n/**\n * Returns how much data can be stored with the specified QR code version\n * and error correction level\n *\n * @param  {Number} version              QR Code version (1-40)\n * @param  {Number} errorCorrectionLevel Error correction level\n * @param  {Mode}   mode                 Data mode\n * @return {Number}                      Quantity of storable data\n */\nexports.getCapacity = function getCapacity (version, errorCorrectionLevel, mode) {\n  if (!VersionCheck.isValid(version)) {\n    throw new Error('Invalid QR Code version')\n  }\n\n  // Use Byte mode as default\n  if (typeof mode === 'undefined') mode = Mode.BYTE\n\n  // Total codewords for this QR code version (Data + Error correction)\n  const totalCodewords = Utils.getSymbolTotalCodewords(version)\n\n  // Total number of error correction codewords\n  const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n\n  // Total number of data codewords\n  const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8\n\n  if (mode === Mode.MIXED) return dataTotalCodewordsBits\n\n  const usableBits = dataTotalCodewordsBits - getReservedBitsCount(mode, version)\n\n  // Return max number of storable codewords\n  switch (mode) {\n    case Mode.NUMERIC:\n      return Math.floor((usableBits / 10) * 3)\n\n    case Mode.ALPHANUMERIC:\n      return Math.floor((usableBits / 11) * 2)\n\n    case Mode.KANJI:\n      return Math.floor(usableBits / 13)\n\n    case Mode.BYTE:\n    default:\n      return Math.floor(usableBits / 8)\n  }\n}\n\n/**\n * Returns the minimum version needed to contain the amount of data\n *\n * @param  {Segment} data                    Segment of data\n * @param  {Number} [errorCorrectionLevel=H] Error correction level\n * @param  {Mode} mode                       Data mode\n * @return {Number}                          QR Code version\n */\nexports.getBestVersionForData = function getBestVersionForData (data, errorCorrectionLevel) {\n  let seg\n\n  const ecl = ECLevel.from(errorCorrectionLevel, ECLevel.M)\n\n  if (Array.isArray(data)) {\n    if (data.length > 1) {\n      return getBestVersionForMixedData(data, ecl)\n    }\n\n    if (data.length === 0) {\n      return 1\n    }\n\n    seg = data[0]\n  } else {\n    seg = data\n  }\n\n  return getBestVersionForDataLength(seg.mode, seg.getLength(), ecl)\n}\n\n/**\n * Returns version information with relative error correction bits\n *\n * The version information is included in QR Code symbols of version 7 or larger.\n * It consists of an 18-bit sequence containing 6 data bits,\n * with 12 error correction bits calculated using the (18, 6) Golay code.\n *\n * @param  {Number} version QR Code version\n * @return {Number}         Encoded version info bits\n */\nexports.getEncodedBits = function getEncodedBits (version) {\n  if (!VersionCheck.isValid(version) || version < 7) {\n    throw new Error('Invalid QR Code version')\n  }\n\n  let d = version << 12\n\n  while (Utils.getBCHDigit(d) - G18_BCH >= 0) {\n    d ^= (G18 << (Utils.getBCHDigit(d) - G18_BCH))\n  }\n\n  return (version << 12) | d\n}\n","const Utils = require('./utils')\n\nfunction clearCanvas (ctx, canvas, size) {\n  ctx.clearRect(0, 0, canvas.width, canvas.height)\n\n  if (!canvas.style) canvas.style = {}\n  canvas.height = size\n  canvas.width = size\n  canvas.style.height = size + 'px'\n  canvas.style.width = size + 'px'\n}\n\nfunction getCanvasElement () {\n  try {\n    return document.createElement('canvas')\n  } catch (e) {\n    throw new Error('You need to specify a canvas element')\n  }\n}\n\nexports.render = function render (qrData, canvas, options) {\n  let opts = options\n  let canvasEl = canvas\n\n  if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\n    opts = canvas\n    canvas = undefined\n  }\n\n  if (!canvas) {\n    canvasEl = getCanvasElement()\n  }\n\n  opts = Utils.getOptions(opts)\n  const size = Utils.getImageWidth(qrData.modules.size, opts)\n\n  const ctx = canvasEl.getContext('2d')\n  const image = ctx.createImageData(size, size)\n  Utils.qrToImageData(image.data, qrData, opts)\n\n  clearCanvas(ctx, canvasEl, size)\n  ctx.putImageData(image, 0, 0)\n\n  return canvasEl\n}\n\nexports.renderToDataURL = function renderToDataURL (qrData, canvas, options) {\n  let opts = options\n\n  if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\n    opts = canvas\n    canvas = undefined\n  }\n\n  if (!opts) opts = {}\n\n  const canvasEl = exports.render(qrData, canvas, opts)\n\n  const type = opts.type || 'image/png'\n  const rendererOpts = opts.rendererOpts || {}\n\n  return canvasEl.toDataURL(type, rendererOpts.quality)\n}\n","const Utils = require('./utils')\n\nfunction getColorAttrib (color, attrib) {\n  const alpha = color.a / 255\n  const str = attrib + '=\"' + color.hex + '\"'\n\n  return alpha < 1\n    ? str + ' ' + attrib + '-opacity=\"' + alpha.toFixed(2).slice(1) + '\"'\n    : str\n}\n\nfunction svgCmd (cmd, x, y) {\n  let str = cmd + x\n  if (typeof y !== 'undefined') str += ' ' + y\n\n  return str\n}\n\nfunction qrToPath (data, size, margin) {\n  let path = ''\n  let moveBy = 0\n  let newRow = false\n  let lineLength = 0\n\n  for (let i = 0; i < data.length; i++) {\n    const col = Math.floor(i % size)\n    const row = Math.floor(i / size)\n\n    if (!col && !newRow) newRow = true\n\n    if (data[i]) {\n      lineLength++\n\n      if (!(i > 0 && col > 0 && data[i - 1])) {\n        path += newRow\n          ? svgCmd('M', col + margin, 0.5 + row + margin)\n          : svgCmd('m', moveBy, 0)\n\n        moveBy = 0\n        newRow = false\n      }\n\n      if (!(col + 1 < size && data[i + 1])) {\n        path += svgCmd('h', lineLength)\n        lineLength = 0\n      }\n    } else {\n      moveBy++\n    }\n  }\n\n  return path\n}\n\nexports.render = function render (qrData, options, cb) {\n  const opts = Utils.getOptions(options)\n  const size = qrData.modules.size\n  const data = qrData.modules.data\n  const qrcodesize = size + opts.margin * 2\n\n  const bg = !opts.color.light.a\n    ? ''\n    : '<path ' + getColorAttrib(opts.color.light, 'fill') +\n      ' d=\"M0 0h' + qrcodesize + 'v' + qrcodesize + 'H0z\"/>'\n\n  const path =\n    '<path ' + getColorAttrib(opts.color.dark, 'stroke') +\n    ' d=\"' + qrToPath(data, size, opts.margin) + '\"/>'\n\n  const viewBox = 'viewBox=\"' + '0 0 ' + qrcodesize + ' ' + qrcodesize + '\"'\n\n  const width = !opts.width ? '' : 'width=\"' + opts.width + '\" height=\"' + opts.width + '\" '\n\n  const svgTag = '<svg xmlns=\"http://www.w3.org/2000/svg\" ' + width + viewBox + ' shape-rendering=\"crispEdges\">' + bg + path + '</svg>\\n'\n\n  if (typeof cb === 'function') {\n    cb(null, svgTag)\n  }\n\n  return svgTag\n}\n","function hex2rgba (hex) {\n  if (typeof hex === 'number') {\n    hex = hex.toString()\n  }\n\n  if (typeof hex !== 'string') {\n    throw new Error('Color should be defined as hex string')\n  }\n\n  let hexCode = hex.slice().replace('#', '').split('')\n  if (hexCode.length < 3 || hexCode.length === 5 || hexCode.length > 8) {\n    throw new Error('Invalid hex color: ' + hex)\n  }\n\n  // Convert from short to long form (fff -> ffffff)\n  if (hexCode.length === 3 || hexCode.length === 4) {\n    hexCode = Array.prototype.concat.apply([], hexCode.map(function (c) {\n      return [c, c]\n    }))\n  }\n\n  // Add default alpha value\n  if (hexCode.length === 6) hexCode.push('F', 'F')\n\n  const hexValue = parseInt(hexCode.join(''), 16)\n\n  return {\n    r: (hexValue >> 24) & 255,\n    g: (hexValue >> 16) & 255,\n    b: (hexValue >> 8) & 255,\n    a: hexValue & 255,\n    hex: '#' + hexCode.slice(0, 6).join('')\n  }\n}\n\nexports.getOptions = function getOptions (options) {\n  if (!options) options = {}\n  if (!options.color) options.color = {}\n\n  const margin = typeof options.margin === 'undefined' ||\n    options.margin === null ||\n    options.margin < 0\n    ? 4\n    : options.margin\n\n  const width = options.width && options.width >= 21 ? options.width : undefined\n  const scale = options.scale || 4\n\n  return {\n    width: width,\n    scale: width ? 4 : scale,\n    margin: margin,\n    color: {\n      dark: hex2rgba(options.color.dark || '#000000ff'),\n      light: hex2rgba(options.color.light || '#ffffffff')\n    },\n    type: options.type,\n    rendererOpts: options.rendererOpts || {}\n  }\n}\n\nexports.getScale = function getScale (qrSize, opts) {\n  return opts.width && opts.width >= qrSize + opts.margin * 2\n    ? opts.width / (qrSize + opts.margin * 2)\n    : opts.scale\n}\n\nexports.getImageWidth = function getImageWidth (qrSize, opts) {\n  const scale = exports.getScale(qrSize, opts)\n  return Math.floor((qrSize + opts.margin * 2) * scale)\n}\n\nexports.qrToImageData = function qrToImageData (imgData, qr, opts) {\n  const size = qr.modules.size\n  const data = qr.modules.data\n  const scale = exports.getScale(size, opts)\n  const symbolSize = Math.floor((size + opts.margin * 2) * scale)\n  const scaledMargin = opts.margin * scale\n  const palette = [opts.color.light, opts.color.dark]\n\n  for (let i = 0; i < symbolSize; i++) {\n    for (let j = 0; j < symbolSize; j++) {\n      let posDst = (i * symbolSize + j) * 4\n      let pxColor = opts.color.light\n\n      if (i >= scaledMargin && j >= scaledMargin &&\n        i < symbolSize - scaledMargin && j < symbolSize - scaledMargin) {\n        const iSrc = Math.floor((i - scaledMargin) / scale)\n        const jSrc = Math.floor((j - scaledMargin) / scale)\n        pxColor = palette[data[iSrc * size + jSrc] ? 1 : 0]\n      }\n\n      imgData[posDst++] = pxColor.r\n      imgData[posDst++] = pxColor.g\n      imgData[posDst++] = pxColor.b\n      imgData[posDst] = pxColor.a\n    }\n  }\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  var node = fiber,\n    nearestMounted = fiber;\n  if (fiber.alternate) for (; node.return; ) node = node.return;\n  else {\n    fiber = node;\n    do\n      (node = fiber),\n        0 !== (node.flags & 4098) && (nearestMounted = node.return),\n        (fiber = node.return);\n    while (fiber);\n  }\n  return 3 === node.tag ? nearestMounted : 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}\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\");\nSymbol.for(\"react.legacy_hidden\");\nSymbol.for(\"react.tracing_marker\");\nvar REACT_MEMO_CACHE_SENTINEL = Symbol.for(\"react.memo_cache_sentinel\");\nSymbol.for(\"react.view_transition\");\nvar 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  }\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  null !== fiber.memoizedState && push(hostTransitionProviderCursor, fiber);\n  var context = contextStackCursor.current;\n  var JSCompiler_inline_result = getChildHostContextProd(context, fiber.type);\n  context !== 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              fn.call(Fake.prototype);\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    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 & 261888;\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 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;\nfunction detachDeletedInstance(node) {\n  delete node[internalInstanceKey];\n  delete node[internalPropsKey];\n  delete node[internalEventHandlersKey];\n  delete node[internalEventHandlerListenersKey];\n  delete node[internalEventHandlesSetKey];\n}\nfunction getClosestInstanceFromNode(targetNode) {\n  var targetInst = targetNode[internalInstanceKey];\n  if (targetInst) 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}\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}\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}\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) {\n    return doc.body;\n  }\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    ? setDefaultValue(element, type, getToStringValue(value))\n    : null != defaultValue\n      ? setDefaultValue(element, type, 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, type, value) {\n  (\"number\" === type && getActiveElement(node.ownerDocument) === node) ||\n    node.defaultValue === \"\" + value ||\n    (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    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  } 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    [\"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  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  }),\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$286;\n  if (canUseDOM) {\n    var isSupported$jscomp$inline_427 = \"oninput\" in document;\n    if (!isSupported$jscomp$inline_427) {\n      var element$jscomp$inline_428 = document.createElement(\"div\");\n      element$jscomp$inline_428.setAttribute(\"oninput\", \"return;\");\n      isSupported$jscomp$inline_427 =\n        \"function\" === typeof element$jscomp$inline_428.oninput;\n    }\n    JSCompiler_inline_result$jscomp$286 = isSupported$jscomp$inline_427;\n  } else JSCompiler_inline_result$jscomp$286 = !1;\n  isInputEventSupported =\n    JSCompiler_inline_result$jscomp$286 &&\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 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 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 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 & 65011712;\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 &= 65011714;\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 type) shouldConstruct(type) && (fiberTag = 1);\n  else if (\"string\" === typeof type)\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 (type) {\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      default:\n        if (\"object\" === typeof type && null !== type)\n          switch (type.$$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 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}\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}\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    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  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      throw (\n        ((thenableState = thenable.reason),\n        checkIfUseWrappedInAsyncCatch(thenableState),\n        thenableState)\n      );\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.key, currentFirstChild)\n        : existingChildren.set(currentFirstChild.index, 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 |= 67108866), lastPlacedIndex)\n          : newIndex\n      );\n    newFiber.flags |= 67108866;\n    return lastPlacedIndex;\n  }\n  function placeSingleChild(newFiber) {\n    shouldTrackSideEffects &&\n      null === newFiber.alternate &&\n      (newFiber.flags |= 67108866);\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 updateFragment(\n        returnFiber,\n        current,\n        element.props.children,\n        lanes,\n        element.key\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            null !== nextOldFiber.alternate &&\n            oldFiber.delete(\n              null === nextOldFiber.key ? newIdx : nextOldFiber.key\n            ),\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            null !== step.alternate &&\n            oldFiber.delete(null === step.key ? newIdx : step.key),\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      (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                    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                (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(fiber);\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 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      (\"forwards\" === node.memoizedProps.revealOrder ||\n        \"backwards\" === node.memoizedProps.revealOrder ||\n        \"unstable_legacy-backwards\" === node.memoizedProps.revealOrder ||\n        \"together\" === 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_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$60 = !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$60 = !0);\n        else if ((renderLanes & revertLane) === revertLane) {\n          update = update.next;\n          revertLane === currentEntangledLane &&\n            (didReadFromEntangledAsyncAction$60 = !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$60 &&\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  if (\n    hook.getSnapshot !== getSnapshot ||\n    snapshotChanged ||\n    (null !== workInProgressHook && workInProgressHook.memoizedState.tag & 1)\n  ) {\n    fiber.flags |= 2048;\n    pushSimpleEffect(\n      9,\n      { destroy: void 0 },\n      updateStoreInstance.bind(\n        null,\n        fiber,\n        hook,\n        getServerSnapshot,\n        getSnapshot\n      ),\n      null\n    );\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    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$66) {\n      onActionError(actionQueue, node, error$66);\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 & 42) ||\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  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$69 = enqueueUpdate(provider, fiber, lane);\n        null !== root$69 &&\n          (scheduleUpdateOnFiber(root$69, provider, lane),\n          entangleTransitions(root$69, 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};\nContextOnlyDispatcher.useEffectEvent = throwInvalidHookError;\nvar 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  };\nHooksDispatcherOnUpdate.useEffectEvent = updateEvent;\nvar 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};\nHooksDispatcherOnRerender.useEffectEvent = updateEvent;\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$73 in Component)\n      void 0 === newProps[propName$73] &&\n        (newProps[propName$73] = Component[propName$73]);\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$74) {\n    setTimeout(function () {\n      throw e$74;\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$75) {\n    setTimeout(function () {\n      throw e$75;\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          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        if (\n          ((returnFiber = sourceFiber.type),\n          (wrapperError = sourceFiber.stateNode),\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    }\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(workInProgress),\n        (workInProgress.memoizedState = null))\n      : (null !== current && pushTransition(workInProgress, null),\n        reuseHiddenContextOnStack(),\n        reuseSuspenseHandlerOnStack(workInProgress));\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          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      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      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 |= 4096);\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(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      isSuspenseInstanceFallback(current)\n        ? (workInProgress.lanes = 32)\n        : (workInProgress.lanes = 536870912);\n      return null;\n    }\n    var nextPrimaryChildren = nextProps.children;\n    nextProps = nextProps.fallback;\n    if (showFallback)\n      return (\n        reuseSuspenseHandlerOnStack(workInProgress),\n        (showFallback = workInProgress.mode),\n        (nextPrimaryChildren = mountWorkInProgressOffscreenFiber(\n          { mode: \"hidden\", children: nextPrimaryChildren },\n          showFallback\n        )),\n        (nextProps = createFiberFromFragment(\n          nextProps,\n          showFallback,\n          renderLanes,\n          null\n        )),\n        (nextPrimaryChildren.return = workInProgress),\n        (nextProps.return = workInProgress),\n        (nextPrimaryChildren.sibling = nextProps),\n        (workInProgress.child = nextPrimaryChildren),\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, nextPrimaryChildren);\n  }\n  var prevState = current.memoizedState;\n  if (\n    null !== prevState &&\n    ((nextPrimaryChildren = prevState.dehydrated), null !== nextPrimaryChildren)\n  ) {\n    if (didSuspend)\n      workInProgress.flags & 256\n        ? (pushPrimaryTreeSuspenseHandler(workInProgress),\n          (workInProgress.flags &= -257),\n          (workInProgress = retrySuspenseComponentWithoutHydrating(\n            current,\n            workInProgress,\n            renderLanes\n          )))\n        : null !== workInProgress.memoizedState\n          ? (reuseSuspenseHandlerOnStack(workInProgress),\n            (workInProgress.child = current.child),\n            (workInProgress.flags |= 128),\n            (workInProgress = null))\n          : (reuseSuspenseHandlerOnStack(workInProgress),\n            (nextPrimaryChildren = nextProps.fallback),\n            (showFallback = workInProgress.mode),\n            (nextProps = mountWorkInProgressOffscreenFiber(\n              { mode: \"visible\", children: nextProps.children },\n              showFallback\n            )),\n            (nextPrimaryChildren = createFiberFromFragment(\n              nextPrimaryChildren,\n              showFallback,\n              renderLanes,\n              null\n            )),\n            (nextPrimaryChildren.flags |= 2),\n            (nextProps.return = workInProgress),\n            (nextPrimaryChildren.return = workInProgress),\n            (nextProps.sibling = nextPrimaryChildren),\n            (workInProgress.child = nextProps),\n            reconcileChildFibers(\n              workInProgress,\n              current.child,\n              null,\n              renderLanes\n            ),\n            (nextProps = workInProgress.child),\n            (nextProps.memoizedState =\n              mountSuspenseOffscreenState(renderLanes)),\n            (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n              current,\n              JSCompiler_temp,\n              renderLanes\n            )),\n            (workInProgress.memoizedState = SUSPENDED_MARKER),\n            (workInProgress = bailoutOffscreenComponent(null, nextProps)));\n    else if (\n      (pushPrimaryTreeSuspenseHandler(workInProgress),\n      isSuspenseInstanceFallback(nextPrimaryChildren))\n    ) {\n      JSCompiler_temp =\n        nextPrimaryChildren.nextSibling &&\n        nextPrimaryChildren.nextSibling.dataset;\n      if (JSCompiler_temp) var digest = JSCompiler_temp.dgst;\n      JSCompiler_temp = digest;\n      nextProps = Error(formatProdErrorMessage(419));\n      nextProps.stack = \"\";\n      nextProps.digest = JSCompiler_temp;\n      queueHydrationError({ value: nextProps, source: null, stack: null });\n      workInProgress = retrySuspenseComponentWithoutHydrating(\n        current,\n        workInProgress,\n        renderLanes\n      );\n    } else if (\n      (didReceiveUpdate ||\n        propagateParentContextChanges(current, workInProgress, renderLanes, !1),\n      (JSCompiler_temp = 0 !== (renderLanes & current.childLanes)),\n      didReceiveUpdate || JSCompiler_temp)\n    ) {\n      JSCompiler_temp = workInProgressRoot;\n      if (\n        null !== JSCompiler_temp &&\n        ((nextProps = getBumpedLaneForHydration(JSCompiler_temp, renderLanes)),\n        0 !== nextProps && nextProps !== prevState.retryLane)\n      )\n        throw (\n          ((prevState.retryLane = nextProps),\n          enqueueConcurrentRenderForLane(current, nextProps),\n          scheduleUpdateOnFiber(JSCompiler_temp, current, nextProps),\n          SelectiveHydrationException)\n        );\n      isSuspenseInstancePending(nextPrimaryChildren) ||\n        renderDidSuspendDelayIfPossible();\n      workInProgress = retrySuspenseComponentWithoutHydrating(\n        current,\n        workInProgress,\n        renderLanes\n      );\n    } else\n      isSuspenseInstancePending(nextPrimaryChildren)\n        ? ((workInProgress.flags |= 192),\n          (workInProgress.child = current.child),\n          (workInProgress = null))\n        : ((current = prevState.treeContext),\n          (nextHydratableInstance = getNextHydratable(\n            nextPrimaryChildren.nextSibling\n          )),\n          (hydrationParentFiber = workInProgress),\n          (isHydrating = !0),\n          (hydrationErrors = null),\n          (rootOrSingletonContext = !1),\n          null !== current &&\n            restoreSuspendedTreeContext(workInProgress, current),\n          (workInProgress = mountSuspensePrimaryChildren(\n            workInProgress,\n            nextProps.children\n          )),\n          (workInProgress.flags |= 4096));\n    return workInProgress;\n  }\n  if (showFallback)\n    return (\n      reuseSuspenseHandlerOnStack(workInProgress),\n      (nextPrimaryChildren = nextProps.fallback),\n      (showFallback = workInProgress.mode),\n      (prevState = current.child),\n      (digest = prevState.sibling),\n      (nextProps = createWorkInProgress(prevState, {\n        mode: \"hidden\",\n        children: nextProps.children\n      })),\n      (nextProps.subtreeFlags = prevState.subtreeFlags & 65011712),\n      null !== digest\n        ? (nextPrimaryChildren = createWorkInProgress(\n            digest,\n            nextPrimaryChildren\n          ))\n        : ((nextPrimaryChildren = createFiberFromFragment(\n            nextPrimaryChildren,\n            showFallback,\n            renderLanes,\n            null\n          )),\n          (nextPrimaryChildren.flags |= 2)),\n      (nextPrimaryChildren.return = workInProgress),\n      (nextProps.return = workInProgress),\n      (nextProps.sibling = nextPrimaryChildren),\n      (workInProgress.child = nextProps),\n      bailoutOffscreenComponent(null, nextProps),\n      (nextProps = workInProgress.child),\n      (nextPrimaryChildren = current.child.memoizedState),\n      null === nextPrimaryChildren\n        ? (nextPrimaryChildren = mountSuspenseOffscreenState(renderLanes))\n        : ((showFallback = nextPrimaryChildren.cachePool),\n          null !== showFallback\n            ? ((prevState = CacheContext._currentValue),\n              (showFallback =\n                showFallback.parent !== prevState\n                  ? { parent: prevState, pool: prevState }\n                  : showFallback))\n            : (showFallback = getSuspendedCache()),\n          (nextPrimaryChildren = {\n            baseLanes: nextPrimaryChildren.baseLanes | renderLanes,\n            cachePool: showFallback\n          })),\n      (nextProps.memoizedState = nextPrimaryChildren),\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 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 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 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    shouldForceFallback = 0 !== (suspenseContext & 2);\n  shouldForceFallback\n    ? ((suspenseContext = (suspenseContext & 1) | 2),\n      (workInProgress.flags |= 128))\n    : (suspenseContext &= 1);\n  push(suspenseStackCursor, suspenseContext);\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 \"forwards\":\n      renderLanes = workInProgress.child;\n      for (revealOrder = null; null !== renderLanes; )\n        (current = renderLanes.alternate),\n          null !== current &&\n            null === findFirstSuspended(current) &&\n            (revealOrder = renderLanes),\n          (renderLanes = renderLanes.sibling);\n      renderLanes = revealOrder;\n      null === renderLanes\n        ? ((revealOrder = workInProgress.child), (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      break;\n    case \"backwards\":\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    default:\n      workInProgress.memoizedState = null;\n  }\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$102 = workInProgress.memoizedState;\n      if (null !== state$102) {\n        if (null !== state$102.dehydrated)\n          return (\n            pushPrimaryTreeSuspenseHandler(workInProgress),\n            (workInProgress.flags |= 128),\n            null\n          );\n        if (0 !== (renderLanes & workInProgress.child.childLanes))\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      var didSuspendBefore = 0 !== (current.flags & 128);\n      state$102 = 0 !== (renderLanes & workInProgress.childLanes);\n      state$102 ||\n        (propagateParentContextChanges(\n          current,\n          workInProgress,\n          renderLanes,\n          !1\n        ),\n        (state$102 = 0 !== (renderLanes & workInProgress.childLanes)));\n      if (didSuspendBefore) {\n        if (state$102)\n          return updateSuspenseListComponent(\n            current,\n            workInProgress,\n            renderLanes\n          );\n        workInProgress.flags |= 128;\n      }\n      didSuspendBefore = workInProgress.memoizedState;\n      null !== didSuspendBefore &&\n        ((didSuspendBefore.rendering = null),\n        (didSuspendBefore.tail = null),\n        (didSuspendBefore.lastEffect = null));\n      push(suspenseStackCursor, suspenseStackCursor.current);\n      if (state$102) 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            }\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) | 4096),\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              ((renderLanes = workInProgress.type),\n              (current = workInProgress.pendingProps),\n              (props = getOwnerDocumentFromRootContainer(\n                rootInstanceStackCursor.current\n              ).createElement(renderLanes)),\n              (props[internalInstanceKey] = workInProgress),\n              (props[internalPropsKey] = current),\n              setInitialProperties(props, renderLanes, current),\n              markNodeAsHoistable(props),\n              (workInProgress.stateNode = props))\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        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps,\n          renderLanes\n        ),\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 (\n        (props = workInProgress.pendingProps),\n        pushProvider(workInProgress, workInProgress.type, props.value),\n        reconcileChildren(current, workInProgress, props.children, renderLanes),\n        workInProgress.child\n      );\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 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  if ((type = 0 !== (workInProgress.mode & 32))) type = !1;\n  if (type) {\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 \"hidden\":\n        hasRenderedATailFallback = renderState.tail;\n        for (var lastTailNode = null; null !== hasRenderedATailFallback; )\n          null !== hasRenderedATailFallback.alternate &&\n            (lastTailNode = hasRenderedATailFallback),\n            (hasRenderedATailFallback = hasRenderedATailFallback.sibling);\n        null === lastTailNode\n          ? (renderState.tail = null)\n          : (lastTailNode.sibling = null);\n        break;\n      case \"collapsed\":\n        lastTailNode = renderState.tail;\n        for (var lastTailNode$106 = null; null !== lastTailNode; )\n          null !== lastTailNode.alternate && (lastTailNode$106 = lastTailNode),\n            (lastTailNode = lastTailNode.sibling);\n        null === lastTailNode$106\n          ? hasRenderedATailFallback || null === renderState.tail\n            ? (renderState.tail = null)\n            : (renderState.tail.sibling = null)\n          : (lastTailNode$106.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$107 = completedWork.child; null !== child$107; )\n      (newChildLanes |= child$107.lanes | child$107.childLanes),\n        (subtreeFlags |= child$107.subtreeFlags & 65011712),\n        (subtreeFlags |= child$107.flags & 65011712),\n        (child$107.return = completedWork),\n        (child$107 = child$107.sibling);\n  else\n    for (child$107 = completedWork.child; null !== child$107; )\n      (newChildLanes |= child$107.lanes | child$107.childLanes),\n        (subtreeFlags |= child$107.subtreeFlags),\n        (subtreeFlags |= child$107.flags),\n        (child$107.return = completedWork),\n        (child$107 = child$107.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          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      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          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      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        bubbleProperties(workInProgress),\n        null\n      );\n    case 10:\n      return (\n        popProvider(workInProgress.type), bubbleProperties(workInProgress), null\n      );\n    case 19:\n      pop(suspenseStackCursor);\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                push(\n                  suspenseStackCursor,\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                \"hidden\" === 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        return (\n          (current = newProps.tail),\n          (newProps.rendering = current),\n          (newProps.tail = current.sibling),\n          (newProps.renderingStartTime = now()),\n          (current.sibling = null),\n          (renderLanes = suspenseStackCursor.current),\n          push(\n            suspenseStackCursor,\n            type ? (renderLanes & 1) | 2 : renderLanes & 1\n          ),\n          isHydrating && pushTreeFork(workInProgress, newProps.treeForkCount),\n          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 null;\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 pop(suspenseStackCursor), null;\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      pop(suspenseStackCursor);\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          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$140) {\n        captureCommitPhaseError(current, nearestMountedAncestor, error$140);\n      }\n    else ref.current = null;\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(node, before, parent) {\n  var tag = node.tag;\n  if (5 === tag || 6 === tag)\n    (node = node.stateNode),\n      before\n        ? (9 === parent.nodeType\n            ? parent.body\n            : \"HTML\" === parent.nodeName\n              ? parent.ownerDocument.body\n              : parent\n          ).insertBefore(node, before)\n        : ((before =\n            9 === parent.nodeType\n              ? parent.body\n              : \"HTML\" === parent.nodeName\n                ? parent.ownerDocument.body\n                : parent),\n          before.appendChild(node),\n          (parent = parent._reactRootContainer),\n          (null !== parent && void 0 !== parent) ||\n            null !== before.onclick ||\n            (before.onclick = noop$1));\n  else if (\n    4 !== tag &&\n    (27 === tag &&\n      isSingletonScope(node.type) &&\n      ((parent = node.stateNode), (before = null)),\n    (node = node.child),\n    null !== node)\n  )\n    for (\n      insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n        node = node.sibling;\n      null !== node;\n\n    )\n      insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n        (node = node.sibling);\n}\nfunction insertOrAppendPlacementNode(node, before, parent) {\n  var tag = node.tag;\n  if (5 === tag || 6 === tag)\n    (node = node.stateNode),\n      before ? parent.insertBefore(node, before) : parent.appendChild(node);\n  else if (\n    4 !== tag &&\n    (27 === tag && isSingletonScope(node.type) && (parent = node.stateNode),\n    (node = node.child),\n    null !== node)\n  )\n    for (\n      insertOrAppendPlacementNode(node, before, parent), node = node.sibling;\n      null !== node;\n\n    )\n      insertOrAppendPlacementNode(node, before, parent), (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 offscreenSubtreeIsHidden = !1,\n  offscreenSubtreeWasHidden = !1,\n  needsFormReset = !1,\n  PossiblyWeakSet = \"function\" === typeof WeakSet ? WeakSet : Set,\n  nextEffect = null;\nfunction commitBeforeMutationEffects(root, firstChild) {\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$20) {\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  for (nextEffect = firstChild; null !== nextEffect; )\n    if (\n      ((firstChild = nextEffect),\n      (root = firstChild.child),\n      0 !== (firstChild.subtreeFlags & 1028) && null !== root)\n    )\n      (root.return = firstChild), (nextEffect = root);\n    else\n      for (; null !== nextEffect; ) {\n        firstChild = nextEffect;\n        focusNode = firstChild.alternate;\n        root = firstChild.flags;\n        switch (firstChild.tag) {\n          case 0:\n            if (\n              0 !== (root & 4) &&\n              ((root = firstChild.updateQueue),\n              (root = null !== root ? root.events : null),\n              null !== root)\n            )\n              for (\n                JSCompiler_temp = 0;\n                JSCompiler_temp < root.length;\n                JSCompiler_temp++\n              )\n                (anchorOffset = root[JSCompiler_temp]),\n                  (anchorOffset.ref.impl = anchorOffset.nextImpl);\n            break;\n          case 11:\n          case 15:\n            break;\n          case 1:\n            if (0 !== (root & 1024) && null !== focusNode) {\n              root = void 0;\n              JSCompiler_temp = firstChild;\n              anchorOffset = focusNode.memoizedProps;\n              focusNode = focusNode.memoizedState;\n              selection = JSCompiler_temp.stateNode;\n              try {\n                var resolvedPrevProps = resolveClassComponentProps(\n                  JSCompiler_temp.type,\n                  anchorOffset\n                );\n                root = selection.getSnapshotBeforeUpdate(\n                  resolvedPrevProps,\n                  focusNode\n                );\n                selection.__reactInternalSnapshotBeforeUpdate = root;\n              } catch (error) {\n                captureCommitPhaseError(\n                  JSCompiler_temp,\n                  JSCompiler_temp.return,\n                  error\n                );\n              }\n            }\n            break;\n          case 3:\n            if (0 !== (root & 1024))\n              if (\n                ((root = firstChild.stateNode.containerInfo),\n                (JSCompiler_temp = root.nodeType),\n                9 === JSCompiler_temp)\n              )\n                clearContainerSparingly(root);\n              else if (1 === JSCompiler_temp)\n                switch (root.nodeName) {\n                  case \"HEAD\":\n                  case \"HTML\":\n                  case \"BODY\":\n                    clearContainerSparingly(root);\n                    break;\n                  default:\n                    root.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          default:\n            if (0 !== (root & 1024)) throw Error(formatProdErrorMessage(163));\n        }\n        root = firstChild.sibling;\n        if (null !== root) {\n          root.return = firstChild.return;\n          nextEffect = root;\n          break;\n        }\n        nextEffect = firstChild.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$139) {\n            captureCommitPhaseError(\n              finishedWork,\n              finishedWork.return,\n              error$139\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        current =\n          (null !== current && null !== current.memoizedState) ||\n          offscreenSubtreeWasHidden;\n        prevProps = offscreenSubtreeIsHidden;\n        var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n        offscreenSubtreeIsHidden = flags;\n        (offscreenSubtreeWasHidden = current) && !prevOffscreenSubtreeWasHidden\n          ? recursivelyTraverseReappearLayoutEffects(\n              finishedRoot,\n              finishedWork,\n              0 !== (finishedWork.subtreeFlags & 8772)\n            )\n          : recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n        offscreenSubtreeIsHidden = prevProps;\n        offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n      }\n      break;\n    case 30:\n      break;\n    default:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\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          ((deletedFiber = deletedFiber.stateNode),\n          deletedFiber.parentNode.removeChild(deletedFiber));\n      break;\n    case 27:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\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(deletedFiber.stateNode);\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      break;\n    case 5:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n    case 6:\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          } catch (error) {\n            captureCommitPhaseError(\n              deletedFiber,\n              nearestMountedAncestor,\n              error\n            );\n          }\n        else\n          try {\n            hostParent.removeChild(deletedFiber.stateNode);\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    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) {\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),\n        (parentFiber = parentFiber.sibling);\n}\nvar currentHoistableRoot = null;\nfunction commitMutationEffectsOnFiber(finishedWork, root) {\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      recursivelyTraverseMutationEffects(root, finishedWork);\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);\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          ((flags = finishedWork.callbacks),\n          null !== flags &&\n            ((current = finishedWork.shared.hiddenCallbacks),\n            (finishedWork.shared.hiddenCallbacks =\n              null === current ? flags : current.concat(flags)))));\n      break;\n    case 26:\n      var hoistableRoot = currentHoistableRoot;\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      if (flags & 4) {\n        var currentResource = null !== current ? current.memoizedState : null;\n        flags = finishedWork.memoizedState;\n        if (null === current)\n          if (null === flags)\n            if (null === finishedWork.stateNode) {\n              a: {\n                flags = finishedWork.type;\n                current = finishedWork.memoizedProps;\n                hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n                b: switch (flags) {\n                  case \"title\":\n                    currentResource =\n                      hoistableRoot.getElementsByTagName(\"title\")[0];\n                    if (\n                      !currentResource ||\n                      currentResource[internalHoistableMarker] ||\n                      currentResource[internalInstanceKey] ||\n                      \"http://www.w3.org/2000/svg\" ===\n                        currentResource.namespaceURI ||\n                      currentResource.hasAttribute(\"itemprop\")\n                    )\n                      (currentResource = hoistableRoot.createElement(flags)),\n                        hoistableRoot.head.insertBefore(\n                          currentResource,\n                          hoistableRoot.querySelector(\"head > title\")\n                        );\n                    setInitialProperties(currentResource, flags, current);\n                    currentResource[internalInstanceKey] = finishedWork;\n                    markNodeAsHoistable(currentResource);\n                    flags = currentResource;\n                    break a;\n                  case \"link\":\n                    var maybeNodes = getHydratableHoistableCache(\n                      \"link\",\n                      \"href\",\n                      hoistableRoot\n                    ).get(flags + (current.href || \"\"));\n                    if (maybeNodes)\n                      for (var i = 0; i < maybeNodes.length; i++)\n                        if (\n                          ((currentResource = maybeNodes[i]),\n                          currentResource.getAttribute(\"href\") ===\n                            (null == current.href || \"\" === current.href\n                              ? null\n                              : current.href) &&\n                            currentResource.getAttribute(\"rel\") ===\n                              (null == current.rel ? null : current.rel) &&\n                            currentResource.getAttribute(\"title\") ===\n                              (null == current.title ? null : current.title) &&\n                            currentResource.getAttribute(\"crossorigin\") ===\n                              (null == current.crossOrigin\n                                ? null\n                                : current.crossOrigin))\n                        ) {\n                          maybeNodes.splice(i, 1);\n                          break b;\n                        }\n                    currentResource = hoistableRoot.createElement(flags);\n                    setInitialProperties(currentResource, flags, current);\n                    hoistableRoot.head.appendChild(currentResource);\n                    break;\n                  case \"meta\":\n                    if (\n                      (maybeNodes = getHydratableHoistableCache(\n                        \"meta\",\n                        \"content\",\n                        hoistableRoot\n                      ).get(flags + (current.content || \"\")))\n                    )\n                      for (i = 0; i < maybeNodes.length; i++)\n                        if (\n                          ((currentResource = maybeNodes[i]),\n                          currentResource.getAttribute(\"content\") ===\n                            (null == current.content\n                              ? null\n                              : \"\" + current.content) &&\n                            currentResource.getAttribute(\"name\") ===\n                              (null == current.name ? null : current.name) &&\n                            currentResource.getAttribute(\"property\") ===\n                              (null == current.property\n                                ? null\n                                : current.property) &&\n                            currentResource.getAttribute(\"http-equiv\") ===\n                              (null == current.httpEquiv\n                                ? null\n                                : current.httpEquiv) &&\n                            currentResource.getAttribute(\"charset\") ===\n                              (null == current.charSet\n                                ? null\n                                : current.charSet))\n                        ) {\n                          maybeNodes.splice(i, 1);\n                          break b;\n                        }\n                    currentResource = hoistableRoot.createElement(flags);\n                    setInitialProperties(currentResource, flags, current);\n                    hoistableRoot.head.appendChild(currentResource);\n                    break;\n                  default:\n                    throw Error(formatProdErrorMessage(468, flags));\n                }\n                currentResource[internalInstanceKey] = finishedWork;\n                markNodeAsHoistable(currentResource);\n                flags = currentResource;\n              }\n              finishedWork.stateNode = flags;\n            } else\n              mountHoistable(\n                hoistableRoot,\n                finishedWork.type,\n                finishedWork.stateNode\n              );\n          else\n            finishedWork.stateNode = acquireResource(\n              hoistableRoot,\n              flags,\n              finishedWork.memoizedProps\n            );\n        else\n          currentResource !== flags\n            ? (null === currentResource\n                ? null !== current.stateNode &&\n                  ((current = current.stateNode),\n                  current.parentNode.removeChild(current))\n                : currentResource.count--,\n              null === flags\n                ? mountHoistable(\n                    hoistableRoot,\n                    finishedWork.type,\n                    finishedWork.stateNode\n                  )\n                : acquireResource(\n                    hoistableRoot,\n                    flags,\n                    finishedWork.memoizedProps\n                  ))\n            : null === flags &&\n              null !== finishedWork.stateNode &&\n              commitHostUpdate(\n                finishedWork,\n                finishedWork.memoizedProps,\n                current.memoizedProps\n              );\n      }\n      break;\n    case 27:\n      recursivelyTraverseMutationEffects(root, finishedWork);\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      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      if (finishedWork.flags & 32) {\n        hoistableRoot = finishedWork.stateNode;\n        try {\n          setTextContent(hoistableRoot, \"\");\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      flags & 4 &&\n        null != finishedWork.stateNode &&\n        ((hoistableRoot = finishedWork.memoizedProps),\n        commitHostUpdate(\n          finishedWork,\n          hoistableRoot,\n          null !== current ? current.memoizedProps : hoistableRoot\n        ));\n      flags & 1024 && (needsFormReset = !0);\n      break;\n    case 6:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      if (flags & 4) {\n        if (null === finishedWork.stateNode)\n          throw Error(formatProdErrorMessage(162));\n        flags = finishedWork.memoizedProps;\n        current = finishedWork.stateNode;\n        try {\n          current.nodeValue = flags;\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      break;\n    case 3:\n      tagCaches = null;\n      hoistableRoot = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(root.containerInfo);\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      currentHoistableRoot = hoistableRoot;\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      break;\n    case 4:\n      flags = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(\n        finishedWork.stateNode.containerInfo\n      );\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      currentHoistableRoot = flags;\n      break;\n    case 12:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      break;\n    case 31:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((finishedWork.updateQueue = null),\n          attachSuspenseRetryListeners(finishedWork, flags)));\n      break;\n    case 13:\n      recursivelyTraverseMutationEffects(root, finishedWork);\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        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((finishedWork.updateQueue = null),\n          attachSuspenseRetryListeners(finishedWork, flags)));\n      break;\n    case 22:\n      hoistableRoot = null !== finishedWork.memoizedState;\n      var wasHidden = null !== current && null !== current.memoizedState,\n        prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden,\n        prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n      offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden || hoistableRoot;\n      offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden || wasHidden;\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n      offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden;\n      commitReconciliationEffects(finishedWork);\n      if (flags & 8192)\n        a: for (\n          root = finishedWork.stateNode,\n            root._visibility = hoistableRoot\n              ? root._visibility & -2\n              : root._visibility | 1,\n            hoistableRoot &&\n              (null === current ||\n                wasHidden ||\n                offscreenSubtreeIsHidden ||\n                offscreenSubtreeWasHidden ||\n                recursivelyTraverseDisappearLayoutEffects(finishedWork)),\n            current = null,\n            root = finishedWork;\n          ;\n\n        ) {\n          if (5 === root.tag || 26 === root.tag) {\n            if (null === current) {\n              wasHidden = current = root;\n              try {\n                if (((currentResource = wasHidden.stateNode), hoistableRoot))\n                  (maybeNodes = currentResource.style),\n                    \"function\" === typeof maybeNodes.setProperty\n                      ? maybeNodes.setProperty(\"display\", \"none\", \"important\")\n                      : (maybeNodes.display = \"none\");\n                else {\n                  i = wasHidden.stateNode;\n                  var styleProp = wasHidden.memoizedProps.style,\n                    display =\n                      void 0 !== styleProp &&\n                      null !== styleProp &&\n                      styleProp.hasOwnProperty(\"display\")\n                        ? styleProp.display\n                        : null;\n                  i.style.display =\n                    null == display || \"boolean\" === typeof display\n                      ? \"\"\n                      : (\"\" + display).trim();\n                }\n              } catch (error) {\n                captureCommitPhaseError(wasHidden, wasHidden.return, error);\n              }\n            }\n          } else if (6 === root.tag) {\n            if (null === current) {\n              wasHidden = root;\n              try {\n                wasHidden.stateNode.nodeValue = hoistableRoot\n                  ? \"\"\n                  : wasHidden.memoizedProps;\n              } catch (error) {\n                captureCommitPhaseError(wasHidden, wasHidden.return, error);\n              }\n            }\n          } else if (18 === root.tag) {\n            if (null === current) {\n              wasHidden = root;\n              try {\n                var instance = wasHidden.stateNode;\n                hoistableRoot\n                  ? hideOrUnhideDehydratedBoundary(instance, !0)\n                  : hideOrUnhideDehydratedBoundary(wasHidden.stateNode, !1);\n              } catch (error) {\n                captureCommitPhaseError(wasHidden, wasHidden.return, error);\n              }\n            }\n          } else if (\n            ((22 !== root.tag && 23 !== root.tag) ||\n              null === root.memoizedState ||\n              root === finishedWork) &&\n            null !== root.child\n          ) {\n            root.child.return = root;\n            root = root.child;\n            continue;\n          }\n          if (root === finishedWork) break a;\n          for (; null === root.sibling; ) {\n            if (null === root.return || root.return === finishedWork) break a;\n            current === root && (current = null);\n            root = root.return;\n          }\n          current === root && (current = null);\n          root.sibling.return = root.return;\n          root = root.sibling;\n        }\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((current = flags.retryQueue),\n          null !== current &&\n            ((flags.retryQueue = null),\n            attachSuspenseRetryListeners(finishedWork, current))));\n      break;\n    case 19:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((finishedWork.updateQueue = null),\n          attachSuspenseRetryListeners(finishedWork, flags)));\n      break;\n    case 30:\n      break;\n    case 21:\n      break;\n    default:\n      recursivelyTraverseMutationEffects(root, finishedWork),\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      if (null == hostParentFiber) throw Error(formatProdErrorMessage(160));\n      switch (hostParentFiber.tag) {\n        case 27:\n          var parent = hostParentFiber.stateNode,\n            before = getHostSibling(finishedWork);\n          insertOrAppendPlacementNode(finishedWork, before, parent);\n          break;\n        case 5:\n          var parent$141 = hostParentFiber.stateNode;\n          hostParentFiber.flags & 32 &&\n            (setTextContent(parent$141, \"\"), (hostParentFiber.flags &= -33));\n          var before$142 = getHostSibling(finishedWork);\n          insertOrAppendPlacementNode(finishedWork, before$142, parent$141);\n          break;\n        case 3:\n        case 4:\n          var parent$143 = hostParentFiber.stateNode.containerInfo,\n            before$144 = getHostSibling(finishedWork);\n          insertOrAppendPlacementNodeIntoContainer(\n            finishedWork,\n            before$144,\n            parent$143\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 && fiber.flags & 1024 && fiber.stateNode.reset();\n      parentFiber = parentFiber.sibling;\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(parentFiber) {\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var finishedWork = parentFiber;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 14:\n      case 15:\n        commitHookEffectListUnmount(4, finishedWork, finishedWork.return);\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\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(finishedWork);\n        break;\n      case 27:\n        releaseSingletonInstance(finishedWork.stateNode);\n      case 26:\n      case 5:\n        safelyDetachRef(finishedWork, finishedWork.return);\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 22:\n        null === finishedWork.memoizedState &&\n          recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 30:\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      default:\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction recursivelyTraverseReappearLayoutEffects(\n  finishedRoot$jscomp$0,\n  parentFiber,\n  includeWorkInProgressEffects\n) {\n  includeWorkInProgressEffects =\n    includeWorkInProgressEffects && 0 !== (parentFiber.subtreeFlags & 8772);\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    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 15:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        commitHookEffectListMount(4, finishedWork);\n        break;\n      case 1:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\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        commitHostSingletonAcquisition(finishedWork);\n      case 26:\n      case 5:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\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          includeWorkInProgressEffects\n        );\n        break;\n      case 31:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          flags & 4 &&\n          commitActivityHydrationCallbacks(finishedRoot, finishedWork);\n        break;\n      case 13:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\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            includeWorkInProgressEffects\n          );\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 30:\n        break;\n      default:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\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  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitPassiveMountOnFiber(\n        root,\n        parentFiber,\n        committedLanes,\n        committedTransitions\n      ),\n        (parentFiber = parentFiber.sibling);\n}\nfunction commitPassiveMountOnFiber(\n  finishedRoot,\n  finishedWork,\n  committedLanes,\n  committedTransitions\n) {\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      flags & 2048 &&\n        ((finishedRoot = null),\n        null !== finishedWork.alternate &&\n          (finishedRoot = finishedWork.alternate.memoizedState.cache),\n        (finishedWork = finishedWork.memoizedState.cache),\n        finishedWork !== finishedRoot &&\n          (finishedWork.refCount++,\n          null != finishedRoot && releaseCache(finishedRoot)));\n      break;\n    case 12:\n      if (flags & 2048) {\n        recursivelyTraversePassiveMountEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions\n        );\n        finishedRoot = 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              finishedRoot.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        ? _finishedWork$memoize2._visibility & 2\n          ? recursivelyTraversePassiveMountEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions\n            )\n          : recursivelyTraverseAtomicPassiveEffects(finishedRoot, 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    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      break;\n    case 5:\n      recursivelyAccumulateSuspenseyCommit(\n        fiber,\n        committedLanes,\n        suspendedState\n      );\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    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  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 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 (2 !== JSCompiler_inline_result) {\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) 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            commitRootWhenReady.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        commitRootWhenReady(\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 commitRootWhenReady(\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  suspendedCommitReason = finishedWork.subtreeFlags;\n  if (\n    suspendedCommitReason & 8192 ||\n    16785408 === (suspendedCommitReason & 16785408)\n  ) {\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    accumulateSuspenseyCommitOnFiber(\n      finishedWork,\n      lanes,\n      suspendedCommitReason\n    );\n    var timeoutOffset =\n      (lanes & 62914560) === lanes\n        ? globalMostRecentFallbackTime - now()\n        : (lanes & 4194048) === lanes\n          ? globalMostRecentTransitionTime - now()\n          : 0;\n    timeoutOffset = waitForCommitToBeReady(\n      suspendedCommitReason,\n      timeoutOffset\n    );\n    if (null !== timeoutOffset) {\n      pendingEffectsLanes = lanes;\n      root.cancelPendingCommit = timeoutOffset(\n        commitRoot.bind(\n          null,\n          root,\n          finishedWork,\n          lanes,\n          recoverableErrors,\n          transitions,\n          didIncludeRenderPhaseUpdate,\n          spawnedLane,\n          updatedLanes,\n          suspendedRetryLanes,\n          exitStatus,\n          suspendedCommitReason,\n          null,\n          completedRenderStartTime,\n          completedRenderEndTime\n        )\n      );\n      markRootSuspended(root, lanes, spawnedLane, !didSkipSuspendedSiblings);\n      return;\n    }\n  }\n  commitRoot(\n    root,\n    finishedWork,\n    lanes,\n    recoverableErrors,\n    transitions,\n    didIncludeRenderPhaseUpdate,\n    spawnedLane,\n    updatedLanes,\n    suspendedRetryLanes\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 &= ~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  0 !== (lanes & 8) && (lanes |= lanes & 32);\n  var allEntangledLanes = root.entangledLanes;\n  if (0 !== allEntangledLanes)\n    for (\n      root = root.entanglements, allEntangledLanes &= lanes;\n      0 < allEntangledLanes;\n\n    ) {\n      var index$4 = 31 - clz32(allEntangledLanes),\n        lane = 1 << index$4;\n      lanes |= root[index$4];\n      allEntangledLanes &= ~lane;\n    }\n  entangledRenderLanes = 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$165) {\n      handleThrow(root, thrownValue$165);\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$167) {\n      handleThrow(root, thrownValue$167);\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    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 commitRoot(\n  root,\n  finishedWork,\n  lanes,\n  recoverableErrors,\n  transitions,\n  didIncludeRenderPhaseUpdate,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes\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    didIncludeRenderPhaseUpdate = finishedWork.lanes | finishedWork.childLanes;\n    didIncludeRenderPhaseUpdate |= concurrentlyUpdatedLanes;\n    markRootFinished(\n      root,\n      lanes,\n      didIncludeRenderPhaseUpdate,\n      spawnedLane,\n      updatedLanes,\n      suspendedRetryLanes\n    );\n    root === workInProgressRoot &&\n      ((workInProgress = workInProgressRoot = null),\n      (workInProgressRootRenderLanes = 0));\n    pendingFinishedWork = finishedWork;\n    pendingEffectsRoot = root;\n    pendingEffectsLanes = lanes;\n    pendingEffectsRemainingLanes = didIncludeRenderPhaseUpdate;\n    pendingPassiveTransitions = transitions;\n    pendingRecoverableErrors = recoverableErrors;\n    0 !== (finishedWork.subtreeFlags & 10256) ||\n    0 !== (finishedWork.flags & 10256)\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    recoverableErrors = 0 !== (finishedWork.flags & 13878);\n    if (0 !== (finishedWork.subtreeFlags & 13878) || recoverableErrors) {\n      recoverableErrors = ReactSharedInternals.T;\n      ReactSharedInternals.T = null;\n      transitions = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      spawnedLane = executionContext;\n      executionContext |= 4;\n      try {\n        commitBeforeMutationEffects(root, finishedWork, lanes);\n      } finally {\n        (executionContext = spawnedLane),\n          (ReactDOMSharedInternals.p = transitions),\n          (ReactSharedInternals.T = recoverableErrors);\n      }\n    }\n    pendingEffectsStatus = 1;\n    flushMutationEffects();\n    flushLayoutEffects();\n    flushSpawnedWork();\n  }\n}\nfunction flushMutationEffects() {\n  if (1 === pendingEffectsStatus) {\n    pendingEffectsStatus = 0;\n    var root = pendingEffectsRoot,\n      finishedWork = pendingFinishedWork,\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        commitMutationEffectsOnFiber(finishedWork, root);\n        var priorSelectionInformation = selectionInformation,\n          curFocusedElem = getActiveElementDeep(root.containerInfo),\n          priorFocusedElem = priorSelectionInformation.focusedElem,\n          priorSelectionRange = priorSelectionInformation.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    requestPaint();\n    var root = pendingEffectsRoot,\n      finishedWork = pendingFinishedWork,\n      lanes = pendingEffectsLanes,\n      recoverableErrors = pendingRecoverableErrors;\n    0 !== (finishedWork.subtreeFlags & 10256) ||\n    0 !== (finishedWork.flags & 10256)\n      ? (pendingEffectsStatus = 5)\n      : ((pendingEffectsStatus = 0),\n        (pendingFinishedWork = pendingEffectsRoot = null),\n        releaseRootPooledCache(root, root.pendingLanes));\n    var remainingLanes = root.pendingLanes;\n    0 === remainingLanes && (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      remainingLanes = 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 = remainingLanes);\n      }\n    }\n    0 !== (pendingEffectsLanes & 3) && flushPendingEffects();\n    ensureRootIsScheduled(root);\n    remainingLanes = root.pendingLanes;\n    0 !== (lanes & 261930) && 0 !== (remainingLanes & 42)\n      ? root === rootWithNestedUpdates\n        ? nestedUpdateCount++\n        : ((nestedUpdateCount = 0), (rootWithNestedUpdates = root))\n      : (nestedUpdateCount = 0);\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  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) && prepareFreshStack(root, 0)\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$170 = firstScheduledRoot; null !== root$170; ) {\n        if (!onlyLegacy)\n          if (0 !== syncTransitionLanes) {\n            var pendingLanes = root$170.pendingLanes;\n            if (0 === pendingLanes) var JSCompiler_inline_result = 0;\n            else {\n              var suspendedLanes = root$170.suspendedLanes,\n                pingedLanes = root$170.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$170, JSCompiler_inline_result));\n          } else\n            (JSCompiler_inline_result = workInProgressRootRenderLanes),\n              (JSCompiler_inline_result = getNextLanes(\n                root$170,\n                root$170 === workInProgressRoot ? JSCompiler_inline_result : 0,\n                null !== root$170.cancelPendingCommit ||\n                  -1 !== root$170.timeoutHandle\n              )),\n              0 === (JSCompiler_inline_result & 3) ||\n                checkIfRootIsPrerendering(root$170, JSCompiler_inline_result) ||\n                ((didPerformSomeWork = !0),\n                performSyncWorkOnRoot(root$170, JSCompiler_inline_result));\n        root$170 = root$170.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 createFormDataWithSubmitter(form, submitter) {\n  var temp = submitter.ownerDocument.createElement(\"input\");\n  temp.name = submitter.name;\n  temp.value = submitter.value;\n  form.id && temp.setAttribute(\"form\", form.id);\n  submitter.parentNode.insertBefore(temp, submitter);\n  form = new FormData(form);\n  temp.parentNode.removeChild(temp);\n  return form;\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 = submitter\n                  ? createFormDataWithSubmitter(nativeEventTarget, submitter)\n                  : new FormData(nativeEventTarget);\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 = submitter\n                  ? createFormDataWithSubmitter(nativeEventTarget, submitter)\n                  : new FormData(nativeEventTarget)),\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_1577 = 0;\n  i$jscomp$inline_1577 < simpleEventPluginEvents.length;\n  i$jscomp$inline_1577++\n) {\n  var eventName$jscomp$inline_1578 =\n      simpleEventPluginEvents[i$jscomp$inline_1577],\n    domEventName$jscomp$inline_1579 =\n      eventName$jscomp$inline_1578.toLowerCase(),\n    capitalizedEvent$jscomp$inline_1580 =\n      eventName$jscomp$inline_1578[0].toUpperCase() +\n      eventName$jscomp$inline_1578.slice(1);\n  registerSimpleEvent(\n    domEventName$jscomp$inline_1579,\n    \"on\" + capitalizedEvent$jscomp$inline_1580\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 \"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        reactName =\n          \"mouseover\" === domEventName || \"pointerover\" === domEventName;\n        SyntheticEventCtor =\n          \"mouseout\" === domEventName || \"pointerout\" === domEventName;\n        if (\n          reactName &&\n          nativeEvent !== currentReplayingEvent &&\n          (reactEventType =\n            nativeEvent.relatedTarget || nativeEvent.fromElement) &&\n          (getClosestInstanceFromNode(reactEventType) ||\n            reactEventType[internalContainerInstanceKey])\n        )\n          break a;\n        if (SyntheticEventCtor || reactName) {\n          reactName =\n            nativeEventTarget.window === nativeEventTarget\n              ? nativeEventTarget\n              : (reactName = nativeEventTarget.ownerDocument)\n                ? reactName.defaultView || reactName.parentWindow\n                : window;\n          if (SyntheticEventCtor) {\n            if (\n              ((reactEventType =\n                nativeEvent.relatedTarget || nativeEvent.toElement),\n              (SyntheticEventCtor = targetInst),\n              (reactEventType = reactEventType\n                ? getClosestInstanceFromNode(reactEventType)\n                : null),\n              null !== reactEventType &&\n                ((accumulateTargetOnly =\n                  getNearestMountedFiber(reactEventType)),\n                (inCapturePhase = reactEventType.tag),\n                reactEventType !== accumulateTargetOnly ||\n                  (5 !== inCapturePhase &&\n                    27 !== inCapturePhase &&\n                    6 !== inCapturePhase)))\n            )\n              reactEventType = null;\n          } else (SyntheticEventCtor = null), (reactEventType = targetInst);\n          if (SyntheticEventCtor !== reactEventType) {\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 == SyntheticEventCtor\n                ? reactName\n                : getNodeFromInstance(SyntheticEventCtor);\n            lastHostComponent =\n              null == reactEventType\n                ? reactName\n                : getNodeFromInstance(reactEventType);\n            reactName = new inCapturePhase(\n              _instance,\n              instance + \"leave\",\n              SyntheticEventCtor,\n              nativeEvent,\n              nativeEventTarget\n            );\n            reactName.target = accumulateTargetOnly;\n            reactName.relatedTarget = lastHostComponent;\n            _instance = null;\n            getClosestInstanceFromNode(nativeEventTarget) === targetInst &&\n              ((inCapturePhase = new inCapturePhase(\n                reactEventName,\n                instance + \"enter\",\n                reactEventType,\n                nativeEvent,\n                nativeEventTarget\n              )),\n              (inCapturePhase.target = lastHostComponent),\n              (inCapturePhase.relatedTarget = accumulateTargetOnly),\n              (_instance = inCapturePhase));\n            accumulateTargetOnly = _instance;\n            if (SyntheticEventCtor && reactEventType)\n              b: {\n                inCapturePhase = getParent;\n                reactEventName = SyntheticEventCtor;\n                instance = reactEventType;\n                lastHostComponent = 0;\n                for (\n                  _instance = reactEventName;\n                  _instance;\n                  _instance = inCapturePhase(_instance)\n                )\n                  lastHostComponent++;\n                _instance = 0;\n                for (var tempB = instance; tempB; tempB = inCapturePhase(tempB))\n                  _instance++;\n                for (; 0 < lastHostComponent - _instance; )\n                  (reactEventName = inCapturePhase(reactEventName)),\n                    lastHostComponent--;\n                for (; 0 < _instance - lastHostComponent; )\n                  (instance = inCapturePhase(instance)), _instance--;\n                for (; lastHostComponent--; ) {\n                  if (\n                    reactEventName === instance ||\n                    (null !== instance && reactEventName === instance.alternate)\n                  ) {\n                    inCapturePhase = reactEventName;\n                    break b;\n                  }\n                  reactEventName = inCapturePhase(reactEventName);\n                  instance = inCapturePhase(instance);\n                }\n                inCapturePhase = null;\n              }\n            else inCapturePhase = null;\n            null !== SyntheticEventCtor &&\n              accumulateEnterLeaveListenersForEvent(\n                dispatchQueue,\n                reactName,\n                SyntheticEventCtor,\n                inCapturePhase,\n                !1\n              );\n            null !== reactEventType &&\n              null !== accumulateTargetOnly &&\n              accumulateEnterLeaveListenersForEvent(\n                dispatchQueue,\n                accumulateTargetOnly,\n                reactEventType,\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        \"focusout\" === domEventName &&\n          targetInst &&\n          \"number\" === reactName.type &&\n          null != targetInst.memoizedProps.value &&\n          setDefaultValue(reactName, \"number\", reactName.value);\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      \"string\" === typeof value\n        ? \"body\" === tag ||\n          (\"textarea\" === tag && \"\" === value) ||\n          setTextContent(domElement, value)\n        : (\"number\" === typeof value || \"bigint\" === typeof value) &&\n          \"body\" !== tag &&\n          setTextContent(domElement, \"\" + value);\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      break;\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      break;\n    case \"onScroll\":\n      null != value && listenToNonDelegatedEvent(\"scroll\", domElement);\n      break;\n    case \"onScrollEnd\":\n      null != value && listenToNonDelegatedEvent(\"scrollend\", domElement);\n      break;\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          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 \"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      break;\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  }\n}\nfunction setPropOnCustomElement(domElement, tag, key, value, props, prevValue) {\n  switch (key) {\n    case \"style\":\n      setValueForStyles(domElement, value, prevValue);\n      break;\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          domElement.innerHTML = key;\n        }\n      }\n      break;\n    case \"children\":\n      \"string\" === typeof value\n        ? setTextContent(domElement, value)\n        : (\"number\" === typeof value || \"bigint\" === typeof value) &&\n          setTextContent(domElement, \"\" + value);\n      break;\n    case \"onScroll\":\n      null != value && listenToNonDelegatedEvent(\"scroll\", domElement);\n      break;\n    case \"onScrollEnd\":\n      null != value && listenToNonDelegatedEvent(\"scrollend\", domElement);\n      break;\n    case \"onClick\":\n      null != value && (domElement.onclick = noop$1);\n      break;\n    case \"suppressContentEditableWarning\":\n    case \"suppressHydrationWarning\":\n    case \"innerHTML\":\n    case \"ref\":\n      break;\n    case \"innerText\":\n    case \"textContent\":\n      break;\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            (tag = key.slice(2, props ? key.length - 7 : void 0)),\n            (prevValue = domElement[internalPropsKey] || null),\n            (prevValue = null != prevValue ? prevValue[key] : null),\n            \"function\" === typeof prevValue &&\n              domElement.removeEventListener(tag, prevValue, props),\n            \"function\" === typeof value)\n          ) {\n            \"function\" !== typeof prevValue &&\n              null !== prevValue &&\n              (key in domElement\n                ? (domElement[key] = null)\n                : domElement.hasAttribute(key) &&\n                  domElement.removeAttribute(key));\n            domElement.addEventListener(tag, value, props);\n            break a;\n          }\n          key in domElement\n            ? (domElement[key] = value)\n            : !0 === value\n              ? domElement.setAttribute(key, \"\")\n              : setValueForAttribute(domElement, key, value);\n        }\n  }\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$184 = props[hasSrc];\n          if (null != propValue$184)\n            switch (hasSrc) {\n              case \"name\":\n                hasSrcSet = propValue$184;\n                break;\n              case \"type\":\n                propValue = propValue$184;\n                break;\n              case \"checked\":\n                checked = propValue$184;\n                break;\n              case \"defaultChecked\":\n                defaultChecked = propValue$184;\n                break;\n              case \"value\":\n                propKey = propValue$184;\n                break;\n              case \"defaultValue\":\n                defaultValue = propValue$184;\n                break;\n              case \"children\":\n              case \"dangerouslySetInnerHTML\":\n                if (null != propValue$184)\n                  throw Error(formatProdErrorMessage(137, tag));\n                break;\n              default:\n                setProp(domElement, tag, hasSrc, propValue$184, 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$184 in props)\n          props.hasOwnProperty(propValue$184) &&\n            ((hasSrc = props[propValue$184]),\n            void 0 !== hasSrc &&\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                propValue$184,\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}\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$201 in nextProps) {\n        var propKey = nextProps[propKey$201];\n        lastProp = lastProps[propKey$201];\n        if (\n          nextProps.hasOwnProperty(propKey$201) &&\n          (null != propKey || null != lastProp)\n        )\n          switch (propKey$201) {\n            case \"type\":\n              type = propKey;\n              break;\n            case \"name\":\n              name = propKey;\n              break;\n            case \"checked\":\n              checked = propKey;\n              break;\n            case \"defaultChecked\":\n              defaultChecked = propKey;\n              break;\n            case \"value\":\n              value = propKey;\n              break;\n            case \"defaultValue\":\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$201,\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$201 = 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              propKey$201 = type;\n              break;\n            case \"defaultValue\":\n              defaultValue = type;\n              break;\n            case \"multiple\":\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$201\n        ? updateOptions(domElement, !!lastProps, propKey$201, !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$201 = 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              propKey$201 = name;\n              break;\n            case \"defaultValue\":\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$201, propKey);\n      return;\n    case \"option\":\n      for (var propKey$217 in lastProps)\n        if (\n          ((propKey$201 = lastProps[propKey$217]),\n          lastProps.hasOwnProperty(propKey$217) &&\n            null != propKey$201 &&\n            !nextProps.hasOwnProperty(propKey$217))\n        )\n          switch (propKey$217) {\n            case \"selected\":\n              domElement.selected = !1;\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                propKey$217,\n                null,\n                nextProps,\n                propKey$201\n              );\n          }\n      for (lastDefaultValue in nextProps)\n        if (\n          ((propKey$201 = nextProps[lastDefaultValue]),\n          (propKey = lastProps[lastDefaultValue]),\n          nextProps.hasOwnProperty(lastDefaultValue) &&\n            propKey$201 !== propKey &&\n            (null != propKey$201 || null != propKey))\n        )\n          switch (lastDefaultValue) {\n            case \"selected\":\n              domElement.selected =\n                propKey$201 &&\n                \"function\" !== typeof propKey$201 &&\n                \"symbol\" !== typeof propKey$201;\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                lastDefaultValue,\n                propKey$201,\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$222 in lastProps)\n        (propKey$201 = lastProps[propKey$222]),\n          lastProps.hasOwnProperty(propKey$222) &&\n            null != propKey$201 &&\n            !nextProps.hasOwnProperty(propKey$222) &&\n            setProp(domElement, tag, propKey$222, null, nextProps, propKey$201);\n      for (checked in nextProps)\n        if (\n          ((propKey$201 = nextProps[checked]),\n          (propKey = lastProps[checked]),\n          nextProps.hasOwnProperty(checked) &&\n            propKey$201 !== propKey &&\n            (null != propKey$201 || null != propKey))\n        )\n          switch (checked) {\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              if (null != propKey$201)\n                throw Error(formatProdErrorMessage(137, tag));\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                checked,\n                propKey$201,\n                nextProps,\n                propKey\n              );\n          }\n      return;\n    default:\n      if (isCustomElement(tag)) {\n        for (var propKey$227 in lastProps)\n          (propKey$201 = lastProps[propKey$227]),\n            lastProps.hasOwnProperty(propKey$227) &&\n              void 0 !== propKey$201 &&\n              !nextProps.hasOwnProperty(propKey$227) &&\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                propKey$227,\n                void 0,\n                nextProps,\n                propKey$201\n              );\n        for (defaultChecked in nextProps)\n          (propKey$201 = nextProps[defaultChecked]),\n            (propKey = lastProps[defaultChecked]),\n            !nextProps.hasOwnProperty(defaultChecked) ||\n              propKey$201 === propKey ||\n              (void 0 === propKey$201 && void 0 === propKey) ||\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                defaultChecked,\n                propKey$201,\n                nextProps,\n                propKey\n              );\n        return;\n      }\n  }\n  for (var propKey$232 in lastProps)\n    (propKey$201 = lastProps[propKey$232]),\n      lastProps.hasOwnProperty(propKey$232) &&\n        null != propKey$201 &&\n        !nextProps.hasOwnProperty(propKey$232) &&\n        setProp(domElement, tag, propKey$232, null, nextProps, propKey$201);\n  for (lastProp in nextProps)\n    (propKey$201 = nextProps[lastProp]),\n      (propKey = lastProps[lastProp]),\n      !nextProps.hasOwnProperty(lastProp) ||\n        propKey$201 === propKey ||\n        (null == propKey$201 && null == propKey) ||\n        setProp(domElement, tag, lastProp, propKey$201, 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 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  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        releaseSingletonInstance(parentInstance.ownerDocument.documentElement);\n      else if (\"head\" === node) {\n        node = parentInstance.ownerDocument.head;\n        releaseSingletonInstance(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          releaseSingletonInstance(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 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 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) {\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  return \"function\" === typeof container.getRootNode\n    ? container.getRootNode()\n    : 9 === container.nodeType\n      ? container\n      : 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    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        ((as = ownerDocument.createElement(\"link\")),\n        setInitialProperties(as, \"link\", href),\n        markNodeAsHoistable(as),\n        ownerDocument.head.appendChild(as)));\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        ? ((currentProps = getStyleKey(pendingProps.href)),\n          (pendingProps = getResourcesFromRoot(\n            JSCompiler_inline_result\n          ).hoistableStyles),\n          (currentResource = pendingProps.get(currentProps)),\n          currentResource ||\n            ((currentResource = {\n              type: \"style\",\n              instance: null,\n              count: 0,\n              state: null\n            }),\n            pendingProps.set(currentProps, 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$243 = getResourcesFromRoot(\n            JSCompiler_inline_result\n          ).hoistableStyles,\n          resource$244 = styles$243.get(type);\n        resource$244 ||\n          ((JSCompiler_inline_result =\n            JSCompiler_inline_result.ownerDocument || JSCompiler_inline_result),\n          (resource$244 = {\n            type: \"stylesheet\",\n            instance: null,\n            count: 0,\n            state: { loading: 0, preload: null }\n          }),\n          styles$243.set(type, resource$244),\n          (styles$243 = JSCompiler_inline_result.querySelector(\n            getStylesheetSelectorFromKey(type)\n          )) &&\n            !styles$243._p &&\n            ((resource$244.instance = styles$243),\n            (resource$244.state.loading = 5)),\n          preloadPropsMap.has(type) ||\n            ((pendingProps = {\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, pendingProps),\n            styles$243 ||\n              preloadStylesheet(\n                JSCompiler_inline_result,\n                type,\n                pendingProps,\n                resource$244.state\n              )));\n        if (currentProps && null === currentResource)\n          throw Error(formatProdErrorMessage(528, \"\"));\n        return resource$244;\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          ? ((currentProps = getScriptKey(pendingProps)),\n            (pendingProps = getResourcesFromRoot(\n              JSCompiler_inline_result\n            ).hoistableScripts),\n            (currentResource = pendingProps.get(currentProps)),\n            currentResource ||\n              ((currentResource = {\n                type: \"script\",\n                instance: null,\n                count: 0,\n                state: null\n              }),\n              pendingProps.set(currentProps, 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  ownerDocument.querySelector('link[rel=\"preload\"][as=\"style\"][' + key + \"]\")\n    ? (state.loading = 1)\n    : ((key = ownerDocument.createElement(\"link\")),\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      setInitialProperties(key, \"link\", preloadProps),\n      markNodeAsHoistable(key),\n      ownerDocument.head.appendChild(key));\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$249 = hoistableRoot.querySelector(\n          getStylesheetSelectorFromKey(styleProps)\n        );\n        if (instance$249)\n          return (\n            (resource.state.loading |= 4),\n            (resource.instance = instance$249),\n            markNodeAsHoistable(instance$249),\n            instance$249\n          );\n        instance = stylesheetPropsFromRawProps(props);\n        (styleProps = preloadPropsMap.get(styleProps)) &&\n          adoptPreloadPropsForStylesheet(instance, styleProps);\n        instance$249 = (\n          hoistableRoot.ownerDocument || hoistableRoot\n        ).createElement(\"link\");\n        markNodeAsHoistable(instance$249);\n        var linkInstance = instance$249;\n        linkInstance._p = new Promise(function (resolve, reject) {\n          linkInstance.onload = resolve;\n          linkInstance.onerror = reject;\n        });\n        setInitialProperties(instance$249, \"link\", instance);\n        resource.state.loading |= 4;\n        insertStylesheet(instance$249, props.precedence, hoistableRoot);\n        return (resource.instance = instance$249);\n      case \"script\":\n        instance$249 = getScriptKey(props.src);\n        if (\n          (styleProps = hoistableRoot.querySelector(\n            getScriptSelectorFromKey(instance$249)\n          ))\n        )\n          return (\n            (resource.instance = styleProps),\n            markNodeAsHoistable(styleProps),\n            styleProps\n          );\n        instance = props;\n        if ((styleProps = preloadPropsMap.get(instance$249)))\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 preloadResource(resource) {\n  return \"stylesheet\" === resource.type && 0 === (resource.state.loading & 3)\n    ? !1\n    : !0;\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 onUnsuspend() {\n  this.count--;\n  if (0 === this.count && (0 === this.imgCount || !this.waitingForImages))\n    if (this.stylesheets) insertSuspendedStylesheets(this, this.stylesheets);\n    else if (this.unsuspend) {\n      var unsuspend = this.unsuspend;\n      this.unsuspend = null;\n      unsuspend();\n    }\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.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 \"resize\":\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 \"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 \"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_1840 = React.version;\nif (\n  \"19.2.3\" !==\n  isomorphicReactPackageVersion$jscomp$inline_1840\n)\n  throw Error(\n    formatProdErrorMessage(\n      527,\n      isomorphicReactPackageVersion$jscomp$inline_1840,\n      \"19.2.3\"\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_2347 = {\n  bundleType: 0,\n  version: \"19.2.3\",\n  rendererPackageName: \"react-dom\",\n  currentDispatcherRef: ReactSharedInternals,\n  reconcilerVersion: \"19.2.3\"\n};\nif (\"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {\n  var hook$jscomp$inline_2348 = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n  if (\n    !hook$jscomp$inline_2348.isDisabled &&\n    hook$jscomp$inline_2348.supportsFiber\n  )\n    try {\n      (rendererID = hook$jscomp$inline_2348.inject(\n        internals$jscomp$inline_2347\n      )),\n        (injectedHook = hook$jscomp$inline_2348);\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.2.3\";\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\");\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: null == key ? null : \"\" + 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.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        });\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      });\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.2.3\";\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","'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","/**\n * Copyright (c) Nicolas Gallagher.\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\n'use client';\n\nimport canUseDOM from '../../modules/canUseDom';\nfunction getQuery() {\n  return canUseDOM && window.matchMedia != null ? window.matchMedia('(prefers-color-scheme: dark)') : null;\n}\nvar query = getQuery();\nvar listenerMapping = new WeakMap();\nvar Appearance = {\n  getColorScheme() {\n    return query && query.matches ? 'dark' : 'light';\n  },\n  addChangeListener(listener) {\n    var mappedListener = listenerMapping.get(listener);\n    if (!mappedListener) {\n      mappedListener = _ref => {\n        var matches = _ref.matches;\n        listener({\n          colorScheme: matches ? 'dark' : 'light'\n        });\n      };\n      listenerMapping.set(listener, mappedListener);\n    }\n    if (query) {\n      query.addListener(mappedListener);\n    }\n    function remove() {\n      var mappedListener = listenerMapping.get(listener);\n      if (query && mappedListener) {\n        query.removeListener(mappedListener);\n      }\n      listenerMapping.delete(listener);\n    }\n    return {\n      remove\n    };\n  }\n};\nexport default Appearance;","/**\n * Copyright (c) Nicolas Gallagher.\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\nfunction emptyFunction() {}\nvar BackHandler = {\n  exitApp: emptyFunction,\n  addEventListener() {\n    console.error('BackHandler is not supported on web and should not be used.');\n    return {\n      remove: emptyFunction\n    };\n  },\n  removeEventListener: emptyFunction\n};\nexport default BackHandler;","import RCTDeviceEventEmitter from '../../vendor/react-native/EventEmitter/RCTDeviceEventEmitter';\nexport default RCTDeviceEventEmitter;","/**\n * Copyright (c) Nicolas Gallagher.\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\n'use client';\n\nimport invariant from 'fbjs/lib/invariant';\nimport canUseDOM from '../../modules/canUseDom';\nvar dimensions = {\n  window: {\n    fontScale: 1,\n    height: 0,\n    scale: 1,\n    width: 0\n  },\n  screen: {\n    fontScale: 1,\n    height: 0,\n    scale: 1,\n    width: 0\n  }\n};\nvar listeners = {};\nvar shouldInit = canUseDOM;\nfunction update() {\n  if (!canUseDOM) {\n    return;\n  }\n  var win = window;\n  var height;\n  var width;\n\n  /**\n   * iOS does not update viewport dimensions on keyboard open/close.\n   * window.visualViewport(https://developer.mozilla.org/en-US/docs/Web/API/VisualViewport)\n   * is used instead of document.documentElement.clientHeight (which remains as a fallback)\n   */\n  if (win.visualViewport) {\n    var visualViewport = win.visualViewport;\n    /**\n     * We are multiplying by scale because height and width from visual viewport\n     * also react to pinch zoom, and become smaller when zoomed. But it is not desired\n     * behaviour, since originally documentElement client height and width were used,\n     * and they do not react to pinch zoom.\n     */\n    height = Math.round(visualViewport.height * visualViewport.scale);\n    width = Math.round(visualViewport.width * visualViewport.scale);\n  } else {\n    var docEl = win.document.documentElement;\n    height = docEl.clientHeight;\n    width = docEl.clientWidth;\n  }\n  dimensions.window = {\n    fontScale: 1,\n    height,\n    scale: win.devicePixelRatio || 1,\n    width\n  };\n  dimensions.screen = {\n    fontScale: 1,\n    height: win.screen.height,\n    scale: win.devicePixelRatio || 1,\n    width: win.screen.width\n  };\n}\nfunction handleResize() {\n  update();\n  if (Array.isArray(listeners['change'])) {\n    listeners['change'].forEach(handler => handler(dimensions));\n  }\n}\nexport default class Dimensions {\n  static get(dimension) {\n    if (shouldInit) {\n      shouldInit = false;\n      update();\n    }\n    invariant(dimensions[dimension], \"No dimension set for key \" + dimension);\n    return dimensions[dimension];\n  }\n  static set(initialDimensions) {\n    if (initialDimensions) {\n      if (canUseDOM) {\n        invariant(false, 'Dimensions cannot be set in the browser');\n      } else {\n        if (initialDimensions.screen != null) {\n          dimensions.screen = initialDimensions.screen;\n        }\n        if (initialDimensions.window != null) {\n          dimensions.window = initialDimensions.window;\n        }\n      }\n    }\n  }\n  static addEventListener(type, handler) {\n    listeners[type] = listeners[type] || [];\n    listeners[type].push(handler);\n    return {\n      remove: () => {\n        this.removeEventListener(type, handler);\n      }\n    };\n  }\n  static removeEventListener(type, handler) {\n    if (Array.isArray(listeners[type])) {\n      listeners[type] = listeners[type].filter(_handler => _handler !== handler);\n    }\n  }\n}\nif (canUseDOM) {\n  if (window.visualViewport) {\n    window.visualViewport.addEventListener('resize', handleResize, false);\n  } else {\n    window.addEventListener('resize', handleResize, false);\n  }\n}","/**\n * Portions 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 * @format\n */\n\n/**\n * BezierEasing - use bezier curve for transition easing function\n * https://github.com/gre/bezier-easing\n * @copyright 2014-2015 Gaëtan Renaudeau. MIT License.\n */\n\n'use strict';\n\n// These values are established by empiricism with tests (tradeoff: performance VS precision)\nvar NEWTON_ITERATIONS = 4;\nvar NEWTON_MIN_SLOPE = 0.001;\nvar SUBDIVISION_PRECISION = 0.0000001;\nvar SUBDIVISION_MAX_ITERATIONS = 10;\nvar kSplineTableSize = 11;\nvar kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\nvar float32ArraySupported = typeof Float32Array === 'function';\nfunction A(aA1, aA2) {\n  return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n}\nfunction B(aA1, aA2) {\n  return 3.0 * aA2 - 6.0 * aA1;\n}\nfunction C(aA1) {\n  return 3.0 * aA1;\n}\n\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nfunction calcBezier(aT, aA1, aA2) {\n  return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n}\n\n// Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\nfunction getSlope(aT, aA1, aA2) {\n  return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n}\nfunction binarySubdivide(aX, _aA, _aB, mX1, mX2) {\n  var currentX,\n    currentT,\n    i = 0,\n    aA = _aA,\n    aB = _aB;\n  do {\n    currentT = aA + (aB - aA) / 2.0;\n    currentX = calcBezier(currentT, mX1, mX2) - aX;\n    if (currentX > 0.0) {\n      aB = currentT;\n    } else {\n      aA = currentT;\n    }\n  } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n  return currentT;\n}\nfunction newtonRaphsonIterate(aX, _aGuessT, mX1, mX2) {\n  var aGuessT = _aGuessT;\n  for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n    var currentSlope = getSlope(aGuessT, mX1, mX2);\n    if (currentSlope === 0.0) {\n      return aGuessT;\n    }\n    var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n    aGuessT -= currentX / currentSlope;\n  }\n  return aGuessT;\n}\nexport default function bezier(mX1, mY1, mX2, mY2) {\n  if (!(mX1 >= 0 && mX1 <= 1 && mX2 >= 0 && mX2 <= 1)) {\n    throw new Error('bezier x values must be in [0, 1] range');\n  }\n\n  // Precompute samples table\n  var sampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n  if (mX1 !== mY1 || mX2 !== mY2) {\n    for (var i = 0; i < kSplineTableSize; ++i) {\n      sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n    }\n  }\n  function getTForX(aX) {\n    var intervalStart = 0.0;\n    var currentSample = 1;\n    var lastSample = kSplineTableSize - 1;\n    for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) {\n      intervalStart += kSampleStepSize;\n    }\n    --currentSample;\n\n    // Interpolate to provide an initial guess for t\n    var dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]);\n    var guessForT = intervalStart + dist * kSampleStepSize;\n    var initialSlope = getSlope(guessForT, mX1, mX2);\n    if (initialSlope >= NEWTON_MIN_SLOPE) {\n      return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n    } else if (initialSlope === 0.0) {\n      return guessForT;\n    } else {\n      return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n    }\n  }\n  return function BezierEasing(x) {\n    if (mX1 === mY1 && mX2 === mY2) {\n      return x; // linear\n    }\n    // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n    if (x === 0) {\n      return 0;\n    }\n    if (x === 1) {\n      return 1;\n    }\n    return calcBezier(getTForX(x), mY1, mY2);\n  };\n}\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 * @format\n * \n */\n\n'use strict';\n\nimport _bezier from './bezier';\nvar ease;\n\n/**\n * The `Easing` module implements common easing functions. This module is used\n * by [Animate.timing()](docs/animate.html#timing) to convey physically\n * believable motion in animations.\n *\n * You can find a visualization of some common easing functions at\n * http://easings.net/\n *\n * ### Predefined animations\n *\n * The `Easing` module provides several predefined animations through the\n * following methods:\n *\n * - [`back`](docs/easing.html#back) provides a simple animation where the\n *   object goes slightly back before moving forward\n * - [`bounce`](docs/easing.html#bounce) provides a bouncing animation\n * - [`ease`](docs/easing.html#ease) provides a simple inertial animation\n * - [`elastic`](docs/easing.html#elastic) provides a simple spring interaction\n *\n * ### Standard functions\n *\n * Three standard easing functions are provided:\n *\n * - [`linear`](docs/easing.html#linear)\n * - [`quad`](docs/easing.html#quad)\n * - [`cubic`](docs/easing.html#cubic)\n *\n * The [`poly`](docs/easing.html#poly) function can be used to implement\n * quartic, quintic, and other higher power functions.\n *\n * ### Additional functions\n *\n * Additional mathematical functions are provided by the following methods:\n *\n * - [`bezier`](docs/easing.html#bezier) provides a cubic bezier curve\n * - [`circle`](docs/easing.html#circle) provides a circular function\n * - [`sin`](docs/easing.html#sin) provides a sinusoidal function\n * - [`exp`](docs/easing.html#exp) provides an exponential function\n *\n * The following helpers are used to modify other easing functions.\n *\n * - [`in`](docs/easing.html#in) runs an easing function forwards\n * - [`inOut`](docs/easing.html#inout) makes any easing function symmetrical\n * - [`out`](docs/easing.html#out) runs an easing function backwards\n */\nclass Easing {\n  /**\n   * A stepping function, returns 1 for any positive value of `n`.\n   */\n  static step0(n) {\n    return n > 0 ? 1 : 0;\n  }\n\n  /**\n   * A stepping function, returns 1 if `n` is greater than or equal to 1.\n   */\n  static step1(n) {\n    return n >= 1 ? 1 : 0;\n  }\n\n  /**\n   * A linear function, `f(t) = t`. Position correlates to elapsed time one to\n   * one.\n   *\n   * http://cubic-bezier.com/#0,0,1,1\n   */\n  static linear(t) {\n    return t;\n  }\n\n  /**\n   * A simple inertial interaction, similar to an object slowly accelerating to\n   * speed.\n   *\n   * http://cubic-bezier.com/#.42,0,1,1\n   */\n  static ease(t) {\n    if (!ease) {\n      ease = Easing.bezier(0.42, 0, 1, 1);\n    }\n    return ease(t);\n  }\n\n  /**\n   * A quadratic function, `f(t) = t * t`. Position equals the square of elapsed\n   * time.\n   *\n   * http://easings.net/#easeInQuad\n   */\n  static quad(t) {\n    return t * t;\n  }\n\n  /**\n   * A cubic function, `f(t) = t * t * t`. Position equals the cube of elapsed\n   * time.\n   *\n   * http://easings.net/#easeInCubic\n   */\n  static cubic(t) {\n    return t * t * t;\n  }\n\n  /**\n   * A power function. Position is equal to the Nth power of elapsed time.\n   *\n   * n = 4: http://easings.net/#easeInQuart\n   * n = 5: http://easings.net/#easeInQuint\n   */\n  static poly(n) {\n    return t => Math.pow(t, n);\n  }\n\n  /**\n   * A sinusoidal function.\n   *\n   * http://easings.net/#easeInSine\n   */\n  static sin(t) {\n    return 1 - Math.cos(t * Math.PI / 2);\n  }\n\n  /**\n   * A circular function.\n   *\n   * http://easings.net/#easeInCirc\n   */\n  static circle(t) {\n    return 1 - Math.sqrt(1 - t * t);\n  }\n\n  /**\n   * An exponential function.\n   *\n   * http://easings.net/#easeInExpo\n   */\n  static exp(t) {\n    return Math.pow(2, 10 * (t - 1));\n  }\n\n  /**\n   * A simple elastic interaction, similar to a spring oscillating back and\n   * forth.\n   *\n   * Default bounciness is 1, which overshoots a little bit once. 0 bounciness\n   * doesn't overshoot at all, and bounciness of N > 1 will overshoot about N\n   * times.\n   *\n   * http://easings.net/#easeInElastic\n   */\n  static elastic(bounciness) {\n    if (bounciness === void 0) {\n      bounciness = 1;\n    }\n    var p = bounciness * Math.PI;\n    return t => 1 - Math.pow(Math.cos(t * Math.PI / 2), 3) * Math.cos(t * p);\n  }\n\n  /**\n   * Use with `Animated.parallel()` to create a simple effect where the object\n   * animates back slightly as the animation starts.\n   *\n   * Wolfram Plot:\n   *\n   * - http://tiny.cc/back_default (s = 1.70158, default)\n   */\n  static back(s) {\n    if (s === void 0) {\n      s = 1.70158;\n    }\n    return t => t * t * ((s + 1) * t - s);\n  }\n\n  /**\n   * Provides a simple bouncing effect.\n   *\n   * http://easings.net/#easeInBounce\n   */\n  static bounce(t) {\n    if (t < 1 / 2.75) {\n      return 7.5625 * t * t;\n    }\n    if (t < 2 / 2.75) {\n      var _t = t - 1.5 / 2.75;\n      return 7.5625 * _t * _t + 0.75;\n    }\n    if (t < 2.5 / 2.75) {\n      var _t2 = t - 2.25 / 2.75;\n      return 7.5625 * _t2 * _t2 + 0.9375;\n    }\n    var t2 = t - 2.625 / 2.75;\n    return 7.5625 * t2 * t2 + 0.984375;\n  }\n\n  /**\n   * Provides a cubic bezier curve, equivalent to CSS Transitions'\n   * `transition-timing-function`.\n   *\n   * A useful tool to visualize cubic bezier curves can be found at\n   * http://cubic-bezier.com/\n   */\n  static bezier(x1, y1, x2, y2) {\n    return _bezier(x1, y1, x2, y2);\n  }\n\n  /**\n   * Runs an easing function forwards.\n   */\n  static in(easing) {\n    return easing;\n  }\n\n  /**\n   * Runs an easing function backwards.\n   */\n  static out(easing) {\n    return t => 1 - easing(1 - t);\n  }\n\n  /**\n   * Makes any easing function symmetrical. The easing function will run\n   * forwards for half of the duration, then backwards for the rest of the\n   * duration.\n   */\n  static inOut(easing) {\n    return t => {\n      if (t < 0.5) {\n        return easing(t * 2) / 2;\n      }\n      return 1 - easing((1 - t) * 2) / 2;\n    };\n  }\n}\nexport default Easing;","/**\n * Copyright (c) Nicolas Gallagher.\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\nimport Easing from '../../vendor/react-native/Animated/Easing';\nexport default Easing;","/**\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 * @format\n * \n */\n\n'use strict';\n\n/*\n * @returns {bool} true if different, false if equal\n */\nvar deepDiffer = function deepDiffer(one, two, maxDepth) {\n  if (maxDepth === void 0) {\n    maxDepth = -1;\n  }\n  if (maxDepth === 0) {\n    return true;\n  }\n  if (one === two) {\n    // Short circuit on identical object references instead of traversing them.\n    return false;\n  }\n  if (typeof one === 'function' && typeof two === 'function') {\n    // We consider all functions equal\n    return false;\n  }\n  if (typeof one !== 'object' || one === null) {\n    // Primitives can be directly compared\n    return one !== two;\n  }\n  if (typeof two !== 'object' || two === null) {\n    // We know they are different because the previous case would have triggered\n    // otherwise.\n    return true;\n  }\n  if (one.constructor !== two.constructor) {\n    return true;\n  }\n  if (Array.isArray(one)) {\n    // We know two is also an array because the constructors are equal\n    var len = one.length;\n    if (two.length !== len) {\n      return true;\n    }\n    for (var ii = 0; ii < len; ii++) {\n      if (deepDiffer(one[ii], two[ii], maxDepth - 1)) {\n        return true;\n      }\n    }\n  } else {\n    for (var key in one) {\n      if (deepDiffer(one[key], two[key], maxDepth - 1)) {\n        return true;\n      }\n    }\n    for (var twoKey in two) {\n      // The only case we haven't checked yet is keys that are in two but aren't\n      // in one, which means they are different.\n      if (one[twoKey] === undefined && two[twoKey] !== undefined) {\n        return true;\n      }\n    }\n  }\n  return false;\n};\nexport default deepDiffer;","var safeIsNaN = Number.isNaN ||\n    function ponyfill(value) {\n        return typeof value === 'number' && value !== value;\n    };\nfunction isEqual(first, second) {\n    if (first === second) {\n        return true;\n    }\n    if (safeIsNaN(first) && safeIsNaN(second)) {\n        return true;\n    }\n    return false;\n}\nfunction areInputsEqual(newInputs, lastInputs) {\n    if (newInputs.length !== lastInputs.length) {\n        return false;\n    }\n    for (var i = 0; i < newInputs.length; i++) {\n        if (!isEqual(newInputs[i], lastInputs[i])) {\n            return false;\n        }\n    }\n    return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n    if (isEqual === void 0) { isEqual = areInputsEqual; }\n    var cache = null;\n    function memoized() {\n        var newArgs = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            newArgs[_i] = arguments[_i];\n        }\n        if (cache && cache.lastThis === this && isEqual(newArgs, cache.lastArgs)) {\n            return cache.lastResult;\n        }\n        var lastResult = resultFn.apply(this, newArgs);\n        cache = {\n            lastResult: lastResult,\n            lastArgs: newArgs,\n            lastThis: this,\n        };\n        return lastResult;\n    }\n    memoized.clear = function clear() {\n        cache = null;\n    };\n    return memoized;\n}\n\nexport { memoizeOne as default };\n","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nvar _excluded = [\"numColumns\", \"columnWrapperStyle\", \"removeClippedSubviews\", \"strictMode\"];\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 * @format\n */\n\nimport View from '../../../exports/View';\nimport StyleSheet from '../../../exports/StyleSheet';\nimport deepDiffer from '../deepDiffer';\nimport Platform from '../../../exports/Platform';\nimport invariant from 'fbjs/lib/invariant';\nimport * as React from 'react';\nimport VirtualizedList from '../VirtualizedList';\nimport { keyExtractor as defaultKeyExtractor } from '../VirtualizeUtils';\nimport memoizeOne from 'memoize-one';\n/**\n * Default Props Helper Functions\n * Use the following helper functions for default values\n */\n\n// removeClippedSubviewsOrDefault(this.props.removeClippedSubviews)\nfunction removeClippedSubviewsOrDefault(removeClippedSubviews) {\n  return removeClippedSubviews !== null && removeClippedSubviews !== void 0 ? removeClippedSubviews : Platform.OS === 'android';\n}\n\n// numColumnsOrDefault(this.props.numColumns)\nfunction numColumnsOrDefault(numColumns) {\n  return numColumns !== null && numColumns !== void 0 ? numColumns : 1;\n}\nfunction isArrayLike(data) {\n  // $FlowExpectedError[incompatible-use]\n  return typeof Object(data).length === 'number';\n}\n/**\n * A performant interface for rendering simple, flat lists, supporting the most handy features:\n *\n *  - Fully cross-platform.\n *  - Optional horizontal mode.\n *  - Configurable viewability callbacks.\n *  - Header support.\n *  - Footer support.\n *  - Separator support.\n *  - Pull to Refresh.\n *  - Scroll loading.\n *  - ScrollToIndex support.\n *\n * If you need section support, use [`<SectionList>`](docs/sectionlist.html).\n *\n * Minimal Example:\n *\n *     <FlatList\n *       data={[{key: 'a'}, {key: 'b'}]}\n *       renderItem={({item}) => <Text>{item.key}</Text>}\n *     />\n *\n * More complex, multi-select example demonstrating `PureComponent` usage for perf optimization and avoiding bugs.\n *\n * - By binding the `onPressItem` handler, the props will remain `===` and `PureComponent` will\n *   prevent wasteful re-renders unless the actual `id`, `selected`, or `title` props change, even\n *   if the components rendered in `MyListItem` did not have such optimizations.\n * - By passing `extraData={this.state}` to `FlatList` we make sure `FlatList` itself will re-render\n *   when the `state.selected` changes. Without setting this prop, `FlatList` would not know it\n *   needs to re-render any items because it is also a `PureComponent` and the prop comparison will\n *   not show any changes.\n * - `keyExtractor` tells the list to use the `id`s for the react keys instead of the default `key` property.\n *\n *\n *     class MyListItem extends React.PureComponent {\n *       _onPress = () => {\n *         this.props.onPressItem(this.props.id);\n *       };\n *\n *       render() {\n *         const textColor = this.props.selected ? \"red\" : \"black\";\n *         return (\n *           <TouchableOpacity onPress={this._onPress}>\n *             <View>\n *               <Text style={{ color: textColor }}>\n *                 {this.props.title}\n *               </Text>\n *             </View>\n *           </TouchableOpacity>\n *         );\n *       }\n *     }\n *\n *     class MultiSelectList extends React.PureComponent {\n *       state = {selected: (new Map(): Map<string, boolean>)};\n *\n *       _keyExtractor = (item, index) => item.id;\n *\n *       _onPressItem = (id: string) => {\n *         // updater functions are preferred for transactional updates\n *         this.setState((state) => {\n *           // copy the map rather than modifying state.\n *           const selected = new Map(state.selected);\n *           selected.set(id, !selected.get(id)); // toggle\n *           return {selected};\n *         });\n *       };\n *\n *       _renderItem = ({item}) => (\n *         <MyListItem\n *           id={item.id}\n *           onPressItem={this._onPressItem}\n *           selected={!!this.state.selected.get(item.id)}\n *           title={item.title}\n *         />\n *       );\n *\n *       render() {\n *         return (\n *           <FlatList\n *             data={this.props.data}\n *             extraData={this.state}\n *             keyExtractor={this._keyExtractor}\n *             renderItem={this._renderItem}\n *           />\n *         );\n *       }\n *     }\n *\n * This is a convenience wrapper around [`<VirtualizedList>`](docs/virtualizedlist.html),\n * and thus inherits its props (as well as those of `ScrollView`) that aren't explicitly listed\n * here, along with the following caveats:\n *\n * - Internal state is not preserved when content scrolls out of the render window. Make sure all\n *   your data is captured in the item data or external stores like Flux, Redux, or Relay.\n * - This is a `PureComponent` which means that it will not re-render if `props` remain shallow-\n *   equal. Make sure that everything your `renderItem` function depends on is passed as a prop\n *   (e.g. `extraData`) that is not `===` after updates, otherwise your UI may not update on\n *   changes. This includes the `data` prop and parent component state.\n * - In order to constrain memory and enable smooth scrolling, content is rendered asynchronously\n *   offscreen. This means it's possible to scroll faster than the fill rate ands momentarily see\n *   blank content. This is a tradeoff that can be adjusted to suit the needs of each application,\n *   and we are working on improving it behind the scenes.\n * - By default, the list looks for a `key` prop on each item and uses that for the React key.\n *   Alternatively, you can provide a custom `keyExtractor` prop.\n *\n * Also inherits [ScrollView Props](docs/scrollview.html#props), unless it is nested in another FlatList of same orientation.\n */\nclass FlatList extends React.PureComponent {\n  /**\n   * Scrolls to the end of the content. May be janky without `getItemLayout` prop.\n   */\n  scrollToEnd(params) {\n    if (this._listRef) {\n      this._listRef.scrollToEnd(params);\n    }\n  }\n\n  /**\n   * Scrolls to the item at the specified index such that it is positioned in the viewable area\n   * such that `viewPosition` 0 places it at the top, 1 at the bottom, and 0.5 centered in the\n   * middle. `viewOffset` is a fixed number of pixels to offset the final target position.\n   *\n   * Note: cannot scroll to locations outside the render window without specifying the\n   * `getItemLayout` prop.\n   */\n  scrollToIndex(params) {\n    if (this._listRef) {\n      this._listRef.scrollToIndex(params);\n    }\n  }\n\n  /**\n   * Requires linear scan through data - use `scrollToIndex` instead if possible.\n   *\n   * Note: cannot scroll to locations outside the render window without specifying the\n   * `getItemLayout` prop.\n   */\n  scrollToItem(params) {\n    if (this._listRef) {\n      this._listRef.scrollToItem(params);\n    }\n  }\n\n  /**\n   * Scroll to a specific content pixel offset in the list.\n   *\n   * Check out [scrollToOffset](docs/virtualizedlist.html#scrolltooffset) of VirtualizedList\n   */\n  scrollToOffset(params) {\n    if (this._listRef) {\n      this._listRef.scrollToOffset(params);\n    }\n  }\n\n  /**\n   * Tells the list an interaction has occurred, which should trigger viewability calculations, e.g.\n   * if `waitForInteractions` is true and the user has not scrolled. This is typically called by\n   * taps on items or by navigation actions.\n   */\n  recordInteraction() {\n    if (this._listRef) {\n      this._listRef.recordInteraction();\n    }\n  }\n\n  /**\n   * Displays the scroll indicators momentarily.\n   *\n   * @platform ios\n   */\n  flashScrollIndicators() {\n    if (this._listRef) {\n      this._listRef.flashScrollIndicators();\n    }\n  }\n\n  /**\n   * Provides a handle to the underlying scroll responder.\n   */\n  getScrollResponder() {\n    if (this._listRef) {\n      return this._listRef.getScrollResponder();\n    }\n  }\n\n  /**\n   * Provides a reference to the underlying host component\n   */\n  getNativeScrollRef() {\n    if (this._listRef) {\n      /* $FlowFixMe[incompatible-return] Suppresses errors found when fixing\n       * TextInput typing */\n      return this._listRef.getScrollRef();\n    }\n  }\n  getScrollableNode() {\n    if (this._listRef) {\n      return this._listRef.getScrollableNode();\n    }\n  }\n  constructor(_props) {\n    super(_props);\n    this._virtualizedListPairs = [];\n    this._captureRef = ref => {\n      this._listRef = ref;\n    };\n    this._getItem = (data, index) => {\n      var numColumns = numColumnsOrDefault(this.props.numColumns);\n      if (numColumns > 1) {\n        var ret = [];\n        for (var kk = 0; kk < numColumns; kk++) {\n          var itemIndex = index * numColumns + kk;\n          if (itemIndex < data.length) {\n            var _item = data[itemIndex];\n            ret.push(_item);\n          }\n        }\n        return ret;\n      } else {\n        return data[index];\n      }\n    };\n    this._getItemCount = data => {\n      // Legacy behavior of FlatList was to forward \"undefined\" length if invalid\n      // data like a non-arraylike object is passed. VirtualizedList would then\n      // coerce this, and the math would work out to no-op. For compatibility, if\n      // invalid data is passed, we tell VirtualizedList there are zero items\n      // available to prevent it from trying to read from the invalid data\n      // (without propagating invalidly typed data).\n      if (data != null && isArrayLike(data)) {\n        var numColumns = numColumnsOrDefault(this.props.numColumns);\n        return numColumns > 1 ? Math.ceil(data.length / numColumns) : data.length;\n      } else {\n        return 0;\n      }\n    };\n    this._keyExtractor = (items, index) => {\n      var _this$props$keyExtrac;\n      var numColumns = numColumnsOrDefault(this.props.numColumns);\n      var keyExtractor = (_this$props$keyExtrac = this.props.keyExtractor) !== null && _this$props$keyExtrac !== void 0 ? _this$props$keyExtrac : defaultKeyExtractor;\n      if (numColumns > 1) {\n        invariant(Array.isArray(items), 'FlatList: Encountered internal consistency error, expected each item to consist of an ' + 'array with 1-%s columns; instead, received a single item.', numColumns);\n        return items.map((item, kk) => keyExtractor(item, index * numColumns + kk)).join(':');\n      }\n\n      // $FlowFixMe[incompatible-call] Can't call keyExtractor with an array\n      return keyExtractor(items, index);\n    };\n    this._renderer = (ListItemComponent, renderItem, columnWrapperStyle, numColumns, extraData\n    // $FlowFixMe[missing-local-annot]\n    ) => {\n      var cols = numColumnsOrDefault(numColumns);\n      var render = props => {\n        if (ListItemComponent) {\n          // $FlowFixMe[not-a-component] Component isn't valid\n          // $FlowFixMe[incompatible-type-arg] Component isn't valid\n          // $FlowFixMe[incompatible-return] Component isn't valid\n          return /*#__PURE__*/React.createElement(ListItemComponent, props);\n        } else if (renderItem) {\n          // $FlowFixMe[incompatible-call]\n          return renderItem(props);\n        } else {\n          return null;\n        }\n      };\n      var renderProp = info => {\n        if (cols > 1) {\n          var _item2 = info.item,\n            _index = info.index;\n          invariant(Array.isArray(_item2), 'Expected array of items with numColumns > 1');\n          return /*#__PURE__*/React.createElement(View, {\n            style: [styles.row, columnWrapperStyle]\n          }, _item2.map((it, kk) => {\n            var element = render({\n              // $FlowFixMe[incompatible-call]\n              item: it,\n              index: _index * cols + kk,\n              separators: info.separators\n            });\n            return element != null ? /*#__PURE__*/React.createElement(React.Fragment, {\n              key: kk\n            }, element) : null;\n          }));\n        } else {\n          return render(info);\n        }\n      };\n      return ListItemComponent ? {\n        ListItemComponent: renderProp\n      } : {\n        renderItem: renderProp\n      };\n    };\n    this._memoizedRenderer = memoizeOne(this._renderer);\n    this._checkProps(this.props);\n    if (this.props.viewabilityConfigCallbackPairs) {\n      this._virtualizedListPairs = this.props.viewabilityConfigCallbackPairs.map(pair => ({\n        viewabilityConfig: pair.viewabilityConfig,\n        onViewableItemsChanged: this._createOnViewableItemsChanged(pair.onViewableItemsChanged)\n      }));\n    } else if (this.props.onViewableItemsChanged) {\n      this._virtualizedListPairs.push({\n        /* $FlowFixMe[incompatible-call] (>=0.63.0 site=react_native_fb) This\n         * comment suppresses an error found when Flow v0.63 was deployed. To\n         * see the error delete this comment and run Flow. */\n        viewabilityConfig: this.props.viewabilityConfig,\n        onViewableItemsChanged: this._createOnViewableItemsChanged(this.props.onViewableItemsChanged)\n      });\n    }\n  }\n\n  // $FlowFixMe[missing-local-annot]\n  componentDidUpdate(prevProps) {\n    invariant(prevProps.numColumns === this.props.numColumns, 'Changing numColumns on the fly is not supported. Change the key prop on FlatList when ' + 'changing the number of columns to force a fresh render of the component.');\n    invariant(prevProps.onViewableItemsChanged === this.props.onViewableItemsChanged, 'Changing onViewableItemsChanged on the fly is not supported');\n    invariant(!deepDiffer(prevProps.viewabilityConfig, this.props.viewabilityConfig), 'Changing viewabilityConfig on the fly is not supported');\n    invariant(prevProps.viewabilityConfigCallbackPairs === this.props.viewabilityConfigCallbackPairs, 'Changing viewabilityConfigCallbackPairs on the fly is not supported');\n    this._checkProps(this.props);\n  }\n  // $FlowFixMe[missing-local-annot]\n  _checkProps(props) {\n    var getItem = props.getItem,\n      getItemCount = props.getItemCount,\n      horizontal = props.horizontal,\n      columnWrapperStyle = props.columnWrapperStyle,\n      onViewableItemsChanged = props.onViewableItemsChanged,\n      viewabilityConfigCallbackPairs = props.viewabilityConfigCallbackPairs;\n    var numColumns = numColumnsOrDefault(this.props.numColumns);\n    invariant(!getItem && !getItemCount, 'FlatList does not support custom data formats.');\n    if (numColumns > 1) {\n      invariant(!horizontal, 'numColumns does not support horizontal.');\n    } else {\n      invariant(!columnWrapperStyle, 'columnWrapperStyle not supported for single column lists');\n    }\n    invariant(!(onViewableItemsChanged && viewabilityConfigCallbackPairs), 'FlatList does not support setting both onViewableItemsChanged and ' + 'viewabilityConfigCallbackPairs.');\n  }\n  _pushMultiColumnViewable(arr, v) {\n    var _this$props$keyExtrac2;\n    var numColumns = numColumnsOrDefault(this.props.numColumns);\n    var keyExtractor = (_this$props$keyExtrac2 = this.props.keyExtractor) !== null && _this$props$keyExtrac2 !== void 0 ? _this$props$keyExtrac2 : defaultKeyExtractor;\n    v.item.forEach((item, ii) => {\n      invariant(v.index != null, 'Missing index!');\n      var index = v.index * numColumns + ii;\n      arr.push(_objectSpread(_objectSpread({}, v), {}, {\n        item,\n        key: keyExtractor(item, index),\n        index\n      }));\n    });\n  }\n  _createOnViewableItemsChanged(onViewableItemsChanged\n  // $FlowFixMe[missing-local-annot]\n  ) {\n    return info => {\n      var numColumns = numColumnsOrDefault(this.props.numColumns);\n      if (onViewableItemsChanged) {\n        if (numColumns > 1) {\n          var changed = [];\n          var viewableItems = [];\n          info.viewableItems.forEach(v => this._pushMultiColumnViewable(viewableItems, v));\n          info.changed.forEach(v => this._pushMultiColumnViewable(changed, v));\n          onViewableItemsChanged({\n            viewableItems,\n            changed\n          });\n        } else {\n          onViewableItemsChanged(info);\n        }\n      }\n    };\n  }\n\n  // $FlowFixMe[missing-local-annot]\n\n  render() {\n    var _this$props = this.props,\n      numColumns = _this$props.numColumns,\n      columnWrapperStyle = _this$props.columnWrapperStyle,\n      _removeClippedSubviews = _this$props.removeClippedSubviews,\n      _this$props$strictMod = _this$props.strictMode,\n      strictMode = _this$props$strictMod === void 0 ? false : _this$props$strictMod,\n      restProps = _objectWithoutPropertiesLoose(_this$props, _excluded);\n    var renderer = strictMode ? this._memoizedRenderer : this._renderer;\n    return (\n      /*#__PURE__*/\n      // $FlowFixMe[incompatible-exact] - `restProps` (`Props`) is inexact.\n      React.createElement(VirtualizedList, _extends({}, restProps, {\n        getItem: this._getItem,\n        getItemCount: this._getItemCount,\n        keyExtractor: this._keyExtractor,\n        ref: this._captureRef,\n        viewabilityConfigCallbackPairs: this._virtualizedListPairs,\n        removeClippedSubviews: removeClippedSubviewsOrDefault(_removeClippedSubviews)\n      }, renderer(this.props.ListItemComponent, this.props.renderItem, columnWrapperStyle, numColumns, this.props.extraData)))\n    );\n  }\n}\nvar styles = StyleSheet.create({\n  row: {\n    flexDirection: 'row'\n  }\n});\nexport default FlatList;","/**\n * Copyright (c) Nicolas Gallagher.\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\n'use client';\n\nimport FlatList from '../../vendor/react-native/FlatList';\nexport default FlatList;","/**\n * Copyright (c) Nicolas Gallagher.\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\nvar I18nManager = {\n  allowRTL() {\n    return;\n  },\n  forceRTL() {\n    return;\n  },\n  getConstants() {\n    return {\n      isRTL: false\n    };\n  }\n};\nexport default I18nManager;","/**\n * Copyright (c) Nicolas Gallagher.\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\nvar assets = [];\nexport function registerAsset(asset) {\n  // `push` returns new array length, so the first asset will\n  // get id 1 (not 0) to make the value truthy\n  return assets.push(asset);\n}\nexport function getAssetByID(assetId) {\n  return assets[assetId - 1];\n}","/**\n * Copyright (c) Nicolas Gallagher.\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\nvar dataUriPattern = /^data:/;\nexport class ImageUriCache {\n  static has(uri) {\n    var entries = ImageUriCache._entries;\n    var isDataUri = dataUriPattern.test(uri);\n    return isDataUri || Boolean(entries[uri]);\n  }\n  static add(uri) {\n    var entries = ImageUriCache._entries;\n    var lastUsedTimestamp = Date.now();\n    if (entries[uri]) {\n      entries[uri].lastUsedTimestamp = lastUsedTimestamp;\n      entries[uri].refCount += 1;\n    } else {\n      entries[uri] = {\n        lastUsedTimestamp,\n        refCount: 1\n      };\n    }\n  }\n  static remove(uri) {\n    var entries = ImageUriCache._entries;\n    if (entries[uri]) {\n      entries[uri].refCount -= 1;\n    }\n    // Free up entries when the cache is \"full\"\n    ImageUriCache._cleanUpIfNeeded();\n  }\n  static _cleanUpIfNeeded() {\n    var entries = ImageUriCache._entries;\n    var imageUris = Object.keys(entries);\n    if (imageUris.length + 1 > ImageUriCache._maximumEntries) {\n      var leastRecentlyUsedKey;\n      var leastRecentlyUsedEntry;\n      imageUris.forEach(uri => {\n        var entry = entries[uri];\n        if ((!leastRecentlyUsedEntry || entry.lastUsedTimestamp < leastRecentlyUsedEntry.lastUsedTimestamp) && entry.refCount === 0) {\n          leastRecentlyUsedKey = uri;\n          leastRecentlyUsedEntry = entry;\n        }\n      });\n      if (leastRecentlyUsedKey) {\n        delete entries[leastRecentlyUsedKey];\n      }\n    }\n  }\n}\nImageUriCache._maximumEntries = 256;\nImageUriCache._entries = {};\nvar id = 0;\nvar requests = {};\nvar ImageLoader = {\n  abort(requestId) {\n    var image = requests[\"\" + requestId];\n    if (image) {\n      image.onerror = null;\n      image.onload = null;\n      image = null;\n      delete requests[\"\" + requestId];\n    }\n  },\n  getSize(uri, success, failure) {\n    var complete = false;\n    var interval = setInterval(callback, 16);\n    var requestId = ImageLoader.load(uri, callback, errorCallback);\n    function callback() {\n      var image = requests[\"\" + requestId];\n      if (image) {\n        var naturalHeight = image.naturalHeight,\n          naturalWidth = image.naturalWidth;\n        if (naturalHeight && naturalWidth) {\n          success(naturalWidth, naturalHeight);\n          complete = true;\n        }\n      }\n      if (complete) {\n        ImageLoader.abort(requestId);\n        clearInterval(interval);\n      }\n    }\n    function errorCallback() {\n      if (typeof failure === 'function') {\n        failure();\n      }\n      ImageLoader.abort(requestId);\n      clearInterval(interval);\n    }\n  },\n  has(uri) {\n    return ImageUriCache.has(uri);\n  },\n  load(uri, onLoad, onError) {\n    id += 1;\n    var image = new window.Image();\n    image.onerror = onError;\n    image.onload = e => {\n      // avoid blocking the main thread\n      var onDecode = () => onLoad({\n        nativeEvent: e\n      });\n      if (typeof image.decode === 'function') {\n        // Safari currently throws exceptions when decoding svgs.\n        // We want to catch that error and allow the load handler\n        // to be forwarded to the onLoad handler in this case\n        image.decode().then(onDecode, onDecode);\n      } else {\n        setTimeout(onDecode, 0);\n      }\n    };\n    image.src = uri;\n    requests[\"\" + id] = image;\n    return id;\n  },\n  prefetch(uri) {\n    return new Promise((resolve, reject) => {\n      ImageLoader.load(uri, () => {\n        // Add the uri to the cache so it can be immediately displayed when used\n        // but also immediately remove it to correctly reflect that it has no active references\n        ImageUriCache.add(uri);\n        ImageUriCache.remove(uri);\n        resolve();\n      }, reject);\n    });\n  },\n  queryCache(uris) {\n    var result = {};\n    uris.forEach(u => {\n      if (ImageUriCache.has(u)) {\n        result[u] = 'disk/memory';\n      }\n    });\n    return Promise.resolve(result);\n  }\n};\nexport default ImageLoader;","/**\n * Copyright (c) Nicolas Gallagher.\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\n'use client';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"aria-label\", \"accessibilityLabel\", \"blurRadius\", \"defaultSource\", \"draggable\", \"onError\", \"onLayout\", \"onLoad\", \"onLoadEnd\", \"onLoadStart\", \"pointerEvents\", \"source\", \"style\"];\nimport * as React from 'react';\nimport createElement from '../createElement';\nimport { getAssetByID } from '../../modules/AssetRegistry';\nimport { createBoxShadowValue } from '../StyleSheet/preprocess';\nimport ImageLoader from '../../modules/ImageLoader';\nimport PixelRatio from '../PixelRatio';\nimport StyleSheet from '../StyleSheet';\nimport TextAncestorContext from '../Text/TextAncestorContext';\nimport View from '../View';\nimport { warnOnce } from '../../modules/warnOnce';\nvar ERRORED = 'ERRORED';\nvar LOADED = 'LOADED';\nvar LOADING = 'LOADING';\nvar IDLE = 'IDLE';\nvar _filterId = 0;\nvar svgDataUriPattern = /^(data:image\\/svg\\+xml;utf8,)(.*)/;\nfunction createTintColorSVG(tintColor, id) {\n  return tintColor && id != null ? /*#__PURE__*/React.createElement(\"svg\", {\n    style: {\n      position: 'absolute',\n      height: 0,\n      visibility: 'hidden',\n      width: 0\n    }\n  }, /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"filter\", {\n    id: \"tint-\" + id,\n    suppressHydrationWarning: true\n  }, /*#__PURE__*/React.createElement(\"feFlood\", {\n    floodColor: \"\" + tintColor,\n    key: tintColor\n  }), /*#__PURE__*/React.createElement(\"feComposite\", {\n    in2: \"SourceAlpha\",\n    operator: \"in\"\n  })))) : null;\n}\nfunction extractNonStandardStyleProps(style, blurRadius, filterId, tintColorProp) {\n  var flatStyle = StyleSheet.flatten(style);\n  var filter = flatStyle.filter,\n    resizeMode = flatStyle.resizeMode,\n    shadowOffset = flatStyle.shadowOffset,\n    tintColor = flatStyle.tintColor;\n  if (flatStyle.resizeMode) {\n    warnOnce('Image.style.resizeMode', 'Image: style.resizeMode is deprecated. Please use props.resizeMode.');\n  }\n  if (flatStyle.tintColor) {\n    warnOnce('Image.style.tintColor', 'Image: style.tintColor is deprecated. Please use props.tintColor.');\n  }\n\n  // Add CSS filters\n  // React Native exposes these features as props and proprietary styles\n  var filters = [];\n  var _filter = null;\n  if (filter) {\n    filters.push(filter);\n  }\n  if (blurRadius) {\n    filters.push(\"blur(\" + blurRadius + \"px)\");\n  }\n  if (shadowOffset) {\n    var shadowString = createBoxShadowValue(flatStyle);\n    if (shadowString) {\n      filters.push(\"drop-shadow(\" + shadowString + \")\");\n    }\n  }\n  if ((tintColorProp || tintColor) && filterId != null) {\n    filters.push(\"url(#tint-\" + filterId + \")\");\n  }\n  if (filters.length > 0) {\n    _filter = filters.join(' ');\n  }\n  return [resizeMode, _filter, tintColor];\n}\nfunction resolveAssetDimensions(source) {\n  if (typeof source === 'number') {\n    var _getAssetByID = getAssetByID(source),\n      _height = _getAssetByID.height,\n      _width = _getAssetByID.width;\n    return {\n      height: _height,\n      width: _width\n    };\n  } else if (source != null && !Array.isArray(source) && typeof source === 'object') {\n    var _height2 = source.height,\n      _width2 = source.width;\n    return {\n      height: _height2,\n      width: _width2\n    };\n  }\n}\nfunction resolveAssetUri(source) {\n  var uri = null;\n  if (typeof source === 'number') {\n    // get the URI from the packager\n    var asset = getAssetByID(source);\n    if (asset == null) {\n      throw new Error(\"Image: asset with ID \\\"\" + source + \"\\\" could not be found. Please check the image source or packager.\");\n    }\n    var scale = asset.scales[0];\n    if (asset.scales.length > 1) {\n      var preferredScale = PixelRatio.get();\n      // Get the scale which is closest to the preferred scale\n      scale = asset.scales.reduce((prev, curr) => Math.abs(curr - preferredScale) < Math.abs(prev - preferredScale) ? curr : prev);\n    }\n    var scaleSuffix = scale !== 1 ? \"@\" + scale + \"x\" : '';\n    uri = asset ? asset.httpServerLocation + \"/\" + asset.name + scaleSuffix + \".\" + asset.type : '';\n  } else if (typeof source === 'string') {\n    uri = source;\n  } else if (source && typeof source.uri === 'string') {\n    uri = source.uri;\n  }\n  if (uri) {\n    var match = uri.match(svgDataUriPattern);\n    // inline SVG markup may contain characters (e.g., #, \") that need to be escaped\n    if (match) {\n      var prefix = match[1],\n        svg = match[2];\n      var encodedSvg = encodeURIComponent(svg);\n      return \"\" + prefix + encodedSvg;\n    }\n  }\n  return uri;\n}\nvar Image = /*#__PURE__*/React.forwardRef((props, ref) => {\n  var _ariaLabel = props['aria-label'],\n    accessibilityLabel = props.accessibilityLabel,\n    blurRadius = props.blurRadius,\n    defaultSource = props.defaultSource,\n    draggable = props.draggable,\n    onError = props.onError,\n    onLayout = props.onLayout,\n    onLoad = props.onLoad,\n    onLoadEnd = props.onLoadEnd,\n    onLoadStart = props.onLoadStart,\n    pointerEvents = props.pointerEvents,\n    source = props.source,\n    style = props.style,\n    rest = _objectWithoutPropertiesLoose(props, _excluded);\n  var ariaLabel = _ariaLabel || accessibilityLabel;\n  if (process.env.NODE_ENV !== 'production') {\n    if (props.children) {\n      throw new Error('The <Image> component cannot contain children. If you want to render content on top of the image, consider using the <ImageBackground> component or absolute positioning.');\n    }\n  }\n  var _React$useState = React.useState(() => {\n      var uri = resolveAssetUri(source);\n      if (uri != null) {\n        var isLoaded = ImageLoader.has(uri);\n        if (isLoaded) {\n          return LOADED;\n        }\n      }\n      return IDLE;\n    }),\n    state = _React$useState[0],\n    updateState = _React$useState[1];\n  var _React$useState2 = React.useState({}),\n    layout = _React$useState2[0],\n    updateLayout = _React$useState2[1];\n  var hasTextAncestor = React.useContext(TextAncestorContext);\n  var hiddenImageRef = React.useRef(null);\n  var filterRef = React.useRef(_filterId++);\n  var requestRef = React.useRef(null);\n  var shouldDisplaySource = state === LOADED || state === LOADING && defaultSource == null;\n  var _extractNonStandardSt = extractNonStandardStyleProps(style, blurRadius, filterRef.current, props.tintColor),\n    _resizeMode = _extractNonStandardSt[0],\n    filter = _extractNonStandardSt[1],\n    _tintColor = _extractNonStandardSt[2];\n  var resizeMode = props.resizeMode || _resizeMode || 'cover';\n  var tintColor = props.tintColor || _tintColor;\n  var selectedSource = shouldDisplaySource ? source : defaultSource;\n  var displayImageUri = resolveAssetUri(selectedSource);\n  var imageSizeStyle = resolveAssetDimensions(selectedSource);\n  var backgroundImage = displayImageUri ? \"url(\\\"\" + displayImageUri + \"\\\")\" : null;\n  var backgroundSize = getBackgroundSize();\n\n  // Accessibility image allows users to trigger the browser's image context menu\n  var hiddenImage = displayImageUri ? createElement('img', {\n    alt: ariaLabel || '',\n    style: styles.accessibilityImage$raw,\n    draggable: draggable || false,\n    ref: hiddenImageRef,\n    src: displayImageUri\n  }) : null;\n  function getBackgroundSize() {\n    if (hiddenImageRef.current != null && (resizeMode === 'center' || resizeMode === 'repeat')) {\n      var _hiddenImageRef$curre = hiddenImageRef.current,\n        naturalHeight = _hiddenImageRef$curre.naturalHeight,\n        naturalWidth = _hiddenImageRef$curre.naturalWidth;\n      var _height3 = layout.height,\n        _width3 = layout.width;\n      if (naturalHeight && naturalWidth && _height3 && _width3) {\n        var scaleFactor = Math.min(1, _width3 / naturalWidth, _height3 / naturalHeight);\n        var x = Math.ceil(scaleFactor * naturalWidth);\n        var y = Math.ceil(scaleFactor * naturalHeight);\n        return x + \"px \" + y + \"px\";\n      }\n    }\n  }\n  function handleLayout(e) {\n    if (resizeMode === 'center' || resizeMode === 'repeat' || onLayout) {\n      var _layout = e.nativeEvent.layout;\n      onLayout && onLayout(e);\n      updateLayout(_layout);\n    }\n  }\n\n  // Image loading\n  var uri = resolveAssetUri(source);\n  React.useEffect(() => {\n    abortPendingRequest();\n    if (uri != null) {\n      updateState(LOADING);\n      if (onLoadStart) {\n        onLoadStart();\n      }\n      requestRef.current = ImageLoader.load(uri, function load(e) {\n        updateState(LOADED);\n        if (onLoad) {\n          onLoad(e);\n        }\n        if (onLoadEnd) {\n          onLoadEnd();\n        }\n      }, function error() {\n        updateState(ERRORED);\n        if (onError) {\n          onError({\n            nativeEvent: {\n              error: \"Failed to load resource \" + uri\n            }\n          });\n        }\n        if (onLoadEnd) {\n          onLoadEnd();\n        }\n      });\n    }\n    function abortPendingRequest() {\n      if (requestRef.current != null) {\n        ImageLoader.abort(requestRef.current);\n        requestRef.current = null;\n      }\n    }\n    return abortPendingRequest;\n  }, [uri, requestRef, updateState, onError, onLoad, onLoadEnd, onLoadStart]);\n  return /*#__PURE__*/React.createElement(View, _extends({}, rest, {\n    \"aria-label\": ariaLabel,\n    onLayout: handleLayout,\n    pointerEvents: pointerEvents,\n    ref: ref,\n    style: [styles.root, hasTextAncestor && styles.inline, imageSizeStyle, style, styles.undo,\n    // TEMP: avoid deprecated shadow props regression\n    // until Image refactored to use createElement.\n    {\n      boxShadow: null\n    }]\n  }), /*#__PURE__*/React.createElement(View, {\n    style: [styles.image, resizeModeStyles[resizeMode], {\n      backgroundImage,\n      filter\n    }, backgroundSize != null && {\n      backgroundSize\n    }],\n    suppressHydrationWarning: true\n  }), hiddenImage, createTintColorSVG(tintColor, filterRef.current));\n});\nImage.displayName = 'Image';\n\n// $FlowIgnore: This is the correct type, but casting makes it unhappy since the variables aren't defined yet\nvar ImageWithStatics = Image;\nImageWithStatics.getSize = function (uri, success, failure) {\n  ImageLoader.getSize(uri, success, failure);\n};\nImageWithStatics.prefetch = function (uri) {\n  return ImageLoader.prefetch(uri);\n};\nImageWithStatics.queryCache = function (uris) {\n  return ImageLoader.queryCache(uris);\n};\nvar styles = StyleSheet.create({\n  root: {\n    flexBasis: 'auto',\n    overflow: 'hidden',\n    zIndex: 0\n  },\n  inline: {\n    display: 'inline-flex'\n  },\n  undo: {\n    // These styles are converted to CSS filters applied to the\n    // element displaying the background image.\n    blurRadius: null,\n    shadowColor: null,\n    shadowOpacity: null,\n    shadowOffset: null,\n    shadowRadius: null,\n    tintColor: null,\n    // These styles are not supported\n    overlayColor: null,\n    resizeMode: null\n  },\n  image: _objectSpread(_objectSpread({}, StyleSheet.absoluteFillObject), {}, {\n    backgroundColor: 'transparent',\n    backgroundPosition: 'center',\n    backgroundRepeat: 'no-repeat',\n    backgroundSize: 'cover',\n    height: '100%',\n    width: '100%',\n    zIndex: -1\n  }),\n  accessibilityImage$raw: _objectSpread(_objectSpread({}, StyleSheet.absoluteFillObject), {}, {\n    height: '100%',\n    opacity: 0,\n    width: '100%',\n    zIndex: -1\n  })\n});\nvar resizeModeStyles = StyleSheet.create({\n  center: {\n    backgroundSize: 'auto'\n  },\n  contain: {\n    backgroundSize: 'contain'\n  },\n  cover: {\n    backgroundSize: 'cover'\n  },\n  none: {\n    backgroundPosition: '0',\n    backgroundSize: 'auto'\n  },\n  repeat: {\n    backgroundPosition: '0',\n    backgroundRepeat: 'repeat',\n    backgroundSize: 'auto'\n  },\n  stretch: {\n    backgroundSize: '100% 100%'\n  }\n});\nexport default ImageWithStatics;","/**\n * Copyright (c) Nicolas Gallagher.\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 */\nimport canUseDOM from '../canUseDom';\nvar _requestIdleCallback = function _requestIdleCallback(cb, options) {\n  return setTimeout(() => {\n    var start = Date.now();\n    cb({\n      didTimeout: false,\n      timeRemaining() {\n        return Math.max(0, 50 - (Date.now() - start));\n      }\n    });\n  }, 1);\n};\nvar _cancelIdleCallback = function _cancelIdleCallback(id) {\n  clearTimeout(id);\n};\nvar isSupported = canUseDOM && typeof window.requestIdleCallback !== 'undefined';\nvar requestIdleCallback = isSupported ? window.requestIdleCallback : _requestIdleCallback;\nvar cancelIdleCallback = isSupported ? window.cancelIdleCallback : _cancelIdleCallback;\nexport default requestIdleCallback;\nexport { cancelIdleCallback };","/**\n * Copyright (c) Nicolas Gallagher.\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\nimport invariant from 'fbjs/lib/invariant';\nimport TaskQueue from './TaskQueue';\nimport EventEmitter from '../../vendor/react-native/vendor/emitter/EventEmitter';\nimport requestIdleCallback from '../../modules/requestIdleCallback';\nvar _emitter = new EventEmitter();\nvar InteractionManager = {\n  Events: {\n    interactionStart: 'interactionStart',\n    interactionComplete: 'interactionComplete'\n  },\n  /**\n   * Schedule a function to run after all interactions have completed.\n   */\n  runAfterInteractions(task) {\n    var tasks = [];\n    var promise = new Promise(resolve => {\n      _scheduleUpdate();\n      if (task) {\n        tasks.push(task);\n      }\n      tasks.push({\n        run: resolve,\n        name: 'resolve ' + (task && task.name || '?')\n      });\n      _taskQueue.enqueueTasks(tasks);\n    });\n    return {\n      then: promise.then.bind(promise),\n      done: promise.then.bind(promise),\n      cancel: () => {\n        _taskQueue.cancelTasks(tasks);\n      }\n    };\n  },\n  /**\n   * Notify manager that an interaction has started.\n   */\n  createInteractionHandle() {\n    _scheduleUpdate();\n    var handle = ++_inc;\n    _addInteractionSet.add(handle);\n    return handle;\n  },\n  /**\n   * Notify manager that an interaction has completed.\n   */\n  clearInteractionHandle(handle) {\n    invariant(!!handle, 'Must provide a handle to clear.');\n    _scheduleUpdate();\n    _addInteractionSet.delete(handle);\n    _deleteInteractionSet.add(handle);\n  },\n  addListener: _emitter.addListener.bind(_emitter),\n  /**\n   *\n   * @param deadline\n   */\n  setDeadline(deadline) {\n    _deadline = deadline;\n  }\n};\nvar _interactionSet = new Set();\nvar _addInteractionSet = new Set();\nvar _deleteInteractionSet = new Set();\nvar _taskQueue = new TaskQueue({\n  onMoreTasks: _scheduleUpdate\n});\nvar _nextUpdateHandle = 0;\nvar _inc = 0;\nvar _deadline = -1;\n\n/**\n * Schedule an asynchronous update to the interaction state.\n */\nfunction _scheduleUpdate() {\n  if (!_nextUpdateHandle) {\n    if (_deadline > 0) {\n      _nextUpdateHandle = setTimeout(_processUpdate);\n    } else {\n      _nextUpdateHandle = requestIdleCallback(_processUpdate);\n    }\n  }\n}\n\n/**\n * Notify listeners, process queue, etc\n */\nfunction _processUpdate() {\n  _nextUpdateHandle = 0;\n  var interactionCount = _interactionSet.size;\n  _addInteractionSet.forEach(handle => _interactionSet.add(handle));\n  _deleteInteractionSet.forEach(handle => _interactionSet.delete(handle));\n  var nextInteractionCount = _interactionSet.size;\n  if (interactionCount !== 0 && nextInteractionCount === 0) {\n    _emitter.emit(InteractionManager.Events.interactionComplete);\n  } else if (interactionCount === 0 && nextInteractionCount !== 0) {\n    _emitter.emit(InteractionManager.Events.interactionStart);\n  }\n  if (nextInteractionCount === 0) {\n    // It seems that we can't know the running time of the current event loop,\n    // we can only calculate the running time of the current task queue.\n    var begin = Date.now();\n    while (_taskQueue.hasTasksToProcess()) {\n      _taskQueue.processNext();\n      if (_deadline > 0 && Date.now() - begin >= _deadline) {\n        _scheduleUpdate();\n        break;\n      }\n    }\n  }\n  _addInteractionSet.clear();\n  _deleteInteractionSet.clear();\n}\nexport default InteractionManager;","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\n/**\n * Copyright (c) Nicolas Gallagher.\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\nimport invariant from 'fbjs/lib/invariant';\nclass TaskQueue {\n  constructor(_ref) {\n    var onMoreTasks = _ref.onMoreTasks;\n    this._onMoreTasks = onMoreTasks;\n    this._queueStack = [{\n      tasks: [],\n      popable: true\n    }];\n  }\n  enqueue(task) {\n    this._getCurrentQueue().push(task);\n  }\n  enqueueTasks(tasks) {\n    tasks.forEach(task => this.enqueue(task));\n  }\n  cancelTasks(tasksToCancel) {\n    this._queueStack = this._queueStack.map(queue => _objectSpread(_objectSpread({}, queue), {}, {\n      tasks: queue.tasks.filter(task => tasksToCancel.indexOf(task) === -1)\n    })).filter((queue, idx) => queue.tasks.length > 0 || idx === 0);\n  }\n  hasTasksToProcess() {\n    return this._getCurrentQueue().length > 0;\n  }\n\n  /**\n   * Executes the next task in the queue.\n   */\n  processNext() {\n    var queue = this._getCurrentQueue();\n    if (queue.length) {\n      var task = queue.shift();\n      try {\n        if (typeof task === 'object' && task.gen) {\n          this._genPromise(task);\n        } else if (typeof task === 'object' && task.run) {\n          task.run();\n        } else {\n          invariant(typeof task === 'function', 'Expected Function, SimpleTask, or PromiseTask, but got:\\n' + JSON.stringify(task, null, 2));\n          task();\n        }\n      } catch (e) {\n        e.message = 'TaskQueue: Error with task ' + (task.name || '') + ': ' + e.message;\n        throw e;\n      }\n    }\n  }\n  _getCurrentQueue() {\n    var stackIdx = this._queueStack.length - 1;\n    var queue = this._queueStack[stackIdx];\n    if (queue.popable && queue.tasks.length === 0 && stackIdx > 0) {\n      this._queueStack.pop();\n      return this._getCurrentQueue();\n    } else {\n      return queue.tasks;\n    }\n  }\n  _genPromise(task) {\n    var length = this._queueStack.push({\n      tasks: [],\n      popable: false\n    });\n    var stackIdx = length - 1;\n    var stackItem = this._queueStack[stackIdx];\n    task.gen().then(() => {\n      stackItem.popable = true;\n      this.hasTasksToProcess() && this._onMoreTasks();\n    }).catch(ex => {\n      setTimeout(() => {\n        ex.message = \"TaskQueue: Error resolving Promise in task \" + task.name + \": \" + ex.message;\n        throw ex;\n      }, 0);\n    });\n  }\n}\nexport default TaskQueue;","/**\n * Copyright (c) Nicolas Gallagher.\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\nimport dismissKeyboard from '../../modules/dismissKeyboard';\n\n// in the future we can use https://github.com/w3c/virtual-keyboard\nvar Keyboard = {\n  isVisible() {\n    return false;\n  },\n  addListener() {\n    return {\n      remove: () => {}\n    };\n  },\n  dismiss() {\n    dismissKeyboard();\n  },\n  removeAllListeners() {},\n  removeListener() {}\n};\nexport default Keyboard;","/**\n * Copyright (c) Nicolas Gallagher.\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\nimport Dimensions from '../Dimensions';\n\n/**\n * PixelRatio gives access to the device pixel density.\n */\nexport default class PixelRatio {\n  /**\n   * Returns the device pixel density.\n   */\n  static get() {\n    return Dimensions.get('window').scale;\n  }\n\n  /**\n   * No equivalent for Web\n   */\n  static getFontScale() {\n    return Dimensions.get('window').fontScale || PixelRatio.get();\n  }\n\n  /**\n   * Converts a layout size (dp) to pixel size (px).\n   * Guaranteed to return an integer number.\n   */\n  static getPixelSizeForLayoutSize(layoutSize) {\n    return Math.round(layoutSize * PixelRatio.get());\n  }\n\n  /**\n   * Rounds a layout size (dp) to the nearest layout size that corresponds to\n   * an integer number of pixels. For example, on a device with a PixelRatio\n   * of 3, `PixelRatio.roundToNearestPixel(8.4) = 8.33`, which corresponds to\n   * exactly (8.33 * 3) = 25 pixels.\n   */\n  static roundToNearestPixel(layoutSize) {\n    var ratio = PixelRatio.get();\n    return Math.round(layoutSize * ratio) / ratio;\n  }\n}","/**\n * Copyright (c) Nicolas Gallagher.\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\nvar Platform = {\n  OS: 'web',\n  select: obj => 'web' in obj ? obj.web : obj.default,\n  get isTesting() {\n    if (process.env.NODE_ENV === 'test') {\n      return true;\n    }\n    return false;\n  },\n  get Version() {\n    return '0.0.0';\n  }\n};\nexport default Platform;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"colors\", \"enabled\", \"onRefresh\", \"progressBackgroundColor\", \"progressViewOffset\", \"refreshing\", \"size\", \"tintColor\", \"title\", \"titleColor\"];\n/**\n * Copyright (c) Nicolas Gallagher.\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\nimport View from '../View';\nimport React from 'react';\nfunction RefreshControl(props) {\n  var colors = props.colors,\n    enabled = props.enabled,\n    onRefresh = props.onRefresh,\n    progressBackgroundColor = props.progressBackgroundColor,\n    progressViewOffset = props.progressViewOffset,\n    refreshing = props.refreshing,\n    size = props.size,\n    tintColor = props.tintColor,\n    title = props.title,\n    titleColor = props.titleColor,\n    rest = _objectWithoutPropertiesLoose(props, _excluded);\n  return /*#__PURE__*/React.createElement(View, rest);\n}\nexport default RefreshControl;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"onScroll\", \"onTouchMove\", \"onWheel\", \"scrollEnabled\", \"scrollEventThrottle\", \"showsHorizontalScrollIndicator\", \"showsVerticalScrollIndicator\", \"style\"];\n/**\n * Copyright (c) Nicolas Gallagher.\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\nimport * as React from 'react';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\nimport useMergeRefs from '../../modules/useMergeRefs';\nfunction normalizeScrollEvent(e) {\n  return {\n    nativeEvent: {\n      contentOffset: {\n        get x() {\n          return e.target.scrollLeft;\n        },\n        get y() {\n          return e.target.scrollTop;\n        }\n      },\n      contentSize: {\n        get height() {\n          return e.target.scrollHeight;\n        },\n        get width() {\n          return e.target.scrollWidth;\n        }\n      },\n      layoutMeasurement: {\n        get height() {\n          return e.target.offsetHeight;\n        },\n        get width() {\n          return e.target.offsetWidth;\n        }\n      }\n    },\n    timeStamp: Date.now()\n  };\n}\nfunction shouldEmitScrollEvent(lastTick, eventThrottle) {\n  var timeSinceLastTick = Date.now() - lastTick;\n  return eventThrottle > 0 && timeSinceLastTick >= eventThrottle;\n}\n\n/**\n * Encapsulates the Web-specific scroll throttling and disabling logic\n */\nvar ScrollViewBase = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n  var onScroll = props.onScroll,\n    onTouchMove = props.onTouchMove,\n    onWheel = props.onWheel,\n    _props$scrollEnabled = props.scrollEnabled,\n    scrollEnabled = _props$scrollEnabled === void 0 ? true : _props$scrollEnabled,\n    _props$scrollEventThr = props.scrollEventThrottle,\n    scrollEventThrottle = _props$scrollEventThr === void 0 ? 0 : _props$scrollEventThr,\n    showsHorizontalScrollIndicator = props.showsHorizontalScrollIndicator,\n    showsVerticalScrollIndicator = props.showsVerticalScrollIndicator,\n    style = props.style,\n    rest = _objectWithoutPropertiesLoose(props, _excluded);\n  var scrollState = React.useRef({\n    isScrolling: false,\n    scrollLastTick: 0\n  });\n  var scrollTimeout = React.useRef(null);\n  var scrollRef = React.useRef(null);\n  function createPreventableScrollHandler(handler) {\n    return e => {\n      if (scrollEnabled) {\n        if (handler) {\n          handler(e);\n        }\n      }\n    };\n  }\n  function handleScroll(e) {\n    e.stopPropagation();\n    if (e.target === scrollRef.current) {\n      e.persist();\n      // A scroll happened, so the scroll resets the scrollend timeout.\n      if (scrollTimeout.current != null) {\n        clearTimeout(scrollTimeout.current);\n      }\n      scrollTimeout.current = setTimeout(() => {\n        handleScrollEnd(e);\n      }, 100);\n      if (scrollState.current.isScrolling) {\n        // Scroll last tick may have changed, check if we need to notify\n        if (shouldEmitScrollEvent(scrollState.current.scrollLastTick, scrollEventThrottle)) {\n          handleScrollTick(e);\n        }\n      } else {\n        // Weren't scrolling, so we must have just started\n        handleScrollStart(e);\n      }\n    }\n  }\n  function handleScrollStart(e) {\n    scrollState.current.isScrolling = true;\n    handleScrollTick(e);\n  }\n  function handleScrollTick(e) {\n    scrollState.current.scrollLastTick = Date.now();\n    if (onScroll) {\n      onScroll(normalizeScrollEvent(e));\n    }\n  }\n  function handleScrollEnd(e) {\n    scrollState.current.isScrolling = false;\n    if (onScroll) {\n      onScroll(normalizeScrollEvent(e));\n    }\n  }\n  var hideScrollbar = showsHorizontalScrollIndicator === false || showsVerticalScrollIndicator === false;\n  return /*#__PURE__*/React.createElement(View, _extends({}, rest, {\n    onScroll: handleScroll,\n    onTouchMove: createPreventableScrollHandler(onTouchMove),\n    onWheel: createPreventableScrollHandler(onWheel),\n    ref: useMergeRefs(scrollRef, forwardedRef),\n    style: [style, !scrollEnabled && styles.scrollDisabled, hideScrollbar && styles.hideScrollbar]\n  }));\n});\n\n// Chrome doesn't support e.preventDefault in this case; touch-action must be\n// used to disable scrolling.\n// https://developers.google.com/web/updates/2017/01/scrolling-intervention\nvar styles = StyleSheet.create({\n  scrollDisabled: {\n    overflowX: 'hidden',\n    overflowY: 'hidden',\n    touchAction: 'none'\n  },\n  hideScrollbar: {\n    scrollbarWidth: 'none'\n  }\n});\nexport default ScrollViewBase;","/**\n * Copyright (c) Nicolas Gallagher.\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\n'use client';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"contentContainerStyle\", \"horizontal\", \"onContentSizeChange\", \"refreshControl\", \"stickyHeaderIndices\", \"pagingEnabled\", \"forwardedRef\", \"keyboardDismissMode\", \"onScroll\", \"centerContent\"];\nimport Dimensions from '../Dimensions';\nimport dismissKeyboard from '../../modules/dismissKeyboard';\nimport invariant from 'fbjs/lib/invariant';\nimport mergeRefs from '../../modules/mergeRefs';\nimport Platform from '../Platform';\nimport ScrollViewBase from './ScrollViewBase';\nimport StyleSheet from '../StyleSheet';\nimport TextInputState from '../../modules/TextInputState';\nimport UIManager from '../UIManager';\nimport View from '../View';\nimport React from 'react';\nimport warning from 'fbjs/lib/warning';\nvar emptyObject = {};\nvar IS_ANIMATING_TOUCH_START_THRESHOLD_MS = 16;\nclass ScrollView extends React.Component {\n  constructor() {\n    super(...arguments);\n    this._scrollNodeRef = null;\n    this._innerViewRef = null;\n    this.isTouching = false;\n    this.lastMomentumScrollBeginTime = 0;\n    this.lastMomentumScrollEndTime = 0;\n    this.observedScrollSinceBecomingResponder = false;\n    this.becameResponderWhileAnimating = false;\n    this.scrollResponderHandleScrollShouldSetResponder = () => {\n      return this.isTouching;\n    };\n    this.scrollResponderHandleStartShouldSetResponderCapture = e => {\n      // First see if we want to eat taps while the keyboard is up\n      // var currentlyFocusedTextInput = TextInputState.currentlyFocusedField();\n      // if (!this.props.keyboardShouldPersistTaps &&\n      //   currentlyFocusedTextInput != null &&\n      //   e.target !== currentlyFocusedTextInput) {\n      //   return true;\n      // }\n      return this.scrollResponderIsAnimating();\n    };\n    this.scrollResponderHandleTerminationRequest = () => {\n      return !this.observedScrollSinceBecomingResponder;\n    };\n    this.scrollResponderHandleTouchEnd = e => {\n      var nativeEvent = e.nativeEvent;\n      this.isTouching = nativeEvent.touches.length !== 0;\n      this.props.onTouchEnd && this.props.onTouchEnd(e);\n    };\n    this.scrollResponderHandleResponderRelease = e => {\n      this.props.onResponderRelease && this.props.onResponderRelease(e);\n\n      // By default scroll views will unfocus a textField\n      // if another touch occurs outside of it\n      var currentlyFocusedTextInput = TextInputState.currentlyFocusedField();\n      if (!this.props.keyboardShouldPersistTaps && currentlyFocusedTextInput != null && e.target !== currentlyFocusedTextInput && !this.observedScrollSinceBecomingResponder && !this.becameResponderWhileAnimating) {\n        this.props.onScrollResponderKeyboardDismissed && this.props.onScrollResponderKeyboardDismissed(e);\n        TextInputState.blurTextInput(currentlyFocusedTextInput);\n      }\n    };\n    this.scrollResponderHandleScroll = e => {\n      this.observedScrollSinceBecomingResponder = true;\n      this.props.onScroll && this.props.onScroll(e);\n    };\n    this.scrollResponderHandleResponderGrant = e => {\n      this.observedScrollSinceBecomingResponder = false;\n      this.props.onResponderGrant && this.props.onResponderGrant(e);\n      this.becameResponderWhileAnimating = this.scrollResponderIsAnimating();\n    };\n    this.scrollResponderHandleScrollBeginDrag = e => {\n      this.props.onScrollBeginDrag && this.props.onScrollBeginDrag(e);\n    };\n    this.scrollResponderHandleScrollEndDrag = e => {\n      this.props.onScrollEndDrag && this.props.onScrollEndDrag(e);\n    };\n    this.scrollResponderHandleMomentumScrollBegin = e => {\n      this.lastMomentumScrollBeginTime = Date.now();\n      this.props.onMomentumScrollBegin && this.props.onMomentumScrollBegin(e);\n    };\n    this.scrollResponderHandleMomentumScrollEnd = e => {\n      this.lastMomentumScrollEndTime = Date.now();\n      this.props.onMomentumScrollEnd && this.props.onMomentumScrollEnd(e);\n    };\n    this.scrollResponderHandleTouchStart = e => {\n      this.isTouching = true;\n      this.props.onTouchStart && this.props.onTouchStart(e);\n    };\n    this.scrollResponderHandleTouchMove = e => {\n      this.props.onTouchMove && this.props.onTouchMove(e);\n    };\n    this.scrollResponderIsAnimating = () => {\n      var now = Date.now();\n      var timeSinceLastMomentumScrollEnd = now - this.lastMomentumScrollEndTime;\n      var isAnimating = timeSinceLastMomentumScrollEnd < IS_ANIMATING_TOUCH_START_THRESHOLD_MS || this.lastMomentumScrollEndTime < this.lastMomentumScrollBeginTime;\n      return isAnimating;\n    };\n    this.scrollResponderScrollTo = (x, y, animated) => {\n      if (typeof x === 'number') {\n        console.warn('`scrollResponderScrollTo(x, y, animated)` is deprecated. Use `scrollResponderScrollTo({x: 5, y: 5, animated: true})` instead.');\n      } else {\n        var _ref = x || emptyObject;\n        x = _ref.x;\n        y = _ref.y;\n        animated = _ref.animated;\n      }\n      var node = this.getScrollableNode();\n      var left = x || 0;\n      var top = y || 0;\n      if (node != null) {\n        if (typeof node.scroll === 'function') {\n          node.scroll({\n            top,\n            left,\n            behavior: !animated ? 'auto' : 'smooth'\n          });\n        } else {\n          node.scrollLeft = left;\n          node.scrollTop = top;\n        }\n      }\n    };\n    this.scrollResponderZoomTo = (rect, animated) => {\n      if (Platform.OS !== 'ios') {\n        invariant('zoomToRect is not implemented');\n      }\n    };\n    this.scrollResponderScrollNativeHandleToKeyboard = (nodeHandle, additionalOffset, preventNegativeScrollOffset) => {\n      this.additionalScrollOffset = additionalOffset || 0;\n      this.preventNegativeScrollOffset = !!preventNegativeScrollOffset;\n      UIManager.measureLayout(nodeHandle, this.getInnerViewNode(), this.scrollResponderTextInputFocusError, this.scrollResponderInputMeasureAndScrollToKeyboard);\n    };\n    this.scrollResponderInputMeasureAndScrollToKeyboard = (left, top, width, height) => {\n      var keyboardScreenY = Dimensions.get('window').height;\n      if (this.keyboardWillOpenTo) {\n        keyboardScreenY = this.keyboardWillOpenTo.endCoordinates.screenY;\n      }\n      var scrollOffsetY = top - keyboardScreenY + height + this.additionalScrollOffset;\n\n      // By default, this can scroll with negative offset, pulling the content\n      // down so that the target component's bottom meets the keyboard's top.\n      // If requested otherwise, cap the offset at 0 minimum to avoid content\n      // shifting down.\n      if (this.preventNegativeScrollOffset) {\n        scrollOffsetY = Math.max(0, scrollOffsetY);\n      }\n      this.scrollResponderScrollTo({\n        x: 0,\n        y: scrollOffsetY,\n        animated: true\n      });\n      this.additionalOffset = 0;\n      this.preventNegativeScrollOffset = false;\n    };\n    this.scrollResponderKeyboardWillShow = e => {\n      this.keyboardWillOpenTo = e;\n      this.props.onKeyboardWillShow && this.props.onKeyboardWillShow(e);\n    };\n    this.scrollResponderKeyboardWillHide = e => {\n      this.keyboardWillOpenTo = null;\n      this.props.onKeyboardWillHide && this.props.onKeyboardWillHide(e);\n    };\n    this.scrollResponderKeyboardDidShow = e => {\n      // TODO(7693961): The event for DidShow is not available on iOS yet.\n      // Use the one from WillShow and do not assign.\n      if (e) {\n        this.keyboardWillOpenTo = e;\n      }\n      this.props.onKeyboardDidShow && this.props.onKeyboardDidShow(e);\n    };\n    this.scrollResponderKeyboardDidHide = e => {\n      this.keyboardWillOpenTo = null;\n      this.props.onKeyboardDidHide && this.props.onKeyboardDidHide(e);\n    };\n    this.flashScrollIndicators = () => {\n      this.scrollResponderFlashScrollIndicators();\n    };\n    this.getScrollResponder = () => {\n      return this;\n    };\n    this.getScrollableNode = () => {\n      return this._scrollNodeRef;\n    };\n    this.getInnerViewRef = () => {\n      return this._innerViewRef;\n    };\n    this.getInnerViewNode = () => {\n      return this._innerViewRef;\n    };\n    this.getNativeScrollRef = () => {\n      return this._scrollNodeRef;\n    };\n    this.scrollTo = (y, x, animated) => {\n      if (typeof y === 'number') {\n        console.warn('`scrollTo(y, x, animated)` is deprecated. Use `scrollTo({x: 5, y: 5, animated: true})` instead.');\n      } else {\n        var _ref2 = y || emptyObject;\n        x = _ref2.x;\n        y = _ref2.y;\n        animated = _ref2.animated;\n      }\n      this.scrollResponderScrollTo({\n        x: x || 0,\n        y: y || 0,\n        animated: animated !== false\n      });\n    };\n    this.scrollToEnd = options => {\n      // Default to true\n      var animated = (options && options.animated) !== false;\n      var horizontal = this.props.horizontal;\n      var scrollResponderNode = this.getScrollableNode();\n      var x = horizontal ? scrollResponderNode.scrollWidth : 0;\n      var y = horizontal ? 0 : scrollResponderNode.scrollHeight;\n      this.scrollResponderScrollTo({\n        x,\n        y,\n        animated\n      });\n    };\n    this._handleContentOnLayout = e => {\n      var _e$nativeEvent$layout = e.nativeEvent.layout,\n        width = _e$nativeEvent$layout.width,\n        height = _e$nativeEvent$layout.height;\n      this.props.onContentSizeChange(width, height);\n    };\n    this._handleScroll = e => {\n      if (process.env.NODE_ENV !== 'production') {\n        if (this.props.onScroll && this.props.scrollEventThrottle == null) {\n          console.log('You specified `onScroll` on a <ScrollView> but not ' + '`scrollEventThrottle`. You will only receive one event. ' + 'Using `16` you get all the events but be aware that it may ' + \"cause frame drops, use a bigger number if you don't need as \" + 'much precision.');\n        }\n      }\n      if (this.props.keyboardDismissMode === 'on-drag') {\n        dismissKeyboard();\n      }\n      this.scrollResponderHandleScroll(e);\n    };\n    this._setInnerViewRef = node => {\n      this._innerViewRef = node;\n    };\n    this._setScrollNodeRef = node => {\n      this._scrollNodeRef = node;\n      // ScrollView needs to add more methods to the hostNode in addition to those\n      // added by `usePlatformMethods`. This is temporarily until an API like\n      // `ScrollView.scrollTo(hostNode, { x, y })` is added to React Native.\n      if (node != null) {\n        node.getScrollResponder = this.getScrollResponder;\n        node.getInnerViewNode = this.getInnerViewNode;\n        node.getInnerViewRef = this.getInnerViewRef;\n        node.getNativeScrollRef = this.getNativeScrollRef;\n        node.getScrollableNode = this.getScrollableNode;\n        node.scrollTo = this.scrollTo;\n        node.scrollToEnd = this.scrollToEnd;\n        node.flashScrollIndicators = this.flashScrollIndicators;\n        node.scrollResponderZoomTo = this.scrollResponderZoomTo;\n        node.scrollResponderScrollNativeHandleToKeyboard = this.scrollResponderScrollNativeHandleToKeyboard;\n      }\n      var ref = mergeRefs(this.props.forwardedRef);\n      ref(node);\n    };\n  }\n  /**\n   * ------------------------------------------------------\n   * START SCROLLRESPONDER\n   * ------------------------------------------------------\n   */\n  // Reset to false every time becomes responder. This is used to:\n  // - Determine if the scroll view has been scrolled and therefore should\n  // refuse to give up its responder lock.\n  // - Determine if releasing should dismiss the keyboard when we are in\n  // tap-to-dismiss mode (!this.props.keyboardShouldPersistTaps).\n  /**\n   * Invoke this from an `onScroll` event.\n   */\n  /**\n   * Merely touch starting is not sufficient for a scroll view to become the\n   * responder. Being the \"responder\" means that the very next touch move/end\n   * event will result in an action/movement.\n   *\n   * Invoke this from an `onStartShouldSetResponder` event.\n   *\n   * `onStartShouldSetResponder` is used when the next move/end will trigger\n   * some UI movement/action, but when you want to yield priority to views\n   * nested inside of the view.\n   *\n   * There may be some cases where scroll views actually should return `true`\n   * from `onStartShouldSetResponder`: Any time we are detecting a standard tap\n   * that gives priority to nested views.\n   *\n   * - If a single tap on the scroll view triggers an action such as\n   *   recentering a map style view yet wants to give priority to interaction\n   *   views inside (such as dropped pins or labels), then we would return true\n   *   from this method when there is a single touch.\n   *\n   * - Similar to the previous case, if a two finger \"tap\" should trigger a\n   *   zoom, we would check the `touches` count, and if `>= 2`, we would return\n   *   true.\n   *\n   */\n  scrollResponderHandleStartShouldSetResponder() {\n    return false;\n  }\n\n  /**\n   * There are times when the scroll view wants to become the responder\n   * (meaning respond to the next immediate `touchStart/touchEnd`), in a way\n   * that *doesn't* give priority to nested views (hence the capture phase):\n   *\n   * - Currently animating.\n   * - Tapping anywhere that is not the focused input, while the keyboard is\n   *   up (which should dismiss the keyboard).\n   *\n   * Invoke this from an `onStartShouldSetResponderCapture` event.\n   */\n\n  /**\n   * Invoke this from an `onResponderReject` event.\n   *\n   * Some other element is not yielding its role as responder. Normally, we'd\n   * just disable the `UIScrollView`, but a touch has already began on it, the\n   * `UIScrollView` will not accept being disabled after that. The easiest\n   * solution for now is to accept the limitation of disallowing this\n   * altogether. To improve this, find a way to disable the `UIScrollView` after\n   * a touch has already started.\n   */\n  scrollResponderHandleResponderReject() {\n    warning(false, \"ScrollView doesn't take rejection well - scrolls anyway\");\n  }\n\n  /**\n   * We will allow the scroll view to give up its lock iff it acquired the lock\n   * during an animation. This is a very useful default that happens to satisfy\n   * many common user experiences.\n   *\n   * - Stop a scroll on the left edge, then turn that into an outer view's\n   *   backswipe.\n   * - Stop a scroll mid-bounce at the top, continue pulling to have the outer\n   *   view dismiss.\n   * - However, without catching the scroll view mid-bounce (while it is\n   *   motionless), if you drag far enough for the scroll view to become\n   *   responder (and therefore drag the scroll view a bit), any backswipe\n   *   navigation of a swipe gesture higher in the view hierarchy, should be\n   *   rejected.\n   */\n\n  /**\n   * Invoke this from an `onTouchEnd` event.\n   *\n   * @param {SyntheticEvent} e Event.\n   */\n\n  /**\n   * Invoke this from an `onResponderRelease` event.\n   */\n\n  /**\n   * Invoke this from an `onResponderGrant` event.\n   */\n\n  /**\n   * Unfortunately, `onScrollBeginDrag` also fires when *stopping* the scroll\n   * animation, and there's not an easy way to distinguish a drag vs. stopping\n   * momentum.\n   *\n   * Invoke this from an `onScrollBeginDrag` event.\n   */\n\n  /**\n   * Invoke this from an `onScrollEndDrag` event.\n   */\n\n  /**\n   * Invoke this from an `onMomentumScrollBegin` event.\n   */\n\n  /**\n   * Invoke this from an `onMomentumScrollEnd` event.\n   */\n\n  /**\n   * Invoke this from an `onTouchStart` event.\n   *\n   * Since we know that the `SimpleEventPlugin` occurs later in the plugin\n   * order, after `ResponderEventPlugin`, we can detect that we were *not*\n   * permitted to be the responder (presumably because a contained view became\n   * responder). The `onResponderReject` won't fire in that case - it only\n   * fires when a *current* responder rejects our request.\n   *\n   * @param {SyntheticEvent} e Touch Start event.\n   */\n\n  /**\n   * Invoke this from an `onTouchMove` event.\n   *\n   * Since we know that the `SimpleEventPlugin` occurs later in the plugin\n   * order, after `ResponderEventPlugin`, we can detect that we were *not*\n   * permitted to be the responder (presumably because a contained view became\n   * responder). The `onResponderReject` won't fire in that case - it only\n   * fires when a *current* responder rejects our request.\n   *\n   * @param {SyntheticEvent} e Touch Start event.\n   */\n\n  /**\n   * A helper function for this class that lets us quickly determine if the\n   * view is currently animating. This is particularly useful to know when\n   * a touch has just started or ended.\n   */\n\n  /**\n   * A helper function to scroll to a specific point in the scrollview.\n   * This is currently used to help focus on child textviews, but can also\n   * be used to quickly scroll to any element we want to focus. Syntax:\n   *\n   * scrollResponderScrollTo(options: {x: number = 0; y: number = 0; animated: boolean = true})\n   *\n   * Note: The weird argument signature is due to the fact that, for historical reasons,\n   * the function also accepts separate arguments as as alternative to the options object.\n   * This is deprecated due to ambiguity (y before x), and SHOULD NOT BE USED.\n   */\n\n  /**\n   * A helper function to zoom to a specific rect in the scrollview. The argument has the shape\n   * {x: number; y: number; width: number; height: number; animated: boolean = true}\n   *\n   * @platform ios\n   */\n\n  /**\n   * Displays the scroll indicators momentarily.\n   */\n  scrollResponderFlashScrollIndicators() {}\n\n  /**\n   * This method should be used as the callback to onFocus in a TextInputs'\n   * parent view. Note that any module using this mixin needs to return\n   * the parent view's ref in getScrollViewRef() in order to use this method.\n   * @param {any} nodeHandle The TextInput node handle\n   * @param {number} additionalOffset The scroll view's top \"contentInset\".\n   *        Default is 0.\n   * @param {bool} preventNegativeScrolling Whether to allow pulling the content\n   *        down to make it meet the keyboard's top. Default is false.\n   */\n\n  /**\n   * The calculations performed here assume the scroll view takes up the entire\n   * screen - even if has some content inset. We then measure the offsets of the\n   * keyboard, and compensate both for the scroll view's \"contentInset\".\n   *\n   * @param {number} left Position of input w.r.t. table view.\n   * @param {number} top Position of input w.r.t. table view.\n   * @param {number} width Width of the text input.\n   * @param {number} height Height of the text input.\n   */\n\n  scrollResponderTextInputFocusError(e) {\n    console.error('Error measuring text field: ', e);\n  }\n\n  /**\n   * Warning, this may be called several times for a single keyboard opening.\n   * It's best to store the information in this method and then take any action\n   * at a later point (either in `keyboardDidShow` or other).\n   *\n   * Here's the order that events occur in:\n   * - focus\n   * - willShow {startCoordinates, endCoordinates} several times\n   * - didShow several times\n   * - blur\n   * - willHide {startCoordinates, endCoordinates} several times\n   * - didHide several times\n   *\n   * The `ScrollResponder` providesModule callbacks for each of these events.\n   * Even though any user could have easily listened to keyboard events\n   * themselves, using these `props` callbacks ensures that ordering of events\n   * is consistent - and not dependent on the order that the keyboard events are\n   * subscribed to. This matters when telling the scroll view to scroll to where\n   * the keyboard is headed - the scroll responder better have been notified of\n   * the keyboard destination before being instructed to scroll to where the\n   * keyboard will be. Stick to the `ScrollResponder` callbacks, and everything\n   * will work.\n   *\n   * WARNING: These callbacks will fire even if a keyboard is displayed in a\n   * different navigation pane. Filter out the events to determine if they are\n   * relevant to you. (For example, only if you receive these callbacks after\n   * you had explicitly focused a node etc).\n   */\n\n  /**\n   * ------------------------------------------------------\n   * END SCROLLRESPONDER\n   * ------------------------------------------------------\n   */\n\n  /**\n   * Returns a reference to the underlying scroll responder, which supports\n   * operations like `scrollTo`. All ScrollView-like components should\n   * implement this method so that they can be composed while providing access\n   * to the underlying scroll responder's methods.\n   */\n\n  /**\n   * Scrolls to a given x, y offset, either immediately or with a smooth animation.\n   * Syntax:\n   *\n   * scrollTo(options: {x: number = 0; y: number = 0; animated: boolean = true})\n   *\n   * Note: The weird argument signature is due to the fact that, for historical reasons,\n   * the function also accepts separate arguments as as alternative to the options object.\n   * This is deprecated due to ambiguity (y before x), and SHOULD NOT BE USED.\n   */\n\n  /**\n   * If this is a vertical ScrollView scrolls to the bottom.\n   * If this is a horizontal ScrollView scrolls to the right.\n   *\n   * Use `scrollToEnd({ animated: true })` for smooth animated scrolling,\n   * `scrollToEnd({ animated: false })` for immediate scrolling.\n   * If no options are passed, `animated` defaults to true.\n   */\n\n  render() {\n    var _this$props = this.props,\n      contentContainerStyle = _this$props.contentContainerStyle,\n      horizontal = _this$props.horizontal,\n      onContentSizeChange = _this$props.onContentSizeChange,\n      refreshControl = _this$props.refreshControl,\n      stickyHeaderIndices = _this$props.stickyHeaderIndices,\n      pagingEnabled = _this$props.pagingEnabled,\n      forwardedRef = _this$props.forwardedRef,\n      keyboardDismissMode = _this$props.keyboardDismissMode,\n      onScroll = _this$props.onScroll,\n      centerContent = _this$props.centerContent,\n      other = _objectWithoutPropertiesLoose(_this$props, _excluded);\n    if (process.env.NODE_ENV !== 'production' && this.props.style) {\n      var style = StyleSheet.flatten(this.props.style);\n      var childLayoutProps = ['alignItems', 'justifyContent'].filter(prop => style && style[prop] !== undefined);\n      invariant(childLayoutProps.length === 0, \"ScrollView child layout (\" + JSON.stringify(childLayoutProps) + \") \" + 'must be applied through the contentContainerStyle prop.');\n    }\n    var contentSizeChangeProps = {};\n    if (onContentSizeChange) {\n      contentSizeChangeProps = {\n        onLayout: this._handleContentOnLayout\n      };\n    }\n    var hasStickyHeaderIndices = !horizontal && Array.isArray(stickyHeaderIndices);\n    var children = hasStickyHeaderIndices || pagingEnabled ? React.Children.map(this.props.children, (child, i) => {\n      var isSticky = hasStickyHeaderIndices && stickyHeaderIndices.indexOf(i) > -1;\n      if (child != null && (isSticky || pagingEnabled)) {\n        return /*#__PURE__*/React.createElement(View, {\n          style: [isSticky && styles.stickyHeader, pagingEnabled && styles.pagingEnabledChild]\n        }, child);\n      } else {\n        return child;\n      }\n    }) : this.props.children;\n    var contentContainer = /*#__PURE__*/React.createElement(View, _extends({}, contentSizeChangeProps, {\n      children: children,\n      collapsable: false,\n      ref: this._setInnerViewRef,\n      style: [horizontal && styles.contentContainerHorizontal, centerContent && styles.contentContainerCenterContent, contentContainerStyle]\n    }));\n    var baseStyle = horizontal ? styles.baseHorizontal : styles.baseVertical;\n    var pagingEnabledStyle = horizontal ? styles.pagingEnabledHorizontal : styles.pagingEnabledVertical;\n    var props = _objectSpread(_objectSpread({}, other), {}, {\n      style: [baseStyle, pagingEnabled && pagingEnabledStyle, this.props.style],\n      onTouchStart: this.scrollResponderHandleTouchStart,\n      onTouchMove: this.scrollResponderHandleTouchMove,\n      onTouchEnd: this.scrollResponderHandleTouchEnd,\n      onScrollBeginDrag: this.scrollResponderHandleScrollBeginDrag,\n      onScrollEndDrag: this.scrollResponderHandleScrollEndDrag,\n      onMomentumScrollBegin: this.scrollResponderHandleMomentumScrollBegin,\n      onMomentumScrollEnd: this.scrollResponderHandleMomentumScrollEnd,\n      onStartShouldSetResponder: this.scrollResponderHandleStartShouldSetResponder,\n      onStartShouldSetResponderCapture: this.scrollResponderHandleStartShouldSetResponderCapture,\n      onScrollShouldSetResponder: this.scrollResponderHandleScrollShouldSetResponder,\n      onScroll: this._handleScroll,\n      onResponderGrant: this.scrollResponderHandleResponderGrant,\n      onResponderTerminationRequest: this.scrollResponderHandleTerminationRequest,\n      onResponderTerminate: this.scrollResponderHandleTerminate,\n      onResponderRelease: this.scrollResponderHandleResponderRelease,\n      onResponderReject: this.scrollResponderHandleResponderReject\n    });\n    var ScrollViewClass = ScrollViewBase;\n    invariant(ScrollViewClass !== undefined, 'ScrollViewClass must not be undefined');\n    var scrollView = /*#__PURE__*/React.createElement(ScrollViewClass, _extends({}, props, {\n      ref: this._setScrollNodeRef\n    }), contentContainer);\n    if (refreshControl) {\n      return /*#__PURE__*/React.cloneElement(refreshControl, {\n        style: props.style\n      }, scrollView);\n    }\n    return scrollView;\n  }\n}\nvar commonStyle = {\n  flexGrow: 1,\n  flexShrink: 1,\n  // Enable hardware compositing in modern browsers.\n  // Creates a new layer with its own backing surface that can significantly\n  // improve scroll performance.\n  transform: 'translateZ(0)',\n  // iOS native scrolling\n  WebkitOverflowScrolling: 'touch'\n};\nvar styles = StyleSheet.create({\n  baseVertical: _objectSpread(_objectSpread({}, commonStyle), {}, {\n    flexDirection: 'column',\n    overflowX: 'hidden',\n    overflowY: 'auto'\n  }),\n  baseHorizontal: _objectSpread(_objectSpread({}, commonStyle), {}, {\n    flexDirection: 'row',\n    overflowX: 'auto',\n    overflowY: 'hidden'\n  }),\n  contentContainerHorizontal: {\n    flexDirection: 'row'\n  },\n  contentContainerCenterContent: {\n    justifyContent: 'center',\n    flexGrow: 1\n  },\n  stickyHeader: {\n    position: 'sticky',\n    top: 0,\n    zIndex: 10\n  },\n  pagingEnabledHorizontal: {\n    scrollSnapType: 'x mandatory'\n  },\n  pagingEnabledVertical: {\n    scrollSnapType: 'y mandatory'\n  },\n  pagingEnabledChild: {\n    scrollSnapAlign: 'start'\n  }\n});\nvar ForwardedScrollView = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n  return /*#__PURE__*/React.createElement(ScrollView, _extends({}, props, {\n    forwardedRef: forwardedRef\n  }));\n});\nForwardedScrollView.displayName = 'ScrollView';\nexport default ForwardedScrollView;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _createForOfIteratorHelperLoose from \"@babel/runtime/helpers/createForOfIteratorHelperLoose\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nvar _excluded = [\"ItemSeparatorComponent\", \"SectionSeparatorComponent\", \"renderItem\", \"renderSectionFooter\", \"renderSectionHeader\", \"sections\", \"stickySectionHeadersEnabled\"];\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 * @format\n */\n\nimport View from '../../../exports/View';\nimport VirtualizedList from '../VirtualizedList';\nimport { keyExtractor as defaultKeyExtractor } from '../VirtualizeUtils';\nimport invariant from 'fbjs/lib/invariant';\nimport * as React from 'react';\n/**\n * Right now this just flattens everything into one list and uses VirtualizedList under the\n * hood. The only operation that might not scale well is concatting the data arrays of all the\n * sections when new props are received, which should be plenty fast for up to ~10,000 items.\n */\nclass VirtualizedSectionList extends React.PureComponent {\n  constructor() {\n    super(...arguments);\n    this._keyExtractor = (item, index) => {\n      var info = this._subExtractor(index);\n      return info && info.key || String(index);\n    };\n    this._convertViewable = viewable => {\n      var _info$index;\n      invariant(viewable.index != null, 'Received a broken ViewToken');\n      var info = this._subExtractor(viewable.index);\n      if (!info) {\n        return null;\n      }\n      var keyExtractorWithNullableIndex = info.section.keyExtractor;\n      var keyExtractorWithNonNullableIndex = this.props.keyExtractor || defaultKeyExtractor;\n      var key = keyExtractorWithNullableIndex != null ? keyExtractorWithNullableIndex(viewable.item, info.index) : keyExtractorWithNonNullableIndex(viewable.item, (_info$index = info.index) !== null && _info$index !== void 0 ? _info$index : 0);\n      return _objectSpread(_objectSpread({}, viewable), {}, {\n        index: info.index,\n        key,\n        section: info.section\n      });\n    };\n    this._onViewableItemsChanged = _ref => {\n      var viewableItems = _ref.viewableItems,\n        changed = _ref.changed;\n      var onViewableItemsChanged = this.props.onViewableItemsChanged;\n      if (onViewableItemsChanged != null) {\n        onViewableItemsChanged({\n          viewableItems: viewableItems.map(this._convertViewable, this).filter(Boolean),\n          changed: changed.map(this._convertViewable, this).filter(Boolean)\n        });\n      }\n    };\n    this._renderItem = listItemCount =>\n    // eslint-disable-next-line react/no-unstable-nested-components\n    _ref2 => {\n      var item = _ref2.item,\n        index = _ref2.index;\n      var info = this._subExtractor(index);\n      if (!info) {\n        return null;\n      }\n      var infoIndex = info.index;\n      if (infoIndex == null) {\n        var section = info.section;\n        if (info.header === true) {\n          var renderSectionHeader = this.props.renderSectionHeader;\n          return renderSectionHeader ? renderSectionHeader({\n            section\n          }) : null;\n        } else {\n          var renderSectionFooter = this.props.renderSectionFooter;\n          return renderSectionFooter ? renderSectionFooter({\n            section\n          }) : null;\n        }\n      } else {\n        var renderItem = info.section.renderItem || this.props.renderItem;\n        var SeparatorComponent = this._getSeparatorComponent(index, info, listItemCount);\n        invariant(renderItem, 'no renderItem!');\n        return /*#__PURE__*/React.createElement(ItemWithSeparator, {\n          SeparatorComponent: SeparatorComponent,\n          LeadingSeparatorComponent: infoIndex === 0 ? this.props.SectionSeparatorComponent : undefined,\n          cellKey: info.key,\n          index: infoIndex,\n          item: item,\n          leadingItem: info.leadingItem,\n          leadingSection: info.leadingSection,\n          prevCellKey: (this._subExtractor(index - 1) || {}).key\n          // Callback to provide updateHighlight for this item\n          ,\n          setSelfHighlightCallback: this._setUpdateHighlightFor,\n          setSelfUpdatePropsCallback: this._setUpdatePropsFor\n          // Provide child ability to set highlight/updateProps for previous item using prevCellKey\n          ,\n          updateHighlightFor: this._updateHighlightFor,\n          updatePropsFor: this._updatePropsFor,\n          renderItem: renderItem,\n          section: info.section,\n          trailingItem: info.trailingItem,\n          trailingSection: info.trailingSection,\n          inverted: !!this.props.inverted\n        });\n      }\n    };\n    this._updatePropsFor = (cellKey, value) => {\n      var updateProps = this._updatePropsMap[cellKey];\n      if (updateProps != null) {\n        updateProps(value);\n      }\n    };\n    this._updateHighlightFor = (cellKey, value) => {\n      var updateHighlight = this._updateHighlightMap[cellKey];\n      if (updateHighlight != null) {\n        updateHighlight(value);\n      }\n    };\n    this._setUpdateHighlightFor = (cellKey, updateHighlightFn) => {\n      if (updateHighlightFn != null) {\n        this._updateHighlightMap[cellKey] = updateHighlightFn;\n      } else {\n        // $FlowFixMe[prop-missing]\n        delete this._updateHighlightFor[cellKey];\n      }\n    };\n    this._setUpdatePropsFor = (cellKey, updatePropsFn) => {\n      if (updatePropsFn != null) {\n        this._updatePropsMap[cellKey] = updatePropsFn;\n      } else {\n        delete this._updatePropsMap[cellKey];\n      }\n    };\n    this._updateHighlightMap = {};\n    this._updatePropsMap = {};\n    this._captureRef = ref => {\n      this._listRef = ref;\n    };\n  }\n  scrollToLocation(params) {\n    var index = params.itemIndex;\n    for (var i = 0; i < params.sectionIndex; i++) {\n      index += this.props.getItemCount(this.props.sections[i].data) + 2;\n    }\n    var viewOffset = params.viewOffset || 0;\n    if (this._listRef == null) {\n      return;\n    }\n    if (params.itemIndex > 0 && this.props.stickySectionHeadersEnabled) {\n      var frame = this._listRef.__getFrameMetricsApprox(index - params.itemIndex, this._listRef.props);\n      viewOffset += frame.length;\n    }\n    var toIndexParams = _objectSpread(_objectSpread({}, params), {}, {\n      viewOffset,\n      index\n    });\n    // $FlowFixMe[incompatible-use]\n    this._listRef.scrollToIndex(toIndexParams);\n  }\n  getListRef() {\n    return this._listRef;\n  }\n  render() {\n    var _this$props = this.props,\n      ItemSeparatorComponent = _this$props.ItemSeparatorComponent,\n      SectionSeparatorComponent = _this$props.SectionSeparatorComponent,\n      _renderItem = _this$props.renderItem,\n      renderSectionFooter = _this$props.renderSectionFooter,\n      renderSectionHeader = _this$props.renderSectionHeader,\n      _sections = _this$props.sections,\n      stickySectionHeadersEnabled = _this$props.stickySectionHeadersEnabled,\n      passThroughProps = _objectWithoutPropertiesLoose(_this$props, _excluded);\n    var listHeaderOffset = this.props.ListHeaderComponent ? 1 : 0;\n    var stickyHeaderIndices = this.props.stickySectionHeadersEnabled ? [] : undefined;\n    var itemCount = 0;\n    for (var _iterator = _createForOfIteratorHelperLoose(this.props.sections), _step; !(_step = _iterator()).done;) {\n      var section = _step.value;\n      // Track the section header indices\n      if (stickyHeaderIndices != null) {\n        stickyHeaderIndices.push(itemCount + listHeaderOffset);\n      }\n\n      // Add two for the section header and footer.\n      itemCount += 2;\n      itemCount += this.props.getItemCount(section.data);\n    }\n    var renderItem = this._renderItem(itemCount);\n    return /*#__PURE__*/React.createElement(VirtualizedList, _extends({}, passThroughProps, {\n      keyExtractor: this._keyExtractor,\n      stickyHeaderIndices: stickyHeaderIndices,\n      renderItem: renderItem,\n      data: this.props.sections,\n      getItem: (sections, index) => this._getItem(this.props, sections, index),\n      getItemCount: () => itemCount,\n      onViewableItemsChanged: this.props.onViewableItemsChanged ? this._onViewableItemsChanged : undefined,\n      ref: this._captureRef\n    }));\n  }\n  _getItem(props, sections, index) {\n    if (!sections) {\n      return null;\n    }\n    var itemIdx = index - 1;\n    for (var i = 0; i < sections.length; i++) {\n      var section = sections[i];\n      var sectionData = section.data;\n      var itemCount = props.getItemCount(sectionData);\n      if (itemIdx === -1 || itemIdx === itemCount) {\n        // We intend for there to be overflow by one on both ends of the list.\n        // This will be for headers and footers. When returning a header or footer\n        // item the section itself is the item.\n        return section;\n      } else if (itemIdx < itemCount) {\n        // If we are in the bounds of the list's data then return the item.\n        return props.getItem(sectionData, itemIdx);\n      } else {\n        itemIdx -= itemCount + 2; // Add two for the header and footer\n      }\n    }\n    return null;\n  }\n\n  // $FlowFixMe[missing-local-annot]\n\n  _subExtractor(index) {\n    var itemIndex = index;\n    var _this$props2 = this.props,\n      getItem = _this$props2.getItem,\n      getItemCount = _this$props2.getItemCount,\n      keyExtractor = _this$props2.keyExtractor,\n      sections = _this$props2.sections;\n    for (var i = 0; i < sections.length; i++) {\n      var section = sections[i];\n      var sectionData = section.data;\n      var key = section.key || String(i);\n      itemIndex -= 1; // The section adds an item for the header\n      if (itemIndex >= getItemCount(sectionData) + 1) {\n        itemIndex -= getItemCount(sectionData) + 1; // The section adds an item for the footer.\n      } else if (itemIndex === -1) {\n        return {\n          section,\n          key: key + ':header',\n          index: null,\n          header: true,\n          trailingSection: sections[i + 1]\n        };\n      } else if (itemIndex === getItemCount(sectionData)) {\n        return {\n          section,\n          key: key + ':footer',\n          index: null,\n          header: false,\n          trailingSection: sections[i + 1]\n        };\n      } else {\n        var extractor = section.keyExtractor || keyExtractor || defaultKeyExtractor;\n        return {\n          section,\n          key: key + ':' + extractor(getItem(sectionData, itemIndex), itemIndex),\n          index: itemIndex,\n          leadingItem: getItem(sectionData, itemIndex - 1),\n          leadingSection: sections[i - 1],\n          trailingItem: getItem(sectionData, itemIndex + 1),\n          trailingSection: sections[i + 1]\n        };\n      }\n    }\n  }\n  _getSeparatorComponent(index, info, listItemCount) {\n    info = info || this._subExtractor(index);\n    if (!info) {\n      return null;\n    }\n    var ItemSeparatorComponent = info.section.ItemSeparatorComponent || this.props.ItemSeparatorComponent;\n    var SectionSeparatorComponent = this.props.SectionSeparatorComponent;\n    var isLastItemInList = index === listItemCount - 1;\n    var isLastItemInSection = info.index === this.props.getItemCount(info.section.data) - 1;\n    if (SectionSeparatorComponent && isLastItemInSection) {\n      return SectionSeparatorComponent;\n    }\n    if (ItemSeparatorComponent && !isLastItemInSection && !isLastItemInList) {\n      return ItemSeparatorComponent;\n    }\n    return null;\n  }\n}\nfunction ItemWithSeparator(props) {\n  var LeadingSeparatorComponent = props.LeadingSeparatorComponent,\n    SeparatorComponent = props.SeparatorComponent,\n    cellKey = props.cellKey,\n    prevCellKey = props.prevCellKey,\n    setSelfHighlightCallback = props.setSelfHighlightCallback,\n    updateHighlightFor = props.updateHighlightFor,\n    setSelfUpdatePropsCallback = props.setSelfUpdatePropsCallback,\n    updatePropsFor = props.updatePropsFor,\n    item = props.item,\n    index = props.index,\n    section = props.section,\n    inverted = props.inverted;\n  var _React$useState = React.useState(false),\n    leadingSeparatorHiglighted = _React$useState[0],\n    setLeadingSeparatorHighlighted = _React$useState[1];\n  var _React$useState2 = React.useState(false),\n    separatorHighlighted = _React$useState2[0],\n    setSeparatorHighlighted = _React$useState2[1];\n  var _React$useState3 = React.useState({\n      leadingItem: props.leadingItem,\n      leadingSection: props.leadingSection,\n      section: props.section,\n      trailingItem: props.item,\n      trailingSection: props.trailingSection\n    }),\n    leadingSeparatorProps = _React$useState3[0],\n    setLeadingSeparatorProps = _React$useState3[1];\n  var _React$useState4 = React.useState({\n      leadingItem: props.item,\n      leadingSection: props.leadingSection,\n      section: props.section,\n      trailingItem: props.trailingItem,\n      trailingSection: props.trailingSection\n    }),\n    separatorProps = _React$useState4[0],\n    setSeparatorProps = _React$useState4[1];\n  React.useEffect(() => {\n    setSelfHighlightCallback(cellKey, setSeparatorHighlighted);\n    // $FlowFixMe[incompatible-call]\n    setSelfUpdatePropsCallback(cellKey, setSeparatorProps);\n    return () => {\n      setSelfUpdatePropsCallback(cellKey, null);\n      setSelfHighlightCallback(cellKey, null);\n    };\n  }, [cellKey, setSelfHighlightCallback, setSeparatorProps, setSelfUpdatePropsCallback]);\n  var separators = {\n    highlight: () => {\n      setLeadingSeparatorHighlighted(true);\n      setSeparatorHighlighted(true);\n      if (prevCellKey != null) {\n        updateHighlightFor(prevCellKey, true);\n      }\n    },\n    unhighlight: () => {\n      setLeadingSeparatorHighlighted(false);\n      setSeparatorHighlighted(false);\n      if (prevCellKey != null) {\n        updateHighlightFor(prevCellKey, false);\n      }\n    },\n    updateProps: (select, newProps) => {\n      if (select === 'leading') {\n        if (LeadingSeparatorComponent != null) {\n          setLeadingSeparatorProps(_objectSpread(_objectSpread({}, leadingSeparatorProps), newProps));\n        } else if (prevCellKey != null) {\n          // update the previous item's separator\n          updatePropsFor(prevCellKey, _objectSpread(_objectSpread({}, leadingSeparatorProps), newProps));\n        }\n      } else if (select === 'trailing' && SeparatorComponent != null) {\n        setSeparatorProps(_objectSpread(_objectSpread({}, separatorProps), newProps));\n      }\n    }\n  };\n  var element = props.renderItem({\n    item,\n    index,\n    section,\n    separators\n  });\n  var leadingSeparator = LeadingSeparatorComponent != null && /*#__PURE__*/React.createElement(LeadingSeparatorComponent, _extends({\n    highlighted: leadingSeparatorHiglighted\n  }, leadingSeparatorProps));\n  var separator = SeparatorComponent != null && /*#__PURE__*/React.createElement(SeparatorComponent, _extends({\n    highlighted: separatorHighlighted\n  }, separatorProps));\n  return leadingSeparator || separator ? /*#__PURE__*/React.createElement(View, null, inverted === false ? leadingSeparator : separator, element, inverted === false ? separator : leadingSeparator) : element;\n}\n\n/* $FlowFixMe[class-object-subtyping] added when improving typing for this\n * parameters */\n// $FlowFixMe[method-unbinding]\nexport default VirtualizedSectionList;","/**\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 * @format\n */\n\n'use strict';\n\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"stickySectionHeadersEnabled\"];\nimport Platform from '../../../exports/Platform';\nimport * as React from 'react';\nimport VirtualizedSectionList from '../VirtualizedSectionList';\n/**\n * A performant interface for rendering sectioned lists, supporting the most handy features:\n *\n *  - Fully cross-platform.\n *  - Configurable viewability callbacks.\n *  - List header support.\n *  - List footer support.\n *  - Item separator support.\n *  - Section header support.\n *  - Section separator support.\n *  - Heterogeneous data and item rendering support.\n *  - Pull to Refresh.\n *  - Scroll loading.\n *\n * If you don't need section support and want a simpler interface, use\n * [`<FlatList>`](https://reactnative.dev/docs/flatlist).\n *\n * Simple Examples:\n *\n *     <SectionList\n *       renderItem={({item}) => <ListItem title={item} />}\n *       renderSectionHeader={({section}) => <Header title={section.title} />}\n *       sections={[ // homogeneous rendering between sections\n *         {data: [...], title: ...},\n *         {data: [...], title: ...},\n *         {data: [...], title: ...},\n *       ]}\n *     />\n *\n *     <SectionList\n *       sections={[ // heterogeneous rendering between sections\n *         {data: [...], renderItem: ...},\n *         {data: [...], renderItem: ...},\n *         {data: [...], renderItem: ...},\n *       ]}\n *     />\n *\n * This is a convenience wrapper around [`<VirtualizedList>`](docs/virtualizedlist),\n * and thus inherits its props (as well as those of `ScrollView`) that aren't explicitly listed\n * here, along with the following caveats:\n *\n * - Internal state is not preserved when content scrolls out of the render window. Make sure all\n *   your data is captured in the item data or external stores like Flux, Redux, or Relay.\n * - This is a `PureComponent` which means that it will not re-render if `props` remain shallow-\n *   equal. Make sure that everything your `renderItem` function depends on is passed as a prop\n *   (e.g. `extraData`) that is not `===` after updates, otherwise your UI may not update on\n *   changes. This includes the `data` prop and parent component state.\n * - In order to constrain memory and enable smooth scrolling, content is rendered asynchronously\n *   offscreen. This means it's possible to scroll faster than the fill rate and momentarily see\n *   blank content. This is a tradeoff that can be adjusted to suit the needs of each application,\n *   and we are working on improving it behind the scenes.\n * - By default, the list looks for a `key` prop on each item and uses that for the React key.\n *   Alternatively, you can provide a custom `keyExtractor` prop.\n *\n */\nexport default class SectionList extends React.PureComponent {\n  constructor() {\n    super(...arguments);\n    this._captureRef = ref => {\n      this._wrapperListRef = ref;\n    };\n  }\n  /**\n   * Scrolls to the item at the specified `sectionIndex` and `itemIndex` (within the section)\n   * positioned in the viewable area such that `viewPosition` 0 places it at the top (and may be\n   * covered by a sticky header), 1 at the bottom, and 0.5 centered in the middle. `viewOffset` is a\n   * fixed number of pixels to offset the final target position, e.g. to compensate for sticky\n   * headers.\n   *\n   * Note: cannot scroll to locations outside the render window without specifying the\n   * `getItemLayout` prop.\n   */\n  scrollToLocation(params) {\n    if (this._wrapperListRef != null) {\n      this._wrapperListRef.scrollToLocation(params);\n    }\n  }\n\n  /**\n   * Tells the list an interaction has occurred, which should trigger viewability calculations, e.g.\n   * if `waitForInteractions` is true and the user has not scrolled. This is typically called by\n   * taps on items or by navigation actions.\n   */\n  recordInteraction() {\n    var listRef = this._wrapperListRef && this._wrapperListRef.getListRef();\n    listRef && listRef.recordInteraction();\n  }\n\n  /**\n   * Displays the scroll indicators momentarily.\n   *\n   * @platform ios\n   */\n  flashScrollIndicators() {\n    var listRef = this._wrapperListRef && this._wrapperListRef.getListRef();\n    listRef && listRef.flashScrollIndicators();\n  }\n\n  /**\n   * Provides a handle to the underlying scroll responder.\n   */\n  getScrollResponder() {\n    var listRef = this._wrapperListRef && this._wrapperListRef.getListRef();\n    if (listRef) {\n      return listRef.getScrollResponder();\n    }\n  }\n  getScrollableNode() {\n    var listRef = this._wrapperListRef && this._wrapperListRef.getListRef();\n    if (listRef) {\n      return listRef.getScrollableNode();\n    }\n  }\n  render() {\n    var _this$props = this.props,\n      _stickySectionHeadersEnabled = _this$props.stickySectionHeadersEnabled,\n      restProps = _objectWithoutPropertiesLoose(_this$props, _excluded);\n    var stickySectionHeadersEnabled = _stickySectionHeadersEnabled !== null && _stickySectionHeadersEnabled !== void 0 ? _stickySectionHeadersEnabled : Platform.OS === 'ios';\n    return /*#__PURE__*/React.createElement(VirtualizedSectionList, _extends({}, restProps, {\n      stickySectionHeadersEnabled: stickySectionHeadersEnabled,\n      ref: this._captureRef,\n      getItemCount: items => items.length,\n      getItem: (items, index) => items[index]\n    }));\n  }\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\n'use client';\n\nimport SectionList from '../../vendor/react-native/SectionList';\nexport default SectionList;","/**\n * Copyright (c) Nicolas Gallagher.\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\nvar emptyFunction = () => {};\nfunction StatusBar() {\n  return null;\n}\nStatusBar.setBackgroundColor = emptyFunction;\nStatusBar.setBarStyle = emptyFunction;\nStatusBar.setHidden = emptyFunction;\nStatusBar.setNetworkActivityIndicatorVisible = emptyFunction;\nStatusBar.setTranslucent = emptyFunction;\nexport default StatusBar;","/**\n * Copyright (c) Nicolas Gallagher.\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\nimport normalizeValueWithProperty from './normalizeValueWithProperty';\nimport canUseDOM from '../../../modules/canUseDom';\n/**\n * The browser implements the CSS cascade, where the order of properties is a\n * factor in determining which styles to paint. React Native is different. It\n * gives giving precedence to the more specific style property. For example,\n * the value of `paddingTop` takes precedence over that of `padding`.\n *\n * This module creates mutally exclusive style declarations by expanding all of\n * React Native's supported shortform properties (e.g. `padding`) to their\n * longfrom equivalents.\n */\n\nvar emptyObject = {};\nvar supportsCSS3TextDecoration = !canUseDOM || window.CSS != null && window.CSS.supports != null && (window.CSS.supports('text-decoration-line', 'none') || window.CSS.supports('-webkit-text-decoration-line', 'none'));\nvar MONOSPACE_FONT_STACK = 'monospace,monospace';\nvar SYSTEM_FONT_STACK = '-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif';\nvar STYLE_SHORT_FORM_EXPANSIONS = {\n  borderColor: ['borderTopColor', 'borderRightColor', 'borderBottomColor', 'borderLeftColor'],\n  borderBlockColor: ['borderTopColor', 'borderBottomColor'],\n  borderInlineColor: ['borderRightColor', 'borderLeftColor'],\n  borderRadius: ['borderTopLeftRadius', 'borderTopRightRadius', 'borderBottomRightRadius', 'borderBottomLeftRadius'],\n  borderStyle: ['borderTopStyle', 'borderRightStyle', 'borderBottomStyle', 'borderLeftStyle'],\n  borderBlockStyle: ['borderTopStyle', 'borderBottomStyle'],\n  borderInlineStyle: ['borderRightStyle', 'borderLeftStyle'],\n  borderWidth: ['borderTopWidth', 'borderRightWidth', 'borderBottomWidth', 'borderLeftWidth'],\n  borderBlockWidth: ['borderTopWidth', 'borderBottomWidth'],\n  borderInlineWidth: ['borderRightWidth', 'borderLeftWidth'],\n  insetBlock: ['top', 'bottom'],\n  insetInline: ['left', 'right'],\n  marginBlock: ['marginTop', 'marginBottom'],\n  marginInline: ['marginRight', 'marginLeft'],\n  paddingBlock: ['paddingTop', 'paddingBottom'],\n  paddingInline: ['paddingRight', 'paddingLeft'],\n  overflow: ['overflowX', 'overflowY'],\n  overscrollBehavior: ['overscrollBehaviorX', 'overscrollBehaviorY'],\n  borderBlockStartColor: ['borderTopColor'],\n  borderBlockStartStyle: ['borderTopStyle'],\n  borderBlockStartWidth: ['borderTopWidth'],\n  borderBlockEndColor: ['borderBottomColor'],\n  borderBlockEndStyle: ['borderBottomStyle'],\n  borderBlockEndWidth: ['borderBottomWidth'],\n  //borderInlineStartColor: ['borderLeftColor'],\n  //borderInlineStartStyle: ['borderLeftStyle'],\n  //borderInlineStartWidth: ['borderLeftWidth'],\n  //borderInlineEndColor: ['borderRightColor'],\n  //borderInlineEndStyle: ['borderRightStyle'],\n  //borderInlineEndWidth: ['borderRightWidth'],\n  borderEndStartRadius: ['borderBottomLeftRadius'],\n  borderEndEndRadius: ['borderBottomRightRadius'],\n  borderStartStartRadius: ['borderTopLeftRadius'],\n  borderStartEndRadius: ['borderTopRightRadius'],\n  insetBlockEnd: ['bottom'],\n  insetBlockStart: ['top'],\n  //insetInlineEnd: ['right'],\n  //insetInlineStart: ['left'],\n  marginBlockStart: ['marginTop'],\n  marginBlockEnd: ['marginBottom'],\n  //marginInlineStart: ['marginLeft'],\n  //marginInlineEnd: ['marginRight'],\n  paddingBlockStart: ['paddingTop'],\n  paddingBlockEnd: ['paddingBottom']\n  //paddingInlineStart: ['marginLeft'],\n  //paddingInlineEnd: ['marginRight'],\n};\n\n/**\n * Reducer\n */\n\nvar createReactDOMStyle = (style, isInline) => {\n  if (!style) {\n    return emptyObject;\n  }\n  var resolvedStyle = {};\n  var _loop = function _loop() {\n    var value = style[prop];\n    if (\n    // Ignore everything with a null value\n    value == null) {\n      return \"continue\";\n    }\n    if (prop === 'backgroundClip') {\n      // TODO: remove once this issue is fixed\n      // https://github.com/rofrischmann/inline-style-prefixer/issues/159\n      if (value === 'text') {\n        resolvedStyle.backgroundClip = value;\n        resolvedStyle.WebkitBackgroundClip = value;\n      }\n    } else if (prop === 'flex') {\n      if (value === -1) {\n        resolvedStyle.flexGrow = 0;\n        resolvedStyle.flexShrink = 1;\n        resolvedStyle.flexBasis = 'auto';\n      } else {\n        resolvedStyle.flex = value;\n      }\n    } else if (prop === 'font') {\n      resolvedStyle[prop] = value.replace('System', SYSTEM_FONT_STACK);\n    } else if (prop === 'fontFamily') {\n      if (value.indexOf('System') > -1) {\n        var stack = value.split(/,\\s*/);\n        stack[stack.indexOf('System')] = SYSTEM_FONT_STACK;\n        resolvedStyle[prop] = stack.join(',');\n      } else if (value === 'monospace') {\n        resolvedStyle[prop] = MONOSPACE_FONT_STACK;\n      } else {\n        resolvedStyle[prop] = value;\n      }\n    } else if (prop === 'textDecorationLine') {\n      // use 'text-decoration' for browsers that only support CSS2\n      // text-decoration (e.g., IE, Edge)\n      if (!supportsCSS3TextDecoration) {\n        resolvedStyle.textDecoration = value;\n      } else {\n        resolvedStyle.textDecorationLine = value;\n      }\n    } else if (prop === 'writingDirection') {\n      resolvedStyle.direction = value;\n    } else {\n      var _value = normalizeValueWithProperty(style[prop], prop);\n      var longFormProperties = STYLE_SHORT_FORM_EXPANSIONS[prop];\n      if (isInline && prop === 'inset') {\n        if (style.insetInline == null) {\n          resolvedStyle.left = _value;\n          resolvedStyle.right = _value;\n        }\n        if (style.insetBlock == null) {\n          resolvedStyle.top = _value;\n          resolvedStyle.bottom = _value;\n        }\n      } else if (isInline && prop === 'margin') {\n        if (style.marginInline == null) {\n          resolvedStyle.marginLeft = _value;\n          resolvedStyle.marginRight = _value;\n        }\n        if (style.marginBlock == null) {\n          resolvedStyle.marginTop = _value;\n          resolvedStyle.marginBottom = _value;\n        }\n      } else if (isInline && prop === 'padding') {\n        if (style.paddingInline == null) {\n          resolvedStyle.paddingLeft = _value;\n          resolvedStyle.paddingRight = _value;\n        }\n        if (style.paddingBlock == null) {\n          resolvedStyle.paddingTop = _value;\n          resolvedStyle.paddingBottom = _value;\n        }\n      } else if (longFormProperties) {\n        longFormProperties.forEach((longForm, i) => {\n          // The value of any longform property in the original styles takes\n          // precedence over the shortform's value.\n          if (style[longForm] == null) {\n            resolvedStyle[longForm] = _value;\n          }\n        });\n      } else {\n        resolvedStyle[prop] = _value;\n      }\n    }\n  };\n  for (var prop in style) {\n    var _ret = _loop();\n    if (_ret === \"continue\") continue;\n  }\n  return resolvedStyle;\n};\nexport default createReactDOMStyle;","/**\n * Copyright (c) Nicolas Gallagher.\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\nimport isWebColor from '../../../modules/isWebColor';\nimport processColor from '../../../exports/processColor';\nvar normalizeColor = function normalizeColor(color, opacity) {\n  if (opacity === void 0) {\n    opacity = 1;\n  }\n  if (color == null) return;\n  if (typeof color === 'string' && isWebColor(color)) {\n    return color;\n  }\n  var colorInt = processColor(color);\n  if (colorInt != null) {\n    var r = colorInt >> 16 & 255;\n    var g = colorInt >> 8 & 255;\n    var b = colorInt & 255;\n    var a = (colorInt >> 24 & 255) / 255;\n    var alpha = (a * opacity).toFixed(2);\n    return \"rgba(\" + r + \",\" + g + \",\" + b + \",\" + alpha + \")\";\n  }\n};\nexport default normalizeColor;","/**\n * Copyright (c) Nicolas Gallagher.\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\nvar isWebColor = color => color === 'currentcolor' || color === 'currentColor' || color === 'inherit' || color.indexOf('var(') === 0;\nexport default isWebColor;","/**\n * Copyright (c) Nicolas Gallagher.\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\nvar unitlessNumbers = {\n  animationIterationCount: true,\n  aspectRatio: true,\n  borderImageOutset: true,\n  borderImageSlice: true,\n  borderImageWidth: true,\n  boxFlex: true,\n  boxFlexGroup: true,\n  boxOrdinalGroup: true,\n  columnCount: true,\n  flex: true,\n  flexGrow: true,\n  flexOrder: true,\n  flexPositive: true,\n  flexShrink: true,\n  flexNegative: true,\n  fontWeight: true,\n  gridRow: true,\n  gridRowEnd: true,\n  gridRowGap: true,\n  gridRowStart: true,\n  gridColumn: true,\n  gridColumnEnd: true,\n  gridColumnGap: true,\n  gridColumnStart: true,\n  lineClamp: 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\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  // transform types\n  scale: true,\n  scaleX: true,\n  scaleY: true,\n  scaleZ: true,\n  // RN properties\n  shadowOpacity: true\n};\n\n/**\n * Support style names that may come passed in prefixed by adding permutations\n * of vendor prefixes.\n */\nvar prefixes = ['ms', 'Moz', 'O', 'Webkit'];\nvar prefixKey = (prefix, key) => {\n  return prefix + key.charAt(0).toUpperCase() + key.substring(1);\n};\nObject.keys(unitlessNumbers).forEach(prop => {\n  prefixes.forEach(prefix => {\n    unitlessNumbers[prefixKey(prefix, prop)] = unitlessNumbers[prop];\n  });\n});\nexport default unitlessNumbers;","/**\n * Copyright (c) Nicolas Gallagher.\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\nimport unitlessNumbers from './unitlessNumbers';\nimport normalizeColor from './normalizeColor';\nvar colorProps = {\n  backgroundColor: true,\n  borderColor: true,\n  borderTopColor: true,\n  borderRightColor: true,\n  borderBottomColor: true,\n  borderLeftColor: true,\n  color: true,\n  shadowColor: true,\n  textDecorationColor: true,\n  textShadowColor: true\n};\nexport default function normalizeValueWithProperty(value, property) {\n  var returnValue = value;\n  if ((property == null || !unitlessNumbers[property]) && typeof value === 'number') {\n    returnValue = value + \"px\";\n  } else if (property != null && colorProps[property]) {\n    returnValue = normalizeColor(value);\n  }\n  return returnValue;\n}","/**\n * Copyright (c) Nicolas Gallagher.\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 */\nimport canUseDOM from '../../../modules/canUseDom';\n\n// $FlowFixMe: HTMLStyleElement is incorrectly typed - https://github.com/facebook/flow/issues/2696\nexport default function createCSSStyleSheet(id, rootNode, textContent) {\n  if (canUseDOM) {\n    var root = rootNode != null ? rootNode : document;\n    var element = root.getElementById(id);\n    if (element == null) {\n      element = document.createElement('style');\n      element.setAttribute('id', id);\n      if (typeof textContent === 'string') {\n        element.appendChild(document.createTextNode(textContent));\n      }\n      if (root instanceof ShadowRoot) {\n        root.insertBefore(element, root.firstChild);\n      } else {\n        var head = root.head;\n        if (head) {\n          head.insertBefore(element, head.firstChild);\n        }\n      }\n    }\n    // $FlowFixMe: HTMLElement is incorrectly typed\n    return element.sheet;\n  } else {\n    return null;\n  }\n}","/**\n * Copyright (c) Nicolas Gallagher.\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\nvar slice = Array.prototype.slice;\n\n/**\n * Order-based insertion of CSS.\n *\n * Each rule is associated with a numerically defined group.\n * Groups are ordered within the style sheet according to their number, with the\n * lowest first.\n *\n * Groups are implemented using marker rules. The selector of the first rule of\n * each group is used only to encode the group number for hydration. An\n * alternative implementation could rely on CSSMediaRule, allowing groups to be\n * treated as a sub-sheet, but the Edge implementation of CSSMediaRule is\n * broken.\n * https://developer.mozilla.org/en-US/docs/Web/API/CSSMediaRule\n * https://gist.github.com/necolas/aa0c37846ad6bd3b05b727b959e82674\n */\nexport default function createOrderedCSSStyleSheet(sheet) {\n  var groups = {};\n  var selectors = {};\n\n  /**\n   * Hydrate approximate record from any existing rules in the sheet.\n   */\n  if (sheet != null) {\n    var group;\n    slice.call(sheet.cssRules).forEach((cssRule, i) => {\n      var cssText = cssRule.cssText;\n      // Create record of existing selectors and rules\n      if (cssText.indexOf('stylesheet-group') > -1) {\n        group = decodeGroupRule(cssRule);\n        groups[group] = {\n          start: i,\n          rules: [cssText]\n        };\n      } else {\n        var selectorText = getSelectorText(cssText);\n        if (selectorText != null) {\n          selectors[selectorText] = true;\n          groups[group].rules.push(cssText);\n        }\n      }\n    });\n  }\n  function sheetInsert(sheet, group, text) {\n    var orderedGroups = getOrderedGroups(groups);\n    var groupIndex = orderedGroups.indexOf(group);\n    var nextGroupIndex = groupIndex + 1;\n    var nextGroup = orderedGroups[nextGroupIndex];\n    // Insert rule before the next group, or at the end of the stylesheet\n    var position = nextGroup != null && groups[nextGroup].start != null ? groups[nextGroup].start : sheet.cssRules.length;\n    var isInserted = insertRuleAt(sheet, text, position);\n    if (isInserted) {\n      // Set the starting index of the new group\n      if (groups[group].start == null) {\n        groups[group].start = position;\n      }\n      // Increment the starting index of all subsequent groups\n      for (var i = nextGroupIndex; i < orderedGroups.length; i += 1) {\n        var groupNumber = orderedGroups[i];\n        var previousStart = groups[groupNumber].start || 0;\n        groups[groupNumber].start = previousStart + 1;\n      }\n    }\n    return isInserted;\n  }\n  var OrderedCSSStyleSheet = {\n    /**\n     * The textContent of the style sheet.\n     */\n    getTextContent() {\n      return getOrderedGroups(groups).map(group => {\n        var rules = groups[group].rules;\n        // Sorting provides deterministic order of styles in group for\n        // build-time extraction of the style sheet.\n        var marker = rules.shift();\n        rules.sort();\n        rules.unshift(marker);\n        return rules.join('\\n');\n      }).join('\\n');\n    },\n    /**\n     * Insert a rule into the style sheet\n     */\n    insert(cssText, groupValue) {\n      var group = Number(groupValue);\n\n      // Create a new group.\n      if (groups[group] == null) {\n        var markerRule = encodeGroupRule(group);\n        // Create the internal record.\n        groups[group] = {\n          start: null,\n          rules: [markerRule]\n        };\n        // Update CSSOM.\n        if (sheet != null) {\n          sheetInsert(sheet, group, markerRule);\n        }\n      }\n\n      // selectorText is more reliable than cssText for insertion checks. The\n      // browser excludes vendor-prefixed properties and rewrites certain values\n      // making cssText more likely to be different from what was inserted.\n      var selectorText = getSelectorText(cssText);\n      if (selectorText != null && selectors[selectorText] == null) {\n        // Update the internal records.\n        selectors[selectorText] = true;\n        groups[group].rules.push(cssText);\n        // Update CSSOM.\n        if (sheet != null) {\n          var isInserted = sheetInsert(sheet, group, cssText);\n          if (!isInserted) {\n            // Revert internal record change if a rule was rejected (e.g.,\n            // unrecognized pseudo-selector)\n            groups[group].rules.pop();\n          }\n        }\n      }\n    }\n  };\n  return OrderedCSSStyleSheet;\n}\n\n/**\n * Helper functions\n */\n\nfunction encodeGroupRule(group) {\n  return \"[stylesheet-group=\\\"\" + group + \"\\\"]{}\";\n}\nvar groupPattern = /[\"']/g;\nfunction decodeGroupRule(cssRule) {\n  return Number(cssRule.selectorText.split(groupPattern)[1]);\n}\nfunction getOrderedGroups(obj) {\n  return Object.keys(obj).map(Number).sort((a, b) => a > b ? 1 : -1);\n}\nvar selectorPattern = /\\s*([,])\\s*/g;\nfunction getSelectorText(cssText) {\n  var selector = cssText.split('{')[0].trim();\n  return selector !== '' ? selector.replace(selectorPattern, '$1') : null;\n}\nfunction insertRuleAt(root, cssText, position) {\n  try {\n    // $FlowFixMe: Flow is missing CSSOM types needed to type 'root'.\n    root.insertRule(cssText, position);\n    return true;\n  } catch (e) {\n    // JSDOM doesn't support `CSSSMediaRule#insertRule`.\n    // Also ignore errors that occur from attempting to insert vendor-prefixed selectors.\n    return false;\n  }\n}","import originalCreateOrderedCSSStyleSheet from \"react-native-web/dist/exports/StyleSheet/dom/createOrderedCSSStyleSheet\";\nconst createOrderedCSSStyleSheet = (sheet) => {\n  let layerRule = null;\n  let fakeSheet = null;\n  if (sheet !== null) {\n    if (typeof CSSLayerBlockRule !== \"undefined\" && sheet.cssRules[0] instanceof CSSLayerBlockRule) {\n      layerRule = sheet.cssRules[0];\n    } else {\n      const layerIndex = sheet.insertRule(\"@layer rnw {}\", 0);\n      layerRule = sheet.cssRules[layerIndex];\n    }\n    fakeSheet = {\n      // Increment index by 1 to skip the layer rule\n      insertRule: (text, index) => sheet.insertRule(text, index === void 0 ? 1 : index + 1),\n      get cssRules() {\n        return Array.from(sheet.cssRules).slice(1);\n      }\n    };\n  }\n  const originalLayered = originalCreateOrderedCSSStyleSheet(layerRule);\n  const original = originalCreateOrderedCSSStyleSheet(fakeSheet);\n  return {\n    getTextContent: () => {\n      return `@layer rnw { ${originalLayered.getTextContent()} }\n${original.getTextContent()}`;\n    },\n    insert: (cssText, groupValue) => {\n      if (groupValue <= 1) {\n        originalLayered.insert(cssText, groupValue);\n        return;\n      }\n      original.insert(cssText, groupValue);\n    }\n  };\n};\nexport default createOrderedCSSStyleSheet;\n","/**\n * Copyright (c) Nicolas Gallagher.\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\nimport canUseDOM from '../../../modules/canUseDom';\nimport createCSSStyleSheet from './createCSSStyleSheet';\nimport createOrderedCSSStyleSheet from './createOrderedCSSStyleSheet';\nvar defaultId = 'react-native-stylesheet';\nvar roots = new WeakMap();\nvar sheets = [];\nvar initialRules = [\n// minimal top-level reset\n'html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0);}', 'body{margin:0;}',\n// minimal form pseudo-element reset\n'button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0;}', 'input::-webkit-search-cancel-button,input::-webkit-search-decoration,input::-webkit-search-results-button,input::-webkit-search-results-decoration{display:none;}'];\nexport function createSheet(root, id) {\n  if (id === void 0) {\n    id = defaultId;\n  }\n  var sheet;\n  if (canUseDOM) {\n    var rootNode = root != null ? root.getRootNode() : document;\n    // Create the initial style sheet\n    if (sheets.length === 0) {\n      sheet = createOrderedCSSStyleSheet(createCSSStyleSheet(id));\n      initialRules.forEach(rule => {\n        sheet.insert(rule, 0);\n      });\n      roots.set(rootNode, sheets.length);\n      sheets.push(sheet);\n    } else {\n      var index = roots.get(rootNode);\n      if (index == null) {\n        var initialSheet = sheets[0];\n        // If we're creating a new sheet, populate it with existing styles\n        var textContent = initialSheet != null ? initialSheet.getTextContent() : '';\n        // Cast rootNode to 'any' because Flow types for getRootNode are wrong\n        sheet = createOrderedCSSStyleSheet(createCSSStyleSheet(id, rootNode, textContent));\n        roots.set(rootNode, sheets.length);\n        sheets.push(sheet);\n      } else {\n        sheet = sheets[index];\n      }\n    }\n  } else {\n    // Create the initial style sheet\n    if (sheets.length === 0) {\n      sheet = createOrderedCSSStyleSheet(createCSSStyleSheet(id));\n      initialRules.forEach(rule => {\n        sheet.insert(rule, 0);\n      });\n      sheets.push(sheet);\n    } else {\n      sheet = sheets[0];\n    }\n  }\n  return {\n    getTextContent() {\n      return sheet.getTextContent();\n    },\n    id,\n    insert(cssText, groupValue) {\n      sheets.forEach(s => {\n        s.insert(cssText, groupValue);\n      });\n    }\n  };\n}","/**\n * Copyright (c) Nicolas Gallagher.\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\nvar uppercasePattern = /[A-Z]/g;\nvar msPattern = /^ms-/;\nvar cache = {};\nfunction toHyphenLower(match) {\n  return '-' + match.toLowerCase();\n}\nfunction hyphenateStyleName(name) {\n  if (name in cache) {\n    return cache[name];\n  }\n  var hName = name.replace(uppercasePattern, toHyphenLower);\n  return cache[name] = msPattern.test(hName) ? '-' + hName : hName;\n}\nexport default hyphenateStyleName;","import crossFade from 'inline-style-prefixer/lib/plugins/crossFade';\nimport imageSet from 'inline-style-prefixer/lib/plugins/imageSet';\nimport logical from 'inline-style-prefixer/lib/plugins/logical';\nimport position from 'inline-style-prefixer/lib/plugins/position';\nimport sizing from 'inline-style-prefixer/lib/plugins/sizing';\nimport transition from 'inline-style-prefixer/lib/plugins/transition';\nvar w = ['Webkit'];\nvar m = ['Moz'];\nvar wm = ['Webkit', 'Moz'];\nvar wms = ['Webkit', 'ms'];\nvar wmms = ['Webkit', 'Moz', 'ms'];\nexport default {\n  plugins: [crossFade, imageSet, logical, position, sizing, transition],\n  prefixMap: {\n    appearance: wmms,\n    userSelect: wm,\n    textEmphasisPosition: wms,\n    textEmphasis: wms,\n    textEmphasisStyle: wms,\n    textEmphasisColor: wms,\n    boxDecorationBreak: wms,\n    clipPath: w,\n    maskImage: wms,\n    maskMode: wms,\n    maskRepeat: wms,\n    maskPosition: wms,\n    maskClip: wms,\n    maskOrigin: wms,\n    maskSize: wms,\n    maskComposite: wms,\n    mask: wms,\n    maskBorderSource: wms,\n    maskBorderMode: wms,\n    maskBorderSlice: wms,\n    maskBorderWidth: wms,\n    maskBorderOutset: wms,\n    maskBorderRepeat: wms,\n    maskBorder: wms,\n    maskType: wms,\n    textDecorationStyle: w,\n    textDecorationSkip: w,\n    textDecorationLine: w,\n    textDecorationColor: w,\n    filter: w,\n    breakAfter: w,\n    breakBefore: w,\n    breakInside: w,\n    columnCount: w,\n    columnFill: w,\n    columnGap: w,\n    columnRule: w,\n    columnRuleColor: w,\n    columnRuleStyle: w,\n    columnRuleWidth: w,\n    columns: w,\n    columnSpan: w,\n    columnWidth: w,\n    backdropFilter: w,\n    hyphens: w,\n    flowInto: w,\n    flowFrom: w,\n    regionFragment: w,\n    textOrientation: w,\n    tabSize: m,\n    fontKerning: w,\n    textSizeAdjust: w\n  }\n};","/**\n * Copyright (c) Nicolas Gallagher.\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\nimport createPrefixer from 'inline-style-prefixer/lib/createPrefixer';\nimport staticData from './static';\nvar prefixAll = createPrefixer(staticData);\nexport default prefixAll;","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"animationKeyframes\"];\n/**\n * Copyright (c) Nicolas Gallagher.\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\nimport createReactDOMStyle from './createReactDOMStyle';\nimport hash from './hash';\nimport hyphenateStyleName from './hyphenateStyleName';\nimport normalizeValueWithProperty from './normalizeValueWithProperty';\nimport prefixStyles from '../../../modules/prefixStyles';\nvar cache = new Map();\nvar emptyObject = {};\nvar classicGroup = 1;\nvar atomicGroup = 3;\nvar customGroup = {\n  borderColor: 2,\n  borderRadius: 2,\n  borderStyle: 2,\n  borderWidth: 2,\n  display: 2,\n  flex: 2,\n  inset: 2,\n  margin: 2,\n  overflow: 2,\n  overscrollBehavior: 2,\n  padding: 2,\n  insetBlock: 2.1,\n  insetInline: 2.1,\n  marginInline: 2.1,\n  marginBlock: 2.1,\n  paddingInline: 2.1,\n  paddingBlock: 2.1,\n  borderBlockStartColor: 2.2,\n  borderBlockStartStyle: 2.2,\n  borderBlockStartWidth: 2.2,\n  borderBlockEndColor: 2.2,\n  borderBlockEndStyle: 2.2,\n  borderBlockEndWidth: 2.2,\n  borderInlineStartColor: 2.2,\n  borderInlineStartStyle: 2.2,\n  borderInlineStartWidth: 2.2,\n  borderInlineEndColor: 2.2,\n  borderInlineEndStyle: 2.2,\n  borderInlineEndWidth: 2.2,\n  borderEndStartRadius: 2.2,\n  borderEndEndRadius: 2.2,\n  borderStartStartRadius: 2.2,\n  borderStartEndRadius: 2.2,\n  insetBlockEnd: 2.2,\n  insetBlockStart: 2.2,\n  insetInlineEnd: 2.2,\n  insetInlineStart: 2.2,\n  marginBlockStart: 2.2,\n  marginBlockEnd: 2.2,\n  marginInlineStart: 2.2,\n  marginInlineEnd: 2.2,\n  paddingBlockStart: 2.2,\n  paddingBlockEnd: 2.2,\n  paddingInlineStart: 2.2,\n  paddingInlineEnd: 2.2\n};\nvar borderTopLeftRadius = 'borderTopLeftRadius';\nvar borderTopRightRadius = 'borderTopRightRadius';\nvar borderBottomLeftRadius = 'borderBottomLeftRadius';\nvar borderBottomRightRadius = 'borderBottomRightRadius';\nvar borderLeftColor = 'borderLeftColor';\nvar borderLeftStyle = 'borderLeftStyle';\nvar borderLeftWidth = 'borderLeftWidth';\nvar borderRightColor = 'borderRightColor';\nvar borderRightStyle = 'borderRightStyle';\nvar borderRightWidth = 'borderRightWidth';\nvar right = 'right';\nvar marginLeft = 'marginLeft';\nvar marginRight = 'marginRight';\nvar paddingLeft = 'paddingLeft';\nvar paddingRight = 'paddingRight';\nvar left = 'left';\n\n// Map of LTR property names to their BiDi equivalent.\nvar PROPERTIES_FLIP = {\n  [borderTopLeftRadius]: borderTopRightRadius,\n  [borderTopRightRadius]: borderTopLeftRadius,\n  [borderBottomLeftRadius]: borderBottomRightRadius,\n  [borderBottomRightRadius]: borderBottomLeftRadius,\n  [borderLeftColor]: borderRightColor,\n  [borderLeftStyle]: borderRightStyle,\n  [borderLeftWidth]: borderRightWidth,\n  [borderRightColor]: borderLeftColor,\n  [borderRightStyle]: borderLeftStyle,\n  [borderRightWidth]: borderLeftWidth,\n  [left]: right,\n  [marginLeft]: marginRight,\n  [marginRight]: marginLeft,\n  [paddingLeft]: paddingRight,\n  [paddingRight]: paddingLeft,\n  [right]: left\n};\n\n// Map of I18N property names to their LTR equivalent.\nvar PROPERTIES_I18N = {\n  borderStartStartRadius: borderTopLeftRadius,\n  borderStartEndRadius: borderTopRightRadius,\n  borderEndStartRadius: borderBottomLeftRadius,\n  borderEndEndRadius: borderBottomRightRadius,\n  borderInlineStartColor: borderLeftColor,\n  borderInlineStartStyle: borderLeftStyle,\n  borderInlineStartWidth: borderLeftWidth,\n  borderInlineEndColor: borderRightColor,\n  borderInlineEndStyle: borderRightStyle,\n  borderInlineEndWidth: borderRightWidth,\n  insetInlineEnd: right,\n  insetInlineStart: left,\n  marginInlineStart: marginLeft,\n  marginInlineEnd: marginRight,\n  paddingInlineStart: paddingLeft,\n  paddingInlineEnd: paddingRight\n};\nvar PROPERTIES_VALUE = ['clear', 'float', 'textAlign'];\nexport function atomic(style) {\n  var compiledStyle = {\n    $$css: true\n  };\n  var compiledRules = [];\n  function atomicCompile(srcProp, prop, value) {\n    var valueString = stringifyValueWithProperty(value, prop);\n    var cacheKey = prop + valueString;\n    var cachedResult = cache.get(cacheKey);\n    var identifier;\n    if (cachedResult != null) {\n      identifier = cachedResult[0];\n      compiledRules.push(cachedResult[1]);\n    } else {\n      var v = srcProp !== prop ? cacheKey : valueString;\n      identifier = createIdentifier('r', srcProp, v);\n      var order = customGroup[srcProp] || atomicGroup;\n      var rules = createAtomicRules(identifier, prop, value);\n      var orderedRules = [rules, order];\n      compiledRules.push(orderedRules);\n      cache.set(cacheKey, [identifier, orderedRules]);\n    }\n    return identifier;\n  }\n  Object.keys(style).sort().forEach(srcProp => {\n    var value = style[srcProp];\n    if (value != null) {\n      var localizeableValue;\n      // BiDi flip values\n      if (PROPERTIES_VALUE.indexOf(srcProp) > -1) {\n        var _left = atomicCompile(srcProp, srcProp, 'left');\n        var _right = atomicCompile(srcProp, srcProp, 'right');\n        if (value === 'start') {\n          localizeableValue = [_left, _right];\n        } else if (value === 'end') {\n          localizeableValue = [_right, _left];\n        }\n      }\n      // BiDi flip properties\n      var propPolyfill = PROPERTIES_I18N[srcProp];\n      if (propPolyfill != null) {\n        var ltr = atomicCompile(srcProp, propPolyfill, value);\n        var rtl = atomicCompile(srcProp, PROPERTIES_FLIP[propPolyfill], value);\n        localizeableValue = [ltr, rtl];\n      }\n      // BiDi flip transitionProperty value\n      if (srcProp === 'transitionProperty') {\n        var values = Array.isArray(value) ? value : [value];\n        var polyfillIndices = [];\n        for (var i = 0; i < values.length; i++) {\n          var val = values[i];\n          if (typeof val === 'string' && PROPERTIES_I18N[val] != null) {\n            polyfillIndices.push(i);\n          }\n        }\n        if (polyfillIndices.length > 0) {\n          var ltrPolyfillValues = [...values];\n          var rtlPolyfillValues = [...values];\n          polyfillIndices.forEach(i => {\n            var ltrVal = ltrPolyfillValues[i];\n            if (typeof ltrVal === 'string') {\n              var ltrPolyfill = PROPERTIES_I18N[ltrVal];\n              var rtlPolyfill = PROPERTIES_FLIP[ltrPolyfill];\n              ltrPolyfillValues[i] = ltrPolyfill;\n              rtlPolyfillValues[i] = rtlPolyfill;\n              var _ltr = atomicCompile(srcProp, srcProp, ltrPolyfillValues);\n              var _rtl = atomicCompile(srcProp, srcProp, rtlPolyfillValues);\n              localizeableValue = [_ltr, _rtl];\n            }\n          });\n        }\n      }\n      if (localizeableValue == null) {\n        localizeableValue = atomicCompile(srcProp, srcProp, value);\n      } else {\n        compiledStyle['$$css$localize'] = true;\n      }\n      compiledStyle[srcProp] = localizeableValue;\n    }\n  });\n  return [compiledStyle, compiledRules];\n}\n\n/**\n * Compile simple style object to classic CSS rules.\n * No support for 'placeholderTextColor', 'scrollbarWidth', or 'pointerEvents'.\n */\nexport function classic(style, name) {\n  var compiledStyle = {\n    $$css: true\n  };\n  var compiledRules = [];\n  var animationKeyframes = style.animationKeyframes,\n    rest = _objectWithoutPropertiesLoose(style, _excluded);\n  var identifier = createIdentifier('css', name, JSON.stringify(style));\n  var selector = \".\" + identifier;\n  var animationName;\n  if (animationKeyframes != null) {\n    var _processKeyframesValu = processKeyframesValue(animationKeyframes),\n      animationNames = _processKeyframesValu[0],\n      keyframesRules = _processKeyframesValu[1];\n    animationName = animationNames.join(',');\n    compiledRules.push(...keyframesRules);\n  }\n  var block = createDeclarationBlock(_objectSpread(_objectSpread({}, rest), {}, {\n    animationName\n  }));\n  compiledRules.push(\"\" + selector + block);\n  compiledStyle[identifier] = identifier;\n  return [compiledStyle, [[compiledRules, classicGroup]]];\n}\n\n/**\n * Compile simple style object to inline DOM styles.\n * No support for 'animationKeyframes', 'placeholderTextColor', 'scrollbarWidth', or 'pointerEvents'.\n */\nexport function inline(originalStyle, isRTL) {\n  var style = originalStyle || emptyObject;\n  var frozenProps = {};\n  var nextStyle = {};\n  var _loop = function _loop() {\n    var originalValue = style[originalProp];\n    var prop = originalProp;\n    var value = originalValue;\n    if (!Object.prototype.hasOwnProperty.call(style, originalProp) || originalValue == null) {\n      return \"continue\";\n    }\n\n    // BiDi flip values\n    if (PROPERTIES_VALUE.indexOf(originalProp) > -1) {\n      if (originalValue === 'start') {\n        value = isRTL ? 'right' : 'left';\n      } else if (originalValue === 'end') {\n        value = isRTL ? 'left' : 'right';\n      }\n    }\n    // BiDi flip properties\n    var propPolyfill = PROPERTIES_I18N[originalProp];\n    if (propPolyfill != null) {\n      prop = isRTL ? PROPERTIES_FLIP[propPolyfill] : propPolyfill;\n    }\n    // BiDi flip transitionProperty value\n    if (originalProp === 'transitionProperty') {\n      // $FlowFixMe\n      var originalValues = Array.isArray(originalValue) ? originalValue : [originalValue];\n      originalValues.forEach((val, i) => {\n        if (typeof val === 'string') {\n          var valuePolyfill = PROPERTIES_I18N[val];\n          if (valuePolyfill != null) {\n            originalValues[i] = isRTL ? PROPERTIES_FLIP[valuePolyfill] : valuePolyfill;\n            value = originalValues.join(' ');\n          }\n        }\n      });\n    }\n\n    // Create finalized style\n    if (!frozenProps[prop]) {\n      nextStyle[prop] = value;\n    }\n    if (prop === originalProp) {\n      frozenProps[prop] = true;\n    }\n\n    //    if (PROPERTIES_I18N.hasOwnProperty(originalProp)) {\n    //    frozenProps[prop] = true;\n    //}\n  };\n  for (var originalProp in style) {\n    var _ret = _loop();\n    if (_ret === \"continue\") continue;\n  }\n  return createReactDOMStyle(nextStyle, true);\n}\n\n/**\n * Create a value string that normalizes different input values with a common\n * output.\n */\nexport function stringifyValueWithProperty(value, property) {\n  // e.g., 0 => '0px', 'black' => 'rgba(0,0,0,1)'\n  var normalizedValue = normalizeValueWithProperty(value, property);\n  return typeof normalizedValue !== 'string' ? JSON.stringify(normalizedValue || '') : normalizedValue;\n}\n\n/**\n * Create the Atomic CSS rules needed for a given StyleSheet rule.\n * Translates StyleSheet declarations to CSS.\n */\nfunction createAtomicRules(identifier, property, value) {\n  var rules = [];\n  var selector = \".\" + identifier;\n\n  // Handle non-standard properties and object values that require multiple\n  // CSS rules to be created.\n  switch (property) {\n    case 'animationKeyframes':\n      {\n        var _processKeyframesValu2 = processKeyframesValue(value),\n          animationNames = _processKeyframesValu2[0],\n          keyframesRules = _processKeyframesValu2[1];\n        var block = createDeclarationBlock({\n          animationName: animationNames.join(',')\n        });\n        rules.push(\"\" + selector + block, ...keyframesRules);\n        break;\n      }\n\n    // Equivalent to using '::placeholder'\n    case 'placeholderTextColor':\n      {\n        var _block = createDeclarationBlock({\n          color: value,\n          opacity: 1\n        });\n        rules.push(selector + \"::-webkit-input-placeholder\" + _block, selector + \"::-moz-placeholder\" + _block, selector + \":-ms-input-placeholder\" + _block, selector + \"::placeholder\" + _block);\n        break;\n      }\n\n    // Polyfill for additional 'pointer-events' values\n    // See d13f78622b233a0afc0c7a200c0a0792c8ca9e58\n    // See https://reactnative.dev/docs/view#pointerevents\n    case 'pointerEvents':\n      {\n        var finalValue = value;\n        if (value === 'auto') {\n          finalValue = 'auto!important';\n        } else if (value === 'none') {\n          finalValue = 'none!important';\n          var _block2 = createDeclarationBlock({\n            pointerEvents: 'none'\n          });\n          rules.push(selector + \">* \" + _block2);\n        } else if (value === 'box-none') {\n          finalValue = 'none!important';\n          var _block3 = createDeclarationBlock({\n            pointerEvents: 'auto'\n          });\n          rules.push(selector + \">* \" + _block3);\n        } else if (value === 'box-only') {\n          finalValue = 'auto!important';\n          var _block4 = createDeclarationBlock({\n            pointerEvents: 'none'\n          });\n          rules.push(selector + \">* \" + _block4);\n        }\n        var _block5 = createDeclarationBlock({\n          pointerEvents: finalValue\n        });\n        rules.push(\"\" + selector + _block5);\n        break;\n      }\n\n    // Polyfill for draft spec\n    // https://drafts.csswg.org/css-scrollbars-1/\n    case 'scrollbarWidth':\n      {\n        if (value === 'none') {\n          rules.push(selector + \"::-webkit-scrollbar{display:none}\");\n        }\n        var _block6 = createDeclarationBlock({\n          scrollbarWidth: value\n        });\n        rules.push(\"\" + selector + _block6);\n        break;\n      }\n    default:\n      {\n        var _block7 = createDeclarationBlock({\n          [property]: value\n        });\n        rules.push(\"\" + selector + _block7);\n        break;\n      }\n  }\n  return rules;\n}\n\n/**\n * Creates a CSS declaration block from a StyleSheet object.\n */\nfunction createDeclarationBlock(style) {\n  var domStyle = prefixStyles(createReactDOMStyle(style));\n  var declarationsString = Object.keys(domStyle).map(property => {\n    var value = domStyle[property];\n    var prop = hyphenateStyleName(property);\n    // The prefixer may return an array of values:\n    // { display: [ '-webkit-flex', 'flex' ] }\n    // to represent \"fallback\" declarations\n    // { display: -webkit-flex; display: flex; }\n    if (Array.isArray(value)) {\n      return value.map(v => prop + \":\" + v).join(';');\n    } else {\n      return prop + \":\" + value;\n    }\n  })\n  // Once properties are hyphenated, this will put the vendor\n  // prefixed and short-form properties first in the list.\n  .sort().join(';');\n  return \"{\" + declarationsString + \";}\";\n}\n\n/**\n * An identifier is associated with a unique set of styles.\n */\nfunction createIdentifier(prefix, name, key) {\n  var hashedString = hash(name + key);\n  return process.env.NODE_ENV !== 'production' ? prefix + \"-\" + name + \"-\" + hashedString : prefix + \"-\" + hashedString;\n}\n\n/**\n * Create individual CSS keyframes rules.\n */\nfunction createKeyframes(keyframes) {\n  var prefixes = ['-webkit-', ''];\n  var identifier = createIdentifier('r', 'animation', JSON.stringify(keyframes));\n  var steps = '{' + Object.keys(keyframes).map(stepName => {\n    var rule = keyframes[stepName];\n    var block = createDeclarationBlock(rule);\n    return \"\" + stepName + block;\n  }).join('') + '}';\n  var rules = prefixes.map(prefix => {\n    return \"@\" + prefix + \"keyframes \" + identifier + steps;\n  });\n  return [identifier, rules];\n}\n\n/**\n * Create CSS keyframes rules and names from a StyleSheet keyframes object.\n */\nfunction processKeyframesValue(keyframesValue) {\n  if (typeof keyframesValue === 'number') {\n    throw new Error(\"Invalid CSS keyframes type: \" + typeof keyframesValue);\n  }\n  var animationNames = [];\n  var rules = [];\n  var value = Array.isArray(keyframesValue) ? keyframesValue : [keyframesValue];\n  value.forEach(keyframes => {\n    if (typeof keyframes === 'string') {\n      // Support external animation libraries (identifiers only)\n      animationNames.push(keyframes);\n    } else {\n      // Create rules for each of the keyframes\n      var _createKeyframes = createKeyframes(keyframes),\n        identifier = _createKeyframes[0],\n        keyframesRules = _createKeyframes[1];\n      animationNames.push(identifier);\n      rules.push(...keyframesRules);\n    }\n  });\n  return [animationNames, rules];\n}","/* eslint-disable */\n\n/**\n * JS Implementation of MurmurHash2\n *\n * @author <a href=\"mailto:gary.court@gmail.com\">Gary Court</a>\n * @see http://github.com/garycourt/murmurhash-js\n * @author <a href=\"mailto:aappleby@gmail.com\">Austin Appleby</a>\n * @see http://sites.google.com/site/murmurhash/\n *\n * @param {string} str ASCII only\n * @param {number} seed Positive integer only\n * @return {number} 32-bit positive integer hash\n *\n * \n */\n\nfunction murmurhash2_32_gc(str, seed) {\n  var l = str.length,\n    h = seed ^ l,\n    i = 0,\n    k;\n  while (l >= 4) {\n    k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n    k = (k & 0xffff) * 0x5bd1e995 + (((k >>> 16) * 0x5bd1e995 & 0xffff) << 16);\n    k ^= k >>> 24;\n    k = (k & 0xffff) * 0x5bd1e995 + (((k >>> 16) * 0x5bd1e995 & 0xffff) << 16);\n    h = (h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0x5bd1e995 & 0xffff) << 16) ^ k;\n    l -= 4;\n    ++i;\n  }\n  switch (l) {\n    case 3:\n      h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n    case 2:\n      h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n    case 1:\n      h ^= str.charCodeAt(i) & 0xff;\n      h = (h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0x5bd1e995 & 0xffff) << 16);\n  }\n  h ^= h >>> 13;\n  h = (h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0x5bd1e995 & 0xffff) << 16);\n  h ^= h >>> 15;\n  return h >>> 0;\n}\nvar hash = str => murmurhash2_32_gc(str, 1).toString(36);\nexport default hash;","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"writingDirection\"];\n/**\n * Copyright (c) Nicolas Gallagher.\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\nimport { atomic, classic, inline } from './compiler';\nimport { createSheet } from './dom';\nimport { localizeStyle } from 'styleq/transform-localize-style';\nimport { preprocess } from './preprocess';\nimport { styleq } from 'styleq';\nimport { validate } from './validate';\nimport canUseDOM from '../../modules/canUseDom';\nvar staticStyleMap = new WeakMap();\nvar sheet = createSheet();\nvar defaultPreprocessOptions = {\n  shadow: true,\n  textShadow: true\n};\nfunction customStyleq(styles, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  var _options = options,\n    writingDirection = _options.writingDirection,\n    preprocessOptions = _objectWithoutPropertiesLoose(_options, _excluded);\n  var isRTL = writingDirection === 'rtl';\n  return styleq.factory({\n    transform(style) {\n      var compiledStyle = staticStyleMap.get(style);\n      if (compiledStyle != null) {\n        return localizeStyle(compiledStyle, isRTL);\n      }\n      return preprocess(style, _objectSpread(_objectSpread({}, defaultPreprocessOptions), preprocessOptions));\n    }\n  })(styles);\n}\nfunction insertRules(compiledOrderedRules) {\n  compiledOrderedRules.forEach(_ref => {\n    var rules = _ref[0],\n      order = _ref[1];\n    if (sheet != null) {\n      rules.forEach(rule => {\n        sheet.insert(rule, order);\n      });\n    }\n  });\n}\nfunction compileAndInsertAtomic(style) {\n  var _atomic = atomic(preprocess(style, defaultPreprocessOptions)),\n    compiledStyle = _atomic[0],\n    compiledOrderedRules = _atomic[1];\n  insertRules(compiledOrderedRules);\n  return compiledStyle;\n}\nfunction compileAndInsertReset(style, key) {\n  var _classic = classic(style, key),\n    compiledStyle = _classic[0],\n    compiledOrderedRules = _classic[1];\n  insertRules(compiledOrderedRules);\n  return compiledStyle;\n}\n\n/* ----- API ----- */\n\nvar absoluteFillObject = {\n  position: 'absolute',\n  left: 0,\n  right: 0,\n  top: 0,\n  bottom: 0\n};\nvar absoluteFill = create({\n  x: _objectSpread({}, absoluteFillObject)\n}).x;\n\n/**\n * create\n */\nfunction create(styles) {\n  Object.keys(styles).forEach(key => {\n    var styleObj = styles[key];\n    // Only compile at runtime if the style is not already compiled\n    if (styleObj != null && styleObj.$$css !== true) {\n      var compiledStyles;\n      if (key.indexOf('$raw') > -1) {\n        compiledStyles = compileAndInsertReset(styleObj, key.split('$raw')[0]);\n      } else {\n        if (process.env.NODE_ENV !== 'production') {\n          validate(styleObj);\n          styles[key] = Object.freeze(styleObj);\n        }\n        compiledStyles = compileAndInsertAtomic(styleObj);\n      }\n      staticStyleMap.set(styleObj, compiledStyles);\n    }\n  });\n  return styles;\n}\n\n/**\n * compose\n */\nfunction compose(style1, style2) {\n  if (process.env.NODE_ENV !== 'production') {\n    /* eslint-disable prefer-rest-params */\n    var len = arguments.length;\n    if (len > 2) {\n      var readableStyles = [...arguments].map(a => flatten(a));\n      throw new Error(\"StyleSheet.compose() only accepts 2 arguments, received \" + len + \": \" + JSON.stringify(readableStyles));\n    }\n    /* eslint-enable prefer-rest-params */\n    /*\n    console.warn(\n      'StyleSheet.compose(a, b) is deprecated; use array syntax, i.e., [a,b].'\n    );\n    */\n  }\n  return [style1, style2];\n}\n\n/**\n * flatten\n */\nfunction flatten() {\n  for (var _len = arguments.length, styles = new Array(_len), _key = 0; _key < _len; _key++) {\n    styles[_key] = arguments[_key];\n  }\n  var flatArray = styles.flat(Infinity);\n  var result = {};\n  for (var i = 0; i < flatArray.length; i++) {\n    var style = flatArray[i];\n    if (style != null && typeof style === 'object') {\n      // $FlowFixMe\n      Object.assign(result, style);\n    }\n  }\n  return result;\n}\n\n/**\n * getSheet\n */\nfunction getSheet() {\n  return {\n    id: sheet.id,\n    textContent: sheet.getTextContent()\n  };\n}\n\n/**\n * resolve\n */\n\nfunction StyleSheet(styles, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  var isRTL = options.writingDirection === 'rtl';\n  var styleProps = customStyleq(styles, options);\n  if (Array.isArray(styleProps) && styleProps[1] != null) {\n    styleProps[1] = inline(styleProps[1], isRTL);\n  }\n  return styleProps;\n}\nStyleSheet.absoluteFill = absoluteFill;\nStyleSheet.absoluteFillObject = absoluteFillObject;\nStyleSheet.create = create;\nStyleSheet.compose = compose;\nStyleSheet.flatten = flatten;\nStyleSheet.getSheet = getSheet;\n// `hairlineWidth` is not implemented using screen density as browsers may\n// round sub-pixel values down to `0`, causing the line not to be rendered.\nStyleSheet.hairlineWidth = 1;\nif (canUseDOM && window.__REACT_DEVTOOLS_GLOBAL_HOOK__) {\n  window.__REACT_DEVTOOLS_GLOBAL_HOOK__.resolveRNStyle = StyleSheet.flatten;\n}\nvar stylesheet = StyleSheet;\nexport default stylesheet;","/**\n * Copyright (c) Nicolas Gallagher.\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\nimport normalizeColor from './compiler/normalizeColor';\nimport normalizeValueWithProperty from './compiler/normalizeValueWithProperty';\nimport { warnOnce } from '../../modules/warnOnce';\nvar emptyObject = {};\n\n/**\n * Shadows\n */\n\nvar defaultOffset = {\n  height: 0,\n  width: 0\n};\nexport var createBoxShadowValue = style => {\n  var shadowColor = style.shadowColor,\n    shadowOffset = style.shadowOffset,\n    shadowOpacity = style.shadowOpacity,\n    shadowRadius = style.shadowRadius;\n  var _ref = shadowOffset || defaultOffset,\n    height = _ref.height,\n    width = _ref.width;\n  var offsetX = normalizeValueWithProperty(width);\n  var offsetY = normalizeValueWithProperty(height);\n  var blurRadius = normalizeValueWithProperty(shadowRadius || 0);\n  var color = normalizeColor(shadowColor || 'black', shadowOpacity);\n  if (color != null && offsetX != null && offsetY != null && blurRadius != null) {\n    return offsetX + \" \" + offsetY + \" \" + blurRadius + \" \" + color;\n  }\n};\nexport var createTextShadowValue = style => {\n  var textShadowColor = style.textShadowColor,\n    textShadowOffset = style.textShadowOffset,\n    textShadowRadius = style.textShadowRadius;\n  var _ref2 = textShadowOffset || defaultOffset,\n    height = _ref2.height,\n    width = _ref2.width;\n  var radius = textShadowRadius || 0;\n  var offsetX = normalizeValueWithProperty(width);\n  var offsetY = normalizeValueWithProperty(height);\n  var blurRadius = normalizeValueWithProperty(radius);\n  var color = normalizeValueWithProperty(textShadowColor, 'textShadowColor');\n  if (color && (height !== 0 || width !== 0 || radius !== 0) && offsetX != null && offsetY != null && blurRadius != null) {\n    return offsetX + \" \" + offsetY + \" \" + blurRadius + \" \" + color;\n  }\n};\n\n// { offsetX: 1, offsetY: 2, blurRadius: 3, spreadDistance: 4, color: 'rgba(255, 0, 0)', inset: true }\n// => 'rgba(255, 0, 0) 1px 2px 3px 4px inset'\nvar mapBoxShadow = boxShadow => {\n  if (typeof boxShadow === 'string') {\n    return boxShadow;\n  }\n  var offsetX = normalizeValueWithProperty(boxShadow.offsetX) || 0;\n  var offsetY = normalizeValueWithProperty(boxShadow.offsetY) || 0;\n  var blurRadius = normalizeValueWithProperty(boxShadow.blurRadius) || 0;\n  var spreadDistance = normalizeValueWithProperty(boxShadow.spreadDistance) || 0;\n  var color = normalizeColor(boxShadow.color) || 'black';\n  var position = boxShadow.inset ? 'inset ' : '';\n  return \"\" + position + offsetX + \" \" + offsetY + \" \" + blurRadius + \" \" + spreadDistance + \" \" + color;\n};\nexport var createBoxShadowArrayValue = value => {\n  return value.map(mapBoxShadow).join(', ');\n};\n\n// { scale: 2 } => 'scale(2)'\n// { translateX: 20 } => 'translateX(20px)'\n// { matrix: [1,2,3,4,5,6] } => 'matrix(1,2,3,4,5,6)'\nvar mapTransform = transform => {\n  var type = Object.keys(transform)[0];\n  var value = transform[type];\n  if (type === 'matrix' || type === 'matrix3d') {\n    return type + \"(\" + value.join(',') + \")\";\n  } else {\n    var normalizedValue = normalizeValueWithProperty(value, type);\n    return type + \"(\" + normalizedValue + \")\";\n  }\n};\nexport var createTransformValue = value => {\n  return value.map(mapTransform).join(' ');\n};\n\n// [2, '30%', 10] => '2px 30% 10px'\nexport var createTransformOriginValue = value => {\n  return value.map(v => normalizeValueWithProperty(v)).join(' ');\n};\nvar PROPERTIES_STANDARD = {\n  borderBottomEndRadius: 'borderEndEndRadius',\n  borderBottomStartRadius: 'borderEndStartRadius',\n  borderTopEndRadius: 'borderStartEndRadius',\n  borderTopStartRadius: 'borderStartStartRadius',\n  borderEndColor: 'borderInlineEndColor',\n  borderEndStyle: 'borderInlineEndStyle',\n  borderEndWidth: 'borderInlineEndWidth',\n  borderStartColor: 'borderInlineStartColor',\n  borderStartStyle: 'borderInlineStartStyle',\n  borderStartWidth: 'borderInlineStartWidth',\n  end: 'insetInlineEnd',\n  marginEnd: 'marginInlineEnd',\n  marginHorizontal: 'marginInline',\n  marginStart: 'marginInlineStart',\n  marginVertical: 'marginBlock',\n  paddingEnd: 'paddingInlineEnd',\n  paddingHorizontal: 'paddingInline',\n  paddingStart: 'paddingInlineStart',\n  paddingVertical: 'paddingBlock',\n  start: 'insetInlineStart'\n};\nvar ignoredProps = {\n  elevation: true,\n  overlayColor: true,\n  resizeMode: true,\n  tintColor: true\n};\n\n/**\n * Preprocess styles\n */\nexport var preprocess = function preprocess(originalStyle, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  var style = originalStyle || emptyObject;\n  var nextStyle = {};\n\n  // Convert shadow styles\n  if (options.shadow === true, style.shadowColor != null || style.shadowOffset != null || style.shadowOpacity != null || style.shadowRadius != null) {\n    warnOnce('shadowStyles', \"\\\"shadow*\\\" style props are deprecated. Use \\\"boxShadow\\\".\");\n    var boxShadowValue = createBoxShadowValue(style);\n    if (boxShadowValue != null) {\n      nextStyle.boxShadow = boxShadowValue;\n    }\n  }\n\n  // Convert text shadow styles\n  if (options.textShadow === true, style.textShadowColor != null || style.textShadowOffset != null || style.textShadowRadius != null) {\n    warnOnce('textShadowStyles', \"\\\"textShadow*\\\" style props are deprecated. Use \\\"textShadow\\\".\");\n    var textShadowValue = createTextShadowValue(style);\n    if (textShadowValue != null && nextStyle.textShadow == null) {\n      var textShadow = style.textShadow;\n      var value = textShadow ? textShadow + \", \" + textShadowValue : textShadowValue;\n      nextStyle.textShadow = value;\n    }\n  }\n  for (var originalProp in style) {\n    if (\n    // Ignore some React Native styles\n    ignoredProps[originalProp] != null || originalProp === 'shadowColor' || originalProp === 'shadowOffset' || originalProp === 'shadowOpacity' || originalProp === 'shadowRadius' || originalProp === 'textShadowColor' || originalProp === 'textShadowOffset' || originalProp === 'textShadowRadius') {\n      continue;\n    }\n    var originalValue = style[originalProp];\n    var prop = PROPERTIES_STANDARD[originalProp] || originalProp;\n    var _value = originalValue;\n    if (!Object.prototype.hasOwnProperty.call(style, originalProp) || prop !== originalProp && style[prop] != null) {\n      continue;\n    }\n    if (prop === 'aspectRatio' && typeof _value === 'number') {\n      nextStyle[prop] = _value.toString();\n    } else if (prop === 'boxShadow') {\n      if (Array.isArray(_value)) {\n        _value = createBoxShadowArrayValue(_value);\n      }\n      var boxShadow = nextStyle.boxShadow;\n      nextStyle.boxShadow = boxShadow ? _value + \", \" + boxShadow : _value;\n    } else if (prop === 'fontVariant') {\n      if (Array.isArray(_value) && _value.length > 0) {\n        /*\n        warnOnce(\n          'fontVariant',\n          '\"fontVariant\" style array value is deprecated. Use space-separated values.'\n        );\n        */\n        _value = _value.join(' ');\n      }\n      nextStyle[prop] = _value;\n    } else if (prop === 'textAlignVertical') {\n      /*\n      warnOnce(\n        'textAlignVertical',\n        '\"textAlignVertical\" style is deprecated. Use \"verticalAlign\".'\n      );\n      */\n      if (style.verticalAlign == null) {\n        nextStyle.verticalAlign = _value === 'center' ? 'middle' : _value;\n      }\n    } else if (prop === 'transform') {\n      if (Array.isArray(_value)) {\n        _value = createTransformValue(_value);\n      }\n      nextStyle.transform = _value;\n    } else if (prop === 'transformOrigin') {\n      if (Array.isArray(_value)) {\n        _value = createTransformOriginValue(_value);\n      }\n      nextStyle.transformOrigin = _value;\n    } else {\n      nextStyle[prop] = _value;\n    }\n  }\n\n  // $FlowIgnore\n  return nextStyle;\n};\nexport default preprocess;","/**\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\n'use client';\n\nimport { createContext } from 'react';\nvar TextAncestorContext = /*#__PURE__*/createContext(false);\nexport default TextAncestorContext;","/**\n * Copyright (c) Nicolas Gallagher.\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\n'use client';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"hrefAttrs\", \"numberOfLines\", \"onClick\", \"onLayout\", \"onPress\", \"onMoveShouldSetResponder\", \"onMoveShouldSetResponderCapture\", \"onResponderEnd\", \"onResponderGrant\", \"onResponderMove\", \"onResponderReject\", \"onResponderRelease\", \"onResponderStart\", \"onResponderTerminate\", \"onResponderTerminationRequest\", \"onScrollShouldSetResponder\", \"onScrollShouldSetResponderCapture\", \"onSelectionChangeShouldSetResponder\", \"onSelectionChangeShouldSetResponderCapture\", \"onStartShouldSetResponder\", \"onStartShouldSetResponderCapture\", \"selectable\"];\nimport * as React from 'react';\nimport createElement from '../createElement';\nimport * as forwardedProps from '../../modules/forwardedProps';\nimport pick from '../../modules/pick';\nimport useElementLayout from '../../modules/useElementLayout';\nimport useMergeRefs from '../../modules/useMergeRefs';\nimport usePlatformMethods from '../../modules/usePlatformMethods';\nimport useResponderEvents from '../../modules/useResponderEvents';\nimport StyleSheet from '../StyleSheet';\nimport TextAncestorContext from './TextAncestorContext';\nimport { useLocaleContext, getLocaleDirection } from '../../modules/useLocale';\n//import { warnOnce } from '../../modules/warnOnce';\n\nvar forwardPropsList = Object.assign({}, forwardedProps.defaultProps, forwardedProps.accessibilityProps, forwardedProps.clickProps, forwardedProps.focusProps, forwardedProps.keyboardProps, forwardedProps.mouseProps, forwardedProps.touchProps, forwardedProps.styleProps, {\n  href: true,\n  lang: true,\n  pointerEvents: true\n});\nvar pickProps = props => pick(props, forwardPropsList);\nvar Text = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n  var hrefAttrs = props.hrefAttrs,\n    numberOfLines = props.numberOfLines,\n    onClick = props.onClick,\n    onLayout = props.onLayout,\n    onPress = props.onPress,\n    onMoveShouldSetResponder = props.onMoveShouldSetResponder,\n    onMoveShouldSetResponderCapture = props.onMoveShouldSetResponderCapture,\n    onResponderEnd = props.onResponderEnd,\n    onResponderGrant = props.onResponderGrant,\n    onResponderMove = props.onResponderMove,\n    onResponderReject = props.onResponderReject,\n    onResponderRelease = props.onResponderRelease,\n    onResponderStart = props.onResponderStart,\n    onResponderTerminate = props.onResponderTerminate,\n    onResponderTerminationRequest = props.onResponderTerminationRequest,\n    onScrollShouldSetResponder = props.onScrollShouldSetResponder,\n    onScrollShouldSetResponderCapture = props.onScrollShouldSetResponderCapture,\n    onSelectionChangeShouldSetResponder = props.onSelectionChangeShouldSetResponder,\n    onSelectionChangeShouldSetResponderCapture = props.onSelectionChangeShouldSetResponderCapture,\n    onStartShouldSetResponder = props.onStartShouldSetResponder,\n    onStartShouldSetResponderCapture = props.onStartShouldSetResponderCapture,\n    selectable = props.selectable,\n    rest = _objectWithoutPropertiesLoose(props, _excluded);\n\n  /*\n  if (selectable != null) {\n    warnOnce(\n      'selectable',\n      'selectable prop is deprecated. Use styles.userSelect.'\n    );\n  }\n  */\n\n  var hasTextAncestor = React.useContext(TextAncestorContext);\n  var hostRef = React.useRef(null);\n  var _useLocaleContext = useLocaleContext(),\n    contextDirection = _useLocaleContext.direction;\n  useElementLayout(hostRef, onLayout);\n  useResponderEvents(hostRef, {\n    onMoveShouldSetResponder,\n    onMoveShouldSetResponderCapture,\n    onResponderEnd,\n    onResponderGrant,\n    onResponderMove,\n    onResponderReject,\n    onResponderRelease,\n    onResponderStart,\n    onResponderTerminate,\n    onResponderTerminationRequest,\n    onScrollShouldSetResponder,\n    onScrollShouldSetResponderCapture,\n    onSelectionChangeShouldSetResponder,\n    onSelectionChangeShouldSetResponderCapture,\n    onStartShouldSetResponder,\n    onStartShouldSetResponderCapture\n  });\n  var handleClick = React.useCallback(e => {\n    if (onClick != null) {\n      onClick(e);\n    } else if (onPress != null) {\n      e.stopPropagation();\n      onPress(e);\n    }\n  }, [onClick, onPress]);\n  var component = hasTextAncestor ? 'span' : 'div';\n  var langDirection = props.lang != null ? getLocaleDirection(props.lang) : null;\n  var componentDirection = props.dir || langDirection;\n  var writingDirection = componentDirection || contextDirection;\n  var supportedProps = pickProps(rest);\n  supportedProps.dir = componentDirection;\n  // 'auto' by default allows browsers to infer writing direction (root elements only)\n  if (!hasTextAncestor) {\n    supportedProps.dir = componentDirection != null ? componentDirection : 'auto';\n  }\n  if (onClick || onPress) {\n    supportedProps.onClick = handleClick;\n  }\n  supportedProps.style = [numberOfLines != null && numberOfLines > 1 && {\n    WebkitLineClamp: numberOfLines\n  }, hasTextAncestor === true ? styles.textHasAncestor$raw : styles.text$raw, numberOfLines === 1 && styles.textOneLine, numberOfLines != null && numberOfLines > 1 && styles.textMultiLine, props.style, selectable === true && styles.selectable, selectable === false && styles.notSelectable, onPress && styles.pressable];\n  if (props.href != null) {\n    component = 'a';\n    if (hrefAttrs != null) {\n      var download = hrefAttrs.download,\n        rel = hrefAttrs.rel,\n        target = hrefAttrs.target;\n      if (download != null) {\n        supportedProps.download = download;\n      }\n      if (rel != null) {\n        supportedProps.rel = rel;\n      }\n      if (typeof target === 'string') {\n        supportedProps.target = target.charAt(0) !== '_' ? '_' + target : target;\n      }\n    }\n  }\n  var platformMethodsRef = usePlatformMethods(supportedProps);\n  var setRef = useMergeRefs(hostRef, platformMethodsRef, forwardedRef);\n  supportedProps.ref = setRef;\n  var element = createElement(component, supportedProps, {\n    writingDirection\n  });\n  return hasTextAncestor ? element : /*#__PURE__*/React.createElement(TextAncestorContext.Provider, {\n    value: true\n  }, element);\n});\nText.displayName = 'Text';\nvar textStyle = {\n  backgroundColor: 'transparent',\n  border: '0 solid black',\n  boxSizing: 'border-box',\n  color: 'black',\n  display: 'inline',\n  font: '14px System',\n  listStyle: 'none',\n  margin: 0,\n  padding: 0,\n  position: 'relative',\n  textAlign: 'start',\n  textDecoration: 'none',\n  whiteSpace: 'pre-wrap',\n  wordWrap: 'break-word'\n};\nvar styles = StyleSheet.create({\n  text$raw: textStyle,\n  textHasAncestor$raw: _objectSpread(_objectSpread({}, textStyle), {}, {\n    color: 'inherit',\n    font: 'inherit',\n    textAlign: 'inherit',\n    whiteSpace: 'inherit'\n  }),\n  textOneLine: {\n    maxWidth: '100%',\n    overflow: 'hidden',\n    textOverflow: 'ellipsis',\n    whiteSpace: 'nowrap',\n    wordWrap: 'normal'\n  },\n  // See #13\n  textMultiLine: {\n    display: '-webkit-box',\n    maxWidth: '100%',\n    overflow: 'clip',\n    textOverflow: 'ellipsis',\n    WebkitBoxOrient: 'vertical'\n  },\n  notSelectable: {\n    userSelect: 'none'\n  },\n  selectable: {\n    userSelect: 'text'\n  },\n  pressable: {\n    cursor: 'pointer'\n  }\n});\nexport default Text;","/* eslint-disable */\n\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 * From React 16.0.0\n */\n\nimport invariant from 'fbjs/lib/invariant';\nvar twoArgumentPooler = function twoArgumentPooler(a1, a2) {\n  var Klass = this;\n  if (Klass.instancePool.length) {\n    var instance = Klass.instancePool.pop();\n    Klass.call(instance, a1, a2);\n    return instance;\n  } else {\n    return new Klass(a1, a2);\n  }\n};\nvar standardReleaser = function standardReleaser(instance) {\n  var Klass = this;\n  instance.destructor();\n  if (Klass.instancePool.length < Klass.poolSize) {\n    Klass.instancePool.push(instance);\n  }\n};\nvar DEFAULT_POOL_SIZE = 10;\nvar DEFAULT_POOLER = twoArgumentPooler;\n\n/**\n * Augments `CopyConstructor` to be a poolable class, augmenting only the class\n * itself (statically) not adding any prototypical fields. Any CopyConstructor\n * you give this may have a `poolSize` property, and will look for a\n * prototypical `destructor` on instances.\n *\n * @param {Function} CopyConstructor Constructor that can be used to reset.\n * @param {Function} pooler Customizable pooler.\n */\nvar addPoolingTo = function addPoolingTo(CopyConstructor, pooler) {\n  // Casting as any so that flow ignores the actual implementation and trusts\n  // it to match the type we declared\n  var NewKlass = CopyConstructor;\n  NewKlass.instancePool = [];\n  NewKlass.getPooled = pooler || DEFAULT_POOLER;\n  if (!NewKlass.poolSize) {\n    NewKlass.poolSize = DEFAULT_POOL_SIZE;\n  }\n  NewKlass.release = standardReleaser;\n  return NewKlass;\n};\nvar PooledClass = {\n  addPoolingTo: addPoolingTo,\n  twoArgumentPooler: twoArgumentPooler\n};\nexport default PooledClass;","/**\n * Copyright (c) Nicolas Gallagher.\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\nimport PooledClass from '../../vendor/react-native/PooledClass';\nvar twoArgumentPooler = PooledClass.twoArgumentPooler;\n\n/**\n * PooledClass representing the bounding rectangle of a region.\n */\nfunction BoundingDimensions(width, height) {\n  this.width = width;\n  this.height = height;\n}\nBoundingDimensions.prototype.destructor = function () {\n  this.width = null;\n  this.height = null;\n};\nBoundingDimensions.getPooledFromElement = function (element) {\n  return BoundingDimensions.getPooled(element.offsetWidth, element.offsetHeight);\n};\nPooledClass.addPoolingTo(BoundingDimensions, twoArgumentPooler);\nexport default BoundingDimensions;","/**\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\nimport PooledClass from '../../vendor/react-native/PooledClass';\nvar twoArgumentPooler = PooledClass.twoArgumentPooler;\nfunction Position(left, top) {\n  this.left = left;\n  this.top = top;\n}\nPosition.prototype.destructor = function () {\n  this.left = null;\n  this.top = null;\n};\nPooledClass.addPoolingTo(Position, twoArgumentPooler);\nexport default Position;","/**\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 * @format\n */\n\n'use strict';\n\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport AccessibilityUtil from '../../modules/AccessibilityUtil';\nimport BoundingDimensions from './BoundingDimensions';\nimport normalizeColor from '@react-native/normalize-colors';\nimport Position from './Position';\nimport React from 'react';\nimport UIManager from '../UIManager';\nimport View from '../View';\nimport { warnOnce } from '../../modules/warnOnce';\nvar extractSingleTouch = nativeEvent => {\n  var touches = nativeEvent.touches;\n  var changedTouches = nativeEvent.changedTouches;\n  var hasTouches = touches && touches.length > 0;\n  var hasChangedTouches = changedTouches && changedTouches.length > 0;\n  return !hasTouches && hasChangedTouches ? changedTouches[0] : hasTouches ? touches[0] : nativeEvent;\n};\n\n/**\n * `Touchable`: Taps done right.\n *\n * You hook your `ResponderEventPlugin` events into `Touchable`. `Touchable`\n * will measure time/geometry and tells you when to give feedback to the user.\n *\n * ====================== Touchable Tutorial ===============================\n * The `Touchable` mixin helps you handle the \"press\" interaction. It analyzes\n * the geometry of elements, and observes when another responder (scroll view\n * etc) has stolen the touch lock. It notifies your component when it should\n * give feedback to the user. (bouncing/highlighting/unhighlighting).\n *\n * - When a touch was activated (typically you highlight)\n * - When a touch was deactivated (typically you unhighlight)\n * - When a touch was \"pressed\" - a touch ended while still within the geometry\n *   of the element, and no other element (like scroller) has \"stolen\" touch\n *   lock (\"responder\") (Typically you bounce the element).\n *\n * A good tap interaction isn't as simple as you might think. There should be a\n * slight delay before showing a highlight when starting a touch. If a\n * subsequent touch move exceeds the boundary of the element, it should\n * unhighlight, but if that same touch is brought back within the boundary, it\n * should rehighlight again. A touch can move in and out of that boundary\n * several times, each time toggling highlighting, but a \"press\" is only\n * triggered if that touch ends while within the element's boundary and no\n * scroller (or anything else) has stolen the lock on touches.\n *\n * To create a new type of component that handles interaction using the\n * `Touchable` mixin, do the following:\n *\n * - Initialize the `Touchable` state.\n *\n *   getInitialState: function() {\n *     return merge(this.touchableGetInitialState(), yourComponentState);\n *   }\n *\n * - Add a method to get your touchable component's node.\n *   getTouchableNode: function() {\n *     return this.touchableRef.current\n *   }\n *\n * - Choose the rendered component who's touches should start the interactive\n *   sequence. On that rendered node, forward all `Touchable` responder\n *   handlers. You can choose any rendered node you like. Choose a node whose\n *   hit target you'd like to instigate the interaction sequence:\n *\n *   // In render function:\n *   return (\n *     <View\n *       ref={this.touchableRef}\n *       onStartShouldSetResponder={this.touchableHandleStartShouldSetResponder}\n *       onResponderTerminationRequest={this.touchableHandleResponderTerminationRequest}\n *       onResponderGrant={this.touchableHandleResponderGrant}\n *       onResponderMove={this.touchableHandleResponderMove}\n *       onResponderRelease={this.touchableHandleResponderRelease}\n *       onResponderTerminate={this.touchableHandleResponderTerminate}>\n *       <View>\n *         Even though the hit detection/interactions are triggered by the\n *         wrapping (typically larger) node, we usually end up implementing\n *         custom logic that highlights this inner one.\n *       </View>\n *     </View>\n *   );\n *\n * - You may set up your own handlers for each of these events, so long as you\n *   also invoke the `touchable*` handlers inside of your custom handler.\n *\n * - Implement the handlers on your component class in order to provide\n *   feedback to the user. See documentation for each of these class methods\n *   that you should implement.\n *\n *   touchableHandlePress: function() {\n *      this.performBounceAnimation();  // or whatever you want to do.\n *   },\n *   touchableHandleActivePressIn: function() {\n *     this.beginHighlighting(...);  // Whatever you like to convey activation\n *   },\n *   touchableHandleActivePressOut: function() {\n *     this.endHighlighting(...);  // Whatever you like to convey deactivation\n *   },\n *\n * - There are more advanced methods you can implement (see documentation below):\n *   touchableGetHighlightDelayMS: function() {\n *     return 20;\n *   }\n *   // In practice, *always* use a predeclared constant (conserve memory).\n *   touchableGetPressRectOffset: function() {\n *     return {top: 20, left: 20, right: 20, bottom: 100};\n *   }\n */\n\n/**\n * Touchable states.\n */\n\nvar States = {\n  NOT_RESPONDER: 'NOT_RESPONDER',\n  // Not the responder\n  RESPONDER_INACTIVE_PRESS_IN: 'RESPONDER_INACTIVE_PRESS_IN',\n  // Responder, inactive, in the `PressRect`\n  RESPONDER_INACTIVE_PRESS_OUT: 'RESPONDER_INACTIVE_PRESS_OUT',\n  // Responder, inactive, out of `PressRect`\n  RESPONDER_ACTIVE_PRESS_IN: 'RESPONDER_ACTIVE_PRESS_IN',\n  // Responder, active, in the `PressRect`\n  RESPONDER_ACTIVE_PRESS_OUT: 'RESPONDER_ACTIVE_PRESS_OUT',\n  // Responder, active, out of `PressRect`\n  RESPONDER_ACTIVE_LONG_PRESS_IN: 'RESPONDER_ACTIVE_LONG_PRESS_IN',\n  // Responder, active, in the `PressRect`, after long press threshold\n  RESPONDER_ACTIVE_LONG_PRESS_OUT: 'RESPONDER_ACTIVE_LONG_PRESS_OUT',\n  // Responder, active, out of `PressRect`, after long press threshold\n  ERROR: 'ERROR'\n};\n/*\n * Quick lookup map for states that are considered to be \"active\"\n */\n\nvar baseStatesConditions = {\n  NOT_RESPONDER: false,\n  RESPONDER_INACTIVE_PRESS_IN: false,\n  RESPONDER_INACTIVE_PRESS_OUT: false,\n  RESPONDER_ACTIVE_PRESS_IN: false,\n  RESPONDER_ACTIVE_PRESS_OUT: false,\n  RESPONDER_ACTIVE_LONG_PRESS_IN: false,\n  RESPONDER_ACTIVE_LONG_PRESS_OUT: false,\n  ERROR: false\n};\nvar IsActive = _objectSpread(_objectSpread({}, baseStatesConditions), {}, {\n  RESPONDER_ACTIVE_PRESS_OUT: true,\n  RESPONDER_ACTIVE_PRESS_IN: true\n});\n\n/**\n * Quick lookup for states that are considered to be \"pressing\" and are\n * therefore eligible to result in a \"selection\" if the press stops.\n */\nvar IsPressingIn = _objectSpread(_objectSpread({}, baseStatesConditions), {}, {\n  RESPONDER_INACTIVE_PRESS_IN: true,\n  RESPONDER_ACTIVE_PRESS_IN: true,\n  RESPONDER_ACTIVE_LONG_PRESS_IN: true\n});\nvar IsLongPressingIn = _objectSpread(_objectSpread({}, baseStatesConditions), {}, {\n  RESPONDER_ACTIVE_LONG_PRESS_IN: true\n});\n\n/**\n * Inputs to the state machine.\n */\nvar Signals = {\n  DELAY: 'DELAY',\n  RESPONDER_GRANT: 'RESPONDER_GRANT',\n  RESPONDER_RELEASE: 'RESPONDER_RELEASE',\n  RESPONDER_TERMINATED: 'RESPONDER_TERMINATED',\n  ENTER_PRESS_RECT: 'ENTER_PRESS_RECT',\n  LEAVE_PRESS_RECT: 'LEAVE_PRESS_RECT',\n  LONG_PRESS_DETECTED: 'LONG_PRESS_DETECTED'\n};\n/**\n * Mapping from States x Signals => States\n */\nvar Transitions = {\n  NOT_RESPONDER: {\n    DELAY: States.ERROR,\n    RESPONDER_GRANT: States.RESPONDER_INACTIVE_PRESS_IN,\n    RESPONDER_RELEASE: States.ERROR,\n    RESPONDER_TERMINATED: States.ERROR,\n    ENTER_PRESS_RECT: States.ERROR,\n    LEAVE_PRESS_RECT: States.ERROR,\n    LONG_PRESS_DETECTED: States.ERROR\n  },\n  RESPONDER_INACTIVE_PRESS_IN: {\n    DELAY: States.RESPONDER_ACTIVE_PRESS_IN,\n    RESPONDER_GRANT: States.ERROR,\n    RESPONDER_RELEASE: States.NOT_RESPONDER,\n    RESPONDER_TERMINATED: States.NOT_RESPONDER,\n    ENTER_PRESS_RECT: States.RESPONDER_INACTIVE_PRESS_IN,\n    LEAVE_PRESS_RECT: States.RESPONDER_INACTIVE_PRESS_OUT,\n    LONG_PRESS_DETECTED: States.ERROR\n  },\n  RESPONDER_INACTIVE_PRESS_OUT: {\n    DELAY: States.RESPONDER_ACTIVE_PRESS_OUT,\n    RESPONDER_GRANT: States.ERROR,\n    RESPONDER_RELEASE: States.NOT_RESPONDER,\n    RESPONDER_TERMINATED: States.NOT_RESPONDER,\n    ENTER_PRESS_RECT: States.RESPONDER_INACTIVE_PRESS_IN,\n    LEAVE_PRESS_RECT: States.RESPONDER_INACTIVE_PRESS_OUT,\n    LONG_PRESS_DETECTED: States.ERROR\n  },\n  RESPONDER_ACTIVE_PRESS_IN: {\n    DELAY: States.ERROR,\n    RESPONDER_GRANT: States.ERROR,\n    RESPONDER_RELEASE: States.NOT_RESPONDER,\n    RESPONDER_TERMINATED: States.NOT_RESPONDER,\n    ENTER_PRESS_RECT: States.RESPONDER_ACTIVE_PRESS_IN,\n    LEAVE_PRESS_RECT: States.RESPONDER_ACTIVE_PRESS_OUT,\n    LONG_PRESS_DETECTED: States.RESPONDER_ACTIVE_LONG_PRESS_IN\n  },\n  RESPONDER_ACTIVE_PRESS_OUT: {\n    DELAY: States.ERROR,\n    RESPONDER_GRANT: States.ERROR,\n    RESPONDER_RELEASE: States.NOT_RESPONDER,\n    RESPONDER_TERMINATED: States.NOT_RESPONDER,\n    ENTER_PRESS_RECT: States.RESPONDER_ACTIVE_PRESS_IN,\n    LEAVE_PRESS_RECT: States.RESPONDER_ACTIVE_PRESS_OUT,\n    LONG_PRESS_DETECTED: States.ERROR\n  },\n  RESPONDER_ACTIVE_LONG_PRESS_IN: {\n    DELAY: States.ERROR,\n    RESPONDER_GRANT: States.ERROR,\n    RESPONDER_RELEASE: States.NOT_RESPONDER,\n    RESPONDER_TERMINATED: States.NOT_RESPONDER,\n    ENTER_PRESS_RECT: States.RESPONDER_ACTIVE_LONG_PRESS_IN,\n    LEAVE_PRESS_RECT: States.RESPONDER_ACTIVE_LONG_PRESS_OUT,\n    LONG_PRESS_DETECTED: States.RESPONDER_ACTIVE_LONG_PRESS_IN\n  },\n  RESPONDER_ACTIVE_LONG_PRESS_OUT: {\n    DELAY: States.ERROR,\n    RESPONDER_GRANT: States.ERROR,\n    RESPONDER_RELEASE: States.NOT_RESPONDER,\n    RESPONDER_TERMINATED: States.NOT_RESPONDER,\n    ENTER_PRESS_RECT: States.RESPONDER_ACTIVE_LONG_PRESS_IN,\n    LEAVE_PRESS_RECT: States.RESPONDER_ACTIVE_LONG_PRESS_OUT,\n    LONG_PRESS_DETECTED: States.ERROR\n  },\n  error: {\n    DELAY: States.NOT_RESPONDER,\n    RESPONDER_GRANT: States.RESPONDER_INACTIVE_PRESS_IN,\n    RESPONDER_RELEASE: States.NOT_RESPONDER,\n    RESPONDER_TERMINATED: States.NOT_RESPONDER,\n    ENTER_PRESS_RECT: States.NOT_RESPONDER,\n    LEAVE_PRESS_RECT: States.NOT_RESPONDER,\n    LONG_PRESS_DETECTED: States.NOT_RESPONDER\n  }\n};\n\n// ==== Typical Constants for integrating into UI components ====\n// var HIT_EXPAND_PX = 20;\n// var HIT_VERT_OFFSET_PX = 10;\nvar HIGHLIGHT_DELAY_MS = 130;\nvar PRESS_EXPAND_PX = 20;\nvar LONG_PRESS_THRESHOLD = 500;\nvar LONG_PRESS_DELAY_MS = LONG_PRESS_THRESHOLD - HIGHLIGHT_DELAY_MS;\nvar LONG_PRESS_ALLOWED_MOVEMENT = 10;\n\n// Default amount \"active\" region protrudes beyond box\n\n/**\n * By convention, methods prefixed with underscores are meant to be @private,\n * and not @protected. Mixers shouldn't access them - not even to provide them\n * as callback handlers.\n *\n *\n * ========== Geometry =========\n * `Touchable` only assumes that there exists a `HitRect` node. The `PressRect`\n * is an abstract box that is extended beyond the `HitRect`.\n *\n *  +--------------------------+\n *  |                          | - \"Start\" events in `HitRect` cause `HitRect`\n *  |  +--------------------+  |   to become the responder.\n *  |  |  +--------------+  |  | - `HitRect` is typically expanded around\n *  |  |  |              |  |  |   the `VisualRect`, but shifted downward.\n *  |  |  |  VisualRect  |  |  | - After pressing down, after some delay,\n *  |  |  |              |  |  |   and before letting up, the Visual React\n *  |  |  +--------------+  |  |   will become \"active\". This makes it eligible\n *  |  |     HitRect        |  |   for being highlighted (so long as the\n *  |  +--------------------+  |   press remains in the `PressRect`).\n *  |        PressRect     o   |\n *  +----------------------|---+\n *           Out Region    |\n *                         +-----+ This gap between the `HitRect` and\n *                                 `PressRect` allows a touch to move far away\n *                                 from the original hit rect, and remain\n *                                 highlighted, and eligible for a \"Press\".\n *                                 Customize this via\n *                                 `touchableGetPressRectOffset()`.\n *\n *\n *\n * ======= State Machine =======\n *\n * +-------------+ <---+ RESPONDER_RELEASE\n * |NOT_RESPONDER|\n * +-------------+ <---+ RESPONDER_TERMINATED\n *     +\n *     | RESPONDER_GRANT (HitRect)\n *     v\n * +---------------------------+  DELAY   +-------------------------+  T + DELAY     +------------------------------+\n * |RESPONDER_INACTIVE_PRESS_IN|+-------->|RESPONDER_ACTIVE_PRESS_IN| +------------> |RESPONDER_ACTIVE_LONG_PRESS_IN|\n * +---------------------------+          +-------------------------+                +------------------------------+\n *     +            ^                         +           ^                                 +           ^\n *     |LEAVE_      |ENTER_                   |LEAVE_     |ENTER_                           |LEAVE_     |ENTER_\n *     |PRESS_RECT  |PRESS_RECT               |PRESS_RECT |PRESS_RECT                       |PRESS_RECT |PRESS_RECT\n *     |            |                         |           |                                 |           |\n *     v            +                         v           +                                 v           +\n * +----------------------------+  DELAY  +--------------------------+               +-------------------------------+\n * |RESPONDER_INACTIVE_PRESS_OUT|+------->|RESPONDER_ACTIVE_PRESS_OUT|               |RESPONDER_ACTIVE_LONG_PRESS_OUT|\n * +----------------------------+         +--------------------------+               +-------------------------------+\n *\n * T + DELAY => LONG_PRESS_DELAY_MS + DELAY\n *\n * Not drawn are the side effects of each transition. The most important side\n * effect is the `touchableHandlePress` abstract method invocation that occurs\n * when a responder is released while in either of the \"Press\" states.\n *\n * The other important side effects are the highlight abstract method\n * invocations (internal callbacks) to be implemented by the mixer.\n *\n *\n * @lends Touchable.prototype\n */\nvar TouchableMixin = {\n  // HACK (part 1): basic support for touchable interactions using a keyboard\n  componentDidMount: function componentDidMount() {\n    warnOnce('TouchableMixin', 'TouchableMixin is deprecated. Please use Pressable.');\n    var touchableNode = this.getTouchableNode && this.getTouchableNode();\n    if (touchableNode && touchableNode.addEventListener) {\n      this._touchableBlurListener = e => {\n        if (this._isTouchableKeyboardActive) {\n          if (this.state.touchable.touchState && this.state.touchable.touchState !== States.NOT_RESPONDER) {\n            this.touchableHandleResponderTerminate({\n              nativeEvent: e\n            });\n          }\n          this._isTouchableKeyboardActive = false;\n        }\n      };\n      touchableNode.addEventListener('blur', this._touchableBlurListener);\n    }\n  },\n  /**\n   * Clear all timeouts on unmount\n   */\n  componentWillUnmount: function componentWillUnmount() {\n    var touchableNode = this.getTouchableNode && this.getTouchableNode();\n    if (touchableNode && touchableNode.addEventListener) {\n      touchableNode.removeEventListener('blur', this._touchableBlurListener);\n    }\n    this.touchableDelayTimeout && clearTimeout(this.touchableDelayTimeout);\n    this.longPressDelayTimeout && clearTimeout(this.longPressDelayTimeout);\n    this.pressOutDelayTimeout && clearTimeout(this.pressOutDelayTimeout);\n    // Clear DOM nodes\n    this.pressInLocation = null;\n    this.state.touchable.responderID = null;\n  },\n  /**\n   * It's prefer that mixins determine state in this way, having the class\n   * explicitly mix the state in the one and only `getInitialState` method.\n   *\n   * @return {object} State object to be placed inside of\n   * `this.state.touchable`.\n   */\n  touchableGetInitialState: function touchableGetInitialState() {\n    return {\n      touchable: {\n        touchState: undefined,\n        responderID: null\n      }\n    };\n  },\n  // ==== Hooks to Gesture Responder system ====\n  /**\n   * Must return true if embedded in a native platform scroll view.\n   */\n  touchableHandleResponderTerminationRequest: function touchableHandleResponderTerminationRequest() {\n    return !this.props.rejectResponderTermination;\n  },\n  /**\n   * Must return true to start the process of `Touchable`.\n   */\n  touchableHandleStartShouldSetResponder: function touchableHandleStartShouldSetResponder() {\n    return !this.props.disabled;\n  },\n  /**\n   * Return true to cancel press on long press.\n   */\n  touchableLongPressCancelsPress: function touchableLongPressCancelsPress() {\n    return true;\n  },\n  /**\n   * Place as callback for a DOM element's `onResponderGrant` event.\n   * @param {SyntheticEvent} e Synthetic event from event system.\n   *\n   */\n  touchableHandleResponderGrant: function touchableHandleResponderGrant(e) {\n    var dispatchID = e.currentTarget;\n    // Since e is used in a callback invoked on another event loop\n    // (as in setTimeout etc), we need to call e.persist() on the\n    // event to make sure it doesn't get reused in the event object pool.\n    e.persist();\n    this.pressOutDelayTimeout && clearTimeout(this.pressOutDelayTimeout);\n    this.pressOutDelayTimeout = null;\n    this.state.touchable.touchState = States.NOT_RESPONDER;\n    this.state.touchable.responderID = dispatchID;\n    this._receiveSignal(Signals.RESPONDER_GRANT, e);\n    var delayMS = this.touchableGetHighlightDelayMS !== undefined ? Math.max(this.touchableGetHighlightDelayMS(), 0) : HIGHLIGHT_DELAY_MS;\n    delayMS = isNaN(delayMS) ? HIGHLIGHT_DELAY_MS : delayMS;\n    if (delayMS !== 0) {\n      this.touchableDelayTimeout = setTimeout(this._handleDelay.bind(this, e), delayMS);\n    } else {\n      this._handleDelay(e);\n    }\n    var longDelayMS = this.touchableGetLongPressDelayMS !== undefined ? Math.max(this.touchableGetLongPressDelayMS(), 10) : LONG_PRESS_DELAY_MS;\n    longDelayMS = isNaN(longDelayMS) ? LONG_PRESS_DELAY_MS : longDelayMS;\n    this.longPressDelayTimeout = setTimeout(this._handleLongDelay.bind(this, e), longDelayMS + delayMS);\n  },\n  /**\n   * Place as callback for a DOM element's `onResponderRelease` event.\n   */\n  touchableHandleResponderRelease: function touchableHandleResponderRelease(e) {\n    this.pressInLocation = null;\n    this._receiveSignal(Signals.RESPONDER_RELEASE, e);\n  },\n  /**\n   * Place as callback for a DOM element's `onResponderTerminate` event.\n   */\n  touchableHandleResponderTerminate: function touchableHandleResponderTerminate(e) {\n    this.pressInLocation = null;\n    this._receiveSignal(Signals.RESPONDER_TERMINATED, e);\n  },\n  /**\n   * Place as callback for a DOM element's `onResponderMove` event.\n   */\n  touchableHandleResponderMove: function touchableHandleResponderMove(e) {\n    // Measurement may not have returned yet.\n    if (!this.state.touchable.positionOnActivate) {\n      return;\n    }\n    var positionOnActivate = this.state.touchable.positionOnActivate;\n    var dimensionsOnActivate = this.state.touchable.dimensionsOnActivate;\n    var pressRectOffset = this.touchableGetPressRectOffset ? this.touchableGetPressRectOffset() : {\n      left: PRESS_EXPAND_PX,\n      right: PRESS_EXPAND_PX,\n      top: PRESS_EXPAND_PX,\n      bottom: PRESS_EXPAND_PX\n    };\n    var pressExpandLeft = pressRectOffset.left;\n    var pressExpandTop = pressRectOffset.top;\n    var pressExpandRight = pressRectOffset.right;\n    var pressExpandBottom = pressRectOffset.bottom;\n    var hitSlop = this.touchableGetHitSlop ? this.touchableGetHitSlop() : null;\n    if (hitSlop) {\n      pressExpandLeft += hitSlop.left || 0;\n      pressExpandTop += hitSlop.top || 0;\n      pressExpandRight += hitSlop.right || 0;\n      pressExpandBottom += hitSlop.bottom || 0;\n    }\n    var touch = extractSingleTouch(e.nativeEvent);\n    var pageX = touch && touch.pageX;\n    var pageY = touch && touch.pageY;\n    if (this.pressInLocation) {\n      var movedDistance = this._getDistanceBetweenPoints(pageX, pageY, this.pressInLocation.pageX, this.pressInLocation.pageY);\n      if (movedDistance > LONG_PRESS_ALLOWED_MOVEMENT) {\n        this._cancelLongPressDelayTimeout();\n      }\n    }\n    var isTouchWithinActive = pageX > positionOnActivate.left - pressExpandLeft && pageY > positionOnActivate.top - pressExpandTop && pageX < positionOnActivate.left + dimensionsOnActivate.width + pressExpandRight && pageY < positionOnActivate.top + dimensionsOnActivate.height + pressExpandBottom;\n    if (isTouchWithinActive) {\n      var prevState = this.state.touchable.touchState;\n      this._receiveSignal(Signals.ENTER_PRESS_RECT, e);\n      var curState = this.state.touchable.touchState;\n      if (curState === States.RESPONDER_INACTIVE_PRESS_IN && prevState !== States.RESPONDER_INACTIVE_PRESS_IN) {\n        // fix for t7967420\n        this._cancelLongPressDelayTimeout();\n      }\n    } else {\n      this._cancelLongPressDelayTimeout();\n      this._receiveSignal(Signals.LEAVE_PRESS_RECT, e);\n    }\n  },\n  /**\n   * Invoked when the item receives focus. Mixers might override this to\n   * visually distinguish the `VisualRect` so that the user knows that it\n   * currently has the focus. Most platforms only support a single element being\n   * focused at a time, in which case there may have been a previously focused\n   * element that was blurred just prior to this. This can be overridden when\n   * using `Touchable.Mixin.withoutDefaultFocusAndBlur`.\n   */\n  touchableHandleFocus: function touchableHandleFocus(e) {\n    this.props.onFocus && this.props.onFocus(e);\n  },\n  /**\n   * Invoked when the item loses focus. Mixers might override this to\n   * visually distinguish the `VisualRect` so that the user knows that it\n   * no longer has focus. Most platforms only support a single element being\n   * focused at a time, in which case the focus may have moved to another.\n   * This can be overridden when using\n   * `Touchable.Mixin.withoutDefaultFocusAndBlur`.\n   */\n  touchableHandleBlur: function touchableHandleBlur(e) {\n    this.props.onBlur && this.props.onBlur(e);\n  },\n  // ==== Abstract Application Callbacks ====\n\n  /**\n   * Invoked when the item should be highlighted. Mixers should implement this\n   * to visually distinguish the `VisualRect` so that the user knows that\n   * releasing a touch will result in a \"selection\" (analog to click).\n   *\n   * @abstract\n   * touchableHandleActivePressIn: function,\n   */\n\n  /**\n   * Invoked when the item is \"active\" (in that it is still eligible to become\n   * a \"select\") but the touch has left the `PressRect`. Usually the mixer will\n   * want to unhighlight the `VisualRect`. If the user (while pressing) moves\n   * back into the `PressRect` `touchableHandleActivePressIn` will be invoked\n   * again and the mixer should probably highlight the `VisualRect` again. This\n   * event will not fire on an `touchEnd/mouseUp` event, only move events while\n   * the user is depressing the mouse/touch.\n   *\n   * @abstract\n   * touchableHandleActivePressOut: function\n   */\n\n  /**\n   * Invoked when the item is \"selected\" - meaning the interaction ended by\n   * letting up while the item was either in the state\n   * `RESPONDER_ACTIVE_PRESS_IN` or `RESPONDER_INACTIVE_PRESS_IN`.\n   *\n   * @abstract\n   * touchableHandlePress: function\n   */\n\n  /**\n   * Invoked when the item is long pressed - meaning the interaction ended by\n   * letting up while the item was in `RESPONDER_ACTIVE_LONG_PRESS_IN`. If\n   * `touchableHandleLongPress` is *not* provided, `touchableHandlePress` will\n   * be called as it normally is. If `touchableHandleLongPress` is provided, by\n   * default any `touchableHandlePress` callback will not be invoked. To\n   * override this default behavior, override `touchableLongPressCancelsPress`\n   * to return false. As a result, `touchableHandlePress` will be called when\n   * lifting up, even if `touchableHandleLongPress` has also been called.\n   *\n   * @abstract\n   * touchableHandleLongPress: function\n   */\n\n  /**\n   * Returns the number of millis to wait before triggering a highlight.\n   *\n   * @abstract\n   * touchableGetHighlightDelayMS: function\n   */\n\n  /**\n   * Returns the amount to extend the `HitRect` into the `PressRect`. Positive\n   * numbers mean the size expands outwards.\n   *\n   * @abstract\n   * touchableGetPressRectOffset: function\n   */\n\n  // ==== Internal Logic ====\n\n  /**\n   * Measures the `HitRect` node on activation. The Bounding rectangle is with\n   * respect to viewport - not page, so adding the `pageXOffset/pageYOffset`\n   * should result in points that are in the same coordinate system as an\n   * event's `globalX/globalY` data values.\n   *\n   * - Consider caching this for the lifetime of the component, or possibly\n   *   being able to share this cache between any `ScrollMap` view.\n   *\n   * @sideeffects\n   * @private\n   */\n  _remeasureMetricsOnActivation: function _remeasureMetricsOnActivation() {\n    var tag = this.state.touchable.responderID;\n    if (tag == null) {\n      return;\n    }\n    UIManager.measure(tag, this._handleQueryLayout);\n  },\n  _handleQueryLayout: function _handleQueryLayout(l, t, w, h, globalX, globalY) {\n    //don't do anything UIManager failed to measure node\n    if (!l && !t && !w && !h && !globalX && !globalY) {\n      return;\n    }\n    this.state.touchable.positionOnActivate && Position.release(this.state.touchable.positionOnActivate);\n    this.state.touchable.dimensionsOnActivate &&\n    // $FlowFixMe\n    BoundingDimensions.release(this.state.touchable.dimensionsOnActivate);\n    this.state.touchable.positionOnActivate = Position.getPooled(globalX, globalY);\n    // $FlowFixMe\n    this.state.touchable.dimensionsOnActivate = BoundingDimensions.getPooled(w, h);\n  },\n  _handleDelay: function _handleDelay(e) {\n    this.touchableDelayTimeout = null;\n    this._receiveSignal(Signals.DELAY, e);\n  },\n  _handleLongDelay: function _handleLongDelay(e) {\n    this.longPressDelayTimeout = null;\n    var curState = this.state.touchable.touchState;\n    if (curState !== States.RESPONDER_ACTIVE_PRESS_IN && curState !== States.RESPONDER_ACTIVE_LONG_PRESS_IN) {\n      console.error('Attempted to transition from state `' + curState + '` to `' + States.RESPONDER_ACTIVE_LONG_PRESS_IN + '`, which is not supported. This is ' + 'most likely due to `Touchable.longPressDelayTimeout` not being cancelled.');\n    } else {\n      this._receiveSignal(Signals.LONG_PRESS_DETECTED, e);\n    }\n  },\n  /**\n   * Receives a state machine signal, performs side effects of the transition\n   * and stores the new state. Validates the transition as well.\n   *\n   * @param {Signals} signal State machine signal.\n   * @throws Error if invalid state transition or unrecognized signal.\n   * @sideeffects\n   */\n  _receiveSignal: function _receiveSignal(signal, e) {\n    var responderID = this.state.touchable.responderID;\n    var curState = this.state.touchable.touchState;\n    var nextState = Transitions[curState] && Transitions[curState][signal];\n    if (!responderID && signal === Signals.RESPONDER_RELEASE) {\n      return;\n    }\n    if (!nextState) {\n      throw new Error('Unrecognized signal `' + signal + '` or state `' + curState + '` for Touchable responder `' + responderID + '`');\n    }\n    if (nextState === States.ERROR) {\n      throw new Error('Touchable cannot transition from `' + curState + '` to `' + signal + '` for responder `' + responderID + '`');\n    }\n    if (curState !== nextState) {\n      this._performSideEffectsForTransition(curState, nextState, signal, e);\n      this.state.touchable.touchState = nextState;\n    }\n  },\n  _cancelLongPressDelayTimeout: function _cancelLongPressDelayTimeout() {\n    this.longPressDelayTimeout && clearTimeout(this.longPressDelayTimeout);\n    this.longPressDelayTimeout = null;\n  },\n  _isHighlight: function _isHighlight(state) {\n    return state === States.RESPONDER_ACTIVE_PRESS_IN || state === States.RESPONDER_ACTIVE_LONG_PRESS_IN;\n  },\n  _savePressInLocation: function _savePressInLocation(e) {\n    var touch = extractSingleTouch(e.nativeEvent);\n    var pageX = touch && touch.pageX;\n    var pageY = touch && touch.pageY;\n    var locationX = touch && touch.locationX;\n    var locationY = touch && touch.locationY;\n    this.pressInLocation = {\n      pageX,\n      pageY,\n      locationX,\n      locationY\n    };\n  },\n  _getDistanceBetweenPoints: function _getDistanceBetweenPoints(aX, aY, bX, bY) {\n    var deltaX = aX - bX;\n    var deltaY = aY - bY;\n    return Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n  },\n  /**\n   * Will perform a transition between touchable states, and identify any\n   * highlighting or unhighlighting that must be performed for this particular\n   * transition.\n   *\n   * @param {States} curState Current Touchable state.\n   * @param {States} nextState Next Touchable state.\n   * @param {Signal} signal Signal that triggered the transition.\n   * @param {Event} e Native event.\n   * @sideeffects\n   */\n  _performSideEffectsForTransition: function _performSideEffectsForTransition(curState, nextState, signal, e) {\n    var curIsHighlight = this._isHighlight(curState);\n    var newIsHighlight = this._isHighlight(nextState);\n    var isFinalSignal = signal === Signals.RESPONDER_TERMINATED || signal === Signals.RESPONDER_RELEASE;\n    if (isFinalSignal) {\n      this._cancelLongPressDelayTimeout();\n    }\n    var isInitialTransition = curState === States.NOT_RESPONDER && nextState === States.RESPONDER_INACTIVE_PRESS_IN;\n    var isActiveTransition = !IsActive[curState] && IsActive[nextState];\n    if (isInitialTransition || isActiveTransition) {\n      this._remeasureMetricsOnActivation();\n    }\n    if (IsPressingIn[curState] && signal === Signals.LONG_PRESS_DETECTED) {\n      this.touchableHandleLongPress && this.touchableHandleLongPress(e);\n    }\n    if (newIsHighlight && !curIsHighlight) {\n      this._startHighlight(e);\n    } else if (!newIsHighlight && curIsHighlight) {\n      this._endHighlight(e);\n    }\n    if (IsPressingIn[curState] && signal === Signals.RESPONDER_RELEASE) {\n      var hasLongPressHandler = !!this.props.onLongPress;\n      var pressIsLongButStillCallOnPress = IsLongPressingIn[curState] && (\n      // We *are* long pressing.. // But either has no long handler\n      !hasLongPressHandler || !this.touchableLongPressCancelsPress()); // or we're told to ignore it.\n\n      var shouldInvokePress = !IsLongPressingIn[curState] || pressIsLongButStillCallOnPress;\n      if (shouldInvokePress && this.touchableHandlePress) {\n        if (!newIsHighlight && !curIsHighlight) {\n          // we never highlighted because of delay, but we should highlight now\n          this._startHighlight(e);\n          this._endHighlight(e);\n        }\n        this.touchableHandlePress(e);\n      }\n    }\n    this.touchableDelayTimeout && clearTimeout(this.touchableDelayTimeout);\n    this.touchableDelayTimeout = null;\n  },\n  _playTouchSound: function _playTouchSound() {\n    UIManager.playTouchSound();\n  },\n  _startHighlight: function _startHighlight(e) {\n    this._savePressInLocation(e);\n    this.touchableHandleActivePressIn && this.touchableHandleActivePressIn(e);\n  },\n  _endHighlight: function _endHighlight(e) {\n    if (this.touchableHandleActivePressOut) {\n      if (this.touchableGetPressOutDelayMS && this.touchableGetPressOutDelayMS()) {\n        this.pressOutDelayTimeout = setTimeout(() => {\n          this.touchableHandleActivePressOut(e);\n        }, this.touchableGetPressOutDelayMS());\n      } else {\n        this.touchableHandleActivePressOut(e);\n      }\n    }\n  },\n  // HACK (part 2): basic support for touchable interactions using a keyboard (including\n  // delays and longPress)\n  touchableHandleKeyEvent: function touchableHandleKeyEvent(e) {\n    var type = e.type,\n      key = e.key;\n    if (key === 'Enter' || key === ' ') {\n      if (type === 'keydown') {\n        if (!this._isTouchableKeyboardActive) {\n          if (!this.state.touchable.touchState || this.state.touchable.touchState === States.NOT_RESPONDER) {\n            this.touchableHandleResponderGrant(e);\n            this._isTouchableKeyboardActive = true;\n          }\n        }\n      } else if (type === 'keyup') {\n        if (this._isTouchableKeyboardActive) {\n          if (this.state.touchable.touchState && this.state.touchable.touchState !== States.NOT_RESPONDER) {\n            this.touchableHandleResponderRelease(e);\n            this._isTouchableKeyboardActive = false;\n          }\n        }\n      }\n      e.stopPropagation();\n      // prevent the default behaviour unless the Touchable functions as a link\n      // and Enter is pressed\n      if (!(key === 'Enter' && AccessibilityUtil.propsToAriaRole(this.props) === 'link')) {\n        e.preventDefault();\n      }\n    }\n  },\n  withoutDefaultFocusAndBlur: {}\n};\n\n/**\n * Provide an optional version of the mixin where `touchableHandleFocus` and\n * `touchableHandleBlur` can be overridden. This allows appropriate defaults to\n * be set on TV platforms, without breaking existing implementations of\n * `Touchable`.\n */\nvar touchableHandleFocus = TouchableMixin.touchableHandleFocus,\n  touchableHandleBlur = TouchableMixin.touchableHandleBlur,\n  TouchableMixinWithoutDefaultFocusAndBlur = _objectWithoutPropertiesLoose(TouchableMixin, [\"touchableHandleFocus\", \"touchableHandleBlur\"]);\nTouchableMixin.withoutDefaultFocusAndBlur = TouchableMixinWithoutDefaultFocusAndBlur;\nvar Touchable = {\n  Mixin: TouchableMixin,\n  TOUCH_TARGET_DEBUG: false,\n  // Highlights all touchable targets. Toggle with Inspector.\n  /**\n   * Renders a debugging overlay to visualize touch target with hitSlop (might not work on Android).\n   */\n  renderDebugView: _ref => {\n    var color = _ref.color,\n      hitSlop = _ref.hitSlop;\n    if (!Touchable.TOUCH_TARGET_DEBUG) {\n      return null;\n    }\n    if (process.env.NODE_ENV !== 'production') {\n      throw Error('Touchable.TOUCH_TARGET_DEBUG should not be enabled in prod!');\n    }\n    var debugHitSlopStyle = {};\n    hitSlop = hitSlop || {\n      top: 0,\n      bottom: 0,\n      left: 0,\n      right: 0\n    };\n    for (var key in hitSlop) {\n      debugHitSlopStyle[key] = -hitSlop[key];\n    }\n    var normalizedColor = normalizeColor(color);\n    if (typeof normalizedColor !== 'number') {\n      return null;\n    }\n    var hexColor = '#' + ('00000000' + normalizedColor.toString(16)).substr(-8);\n    return /*#__PURE__*/React.createElement(View, {\n      pointerEvents: \"none\",\n      style: _objectSpread({\n        position: 'absolute',\n        borderColor: hexColor.slice(0, -2) + '55',\n        // More opaque\n        borderWidth: 1,\n        borderStyle: 'dashed',\n        backgroundColor: hexColor.slice(0, -2) + '0F'\n      }, debugHitSlopStyle)\n    });\n  }\n};\nexport default Touchable;","/**\n * Copyright (c) Nicolas Gallagher.\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\nimport UnimplementedView from '../../modules/UnimplementedView';\nexport default UnimplementedView;","/**\n * Copyright (c) Nicolas Gallagher.\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\nvar unitlessNumbers = {\n  animationIterationCount: true,\n  aspectRatio: true,\n  borderImageOutset: true,\n  borderImageSlice: true,\n  borderImageWidth: true,\n  boxFlex: true,\n  boxFlexGroup: true,\n  boxOrdinalGroup: true,\n  columnCount: true,\n  flex: true,\n  flexGrow: true,\n  flexOrder: true,\n  flexPositive: true,\n  flexShrink: true,\n  flexNegative: true,\n  fontWeight: true,\n  gridRow: true,\n  gridRowEnd: true,\n  gridRowGap: true,\n  gridRowStart: true,\n  gridColumn: true,\n  gridColumnEnd: true,\n  gridColumnGap: true,\n  gridColumnStart: true,\n  lineClamp: 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\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  // transform types\n  scale: true,\n  scaleX: true,\n  scaleY: true,\n  scaleZ: true,\n  // RN properties\n  shadowOpacity: true\n};\n\n/**\n * Support style names that may come passed in prefixed by adding permutations\n * of vendor prefixes.\n */\nvar prefixes = ['ms', 'Moz', 'O', 'Webkit'];\nvar prefixKey = (prefix, key) => {\n  return prefix + key.charAt(0).toUpperCase() + key.substring(1);\n};\nObject.keys(unitlessNumbers).forEach(prop => {\n  prefixes.forEach(prefix => {\n    unitlessNumbers[prefixKey(prefix, prop)] = unitlessNumbers[prop];\n  });\n});\nexport default unitlessNumbers;","/* eslint-disable */\n\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 * From React 16.0.0\n * \n */\n\nimport isUnitlessNumber from '../unitlessNumbers';\n\n/**\n * Convert a value into the proper css writable value. The style name `name`\n * should be logical (no hyphens), as specified\n * in `CSSProperty.isUnitlessNumber`.\n *\n * @param {string} name CSS property name such as `topMargin`.\n * @param {*} value CSS property value such as `10px`.\n * @return {string} Normalized style value with dimensions applied.\n */\nfunction dangerousStyleValue(name, value, isCustomProperty) {\n  // Note that we've removed escapeTextForBrowser() calls here since the\n  // whole string will be escaped when the attribute is injected into\n  // the markup. If you provide unsafe user data here they can inject\n  // arbitrary CSS which may be problematic (I couldn't repro this):\n  // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet\n  // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/\n  // This is not an XSS hole but instead a potential CSS injection issue\n  // which has lead to a greater discussion about how we're going to\n  // trust URLs moving forward. See #2115901\n\n  var isEmpty = value == null || typeof value === 'boolean' || value === '';\n  if (isEmpty) {\n    return '';\n  }\n  if (!isCustomProperty && typeof value === 'number' && value !== 0 && !(isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name])) {\n    return value + 'px'; // Presumes implicit 'px' suffix for unitless numbers\n  }\n  return ('' + value).trim();\n}\nexport default dangerousStyleValue;","/* eslint-disable */\n\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 * From React 16.3.0\n * \n */\n\nimport dangerousStyleValue from './dangerousStyleValue';\n\n/**\n * Sets the value for multiple styles on a node.  If a value is specified as\n * '' (empty string), the corresponding style property will be unset.\n *\n * @param {DOMElement} node\n * @param {object} styles\n */\nfunction setValueForStyles(node, styles) {\n  var style = node.style;\n  for (var styleName in styles) {\n    if (!styles.hasOwnProperty(styleName)) {\n      continue;\n    }\n    var isCustomProperty = styleName.indexOf('--') === 0;\n    var styleValue = dangerousStyleValue(styleName, styles[styleName], isCustomProperty);\n    if (styleName === 'float') {\n      styleName = 'cssFloat';\n    }\n    if (isCustomProperty) {\n      style.setProperty(styleName, styleValue);\n    } else {\n      style[styleName] = styleValue;\n    }\n  }\n}\nexport default setValueForStyles;","/**\n * Copyright (c) Nicolas Gallagher.\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\nimport getBoundingClientRect from '../../modules/getBoundingClientRect';\nimport setValueForStyles from '../../modules/setValueForStyles';\nvar getRect = node => {\n  var height = node.offsetHeight;\n  var width = node.offsetWidth;\n  var left = node.offsetLeft;\n  var top = node.offsetTop;\n  node = node.offsetParent;\n  while (node && node.nodeType === 1 /* Node.ELEMENT_NODE */) {\n    left += node.offsetLeft + node.clientLeft - node.scrollLeft;\n    top += node.offsetTop + node.clientTop - node.scrollTop;\n    node = node.offsetParent;\n  }\n  top -= window.scrollY;\n  left -= window.scrollX;\n  return {\n    width,\n    height,\n    top,\n    left\n  };\n};\nvar measureLayout = (node, relativeToNativeNode, callback) => {\n  var relativeNode = relativeToNativeNode || node && node.parentNode;\n  if (node && relativeNode) {\n    setTimeout(() => {\n      if (node.isConnected && relativeNode.isConnected) {\n        var relativeRect = getRect(relativeNode);\n        var _getRect = getRect(node),\n          height = _getRect.height,\n          left = _getRect.left,\n          top = _getRect.top,\n          width = _getRect.width;\n        var x = left - relativeRect.left;\n        var y = top - relativeRect.top;\n        callback(x, y, width, height, left, top);\n      }\n    }, 0);\n  }\n};\nvar elementsToIgnore = {\n  A: true,\n  BODY: true,\n  INPUT: true,\n  SELECT: true,\n  TEXTAREA: true\n};\nvar UIManager = {\n  blur(node) {\n    try {\n      node.blur();\n    } catch (err) {}\n  },\n  focus(node) {\n    try {\n      var name = node.nodeName;\n      // A tabIndex of -1 allows element to be programmatically focused but\n      // prevents keyboard focus. We don't want to set the tabindex value on\n      // elements that should not prevent keyboard focus.\n      if (node.getAttribute('tabIndex') == null && node.isContentEditable !== true && elementsToIgnore[name] == null) {\n        node.setAttribute('tabIndex', '-1');\n      }\n      node.focus();\n    } catch (err) {}\n  },\n  measure(node, callback) {\n    measureLayout(node, null, callback);\n  },\n  measureInWindow(node, callback) {\n    if (node) {\n      setTimeout(() => {\n        var _getBoundingClientRec = getBoundingClientRect(node),\n          height = _getBoundingClientRec.height,\n          left = _getBoundingClientRec.left,\n          top = _getBoundingClientRec.top,\n          width = _getBoundingClientRec.width;\n        callback(left, top, width, height);\n      }, 0);\n    }\n  },\n  measureLayout(node, relativeToNativeNode, onFail, onSuccess) {\n    measureLayout(node, relativeToNativeNode, onSuccess);\n  },\n  updateView(node, props) {\n    for (var prop in props) {\n      if (!Object.prototype.hasOwnProperty.call(props, prop)) {\n        continue;\n      }\n      var value = props[prop];\n      switch (prop) {\n        case 'style':\n          {\n            setValueForStyles(node, value);\n            break;\n          }\n        case 'class':\n        case 'className':\n          {\n            node.setAttribute('class', value);\n            break;\n          }\n        case 'text':\n        case 'value':\n          // native platforms use `text` prop to replace text input value\n          node.value = value;\n          break;\n        default:\n          node.setAttribute(prop, value);\n      }\n    }\n  },\n  configureNextLayoutAnimation(config, onAnimationDidEnd) {\n    onAnimationDidEnd();\n  },\n  // mocks\n  setLayoutAnimationEnabledExperimental() {}\n};\nexport default UIManager;","/**\n * Copyright (c) Nicolas Gallagher.\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\n'use client';\n\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"hrefAttrs\", \"onLayout\", \"onMoveShouldSetResponder\", \"onMoveShouldSetResponderCapture\", \"onResponderEnd\", \"onResponderGrant\", \"onResponderMove\", \"onResponderReject\", \"onResponderRelease\", \"onResponderStart\", \"onResponderTerminate\", \"onResponderTerminationRequest\", \"onScrollShouldSetResponder\", \"onScrollShouldSetResponderCapture\", \"onSelectionChangeShouldSetResponder\", \"onSelectionChangeShouldSetResponderCapture\", \"onStartShouldSetResponder\", \"onStartShouldSetResponderCapture\"];\nimport * as React from 'react';\nimport createElement from '../createElement';\nimport * as forwardedProps from '../../modules/forwardedProps';\nimport pick from '../../modules/pick';\nimport useElementLayout from '../../modules/useElementLayout';\nimport useMergeRefs from '../../modules/useMergeRefs';\nimport usePlatformMethods from '../../modules/usePlatformMethods';\nimport useResponderEvents from '../../modules/useResponderEvents';\nimport StyleSheet from '../StyleSheet';\nimport TextAncestorContext from '../Text/TextAncestorContext';\nimport { useLocaleContext, getLocaleDirection } from '../../modules/useLocale';\nvar forwardPropsList = Object.assign({}, forwardedProps.defaultProps, forwardedProps.accessibilityProps, forwardedProps.clickProps, forwardedProps.focusProps, forwardedProps.keyboardProps, forwardedProps.mouseProps, forwardedProps.touchProps, forwardedProps.styleProps, {\n  href: true,\n  lang: true,\n  onScroll: true,\n  onWheel: true,\n  pointerEvents: true\n});\nvar pickProps = props => pick(props, forwardPropsList);\nvar View = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n  var hrefAttrs = props.hrefAttrs,\n    onLayout = props.onLayout,\n    onMoveShouldSetResponder = props.onMoveShouldSetResponder,\n    onMoveShouldSetResponderCapture = props.onMoveShouldSetResponderCapture,\n    onResponderEnd = props.onResponderEnd,\n    onResponderGrant = props.onResponderGrant,\n    onResponderMove = props.onResponderMove,\n    onResponderReject = props.onResponderReject,\n    onResponderRelease = props.onResponderRelease,\n    onResponderStart = props.onResponderStart,\n    onResponderTerminate = props.onResponderTerminate,\n    onResponderTerminationRequest = props.onResponderTerminationRequest,\n    onScrollShouldSetResponder = props.onScrollShouldSetResponder,\n    onScrollShouldSetResponderCapture = props.onScrollShouldSetResponderCapture,\n    onSelectionChangeShouldSetResponder = props.onSelectionChangeShouldSetResponder,\n    onSelectionChangeShouldSetResponderCapture = props.onSelectionChangeShouldSetResponderCapture,\n    onStartShouldSetResponder = props.onStartShouldSetResponder,\n    onStartShouldSetResponderCapture = props.onStartShouldSetResponderCapture,\n    rest = _objectWithoutPropertiesLoose(props, _excluded);\n  if (process.env.NODE_ENV !== 'production') {\n    React.Children.toArray(props.children).forEach(item => {\n      if (typeof item === 'string') {\n        console.error(\"Unexpected text node: \" + item + \". A text node cannot be a child of a <View>.\");\n      }\n    });\n  }\n  var hasTextAncestor = React.useContext(TextAncestorContext);\n  var hostRef = React.useRef(null);\n  var _useLocaleContext = useLocaleContext(),\n    contextDirection = _useLocaleContext.direction;\n  useElementLayout(hostRef, onLayout);\n  useResponderEvents(hostRef, {\n    onMoveShouldSetResponder,\n    onMoveShouldSetResponderCapture,\n    onResponderEnd,\n    onResponderGrant,\n    onResponderMove,\n    onResponderReject,\n    onResponderRelease,\n    onResponderStart,\n    onResponderTerminate,\n    onResponderTerminationRequest,\n    onScrollShouldSetResponder,\n    onScrollShouldSetResponderCapture,\n    onSelectionChangeShouldSetResponder,\n    onSelectionChangeShouldSetResponderCapture,\n    onStartShouldSetResponder,\n    onStartShouldSetResponderCapture\n  });\n  var component = 'div';\n  var langDirection = props.lang != null ? getLocaleDirection(props.lang) : null;\n  var componentDirection = props.dir || langDirection;\n  var writingDirection = componentDirection || contextDirection;\n  var supportedProps = pickProps(rest);\n  supportedProps.dir = componentDirection;\n  supportedProps.style = [styles.view$raw, hasTextAncestor && styles.inline, props.style];\n  if (props.href != null) {\n    component = 'a';\n    if (hrefAttrs != null) {\n      var download = hrefAttrs.download,\n        rel = hrefAttrs.rel,\n        target = hrefAttrs.target;\n      if (download != null) {\n        supportedProps.download = download;\n      }\n      if (rel != null) {\n        supportedProps.rel = rel;\n      }\n      if (typeof target === 'string') {\n        supportedProps.target = target.charAt(0) !== '_' ? '_' + target : target;\n      }\n    }\n  }\n  var platformMethodsRef = usePlatformMethods(supportedProps);\n  var setRef = useMergeRefs(hostRef, platformMethodsRef, forwardedRef);\n  supportedProps.ref = setRef;\n  return createElement(component, supportedProps, {\n    writingDirection\n  });\n});\nView.displayName = 'View';\nvar styles = StyleSheet.create({\n  view$raw: {\n    alignContent: 'flex-start',\n    alignItems: 'stretch',\n    backgroundColor: 'transparent',\n    border: '0 solid black',\n    boxSizing: 'border-box',\n    display: 'flex',\n    flexBasis: 'auto',\n    flexDirection: 'column',\n    flexShrink: 0,\n    listStyle: 'none',\n    margin: 0,\n    minHeight: 0,\n    minWidth: 0,\n    padding: 0,\n    position: 'relative',\n    textDecoration: 'none',\n    zIndex: 0\n  },\n  inline: {\n    display: 'inline-flex'\n  }\n});\nexport default View;","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"aria-activedescendant\", \"accessibilityActiveDescendant\", \"aria-atomic\", \"accessibilityAtomic\", \"aria-autocomplete\", \"accessibilityAutoComplete\", \"aria-busy\", \"accessibilityBusy\", \"aria-checked\", \"accessibilityChecked\", \"aria-colcount\", \"accessibilityColumnCount\", \"aria-colindex\", \"accessibilityColumnIndex\", \"aria-colspan\", \"accessibilityColumnSpan\", \"aria-controls\", \"accessibilityControls\", \"aria-current\", \"accessibilityCurrent\", \"aria-describedby\", \"accessibilityDescribedBy\", \"aria-details\", \"accessibilityDetails\", \"aria-disabled\", \"accessibilityDisabled\", \"aria-errormessage\", \"accessibilityErrorMessage\", \"aria-expanded\", \"accessibilityExpanded\", \"aria-flowto\", \"accessibilityFlowTo\", \"aria-haspopup\", \"accessibilityHasPopup\", \"aria-hidden\", \"accessibilityHidden\", \"aria-invalid\", \"accessibilityInvalid\", \"aria-keyshortcuts\", \"accessibilityKeyShortcuts\", \"aria-label\", \"accessibilityLabel\", \"aria-labelledby\", \"accessibilityLabelledBy\", \"aria-level\", \"accessibilityLevel\", \"aria-live\", \"accessibilityLiveRegion\", \"aria-modal\", \"accessibilityModal\", \"aria-multiline\", \"accessibilityMultiline\", \"aria-multiselectable\", \"accessibilityMultiSelectable\", \"aria-orientation\", \"accessibilityOrientation\", \"aria-owns\", \"accessibilityOwns\", \"aria-placeholder\", \"accessibilityPlaceholder\", \"aria-posinset\", \"accessibilityPosInSet\", \"aria-pressed\", \"accessibilityPressed\", \"aria-readonly\", \"accessibilityReadOnly\", \"aria-required\", \"accessibilityRequired\", \"role\", \"accessibilityRole\", \"aria-roledescription\", \"accessibilityRoleDescription\", \"aria-rowcount\", \"accessibilityRowCount\", \"aria-rowindex\", \"accessibilityRowIndex\", \"aria-rowspan\", \"accessibilityRowSpan\", \"aria-selected\", \"accessibilitySelected\", \"aria-setsize\", \"accessibilitySetSize\", \"aria-sort\", \"accessibilitySort\", \"aria-valuemax\", \"accessibilityValueMax\", \"aria-valuemin\", \"accessibilityValueMin\", \"aria-valuenow\", \"accessibilityValueNow\", \"aria-valuetext\", \"accessibilityValueText\", \"dataSet\", \"focusable\", \"id\", \"nativeID\", \"pointerEvents\", \"style\", \"tabIndex\", \"testID\"];\n/**\n * Copyright (c) Nicolas Gallagher.\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\nimport AccessibilityUtil from '../AccessibilityUtil';\nimport StyleSheet from '../../exports/StyleSheet';\nimport { warnOnce } from '../warnOnce';\nvar emptyObject = {};\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\nvar uppercasePattern = /[A-Z]/g;\nfunction toHyphenLower(match) {\n  return '-' + match.toLowerCase();\n}\nfunction hyphenateString(str) {\n  return str.replace(uppercasePattern, toHyphenLower);\n}\nfunction processIDRefList(idRefList) {\n  return isArray(idRefList) ? idRefList.join(' ') : idRefList;\n}\nvar pointerEventsStyles = StyleSheet.create({\n  auto: {\n    pointerEvents: 'auto'\n  },\n  'box-none': {\n    pointerEvents: 'box-none'\n  },\n  'box-only': {\n    pointerEvents: 'box-only'\n  },\n  none: {\n    pointerEvents: 'none'\n  }\n});\nvar createDOMProps = (elementType, props, options) => {\n  if (!props) {\n    props = emptyObject;\n  }\n  var _props = props,\n    ariaActiveDescendant = _props['aria-activedescendant'],\n    accessibilityActiveDescendant = _props.accessibilityActiveDescendant,\n    ariaAtomic = _props['aria-atomic'],\n    accessibilityAtomic = _props.accessibilityAtomic,\n    ariaAutoComplete = _props['aria-autocomplete'],\n    accessibilityAutoComplete = _props.accessibilityAutoComplete,\n    ariaBusy = _props['aria-busy'],\n    accessibilityBusy = _props.accessibilityBusy,\n    ariaChecked = _props['aria-checked'],\n    accessibilityChecked = _props.accessibilityChecked,\n    ariaColumnCount = _props['aria-colcount'],\n    accessibilityColumnCount = _props.accessibilityColumnCount,\n    ariaColumnIndex = _props['aria-colindex'],\n    accessibilityColumnIndex = _props.accessibilityColumnIndex,\n    ariaColumnSpan = _props['aria-colspan'],\n    accessibilityColumnSpan = _props.accessibilityColumnSpan,\n    ariaControls = _props['aria-controls'],\n    accessibilityControls = _props.accessibilityControls,\n    ariaCurrent = _props['aria-current'],\n    accessibilityCurrent = _props.accessibilityCurrent,\n    ariaDescribedBy = _props['aria-describedby'],\n    accessibilityDescribedBy = _props.accessibilityDescribedBy,\n    ariaDetails = _props['aria-details'],\n    accessibilityDetails = _props.accessibilityDetails,\n    ariaDisabled = _props['aria-disabled'],\n    accessibilityDisabled = _props.accessibilityDisabled,\n    ariaErrorMessage = _props['aria-errormessage'],\n    accessibilityErrorMessage = _props.accessibilityErrorMessage,\n    ariaExpanded = _props['aria-expanded'],\n    accessibilityExpanded = _props.accessibilityExpanded,\n    ariaFlowTo = _props['aria-flowto'],\n    accessibilityFlowTo = _props.accessibilityFlowTo,\n    ariaHasPopup = _props['aria-haspopup'],\n    accessibilityHasPopup = _props.accessibilityHasPopup,\n    ariaHidden = _props['aria-hidden'],\n    accessibilityHidden = _props.accessibilityHidden,\n    ariaInvalid = _props['aria-invalid'],\n    accessibilityInvalid = _props.accessibilityInvalid,\n    ariaKeyShortcuts = _props['aria-keyshortcuts'],\n    accessibilityKeyShortcuts = _props.accessibilityKeyShortcuts,\n    ariaLabel = _props['aria-label'],\n    accessibilityLabel = _props.accessibilityLabel,\n    ariaLabelledBy = _props['aria-labelledby'],\n    accessibilityLabelledBy = _props.accessibilityLabelledBy,\n    ariaLevel = _props['aria-level'],\n    accessibilityLevel = _props.accessibilityLevel,\n    ariaLive = _props['aria-live'],\n    accessibilityLiveRegion = _props.accessibilityLiveRegion,\n    ariaModal = _props['aria-modal'],\n    accessibilityModal = _props.accessibilityModal,\n    ariaMultiline = _props['aria-multiline'],\n    accessibilityMultiline = _props.accessibilityMultiline,\n    ariaMultiSelectable = _props['aria-multiselectable'],\n    accessibilityMultiSelectable = _props.accessibilityMultiSelectable,\n    ariaOrientation = _props['aria-orientation'],\n    accessibilityOrientation = _props.accessibilityOrientation,\n    ariaOwns = _props['aria-owns'],\n    accessibilityOwns = _props.accessibilityOwns,\n    ariaPlaceholder = _props['aria-placeholder'],\n    accessibilityPlaceholder = _props.accessibilityPlaceholder,\n    ariaPosInSet = _props['aria-posinset'],\n    accessibilityPosInSet = _props.accessibilityPosInSet,\n    ariaPressed = _props['aria-pressed'],\n    accessibilityPressed = _props.accessibilityPressed,\n    ariaReadOnly = _props['aria-readonly'],\n    accessibilityReadOnly = _props.accessibilityReadOnly,\n    ariaRequired = _props['aria-required'],\n    accessibilityRequired = _props.accessibilityRequired,\n    ariaRole = _props.role,\n    accessibilityRole = _props.accessibilityRole,\n    ariaRoleDescription = _props['aria-roledescription'],\n    accessibilityRoleDescription = _props.accessibilityRoleDescription,\n    ariaRowCount = _props['aria-rowcount'],\n    accessibilityRowCount = _props.accessibilityRowCount,\n    ariaRowIndex = _props['aria-rowindex'],\n    accessibilityRowIndex = _props.accessibilityRowIndex,\n    ariaRowSpan = _props['aria-rowspan'],\n    accessibilityRowSpan = _props.accessibilityRowSpan,\n    ariaSelected = _props['aria-selected'],\n    accessibilitySelected = _props.accessibilitySelected,\n    ariaSetSize = _props['aria-setsize'],\n    accessibilitySetSize = _props.accessibilitySetSize,\n    ariaSort = _props['aria-sort'],\n    accessibilitySort = _props.accessibilitySort,\n    ariaValueMax = _props['aria-valuemax'],\n    accessibilityValueMax = _props.accessibilityValueMax,\n    ariaValueMin = _props['aria-valuemin'],\n    accessibilityValueMin = _props.accessibilityValueMin,\n    ariaValueNow = _props['aria-valuenow'],\n    accessibilityValueNow = _props.accessibilityValueNow,\n    ariaValueText = _props['aria-valuetext'],\n    accessibilityValueText = _props.accessibilityValueText,\n    dataSet = _props.dataSet,\n    focusable = _props.focusable,\n    id = _props.id,\n    nativeID = _props.nativeID,\n    pointerEvents = _props.pointerEvents,\n    style = _props.style,\n    tabIndex = _props.tabIndex,\n    testID = _props.testID,\n    domProps = _objectWithoutPropertiesLoose(_props, _excluded);\n\n  /*\n  if (accessibilityDisabled != null) {\n    warnOnce('accessibilityDisabled', `accessibilityDisabled is deprecated.`);\n  }\n  */\n  var disabled = ariaDisabled || accessibilityDisabled;\n  var role = AccessibilityUtil.propsToAriaRole(props);\n\n  // ACCESSIBILITY\n  /*\n  if (accessibilityActiveDescendant != null) {\n    warnOnce(\n      'accessibilityActiveDescendant',\n      `accessibilityActiveDescendant is deprecated. Use aria-activedescendant.`\n    );\n  }\n  */\n  var _ariaActiveDescendant = ariaActiveDescendant != null ? ariaActiveDescendant : accessibilityActiveDescendant;\n  if (_ariaActiveDescendant != null) {\n    domProps['aria-activedescendant'] = _ariaActiveDescendant;\n  }\n\n  /*\n  if (accessibilityAtomic != null) {\n    warnOnce(\n      'accessibilityAtomic',\n      `accessibilityAtomic is deprecated. Use aria-atomic.`\n    );\n  }\n  */\n  var _ariaAtomic = ariaAtomic != null ? ariaActiveDescendant : accessibilityAtomic;\n  if (_ariaAtomic != null) {\n    domProps['aria-atomic'] = _ariaAtomic;\n  }\n\n  /*\n  if (accessibilityAutoComplete != null) {\n    warnOnce(\n      'accessibilityAutoComplete',\n      `accessibilityAutoComplete is deprecated. Use aria-autocomplete.`\n    );\n  }\n  */\n  var _ariaAutoComplete = ariaAutoComplete != null ? ariaAutoComplete : accessibilityAutoComplete;\n  if (_ariaAutoComplete != null) {\n    domProps['aria-autocomplete'] = _ariaAutoComplete;\n  }\n\n  /*\n  if (accessibilityBusy != null) {\n    warnOnce(\n      'accessibilityBusy',\n      `accessibilityBusy is deprecated. Use aria-busy.`\n    );\n  }\n  */\n  var _ariaBusy = ariaBusy != null ? ariaBusy : accessibilityBusy;\n  if (_ariaBusy != null) {\n    domProps['aria-busy'] = _ariaBusy;\n  }\n\n  /*\n  if (accessibilityChecked != null) {\n    warnOnce(\n      'accessibilityChecked',\n      `accessibilityChecked is deprecated. Use aria-checked.`\n    );\n  }\n  */\n  var _ariaChecked = ariaChecked != null ? ariaChecked : accessibilityChecked;\n  if (_ariaChecked != null) {\n    domProps['aria-checked'] = _ariaChecked;\n  }\n\n  /*\n  if (accessibilityColumnCount != null) {\n    warnOnce(\n      'accessibilityColumnCount',\n      `accessibilityColumnCount is deprecated. Use aria-colcount.`\n    );\n  }\n  */\n  var _ariaColumnCount = ariaColumnCount != null ? ariaColumnCount : accessibilityColumnCount;\n  if (_ariaColumnCount != null) {\n    domProps['aria-colcount'] = _ariaColumnCount;\n  }\n\n  /*\n  if (accessibilityColumnIndex != null) {\n    warnOnce(\n      'accessibilityColumnIndex',\n      `accessibilityColumnIndex is deprecated. Use aria-colindex.`\n    );\n  }\n  */\n  var _ariaColumnIndex = ariaColumnIndex != null ? ariaColumnIndex : accessibilityColumnIndex;\n  if (_ariaColumnIndex != null) {\n    domProps['aria-colindex'] = _ariaColumnIndex;\n  }\n\n  /*\n  if (accessibilityColumnSpan != null) {\n    warnOnce(\n      'accessibilityColumnSpan',\n      `accessibilityColumnSpan is deprecated. Use aria-colspan.`\n    );\n  }\n  */\n  var _ariaColumnSpan = ariaColumnSpan != null ? ariaColumnSpan : accessibilityColumnSpan;\n  if (_ariaColumnSpan != null) {\n    domProps['aria-colspan'] = _ariaColumnSpan;\n  }\n\n  /*\n  if (accessibilityControls != null) {\n    warnOnce(\n      'accessibilityControls',\n      `accessibilityControls is deprecated. Use aria-controls.`\n    );\n  }\n  */\n  var _ariaControls = ariaControls != null ? ariaControls : accessibilityControls;\n  if (_ariaControls != null) {\n    domProps['aria-controls'] = processIDRefList(_ariaControls);\n  }\n\n  /*\n  if (accessibilityCurrent != null) {\n    warnOnce(\n      'accessibilityCurrent',\n      `accessibilityCurrent is deprecated. Use aria-current.`\n    );\n  }\n  */\n  var _ariaCurrent = ariaCurrent != null ? ariaCurrent : accessibilityCurrent;\n  if (_ariaCurrent != null) {\n    domProps['aria-current'] = _ariaCurrent;\n  }\n\n  /*\n  if (accessibilityDescribedBy != null) {\n    warnOnce(\n      'accessibilityDescribedBy',\n      `accessibilityDescribedBy is deprecated. Use aria-describedby.`\n    );\n  }\n  */\n  var _ariaDescribedBy = ariaDescribedBy != null ? ariaDescribedBy : accessibilityDescribedBy;\n  if (_ariaDescribedBy != null) {\n    domProps['aria-describedby'] = processIDRefList(_ariaDescribedBy);\n  }\n\n  /*\n  if (accessibilityDetails != null) {\n    warnOnce(\n      'accessibilityDetails',\n      `accessibilityDetails is deprecated. Use aria-details.`\n    );\n  }\n  */\n  var _ariaDetails = ariaDetails != null ? ariaDetails : accessibilityDetails;\n  if (_ariaDetails != null) {\n    domProps['aria-details'] = _ariaDetails;\n  }\n  if (disabled === true) {\n    domProps['aria-disabled'] = true;\n    // Enhance with native semantics\n    if (elementType === 'button' || elementType === 'form' || elementType === 'input' || elementType === 'select' || elementType === 'textarea') {\n      domProps.disabled = true;\n    }\n  }\n\n  /*\n  if (accessibilityErrorMessage != null) {\n    warnOnce(\n      'accessibilityErrorMessage',\n      `accessibilityErrorMessage is deprecated. Use aria-errormessage.`\n    );\n  }\n  */\n  var _ariaErrorMessage = ariaErrorMessage != null ? ariaErrorMessage : accessibilityErrorMessage;\n  if (_ariaErrorMessage != null) {\n    domProps['aria-errormessage'] = _ariaErrorMessage;\n  }\n\n  /*\n  if (accessibilityExpanded != null) {\n    warnOnce(\n      'accessibilityExpanded',\n      `accessibilityExpanded is deprecated. Use aria-expanded.`\n    );\n  }\n  */\n  var _ariaExpanded = ariaExpanded != null ? ariaExpanded : accessibilityExpanded;\n  if (_ariaExpanded != null) {\n    domProps['aria-expanded'] = _ariaExpanded;\n  }\n\n  /*\n  if (accessibilityFlowTo != null) {\n    warnOnce(\n      'accessibilityFlowTo',\n      `accessibilityFlowTo is deprecated. Use aria-flowto.`\n    );\n  }\n  */\n  var _ariaFlowTo = ariaFlowTo != null ? ariaFlowTo : accessibilityFlowTo;\n  if (_ariaFlowTo != null) {\n    domProps['aria-flowto'] = processIDRefList(_ariaFlowTo);\n  }\n\n  /*\n  if (accessibilityHasPopup != null) {\n    warnOnce(\n      'accessibilityHasPopup',\n      `accessibilityHasPopup is deprecated. Use aria-haspopup.`\n    );\n  }\n  */\n  var _ariaHasPopup = ariaHasPopup != null ? ariaHasPopup : accessibilityHasPopup;\n  if (_ariaHasPopup != null) {\n    domProps['aria-haspopup'] = _ariaHasPopup;\n  }\n\n  /*\n  if (accessibilityHidden != null) {\n    warnOnce(\n      'accessibilityHidden',\n      `accessibilityHidden is deprecated. Use aria-hidden.`\n    );\n  }\n  */\n  var _ariaHidden = ariaHidden != null ? ariaHidden : accessibilityHidden;\n  if (_ariaHidden === true) {\n    domProps['aria-hidden'] = _ariaHidden;\n  }\n\n  /*\n  if (accessibilityInvalid != null) {\n    warnOnce(\n      'accessibilityInvalid',\n      `accessibilityInvalid is deprecated. Use aria-invalid.`\n    );\n  }\n  */\n  var _ariaInvalid = ariaInvalid != null ? ariaInvalid : accessibilityInvalid;\n  if (_ariaInvalid != null) {\n    domProps['aria-invalid'] = _ariaInvalid;\n  }\n\n  /*\n  if (accessibilityKeyShortcuts != null) {\n    warnOnce(\n      'accessibilityKeyShortcuts',\n      `accessibilityKeyShortcuts is deprecated. Use aria-keyshortcuts.`\n    );\n  }\n  */\n  var _ariaKeyShortcuts = ariaKeyShortcuts != null ? ariaKeyShortcuts : accessibilityKeyShortcuts;\n  if (_ariaKeyShortcuts != null) {\n    domProps['aria-keyshortcuts'] = processIDRefList(_ariaKeyShortcuts);\n  }\n\n  /*\n  if (accessibilityLabel != null) {\n    warnOnce(\n      'accessibilityLabel',\n      `accessibilityLabel is deprecated. Use aria-label.`\n    );\n  }\n  */\n  var _ariaLabel = ariaLabel != null ? ariaLabel : accessibilityLabel;\n  if (_ariaLabel != null) {\n    domProps['aria-label'] = _ariaLabel;\n  }\n\n  /*\n  if (accessibilityLabelledBy != null) {\n    warnOnce(\n      'accessibilityLabelledBy',\n      `accessibilityLabelledBy is deprecated. Use aria-labelledby.`\n    );\n  }\n  */\n  var _ariaLabelledBy = ariaLabelledBy != null ? ariaLabelledBy : accessibilityLabelledBy;\n  if (_ariaLabelledBy != null) {\n    domProps['aria-labelledby'] = processIDRefList(_ariaLabelledBy);\n  }\n\n  /*\n  if (accessibilityLevel != null) {\n    warnOnce(\n      'accessibilityLevel',\n      `accessibilityLevel is deprecated. Use aria-level.`\n    );\n  }\n  */\n  var _ariaLevel = ariaLevel != null ? ariaLevel : accessibilityLevel;\n  if (_ariaLevel != null) {\n    domProps['aria-level'] = _ariaLevel;\n  }\n\n  /*\n  if (accessibilityLiveRegion != null) {\n    warnOnce(\n      'accessibilityLiveRegion',\n      `accessibilityLiveRegion is deprecated. Use aria-live.`\n    );\n  }\n  */\n  var _ariaLive = ariaLive != null ? ariaLive : accessibilityLiveRegion;\n  if (_ariaLive != null) {\n    domProps['aria-live'] = _ariaLive === 'none' ? 'off' : _ariaLive;\n  }\n\n  /*\n  if (accessibilityModal != null) {\n    warnOnce(\n      'accessibilityModal',\n      `accessibilityModal is deprecated. Use aria-modal.`\n    );\n  }\n  */\n  var _ariaModal = ariaModal != null ? ariaModal : accessibilityModal;\n  if (_ariaModal != null) {\n    domProps['aria-modal'] = _ariaModal;\n  }\n\n  /*\n  if (accessibilityMultiline != null) {\n    warnOnce(\n      'accessibilityMultiline',\n      `accessibilityMultiline is deprecated. Use aria-multiline.`\n    );\n  }\n  */\n  var _ariaMultiline = ariaMultiline != null ? ariaMultiline : accessibilityMultiline;\n  if (_ariaMultiline != null) {\n    domProps['aria-multiline'] = _ariaMultiline;\n  }\n\n  /*\n  if (accessibilityMultiSelectable != null) {\n    warnOnce(\n      'accessibilityMultiSelectable',\n      `accessibilityMultiSelectable is deprecated. Use aria-multiselectable.`\n    );\n  }\n  */\n  var _ariaMultiSelectable = ariaMultiSelectable != null ? ariaMultiSelectable : accessibilityMultiSelectable;\n  if (_ariaMultiSelectable != null) {\n    domProps['aria-multiselectable'] = _ariaMultiSelectable;\n  }\n\n  /*\n  if (accessibilityOrientation != null) {\n    warnOnce(\n      'accessibilityOrientation',\n      `accessibilityOrientation is deprecated. Use aria-orientation.`\n    );\n  }\n  */\n  var _ariaOrientation = ariaOrientation != null ? ariaOrientation : accessibilityOrientation;\n  if (_ariaOrientation != null) {\n    domProps['aria-orientation'] = _ariaOrientation;\n  }\n\n  /*\n  if (accessibilityOwns != null) {\n    warnOnce(\n      'accessibilityOwns',\n      `accessibilityOwns is deprecated. Use aria-owns.`\n    );\n  }\n  */\n  var _ariaOwns = ariaOwns != null ? ariaOwns : accessibilityOwns;\n  if (_ariaOwns != null) {\n    domProps['aria-owns'] = processIDRefList(_ariaOwns);\n  }\n\n  /*\n  if (accessibilityPlaceholder != null) {\n    warnOnce(\n      'accessibilityPlaceholder',\n      `accessibilityPlaceholder is deprecated. Use aria-placeholder.`\n    );\n  }\n  */\n  var _ariaPlaceholder = ariaPlaceholder != null ? ariaPlaceholder : accessibilityPlaceholder;\n  if (_ariaPlaceholder != null) {\n    domProps['aria-placeholder'] = _ariaPlaceholder;\n  }\n\n  /*\n  if (accessibilityPosInSet != null) {\n    warnOnce(\n      'accessibilityPosInSet',\n      `accessibilityPosInSet is deprecated. Use aria-posinset.`\n    );\n  }\n  */\n  var _ariaPosInSet = ariaPosInSet != null ? ariaPosInSet : accessibilityPosInSet;\n  if (_ariaPosInSet != null) {\n    domProps['aria-posinset'] = _ariaPosInSet;\n  }\n\n  /*\n  if (accessibilityPressed != null) {\n    warnOnce(\n      'accessibilityPressed',\n      `accessibilityPressed is deprecated. Use aria-pressed.`\n    );\n  }\n  */\n  var _ariaPressed = ariaPressed != null ? ariaPressed : accessibilityPressed;\n  if (_ariaPressed != null) {\n    domProps['aria-pressed'] = _ariaPressed;\n  }\n\n  /*\n  if (accessibilityReadOnly != null) {\n    warnOnce(\n      'accessibilityReadOnly',\n      `accessibilityReadOnly is deprecated. Use aria-readonly.`\n    );\n  }\n  */\n  var _ariaReadOnly = ariaReadOnly != null ? ariaReadOnly : accessibilityReadOnly;\n  if (_ariaReadOnly != null) {\n    domProps['aria-readonly'] = _ariaReadOnly;\n    // Enhance with native semantics\n    if (elementType === 'input' || elementType === 'select' || elementType === 'textarea') {\n      domProps.readOnly = true;\n    }\n  }\n\n  /*\n  if (accessibilityRequired != null) {\n    warnOnce(\n      'accessibilityRequired',\n      `accessibilityRequired is deprecated. Use aria-required.`\n    );\n  }\n  */\n  var _ariaRequired = ariaRequired != null ? ariaRequired : accessibilityRequired;\n  if (_ariaRequired != null) {\n    domProps['aria-required'] = _ariaRequired;\n    // Enhance with native semantics\n    if (elementType === 'input' || elementType === 'select' || elementType === 'textarea') {\n      domProps.required = accessibilityRequired;\n    }\n  }\n\n  /*\n  if (accessibilityRole != null) {\n    warnOnce('accessibilityRole', `accessibilityRole is deprecated. Use role.`);\n  }\n  */\n  if (role != null) {\n    // 'presentation' synonym has wider browser support\n    domProps['role'] = role === 'none' ? 'presentation' : role;\n  }\n\n  /*\n  if (accessibilityRoleDescription != null) {\n    warnOnce(\n      'accessibilityRoleDescription',\n      `accessibilityRoleDescription is deprecated. Use aria-roledescription.`\n    );\n  }\n  */\n  var _ariaRoleDescription = ariaRoleDescription != null ? ariaRoleDescription : accessibilityRoleDescription;\n  if (_ariaRoleDescription != null) {\n    domProps['aria-roledescription'] = _ariaRoleDescription;\n  }\n\n  /*\n  if (accessibilityRowCount != null) {\n    warnOnce(\n      'accessibilityRowCount',\n      `accessibilityRowCount is deprecated. Use aria-rowcount.`\n    );\n  }\n  */\n  var _ariaRowCount = ariaRowCount != null ? ariaRowCount : accessibilityRowCount;\n  if (_ariaRowCount != null) {\n    domProps['aria-rowcount'] = _ariaRowCount;\n  }\n\n  /*\n  if (accessibilityRowIndex != null) {\n    warnOnce(\n      'accessibilityRowIndex',\n      `accessibilityRowIndex is deprecated. Use aria-rowindex.`\n    );\n  }\n  */\n  var _ariaRowIndex = ariaRowIndex != null ? ariaRowIndex : accessibilityRowIndex;\n  if (_ariaRowIndex != null) {\n    domProps['aria-rowindex'] = _ariaRowIndex;\n  }\n\n  /*\n  if (accessibilityRowSpan != null) {\n    warnOnce(\n      'accessibilityRowSpan',\n      `accessibilityRowSpan is deprecated. Use aria-rowspan.`\n    );\n  }\n  */\n  var _ariaRowSpan = ariaRowSpan != null ? ariaRowSpan : accessibilityRowSpan;\n  if (_ariaRowSpan != null) {\n    domProps['aria-rowspan'] = _ariaRowSpan;\n  }\n\n  /*\n  if (accessibilitySelected != null) {\n    warnOnce(\n      'accessibilitySelected',\n      `accessibilitySelected is deprecated. Use aria-selected.`\n    );\n  }\n  */\n  var _ariaSelected = ariaSelected != null ? ariaSelected : accessibilitySelected;\n  if (_ariaSelected != null) {\n    domProps['aria-selected'] = _ariaSelected;\n  }\n\n  /*\n  if (accessibilitySetSize != null) {\n    warnOnce(\n      'accessibilitySetSize',\n      `accessibilitySetSize is deprecated. Use aria-setsize.`\n    );\n  }\n  */\n  var _ariaSetSize = ariaSetSize != null ? ariaSetSize : accessibilitySetSize;\n  if (_ariaSetSize != null) {\n    domProps['aria-setsize'] = _ariaSetSize;\n  }\n\n  /*\n  if (accessibilitySort != null) {\n    warnOnce(\n      'accessibilitySort',\n      `accessibilitySort is deprecated. Use aria-sort.`\n    );\n  }\n  */\n  var _ariaSort = ariaSort != null ? ariaSort : accessibilitySort;\n  if (_ariaSort != null) {\n    domProps['aria-sort'] = _ariaSort;\n  }\n\n  /*\n  if (accessibilityValueMax != null) {\n    warnOnce(\n      'accessibilityValueMax',\n      `accessibilityValueMax is deprecated. Use aria-valuemax.`\n    );\n  }\n  */\n  var _ariaValueMax = ariaValueMax != null ? ariaValueMax : accessibilityValueMax;\n  if (_ariaValueMax != null) {\n    domProps['aria-valuemax'] = _ariaValueMax;\n  }\n\n  /*\n  if (accessibilityValueMin != null) {\n    warnOnce(\n      'accessibilityValueMin',\n      `accessibilityValueMin is deprecated. Use aria-valuemin.`\n    );\n  }\n  */\n  var _ariaValueMin = ariaValueMin != null ? ariaValueMin : accessibilityValueMin;\n  if (_ariaValueMin != null) {\n    domProps['aria-valuemin'] = _ariaValueMin;\n  }\n\n  /*\n  if (accessibilityValueNow != null) {\n    warnOnce(\n      'accessibilityValueNow',\n      `accessibilityValueNow is deprecated. Use aria-valuenow.`\n    );\n  }\n  */\n  var _ariaValueNow = ariaValueNow != null ? ariaValueNow : accessibilityValueNow;\n  if (_ariaValueNow != null) {\n    domProps['aria-valuenow'] = _ariaValueNow;\n  }\n\n  /*\n  if (accessibilityValueText != null) {\n    warnOnce(\n      'accessibilityValueText',\n      `accessibilityValueText is deprecated. Use aria-valuetext.`\n    );\n  }\n  */\n  var _ariaValueText = ariaValueText != null ? ariaValueText : accessibilityValueText;\n  if (_ariaValueText != null) {\n    domProps['aria-valuetext'] = _ariaValueText;\n  }\n\n  // \"dataSet\" replaced with \"data-*\"\n  if (dataSet != null) {\n    for (var dataProp in dataSet) {\n      if (hasOwnProperty.call(dataSet, dataProp)) {\n        var dataName = hyphenateString(dataProp);\n        var dataValue = dataSet[dataProp];\n        if (dataValue != null) {\n          domProps[\"data-\" + dataName] = dataValue;\n        }\n      }\n    }\n  }\n\n  // FOCUS\n  if (tabIndex === 0 || tabIndex === '0' || tabIndex === -1 || tabIndex === '-1') {\n    domProps.tabIndex = tabIndex;\n  } else {\n    /*\n    if (focusable != null) {\n      warnOnce('focusable', `focusable is deprecated.`);\n    }\n    */\n\n    // \"focusable\" indicates that an element may be a keyboard tab-stop.\n    if (focusable === false) {\n      domProps.tabIndex = '-1';\n    }\n    if (\n    // These native elements are keyboard focusable by default\n    elementType === 'a' || elementType === 'button' || elementType === 'input' || elementType === 'select' || elementType === 'textarea') {\n      if (focusable === false || accessibilityDisabled === true) {\n        domProps.tabIndex = '-1';\n      }\n    } else if (\n    // These roles are made keyboard focusable by default\n    role === 'button' || role === 'checkbox' || role === 'link' || role === 'radio' || role === 'textbox' || role === 'switch') {\n      if (focusable !== false) {\n        domProps.tabIndex = '0';\n      }\n    } else {\n      // Everything else must explicitly set the prop\n      if (focusable === true) {\n        domProps.tabIndex = '0';\n      }\n    }\n  }\n\n  // Resolve styles\n  if (pointerEvents != null) {\n    warnOnce('pointerEvents', \"props.pointerEvents is deprecated. Use style.pointerEvents\");\n  }\n  var _StyleSheet = StyleSheet([style, pointerEvents && pointerEventsStyles[pointerEvents]], _objectSpread({\n      writingDirection: 'ltr'\n    }, options)),\n    className = _StyleSheet[0],\n    inlineStyle = _StyleSheet[1];\n  if (className) {\n    domProps.className = className;\n  }\n  if (inlineStyle) {\n    domProps.style = inlineStyle;\n  }\n\n  // OTHER\n  // Native element ID\n  /*\n  if (nativeID != null) {\n    warnOnce('nativeID', `nativeID is deprecated. Use id.`);\n  }\n  */\n  var _id = id != null ? id : nativeID;\n  if (_id != null) {\n    domProps.id = _id;\n  }\n  // Automated test IDs\n  if (testID != null) {\n    domProps['data-testid'] = testID;\n  }\n  if (domProps.type == null && elementType === 'button') {\n    domProps.type = 'button';\n  }\n  return domProps;\n};\nexport default createDOMProps;","/**\n * Copyright (c) Nicolas Gallagher.\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\n'use client';\n\nimport AccessibilityUtil from '../../modules/AccessibilityUtil';\nimport createDOMProps from '../../modules/createDOMProps';\nimport React from 'react';\nimport { LocaleProvider } from '../../modules/useLocale';\nvar createElement = (component, props, options) => {\n  // Use equivalent platform elements where possible.\n  var accessibilityComponent;\n  if (component && component.constructor === String) {\n    accessibilityComponent = AccessibilityUtil.propsToAccessibilityComponent(props);\n  }\n  var Component = accessibilityComponent || component;\n  var domProps = createDOMProps(Component, props, options);\n  var element = /*#__PURE__*/React.createElement(Component, domProps);\n\n  // Update locale context if element's writing direction prop changes\n  var elementWithLocaleProvider = domProps.dir ? /*#__PURE__*/React.createElement(LocaleProvider, {\n    children: element,\n    direction: domProps.dir,\n    locale: domProps.lang\n  }) : element;\n  return elementWithLocaleProvider;\n};\nexport default createElement;","/**\n * Copyright (c) Nicolas Gallagher.\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\nvar findNodeHandle = component => {\n  throw new Error('findNodeHandle is not supported on web. ' + 'Use the ref property on the component instead.');\n};\nexport default findNodeHandle;","/**\n * Copyright (c) Nicolas Gallagher.\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\nimport normalizeColor from '@react-native/normalize-colors';\nvar processColor = color => {\n  if (color === undefined || color === null) {\n    return color;\n  }\n\n  // convert number and hex\n  var int32Color = normalizeColor(color);\n  if (int32Color === undefined || int32Color === null) {\n    return undefined;\n  }\n  int32Color = (int32Color << 24 | int32Color >>> 8) >>> 0;\n  return int32Color;\n};\nexport default processColor;","/**\n * Copyright (c) Nicolas Gallagher.\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\nvar accessibilityRoleToWebRole = {\n  adjustable: 'slider',\n  button: 'button',\n  header: 'heading',\n  image: 'img',\n  imagebutton: null,\n  keyboardkey: null,\n  label: null,\n  link: 'link',\n  none: 'presentation',\n  search: 'search',\n  summary: 'region',\n  text: null\n};\nvar propsToAriaRole = _ref => {\n  var accessibilityRole = _ref.accessibilityRole,\n    role = _ref.role;\n  var _role = role || accessibilityRole;\n  if (_role) {\n    var inferredRole = accessibilityRoleToWebRole[_role];\n    if (inferredRole !== null) {\n      // ignore roles that don't map to web\n      return inferredRole || _role;\n    }\n  }\n};\nexport default propsToAriaRole;","/**\n * Copyright (c) Nicolas Gallagher.\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\nimport propsToAriaRole from './propsToAriaRole';\nvar roleComponents = {\n  article: 'article',\n  banner: 'header',\n  blockquote: 'blockquote',\n  button: 'button',\n  code: 'code',\n  complementary: 'aside',\n  contentinfo: 'footer',\n  deletion: 'del',\n  emphasis: 'em',\n  figure: 'figure',\n  insertion: 'ins',\n  form: 'form',\n  list: 'ul',\n  listitem: 'li',\n  main: 'main',\n  navigation: 'nav',\n  paragraph: 'p',\n  region: 'section',\n  strong: 'strong'\n};\nvar emptyObject = {};\nvar propsToAccessibilityComponent = function propsToAccessibilityComponent(props) {\n  if (props === void 0) {\n    props = emptyObject;\n  }\n  var roleProp = props.role || props.accessibilityRole;\n  // special-case for \"label\" role which doesn't map to an ARIA role\n  if (roleProp === 'label') {\n    return 'label';\n  }\n  var role = propsToAriaRole(props);\n  if (role) {\n    if (role === 'heading') {\n      var level = props.accessibilityLevel || props['aria-level'];\n      if (level != null) {\n        return \"h\" + level;\n      }\n      return 'h1';\n    }\n    return roleComponents[role];\n  }\n};\nexport default propsToAccessibilityComponent;","/**\n * Copyright (c) Nicolas Gallagher.\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\nimport isDisabled from './isDisabled';\nimport propsToAccessibilityComponent from './propsToAccessibilityComponent';\nimport propsToAriaRole from './propsToAriaRole';\nvar AccessibilityUtil = {\n  isDisabled,\n  propsToAccessibilityComponent,\n  propsToAriaRole\n};\nexport default AccessibilityUtil;","/**\n * Copyright (c) Nicolas Gallagher.\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\nvar isDisabled = props => props.disabled || Array.isArray(props.accessibilityStates) && props.accessibilityStates.indexOf('disabled') > -1;\nexport default isDisabled;","/**\n * Copyright (c) Nicolas Gallagher.\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\nimport UIManager from '../../exports/UIManager';\n\n/**\n * This class is responsible for coordinating the \"focused\"\n * state for TextInputs. All calls relating to the keyboard\n * should be funneled through here\n */\nvar TextInputState = {\n  /**\n   * Internal state\n   */\n  _currentlyFocusedNode: null,\n  /**\n   * Returns the ID of the currently focused text field, if one exists\n   * If no text field is focused it returns null\n   */\n  currentlyFocusedField() {\n    if (document.activeElement !== this._currentlyFocusedNode) {\n      this._currentlyFocusedNode = null;\n    }\n    return this._currentlyFocusedNode;\n  },\n  /**\n   * @param {Object} TextInputID id of the text field to focus\n   * Focuses the specified text field\n   * noop if the text field was already focused\n   */\n  focusTextInput(textFieldNode) {\n    if (textFieldNode !== null) {\n      this._currentlyFocusedNode = textFieldNode;\n      if (document.activeElement !== textFieldNode) {\n        UIManager.focus(textFieldNode);\n      }\n    }\n  },\n  /**\n   * @param {Object} textFieldNode id of the text field to focus\n   * Unfocuses the specified text field\n   * noop if it wasn't focused\n   */\n  blurTextInput(textFieldNode) {\n    if (textFieldNode !== null) {\n      this._currentlyFocusedNode = null;\n      if (document.activeElement === textFieldNode) {\n        UIManager.blur(textFieldNode);\n      }\n    }\n  }\n};\nexport default TextInputState;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"style\"];\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\nimport View from '../../exports/View';\nimport React from 'react';\n\n/**\n * Common implementation for a simple stubbed view.\n */\nfunction UnimplementedView(_ref) {\n  var style = _ref.style,\n    props = _objectWithoutPropertiesLoose(_ref, _excluded);\n  return /*#__PURE__*/React.createElement(View, _extends({}, props, {\n    style: [unimplementedViewStyles, style]\n  }));\n}\nvar unimplementedViewStyles = process.env.NODE_ENV !== 'production' ? {\n  alignSelf: 'flex-start',\n  borderColor: 'red',\n  borderWidth: 1\n} : {};\nexport default UnimplementedView;","/**\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\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nexport default canUseDOM;","/**\n * Copyright (c) Nicolas Gallagher.\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\nimport TextInputState from '../TextInputState';\nvar dismissKeyboard = () => {\n  TextInputState.blurTextInput(TextInputState.currentlyFocusedField());\n};\nexport default dismissKeyboard;","/**\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\nexport var defaultProps = {\n  children: true,\n  dataSet: true,\n  dir: true,\n  id: true,\n  ref: true,\n  suppressHydrationWarning: true,\n  tabIndex: true,\n  testID: true,\n  // @deprecated\n  focusable: true,\n  nativeID: true\n};\nexport var accessibilityProps = {\n  'aria-activedescendant': true,\n  'aria-atomic': true,\n  'aria-autocomplete': true,\n  'aria-busy': true,\n  'aria-checked': true,\n  'aria-colcount': true,\n  'aria-colindex': true,\n  'aria-colspan': true,\n  'aria-controls': true,\n  'aria-current': true,\n  'aria-describedby': true,\n  'aria-details': true,\n  'aria-disabled': true,\n  'aria-errormessage': true,\n  'aria-expanded': true,\n  'aria-flowto': true,\n  'aria-haspopup': true,\n  'aria-hidden': true,\n  'aria-invalid': true,\n  'aria-keyshortcuts': true,\n  'aria-label': true,\n  'aria-labelledby': true,\n  'aria-level': true,\n  'aria-live': true,\n  'aria-modal': true,\n  'aria-multiline': true,\n  'aria-multiselectable': true,\n  'aria-orientation': true,\n  'aria-owns': true,\n  'aria-placeholder': true,\n  'aria-posinset': true,\n  'aria-pressed': true,\n  'aria-readonly': true,\n  'aria-required': true,\n  inert: true,\n  role: true,\n  'aria-roledescription': true,\n  'aria-rowcount': true,\n  'aria-rowindex': true,\n  'aria-rowspan': true,\n  'aria-selected': true,\n  'aria-setsize': true,\n  'aria-sort': true,\n  'aria-valuemax': true,\n  'aria-valuemin': true,\n  'aria-valuenow': true,\n  'aria-valuetext': true,\n  // @deprecated\n  accessibilityActiveDescendant: true,\n  accessibilityAtomic: true,\n  accessibilityAutoComplete: true,\n  accessibilityBusy: true,\n  accessibilityChecked: true,\n  accessibilityColumnCount: true,\n  accessibilityColumnIndex: true,\n  accessibilityColumnSpan: true,\n  accessibilityControls: true,\n  accessibilityCurrent: true,\n  accessibilityDescribedBy: true,\n  accessibilityDetails: true,\n  accessibilityDisabled: true,\n  accessibilityErrorMessage: true,\n  accessibilityExpanded: true,\n  accessibilityFlowTo: true,\n  accessibilityHasPopup: true,\n  accessibilityHidden: true,\n  accessibilityInvalid: true,\n  accessibilityKeyShortcuts: true,\n  accessibilityLabel: true,\n  accessibilityLabelledBy: true,\n  accessibilityLevel: true,\n  accessibilityLiveRegion: true,\n  accessibilityModal: true,\n  accessibilityMultiline: true,\n  accessibilityMultiSelectable: true,\n  accessibilityOrientation: true,\n  accessibilityOwns: true,\n  accessibilityPlaceholder: true,\n  accessibilityPosInSet: true,\n  accessibilityPressed: true,\n  accessibilityReadOnly: true,\n  accessibilityRequired: true,\n  accessibilityRole: true,\n  accessibilityRoleDescription: true,\n  accessibilityRowCount: true,\n  accessibilityRowIndex: true,\n  accessibilityRowSpan: true,\n  accessibilitySelected: true,\n  accessibilitySetSize: true,\n  accessibilitySort: true,\n  accessibilityValueMax: true,\n  accessibilityValueMin: true,\n  accessibilityValueNow: true,\n  accessibilityValueText: true\n};\nexport var clickProps = {\n  onClick: true,\n  onAuxClick: true,\n  onContextMenu: true,\n  onGotPointerCapture: true,\n  onLostPointerCapture: true,\n  onPointerCancel: true,\n  onPointerDown: true,\n  onPointerEnter: true,\n  onPointerMove: true,\n  onPointerLeave: true,\n  onPointerOut: true,\n  onPointerOver: true,\n  onPointerUp: true\n};\nexport var focusProps = {\n  onBlur: true,\n  onFocus: true\n};\nexport var keyboardProps = {\n  onKeyDown: true,\n  onKeyDownCapture: true,\n  onKeyUp: true,\n  onKeyUpCapture: true\n};\nexport var mouseProps = {\n  onMouseDown: true,\n  onMouseEnter: true,\n  onMouseLeave: true,\n  onMouseMove: true,\n  onMouseOver: true,\n  onMouseOut: true,\n  onMouseUp: true\n};\nexport var touchProps = {\n  onTouchCancel: true,\n  onTouchCancelCapture: true,\n  onTouchEnd: true,\n  onTouchEndCapture: true,\n  onTouchMove: true,\n  onTouchMoveCapture: true,\n  onTouchStart: true,\n  onTouchStartCapture: true\n};\nexport var styleProps = {\n  style: true\n};","/**\n * Copyright (c) Nicolas Gallagher.\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\nvar getBoundingClientRect = node => {\n  if (node != null) {\n    var isElement = node.nodeType === 1; /* Node.ELEMENT_NODE */\n    if (isElement && typeof node.getBoundingClientRect === 'function') {\n      return node.getBoundingClientRect();\n    }\n  }\n};\nexport default getBoundingClientRect;","/**\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\nimport * as React from 'react';\nexport default function mergeRefs() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n  return function forwardRef(node) {\n    args.forEach(ref => {\n      if (ref == null) {\n        return;\n      }\n      if (typeof ref === 'function') {\n        ref(node);\n        return;\n      }\n      if (typeof ref === 'object') {\n        ref.current = node;\n        return;\n      }\n      console.error(\"mergeRefs cannot handle Refs of type boolean, number or string, received ref \" + String(ref));\n    });\n  };\n}","/**\n * Copyright (c) Nicolas Gallagher.\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\nexport default function pick(obj, list) {\n  var nextObj = {};\n  for (var key in obj) {\n    if (obj.hasOwnProperty(key)) {\n      if (list[key] === true) {\n        nextObj[key] = obj[key];\n      }\n    }\n  }\n  return nextObj;\n}","/**\n * Copyright (c) Nicolas Gallagher.\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\nimport useLayoutEffect from '../useLayoutEffect';\nimport UIManager from '../../exports/UIManager';\nimport canUseDOM from '../canUseDom';\nvar DOM_LAYOUT_HANDLER_NAME = '__reactLayoutHandler';\nvar didWarn = !canUseDOM;\nvar resizeObserver = null;\nfunction getResizeObserver() {\n  if (canUseDOM && typeof window.ResizeObserver !== 'undefined') {\n    if (resizeObserver == null) {\n      resizeObserver = new window.ResizeObserver(function (entries) {\n        entries.forEach(entry => {\n          var node = entry.target;\n          var onLayout = node[DOM_LAYOUT_HANDLER_NAME];\n          if (typeof onLayout === 'function') {\n            // We still need to measure the view because browsers don't yet provide\n            // border-box dimensions in the entry\n            UIManager.measure(node, (x, y, width, height, left, top) => {\n              var event = {\n                // $FlowFixMe\n                nativeEvent: {\n                  layout: {\n                    x,\n                    y,\n                    width,\n                    height,\n                    left,\n                    top\n                  }\n                },\n                timeStamp: Date.now()\n              };\n              Object.defineProperty(event.nativeEvent, 'target', {\n                enumerable: true,\n                get: () => entry.target\n              });\n              onLayout(event);\n            });\n          }\n        });\n      });\n    }\n  } else if (!didWarn) {\n    if (process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test') {\n      console.warn('onLayout relies on ResizeObserver which is not supported by your browser. ' + 'Please include a polyfill, e.g., https://github.com/que-etc/resize-observer-polyfill.');\n      didWarn = true;\n    }\n  }\n  return resizeObserver;\n}\nexport default function useElementLayout(ref, onLayout) {\n  var observer = getResizeObserver();\n  useLayoutEffect(() => {\n    var node = ref.current;\n    if (node != null) {\n      node[DOM_LAYOUT_HANDLER_NAME] = onLayout;\n    }\n  }, [ref, onLayout]);\n\n  // Observing is done in a separate effect to avoid this effect running\n  // when 'onLayout' changes.\n  useLayoutEffect(() => {\n    var node = ref.current;\n    if (node != null && observer != null) {\n      if (typeof node[DOM_LAYOUT_HANDLER_NAME] === 'function') {\n        observer.observe(node);\n      } else {\n        observer.unobserve(node);\n      }\n    }\n    return () => {\n      if (node != null && observer != null) {\n        observer.unobserve(node);\n      }\n    };\n  }, [ref, observer]);\n}","/**\n * Copyright (c) Nicolas Gallagher.\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 * useLayoutEffect throws an error on the server. On the few occasions where is\n * problematic, use this hook.\n *\n * \n */\n\nimport { useEffect, useLayoutEffect } from 'react';\nimport canUseDOM from '../canUseDom';\nvar useLayoutEffectImpl = canUseDOM ? useLayoutEffect : useEffect;\nexport default useLayoutEffectImpl;","/**\n * Copyright (c) Nicolas Gallagher.\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\nvar rtlScripts = new Set(['Arab', 'Syrc', 'Samr', 'Mand', 'Thaa', 'Mend', 'Nkoo', 'Adlm', 'Rohg', 'Hebr']);\nvar rtlLangs = new Set(['ae',\n// Avestan\n'ar',\n// Arabic\n'arc',\n// Aramaic\n'bcc',\n// Southern Balochi\n'bqi',\n// Bakthiari\n'ckb',\n// Sorani\n'dv',\n// Dhivehi\n'fa', 'far',\n// Persian\n'glk',\n// Gilaki\n'he', 'iw',\n// Hebrew\n'khw',\n// Khowar\n'ks',\n// Kashmiri\n'ku',\n// Kurdish\n'mzn',\n// Mazanderani\n'nqo',\n// N'Ko\n'pnb',\n// Western Punjabi\n'ps',\n// Pashto\n'sd',\n// Sindhi\n'ug',\n// Uyghur\n'ur',\n// Urdu\n'yi' // Yiddish\n]);\nvar cache = new Map();\n\n/**\n * Determine the writing direction of a locale\n */\nexport function isLocaleRTL(locale) {\n  var cachedRTL = cache.get(locale);\n  if (cachedRTL) {\n    return cachedRTL;\n  }\n  var isRTL = false;\n  // $FlowFixMe\n  if (Intl.Locale) {\n    try {\n      // $FlowFixMe\n      var script = new Intl.Locale(locale).maximize().script;\n      isRTL = rtlScripts.has(script);\n    } catch (_unused) {\n      // RangeError: Incorrect locale information provided\n      // Fallback to inferring from language\n      var lang = locale.split('-')[0];\n      isRTL = rtlLangs.has(lang);\n    }\n  } else {\n    // Fallback to inferring from language\n    var _lang = locale.split('-')[0];\n    isRTL = rtlLangs.has(_lang);\n  }\n  cache.set(locale, isRTL);\n  return isRTL;\n}","/**\n * Copyright (c) Nicolas Gallagher.\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\nimport React, { createContext, useContext } from 'react';\nimport { isLocaleRTL } from './isLocaleRTL';\nvar defaultLocale = {\n  direction: 'ltr',\n  locale: 'en-US'\n};\nvar LocaleContext = /*#__PURE__*/createContext(defaultLocale);\nexport function getLocaleDirection(locale) {\n  return isLocaleRTL(locale) ? 'rtl' : 'ltr';\n}\nexport function LocaleProvider(props) {\n  var direction = props.direction,\n    locale = props.locale,\n    children = props.children;\n  var needsContext = direction || locale;\n  return needsContext ? /*#__PURE__*/React.createElement(LocaleContext.Provider, {\n    children: children,\n    value: {\n      direction: locale ? getLocaleDirection(locale) : direction,\n      locale\n    }\n  }) : children;\n}\nexport function useLocaleContext() {\n  return useContext(LocaleContext);\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\nimport * as React from 'react';\nimport mergeRefs from '../mergeRefs';\nexport default function useMergeRefs() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n  return React.useMemo(() => mergeRefs(...args),\n  // eslint-disable-next-line\n  [...args]);\n}","/**\n * Copyright (c) Nicolas Gallagher.\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\nimport UIManager from '../../exports/UIManager';\nimport useStable from '../useStable';\n\n/**\n * Adds non-standard methods to the hode element. This is temporarily until an\n * API like `ReactNative.measure(hostRef, callback)` is added to React Native.\n */\nexport default function usePlatformMethods(_ref) {\n  var pointerEvents = _ref.pointerEvents,\n    style = _ref.style;\n  // Avoid creating a new ref on every render.\n  var ref = useStable(() => hostNode => {\n    if (hostNode != null) {\n      hostNode.measure = callback => UIManager.measure(hostNode, callback);\n      hostNode.measureLayout = (relativeToNode, success, failure) => UIManager.measureLayout(hostNode, relativeToNode, failure, success);\n      hostNode.measureInWindow = callback => UIManager.measureInWindow(hostNode, callback);\n    }\n  });\n  return ref;\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 * @format\n */\n\n'use strict';\n\nvar DELAY = 'DELAY';\nvar ERROR = 'ERROR';\nvar LONG_PRESS_DETECTED = 'LONG_PRESS_DETECTED';\nvar NOT_RESPONDER = 'NOT_RESPONDER';\nvar RESPONDER_ACTIVE_LONG_PRESS_START = 'RESPONDER_ACTIVE_LONG_PRESS_START';\nvar RESPONDER_ACTIVE_PRESS_START = 'RESPONDER_ACTIVE_PRESS_START';\nvar RESPONDER_INACTIVE_PRESS_START = 'RESPONDER_INACTIVE_PRESS_START';\nvar RESPONDER_GRANT = 'RESPONDER_GRANT';\nvar RESPONDER_RELEASE = 'RESPONDER_RELEASE';\nvar RESPONDER_TERMINATED = 'RESPONDER_TERMINATED';\nvar Transitions = Object.freeze({\n  NOT_RESPONDER: {\n    DELAY: ERROR,\n    RESPONDER_GRANT: RESPONDER_INACTIVE_PRESS_START,\n    RESPONDER_RELEASE: ERROR,\n    RESPONDER_TERMINATED: ERROR,\n    LONG_PRESS_DETECTED: ERROR\n  },\n  RESPONDER_INACTIVE_PRESS_START: {\n    DELAY: RESPONDER_ACTIVE_PRESS_START,\n    RESPONDER_GRANT: ERROR,\n    RESPONDER_RELEASE: NOT_RESPONDER,\n    RESPONDER_TERMINATED: NOT_RESPONDER,\n    LONG_PRESS_DETECTED: ERROR\n  },\n  RESPONDER_ACTIVE_PRESS_START: {\n    DELAY: ERROR,\n    RESPONDER_GRANT: ERROR,\n    RESPONDER_RELEASE: NOT_RESPONDER,\n    RESPONDER_TERMINATED: NOT_RESPONDER,\n    LONG_PRESS_DETECTED: RESPONDER_ACTIVE_LONG_PRESS_START\n  },\n  RESPONDER_ACTIVE_LONG_PRESS_START: {\n    DELAY: ERROR,\n    RESPONDER_GRANT: ERROR,\n    RESPONDER_RELEASE: NOT_RESPONDER,\n    RESPONDER_TERMINATED: NOT_RESPONDER,\n    LONG_PRESS_DETECTED: RESPONDER_ACTIVE_LONG_PRESS_START\n  },\n  ERROR: {\n    DELAY: NOT_RESPONDER,\n    RESPONDER_GRANT: RESPONDER_INACTIVE_PRESS_START,\n    RESPONDER_RELEASE: NOT_RESPONDER,\n    RESPONDER_TERMINATED: NOT_RESPONDER,\n    LONG_PRESS_DETECTED: NOT_RESPONDER\n  }\n});\nvar getElementRole = element => element.getAttribute('role');\nvar getElementType = element => element.tagName.toLowerCase();\nvar isActiveSignal = signal => signal === RESPONDER_ACTIVE_PRESS_START || signal === RESPONDER_ACTIVE_LONG_PRESS_START;\nvar isButtonRole = element => getElementRole(element) === 'button';\nvar isPressStartSignal = signal => signal === RESPONDER_INACTIVE_PRESS_START || signal === RESPONDER_ACTIVE_PRESS_START || signal === RESPONDER_ACTIVE_LONG_PRESS_START;\nvar isTerminalSignal = signal => signal === RESPONDER_TERMINATED || signal === RESPONDER_RELEASE;\nvar isValidKeyPress = event => {\n  var key = event.key,\n    target = event.target;\n  var isSpacebar = key === ' ' || key === 'Spacebar';\n  var isButtonish = getElementType(target) === 'button' || isButtonRole(target);\n  return key === 'Enter' || isSpacebar && isButtonish;\n};\nvar DEFAULT_LONG_PRESS_DELAY_MS = 450; // 500 - 50\nvar DEFAULT_PRESS_DELAY_MS = 50;\n\n/**\n * =========================== PressResponder Tutorial ===========================\n *\n * The `PressResponder` class helps you create press interactions by analyzing the\n * geometry of elements and observing when another responder (e.g. ScrollView)\n * has stolen the touch lock. It offers hooks for your component to provide\n * interaction feedback to the user:\n *\n * - When a press has activated (e.g. highlight an element)\n * - When a press has deactivated (e.g. un-highlight an element)\n * - When a press sould trigger an action, meaning it activated and deactivated\n *   while within the geometry of the element without the lock being stolen.\n *\n * A high quality interaction isn't as simple as you might think. There should\n * be a slight delay before activation. Moving your finger beyond an element's\n * bounds should trigger deactivation, but moving the same finger back within an\n * element's bounds should trigger reactivation.\n *\n * In order to use `PressResponder`, do the following:\n *\n *     const pressResponder = new PressResponder(config);\n *\n * 2. Choose the rendered component who should collect the press events. On that\n *    element, spread `pressability.getEventHandlers()` into its props.\n *\n *    return (\n *      <View {...this.state.pressResponder.getEventHandlers()} />\n *    );\n *\n * 3. Reset `PressResponder` when your component unmounts.\n *\n *    componentWillUnmount() {\n *      this.state.pressResponder.reset();\n *    }\n *\n * ==================== Implementation Details ====================\n *\n * `PressResponder` only assumes that there exists a `HitRect` node. The `PressRect`\n * is an abstract box that is extended beyond the `HitRect`.\n *\n * # Geometry\n *\n *  ┌────────────────────────┐\n *  │  ┌──────────────────┐  │ - Presses start anywhere within `HitRect`.\n *  │  │  ┌────────────┐  │  │\n *  │  │  │ VisualRect │  │  │\n *  │  │  └────────────┘  │  │ - When pressed down for sufficient amount of time\n *  │  │    HitRect       │  │   before letting up, `VisualRect` activates.\n *  │  └──────────────────┘  │\n *  │       Out Region   o   │\n *  └────────────────────│───┘\n *                       └────── When the press is released outside the `HitRect`,\n *                               the responder is NOT eligible for a \"press\".\n *\n * # State Machine\n *\n * ┌───────────────┐ ◀──── RESPONDER_RELEASE\n * │ NOT_RESPONDER │\n * └───┬───────────┘ ◀──── RESPONDER_TERMINATED\n *     │\n *     │ RESPONDER_GRANT (HitRect)\n *     │\n *     ▼\n * ┌─────────────────────┐          ┌───────────────────┐              ┌───────────────────┐\n * │ RESPONDER_INACTIVE_ │  DELAY   │ RESPONDER_ACTIVE_ │  T + DELAY   │ RESPONDER_ACTIVE_ │\n * │ PRESS_START         ├────────▶ │ PRESS_START       ├────────────▶ │ LONG_PRESS_START  │\n * └─────────────────────┘          └───────────────────┘              └───────────────────┘\n *\n * T + DELAY => LONG_PRESS_DELAY + DELAY\n *\n * Not drawn are the side effects of each transition. The most important side\n * effect is the invocation of `onLongPress`. Only when the browser produces a\n * `click` event is `onPress` invoked.\n */\nexport default class PressResponder {\n  constructor(config) {\n    this._eventHandlers = null;\n    this._isPointerTouch = false;\n    this._longPressDelayTimeout = null;\n    this._longPressDispatched = false;\n    this._pressDelayTimeout = null;\n    this._pressOutDelayTimeout = null;\n    this._touchState = NOT_RESPONDER;\n    this._responderElement = null;\n    this.configure(config);\n  }\n  configure(config) {\n    this._config = config;\n  }\n\n  /**\n   * Resets any pending timers. This should be called on unmount.\n   */\n  reset() {\n    this._cancelLongPressDelayTimeout();\n    this._cancelPressDelayTimeout();\n    this._cancelPressOutDelayTimeout();\n  }\n\n  /**\n   * Returns a set of props to spread into the interactive element.\n   */\n  getEventHandlers() {\n    if (this._eventHandlers == null) {\n      this._eventHandlers = this._createEventHandlers();\n    }\n    return this._eventHandlers;\n  }\n  _createEventHandlers() {\n    var start = (event, shouldDelay) => {\n      event.persist();\n      this._cancelPressOutDelayTimeout();\n      this._longPressDispatched = false;\n      this._selectionTerminated = false;\n      this._touchState = NOT_RESPONDER;\n      this._isPointerTouch = event.nativeEvent.type === 'touchstart';\n      this._receiveSignal(RESPONDER_GRANT, event);\n      var delayPressStart = normalizeDelay(this._config.delayPressStart, 0, DEFAULT_PRESS_DELAY_MS);\n      if (shouldDelay !== false && delayPressStart > 0) {\n        this._pressDelayTimeout = setTimeout(() => {\n          this._receiveSignal(DELAY, event);\n        }, delayPressStart);\n      } else {\n        this._receiveSignal(DELAY, event);\n      }\n      var delayLongPress = normalizeDelay(this._config.delayLongPress, 10, DEFAULT_LONG_PRESS_DELAY_MS);\n      this._longPressDelayTimeout = setTimeout(() => {\n        this._handleLongPress(event);\n      }, delayLongPress + delayPressStart);\n    };\n    var end = event => {\n      this._receiveSignal(RESPONDER_RELEASE, event);\n    };\n    var keyupHandler = event => {\n      var onPress = this._config.onPress;\n      var target = event.target;\n      if (this._touchState !== NOT_RESPONDER && isValidKeyPress(event)) {\n        end(event);\n        document.removeEventListener('keyup', keyupHandler);\n        var role = target.getAttribute('role');\n        var elementType = getElementType(target);\n        var isNativeInteractiveElement = role === 'link' || elementType === 'a' || elementType === 'button' || elementType === 'input' || elementType === 'select' || elementType === 'textarea';\n        var isActiveElement = this._responderElement === target;\n        if (onPress != null && !isNativeInteractiveElement && isActiveElement) {\n          onPress(event);\n        }\n        this._responderElement = null;\n      }\n    };\n    return {\n      onStartShouldSetResponder: event => {\n        var disabled = this._config.disabled;\n        if (disabled && isButtonRole(event.currentTarget)) {\n          event.stopPropagation();\n        }\n        if (disabled == null) {\n          return true;\n        }\n        return !disabled;\n      },\n      onKeyDown: event => {\n        var disabled = this._config.disabled;\n        var key = event.key,\n          target = event.target;\n        if (!disabled && isValidKeyPress(event)) {\n          if (this._touchState === NOT_RESPONDER) {\n            start(event, false);\n            this._responderElement = target;\n            // Listen to 'keyup' on document to account for situations where\n            // focus is moved to another element during 'keydown'.\n            document.addEventListener('keyup', keyupHandler);\n          }\n          var isSpacebarKey = key === ' ' || key === 'Spacebar';\n          var role = getElementRole(target);\n          var isButtonLikeRole = role === 'button' || role === 'menuitem';\n          if (isSpacebarKey && isButtonLikeRole && getElementType(target) !== 'button') {\n            // Prevent spacebar scrolling the window if using non-native button\n            event.preventDefault();\n          }\n          event.stopPropagation();\n        }\n      },\n      onResponderGrant: event => start(event),\n      onResponderMove: event => {\n        if (this._config.onPressMove != null) {\n          this._config.onPressMove(event);\n        }\n        var touch = getTouchFromResponderEvent(event);\n        if (this._touchActivatePosition != null) {\n          var deltaX = this._touchActivatePosition.pageX - touch.pageX;\n          var deltaY = this._touchActivatePosition.pageY - touch.pageY;\n          if (Math.hypot(deltaX, deltaY) > 10) {\n            this._cancelLongPressDelayTimeout();\n          }\n        }\n      },\n      onResponderRelease: event => end(event),\n      onResponderTerminate: event => {\n        if (event.nativeEvent.type === 'selectionchange') {\n          this._selectionTerminated = true;\n        }\n        this._receiveSignal(RESPONDER_TERMINATED, event);\n      },\n      onResponderTerminationRequest: event => {\n        var _this$_config = this._config,\n          cancelable = _this$_config.cancelable,\n          disabled = _this$_config.disabled,\n          onLongPress = _this$_config.onLongPress;\n        // If `onLongPress` is provided, don't terminate on `contextmenu` as default\n        // behavior will be prevented for non-mouse pointers.\n        if (!disabled && onLongPress != null && this._isPointerTouch && event.nativeEvent.type === 'contextmenu') {\n          return false;\n        }\n        if (cancelable == null) {\n          return true;\n        }\n        return cancelable;\n      },\n      // NOTE: this diverges from react-native in 3 significant ways:\n      // * The `onPress` callback is not connected to the responder system (the native\n      //  `click` event must be used but is dispatched in many scenarios where no pointers\n      //   are on the screen.) Therefore, it's possible for `onPress` to be called without\n      //   `onPress{Start,End}` being called first.\n      // * The `onPress` callback is only be called on the first ancestor of the native\n      //   `click` target that is using the PressResponder.\n      // * The event's `nativeEvent` is a `MouseEvent` not a `TouchEvent`.\n      onClick: event => {\n        var _this$_config2 = this._config,\n          disabled = _this$_config2.disabled,\n          onPress = _this$_config2.onPress;\n        if (!disabled) {\n          // If long press dispatched, cancel default click behavior.\n          // If the responder terminated because text was selected during the gesture,\n          // cancel the default click behavior.\n          event.stopPropagation();\n          if (this._longPressDispatched || this._selectionTerminated) {\n            event.preventDefault();\n          } else if (onPress != null && event.altKey === false) {\n            onPress(event);\n          }\n        } else {\n          if (isButtonRole(event.currentTarget)) {\n            event.stopPropagation();\n          }\n        }\n      },\n      // If `onLongPress` is provided and a touch pointer is being used, prevent the\n      // default context menu from opening.\n      onContextMenu: event => {\n        var _this$_config3 = this._config,\n          disabled = _this$_config3.disabled,\n          onLongPress = _this$_config3.onLongPress;\n        if (!disabled) {\n          if (onLongPress != null && this._isPointerTouch && !event.defaultPrevented) {\n            event.preventDefault();\n            event.stopPropagation();\n          }\n        } else {\n          if (isButtonRole(event.currentTarget)) {\n            event.stopPropagation();\n          }\n        }\n      }\n    };\n  }\n\n  /**\n   * Receives a state machine signal, performs side effects of the transition\n   * and stores the new state. Validates the transition as well.\n   */\n  _receiveSignal(signal, event) {\n    var prevState = this._touchState;\n    var nextState = null;\n    if (Transitions[prevState] != null) {\n      nextState = Transitions[prevState][signal];\n    }\n    if (this._touchState === NOT_RESPONDER && signal === RESPONDER_RELEASE) {\n      return;\n    }\n    if (nextState == null || nextState === ERROR) {\n      console.error(\"PressResponder: Invalid signal \" + signal + \" for state \" + prevState + \" on responder\");\n    } else if (prevState !== nextState) {\n      this._performTransitionSideEffects(prevState, nextState, signal, event);\n      this._touchState = nextState;\n    }\n  }\n\n  /**\n   * Performs a transition between touchable states and identify any activations\n   * or deactivations (and callback invocations).\n   */\n  _performTransitionSideEffects(prevState, nextState, signal, event) {\n    if (isTerminalSignal(signal)) {\n      // Pressable suppression of contextmenu on windows.\n      // On Windows, the contextmenu is displayed after pointerup.\n      // https://github.com/necolas/react-native-web/issues/2296\n      setTimeout(() => {\n        this._isPointerTouch = false;\n      }, 0);\n      this._touchActivatePosition = null;\n      this._cancelLongPressDelayTimeout();\n    }\n    if (isPressStartSignal(prevState) && signal === LONG_PRESS_DETECTED) {\n      var onLongPress = this._config.onLongPress;\n      // Long press is not supported for keyboards because 'click' can be dispatched\n      // immediately (and multiple times) after 'keydown'.\n      if (onLongPress != null && event.nativeEvent.key == null) {\n        onLongPress(event);\n        this._longPressDispatched = true;\n      }\n    }\n    var isPrevActive = isActiveSignal(prevState);\n    var isNextActive = isActiveSignal(nextState);\n    if (!isPrevActive && isNextActive) {\n      this._activate(event);\n    } else if (isPrevActive && !isNextActive) {\n      this._deactivate(event);\n    }\n    if (isPressStartSignal(prevState) && signal === RESPONDER_RELEASE) {\n      var _this$_config4 = this._config,\n        _onLongPress = _this$_config4.onLongPress,\n        onPress = _this$_config4.onPress;\n      if (onPress != null) {\n        var isPressCanceledByLongPress = _onLongPress != null && prevState === RESPONDER_ACTIVE_LONG_PRESS_START;\n        if (!isPressCanceledByLongPress) {\n          // If we never activated (due to delays), activate and deactivate now.\n          if (!isNextActive && !isPrevActive) {\n            this._activate(event);\n            this._deactivate(event);\n          }\n        }\n      }\n    }\n    this._cancelPressDelayTimeout();\n  }\n  _activate(event) {\n    var _this$_config5 = this._config,\n      onPressChange = _this$_config5.onPressChange,\n      onPressStart = _this$_config5.onPressStart;\n    var touch = getTouchFromResponderEvent(event);\n    this._touchActivatePosition = {\n      pageX: touch.pageX,\n      pageY: touch.pageY\n    };\n    if (onPressStart != null) {\n      onPressStart(event);\n    }\n    if (onPressChange != null) {\n      onPressChange(true);\n    }\n  }\n  _deactivate(event) {\n    var _this$_config6 = this._config,\n      onPressChange = _this$_config6.onPressChange,\n      onPressEnd = _this$_config6.onPressEnd;\n    function end() {\n      if (onPressEnd != null) {\n        onPressEnd(event);\n      }\n      if (onPressChange != null) {\n        onPressChange(false);\n      }\n    }\n    var delayPressEnd = normalizeDelay(this._config.delayPressEnd);\n    if (delayPressEnd > 0) {\n      this._pressOutDelayTimeout = setTimeout(() => {\n        end();\n      }, delayPressEnd);\n    } else {\n      end();\n    }\n  }\n  _handleLongPress(event) {\n    if (this._touchState === RESPONDER_ACTIVE_PRESS_START || this._touchState === RESPONDER_ACTIVE_LONG_PRESS_START) {\n      this._receiveSignal(LONG_PRESS_DETECTED, event);\n    }\n  }\n  _cancelLongPressDelayTimeout() {\n    if (this._longPressDelayTimeout != null) {\n      clearTimeout(this._longPressDelayTimeout);\n      this._longPressDelayTimeout = null;\n    }\n  }\n  _cancelPressDelayTimeout() {\n    if (this._pressDelayTimeout != null) {\n      clearTimeout(this._pressDelayTimeout);\n      this._pressDelayTimeout = null;\n    }\n  }\n  _cancelPressOutDelayTimeout() {\n    if (this._pressOutDelayTimeout != null) {\n      clearTimeout(this._pressOutDelayTimeout);\n      this._pressOutDelayTimeout = null;\n    }\n  }\n}\nfunction normalizeDelay(delay, min, fallback) {\n  if (min === void 0) {\n    min = 0;\n  }\n  if (fallback === void 0) {\n    fallback = 0;\n  }\n  return Math.max(min, delay !== null && delay !== void 0 ? delay : fallback);\n}\nfunction getTouchFromResponderEvent(event) {\n  var _event$nativeEvent = event.nativeEvent,\n    changedTouches = _event$nativeEvent.changedTouches,\n    touches = _event$nativeEvent.touches;\n  if (touches != null && touches.length > 0) {\n    return touches[0];\n  }\n  if (changedTouches != null && changedTouches.length > 0) {\n    return changedTouches[0];\n  }\n  return event.nativeEvent;\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 * @format\n */\n\n'use strict';\n\nimport PressResponder from './PressResponder';\nimport { useDebugValue, useEffect, useRef } from 'react';\nexport default function usePressEvents(hostRef, config) {\n  var pressResponderRef = useRef(null);\n  if (pressResponderRef.current == null) {\n    pressResponderRef.current = new PressResponder(config);\n  }\n  var pressResponder = pressResponderRef.current;\n\n  // Re-configure to use the current node and configuration.\n  useEffect(() => {\n    pressResponder.configure(config);\n  }, [config, pressResponder]);\n\n  // Reset the `pressResponder` when cleanup needs to occur. This is\n  // a separate effect because we do not want to rest the responder when `config` changes.\n  useEffect(() => {\n    return () => {\n      pressResponder.reset();\n    };\n  }, [pressResponder]);\n  useDebugValue(config);\n  return pressResponder.getEventHandlers();\n}","/**\n * Copyright (c) Nicolas Gallagher\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\nimport getBoundingClientRect from '../../modules/getBoundingClientRect';\nvar emptyFunction = () => {};\nvar emptyObject = {};\nvar emptyArray = [];\n\n/**\n * Safari produces very large identifiers that would cause the `touchBank` array\n * length to be so large as to crash the browser, if not normalized like this.\n * In the future the `touchBank` should use an object/map instead.\n */\nfunction normalizeIdentifier(identifier) {\n  return identifier > 20 ? identifier % 20 : identifier;\n}\n\n/**\n * Converts a native DOM event to a ResponderEvent.\n * Mouse events are transformed into fake touch events.\n */\nexport default function createResponderEvent(domEvent, responderTouchHistoryStore) {\n  var rect;\n  var propagationWasStopped = false;\n  var changedTouches;\n  var touches;\n  var domEventChangedTouches = domEvent.changedTouches;\n  var domEventType = domEvent.type;\n  var metaKey = domEvent.metaKey === true;\n  var shiftKey = domEvent.shiftKey === true;\n  var force = domEventChangedTouches && domEventChangedTouches[0].force || 0;\n  var identifier = normalizeIdentifier(domEventChangedTouches && domEventChangedTouches[0].identifier || 0);\n  var clientX = domEventChangedTouches && domEventChangedTouches[0].clientX || domEvent.clientX;\n  var clientY = domEventChangedTouches && domEventChangedTouches[0].clientY || domEvent.clientY;\n  var pageX = domEventChangedTouches && domEventChangedTouches[0].pageX || domEvent.pageX;\n  var pageY = domEventChangedTouches && domEventChangedTouches[0].pageY || domEvent.pageY;\n  var preventDefault = typeof domEvent.preventDefault === 'function' ? domEvent.preventDefault.bind(domEvent) : emptyFunction;\n  var timestamp = domEvent.timeStamp;\n  function normalizeTouches(touches) {\n    return Array.prototype.slice.call(touches).map(touch => {\n      return {\n        force: touch.force,\n        identifier: normalizeIdentifier(touch.identifier),\n        get locationX() {\n          return locationX(touch.clientX);\n        },\n        get locationY() {\n          return locationY(touch.clientY);\n        },\n        pageX: touch.pageX,\n        pageY: touch.pageY,\n        target: touch.target,\n        timestamp\n      };\n    });\n  }\n  if (domEventChangedTouches != null) {\n    changedTouches = normalizeTouches(domEventChangedTouches);\n    touches = normalizeTouches(domEvent.touches);\n  } else {\n    var emulatedTouches = [{\n      force,\n      identifier,\n      get locationX() {\n        return locationX(clientX);\n      },\n      get locationY() {\n        return locationY(clientY);\n      },\n      pageX,\n      pageY,\n      target: domEvent.target,\n      timestamp\n    }];\n    changedTouches = emulatedTouches;\n    touches = domEventType === 'mouseup' || domEventType === 'dragstart' ? emptyArray : emulatedTouches;\n  }\n  var responderEvent = {\n    bubbles: true,\n    cancelable: true,\n    // `currentTarget` is set before dispatch\n    currentTarget: null,\n    defaultPrevented: domEvent.defaultPrevented,\n    dispatchConfig: emptyObject,\n    eventPhase: domEvent.eventPhase,\n    isDefaultPrevented() {\n      return domEvent.defaultPrevented;\n    },\n    isPropagationStopped() {\n      return propagationWasStopped;\n    },\n    isTrusted: domEvent.isTrusted,\n    nativeEvent: {\n      altKey: false,\n      ctrlKey: false,\n      metaKey,\n      shiftKey,\n      changedTouches,\n      force,\n      identifier,\n      get locationX() {\n        return locationX(clientX);\n      },\n      get locationY() {\n        return locationY(clientY);\n      },\n      pageX,\n      pageY,\n      target: domEvent.target,\n      timestamp,\n      touches,\n      type: domEventType\n    },\n    persist: emptyFunction,\n    preventDefault,\n    stopPropagation() {\n      propagationWasStopped = true;\n    },\n    target: domEvent.target,\n    timeStamp: timestamp,\n    touchHistory: responderTouchHistoryStore.touchHistory\n  };\n\n  // Using getters and functions serves two purposes:\n  // 1) The value of `currentTarget` is not initially available.\n  // 2) Measuring the clientRect may cause layout jank and should only be done on-demand.\n  function locationX(x) {\n    rect = rect || getBoundingClientRect(responderEvent.currentTarget);\n    if (rect) {\n      return x - rect.left;\n    }\n  }\n  function locationY(y) {\n    rect = rect || getBoundingClientRect(responderEvent.currentTarget);\n    if (rect) {\n      return y - rect.top;\n    }\n  }\n  return responderEvent;\n}","/**\n * Copyright (c) Nicolas Gallagher\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\nexport var BLUR = 'blur';\nexport var CONTEXT_MENU = 'contextmenu';\nexport var FOCUS_OUT = 'focusout';\nexport var MOUSE_DOWN = 'mousedown';\nexport var MOUSE_MOVE = 'mousemove';\nexport var MOUSE_UP = 'mouseup';\nexport var MOUSE_CANCEL = 'dragstart';\nexport var TOUCH_START = 'touchstart';\nexport var TOUCH_MOVE = 'touchmove';\nexport var TOUCH_END = 'touchend';\nexport var TOUCH_CANCEL = 'touchcancel';\nexport var SCROLL = 'scroll';\nexport var SELECT = 'select';\nexport var SELECTION_CHANGE = 'selectionchange';\nexport function isStartish(eventType) {\n  return eventType === TOUCH_START || eventType === MOUSE_DOWN;\n}\nexport function isMoveish(eventType) {\n  return eventType === TOUCH_MOVE || eventType === MOUSE_MOVE;\n}\nexport function isEndish(eventType) {\n  return eventType === TOUCH_END || eventType === MOUSE_UP || isCancelish(eventType);\n}\nexport function isCancelish(eventType) {\n  return eventType === TOUCH_CANCEL || eventType === MOUSE_CANCEL;\n}\nexport function isScroll(eventType) {\n  return eventType === SCROLL;\n}\nexport function isSelectionChange(eventType) {\n  return eventType === SELECT || eventType === SELECTION_CHANGE;\n}","/**\n * Copyright (c) Nicolas Gallagher\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\nimport isSelectionValid from '../../modules/isSelectionValid';\nvar keyName = '__reactResponderId';\nfunction getEventPath(domEvent) {\n  // The 'selectionchange' event always has the 'document' as the target.\n  // Use the anchor node as the initial target to reconstruct a path.\n  // (We actually only need the first \"responder\" node in practice.)\n  if (domEvent.type === 'selectionchange') {\n    var target = window.getSelection().anchorNode;\n    return composedPathFallback(target);\n  } else {\n    var path = domEvent.composedPath != null ? domEvent.composedPath() : composedPathFallback(domEvent.target);\n    return path;\n  }\n}\nfunction composedPathFallback(target) {\n  var path = [];\n  while (target != null && target !== document.body) {\n    path.push(target);\n    target = target.parentNode;\n  }\n  return path;\n}\n\n/**\n * Retrieve the responderId from a host node\n */\nfunction getResponderId(node) {\n  if (node != null) {\n    return node[keyName];\n  }\n  return null;\n}\n\n/**\n * Store the responderId on a host node\n */\nexport function setResponderId(node, id) {\n  if (node != null) {\n    node[keyName] = id;\n  }\n}\n\n/**\n * Filter the event path to contain only the nodes attached to the responder system\n */\nexport function getResponderPaths(domEvent) {\n  var idPath = [];\n  var nodePath = [];\n  var eventPath = getEventPath(domEvent);\n  for (var i = 0; i < eventPath.length; i++) {\n    var node = eventPath[i];\n    var id = getResponderId(node);\n    if (id != null) {\n      idPath.push(id);\n      nodePath.push(node);\n    }\n  }\n  return {\n    idPath,\n    nodePath\n  };\n}\n\n/**\n * Walk the paths and find the first common ancestor\n */\nexport function getLowestCommonAncestor(pathA, pathB) {\n  var pathALength = pathA.length;\n  var pathBLength = pathB.length;\n  if (\n  // If either path is empty\n  pathALength === 0 || pathBLength === 0 ||\n  // If the last elements aren't the same there can't be a common ancestor\n  // that is connected to the responder system\n  pathA[pathALength - 1] !== pathB[pathBLength - 1]) {\n    return null;\n  }\n  var itemA = pathA[0];\n  var indexA = 0;\n  var itemB = pathB[0];\n  var indexB = 0;\n\n  // If A is deeper, skip indices that can't match.\n  if (pathALength - pathBLength > 0) {\n    indexA = pathALength - pathBLength;\n    itemA = pathA[indexA];\n    pathALength = pathBLength;\n  }\n\n  // If B is deeper, skip indices that can't match\n  if (pathBLength - pathALength > 0) {\n    indexB = pathBLength - pathALength;\n    itemB = pathB[indexB];\n    pathBLength = pathALength;\n  }\n\n  // Walk in lockstep until a match is found\n  var depth = pathALength;\n  while (depth--) {\n    if (itemA === itemB) {\n      return itemA;\n    }\n    itemA = pathA[indexA++];\n    itemB = pathB[indexB++];\n  }\n  return null;\n}\n\n/**\n * Determine whether any of the active touches are within the current responder.\n * This cannot rely on W3C `targetTouches`, as neither IE11 nor Safari implement it.\n */\nexport function hasTargetTouches(target, touches) {\n  if (!touches || touches.length === 0) {\n    return false;\n  }\n  for (var i = 0; i < touches.length; i++) {\n    var node = touches[i].target;\n    if (node != null) {\n      if (target.contains(node)) {\n        return true;\n      }\n    }\n  }\n  return false;\n}\n\n/**\n * Ignore 'selectionchange' events that don't correspond with a person's intent to\n * select text.\n */\nexport function hasValidSelection(domEvent) {\n  if (domEvent.type === 'selectionchange') {\n    return isSelectionValid();\n  }\n  return domEvent.type === 'select';\n}\n\n/**\n * Events are only valid if the primary button was used without specific modifier keys.\n */\nexport function isPrimaryPointerDown(domEvent) {\n  var altKey = domEvent.altKey,\n    button = domEvent.button,\n    buttons = domEvent.buttons,\n    ctrlKey = domEvent.ctrlKey,\n    type = domEvent.type;\n  var isTouch = type === 'touchstart' || type === 'touchmove';\n  var isPrimaryMouseDown = type === 'mousedown' && (button === 0 || buttons === 1);\n  var isPrimaryMouseMove = type === 'mousemove' && buttons === 1;\n  var noModifiers = altKey === false && ctrlKey === false;\n  if (isTouch || isPrimaryMouseDown && noModifiers || isPrimaryMouseMove && noModifiers) {\n    return true;\n  }\n  return false;\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\nimport { isStartish, isMoveish, isEndish } from './ResponderEventTypes';\n/**\n * Tracks the position and time of each active touch by `touch.identifier`. We\n * should typically only see IDs in the range of 1-20 because IDs get recycled\n * when touches end and start again.\n */\n\nvar __DEV__ = process.env.NODE_ENV !== 'production';\nvar MAX_TOUCH_BANK = 20;\nfunction timestampForTouch(touch) {\n  // The legacy internal implementation provides \"timeStamp\", which has been\n  // renamed to \"timestamp\".\n  return touch.timeStamp || touch.timestamp;\n}\n\n/**\n * TODO: Instead of making gestures recompute filtered velocity, we could\n * include a built in velocity computation that can be reused globally.\n */\nfunction createTouchRecord(touch) {\n  return {\n    touchActive: true,\n    startPageX: touch.pageX,\n    startPageY: touch.pageY,\n    startTimeStamp: timestampForTouch(touch),\n    currentPageX: touch.pageX,\n    currentPageY: touch.pageY,\n    currentTimeStamp: timestampForTouch(touch),\n    previousPageX: touch.pageX,\n    previousPageY: touch.pageY,\n    previousTimeStamp: timestampForTouch(touch)\n  };\n}\nfunction resetTouchRecord(touchRecord, touch) {\n  touchRecord.touchActive = true;\n  touchRecord.startPageX = touch.pageX;\n  touchRecord.startPageY = touch.pageY;\n  touchRecord.startTimeStamp = timestampForTouch(touch);\n  touchRecord.currentPageX = touch.pageX;\n  touchRecord.currentPageY = touch.pageY;\n  touchRecord.currentTimeStamp = timestampForTouch(touch);\n  touchRecord.previousPageX = touch.pageX;\n  touchRecord.previousPageY = touch.pageY;\n  touchRecord.previousTimeStamp = timestampForTouch(touch);\n}\nfunction getTouchIdentifier(_ref) {\n  var identifier = _ref.identifier;\n  if (identifier == null) {\n    console.error('Touch object is missing identifier.');\n  }\n  if (__DEV__) {\n    if (identifier > MAX_TOUCH_BANK) {\n      console.error('Touch identifier %s is greater than maximum supported %s which causes ' + 'performance issues backfilling array locations for all of the indices.', identifier, MAX_TOUCH_BANK);\n    }\n  }\n  return identifier;\n}\nfunction recordTouchStart(touch, touchHistory) {\n  var identifier = getTouchIdentifier(touch);\n  var touchRecord = touchHistory.touchBank[identifier];\n  if (touchRecord) {\n    resetTouchRecord(touchRecord, touch);\n  } else {\n    touchHistory.touchBank[identifier] = createTouchRecord(touch);\n  }\n  touchHistory.mostRecentTimeStamp = timestampForTouch(touch);\n}\nfunction recordTouchMove(touch, touchHistory) {\n  var touchRecord = touchHistory.touchBank[getTouchIdentifier(touch)];\n  if (touchRecord) {\n    touchRecord.touchActive = true;\n    touchRecord.previousPageX = touchRecord.currentPageX;\n    touchRecord.previousPageY = touchRecord.currentPageY;\n    touchRecord.previousTimeStamp = touchRecord.currentTimeStamp;\n    touchRecord.currentPageX = touch.pageX;\n    touchRecord.currentPageY = touch.pageY;\n    touchRecord.currentTimeStamp = timestampForTouch(touch);\n    touchHistory.mostRecentTimeStamp = timestampForTouch(touch);\n  } else {\n    console.warn('Cannot record touch move without a touch start.\\n', \"Touch Move: \" + printTouch(touch) + \"\\n\", \"Touch Bank: \" + printTouchBank(touchHistory));\n  }\n}\nfunction recordTouchEnd(touch, touchHistory) {\n  var touchRecord = touchHistory.touchBank[getTouchIdentifier(touch)];\n  if (touchRecord) {\n    touchRecord.touchActive = false;\n    touchRecord.previousPageX = touchRecord.currentPageX;\n    touchRecord.previousPageY = touchRecord.currentPageY;\n    touchRecord.previousTimeStamp = touchRecord.currentTimeStamp;\n    touchRecord.currentPageX = touch.pageX;\n    touchRecord.currentPageY = touch.pageY;\n    touchRecord.currentTimeStamp = timestampForTouch(touch);\n    touchHistory.mostRecentTimeStamp = timestampForTouch(touch);\n  } else {\n    console.warn('Cannot record touch end without a touch start.\\n', \"Touch End: \" + printTouch(touch) + \"\\n\", \"Touch Bank: \" + printTouchBank(touchHistory));\n  }\n}\nfunction printTouch(touch) {\n  return JSON.stringify({\n    identifier: touch.identifier,\n    pageX: touch.pageX,\n    pageY: touch.pageY,\n    timestamp: timestampForTouch(touch)\n  });\n}\nfunction printTouchBank(touchHistory) {\n  var touchBank = touchHistory.touchBank;\n  var printed = JSON.stringify(touchBank.slice(0, MAX_TOUCH_BANK));\n  if (touchBank.length > MAX_TOUCH_BANK) {\n    printed += ' (original size: ' + touchBank.length + ')';\n  }\n  return printed;\n}\nexport class ResponderTouchHistoryStore {\n  constructor() {\n    this._touchHistory = {\n      touchBank: [],\n      //Array<TouchRecord>\n      numberActiveTouches: 0,\n      // If there is only one active touch, we remember its location. This prevents\n      // us having to loop through all of the touches all the time in the most\n      // common case.\n      indexOfSingleActiveTouch: -1,\n      mostRecentTimeStamp: 0\n    };\n  }\n  recordTouchTrack(topLevelType, nativeEvent) {\n    var touchHistory = this._touchHistory;\n    if (isMoveish(topLevelType)) {\n      nativeEvent.changedTouches.forEach(touch => recordTouchMove(touch, touchHistory));\n    } else if (isStartish(topLevelType)) {\n      nativeEvent.changedTouches.forEach(touch => recordTouchStart(touch, touchHistory));\n      touchHistory.numberActiveTouches = nativeEvent.touches.length;\n      if (touchHistory.numberActiveTouches === 1) {\n        touchHistory.indexOfSingleActiveTouch = nativeEvent.touches[0].identifier;\n      }\n    } else if (isEndish(topLevelType)) {\n      nativeEvent.changedTouches.forEach(touch => recordTouchEnd(touch, touchHistory));\n      touchHistory.numberActiveTouches = nativeEvent.touches.length;\n      if (touchHistory.numberActiveTouches === 1) {\n        var touchBank = touchHistory.touchBank;\n        for (var i = 0; i < touchBank.length; i++) {\n          var touchTrackToCheck = touchBank[i];\n          if (touchTrackToCheck != null && touchTrackToCheck.touchActive) {\n            touchHistory.indexOfSingleActiveTouch = i;\n            break;\n          }\n        }\n        if (__DEV__) {\n          var activeRecord = touchBank[touchHistory.indexOfSingleActiveTouch];\n          if (!(activeRecord != null && activeRecord.touchActive)) {\n            console.error('Cannot find single active touch.');\n          }\n        }\n      }\n    }\n  }\n  get touchHistory() {\n    return this._touchHistory;\n  }\n}","/**\n * Copyright (c) Nicolas Gallagher\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\n/**\n * RESPONDER EVENT SYSTEM\n *\n * A single, global \"interaction lock\" on views. For a view to be the \"responder\" means\n * that pointer interactions are exclusive to that view and none other. The \"interaction\n * lock\" can be transferred (only) to ancestors of the current \"responder\" as long as\n * pointers continue to be active.\n *\n * Responder being granted:\n *\n * A view can become the \"responder\" after the following events:\n *  * \"pointerdown\" (implemented using \"touchstart\", \"mousedown\")\n *  * \"pointermove\" (implemented using \"touchmove\", \"mousemove\")\n *  * \"scroll\" (while a pointer is down)\n *  * \"selectionchange\" (while a pointer is down)\n *\n * If nothing is already the \"responder\", the event propagates to (capture) and from\n * (bubble) the event target until a view returns `true` for\n * `on*ShouldSetResponder(Capture)`.\n *\n * If something is already the responder, the event propagates to (capture) and from\n * (bubble) the lowest common ancestor of the event target and the current \"responder\".\n * Then negotiation happens between the current \"responder\" and a view that wants to\n * become the \"responder\": see the timing diagram below.\n *\n * (NOTE: Scrolled views either automatically become the \"responder\" or release the\n * \"interaction lock\". A native scroll view that isn't built on top of the responder\n * system must result in the current \"responder\" being notified that it no longer has\n * the \"interaction lock\" - the native system has taken over.\n *\n * Responder being released:\n *\n * As soon as there are no more active pointers that *started* inside descendants\n * of the *current* \"responder\", an `onResponderRelease` event is dispatched to the\n * current \"responder\", and the responder lock is released.\n *\n * Typical sequence of events:\n *  * startShouldSetResponder\n *  * responderGrant/Reject\n *  * responderStart\n *  * responderMove\n *  * responderEnd\n *  * responderRelease\n */\n\n/*                                             Negotiation Performed\n                                             +-----------------------+\n                                            /                         \\\nProcess low level events to    +     Current Responder      +   wantsResponderID\ndetermine who to perform negot-|   (if any exists at all)   |\niation/transition              | Otherwise just pass through|\n-------------------------------+----------------------------+------------------+\nBubble to find first ID        |                            |\nto return true:wantsResponderID|                            |\n                               |                            |\n     +--------------+          |                            |\n     | onTouchStart |          |                            |\n     +------+-------+    none  |                            |\n            |            return|                            |\n+-----------v-------------+true| +------------------------+ |\n|onStartShouldSetResponder|----->| onResponderStart (cur) |<-----------+\n+-----------+-------------+    | +------------------------+ |          |\n            |                  |                            | +--------+-------+\n            | returned true for|       false:REJECT +-------->|onResponderReject\n            | wantsResponderID |                    |       | +----------------+\n            | (now attempt     | +------------------+-----+ |\n            |  handoff)        | | onResponder            | |\n            +------------------->|    TerminationRequest  | |\n                               | +------------------+-----+ |\n                               |                    |       | +----------------+\n                               |         true:GRANT +-------->|onResponderGrant|\n                               |                            | +--------+-------+\n                               | +------------------------+ |          |\n                               | | onResponderTerminate   |<-----------+\n                               | +------------------+-----+ |\n                               |                    |       | +----------------+\n                               |                    +-------->|onResponderStart|\n                               |                            | +----------------+\nBubble to find first ID        |                            |\nto return true:wantsResponderID|                            |\n                               |                            |\n     +-------------+           |                            |\n     | onTouchMove |           |                            |\n     +------+------+     none  |                            |\n            |            return|                            |\n+-----------v-------------+true| +------------------------+ |\n|onMoveShouldSetResponder |----->| onResponderMove (cur)  |<-----------+\n+-----------+-------------+    | +------------------------+ |          |\n            |                  |                            | +--------+-------+\n            | returned true for|       false:REJECT +-------->|onResponderReject\n            | wantsResponderID |                    |       | +----------------+\n            | (now attempt     | +------------------+-----+ |\n            |  handoff)        | |   onResponder          | |\n            +------------------->|      TerminationRequest| |\n                               | +------------------+-----+ |\n                               |                    |       | +----------------+\n                               |         true:GRANT +-------->|onResponderGrant|\n                               |                            | +--------+-------+\n                               | +------------------------+ |          |\n                               | |   onResponderTerminate |<-----------+\n                               | +------------------+-----+ |\n                               |                    |       | +----------------+\n                               |                    +-------->|onResponderMove |\n                               |                            | +----------------+\n                               |                            |\n                               |                            |\n      Some active touch started|                            |\n      inside current responder | +------------------------+ |\n      +------------------------->|      onResponderEnd    | |\n      |                        | +------------------------+ |\n  +---+---------+              |                            |\n  | onTouchEnd  |              |                            |\n  +---+---------+              |                            |\n      |                        | +------------------------+ |\n      +------------------------->|     onResponderEnd     | |\n      No active touches started| +-----------+------------+ |\n      inside current responder |             |              |\n                               |             v              |\n                               | +------------------------+ |\n                               | |    onResponderRelease  | |\n                               | +------------------------+ |\n                               |                            |\n                               +                            + */\n\nimport createResponderEvent from './createResponderEvent';\nimport { isCancelish, isEndish, isMoveish, isScroll, isSelectionChange, isStartish } from './ResponderEventTypes';\nimport { getLowestCommonAncestor, getResponderPaths, hasTargetTouches, hasValidSelection, isPrimaryPointerDown, setResponderId } from './utils';\nimport { ResponderTouchHistoryStore } from './ResponderTouchHistoryStore';\nimport canUseDOM from '../canUseDom';\n\n/* ------------ TYPES ------------ */\n\nvar emptyObject = {};\n\n/* ------------ IMPLEMENTATION ------------ */\n\nvar startRegistration = ['onStartShouldSetResponderCapture', 'onStartShouldSetResponder', {\n  bubbles: true\n}];\nvar moveRegistration = ['onMoveShouldSetResponderCapture', 'onMoveShouldSetResponder', {\n  bubbles: true\n}];\nvar scrollRegistration = ['onScrollShouldSetResponderCapture', 'onScrollShouldSetResponder', {\n  bubbles: false\n}];\nvar shouldSetResponderEvents = {\n  touchstart: startRegistration,\n  mousedown: startRegistration,\n  touchmove: moveRegistration,\n  mousemove: moveRegistration,\n  scroll: scrollRegistration\n};\nvar emptyResponder = {\n  id: null,\n  idPath: null,\n  node: null\n};\nvar responderListenersMap = new Map();\nvar isEmulatingMouseEvents = false;\nvar trackedTouchCount = 0;\nvar currentResponder = {\n  id: null,\n  node: null,\n  idPath: null\n};\nvar responderTouchHistoryStore = new ResponderTouchHistoryStore();\nfunction changeCurrentResponder(responder) {\n  currentResponder = responder;\n}\nfunction getResponderConfig(id) {\n  var config = responderListenersMap.get(id);\n  return config != null ? config : emptyObject;\n}\n\n/**\n * Process native events\n *\n * A single event listener is used to manage the responder system.\n * All pointers are tracked in the ResponderTouchHistoryStore. Native events\n * are interpreted in terms of the Responder System and checked to see if\n * the responder should be transferred. Each host node that is attached to\n * the Responder System has an ID, which is used to look up its associated\n * callbacks.\n */\nfunction eventListener(domEvent) {\n  var eventType = domEvent.type;\n  var eventTarget = domEvent.target;\n\n  /**\n   * Manage emulated events and early bailout.\n   * Since PointerEvent is not used yet (lack of support in older Safari), it's\n   * necessary to manually manage the mess of browser touch/mouse events.\n   * And bailout early for termination events when there is no active responder.\n   */\n\n  // Flag when browser may produce emulated events\n  if (eventType === 'touchstart') {\n    isEmulatingMouseEvents = true;\n  }\n  // Remove flag when browser will not produce emulated events\n  if (eventType === 'touchmove' || trackedTouchCount > 1) {\n    isEmulatingMouseEvents = false;\n  }\n  // Ignore various events in particular circumstances\n  if (\n  // Ignore browser emulated mouse events\n  eventType === 'mousedown' && isEmulatingMouseEvents || eventType === 'mousemove' && isEmulatingMouseEvents ||\n  // Ignore mousemove if a mousedown didn't occur first\n  eventType === 'mousemove' && trackedTouchCount < 1) {\n    return;\n  }\n  // Remove flag after emulated events are finished\n  if (isEmulatingMouseEvents && eventType === 'mouseup') {\n    if (trackedTouchCount === 0) {\n      isEmulatingMouseEvents = false;\n    }\n    return;\n  }\n  var isStartEvent = isStartish(eventType) && isPrimaryPointerDown(domEvent);\n  var isMoveEvent = isMoveish(eventType);\n  var isEndEvent = isEndish(eventType);\n  var isScrollEvent = isScroll(eventType);\n  var isSelectionChangeEvent = isSelectionChange(eventType);\n  var responderEvent = createResponderEvent(domEvent, responderTouchHistoryStore);\n\n  /**\n   * Record the state of active pointers\n   */\n\n  if (isStartEvent || isMoveEvent || isEndEvent) {\n    if (domEvent.touches) {\n      trackedTouchCount = domEvent.touches.length;\n    } else {\n      if (isStartEvent) {\n        trackedTouchCount = 1;\n      } else if (isEndEvent) {\n        trackedTouchCount = 0;\n      }\n    }\n    responderTouchHistoryStore.recordTouchTrack(eventType, responderEvent.nativeEvent);\n  }\n\n  /**\n   * Responder System logic\n   */\n\n  var eventPaths = getResponderPaths(domEvent);\n  var wasNegotiated = false;\n  var wantsResponder;\n\n  // If an event occured that might change the current responder...\n  if (isStartEvent || isMoveEvent || isScrollEvent && trackedTouchCount > 0) {\n    // If there is already a responder, prune the event paths to the lowest common ancestor\n    // of the existing responder and deepest target of the event.\n    var currentResponderIdPath = currentResponder.idPath;\n    var eventIdPath = eventPaths.idPath;\n    if (currentResponderIdPath != null && eventIdPath != null) {\n      var lowestCommonAncestor = getLowestCommonAncestor(currentResponderIdPath, eventIdPath);\n      if (lowestCommonAncestor != null) {\n        var indexOfLowestCommonAncestor = eventIdPath.indexOf(lowestCommonAncestor);\n        // Skip the current responder so it doesn't receive unexpected \"shouldSet\" events.\n        var index = indexOfLowestCommonAncestor + (lowestCommonAncestor === currentResponder.id ? 1 : 0);\n        eventPaths = {\n          idPath: eventIdPath.slice(index),\n          nodePath: eventPaths.nodePath.slice(index)\n        };\n      } else {\n        eventPaths = null;\n      }\n    }\n    if (eventPaths != null) {\n      // If a node wants to become the responder, attempt to transfer.\n      wantsResponder = findWantsResponder(eventPaths, domEvent, responderEvent);\n      if (wantsResponder != null) {\n        // Sets responder if none exists, or negotates with existing responder.\n        attemptTransfer(responderEvent, wantsResponder);\n        wasNegotiated = true;\n      }\n    }\n  }\n\n  // If there is now a responder, invoke its callbacks for the lifecycle of the gesture.\n  if (currentResponder.id != null && currentResponder.node != null) {\n    var _currentResponder = currentResponder,\n      id = _currentResponder.id,\n      node = _currentResponder.node;\n    var _getResponderConfig = getResponderConfig(id),\n      onResponderStart = _getResponderConfig.onResponderStart,\n      onResponderMove = _getResponderConfig.onResponderMove,\n      onResponderEnd = _getResponderConfig.onResponderEnd,\n      onResponderRelease = _getResponderConfig.onResponderRelease,\n      onResponderTerminate = _getResponderConfig.onResponderTerminate,\n      onResponderTerminationRequest = _getResponderConfig.onResponderTerminationRequest;\n    responderEvent.bubbles = false;\n    responderEvent.cancelable = false;\n    responderEvent.currentTarget = node;\n\n    // Start\n    if (isStartEvent) {\n      if (onResponderStart != null) {\n        responderEvent.dispatchConfig.registrationName = 'onResponderStart';\n        onResponderStart(responderEvent);\n      }\n    }\n    // Move\n    else if (isMoveEvent) {\n      if (onResponderMove != null) {\n        responderEvent.dispatchConfig.registrationName = 'onResponderMove';\n        onResponderMove(responderEvent);\n      }\n    } else {\n      var isTerminateEvent = isCancelish(eventType) ||\n      // native context menu\n      eventType === 'contextmenu' ||\n      // window blur\n      eventType === 'blur' && eventTarget === window ||\n      // responder (or ancestors) blur\n      eventType === 'blur' && eventTarget.contains(node) && domEvent.relatedTarget !== node ||\n      // native scroll without using a pointer\n      isScrollEvent && trackedTouchCount === 0 ||\n      // native scroll on node that is parent of the responder (allow siblings to scroll)\n      isScrollEvent && eventTarget.contains(node) && eventTarget !== node ||\n      // native select/selectionchange on node\n      isSelectionChangeEvent && hasValidSelection(domEvent);\n      var isReleaseEvent = isEndEvent && !isTerminateEvent && !hasTargetTouches(node, domEvent.touches);\n\n      // End\n      if (isEndEvent) {\n        if (onResponderEnd != null) {\n          responderEvent.dispatchConfig.registrationName = 'onResponderEnd';\n          onResponderEnd(responderEvent);\n        }\n      }\n      // Release\n      if (isReleaseEvent) {\n        if (onResponderRelease != null) {\n          responderEvent.dispatchConfig.registrationName = 'onResponderRelease';\n          onResponderRelease(responderEvent);\n        }\n        changeCurrentResponder(emptyResponder);\n      }\n      // Terminate\n      if (isTerminateEvent) {\n        var shouldTerminate = true;\n\n        // Responders can still avoid termination but only for these events.\n        if (eventType === 'contextmenu' || eventType === 'scroll' || eventType === 'selectionchange') {\n          // Only call this function is it wasn't already called during negotiation.\n          if (wasNegotiated) {\n            shouldTerminate = false;\n          } else if (onResponderTerminationRequest != null) {\n            responderEvent.dispatchConfig.registrationName = 'onResponderTerminationRequest';\n            if (onResponderTerminationRequest(responderEvent) === false) {\n              shouldTerminate = false;\n            }\n          }\n        }\n        if (shouldTerminate) {\n          if (onResponderTerminate != null) {\n            responderEvent.dispatchConfig.registrationName = 'onResponderTerminate';\n            onResponderTerminate(responderEvent);\n          }\n          changeCurrentResponder(emptyResponder);\n          isEmulatingMouseEvents = false;\n          trackedTouchCount = 0;\n        }\n      }\n    }\n  }\n}\n\n/**\n * Walk the event path to/from the target node. At each node, stop and call the\n * relevant \"shouldSet\" functions for the given event type. If any of those functions\n * call \"stopPropagation\" on the event, stop searching for a responder.\n */\nfunction findWantsResponder(eventPaths, domEvent, responderEvent) {\n  var shouldSetCallbacks = shouldSetResponderEvents[domEvent.type]; // for Flow\n\n  if (shouldSetCallbacks != null) {\n    var idPath = eventPaths.idPath,\n      nodePath = eventPaths.nodePath;\n    var shouldSetCallbackCaptureName = shouldSetCallbacks[0];\n    var shouldSetCallbackBubbleName = shouldSetCallbacks[1];\n    var bubbles = shouldSetCallbacks[2].bubbles;\n    var check = function check(id, node, callbackName) {\n      var config = getResponderConfig(id);\n      var shouldSetCallback = config[callbackName];\n      if (shouldSetCallback != null) {\n        responderEvent.currentTarget = node;\n        if (shouldSetCallback(responderEvent) === true) {\n          // Start the path from the potential responder\n          var prunedIdPath = idPath.slice(idPath.indexOf(id));\n          return {\n            id,\n            node,\n            idPath: prunedIdPath\n          };\n        }\n      }\n    };\n\n    // capture\n    for (var i = idPath.length - 1; i >= 0; i--) {\n      var id = idPath[i];\n      var node = nodePath[i];\n      var result = check(id, node, shouldSetCallbackCaptureName);\n      if (result != null) {\n        return result;\n      }\n      if (responderEvent.isPropagationStopped() === true) {\n        return;\n      }\n    }\n\n    // bubble\n    if (bubbles) {\n      for (var _i = 0; _i < idPath.length; _i++) {\n        var _id = idPath[_i];\n        var _node = nodePath[_i];\n        var _result = check(_id, _node, shouldSetCallbackBubbleName);\n        if (_result != null) {\n          return _result;\n        }\n        if (responderEvent.isPropagationStopped() === true) {\n          return;\n        }\n      }\n    } else {\n      var _id2 = idPath[0];\n      var _node2 = nodePath[0];\n      var target = domEvent.target;\n      if (target === _node2) {\n        return check(_id2, _node2, shouldSetCallbackBubbleName);\n      }\n    }\n  }\n}\n\n/**\n * Attempt to transfer the responder.\n */\nfunction attemptTransfer(responderEvent, wantsResponder) {\n  var _currentResponder2 = currentResponder,\n    currentId = _currentResponder2.id,\n    currentNode = _currentResponder2.node;\n  var id = wantsResponder.id,\n    node = wantsResponder.node;\n  var _getResponderConfig2 = getResponderConfig(id),\n    onResponderGrant = _getResponderConfig2.onResponderGrant,\n    onResponderReject = _getResponderConfig2.onResponderReject;\n  responderEvent.bubbles = false;\n  responderEvent.cancelable = false;\n  responderEvent.currentTarget = node;\n\n  // Set responder\n  if (currentId == null) {\n    if (onResponderGrant != null) {\n      responderEvent.currentTarget = node;\n      responderEvent.dispatchConfig.registrationName = 'onResponderGrant';\n      onResponderGrant(responderEvent);\n    }\n    changeCurrentResponder(wantsResponder);\n  }\n  // Negotiate with current responder\n  else {\n    var _getResponderConfig3 = getResponderConfig(currentId),\n      onResponderTerminate = _getResponderConfig3.onResponderTerminate,\n      onResponderTerminationRequest = _getResponderConfig3.onResponderTerminationRequest;\n    var allowTransfer = true;\n    if (onResponderTerminationRequest != null) {\n      responderEvent.currentTarget = currentNode;\n      responderEvent.dispatchConfig.registrationName = 'onResponderTerminationRequest';\n      if (onResponderTerminationRequest(responderEvent) === false) {\n        allowTransfer = false;\n      }\n    }\n    if (allowTransfer) {\n      // Terminate existing responder\n      if (onResponderTerminate != null) {\n        responderEvent.currentTarget = currentNode;\n        responderEvent.dispatchConfig.registrationName = 'onResponderTerminate';\n        onResponderTerminate(responderEvent);\n      }\n      // Grant next responder\n      if (onResponderGrant != null) {\n        responderEvent.currentTarget = node;\n        responderEvent.dispatchConfig.registrationName = 'onResponderGrant';\n        onResponderGrant(responderEvent);\n      }\n      changeCurrentResponder(wantsResponder);\n    } else {\n      // Reject responder request\n      if (onResponderReject != null) {\n        responderEvent.currentTarget = node;\n        responderEvent.dispatchConfig.registrationName = 'onResponderReject';\n        onResponderReject(responderEvent);\n      }\n    }\n  }\n}\n\n/* ------------ PUBLIC API ------------ */\n\n/**\n * Attach Listeners\n *\n * Use native events as ReactDOM doesn't have a non-plugin API to implement\n * this system.\n */\nvar documentEventsCapturePhase = ['blur', 'scroll'];\nvar documentEventsBubblePhase = [\n// mouse\n'mousedown', 'mousemove', 'mouseup', 'dragstart',\n// touch\n'touchstart', 'touchmove', 'touchend', 'touchcancel',\n// other\n'contextmenu', 'select', 'selectionchange'];\nexport function attachListeners() {\n  if (canUseDOM && window.__reactResponderSystemActive == null) {\n    window.addEventListener('blur', eventListener);\n    documentEventsBubblePhase.forEach(eventType => {\n      document.addEventListener(eventType, eventListener);\n    });\n    documentEventsCapturePhase.forEach(eventType => {\n      document.addEventListener(eventType, eventListener, true);\n    });\n    window.__reactResponderSystemActive = true;\n  }\n}\n\n/**\n * Register a node with the ResponderSystem.\n */\nexport function addNode(id, node, config) {\n  setResponderId(node, id);\n  responderListenersMap.set(id, config);\n}\n\n/**\n * Unregister a node with the ResponderSystem.\n */\nexport function removeNode(id) {\n  if (currentResponder.id === id) {\n    terminateResponder();\n  }\n  if (responderListenersMap.has(id)) {\n    responderListenersMap.delete(id);\n  }\n}\n\n/**\n * Allow the current responder to be terminated from within components to support\n * more complex requirements, such as use with other React libraries for working\n * with scroll views, input views, etc.\n */\nexport function terminateResponder() {\n  var _currentResponder3 = currentResponder,\n    id = _currentResponder3.id,\n    node = _currentResponder3.node;\n  if (id != null && node != null) {\n    var _getResponderConfig4 = getResponderConfig(id),\n      onResponderTerminate = _getResponderConfig4.onResponderTerminate;\n    if (onResponderTerminate != null) {\n      var event = createResponderEvent({}, responderTouchHistoryStore);\n      event.currentTarget = node;\n      onResponderTerminate(event);\n    }\n    changeCurrentResponder(emptyResponder);\n  }\n  isEmulatingMouseEvents = false;\n  trackedTouchCount = 0;\n}\n\n/**\n * Allow unit tests to inspect the current responder in the system.\n * FOR TESTING ONLY.\n */\nexport function getResponderNode() {\n  return currentResponder.node;\n}","/**\n * Copyright (c) Nicolas Gallagher\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\nexport default function isSelectionValid() {\n  var selection = window.getSelection();\n  var string = selection.toString();\n  var anchorNode = selection.anchorNode;\n  var focusNode = selection.focusNode;\n  var isTextNode = anchorNode && anchorNode.nodeType === window.Node.TEXT_NODE || focusNode && focusNode.nodeType === window.Node.TEXT_NODE;\n  return string.length >= 1 && string !== '\\n' && isTextNode;\n}","/**\n * Copyright (c) Nicolas Gallagher\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\n/**\n * Hook for integrating the Responder System into React\n *\n *   function SomeComponent({ onStartShouldSetResponder }) {\n *     const ref = useRef(null);\n *     useResponderEvents(ref, { onStartShouldSetResponder });\n *     return <div ref={ref} />\n *   }\n */\n\nimport * as React from 'react';\nimport * as ResponderSystem from './ResponderSystem';\nvar emptyObject = {};\nvar idCounter = 0;\nfunction useStable(getInitialValue) {\n  var ref = React.useRef(null);\n  if (ref.current == null) {\n    ref.current = getInitialValue();\n  }\n  return ref.current;\n}\nexport default function useResponderEvents(hostRef, config) {\n  if (config === void 0) {\n    config = emptyObject;\n  }\n  var id = useStable(() => idCounter++);\n  var isAttachedRef = React.useRef(false);\n\n  // This is a separate effects so it doesn't run when the config changes.\n  // On initial mount, attach global listeners if needed.\n  // On unmount, remove node potentially attached to the Responder System.\n  React.useEffect(() => {\n    ResponderSystem.attachListeners();\n    return () => {\n      ResponderSystem.removeNode(id);\n    };\n  }, [id]);\n\n  // Register and unregister with the Responder System as necessary\n  React.useEffect(() => {\n    var _config = config,\n      onMoveShouldSetResponder = _config.onMoveShouldSetResponder,\n      onMoveShouldSetResponderCapture = _config.onMoveShouldSetResponderCapture,\n      onScrollShouldSetResponder = _config.onScrollShouldSetResponder,\n      onScrollShouldSetResponderCapture = _config.onScrollShouldSetResponderCapture,\n      onSelectionChangeShouldSetResponder = _config.onSelectionChangeShouldSetResponder,\n      onSelectionChangeShouldSetResponderCapture = _config.onSelectionChangeShouldSetResponderCapture,\n      onStartShouldSetResponder = _config.onStartShouldSetResponder,\n      onStartShouldSetResponderCapture = _config.onStartShouldSetResponderCapture;\n    var requiresResponderSystem = onMoveShouldSetResponder != null || onMoveShouldSetResponderCapture != null || onScrollShouldSetResponder != null || onScrollShouldSetResponderCapture != null || onSelectionChangeShouldSetResponder != null || onSelectionChangeShouldSetResponderCapture != null || onStartShouldSetResponder != null || onStartShouldSetResponderCapture != null;\n    var node = hostRef.current;\n    if (requiresResponderSystem) {\n      ResponderSystem.addNode(id, node, config);\n      isAttachedRef.current = true;\n    } else if (isAttachedRef.current) {\n      ResponderSystem.removeNode(id);\n      isAttachedRef.current = false;\n    }\n  }, [config, hostRef, id]);\n  React.useDebugValue({\n    isResponder: hostRef.current === ResponderSystem.getResponderNode()\n  });\n  React.useDebugValue(config);\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\nimport * as React from 'react';\nvar UNINITIALIZED = typeof Symbol === 'function' && typeof Symbol() === 'symbol' ? Symbol() : Object.freeze({});\nexport default function useStable(getInitialValue) {\n  var ref = React.useRef(UNINITIALIZED);\n  if (ref.current === UNINITIALIZED) {\n    ref.current = getInitialValue();\n  }\n  // $FlowFixMe (#64650789) Trouble refining types where `Symbol` is concerned.\n  return ref.current;\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\nvar warnedKeys = {};\n\n/**\n * A simple function that prints a warning message once per session.\n *\n * @param {string} key - The key used to ensure the message is printed once.\n *                       This should be unique to the callsite.\n * @param {string} message - The message to print\n */\nexport function warnOnce(key, message) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (warnedKeys[key]) {\n      return;\n    }\n    console.warn(message);\n    warnedKeys[key] = true;\n  }\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 * @format\n */\n\n'use strict';\n\nimport Platform from '../../../exports/Platform';\nimport RCTDeviceEventEmitter from './RCTDeviceEventEmitter';\nimport invariant from 'fbjs/lib/invariant';\n/**\n * `NativeEventEmitter` is intended for use by Native Modules to emit events to\n * JavaScript listeners. If a `NativeModule` is supplied to the constructor, it\n * will be notified (via `addListener` and `removeListeners`) when the listener\n * count changes to manage \"native memory\".\n *\n * Currently, all native events are fired via a global `RCTDeviceEventEmitter`.\n * This means event names must be globally unique, and it means that call sites\n * can theoretically listen to `RCTDeviceEventEmitter` (although discouraged).\n */\nexport default class NativeEventEmitter {\n  constructor(nativeModule) {\n    if (Platform.OS === 'ios') {\n      invariant(nativeModule != null, '`new NativeEventEmitter()` requires a non-null argument.');\n      this._nativeModule = nativeModule;\n    }\n  }\n  addListener(eventType, listener, context) {\n    var _this$_nativeModule;\n    (_this$_nativeModule = this._nativeModule) == null ? void 0 : _this$_nativeModule.addListener(eventType);\n    var subscription = RCTDeviceEventEmitter.addListener(eventType, listener, context);\n    return {\n      remove: () => {\n        if (subscription != null) {\n          var _this$_nativeModule2;\n          (_this$_nativeModule2 = this._nativeModule) == null ? void 0 : _this$_nativeModule2.removeListeners(1);\n          // $FlowFixMe[incompatible-use]\n          subscription.remove();\n          subscription = null;\n        }\n      }\n    };\n  }\n\n  /**\n   * @deprecated Use `remove` on the EventSubscription from `addListener`.\n   */\n  removeListener(eventType, listener) {\n    var _this$_nativeModule3;\n    (_this$_nativeModule3 = this._nativeModule) == null ? void 0 : _this$_nativeModule3.removeListeners(1);\n    // NOTE: This will report a deprecation notice via `console.error`.\n    // $FlowFixMe[prop-missing] - `removeListener` exists but is deprecated.\n    RCTDeviceEventEmitter.removeListener(eventType, listener);\n  }\n  emit(eventType) {\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    // Generally, `RCTDeviceEventEmitter` is directly invoked. But this is\n    // included for completeness.\n    RCTDeviceEventEmitter.emit(eventType, ...args);\n  }\n  removeAllListeners(eventType) {\n    var _this$_nativeModule4;\n    invariant(eventType != null, '`NativeEventEmitter.removeAllListener()` requires a non-null argument.');\n    (_this$_nativeModule4 = this._nativeModule) == null ? void 0 : _this$_nativeModule4.removeListeners(this.listenerCount(eventType));\n    RCTDeviceEventEmitter.removeAllListeners(eventType);\n  }\n  listenerCount(eventType) {\n    return RCTDeviceEventEmitter.listenerCount(eventType);\n  }\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 * @format\n */\n\nimport EventEmitter from '../vendor/emitter/EventEmitter';\n\n// FIXME: use typed events\n\n/**\n * Global EventEmitter used by the native platform to emit events to JavaScript.\n * Events are identified by globally unique event names.\n *\n * NativeModules that emit events should instead subclass `NativeEventEmitter`.\n */\nexport default new EventEmitter();","/**\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 * @format\n */\n\n'use strict';\n\n/**\n * Used to find the indices of the frames that overlap the given offsets. Useful for finding the\n * items that bound different windows of content, such as the visible area or the buffered overscan\n * area.\n */\nexport function elementsThatOverlapOffsets(offsets, props, getFrameMetrics, zoomScale) {\n  if (zoomScale === void 0) {\n    zoomScale = 1;\n  }\n  var itemCount = props.getItemCount(props.data);\n  var result = [];\n  for (var offsetIndex = 0; offsetIndex < offsets.length; offsetIndex++) {\n    var currentOffset = offsets[offsetIndex];\n    var left = 0;\n    var right = itemCount - 1;\n    while (left <= right) {\n      // eslint-disable-next-line no-bitwise\n      var mid = left + (right - left >>> 1);\n      var frame = getFrameMetrics(mid, props);\n      var scaledOffsetStart = frame.offset * zoomScale;\n      var scaledOffsetEnd = (frame.offset + frame.length) * zoomScale;\n\n      // We want the first frame that contains the offset, with inclusive bounds. Thus, for the\n      // first frame the scaledOffsetStart is inclusive, while for other frames it is exclusive.\n      if (mid === 0 && currentOffset < scaledOffsetStart || mid !== 0 && currentOffset <= scaledOffsetStart) {\n        right = mid - 1;\n      } else if (currentOffset > scaledOffsetEnd) {\n        left = mid + 1;\n      } else {\n        result[offsetIndex] = mid;\n        break;\n      }\n    }\n  }\n  return result;\n}\n\n/**\n * Computes the number of elements in the `next` range that are new compared to the `prev` range.\n * Handy for calculating how many new items will be rendered when the render window changes so we\n * can restrict the number of new items render at once so that content can appear on the screen\n * faster.\n */\nexport function newRangeCount(prev, next) {\n  return next.last - next.first + 1 - Math.max(0, 1 + Math.min(next.last, prev.last) - Math.max(next.first, prev.first));\n}\n\n/**\n * Custom logic for determining which items should be rendered given the current frame and scroll\n * metrics, as well as the previous render state. The algorithm may evolve over time, but generally\n * prioritizes the visible area first, then expands that with overscan regions ahead and behind,\n * biased in the direction of scroll.\n */\nexport function computeWindowedRenderLimits(props, maxToRenderPerBatch, windowSize, prev, getFrameMetricsApprox, scrollMetrics) {\n  var itemCount = props.getItemCount(props.data);\n  if (itemCount === 0) {\n    return {\n      first: 0,\n      last: -1\n    };\n  }\n  var offset = scrollMetrics.offset,\n    velocity = scrollMetrics.velocity,\n    visibleLength = scrollMetrics.visibleLength,\n    _scrollMetrics$zoomSc = scrollMetrics.zoomScale,\n    zoomScale = _scrollMetrics$zoomSc === void 0 ? 1 : _scrollMetrics$zoomSc;\n\n  // Start with visible area, then compute maximum overscan region by expanding from there, biased\n  // in the direction of scroll. Total overscan area is capped, which should cap memory consumption\n  // too.\n  var visibleBegin = Math.max(0, offset);\n  var visibleEnd = visibleBegin + visibleLength;\n  var overscanLength = (windowSize - 1) * visibleLength;\n\n  // Considering velocity seems to introduce more churn than it's worth.\n  var leadFactor = 0.5; // Math.max(0, Math.min(1, velocity / 25 + 0.5));\n\n  var fillPreference = velocity > 1 ? 'after' : velocity < -1 ? 'before' : 'none';\n  var overscanBegin = Math.max(0, visibleBegin - (1 - leadFactor) * overscanLength);\n  var overscanEnd = Math.max(0, visibleEnd + leadFactor * overscanLength);\n  var lastItemOffset = getFrameMetricsApprox(itemCount - 1, props).offset * zoomScale;\n  if (lastItemOffset < overscanBegin) {\n    // Entire list is before our overscan window\n    return {\n      first: Math.max(0, itemCount - 1 - maxToRenderPerBatch),\n      last: itemCount - 1\n    };\n  }\n\n  // Find the indices that correspond to the items at the render boundaries we're targeting.\n  var _elementsThatOverlapO = elementsThatOverlapOffsets([overscanBegin, visibleBegin, visibleEnd, overscanEnd], props, getFrameMetricsApprox, zoomScale),\n    overscanFirst = _elementsThatOverlapO[0],\n    first = _elementsThatOverlapO[1],\n    last = _elementsThatOverlapO[2],\n    overscanLast = _elementsThatOverlapO[3];\n  overscanFirst = overscanFirst == null ? 0 : overscanFirst;\n  first = first == null ? Math.max(0, overscanFirst) : first;\n  overscanLast = overscanLast == null ? itemCount - 1 : overscanLast;\n  last = last == null ? Math.min(overscanLast, first + maxToRenderPerBatch - 1) : last;\n  var visible = {\n    first,\n    last\n  };\n\n  // We want to limit the number of new cells we're rendering per batch so that we can fill the\n  // content on the screen quickly. If we rendered the entire overscan window at once, the user\n  // could be staring at white space for a long time waiting for a bunch of offscreen content to\n  // render.\n  var newCellCount = newRangeCount(prev, visible);\n  while (true) {\n    if (first <= overscanFirst && last >= overscanLast) {\n      // If we fill the entire overscan range, we're done.\n      break;\n    }\n    var maxNewCells = newCellCount >= maxToRenderPerBatch;\n    var firstWillAddMore = first <= prev.first || first > prev.last;\n    var firstShouldIncrement = first > overscanFirst && (!maxNewCells || !firstWillAddMore);\n    var lastWillAddMore = last >= prev.last || last < prev.first;\n    var lastShouldIncrement = last < overscanLast && (!maxNewCells || !lastWillAddMore);\n    if (maxNewCells && !firstShouldIncrement && !lastShouldIncrement) {\n      // We only want to stop if we've hit maxNewCells AND we cannot increment first or last\n      // without rendering new items. This let's us preserve as many already rendered items as\n      // possible, reducing render churn and keeping the rendered overscan range as large as\n      // possible.\n      break;\n    }\n    if (firstShouldIncrement && !(fillPreference === 'after' && lastShouldIncrement && lastWillAddMore)) {\n      if (firstWillAddMore) {\n        newCellCount++;\n      }\n      first--;\n    }\n    if (lastShouldIncrement && !(fillPreference === 'before' && firstShouldIncrement && firstWillAddMore)) {\n      if (lastWillAddMore) {\n        newCellCount++;\n      }\n      last++;\n    }\n  }\n  if (!(last >= first && first >= 0 && last < itemCount && first >= overscanFirst && last <= overscanLast && first <= visible.first && last >= visible.last)) {\n    throw new Error('Bad window calculation ' + JSON.stringify({\n      first,\n      last,\n      itemCount,\n      overscanFirst,\n      overscanLast,\n      visible\n    }));\n  }\n  return {\n    first,\n    last\n  };\n}\nexport function keyExtractor(item, index) {\n  if (typeof item === 'object' && (item == null ? void 0 : item.key) != null) {\n    return item.key;\n  }\n  if (typeof item === 'object' && (item == null ? void 0 : item.id) != null) {\n    return item.id;\n  }\n  return String(index);\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 * @format\n * \n */\n\n'use strict';\n\nimport InteractionManager from '../../../exports/InteractionManager';\n\n/**\n * A simple class for batching up invocations of a low-pri callback. A timeout is set to run the\n * callback once after a delay, no matter how many times it's scheduled. Once the delay is reached,\n * InteractionManager.runAfterInteractions is used to invoke the callback after any hi-pri\n * interactions are done running.\n *\n * Make sure to cleanup with dispose().  Example:\n *\n *   class Widget extends React.Component {\n *     _batchedSave: new Batchinator(() => this._saveState, 1000);\n *     _saveSate() {\n *       // save this.state to disk\n *     }\n *     componentDidUpdate() {\n *       this._batchedSave.schedule();\n *     }\n *     componentWillUnmount() {\n *       this._batchedSave.dispose();\n *     }\n *     ...\n *   }\n */\nclass Batchinator {\n  constructor(callback, delayMS) {\n    this._delay = delayMS;\n    this._callback = callback;\n  }\n  /*\n   * Cleanup any pending tasks.\n   *\n   * By default, if there is a pending task the callback is run immediately. Set the option abort to\n   * true to not call the callback if it was pending.\n   */\n  dispose(options) {\n    if (options === void 0) {\n      options = {\n        abort: false\n      };\n    }\n    if (this._taskHandle) {\n      this._taskHandle.cancel();\n      if (!options.abort) {\n        this._callback();\n      }\n      this._taskHandle = null;\n    }\n  }\n  schedule() {\n    if (this._taskHandle) {\n      return;\n    }\n    var timeoutHandle = setTimeout(() => {\n      this._taskHandle = InteractionManager.runAfterInteractions(() => {\n        // Note that we clear the handle before invoking the callback so that if the callback calls\n        // schedule again, it will actually schedule another task.\n        this._taskHandle = null;\n        this._callback();\n      });\n    }, this._delay);\n    this._taskHandle = {\n      cancel: () => clearTimeout(timeoutHandle)\n    };\n  }\n}\nexport default Batchinator;","/**\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 * @format\n * \n */\n\n'use strict';\n\nfunction clamp(min, value, max) {\n  if (value < min) {\n    return min;\n  }\n  if (value > max) {\n    return max;\n  }\n  return value;\n}\nexport default clamp;","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\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 * @format\n */\n\nimport invariant from 'fbjs/lib/invariant';\nexport class CellRenderMask {\n  constructor(numCells) {\n    invariant(numCells >= 0, 'CellRenderMask must contain a non-negative number os cells');\n    this._numCells = numCells;\n    if (numCells === 0) {\n      this._regions = [];\n    } else {\n      this._regions = [{\n        first: 0,\n        last: numCells - 1,\n        isSpacer: true\n      }];\n    }\n  }\n  enumerateRegions() {\n    return this._regions;\n  }\n  addCells(cells) {\n    invariant(cells.first >= 0 && cells.first < this._numCells && cells.last >= -1 && cells.last < this._numCells && cells.last >= cells.first - 1, 'CellRenderMask.addCells called with invalid cell range');\n\n    // VirtualizedList uses inclusive ranges, where zero-count states are\n    // possible. E.g. [0, -1] for no cells, starting at 0.\n    if (cells.last < cells.first) {\n      return;\n    }\n    var _this$_findRegion = this._findRegion(cells.first),\n      firstIntersect = _this$_findRegion[0],\n      firstIntersectIdx = _this$_findRegion[1];\n    var _this$_findRegion2 = this._findRegion(cells.last),\n      lastIntersect = _this$_findRegion2[0],\n      lastIntersectIdx = _this$_findRegion2[1];\n\n    // Fast-path if the cells to add are already all present in the mask. We\n    // will otherwise need to do some mutation.\n    if (firstIntersectIdx === lastIntersectIdx && !firstIntersect.isSpacer) {\n      return;\n    }\n\n    // We need to replace the existing covered regions with 1-3 new regions\n    // depending whether we need to split spacers out of overlapping regions.\n    var newLeadRegion = [];\n    var newTailRegion = [];\n    var newMainRegion = _objectSpread(_objectSpread({}, cells), {}, {\n      isSpacer: false\n    });\n    if (firstIntersect.first < newMainRegion.first) {\n      if (firstIntersect.isSpacer) {\n        newLeadRegion.push({\n          first: firstIntersect.first,\n          last: newMainRegion.first - 1,\n          isSpacer: true\n        });\n      } else {\n        newMainRegion.first = firstIntersect.first;\n      }\n    }\n    if (lastIntersect.last > newMainRegion.last) {\n      if (lastIntersect.isSpacer) {\n        newTailRegion.push({\n          first: newMainRegion.last + 1,\n          last: lastIntersect.last,\n          isSpacer: true\n        });\n      } else {\n        newMainRegion.last = lastIntersect.last;\n      }\n    }\n    var replacementRegions = [...newLeadRegion, newMainRegion, ...newTailRegion];\n    var numRegionsToDelete = lastIntersectIdx - firstIntersectIdx + 1;\n    this._regions.splice(firstIntersectIdx, numRegionsToDelete, ...replacementRegions);\n  }\n  numCells() {\n    return this._numCells;\n  }\n  equals(other) {\n    return this._numCells === other._numCells && this._regions.length === other._regions.length && this._regions.every((region, i) => region.first === other._regions[i].first && region.last === other._regions[i].last && region.isSpacer === other._regions[i].isSpacer);\n  }\n  _findRegion(cellIdx) {\n    var firstIdx = 0;\n    var lastIdx = this._regions.length - 1;\n    while (firstIdx <= lastIdx) {\n      var middleIdx = Math.floor((firstIdx + lastIdx) / 2);\n      var middleRegion = this._regions[middleIdx];\n      if (cellIdx >= middleRegion.first && cellIdx <= middleRegion.last) {\n        return [middleRegion, middleIdx];\n      } else if (cellIdx < middleRegion.first) {\n        lastIdx = middleIdx - 1;\n      } else if (cellIdx > middleRegion.last) {\n        firstIdx = middleIdx + 1;\n      }\n    }\n    invariant(false, \"A region was not found containing cellIdx \" + cellIdx);\n  }\n}","import _createForOfIteratorHelperLoose from \"@babel/runtime/helpers/createForOfIteratorHelperLoose\";\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 * @format\n */\n\nimport invariant from 'fbjs/lib/invariant';\nexport default class ChildListCollection {\n  constructor() {\n    this._cellKeyToChildren = new Map();\n    this._childrenToCellKey = new Map();\n  }\n  add(list, cellKey) {\n    var _this$_cellKeyToChild;\n    invariant(!this._childrenToCellKey.has(list), 'Trying to add already present child list');\n    var cellLists = (_this$_cellKeyToChild = this._cellKeyToChildren.get(cellKey)) !== null && _this$_cellKeyToChild !== void 0 ? _this$_cellKeyToChild : new Set();\n    cellLists.add(list);\n    this._cellKeyToChildren.set(cellKey, cellLists);\n    this._childrenToCellKey.set(list, cellKey);\n  }\n  remove(list) {\n    var cellKey = this._childrenToCellKey.get(list);\n    invariant(cellKey != null, 'Trying to remove non-present child list');\n    this._childrenToCellKey.delete(list);\n    var cellLists = this._cellKeyToChildren.get(cellKey);\n    invariant(cellLists, '_cellKeyToChildren should contain cellKey');\n    cellLists.delete(list);\n    if (cellLists.size === 0) {\n      this._cellKeyToChildren.delete(cellKey);\n    }\n  }\n  forEach(fn) {\n    for (var _iterator = _createForOfIteratorHelperLoose(this._cellKeyToChildren.values()), _step; !(_step = _iterator()).done;) {\n      var listSet = _step.value;\n      for (var _iterator2 = _createForOfIteratorHelperLoose(listSet), _step2; !(_step2 = _iterator2()).done;) {\n        var list = _step2.value;\n        fn(list);\n      }\n    }\n  }\n  forEachInCell(cellKey, fn) {\n    var _this$_cellKeyToChild2;\n    var listSet = (_this$_cellKeyToChild2 = this._cellKeyToChildren.get(cellKey)) !== null && _this$_cellKeyToChild2 !== void 0 ? _this$_cellKeyToChild2 : [];\n    for (var _iterator3 = _createForOfIteratorHelperLoose(listSet), _step3; !(_step3 = _iterator3()).done;) {\n      var list = _step3.value;\n      fn(list);\n    }\n  }\n  anyInCell(cellKey, fn) {\n    var _this$_cellKeyToChild3;\n    var listSet = (_this$_cellKeyToChild3 = this._cellKeyToChildren.get(cellKey)) !== null && _this$_cellKeyToChild3 !== void 0 ? _this$_cellKeyToChild3 : [];\n    for (var _iterator4 = _createForOfIteratorHelperLoose(listSet), _step4; !(_step4 = _iterator4()).done;) {\n      var list = _step4.value;\n      if (fn(list)) {\n        return true;\n      }\n    }\n    return false;\n  }\n  size() {\n    return this._childrenToCellKey.size;\n  }\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 * @format\n */\n\n'use strict';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nclass Info {\n  constructor() {\n    this.any_blank_count = 0;\n    this.any_blank_ms = 0;\n    this.any_blank_speed_sum = 0;\n    this.mostly_blank_count = 0;\n    this.mostly_blank_ms = 0;\n    this.pixels_blank = 0;\n    this.pixels_sampled = 0;\n    this.pixels_scrolled = 0;\n    this.total_time_spent = 0;\n    this.sample_count = 0;\n  }\n}\nvar DEBUG = false;\nvar _listeners = [];\nvar _minSampleCount = 10;\nvar _sampleRate = DEBUG ? 1 : null;\n\n/**\n * A helper class for detecting when the maximem fill rate of `VirtualizedList` is exceeded.\n * By default the sampling rate is set to zero and this will do nothing. If you want to collect\n * samples (e.g. to log them), make sure to call `FillRateHelper.setSampleRate(0.0-1.0)`.\n *\n * Listeners and sample rate are global for all `VirtualizedList`s - typical usage will combine with\n * `SceneTracker.getActiveScene` to determine the context of the events.\n */\nclass FillRateHelper {\n  static addListener(callback) {\n    if (_sampleRate === null) {\n      console.warn('Call `FillRateHelper.setSampleRate` before `addListener`.');\n    }\n    _listeners.push(callback);\n    return {\n      remove: () => {\n        _listeners = _listeners.filter(listener => callback !== listener);\n      }\n    };\n  }\n  static setSampleRate(sampleRate) {\n    _sampleRate = sampleRate;\n  }\n  static setMinSampleCount(minSampleCount) {\n    _minSampleCount = minSampleCount;\n  }\n  constructor(getFrameMetrics) {\n    this._anyBlankStartTime = null;\n    this._enabled = false;\n    this._info = new Info();\n    this._mostlyBlankStartTime = null;\n    this._samplesStartTime = null;\n    this._getFrameMetrics = getFrameMetrics;\n    this._enabled = (_sampleRate || 0) > Math.random();\n    this._resetData();\n  }\n  activate() {\n    if (this._enabled && this._samplesStartTime == null) {\n      DEBUG && console.debug('FillRateHelper: activate');\n      this._samplesStartTime = global.performance.now();\n    }\n  }\n  deactivateAndFlush() {\n    if (!this._enabled) {\n      return;\n    }\n    var start = this._samplesStartTime; // const for flow\n    if (start == null) {\n      DEBUG && console.debug('FillRateHelper: bail on deactivate with no start time');\n      return;\n    }\n    if (this._info.sample_count < _minSampleCount) {\n      // Don't bother with under-sampled events.\n      this._resetData();\n      return;\n    }\n    var total_time_spent = global.performance.now() - start;\n    var info = _objectSpread(_objectSpread({}, this._info), {}, {\n      total_time_spent\n    });\n    if (DEBUG) {\n      var derived = {\n        avg_blankness: this._info.pixels_blank / this._info.pixels_sampled,\n        avg_speed: this._info.pixels_scrolled / (total_time_spent / 1000),\n        avg_speed_when_any_blank: this._info.any_blank_speed_sum / this._info.any_blank_count,\n        any_blank_per_min: this._info.any_blank_count / (total_time_spent / 1000 / 60),\n        any_blank_time_frac: this._info.any_blank_ms / total_time_spent,\n        mostly_blank_per_min: this._info.mostly_blank_count / (total_time_spent / 1000 / 60),\n        mostly_blank_time_frac: this._info.mostly_blank_ms / total_time_spent\n      };\n      for (var key in derived) {\n        // $FlowFixMe[prop-missing]\n        derived[key] = Math.round(1000 * derived[key]) / 1000;\n      }\n      console.debug('FillRateHelper deactivateAndFlush: ', {\n        derived,\n        info\n      });\n    }\n    _listeners.forEach(listener => listener(info));\n    this._resetData();\n  }\n  computeBlankness(props, cellsAroundViewport, scrollMetrics) {\n    if (!this._enabled || props.getItemCount(props.data) === 0 || cellsAroundViewport.last < cellsAroundViewport.first || this._samplesStartTime == null) {\n      return 0;\n    }\n    var dOffset = scrollMetrics.dOffset,\n      offset = scrollMetrics.offset,\n      velocity = scrollMetrics.velocity,\n      visibleLength = scrollMetrics.visibleLength;\n\n    // Denominator metrics that we track for all events - most of the time there is no blankness and\n    // we want to capture that.\n    this._info.sample_count++;\n    this._info.pixels_sampled += Math.round(visibleLength);\n    this._info.pixels_scrolled += Math.round(Math.abs(dOffset));\n    var scrollSpeed = Math.round(Math.abs(velocity) * 1000); // px / sec\n\n    // Whether blank now or not, record the elapsed time blank if we were blank last time.\n    var now = global.performance.now();\n    if (this._anyBlankStartTime != null) {\n      this._info.any_blank_ms += now - this._anyBlankStartTime;\n    }\n    this._anyBlankStartTime = null;\n    if (this._mostlyBlankStartTime != null) {\n      this._info.mostly_blank_ms += now - this._mostlyBlankStartTime;\n    }\n    this._mostlyBlankStartTime = null;\n    var blankTop = 0;\n    var first = cellsAroundViewport.first;\n    var firstFrame = this._getFrameMetrics(first, props);\n    while (first <= cellsAroundViewport.last && (!firstFrame || !firstFrame.inLayout)) {\n      firstFrame = this._getFrameMetrics(first, props);\n      first++;\n    }\n    // Only count blankTop if we aren't rendering the first item, otherwise we will count the header\n    // as blank.\n    if (firstFrame && first > 0) {\n      blankTop = Math.min(visibleLength, Math.max(0, firstFrame.offset - offset));\n    }\n    var blankBottom = 0;\n    var last = cellsAroundViewport.last;\n    var lastFrame = this._getFrameMetrics(last, props);\n    while (last >= cellsAroundViewport.first && (!lastFrame || !lastFrame.inLayout)) {\n      lastFrame = this._getFrameMetrics(last, props);\n      last--;\n    }\n    // Only count blankBottom if we aren't rendering the last item, otherwise we will count the\n    // footer as blank.\n    if (lastFrame && last < props.getItemCount(props.data) - 1) {\n      var bottomEdge = lastFrame.offset + lastFrame.length;\n      blankBottom = Math.min(visibleLength, Math.max(0, offset + visibleLength - bottomEdge));\n    }\n    var pixels_blank = Math.round(blankTop + blankBottom);\n    var blankness = pixels_blank / visibleLength;\n    if (blankness > 0) {\n      this._anyBlankStartTime = now;\n      this._info.any_blank_speed_sum += scrollSpeed;\n      this._info.any_blank_count++;\n      this._info.pixels_blank += pixels_blank;\n      if (blankness > 0.5) {\n        this._mostlyBlankStartTime = now;\n        this._info.mostly_blank_count++;\n      }\n    } else if (scrollSpeed < 0.01 || Math.abs(dOffset) < 1) {\n      this.deactivateAndFlush();\n    }\n    return blankness;\n  }\n  enabled() {\n    return this._enabled;\n  }\n  _resetData() {\n    this._anyBlankStartTime = null;\n    this._info = new Info();\n    this._mostlyBlankStartTime = null;\n    this._samplesStartTime = null;\n  }\n}\nexport default FillRateHelper;","/**\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 * @format\n */\n\nimport invariant from 'fbjs/lib/invariant';\nimport * as React from 'react';\n\n/**\n * `setState` is called asynchronously, and should not rely on the value of\n * `this.props` or `this.state`:\n * https://reactjs.org/docs/state-and-lifecycle.html#state-updates-may-be-asynchronous\n *\n * SafePureComponent adds runtime enforcement, to catch cases where these\n * variables are read in a state updater function, instead of the ones passed\n * in.\n */\nexport default class StateSafePureComponent extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this._inAsyncStateUpdate = false;\n    this._installSetStateHooks();\n  }\n  setState(partialState, callback) {\n    if (typeof partialState === 'function') {\n      super.setState((state, props) => {\n        this._inAsyncStateUpdate = true;\n        var ret;\n        try {\n          ret = partialState(state, props);\n        } catch (err) {\n          throw err;\n        } finally {\n          this._inAsyncStateUpdate = false;\n        }\n        return ret;\n      }, callback);\n    } else {\n      super.setState(partialState, callback);\n    }\n  }\n  _installSetStateHooks() {\n    var that = this;\n    var props = this.props,\n      state = this.state;\n    Object.defineProperty(this, 'props', {\n      get() {\n        invariant(!that._inAsyncStateUpdate, '\"this.props\" should not be accessed during state updates');\n        return props;\n      },\n      set(newProps) {\n        props = newProps;\n      }\n    });\n    Object.defineProperty(this, 'state', {\n      get() {\n        invariant(!that._inAsyncStateUpdate, '\"this.state\" should not be acceessed during state updates');\n        return state;\n      },\n      set(newState) {\n        state = newState;\n      }\n    });\n  }\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 * @format\n */\n\n'use strict';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _createForOfIteratorHelperLoose from \"@babel/runtime/helpers/createForOfIteratorHelperLoose\";\nimport invariant from 'fbjs/lib/invariant';\n/**\n * A Utility class for calculating viewable items based on current metrics like scroll position and\n * layout.\n *\n * An item is said to be in a \"viewable\" state when any of the following\n * is true for longer than `minimumViewTime` milliseconds (after an interaction if `waitForInteraction`\n * is true):\n *\n * - Occupying >= `viewAreaCoveragePercentThreshold` of the view area XOR fraction of the item\n *   visible in the view area >= `itemVisiblePercentThreshold`.\n * - Entirely visible on screen\n */\nclass ViewabilityHelper {\n  constructor(config) {\n    if (config === void 0) {\n      config = {\n        viewAreaCoveragePercentThreshold: 0\n      };\n    }\n    this._hasInteracted = false;\n    this._timers = new Set();\n    this._viewableIndices = [];\n    this._viewableItems = new Map();\n    this._config = config;\n  }\n\n  /**\n   * Cleanup, e.g. on unmount. Clears any pending timers.\n   */\n  dispose() {\n    /* $FlowFixMe[incompatible-call] (>=0.63.0 site=react_native_fb) This\n     * comment suppresses an error found when Flow v0.63 was deployed. To see\n     * the error delete this comment and run Flow. */\n    this._timers.forEach(clearTimeout);\n  }\n\n  /**\n   * Determines which items are viewable based on the current metrics and config.\n   */\n  computeViewableItems(props, scrollOffset, viewportHeight, getFrameMetrics,\n  // Optional optimization to reduce the scan size\n  renderRange) {\n    var itemCount = props.getItemCount(props.data);\n    var _this$_config = this._config,\n      itemVisiblePercentThreshold = _this$_config.itemVisiblePercentThreshold,\n      viewAreaCoveragePercentThreshold = _this$_config.viewAreaCoveragePercentThreshold;\n    var viewAreaMode = viewAreaCoveragePercentThreshold != null;\n    var viewablePercentThreshold = viewAreaMode ? viewAreaCoveragePercentThreshold : itemVisiblePercentThreshold;\n    invariant(viewablePercentThreshold != null && itemVisiblePercentThreshold != null !== (viewAreaCoveragePercentThreshold != null), 'Must set exactly one of itemVisiblePercentThreshold or viewAreaCoveragePercentThreshold');\n    var viewableIndices = [];\n    if (itemCount === 0) {\n      return viewableIndices;\n    }\n    var firstVisible = -1;\n    var _ref = renderRange || {\n        first: 0,\n        last: itemCount - 1\n      },\n      first = _ref.first,\n      last = _ref.last;\n    if (last >= itemCount) {\n      console.warn('Invalid render range computing viewability ' + JSON.stringify({\n        renderRange,\n        itemCount\n      }));\n      return [];\n    }\n    for (var idx = first; idx <= last; idx++) {\n      var metrics = getFrameMetrics(idx, props);\n      if (!metrics) {\n        continue;\n      }\n      var top = metrics.offset - scrollOffset;\n      var bottom = top + metrics.length;\n      if (top < viewportHeight && bottom > 0) {\n        firstVisible = idx;\n        if (_isViewable(viewAreaMode, viewablePercentThreshold, top, bottom, viewportHeight, metrics.length)) {\n          viewableIndices.push(idx);\n        }\n      } else if (firstVisible >= 0) {\n        break;\n      }\n    }\n    return viewableIndices;\n  }\n\n  /**\n   * Figures out which items are viewable and how that has changed from before and calls\n   * `onViewableItemsChanged` as appropriate.\n   */\n  onUpdate(props, scrollOffset, viewportHeight, getFrameMetrics, createViewToken, onViewableItemsChanged,\n  // Optional optimization to reduce the scan size\n  renderRange) {\n    var itemCount = props.getItemCount(props.data);\n    if (this._config.waitForInteraction && !this._hasInteracted || itemCount === 0 || !getFrameMetrics(0, props)) {\n      return;\n    }\n    var viewableIndices = [];\n    if (itemCount) {\n      viewableIndices = this.computeViewableItems(props, scrollOffset, viewportHeight, getFrameMetrics, renderRange);\n    }\n    if (this._viewableIndices.length === viewableIndices.length && this._viewableIndices.every((v, ii) => v === viewableIndices[ii])) {\n      // We might get a lot of scroll events where visibility doesn't change and we don't want to do\n      // extra work in those cases.\n      return;\n    }\n    this._viewableIndices = viewableIndices;\n    if (this._config.minimumViewTime) {\n      var handle = setTimeout(() => {\n        /* $FlowFixMe[incompatible-call] (>=0.63.0 site=react_native_fb) This\n         * comment suppresses an error found when Flow v0.63 was deployed. To\n         * see the error delete this comment and run Flow. */\n        this._timers.delete(handle);\n        this._onUpdateSync(props, viewableIndices, onViewableItemsChanged, createViewToken);\n      }, this._config.minimumViewTime);\n      /* $FlowFixMe[incompatible-call] (>=0.63.0 site=react_native_fb) This\n       * comment suppresses an error found when Flow v0.63 was deployed. To see\n       * the error delete this comment and run Flow. */\n      this._timers.add(handle);\n    } else {\n      this._onUpdateSync(props, viewableIndices, onViewableItemsChanged, createViewToken);\n    }\n  }\n\n  /**\n   * clean-up cached _viewableIndices to evaluate changed items on next update\n   */\n  resetViewableIndices() {\n    this._viewableIndices = [];\n  }\n\n  /**\n   * Records that an interaction has happened even if there has been no scroll.\n   */\n  recordInteraction() {\n    this._hasInteracted = true;\n  }\n  _onUpdateSync(props, viewableIndicesToCheck, onViewableItemsChanged, createViewToken) {\n    // Filter out indices that have gone out of view since this call was scheduled.\n    viewableIndicesToCheck = viewableIndicesToCheck.filter(ii => this._viewableIndices.includes(ii));\n    var prevItems = this._viewableItems;\n    var nextItems = new Map(viewableIndicesToCheck.map(ii => {\n      var viewable = createViewToken(ii, true, props);\n      return [viewable.key, viewable];\n    }));\n    var changed = [];\n    for (var _iterator = _createForOfIteratorHelperLoose(nextItems), _step; !(_step = _iterator()).done;) {\n      var _step$value = _step.value,\n        key = _step$value[0],\n        viewable = _step$value[1];\n      if (!prevItems.has(key)) {\n        changed.push(viewable);\n      }\n    }\n    for (var _iterator2 = _createForOfIteratorHelperLoose(prevItems), _step2; !(_step2 = _iterator2()).done;) {\n      var _step2$value = _step2.value,\n        _key = _step2$value[0],\n        _viewable = _step2$value[1];\n      if (!nextItems.has(_key)) {\n        changed.push(_objectSpread(_objectSpread({}, _viewable), {}, {\n          isViewable: false\n        }));\n      }\n    }\n    if (changed.length > 0) {\n      this._viewableItems = nextItems;\n      onViewableItemsChanged({\n        viewableItems: Array.from(nextItems.values()),\n        changed,\n        viewabilityConfig: this._config\n      });\n    }\n  }\n}\nfunction _isViewable(viewAreaMode, viewablePercentThreshold, top, bottom, viewportHeight, itemLength) {\n  if (_isEntirelyVisible(top, bottom, viewportHeight)) {\n    return true;\n  } else {\n    var pixels = _getPixelsVisible(top, bottom, viewportHeight);\n    var percent = 100 * (viewAreaMode ? pixels / viewportHeight : pixels / itemLength);\n    return percent >= viewablePercentThreshold;\n  }\n}\nfunction _getPixelsVisible(top, bottom, viewportHeight) {\n  var visibleHeight = Math.min(bottom, viewportHeight) - Math.max(top, 0);\n  return Math.max(0, visibleHeight);\n}\nfunction _isEntirelyVisible(top, bottom, viewportHeight) {\n  return top >= 0 && bottom <= viewportHeight && bottom > top;\n}\nexport default ViewabilityHelper;","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\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 * @format\n */\n\nimport * as React from 'react';\nimport { useContext, useMemo } from 'react';\nvar __DEV__ = process.env.NODE_ENV !== 'production';\nexport var VirtualizedListContext = /*#__PURE__*/React.createContext(null);\nif (__DEV__) {\n  VirtualizedListContext.displayName = 'VirtualizedListContext';\n}\n\n/**\n * Resets the context. Intended for use by portal-like components (e.g. Modal).\n */\nexport function VirtualizedListContextResetter(_ref) {\n  var children = _ref.children;\n  return /*#__PURE__*/React.createElement(VirtualizedListContext.Provider, {\n    value: null\n  }, children);\n}\n\n/**\n * Sets the context with memoization. Intended to be used by `VirtualizedList`.\n */\nexport function VirtualizedListContextProvider(_ref2) {\n  var children = _ref2.children,\n    value = _ref2.value;\n  // Avoid setting a newly created context object if the values are identical.\n  var context = useMemo(() => ({\n    cellKey: null,\n    getScrollMetrics: value.getScrollMetrics,\n    horizontal: value.horizontal,\n    getOutermostParentListRef: value.getOutermostParentListRef,\n    registerAsNestedChild: value.registerAsNestedChild,\n    unregisterAsNestedChild: value.unregisterAsNestedChild\n  }), [value.getScrollMetrics, value.horizontal, value.getOutermostParentListRef, value.registerAsNestedChild, value.unregisterAsNestedChild]);\n  return /*#__PURE__*/React.createElement(VirtualizedListContext.Provider, {\n    value: context\n  }, children);\n}\n\n/**\n * Sets the `cellKey`. Intended to be used by `VirtualizedList` for each cell.\n */\nexport function VirtualizedListCellContextProvider(_ref3) {\n  var cellKey = _ref3.cellKey,\n    children = _ref3.children;\n  // Avoid setting a newly created context object if the values are identical.\n  var currContext = useContext(VirtualizedListContext);\n  var context = useMemo(() => currContext == null ? null : _objectSpread(_objectSpread({}, currContext), {}, {\n    cellKey\n  }), [currContext, cellKey]);\n  return /*#__PURE__*/React.createElement(VirtualizedListContext.Provider, {\n    value: context\n  }, children);\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\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 * @format\n */\n\nimport View from '../../../exports/View';\nimport StyleSheet from '../../../exports/StyleSheet';\nimport { VirtualizedListCellContextProvider } from './VirtualizedListContext.js';\nimport invariant from 'fbjs/lib/invariant';\nimport * as React from 'react';\nexport default class CellRenderer extends React.Component {\n  constructor() {\n    super(...arguments);\n    this.state = {\n      separatorProps: {\n        highlighted: false,\n        leadingItem: this.props.item\n      }\n    };\n    this._separators = {\n      highlight: () => {\n        var _this$props = this.props,\n          cellKey = _this$props.cellKey,\n          prevCellKey = _this$props.prevCellKey;\n        this.props.onUpdateSeparators([cellKey, prevCellKey], {\n          highlighted: true\n        });\n      },\n      unhighlight: () => {\n        var _this$props2 = this.props,\n          cellKey = _this$props2.cellKey,\n          prevCellKey = _this$props2.prevCellKey;\n        this.props.onUpdateSeparators([cellKey, prevCellKey], {\n          highlighted: false\n        });\n      },\n      updateProps: (select, newProps) => {\n        var _this$props3 = this.props,\n          cellKey = _this$props3.cellKey,\n          prevCellKey = _this$props3.prevCellKey;\n        this.props.onUpdateSeparators([select === 'leading' ? prevCellKey : cellKey], newProps);\n      }\n    };\n    this._onLayout = nativeEvent => {\n      this.props.onCellLayout && this.props.onCellLayout(nativeEvent, this.props.cellKey, this.props.index);\n    };\n  }\n  static getDerivedStateFromProps(props, prevState) {\n    return {\n      separatorProps: _objectSpread(_objectSpread({}, prevState.separatorProps), {}, {\n        leadingItem: props.item\n      })\n    };\n  }\n\n  // TODO: consider factoring separator stuff out of VirtualizedList into FlatList since it's not\n  // reused by SectionList and we can keep VirtualizedList simpler.\n  // $FlowFixMe[missing-local-annot]\n\n  updateSeparatorProps(newProps) {\n    this.setState(state => ({\n      separatorProps: _objectSpread(_objectSpread({}, state.separatorProps), newProps)\n    }));\n  }\n  componentWillUnmount() {\n    this.props.onUnmount(this.props.cellKey);\n  }\n  _renderElement(renderItem, ListItemComponent, item, index) {\n    if (renderItem && ListItemComponent) {\n      console.warn('VirtualizedList: Both ListItemComponent and renderItem props are present. ListItemComponent will take' + ' precedence over renderItem.');\n    }\n    if (ListItemComponent) {\n      /* $FlowFixMe[not-a-component] (>=0.108.0 site=react_native_fb) This\n       * comment suppresses an error found when Flow v0.108 was deployed. To\n       * see the error, delete this comment and run Flow. */\n      /* $FlowFixMe[incompatible-type-arg] (>=0.108.0 site=react_native_fb)\n       * This comment suppresses an error found when Flow v0.108 was deployed.\n       * To see the error, delete this comment and run Flow. */\n      return /*#__PURE__*/React.createElement(ListItemComponent, {\n        item,\n        index,\n        separators: this._separators\n      });\n    }\n    if (renderItem) {\n      return renderItem({\n        item,\n        index,\n        separators: this._separators\n      });\n    }\n    invariant(false, 'VirtualizedList: Either ListItemComponent or renderItem props are required but none were found.');\n  }\n  render() {\n    var _this$props4 = this.props,\n      CellRendererComponent = _this$props4.CellRendererComponent,\n      ItemSeparatorComponent = _this$props4.ItemSeparatorComponent,\n      ListItemComponent = _this$props4.ListItemComponent,\n      cellKey = _this$props4.cellKey,\n      horizontal = _this$props4.horizontal,\n      item = _this$props4.item,\n      index = _this$props4.index,\n      inversionStyle = _this$props4.inversionStyle,\n      onCellFocusCapture = _this$props4.onCellFocusCapture,\n      onCellLayout = _this$props4.onCellLayout,\n      renderItem = _this$props4.renderItem;\n    var element = this._renderElement(renderItem, ListItemComponent, item, index);\n\n    // NOTE: that when this is a sticky header, `onLayout` will get automatically extracted and\n    // called explicitly by `ScrollViewStickyHeader`.\n    var itemSeparator = /*#__PURE__*/React.isValidElement(ItemSeparatorComponent) ?\n    // $FlowFixMe[incompatible-type]\n    ItemSeparatorComponent :\n    // $FlowFixMe[incompatible-type]\n    ItemSeparatorComponent && /*#__PURE__*/React.createElement(ItemSeparatorComponent, this.state.separatorProps);\n    var cellStyle = inversionStyle ? horizontal ? [styles.rowReverse, inversionStyle] : [styles.columnReverse, inversionStyle] : horizontal ? [styles.row, inversionStyle] : inversionStyle;\n    var result = !CellRendererComponent ? /*#__PURE__*/React.createElement(View, _extends({\n      style: cellStyle,\n      onFocusCapture: onCellFocusCapture\n    }, onCellLayout && {\n      onLayout: this._onLayout\n    }), element, itemSeparator) : /*#__PURE__*/React.createElement(CellRendererComponent, _extends({\n      cellKey: cellKey,\n      index: index,\n      item: item,\n      style: cellStyle,\n      onFocusCapture: onCellFocusCapture\n    }, onCellLayout && {\n      onLayout: this._onLayout\n    }), element, itemSeparator);\n    return /*#__PURE__*/React.createElement(VirtualizedListCellContextProvider, {\n      cellKey: this.props.cellKey\n    }, result);\n  }\n}\nvar styles = StyleSheet.create({\n  row: {\n    flexDirection: 'row'\n  },\n  rowReverse: {\n    flexDirection: 'row-reverse'\n  },\n  columnReverse: {\n    flexDirection: 'column-reverse'\n  }\n});","import _createForOfIteratorHelperLoose from \"@babel/runtime/helpers/createForOfIteratorHelperLoose\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\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 * @format\n */\n\nimport RefreshControl from '../../../exports/RefreshControl';\nimport ScrollView from '../../../exports/ScrollView';\nimport View from '../../../exports/View';\nimport StyleSheet from '../../../exports/StyleSheet';\nimport Batchinator from '../Batchinator';\nimport clamp from '../Utilities/clamp';\nimport infoLog from '../infoLog';\nimport { CellRenderMask } from './CellRenderMask';\nimport ChildListCollection from './ChildListCollection';\nimport FillRateHelper from '../FillRateHelper';\nimport StateSafePureComponent from './StateSafePureComponent';\nimport ViewabilityHelper from '../ViewabilityHelper';\nimport CellRenderer from './VirtualizedListCellRenderer';\nimport { VirtualizedListCellContextProvider, VirtualizedListContext, VirtualizedListContextProvider } from './VirtualizedListContext.js';\nimport { computeWindowedRenderLimits, keyExtractor as defaultKeyExtractor } from '../VirtualizeUtils';\nimport invariant from 'fbjs/lib/invariant';\nimport nullthrows from 'nullthrows';\nimport * as React from 'react';\nvar __DEV__ = process.env.NODE_ENV !== 'production';\nvar ON_EDGE_REACHED_EPSILON = 0.001;\nvar _usedIndexForKey = false;\nvar _keylessItemComponentName = '';\n/**\n * Default Props Helper Functions\n * Use the following helper functions for default values\n */\n\n// horizontalOrDefault(this.props.horizontal)\nfunction horizontalOrDefault(horizontal) {\n  return horizontal !== null && horizontal !== void 0 ? horizontal : false;\n}\n\n// initialNumToRenderOrDefault(this.props.initialNumToRender)\nfunction initialNumToRenderOrDefault(initialNumToRender) {\n  return initialNumToRender !== null && initialNumToRender !== void 0 ? initialNumToRender : 10;\n}\n\n// maxToRenderPerBatchOrDefault(this.props.maxToRenderPerBatch)\nfunction maxToRenderPerBatchOrDefault(maxToRenderPerBatch) {\n  return maxToRenderPerBatch !== null && maxToRenderPerBatch !== void 0 ? maxToRenderPerBatch : 10;\n}\n\n// onStartReachedThresholdOrDefault(this.props.onStartReachedThreshold)\nfunction onStartReachedThresholdOrDefault(onStartReachedThreshold) {\n  return onStartReachedThreshold !== null && onStartReachedThreshold !== void 0 ? onStartReachedThreshold : 2;\n}\n\n// onEndReachedThresholdOrDefault(this.props.onEndReachedThreshold)\nfunction onEndReachedThresholdOrDefault(onEndReachedThreshold) {\n  return onEndReachedThreshold !== null && onEndReachedThreshold !== void 0 ? onEndReachedThreshold : 2;\n}\n\n// getScrollingThreshold(visibleLength, onEndReachedThreshold)\nfunction getScrollingThreshold(threshold, visibleLength) {\n  return threshold * visibleLength / 2;\n}\n\n// scrollEventThrottleOrDefault(this.props.scrollEventThrottle)\nfunction scrollEventThrottleOrDefault(scrollEventThrottle) {\n  return scrollEventThrottle !== null && scrollEventThrottle !== void 0 ? scrollEventThrottle : 50;\n}\n\n// windowSizeOrDefault(this.props.windowSize)\nfunction windowSizeOrDefault(windowSize) {\n  return windowSize !== null && windowSize !== void 0 ? windowSize : 21;\n}\nfunction findLastWhere(arr, predicate) {\n  for (var i = arr.length - 1; i >= 0; i--) {\n    if (predicate(arr[i])) {\n      return arr[i];\n    }\n  }\n  return null;\n}\n\n/**\n * Base implementation for the more convenient [`<FlatList>`](https://reactnative.dev/docs/flatlist)\n * and [`<SectionList>`](https://reactnative.dev/docs/sectionlist) components, which are also better\n * documented. In general, this should only really be used if you need more flexibility than\n * `FlatList` provides, e.g. for use with immutable data instead of plain arrays.\n *\n * Virtualization massively improves memory consumption and performance of large lists by\n * maintaining a finite render window of active items and replacing all items outside of the render\n * window with appropriately sized blank space. The window adapts to scrolling behavior, and items\n * are rendered incrementally with low-pri (after any running interactions) if they are far from the\n * visible area, or with hi-pri otherwise to minimize the potential of seeing blank space.\n *\n * Some caveats:\n *\n * - Internal state is not preserved when content scrolls out of the render window. Make sure all\n *   your data is captured in the item data or external stores like Flux, Redux, or Relay.\n * - This is a `PureComponent` which means that it will not re-render if `props` remain shallow-\n *   equal. Make sure that everything your `renderItem` function depends on is passed as a prop\n *   (e.g. `extraData`) that is not `===` after updates, otherwise your UI may not update on\n *   changes. This includes the `data` prop and parent component state.\n * - In order to constrain memory and enable smooth scrolling, content is rendered asynchronously\n *   offscreen. This means it's possible to scroll faster than the fill rate ands momentarily see\n *   blank content. This is a tradeoff that can be adjusted to suit the needs of each application,\n *   and we are working on improving it behind the scenes.\n * - By default, the list looks for a `key` or `id` prop on each item and uses that for the React key.\n *   Alternatively, you can provide a custom `keyExtractor` prop.\n * - As an effort to remove defaultProps, use helper functions when referencing certain props\n *\n */\nclass VirtualizedList extends StateSafePureComponent {\n  // scrollToEnd may be janky without getItemLayout prop\n  scrollToEnd(params) {\n    var animated = params ? params.animated : true;\n    var veryLast = this.props.getItemCount(this.props.data) - 1;\n    if (veryLast < 0) {\n      return;\n    }\n    var frame = this.__getFrameMetricsApprox(veryLast, this.props);\n    var offset = Math.max(0, frame.offset + frame.length + this._footerLength - this._scrollMetrics.visibleLength);\n    if (this._scrollRef == null) {\n      return;\n    }\n    if (this._scrollRef.scrollTo == null) {\n      console.warn('No scrollTo method provided. This may be because you have two nested ' + 'VirtualizedLists with the same orientation, or because you are ' + 'using a custom component that does not implement scrollTo.');\n      return;\n    }\n    this._scrollRef.scrollTo(horizontalOrDefault(this.props.horizontal) ? {\n      x: offset,\n      animated\n    } : {\n      y: offset,\n      animated\n    });\n  }\n\n  // scrollToIndex may be janky without getItemLayout prop\n  scrollToIndex(params) {\n    var _this$props = this.props,\n      data = _this$props.data,\n      horizontal = _this$props.horizontal,\n      getItemCount = _this$props.getItemCount,\n      getItemLayout = _this$props.getItemLayout,\n      onScrollToIndexFailed = _this$props.onScrollToIndexFailed;\n    var animated = params.animated,\n      index = params.index,\n      viewOffset = params.viewOffset,\n      viewPosition = params.viewPosition;\n    invariant(index >= 0, \"scrollToIndex out of range: requested index \" + index + \" but minimum is 0\");\n    invariant(getItemCount(data) >= 1, \"scrollToIndex out of range: item length \" + getItemCount(data) + \" but minimum is 1\");\n    invariant(index < getItemCount(data), \"scrollToIndex out of range: requested index \" + index + \" is out of 0 to \" + (getItemCount(data) - 1));\n    if (!getItemLayout && index > this._highestMeasuredFrameIndex) {\n      invariant(!!onScrollToIndexFailed, 'scrollToIndex should be used in conjunction with getItemLayout or onScrollToIndexFailed, ' + 'otherwise there is no way to know the location of offscreen indices or handle failures.');\n      onScrollToIndexFailed({\n        averageItemLength: this._averageCellLength,\n        highestMeasuredFrameIndex: this._highestMeasuredFrameIndex,\n        index\n      });\n      return;\n    }\n    var frame = this.__getFrameMetricsApprox(Math.floor(index), this.props);\n    var offset = Math.max(0, this._getOffsetApprox(index, this.props) - (viewPosition || 0) * (this._scrollMetrics.visibleLength - frame.length)) - (viewOffset || 0);\n    if (this._scrollRef == null) {\n      return;\n    }\n    if (this._scrollRef.scrollTo == null) {\n      console.warn('No scrollTo method provided. This may be because you have two nested ' + 'VirtualizedLists with the same orientation, or because you are ' + 'using a custom component that does not implement scrollTo.');\n      return;\n    }\n    this._scrollRef.scrollTo(horizontal ? {\n      x: offset,\n      animated\n    } : {\n      y: offset,\n      animated\n    });\n  }\n\n  // scrollToItem may be janky without getItemLayout prop. Required linear scan through items -\n  // use scrollToIndex instead if possible.\n  scrollToItem(params) {\n    var item = params.item;\n    var _this$props2 = this.props,\n      data = _this$props2.data,\n      getItem = _this$props2.getItem,\n      getItemCount = _this$props2.getItemCount;\n    var itemCount = getItemCount(data);\n    for (var _index = 0; _index < itemCount; _index++) {\n      if (getItem(data, _index) === item) {\n        this.scrollToIndex(_objectSpread(_objectSpread({}, params), {}, {\n          index: _index\n        }));\n        break;\n      }\n    }\n  }\n\n  /**\n   * Scroll to a specific content pixel offset in the list.\n   *\n   * Param `offset` expects the offset to scroll to.\n   * In case of `horizontal` is true, the offset is the x-value,\n   * in any other case the offset is the y-value.\n   *\n   * Param `animated` (`true` by default) defines whether the list\n   * should do an animation while scrolling.\n   */\n  scrollToOffset(params) {\n    var animated = params.animated,\n      offset = params.offset;\n    if (this._scrollRef == null) {\n      return;\n    }\n    if (this._scrollRef.scrollTo == null) {\n      console.warn('No scrollTo method provided. This may be because you have two nested ' + 'VirtualizedLists with the same orientation, or because you are ' + 'using a custom component that does not implement scrollTo.');\n      return;\n    }\n    this._scrollRef.scrollTo(horizontalOrDefault(this.props.horizontal) ? {\n      x: offset,\n      animated\n    } : {\n      y: offset,\n      animated\n    });\n  }\n  recordInteraction() {\n    this._nestedChildLists.forEach(childList => {\n      childList.recordInteraction();\n    });\n    this._viewabilityTuples.forEach(t => {\n      t.viewabilityHelper.recordInteraction();\n    });\n    this._updateViewableItems(this.props, this.state.cellsAroundViewport);\n  }\n  flashScrollIndicators() {\n    if (this._scrollRef == null) {\n      return;\n    }\n    this._scrollRef.flashScrollIndicators();\n  }\n\n  /**\n   * Provides a handle to the underlying scroll responder.\n   * Note that `this._scrollRef` might not be a `ScrollView`, so we\n   * need to check that it responds to `getScrollResponder` before calling it.\n   */\n  getScrollResponder() {\n    if (this._scrollRef && this._scrollRef.getScrollResponder) {\n      return this._scrollRef.getScrollResponder();\n    }\n  }\n  getScrollableNode() {\n    if (this._scrollRef && this._scrollRef.getScrollableNode) {\n      return this._scrollRef.getScrollableNode();\n    } else {\n      return this._scrollRef;\n    }\n  }\n  getScrollRef() {\n    if (this._scrollRef && this._scrollRef.getScrollRef) {\n      return this._scrollRef.getScrollRef();\n    } else {\n      return this._scrollRef;\n    }\n  }\n  _getCellKey() {\n    var _this$context;\n    return ((_this$context = this.context) == null ? void 0 : _this$context.cellKey) || 'rootList';\n  }\n\n  // $FlowFixMe[missing-local-annot]\n\n  hasMore() {\n    return this._hasMore;\n  }\n\n  // $FlowFixMe[missing-local-annot]\n\n  // REACT-NATIVE-WEB patch to preserve during future RN merges: Support inverted wheel scroller.\n\n  constructor(_props) {\n    var _this$props$updateCel;\n    super(_props);\n    this._getScrollMetrics = () => {\n      return this._scrollMetrics;\n    };\n    this._getOutermostParentListRef = () => {\n      if (this._isNestedWithSameOrientation()) {\n        return this.context.getOutermostParentListRef();\n      } else {\n        return this;\n      }\n    };\n    this._registerAsNestedChild = childList => {\n      this._nestedChildLists.add(childList.ref, childList.cellKey);\n      if (this._hasInteracted) {\n        childList.ref.recordInteraction();\n      }\n    };\n    this._unregisterAsNestedChild = childList => {\n      this._nestedChildLists.remove(childList.ref);\n    };\n    this._onUpdateSeparators = (keys, newProps) => {\n      keys.forEach(key => {\n        var ref = key != null && this._cellRefs[key];\n        ref && ref.updateSeparatorProps(newProps);\n      });\n    };\n    this._getSpacerKey = isVertical => isVertical ? 'height' : 'width';\n    this._averageCellLength = 0;\n    this._cellRefs = {};\n    this._frames = {};\n    this._footerLength = 0;\n    this._hasTriggeredInitialScrollToIndex = false;\n    this._hasInteracted = false;\n    this._hasMore = false;\n    this._hasWarned = {};\n    this._headerLength = 0;\n    this._hiPriInProgress = false;\n    this._highestMeasuredFrameIndex = 0;\n    this._indicesToKeys = new Map();\n    this._lastFocusedCellKey = null;\n    this._nestedChildLists = new ChildListCollection();\n    this._offsetFromParentVirtualizedList = 0;\n    this._prevParentOffset = 0;\n    this._scrollMetrics = {\n      contentLength: 0,\n      dOffset: 0,\n      dt: 10,\n      offset: 0,\n      timestamp: 0,\n      velocity: 0,\n      visibleLength: 0,\n      zoomScale: 1\n    };\n    this._scrollRef = null;\n    this._sentStartForContentLength = 0;\n    this._sentEndForContentLength = 0;\n    this._totalCellLength = 0;\n    this._totalCellsMeasured = 0;\n    this._viewabilityTuples = [];\n    this._captureScrollRef = ref => {\n      this._scrollRef = ref;\n    };\n    this._defaultRenderScrollComponent = props => {\n      var onRefresh = props.onRefresh;\n      if (this._isNestedWithSameOrientation()) {\n        // $FlowFixMe[prop-missing] - Typing ReactNativeComponent revealed errors\n        return /*#__PURE__*/React.createElement(View, props);\n      } else if (onRefresh) {\n        var _props$refreshing;\n        invariant(typeof props.refreshing === 'boolean', '`refreshing` prop must be set as a boolean in order to use `onRefresh`, but got `' + JSON.stringify((_props$refreshing = props.refreshing) !== null && _props$refreshing !== void 0 ? _props$refreshing : 'undefined') + '`');\n        return (\n          /*#__PURE__*/\n          // $FlowFixMe[prop-missing] Invalid prop usage\n          // $FlowFixMe[incompatible-use]\n          React.createElement(ScrollView, _extends({}, props, {\n            refreshControl: props.refreshControl == null ? /*#__PURE__*/React.createElement(RefreshControl\n            // $FlowFixMe[incompatible-type]\n            , {\n              refreshing: props.refreshing,\n              onRefresh: onRefresh,\n              progressViewOffset: props.progressViewOffset\n            }) : props.refreshControl\n          }))\n        );\n      } else {\n        // $FlowFixMe[prop-missing] Invalid prop usage\n        // $FlowFixMe[incompatible-use]\n        return /*#__PURE__*/React.createElement(ScrollView, props);\n      }\n    };\n    this._onCellLayout = (e, cellKey, index) => {\n      var layout = e.nativeEvent.layout;\n      var next = {\n        offset: this._selectOffset(layout),\n        length: this._selectLength(layout),\n        index,\n        inLayout: true\n      };\n      var curr = this._frames[cellKey];\n      if (!curr || next.offset !== curr.offset || next.length !== curr.length || index !== curr.index) {\n        this._totalCellLength += next.length - (curr ? curr.length : 0);\n        this._totalCellsMeasured += curr ? 0 : 1;\n        this._averageCellLength = this._totalCellLength / this._totalCellsMeasured;\n        this._frames[cellKey] = next;\n        this._highestMeasuredFrameIndex = Math.max(this._highestMeasuredFrameIndex, index);\n        this._scheduleCellsToRenderUpdate();\n      } else {\n        this._frames[cellKey].inLayout = true;\n      }\n      this._triggerRemeasureForChildListsInCell(cellKey);\n      this._computeBlankness();\n      this._updateViewableItems(this.props, this.state.cellsAroundViewport);\n    };\n    this._onCellUnmount = cellKey => {\n      delete this._cellRefs[cellKey];\n      var curr = this._frames[cellKey];\n      if (curr) {\n        this._frames[cellKey] = _objectSpread(_objectSpread({}, curr), {}, {\n          inLayout: false\n        });\n      }\n    };\n    this._onLayout = e => {\n      if (this._isNestedWithSameOrientation()) {\n        // Need to adjust our scroll metrics to be relative to our containing\n        // VirtualizedList before we can make claims about list item viewability\n        this.measureLayoutRelativeToContainingList();\n      } else {\n        this._scrollMetrics.visibleLength = this._selectLength(e.nativeEvent.layout);\n      }\n      this.props.onLayout && this.props.onLayout(e);\n      this._scheduleCellsToRenderUpdate();\n      this._maybeCallOnEdgeReached();\n    };\n    this._onLayoutEmpty = e => {\n      this.props.onLayout && this.props.onLayout(e);\n    };\n    this._onLayoutFooter = e => {\n      this._triggerRemeasureForChildListsInCell(this._getFooterCellKey());\n      this._footerLength = this._selectLength(e.nativeEvent.layout);\n    };\n    this._onLayoutHeader = e => {\n      this._headerLength = this._selectLength(e.nativeEvent.layout);\n    };\n    this._onContentSizeChange = (width, height) => {\n      if (width > 0 && height > 0 && this.props.initialScrollIndex != null && this.props.initialScrollIndex > 0 && !this._hasTriggeredInitialScrollToIndex) {\n        if (this.props.contentOffset == null) {\n          if (this.props.initialScrollIndex < this.props.getItemCount(this.props.data)) {\n            this.scrollToIndex({\n              animated: false,\n              index: nullthrows(this.props.initialScrollIndex)\n            });\n          } else {\n            this.scrollToEnd({\n              animated: false\n            });\n          }\n        }\n        this._hasTriggeredInitialScrollToIndex = true;\n      }\n      if (this.props.onContentSizeChange) {\n        this.props.onContentSizeChange(width, height);\n      }\n      this._scrollMetrics.contentLength = this._selectLength({\n        height,\n        width\n      });\n      this._scheduleCellsToRenderUpdate();\n      this._maybeCallOnEdgeReached();\n    };\n    this._convertParentScrollMetrics = metrics => {\n      // Offset of the top of the nested list relative to the top of its parent's viewport\n      var offset = metrics.offset - this._offsetFromParentVirtualizedList;\n      // Child's visible length is the same as its parent's\n      var visibleLength = metrics.visibleLength;\n      var dOffset = offset - this._scrollMetrics.offset;\n      var contentLength = this._scrollMetrics.contentLength;\n      return {\n        visibleLength,\n        contentLength,\n        offset,\n        dOffset\n      };\n    };\n    this._onScroll = e => {\n      this._nestedChildLists.forEach(childList => {\n        childList._onScroll(e);\n      });\n      if (this.props.onScroll) {\n        this.props.onScroll(e);\n      }\n      var timestamp = e.timeStamp;\n      var visibleLength = this._selectLength(e.nativeEvent.layoutMeasurement);\n      var contentLength = this._selectLength(e.nativeEvent.contentSize);\n      var offset = this._selectOffset(e.nativeEvent.contentOffset);\n      var dOffset = offset - this._scrollMetrics.offset;\n      if (this._isNestedWithSameOrientation()) {\n        if (this._scrollMetrics.contentLength === 0) {\n          // Ignore scroll events until onLayout has been called and we\n          // know our offset from our offset from our parent\n          return;\n        }\n        var _this$_convertParentS = this._convertParentScrollMetrics({\n          visibleLength,\n          offset\n        });\n        visibleLength = _this$_convertParentS.visibleLength;\n        contentLength = _this$_convertParentS.contentLength;\n        offset = _this$_convertParentS.offset;\n        dOffset = _this$_convertParentS.dOffset;\n      }\n      var dt = this._scrollMetrics.timestamp ? Math.max(1, timestamp - this._scrollMetrics.timestamp) : 1;\n      var velocity = dOffset / dt;\n      if (dt > 500 && this._scrollMetrics.dt > 500 && contentLength > 5 * visibleLength && !this._hasWarned.perf) {\n        infoLog('VirtualizedList: You have a large list that is slow to update - make sure your ' + 'renderItem function renders components that follow React performance best practices ' + 'like PureComponent, shouldComponentUpdate, etc.', {\n          dt,\n          prevDt: this._scrollMetrics.dt,\n          contentLength\n        });\n        this._hasWarned.perf = true;\n      }\n\n      // For invalid negative values (w/ RTL), set this to 1.\n      var zoomScale = e.nativeEvent.zoomScale < 0 ? 1 : e.nativeEvent.zoomScale;\n      this._scrollMetrics = {\n        contentLength,\n        dt,\n        dOffset,\n        offset,\n        timestamp,\n        velocity,\n        visibleLength,\n        zoomScale\n      };\n      this._updateViewableItems(this.props, this.state.cellsAroundViewport);\n      if (!this.props) {\n        return;\n      }\n      this._maybeCallOnEdgeReached();\n      if (velocity !== 0) {\n        this._fillRateHelper.activate();\n      }\n      this._computeBlankness();\n      this._scheduleCellsToRenderUpdate();\n    };\n    this._onScrollBeginDrag = e => {\n      this._nestedChildLists.forEach(childList => {\n        childList._onScrollBeginDrag(e);\n      });\n      this._viewabilityTuples.forEach(tuple => {\n        tuple.viewabilityHelper.recordInteraction();\n      });\n      this._hasInteracted = true;\n      this.props.onScrollBeginDrag && this.props.onScrollBeginDrag(e);\n    };\n    this._onScrollEndDrag = e => {\n      this._nestedChildLists.forEach(childList => {\n        childList._onScrollEndDrag(e);\n      });\n      var velocity = e.nativeEvent.velocity;\n      if (velocity) {\n        this._scrollMetrics.velocity = this._selectOffset(velocity);\n      }\n      this._computeBlankness();\n      this.props.onScrollEndDrag && this.props.onScrollEndDrag(e);\n    };\n    this._onMomentumScrollBegin = e => {\n      this._nestedChildLists.forEach(childList => {\n        childList._onMomentumScrollBegin(e);\n      });\n      this.props.onMomentumScrollBegin && this.props.onMomentumScrollBegin(e);\n    };\n    this._onMomentumScrollEnd = e => {\n      this._nestedChildLists.forEach(childList => {\n        childList._onMomentumScrollEnd(e);\n      });\n      this._scrollMetrics.velocity = 0;\n      this._computeBlankness();\n      this.props.onMomentumScrollEnd && this.props.onMomentumScrollEnd(e);\n    };\n    this._updateCellsToRender = () => {\n      this._updateViewableItems(this.props, this.state.cellsAroundViewport);\n      this.setState((state, props) => {\n        var cellsAroundViewport = this._adjustCellsAroundViewport(props, state.cellsAroundViewport);\n        var renderMask = VirtualizedList._createRenderMask(props, cellsAroundViewport, this._getNonViewportRenderRegions(props));\n        if (cellsAroundViewport.first === state.cellsAroundViewport.first && cellsAroundViewport.last === state.cellsAroundViewport.last && renderMask.equals(state.renderMask)) {\n          return null;\n        }\n        return {\n          cellsAroundViewport,\n          renderMask\n        };\n      });\n    };\n    this._createViewToken = (index, isViewable, props\n    // $FlowFixMe[missing-local-annot]\n    ) => {\n      var data = props.data,\n        getItem = props.getItem;\n      var item = getItem(data, index);\n      return {\n        index,\n        item,\n        key: this._keyExtractor(item, index, props),\n        isViewable\n      };\n    };\n    this._getOffsetApprox = (index, props) => {\n      if (Number.isInteger(index)) {\n        return this.__getFrameMetricsApprox(index, props).offset;\n      } else {\n        var frameMetrics = this.__getFrameMetricsApprox(Math.floor(index), props);\n        var remainder = index - Math.floor(index);\n        return frameMetrics.offset + remainder * frameMetrics.length;\n      }\n    };\n    this.__getFrameMetricsApprox = (index, props) => {\n      var frame = this._getFrameMetrics(index, props);\n      if (frame && frame.index === index) {\n        // check for invalid frames due to row re-ordering\n        return frame;\n      } else {\n        var data = props.data,\n          getItemCount = props.getItemCount,\n          getItemLayout = props.getItemLayout;\n        invariant(index >= 0 && index < getItemCount(data), 'Tried to get frame for out of range index ' + index);\n        invariant(!getItemLayout, 'Should not have to estimate frames when a measurement metrics function is provided');\n        return {\n          length: this._averageCellLength,\n          offset: this._averageCellLength * index\n        };\n      }\n    };\n    this._getFrameMetrics = (index, props) => {\n      var data = props.data,\n        getItem = props.getItem,\n        getItemCount = props.getItemCount,\n        getItemLayout = props.getItemLayout;\n      invariant(index >= 0 && index < getItemCount(data), 'Tried to get frame for out of range index ' + index);\n      var item = getItem(data, index);\n      var frame = this._frames[this._keyExtractor(item, index, props)];\n      if (!frame || frame.index !== index) {\n        if (getItemLayout) {\n          /* $FlowFixMe[prop-missing] (>=0.63.0 site=react_native_fb) This comment\n           * suppresses an error found when Flow v0.63 was deployed. To see the error\n           * delete this comment and run Flow. */\n          return getItemLayout(data, index);\n        }\n      }\n      return frame;\n    };\n    this._getNonViewportRenderRegions = props => {\n      // Keep a viewport's worth of content around the last focused cell to allow\n      // random navigation around it without any blanking. E.g. tabbing from one\n      // focused item out of viewport to another.\n      if (!(this._lastFocusedCellKey && this._cellRefs[this._lastFocusedCellKey])) {\n        return [];\n      }\n      var lastFocusedCellRenderer = this._cellRefs[this._lastFocusedCellKey];\n      var focusedCellIndex = lastFocusedCellRenderer.props.index;\n      var itemCount = props.getItemCount(props.data);\n\n      // The last cell we rendered may be at a new index. Bail if we don't know\n      // where it is.\n      if (focusedCellIndex >= itemCount || this._keyExtractor(props.getItem(props.data, focusedCellIndex), focusedCellIndex, props) !== this._lastFocusedCellKey) {\n        return [];\n      }\n      var first = focusedCellIndex;\n      var heightOfCellsBeforeFocused = 0;\n      for (var i = first - 1; i >= 0 && heightOfCellsBeforeFocused < this._scrollMetrics.visibleLength; i--) {\n        first--;\n        heightOfCellsBeforeFocused += this.__getFrameMetricsApprox(i, props).length;\n      }\n      var last = focusedCellIndex;\n      var heightOfCellsAfterFocused = 0;\n      for (var _i = last + 1; _i < itemCount && heightOfCellsAfterFocused < this._scrollMetrics.visibleLength; _i++) {\n        last++;\n        heightOfCellsAfterFocused += this.__getFrameMetricsApprox(_i, props).length;\n      }\n      return [{\n        first,\n        last\n      }];\n    };\n    this._checkProps(_props);\n    this._fillRateHelper = new FillRateHelper(this._getFrameMetrics);\n    this._updateCellsToRenderBatcher = new Batchinator(this._updateCellsToRender, (_this$props$updateCel = this.props.updateCellsBatchingPeriod) !== null && _this$props$updateCel !== void 0 ? _this$props$updateCel : 50);\n    if (this.props.viewabilityConfigCallbackPairs) {\n      this._viewabilityTuples = this.props.viewabilityConfigCallbackPairs.map(pair => ({\n        viewabilityHelper: new ViewabilityHelper(pair.viewabilityConfig),\n        onViewableItemsChanged: pair.onViewableItemsChanged\n      }));\n    } else {\n      var _this$props3 = this.props,\n        onViewableItemsChanged = _this$props3.onViewableItemsChanged,\n        viewabilityConfig = _this$props3.viewabilityConfig;\n      if (onViewableItemsChanged) {\n        this._viewabilityTuples.push({\n          viewabilityHelper: new ViewabilityHelper(viewabilityConfig),\n          onViewableItemsChanged: onViewableItemsChanged\n        });\n      }\n    }\n    var initialRenderRegion = VirtualizedList._initialRenderRegion(_props);\n    this.state = {\n      cellsAroundViewport: initialRenderRegion,\n      renderMask: VirtualizedList._createRenderMask(_props, initialRenderRegion)\n    };\n\n    // REACT-NATIVE-WEB patch to preserve during future RN merges: Support inverted wheel scroller.\n    // For issue https://github.com/necolas/react-native-web/issues/995\n    this.invertedWheelEventHandler = ev => {\n      var scrollOffset = this.props.horizontal ? ev.target.scrollLeft : ev.target.scrollTop;\n      var scrollLength = this.props.horizontal ? ev.target.scrollWidth : ev.target.scrollHeight;\n      var clientLength = this.props.horizontal ? ev.target.clientWidth : ev.target.clientHeight;\n      var isEventTargetScrollable = scrollLength > clientLength;\n      var delta = this.props.horizontal ? ev.deltaX || ev.wheelDeltaX : ev.deltaY || ev.wheelDeltaY;\n      var leftoverDelta = delta;\n      if (isEventTargetScrollable) {\n        leftoverDelta = delta < 0 ? Math.min(delta + scrollOffset, 0) : Math.max(delta - (scrollLength - clientLength - scrollOffset), 0);\n      }\n      var targetDelta = delta - leftoverDelta;\n      if (this.props.inverted && this._scrollRef && this._scrollRef.getScrollableNode) {\n        var node = this._scrollRef.getScrollableNode();\n        if (this.props.horizontal) {\n          ev.target.scrollLeft += targetDelta;\n          var nextScrollLeft = node.scrollLeft - leftoverDelta;\n          node.scrollLeft = !this.props.getItemLayout ? Math.min(nextScrollLeft, this._totalCellLength) : nextScrollLeft;\n        } else {\n          ev.target.scrollTop += targetDelta;\n          var nextScrollTop = node.scrollTop - leftoverDelta;\n          node.scrollTop = !this.props.getItemLayout ? Math.min(nextScrollTop, this._totalCellLength) : nextScrollTop;\n        }\n        ev.preventDefault();\n      }\n    };\n  }\n  _checkProps(props) {\n    var onScroll = props.onScroll,\n      windowSize = props.windowSize,\n      getItemCount = props.getItemCount,\n      data = props.data,\n      initialScrollIndex = props.initialScrollIndex;\n    invariant(\n    // $FlowFixMe[prop-missing]\n    !onScroll || !onScroll.__isNative, 'Components based on VirtualizedList must be wrapped with Animated.createAnimatedComponent ' + 'to support native onScroll events with useNativeDriver');\n    invariant(windowSizeOrDefault(windowSize) > 0, 'VirtualizedList: The windowSize prop must be present and set to a value greater than 0.');\n    invariant(getItemCount, 'VirtualizedList: The \"getItemCount\" prop must be provided');\n    var itemCount = getItemCount(data);\n    if (initialScrollIndex != null && !this._hasTriggeredInitialScrollToIndex && (initialScrollIndex < 0 || itemCount > 0 && initialScrollIndex >= itemCount) && !this._hasWarned.initialScrollIndex) {\n      console.warn(\"initialScrollIndex \\\"\" + initialScrollIndex + \"\\\" is not valid (list has \" + itemCount + \" items)\");\n      this._hasWarned.initialScrollIndex = true;\n    }\n    if (__DEV__ && !this._hasWarned.flexWrap) {\n      // $FlowFixMe[underconstrained-implicit-instantiation]\n      var flatStyles = StyleSheet.flatten(this.props.contentContainerStyle);\n      if (flatStyles != null && flatStyles.flexWrap === 'wrap') {\n        console.warn('`flexWrap: `wrap`` is not supported with the `VirtualizedList` components.' + 'Consider using `numColumns` with `FlatList` instead.');\n        this._hasWarned.flexWrap = true;\n      }\n    }\n  }\n  static _createRenderMask(props, cellsAroundViewport, additionalRegions) {\n    var itemCount = props.getItemCount(props.data);\n    invariant(cellsAroundViewport.first >= 0 && cellsAroundViewport.last >= cellsAroundViewport.first - 1 && cellsAroundViewport.last < itemCount, \"Invalid cells around viewport \\\"[\" + cellsAroundViewport.first + \", \" + cellsAroundViewport.last + \"]\\\" was passed to VirtualizedList._createRenderMask\");\n    var renderMask = new CellRenderMask(itemCount);\n    if (itemCount > 0) {\n      var allRegions = [cellsAroundViewport, ...(additionalRegions !== null && additionalRegions !== void 0 ? additionalRegions : [])];\n      for (var _i2 = 0, _allRegions = allRegions; _i2 < _allRegions.length; _i2++) {\n        var region = _allRegions[_i2];\n        renderMask.addCells(region);\n      }\n\n      // The initially rendered cells are retained as part of the\n      // \"scroll-to-top\" optimization\n      if (props.initialScrollIndex == null || props.initialScrollIndex <= 0) {\n        var initialRegion = VirtualizedList._initialRenderRegion(props);\n        renderMask.addCells(initialRegion);\n      }\n\n      // The layout coordinates of sticker headers may be off-screen while the\n      // actual header is on-screen. Keep the most recent before the viewport\n      // rendered, even if its layout coordinates are not in viewport.\n      var stickyIndicesSet = new Set(props.stickyHeaderIndices);\n      VirtualizedList._ensureClosestStickyHeader(props, stickyIndicesSet, renderMask, cellsAroundViewport.first);\n    }\n    return renderMask;\n  }\n  static _initialRenderRegion(props) {\n    var _props$initialScrollI;\n    var itemCount = props.getItemCount(props.data);\n    var firstCellIndex = Math.max(0, Math.min(itemCount - 1, Math.floor((_props$initialScrollI = props.initialScrollIndex) !== null && _props$initialScrollI !== void 0 ? _props$initialScrollI : 0)));\n    var lastCellIndex = Math.min(itemCount, firstCellIndex + initialNumToRenderOrDefault(props.initialNumToRender)) - 1;\n    return {\n      first: firstCellIndex,\n      last: lastCellIndex\n    };\n  }\n  static _ensureClosestStickyHeader(props, stickyIndicesSet, renderMask, cellIdx) {\n    var stickyOffset = props.ListHeaderComponent ? 1 : 0;\n    for (var itemIdx = cellIdx - 1; itemIdx >= 0; itemIdx--) {\n      if (stickyIndicesSet.has(itemIdx + stickyOffset)) {\n        renderMask.addCells({\n          first: itemIdx,\n          last: itemIdx\n        });\n        break;\n      }\n    }\n  }\n  _adjustCellsAroundViewport(props, cellsAroundViewport) {\n    var data = props.data,\n      getItemCount = props.getItemCount;\n    var onEndReachedThreshold = onEndReachedThresholdOrDefault(props.onEndReachedThreshold);\n    var _this$_scrollMetrics = this._scrollMetrics,\n      contentLength = _this$_scrollMetrics.contentLength,\n      offset = _this$_scrollMetrics.offset,\n      visibleLength = _this$_scrollMetrics.visibleLength;\n    var distanceFromEnd = contentLength - visibleLength - offset;\n\n    // Wait until the scroll view metrics have been set up. And until then,\n    // we will trust the initialNumToRender suggestion\n    if (visibleLength <= 0 || contentLength <= 0) {\n      return cellsAroundViewport.last >= getItemCount(data) ? VirtualizedList._constrainToItemCount(cellsAroundViewport, props) : cellsAroundViewport;\n    }\n    var newCellsAroundViewport;\n    if (props.disableVirtualization) {\n      var renderAhead = distanceFromEnd < onEndReachedThreshold * visibleLength ? maxToRenderPerBatchOrDefault(props.maxToRenderPerBatch) : 0;\n      newCellsAroundViewport = {\n        first: 0,\n        last: Math.min(cellsAroundViewport.last + renderAhead, getItemCount(data) - 1)\n      };\n    } else {\n      // If we have a non-zero initialScrollIndex and run this before we've scrolled,\n      // we'll wipe out the initialNumToRender rendered elements starting at initialScrollIndex.\n      // So let's wait until we've scrolled the view to the right place. And until then,\n      // we will trust the initialScrollIndex suggestion.\n\n      // Thus, we want to recalculate the windowed render limits if any of the following hold:\n      // - initialScrollIndex is undefined or is 0\n      // - initialScrollIndex > 0 AND scrolling is complete\n      // - initialScrollIndex > 0 AND the end of the list is visible (this handles the case\n      //   where the list is shorter than the visible area)\n      if (props.initialScrollIndex && !this._scrollMetrics.offset && Math.abs(distanceFromEnd) >= Number.EPSILON) {\n        return cellsAroundViewport.last >= getItemCount(data) ? VirtualizedList._constrainToItemCount(cellsAroundViewport, props) : cellsAroundViewport;\n      }\n      newCellsAroundViewport = computeWindowedRenderLimits(props, maxToRenderPerBatchOrDefault(props.maxToRenderPerBatch), windowSizeOrDefault(props.windowSize), cellsAroundViewport, this.__getFrameMetricsApprox, this._scrollMetrics);\n      invariant(newCellsAroundViewport.last < getItemCount(data), 'computeWindowedRenderLimits() should return range in-bounds');\n    }\n    if (this._nestedChildLists.size() > 0) {\n      // If some cell in the new state has a child list in it, we should only render\n      // up through that item, so that we give that list a chance to render.\n      // Otherwise there's churn from multiple child lists mounting and un-mounting\n      // their items.\n\n      // Will this prevent rendering if the nested list doesn't realize the end?\n      var childIdx = this._findFirstChildWithMore(newCellsAroundViewport.first, newCellsAroundViewport.last);\n      newCellsAroundViewport.last = childIdx !== null && childIdx !== void 0 ? childIdx : newCellsAroundViewport.last;\n    }\n    return newCellsAroundViewport;\n  }\n  _findFirstChildWithMore(first, last) {\n    for (var ii = first; ii <= last; ii++) {\n      var cellKeyForIndex = this._indicesToKeys.get(ii);\n      if (cellKeyForIndex != null && this._nestedChildLists.anyInCell(cellKeyForIndex, childList => childList.hasMore())) {\n        return ii;\n      }\n    }\n    return null;\n  }\n  componentDidMount() {\n    if (this._isNestedWithSameOrientation()) {\n      this.context.registerAsNestedChild({\n        ref: this,\n        cellKey: this.context.cellKey\n      });\n    }\n\n    // REACT-NATIVE-WEB patch to preserve during future RN merges: Support inverted wheel scroller.\n    this.setupWebWheelHandler();\n  }\n  componentWillUnmount() {\n    if (this._isNestedWithSameOrientation()) {\n      this.context.unregisterAsNestedChild({\n        ref: this\n      });\n    }\n    this._updateCellsToRenderBatcher.dispose({\n      abort: true\n    });\n    this._viewabilityTuples.forEach(tuple => {\n      tuple.viewabilityHelper.dispose();\n    });\n    this._fillRateHelper.deactivateAndFlush();\n\n    // REACT-NATIVE-WEB patch to preserve during future RN merges: Support inverted wheel scroller.\n    this.teardownWebWheelHandler();\n  }\n\n  // REACT-NATIVE-WEB patch to preserve during future RN merges: Support inverted wheel scroller.\n  setupWebWheelHandler() {\n    if (this._scrollRef && this._scrollRef.getScrollableNode) {\n      this._scrollRef.getScrollableNode().addEventListener('wheel', this.invertedWheelEventHandler);\n    } else {\n      setTimeout(() => this.setupWebWheelHandler(), 50);\n      return;\n    }\n  }\n\n  // REACT-NATIVE-WEB patch to preserve during future RN merges: Support inverted wheel scroller.\n  teardownWebWheelHandler() {\n    if (this._scrollRef && this._scrollRef.getScrollableNode) {\n      this._scrollRef.getScrollableNode().removeEventListener('wheel', this.invertedWheelEventHandler);\n    }\n  }\n  static getDerivedStateFromProps(newProps, prevState) {\n    // first and last could be stale (e.g. if a new, shorter items props is passed in), so we make\n    // sure we're rendering a reasonable range here.\n    var itemCount = newProps.getItemCount(newProps.data);\n    if (itemCount === prevState.renderMask.numCells()) {\n      return prevState;\n    }\n    var constrainedCells = VirtualizedList._constrainToItemCount(prevState.cellsAroundViewport, newProps);\n    return {\n      cellsAroundViewport: constrainedCells,\n      renderMask: VirtualizedList._createRenderMask(newProps, constrainedCells)\n    };\n  }\n  _pushCells(cells, stickyHeaderIndices, stickyIndicesFromProps, first, last, inversionStyle) {\n    var _this = this;\n    var _this$props4 = this.props,\n      CellRendererComponent = _this$props4.CellRendererComponent,\n      ItemSeparatorComponent = _this$props4.ItemSeparatorComponent,\n      ListHeaderComponent = _this$props4.ListHeaderComponent,\n      ListItemComponent = _this$props4.ListItemComponent,\n      data = _this$props4.data,\n      debug = _this$props4.debug,\n      getItem = _this$props4.getItem,\n      getItemCount = _this$props4.getItemCount,\n      getItemLayout = _this$props4.getItemLayout,\n      horizontal = _this$props4.horizontal,\n      renderItem = _this$props4.renderItem;\n    var stickyOffset = ListHeaderComponent ? 1 : 0;\n    var end = getItemCount(data) - 1;\n    var prevCellKey;\n    last = Math.min(end, last);\n    var _loop = function _loop() {\n      var item = getItem(data, ii);\n      var key = _this._keyExtractor(item, ii, _this.props);\n      _this._indicesToKeys.set(ii, key);\n      if (stickyIndicesFromProps.has(ii + stickyOffset)) {\n        stickyHeaderIndices.push(cells.length);\n      }\n      var shouldListenForLayout = getItemLayout == null || debug || _this._fillRateHelper.enabled();\n      cells.push(/*#__PURE__*/React.createElement(CellRenderer, _extends({\n        CellRendererComponent: CellRendererComponent,\n        ItemSeparatorComponent: ii < end ? ItemSeparatorComponent : undefined,\n        ListItemComponent: ListItemComponent,\n        cellKey: key,\n        horizontal: horizontal,\n        index: ii,\n        inversionStyle: inversionStyle,\n        item: item,\n        key: key,\n        prevCellKey: prevCellKey,\n        onUpdateSeparators: _this._onUpdateSeparators,\n        onCellFocusCapture: e => _this._onCellFocusCapture(key),\n        onUnmount: _this._onCellUnmount,\n        ref: _ref => {\n          _this._cellRefs[key] = _ref;\n        },\n        renderItem: renderItem\n      }, shouldListenForLayout && {\n        onCellLayout: _this._onCellLayout\n      })));\n      prevCellKey = key;\n    };\n    for (var ii = first; ii <= last; ii++) {\n      _loop();\n    }\n  }\n  static _constrainToItemCount(cells, props) {\n    var itemCount = props.getItemCount(props.data);\n    var last = Math.min(itemCount - 1, cells.last);\n    var maxToRenderPerBatch = maxToRenderPerBatchOrDefault(props.maxToRenderPerBatch);\n    return {\n      first: clamp(0, itemCount - 1 - maxToRenderPerBatch, cells.first),\n      last\n    };\n  }\n  _isNestedWithSameOrientation() {\n    var nestedContext = this.context;\n    return !!(nestedContext && !!nestedContext.horizontal === horizontalOrDefault(this.props.horizontal));\n  }\n  _keyExtractor(item, index, props\n  // $FlowFixMe[missing-local-annot]\n  ) {\n    if (props.keyExtractor != null) {\n      return props.keyExtractor(item, index);\n    }\n    var key = defaultKeyExtractor(item, index);\n    if (key === String(index)) {\n      _usedIndexForKey = true;\n      if (item.type && item.type.displayName) {\n        _keylessItemComponentName = item.type.displayName;\n      }\n    }\n    return key;\n  }\n  render() {\n    this._checkProps(this.props);\n    var _this$props5 = this.props,\n      ListEmptyComponent = _this$props5.ListEmptyComponent,\n      ListFooterComponent = _this$props5.ListFooterComponent,\n      ListHeaderComponent = _this$props5.ListHeaderComponent;\n    var _this$props6 = this.props,\n      data = _this$props6.data,\n      horizontal = _this$props6.horizontal;\n    var inversionStyle = this.props.inverted ? horizontalOrDefault(this.props.horizontal) ? styles.horizontallyInverted : styles.verticallyInverted : null;\n    var cells = [];\n    var stickyIndicesFromProps = new Set(this.props.stickyHeaderIndices);\n    var stickyHeaderIndices = [];\n\n    // 1. Add cell for ListHeaderComponent\n    if (ListHeaderComponent) {\n      if (stickyIndicesFromProps.has(0)) {\n        stickyHeaderIndices.push(0);\n      }\n      var _element = /*#__PURE__*/React.isValidElement(ListHeaderComponent) ? ListHeaderComponent :\n      /*#__PURE__*/\n      // $FlowFixMe[not-a-component]\n      // $FlowFixMe[incompatible-type-arg]\n      React.createElement(ListHeaderComponent, null);\n      cells.push(/*#__PURE__*/React.createElement(VirtualizedListCellContextProvider, {\n        cellKey: this._getCellKey() + '-header',\n        key: \"$header\"\n      }, /*#__PURE__*/React.createElement(View, {\n        onLayout: this._onLayoutHeader,\n        style: [inversionStyle, this.props.ListHeaderComponentStyle]\n      },\n      // $FlowFixMe[incompatible-type] - Typing ReactNativeComponent revealed errors\n      _element)));\n    }\n\n    // 2a. Add a cell for ListEmptyComponent if applicable\n    var itemCount = this.props.getItemCount(data);\n    if (itemCount === 0 && ListEmptyComponent) {\n      var _element2 = /*#__PURE__*/React.isValidElement(ListEmptyComponent) ? ListEmptyComponent :\n      /*#__PURE__*/\n      // $FlowFixMe[not-a-component]\n      // $FlowFixMe[incompatible-type-arg]\n      React.createElement(ListEmptyComponent, null);\n      cells.push(/*#__PURE__*/React.createElement(VirtualizedListCellContextProvider, {\n        cellKey: this._getCellKey() + '-empty',\n        key: \"$empty\"\n      }, /*#__PURE__*/React.cloneElement(_element2, {\n        onLayout: event => {\n          this._onLayoutEmpty(event);\n          if (_element2.props.onLayout) {\n            _element2.props.onLayout(event);\n          }\n        },\n        style: [inversionStyle, _element2.props.style]\n      })));\n    }\n\n    // 2b. Add cells and spacers for each item\n    if (itemCount > 0) {\n      _usedIndexForKey = false;\n      _keylessItemComponentName = '';\n      var spacerKey = this._getSpacerKey(!horizontal);\n      var renderRegions = this.state.renderMask.enumerateRegions();\n      var lastSpacer = findLastWhere(renderRegions, r => r.isSpacer);\n      for (var _iterator = _createForOfIteratorHelperLoose(renderRegions), _step; !(_step = _iterator()).done;) {\n        var section = _step.value;\n        if (section.isSpacer) {\n          // Legacy behavior is to avoid spacers when virtualization is\n          // disabled (including head spacers on initial render).\n          if (this.props.disableVirtualization) {\n            continue;\n          }\n\n          // Without getItemLayout, we limit our tail spacer to the _highestMeasuredFrameIndex to\n          // prevent the user for hyperscrolling into un-measured area because otherwise content will\n          // likely jump around as it renders in above the viewport.\n          var isLastSpacer = section === lastSpacer;\n          var constrainToMeasured = isLastSpacer && !this.props.getItemLayout;\n          var last = constrainToMeasured ? clamp(section.first - 1, section.last, this._highestMeasuredFrameIndex) : section.last;\n          var firstMetrics = this.__getFrameMetricsApprox(section.first, this.props);\n          var lastMetrics = this.__getFrameMetricsApprox(last, this.props);\n          var spacerSize = lastMetrics.offset + lastMetrics.length - firstMetrics.offset;\n          cells.push(/*#__PURE__*/React.createElement(View, {\n            key: \"$spacer-\" + section.first,\n            style: {\n              [spacerKey]: spacerSize\n            }\n          }));\n        } else {\n          this._pushCells(cells, stickyHeaderIndices, stickyIndicesFromProps, section.first, section.last, inversionStyle);\n        }\n      }\n      if (!this._hasWarned.keys && _usedIndexForKey) {\n        console.warn('VirtualizedList: missing keys for items, make sure to specify a key or id property on each ' + 'item or provide a custom keyExtractor.', _keylessItemComponentName);\n        this._hasWarned.keys = true;\n      }\n    }\n\n    // 3. Add cell for ListFooterComponent\n    if (ListFooterComponent) {\n      var _element3 = /*#__PURE__*/React.isValidElement(ListFooterComponent) ? ListFooterComponent :\n      /*#__PURE__*/\n      // $FlowFixMe[not-a-component]\n      // $FlowFixMe[incompatible-type-arg]\n      React.createElement(ListFooterComponent, null);\n      cells.push(/*#__PURE__*/React.createElement(VirtualizedListCellContextProvider, {\n        cellKey: this._getFooterCellKey(),\n        key: \"$footer\"\n      }, /*#__PURE__*/React.createElement(View, {\n        onLayout: this._onLayoutFooter,\n        style: [inversionStyle, this.props.ListFooterComponentStyle]\n      },\n      // $FlowFixMe[incompatible-type] - Typing ReactNativeComponent revealed errors\n      _element3)));\n    }\n\n    // 4. Render the ScrollView\n    var scrollProps = _objectSpread(_objectSpread({}, this.props), {}, {\n      onContentSizeChange: this._onContentSizeChange,\n      onLayout: this._onLayout,\n      onScroll: this._onScroll,\n      onScrollBeginDrag: this._onScrollBeginDrag,\n      onScrollEndDrag: this._onScrollEndDrag,\n      onMomentumScrollBegin: this._onMomentumScrollBegin,\n      onMomentumScrollEnd: this._onMomentumScrollEnd,\n      scrollEventThrottle: scrollEventThrottleOrDefault(this.props.scrollEventThrottle),\n      // TODO: Android support\n      invertStickyHeaders: this.props.invertStickyHeaders !== undefined ? this.props.invertStickyHeaders : this.props.inverted,\n      stickyHeaderIndices,\n      style: inversionStyle ? [inversionStyle, this.props.style] : this.props.style\n    });\n    this._hasMore = this.state.cellsAroundViewport.last < itemCount - 1;\n    var innerRet = /*#__PURE__*/React.createElement(VirtualizedListContextProvider, {\n      value: {\n        cellKey: null,\n        getScrollMetrics: this._getScrollMetrics,\n        horizontal: horizontalOrDefault(this.props.horizontal),\n        getOutermostParentListRef: this._getOutermostParentListRef,\n        registerAsNestedChild: this._registerAsNestedChild,\n        unregisterAsNestedChild: this._unregisterAsNestedChild\n      }\n    }, /*#__PURE__*/React.cloneElement((this.props.renderScrollComponent || this._defaultRenderScrollComponent)(scrollProps), {\n      ref: this._captureScrollRef\n    }, cells));\n    var ret = innerRet;\n    /* https://github.com/necolas/react-native-web/issues/2239: Re-enable when ScrollView.Context.Consumer is available.\n    if (__DEV__) {\n      ret = (\n        <ScrollView.Context.Consumer>\n          {scrollContext => {\n            if (\n              scrollContext != null &&\n              !scrollContext.horizontal ===\n                !horizontalOrDefault(this.props.horizontal) &&\n              !this._hasWarned.nesting &&\n              this.context == null &&\n              this.props.scrollEnabled !== false\n            ) {\n              // TODO (T46547044): use React.warn once 16.9 is sync'd: https://github.com/facebook/react/pull/15170\n              console.error(\n                'VirtualizedLists should never be nested inside plain ScrollViews with the same ' +\n                  'orientation because it can break windowing and other functionality - use another ' +\n                  'VirtualizedList-backed container instead.',\n              );\n              this._hasWarned.nesting = true;\n            }\n            return innerRet;\n          }}\n        </ScrollView.Context.Consumer>\n      );\n    }*/\n    if (this.props.debug) {\n      return /*#__PURE__*/React.createElement(View, {\n        style: styles.debug\n      }, ret, this._renderDebugOverlay());\n    } else {\n      return ret;\n    }\n  }\n  componentDidUpdate(prevProps) {\n    var _this$props7 = this.props,\n      data = _this$props7.data,\n      extraData = _this$props7.extraData;\n    if (data !== prevProps.data || extraData !== prevProps.extraData) {\n      // clear the viewableIndices cache to also trigger\n      // the onViewableItemsChanged callback with the new data\n      this._viewabilityTuples.forEach(tuple => {\n        tuple.viewabilityHelper.resetViewableIndices();\n      });\n    }\n    // The `this._hiPriInProgress` is guaranteeing a hiPri cell update will only happen\n    // once per fiber update. The `_scheduleCellsToRenderUpdate` will set it to true\n    // if a hiPri update needs to perform. If `componentDidUpdate` is triggered with\n    // `this._hiPriInProgress=true`, means it's triggered by the hiPri update. The\n    // `_scheduleCellsToRenderUpdate` will check this condition and not perform\n    // another hiPri update.\n    var hiPriInProgress = this._hiPriInProgress;\n    this._scheduleCellsToRenderUpdate();\n    // Make sure setting `this._hiPriInProgress` back to false after `componentDidUpdate`\n    // is triggered with `this._hiPriInProgress = true`\n    if (hiPriInProgress) {\n      this._hiPriInProgress = false;\n    }\n  }\n\n  // Used for preventing scrollToIndex from being called multiple times for initialScrollIndex\n\n  // flag to prevent infinite hiPri cell limit update\n\n  // $FlowFixMe[missing-local-annot]\n\n  /* $FlowFixMe[missing-local-annot] The type annotation(s) required by Flow's\n   * LTI update could not be added via codemod */\n\n  _computeBlankness() {\n    this._fillRateHelper.computeBlankness(this.props, this.state.cellsAroundViewport, this._scrollMetrics);\n  }\n\n  /* $FlowFixMe[missing-local-annot] The type annotation(s) required by Flow's\n   * LTI update could not be added via codemod */\n\n  _onCellFocusCapture(cellKey) {\n    this._lastFocusedCellKey = cellKey;\n    this._updateCellsToRender();\n  }\n  _triggerRemeasureForChildListsInCell(cellKey) {\n    this._nestedChildLists.forEachInCell(cellKey, childList => {\n      childList.measureLayoutRelativeToContainingList();\n    });\n  }\n  measureLayoutRelativeToContainingList() {\n    // TODO (T35574538): findNodeHandle sometimes crashes with \"Unable to find\n    // node on an unmounted component\" during scrolling\n    try {\n      if (!this._scrollRef) {\n        return;\n      }\n      // We are assuming that getOutermostParentListRef().getScrollRef()\n      // is a non-null reference to a ScrollView\n      this._scrollRef.measureLayout(this.context.getOutermostParentListRef().getScrollRef(), (x, y, width, height) => {\n        this._offsetFromParentVirtualizedList = this._selectOffset({\n          x,\n          y\n        });\n        this._scrollMetrics.contentLength = this._selectLength({\n          width,\n          height\n        });\n        var scrollMetrics = this._convertParentScrollMetrics(this.context.getScrollMetrics());\n        var metricsChanged = this._scrollMetrics.visibleLength !== scrollMetrics.visibleLength || this._scrollMetrics.offset !== scrollMetrics.offset;\n        if (metricsChanged) {\n          this._scrollMetrics.visibleLength = scrollMetrics.visibleLength;\n          this._scrollMetrics.offset = scrollMetrics.offset;\n\n          // If metrics of the scrollView changed, then we triggered remeasure for child list\n          // to ensure VirtualizedList has the right information.\n          this._nestedChildLists.forEach(childList => {\n            childList.measureLayoutRelativeToContainingList();\n          });\n        }\n      }, error => {\n        console.warn(\"VirtualizedList: Encountered an error while measuring a list's\" + ' offset from its containing VirtualizedList.');\n      });\n    } catch (error) {\n      console.warn('measureLayoutRelativeToContainingList threw an error', error.stack);\n    }\n  }\n  _getFooterCellKey() {\n    return this._getCellKey() + '-footer';\n  }\n  // $FlowFixMe[missing-local-annot]\n  _renderDebugOverlay() {\n    var normalize = this._scrollMetrics.visibleLength / (this._scrollMetrics.contentLength || 1);\n    var framesInLayout = [];\n    var itemCount = this.props.getItemCount(this.props.data);\n    for (var ii = 0; ii < itemCount; ii++) {\n      var frame = this.__getFrameMetricsApprox(ii, this.props);\n      /* $FlowFixMe[prop-missing] (>=0.68.0 site=react_native_fb) This comment\n       * suppresses an error found when Flow v0.68 was deployed. To see the\n       * error delete this comment and run Flow. */\n      if (frame.inLayout) {\n        framesInLayout.push(frame);\n      }\n    }\n    var windowTop = this.__getFrameMetricsApprox(this.state.cellsAroundViewport.first, this.props).offset;\n    var frameLast = this.__getFrameMetricsApprox(this.state.cellsAroundViewport.last, this.props);\n    var windowLen = frameLast.offset + frameLast.length - windowTop;\n    var visTop = this._scrollMetrics.offset;\n    var visLen = this._scrollMetrics.visibleLength;\n    return /*#__PURE__*/React.createElement(View, {\n      style: [styles.debugOverlayBase, styles.debugOverlay]\n    }, framesInLayout.map((f, ii) => /*#__PURE__*/React.createElement(View, {\n      key: 'f' + ii,\n      style: [styles.debugOverlayBase, styles.debugOverlayFrame, {\n        top: f.offset * normalize,\n        height: f.length * normalize\n      }]\n    })), /*#__PURE__*/React.createElement(View, {\n      style: [styles.debugOverlayBase, styles.debugOverlayFrameLast, {\n        top: windowTop * normalize,\n        height: windowLen * normalize\n      }]\n    }), /*#__PURE__*/React.createElement(View, {\n      style: [styles.debugOverlayBase, styles.debugOverlayFrameVis, {\n        top: visTop * normalize,\n        height: visLen * normalize\n      }]\n    }));\n  }\n  _selectLength(metrics) {\n    return !horizontalOrDefault(this.props.horizontal) ? metrics.height : metrics.width;\n  }\n  _selectOffset(metrics) {\n    return !horizontalOrDefault(this.props.horizontal) ? metrics.y : metrics.x;\n  }\n  _maybeCallOnEdgeReached() {\n    var _this$props8 = this.props,\n      data = _this$props8.data,\n      getItemCount = _this$props8.getItemCount,\n      onStartReached = _this$props8.onStartReached,\n      onStartReachedThreshold = _this$props8.onStartReachedThreshold,\n      onEndReached = _this$props8.onEndReached,\n      onEndReachedThreshold = _this$props8.onEndReachedThreshold,\n      initialScrollIndex = _this$props8.initialScrollIndex;\n    var _this$_scrollMetrics2 = this._scrollMetrics,\n      contentLength = _this$_scrollMetrics2.contentLength,\n      visibleLength = _this$_scrollMetrics2.visibleLength,\n      offset = _this$_scrollMetrics2.offset;\n    var distanceFromStart = offset;\n    var distanceFromEnd = contentLength - visibleLength - offset;\n\n    // Especially when oERT is zero it's necessary to 'floor' very small distance values to be 0\n    // since debouncing causes us to not fire this event for every single \"pixel\" we scroll and can thus\n    // be at the edge of the list with a distance approximating 0 but not quite there.\n    if (distanceFromStart < ON_EDGE_REACHED_EPSILON) {\n      distanceFromStart = 0;\n    }\n    if (distanceFromEnd < ON_EDGE_REACHED_EPSILON) {\n      distanceFromEnd = 0;\n    }\n\n    // TODO: T121172172 Look into why we're \"defaulting\" to a threshold of 2px\n    // when oERT is not present (different from 2 viewports used elsewhere)\n    var DEFAULT_THRESHOLD_PX = 2;\n    var startThreshold = onStartReachedThreshold != null ? onStartReachedThreshold * visibleLength : DEFAULT_THRESHOLD_PX;\n    var endThreshold = onEndReachedThreshold != null ? onEndReachedThreshold * visibleLength : DEFAULT_THRESHOLD_PX;\n    var isWithinStartThreshold = distanceFromStart <= startThreshold;\n    var isWithinEndThreshold = distanceFromEnd <= endThreshold;\n\n    // First check if the user just scrolled within the end threshold\n    // and call onEndReached only once for a given content length,\n    // and only if onStartReached is not being executed\n    if (onEndReached && this.state.cellsAroundViewport.last === getItemCount(data) - 1 && isWithinEndThreshold && this._scrollMetrics.contentLength !== this._sentEndForContentLength) {\n      this._sentEndForContentLength = this._scrollMetrics.contentLength;\n      onEndReached({\n        distanceFromEnd\n      });\n    }\n\n    // Next check if the user just scrolled within the start threshold\n    // and call onStartReached only once for a given content length,\n    // and only if onEndReached is not being executed\n    else if (onStartReached != null && this.state.cellsAroundViewport.first === 0 && isWithinStartThreshold && this._scrollMetrics.contentLength !== this._sentStartForContentLength) {\n      // On initial mount when using initialScrollIndex the offset will be 0 initially\n      // and will trigger an unexpected onStartReached. To avoid this we can use\n      // timestamp to differentiate between the initial scroll metrics and when we actually\n      // received the first scroll event.\n      if (!initialScrollIndex || this._scrollMetrics.timestamp !== 0) {\n        this._sentStartForContentLength = this._scrollMetrics.contentLength;\n        onStartReached({\n          distanceFromStart\n        });\n      }\n    }\n\n    // If the user scrolls away from the start or end and back again,\n    // cause onStartReached or onEndReached to be triggered again\n    else {\n      this._sentStartForContentLength = isWithinStartThreshold ? this._sentStartForContentLength : 0;\n      this._sentEndForContentLength = isWithinEndThreshold ? this._sentEndForContentLength : 0;\n    }\n  }\n\n  /* Translates metrics from a scroll event in a parent VirtualizedList into\n   * coordinates relative to the child list.\n   */\n\n  _scheduleCellsToRenderUpdate() {\n    var _this$state$cellsArou = this.state.cellsAroundViewport,\n      first = _this$state$cellsArou.first,\n      last = _this$state$cellsArou.last;\n    var _this$_scrollMetrics3 = this._scrollMetrics,\n      offset = _this$_scrollMetrics3.offset,\n      visibleLength = _this$_scrollMetrics3.visibleLength,\n      velocity = _this$_scrollMetrics3.velocity;\n    var itemCount = this.props.getItemCount(this.props.data);\n    var hiPri = false;\n    var onStartReachedThreshold = onStartReachedThresholdOrDefault(this.props.onStartReachedThreshold);\n    var onEndReachedThreshold = onEndReachedThresholdOrDefault(this.props.onEndReachedThreshold);\n    // Mark as high priority if we're close to the start of the first item\n    // But only if there are items before the first rendered item\n    if (first > 0) {\n      var distTop = offset - this.__getFrameMetricsApprox(first, this.props).offset;\n      hiPri = distTop < 0 || velocity < -2 && distTop < getScrollingThreshold(onStartReachedThreshold, visibleLength);\n    }\n    // Mark as high priority if we're close to the end of the last item\n    // But only if there are items after the last rendered item\n    if (!hiPri && last >= 0 && last < itemCount - 1) {\n      var distBottom = this.__getFrameMetricsApprox(last, this.props).offset - (offset + visibleLength);\n      hiPri = distBottom < 0 || velocity > 2 && distBottom < getScrollingThreshold(onEndReachedThreshold, visibleLength);\n    }\n    // Only trigger high-priority updates if we've actually rendered cells,\n    // and with that size estimate, accurately compute how many cells we should render.\n    // Otherwise, it would just render as many cells as it can (of zero dimension),\n    // each time through attempting to render more (limited by maxToRenderPerBatch),\n    // starving the renderer from actually laying out the objects and computing _averageCellLength.\n    // If this is triggered in an `componentDidUpdate` followed by a hiPri cellToRenderUpdate\n    // We shouldn't do another hipri cellToRenderUpdate\n    if (hiPri && (this._averageCellLength || this.props.getItemLayout) && !this._hiPriInProgress) {\n      this._hiPriInProgress = true;\n      // Don't worry about interactions when scrolling quickly; focus on filling content as fast\n      // as possible.\n      this._updateCellsToRenderBatcher.dispose({\n        abort: true\n      });\n      this._updateCellsToRender();\n      return;\n    } else {\n      this._updateCellsToRenderBatcher.schedule();\n    }\n  }\n\n  /**\n   * Gets an approximate offset to an item at a given index. Supports\n   * fractional indices.\n   */\n\n  _updateViewableItems(props, cellsAroundViewport) {\n    this._viewabilityTuples.forEach(tuple => {\n      tuple.viewabilityHelper.onUpdate(props, this._scrollMetrics.offset, this._scrollMetrics.visibleLength, this._getFrameMetrics, this._createViewToken, tuple.onViewableItemsChanged, cellsAroundViewport);\n    });\n  }\n}\nVirtualizedList.contextType = VirtualizedListContext;\nvar styles = StyleSheet.create({\n  verticallyInverted: {\n    transform: 'scaleY(-1)'\n  },\n  horizontallyInverted: {\n    transform: 'scaleX(-1)'\n  },\n  debug: {\n    flex: 1\n  },\n  debugOverlayBase: {\n    position: 'absolute',\n    top: 0,\n    right: 0\n  },\n  debugOverlay: {\n    bottom: 0,\n    width: 20,\n    borderColor: 'blue',\n    borderWidth: 1\n  },\n  debugOverlayFrame: {\n    left: 0,\n    backgroundColor: 'orange'\n  },\n  debugOverlayFrameLast: {\n    left: 0,\n    borderColor: 'green',\n    borderWidth: 2\n  },\n  debugOverlayFrameVis: {\n    left: 0,\n    borderColor: 'red',\n    borderWidth: 2\n  }\n});\nexport default VirtualizedList;","/**\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 * @format\n * \n */\n\n'use strict';\n\n/**\n * Intentional info-level logging for clear separation from ad-hoc console debug logging.\n */\nfunction infoLog() {\n  return console.log(...arguments);\n}\nexport default infoLog;","/**\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 * @format\n */\n\n/**\n * EventEmitter manages listeners and publishes events to them.\n *\n * EventEmitter accepts a single type parameter that defines the valid events\n * and associated listener argument(s).\n *\n * @example\n *\n *   const emitter = new EventEmitter<{\n *     success: [number, string],\n *     error: [Error],\n *   }>();\n *\n *   emitter.on('success', (statusCode, responseText) => {...});\n *   emitter.emit('success', 200, '...');\n *\n *   emitter.on('error', error => {...});\n *   emitter.emit('error', new Error('Resource not found'));\n *\n */\nexport default class EventEmitter {\n  constructor() {\n    this._registry = {};\n  }\n  /**\n   * Registers a listener that is called when the supplied event is emitted.\n   * Returns a subscription that has a `remove` method to undo registration.\n   */\n  addListener(eventType, listener, context) {\n    var registrations = allocate(this._registry, eventType);\n    var registration = {\n      context,\n      listener,\n      remove() {\n        registrations.delete(registration);\n      }\n    };\n    registrations.add(registration);\n    return registration;\n  }\n\n  /**\n   * Emits the supplied event. Additional arguments supplied to `emit` will be\n   * passed through to each of the registered listeners.\n   *\n   * If a listener modifies the listeners registered for the same event, those\n   * changes will not be reflected in the current invocation of `emit`.\n   */\n  emit(eventType) {\n    var registrations = this._registry[eventType];\n    if (registrations != null) {\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      for (var _i = 0, _arr = [...registrations]; _i < _arr.length; _i++) {\n        var registration = _arr[_i];\n        registration.listener.apply(registration.context, args);\n      }\n    }\n  }\n\n  /**\n   * Removes all registered listeners.\n   */\n  removeAllListeners(eventType) {\n    if (eventType == null) {\n      this._registry = {};\n    } else {\n      delete this._registry[eventType];\n    }\n  }\n\n  /**\n   * Returns the number of registered listeners for the supplied event.\n   */\n  listenerCount(eventType) {\n    var registrations = this._registry[eventType];\n    return registrations == null ? 0 : registrations.size;\n  }\n}\nfunction allocate(registry, eventType) {\n  var registrations = registry[eventType];\n  if (registrations == null) {\n    registrations = new Set();\n    registry[eventType] = registrations;\n  }\n  return registrations;\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 * @format\n * @noflow\n */\n\n/* eslint no-bitwise: 0 */\n\n'use strict';\n\nfunction normalizeColor(color) {\n  if (typeof color === 'number') {\n    if (color >>> 0 === color && color >= 0 && color <= 0xffffffff) {\n      return color;\n    }\n    return null;\n  }\n\n  if (typeof color !== 'string') {\n    return null;\n  }\n\n  const matchers = getMatchers();\n  let match;\n\n  // Ordered based on occurrences on Facebook codebase\n  if ((match = matchers.hex6.exec(color))) {\n    return parseInt(match[1] + 'ff', 16) >>> 0;\n  }\n\n  const colorFromKeyword = normalizeKeyword(color);\n  if (colorFromKeyword != null) {\n    return colorFromKeyword;\n  }\n\n  if ((match = matchers.rgb.exec(color))) {\n    return (\n      ((parse255(match[1]) << 24) | // r\n        (parse255(match[2]) << 16) | // g\n        (parse255(match[3]) << 8) | // b\n        0x000000ff) >>> // a\n      0\n    );\n  }\n\n  if ((match = matchers.rgba.exec(color))) {\n    // rgba(R G B / A) notation\n    if (match[6] !== undefined) {\n      return (\n        ((parse255(match[6]) << 24) | // r\n          (parse255(match[7]) << 16) | // g\n          (parse255(match[8]) << 8) | // b\n          parse1(match[9])) >>> // a\n        0\n      );\n    }\n\n    // rgba(R, G, B, A) notation\n    return (\n      ((parse255(match[2]) << 24) | // r\n        (parse255(match[3]) << 16) | // g\n        (parse255(match[4]) << 8) | // b\n        parse1(match[5])) >>> // a\n      0\n    );\n  }\n\n  if ((match = matchers.hex3.exec(color))) {\n    return (\n      parseInt(\n        match[1] +\n          match[1] + // r\n          match[2] +\n          match[2] + // g\n          match[3] +\n          match[3] + // b\n          'ff', // a\n        16,\n      ) >>> 0\n    );\n  }\n\n  // https://drafts.csswg.org/css-color-4/#hex-notation\n  if ((match = matchers.hex8.exec(color))) {\n    return parseInt(match[1], 16) >>> 0;\n  }\n\n  if ((match = matchers.hex4.exec(color))) {\n    return (\n      parseInt(\n        match[1] +\n          match[1] + // r\n          match[2] +\n          match[2] + // g\n          match[3] +\n          match[3] + // b\n          match[4] +\n          match[4], // a\n        16,\n      ) >>> 0\n    );\n  }\n\n  if ((match = matchers.hsl.exec(color))) {\n    return (\n      (hslToRgb(\n        parse360(match[1]), // h\n        parsePercentage(match[2]), // s\n        parsePercentage(match[3]), // l\n      ) |\n        0x000000ff) >>> // a\n      0\n    );\n  }\n\n  if ((match = matchers.hsla.exec(color))) {\n    // hsla(H S L / A) notation\n    if (match[6] !== undefined) {\n      return (\n        (hslToRgb(\n          parse360(match[6]), // h\n          parsePercentage(match[7]), // s\n          parsePercentage(match[8]), // l\n        ) |\n          parse1(match[9])) >>> // a\n        0\n      );\n    }\n\n    // hsla(H, S, L, A) notation\n    return (\n      (hslToRgb(\n        parse360(match[2]), // h\n        parsePercentage(match[3]), // s\n        parsePercentage(match[4]), // l\n      ) |\n        parse1(match[5])) >>> // a\n      0\n    );\n  }\n\n  if ((match = matchers.hwb.exec(color))) {\n    return (\n      (hwbToRgb(\n        parse360(match[1]), // h\n        parsePercentage(match[2]), // w\n        parsePercentage(match[3]), // b\n      ) |\n        0x000000ff) >>> // a\n      0\n    );\n  }\n\n  return null;\n}\n\nfunction hue2rgb(p, q, t) {\n  if (t < 0) {\n    t += 1;\n  }\n  if (t > 1) {\n    t -= 1;\n  }\n  if (t < 1 / 6) {\n    return p + (q - p) * 6 * t;\n  }\n  if (t < 1 / 2) {\n    return q;\n  }\n  if (t < 2 / 3) {\n    return p + (q - p) * (2 / 3 - t) * 6;\n  }\n  return p;\n}\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\n  return (\n    (Math.round(r * 255) << 24) |\n    (Math.round(g * 255) << 16) |\n    (Math.round(b * 255) << 8)\n  );\n}\n\nfunction hwbToRgb(h, w, b) {\n  if (w + b >= 1) {\n    const gray = Math.round((w * 255) / (w + b));\n\n    return (gray << 24) | (gray << 16) | (gray << 8);\n  }\n\n  const red = hue2rgb(0, 1, h + 1 / 3) * (1 - w - b) + w;\n  const green = hue2rgb(0, 1, h) * (1 - w - b) + w;\n  const blue = hue2rgb(0, 1, h - 1 / 3) * (1 - w - b) + w;\n\n  return (\n    (Math.round(red * 255) << 24) |\n    (Math.round(green * 255) << 16) |\n    (Math.round(blue * 255) << 8)\n  );\n}\n\nconst NUMBER = '[-+]?\\\\d*\\\\.?\\\\d+';\nconst PERCENTAGE = NUMBER + '%';\n\nfunction call(...args) {\n  return '\\\\(\\\\s*(' + args.join(')\\\\s*,?\\\\s*(') + ')\\\\s*\\\\)';\n}\n\nfunction callWithSlashSeparator(...args) {\n  return (\n    '\\\\(\\\\s*(' +\n    args.slice(0, args.length - 1).join(')\\\\s*,?\\\\s*(') +\n    ')\\\\s*/\\\\s*(' +\n    args[args.length - 1] +\n    ')\\\\s*\\\\)'\n  );\n}\n\nfunction commaSeparatedCall(...args) {\n  return '\\\\(\\\\s*(' + args.join(')\\\\s*,\\\\s*(') + ')\\\\s*\\\\)';\n}\n\nlet cachedMatchers;\n\nfunction getMatchers() {\n  if (cachedMatchers === undefined) {\n    cachedMatchers = {\n      rgb: new RegExp('rgb' + call(NUMBER, NUMBER, NUMBER)),\n      rgba: new RegExp(\n        'rgba(' +\n          commaSeparatedCall(NUMBER, NUMBER, NUMBER, NUMBER) +\n          '|' +\n          callWithSlashSeparator(NUMBER, NUMBER, NUMBER, NUMBER) +\n          ')',\n      ),\n      hsl: new RegExp('hsl' + call(NUMBER, PERCENTAGE, PERCENTAGE)),\n      hsla: new RegExp(\n        'hsla(' +\n          commaSeparatedCall(NUMBER, PERCENTAGE, PERCENTAGE, NUMBER) +\n          '|' +\n          callWithSlashSeparator(NUMBER, PERCENTAGE, PERCENTAGE, NUMBER) +\n          ')',\n      ),\n      hwb: new RegExp('hwb' + call(NUMBER, PERCENTAGE, PERCENTAGE)),\n      hex3: /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n      hex4: /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n      hex6: /^#([0-9a-fA-F]{6})$/,\n      hex8: /^#([0-9a-fA-F]{8})$/,\n    };\n  }\n  return cachedMatchers;\n}\n\nfunction parse255(str) {\n  const int = parseInt(str, 10);\n  if (int < 0) {\n    return 0;\n  }\n  if (int > 255) {\n    return 255;\n  }\n  return int;\n}\n\nfunction parse360(str) {\n  const int = parseFloat(str);\n  return (((int % 360) + 360) % 360) / 360;\n}\n\nfunction parse1(str) {\n  const num = parseFloat(str);\n  if (num < 0) {\n    return 0;\n  }\n  if (num > 1) {\n    return 255;\n  }\n  return Math.round(num * 255);\n}\n\nfunction parsePercentage(str) {\n  // parseFloat conveniently ignores the final %\n  const int = parseFloat(str);\n  if (int < 0) {\n    return 0;\n  }\n  if (int > 100) {\n    return 1;\n  }\n  return int / 100;\n}\n\nfunction normalizeKeyword(name) {\n  // prettier-ignore\n  switch (name) {\n    case 'transparent': return 0x00000000;\n    // http://www.w3.org/TR/css3-color/#svg-color\n    case 'aliceblue': return 0xf0f8ffff;\n    case 'antiquewhite': return 0xfaebd7ff;\n    case 'aqua': return 0x00ffffff;\n    case 'aquamarine': return 0x7fffd4ff;\n    case 'azure': return 0xf0ffffff;\n    case 'beige': return 0xf5f5dcff;\n    case 'bisque': return 0xffe4c4ff;\n    case 'black': return 0x000000ff;\n    case 'blanchedalmond': return 0xffebcdff;\n    case 'blue': return 0x0000ffff;\n    case 'blueviolet': return 0x8a2be2ff;\n    case 'brown': return 0xa52a2aff;\n    case 'burlywood': return 0xdeb887ff;\n    case 'burntsienna': return 0xea7e5dff;\n    case 'cadetblue': return 0x5f9ea0ff;\n    case 'chartreuse': return 0x7fff00ff;\n    case 'chocolate': return 0xd2691eff;\n    case 'coral': return 0xff7f50ff;\n    case 'cornflowerblue': return 0x6495edff;\n    case 'cornsilk': return 0xfff8dcff;\n    case 'crimson': return 0xdc143cff;\n    case 'cyan': return 0x00ffffff;\n    case 'darkblue': return 0x00008bff;\n    case 'darkcyan': return 0x008b8bff;\n    case 'darkgoldenrod': return 0xb8860bff;\n    case 'darkgray': return 0xa9a9a9ff;\n    case 'darkgreen': return 0x006400ff;\n    case 'darkgrey': return 0xa9a9a9ff;\n    case 'darkkhaki': return 0xbdb76bff;\n    case 'darkmagenta': return 0x8b008bff;\n    case 'darkolivegreen': return 0x556b2fff;\n    case 'darkorange': return 0xff8c00ff;\n    case 'darkorchid': return 0x9932ccff;\n    case 'darkred': return 0x8b0000ff;\n    case 'darksalmon': return 0xe9967aff;\n    case 'darkseagreen': return 0x8fbc8fff;\n    case 'darkslateblue': return 0x483d8bff;\n    case 'darkslategray': return 0x2f4f4fff;\n    case 'darkslategrey': return 0x2f4f4fff;\n    case 'darkturquoise': return 0x00ced1ff;\n    case 'darkviolet': return 0x9400d3ff;\n    case 'deeppink': return 0xff1493ff;\n    case 'deepskyblue': return 0x00bfffff;\n    case 'dimgray': return 0x696969ff;\n    case 'dimgrey': return 0x696969ff;\n    case 'dodgerblue': return 0x1e90ffff;\n    case 'firebrick': return 0xb22222ff;\n    case 'floralwhite': return 0xfffaf0ff;\n    case 'forestgreen': return 0x228b22ff;\n    case 'fuchsia': return 0xff00ffff;\n    case 'gainsboro': return 0xdcdcdcff;\n    case 'ghostwhite': return 0xf8f8ffff;\n    case 'gold': return 0xffd700ff;\n    case 'goldenrod': return 0xdaa520ff;\n    case 'gray': return 0x808080ff;\n    case 'green': return 0x008000ff;\n    case 'greenyellow': return 0xadff2fff;\n    case 'grey': return 0x808080ff;\n    case 'honeydew': return 0xf0fff0ff;\n    case 'hotpink': return 0xff69b4ff;\n    case 'indianred': return 0xcd5c5cff;\n    case 'indigo': return 0x4b0082ff;\n    case 'ivory': return 0xfffff0ff;\n    case 'khaki': return 0xf0e68cff;\n    case 'lavender': return 0xe6e6faff;\n    case 'lavenderblush': return 0xfff0f5ff;\n    case 'lawngreen': return 0x7cfc00ff;\n    case 'lemonchiffon': return 0xfffacdff;\n    case 'lightblue': return 0xadd8e6ff;\n    case 'lightcoral': return 0xf08080ff;\n    case 'lightcyan': return 0xe0ffffff;\n    case 'lightgoldenrodyellow': return 0xfafad2ff;\n    case 'lightgray': return 0xd3d3d3ff;\n    case 'lightgreen': return 0x90ee90ff;\n    case 'lightgrey': return 0xd3d3d3ff;\n    case 'lightpink': return 0xffb6c1ff;\n    case 'lightsalmon': return 0xffa07aff;\n    case 'lightseagreen': return 0x20b2aaff;\n    case 'lightskyblue': return 0x87cefaff;\n    case 'lightslategray': return 0x778899ff;\n    case 'lightslategrey': return 0x778899ff;\n    case 'lightsteelblue': return 0xb0c4deff;\n    case 'lightyellow': return 0xffffe0ff;\n    case 'lime': return 0x00ff00ff;\n    case 'limegreen': return 0x32cd32ff;\n    case 'linen': return 0xfaf0e6ff;\n    case 'magenta': return 0xff00ffff;\n    case 'maroon': return 0x800000ff;\n    case 'mediumaquamarine': return 0x66cdaaff;\n    case 'mediumblue': return 0x0000cdff;\n    case 'mediumorchid': return 0xba55d3ff;\n    case 'mediumpurple': return 0x9370dbff;\n    case 'mediumseagreen': return 0x3cb371ff;\n    case 'mediumslateblue': return 0x7b68eeff;\n    case 'mediumspringgreen': return 0x00fa9aff;\n    case 'mediumturquoise': return 0x48d1ccff;\n    case 'mediumvioletred': return 0xc71585ff;\n    case 'midnightblue': return 0x191970ff;\n    case 'mintcream': return 0xf5fffaff;\n    case 'mistyrose': return 0xffe4e1ff;\n    case 'moccasin': return 0xffe4b5ff;\n    case 'navajowhite': return 0xffdeadff;\n    case 'navy': return 0x000080ff;\n    case 'oldlace': return 0xfdf5e6ff;\n    case 'olive': return 0x808000ff;\n    case 'olivedrab': return 0x6b8e23ff;\n    case 'orange': return 0xffa500ff;\n    case 'orangered': return 0xff4500ff;\n    case 'orchid': return 0xda70d6ff;\n    case 'palegoldenrod': return 0xeee8aaff;\n    case 'palegreen': return 0x98fb98ff;\n    case 'paleturquoise': return 0xafeeeeff;\n    case 'palevioletred': return 0xdb7093ff;\n    case 'papayawhip': return 0xffefd5ff;\n    case 'peachpuff': return 0xffdab9ff;\n    case 'peru': return 0xcd853fff;\n    case 'pink': return 0xffc0cbff;\n    case 'plum': return 0xdda0ddff;\n    case 'powderblue': return 0xb0e0e6ff;\n    case 'purple': return 0x800080ff;\n    case 'rebeccapurple': return 0x663399ff;\n    case 'red': return 0xff0000ff;\n    case 'rosybrown': return 0xbc8f8fff;\n    case 'royalblue': return 0x4169e1ff;\n    case 'saddlebrown': return 0x8b4513ff;\n    case 'salmon': return 0xfa8072ff;\n    case 'sandybrown': return 0xf4a460ff;\n    case 'seagreen': return 0x2e8b57ff;\n    case 'seashell': return 0xfff5eeff;\n    case 'sienna': return 0xa0522dff;\n    case 'silver': return 0xc0c0c0ff;\n    case 'skyblue': return 0x87ceebff;\n    case 'slateblue': return 0x6a5acdff;\n    case 'slategray': return 0x708090ff;\n    case 'slategrey': return 0x708090ff;\n    case 'snow': return 0xfffafaff;\n    case 'springgreen': return 0x00ff7fff;\n    case 'steelblue': return 0x4682b4ff;\n    case 'tan': return 0xd2b48cff;\n    case 'teal': return 0x008080ff;\n    case 'thistle': return 0xd8bfd8ff;\n    case 'tomato': return 0xff6347ff;\n    case 'turquoise': return 0x40e0d0ff;\n    case 'violet': return 0xee82eeff;\n    case 'wheat': return 0xf5deb3ff;\n    case 'white': return 0xffffffff;\n    case 'whitesmoke': return 0xf5f5f5ff;\n    case 'yellow': return 0xffff00ff;\n    case 'yellowgreen': return 0x9acd32ff;\n  }\n  return null;\n}\n\nmodule.exports = normalizeColor;\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","/**\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  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    ctor = ctor();\n    ctor.then(\n      function (moduleObject) {\n        if (0 === payload._status || -1 === payload._status)\n          (payload._status = 1), (payload._result = moduleObject);\n      },\n      function (error) {\n        if (0 === payload._status || -1 === payload._status)\n          (payload._status = 2), (payload._result = error);\n      }\n    );\n    -1 === payload._status && ((payload._status = 0), (payload._result = ctor));\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        },\n  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.__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.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 = function (scope) {\n  var prevTransition = ReactSharedInternals.T,\n    currentTransition = {};\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};\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.2.3\";\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","'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","/**\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 * Copyright (c) Nicolas Gallagher\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'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.styleq = void 0;\nvar cache = new WeakMap();\nvar compiledKey = '$$css';\n\nfunction createStyleq(options) {\n  var disableCache;\n  var disableMix;\n  var transform;\n\n  if (options != null) {\n    disableCache = options.disableCache === true;\n    disableMix = options.disableMix === true;\n    transform = options.transform;\n  }\n\n  return function styleq() {\n    // Keep track of property commits to the className\n    var definedProperties = []; // The className and inline style to build up\n\n    var className = '';\n    var inlineStyle = null; // The current position in the cache graph\n\n    var nextCache = disableCache ? null : cache; // This way of creating an array from arguments is fastest\n\n    var styles = new Array(arguments.length);\n\n    for (var i = 0; i < arguments.length; i++) {\n      styles[i] = arguments[i];\n    } // Iterate over styles from last to first\n\n\n    while (styles.length > 0) {\n      var possibleStyle = styles.pop(); // Skip empty items\n\n      if (possibleStyle == null || possibleStyle === false) {\n        continue;\n      } // Push nested styles back onto the stack to be processed\n\n\n      if (Array.isArray(possibleStyle)) {\n        for (var _i = 0; _i < possibleStyle.length; _i++) {\n          styles.push(possibleStyle[_i]);\n        }\n\n        continue;\n      } // Process an individual style object\n\n\n      var style = transform != null ? transform(possibleStyle) : possibleStyle;\n\n      if (style.$$css) {\n        // Build up the class names defined by this object\n        var classNameChunk = ''; // Check the cache to see if we've already done this work\n\n        if (nextCache != null && nextCache.has(style)) {\n          // Cache: read\n          var cacheEntry = nextCache.get(style);\n\n          if (cacheEntry != null) {\n            classNameChunk = cacheEntry[0]; // $FlowIgnore\n\n            definedProperties.push.apply(definedProperties, cacheEntry[1]);\n            nextCache = cacheEntry[2];\n          }\n        } // Update the chunks with data from this object\n        else {\n          // The properties defined by this object\n          var definedPropertiesChunk = [];\n\n          for (var prop in style) {\n            var value = style[prop];\n            if (prop === compiledKey) continue; // Each property value is used as an HTML class name\n            // { 'debug.string': 'debug.string', opacity: 's-jskmnoqp' }\n\n            if (typeof value === 'string' || value === null) {\n              // Only add to chunks if this property hasn't already been seen\n              if (!definedProperties.includes(prop)) {\n                definedProperties.push(prop);\n\n                if (nextCache != null) {\n                  definedPropertiesChunk.push(prop);\n                }\n\n                if (typeof value === 'string') {\n                  classNameChunk += classNameChunk ? ' ' + value : value;\n                }\n              }\n            } // If we encounter a value that isn't a string or `null`\n            else {\n              console.error(\"styleq: \".concat(prop, \" typeof \").concat(String(value), \" is not \\\"string\\\" or \\\"null\\\".\"));\n            }\n          } // Cache: write\n\n\n          if (nextCache != null) {\n            // Create the next WeakMap for this sequence of styles\n            var weakMap = new WeakMap();\n            nextCache.set(style, [classNameChunk, definedPropertiesChunk, weakMap]);\n            nextCache = weakMap;\n          }\n        } // Order of classes in chunks matches property-iteration order of style\n        // object. Order of chunks matches passed order of styles from first to\n        // last (which we iterate over in reverse).\n\n\n        if (classNameChunk) {\n          className = className ? classNameChunk + ' ' + className : classNameChunk;\n        }\n      } // ----- DYNAMIC: Process inline style object -----\n      else {\n        if (disableMix) {\n          if (inlineStyle == null) {\n            inlineStyle = {};\n          }\n\n          inlineStyle = Object.assign({}, style, inlineStyle);\n        } else {\n          var subStyle = null;\n\n          for (var _prop in style) {\n            var _value = style[_prop];\n\n            if (_value !== undefined) {\n              if (!definedProperties.includes(_prop)) {\n                if (_value != null) {\n                  if (inlineStyle == null) {\n                    inlineStyle = {};\n                  }\n\n                  if (subStyle == null) {\n                    subStyle = {};\n                  }\n\n                  subStyle[_prop] = _value;\n                }\n\n                definedProperties.push(_prop); // Cache is unnecessary overhead if results can't be reused.\n\n                nextCache = null;\n              }\n            }\n          }\n\n          if (subStyle != null) {\n            inlineStyle = Object.assign(subStyle, inlineStyle);\n          }\n        }\n      }\n    }\n\n    var styleProps = [className, inlineStyle];\n    return styleProps;\n  };\n}\n\nvar styleq = createStyleq();\nexports.styleq = styleq;\nstyleq.factory = createStyleq;","/**\n * Copyright (c) Nicolas Gallagher\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'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.localizeStyle = localizeStyle;\nvar cache = new WeakMap();\nvar markerProp = '$$css$localize';\n/**\n * The compiler polyfills logical properties and values, generating a class\n * name for both writing directions. The style objects are annotated by\n * the compiler as needing this runtime transform. The results are memoized.\n *\n * { '$$css$localize': true, float: [ 'float-left', 'float-right' ] }\n * => { float: 'float-left' }\n */\n\nfunction compileStyle(style, isRTL) {\n  // Create a new compiled style for styleq\n  var compiledStyle = {};\n\n  for (var prop in style) {\n    if (prop !== markerProp) {\n      var value = style[prop];\n\n      if (Array.isArray(value)) {\n        compiledStyle[prop] = isRTL ? value[1] : value[0];\n      } else {\n        compiledStyle[prop] = value;\n      }\n    }\n  }\n\n  return compiledStyle;\n}\n\nfunction localizeStyle(style, isRTL) {\n  if (style[markerProp] != null) {\n    var compiledStyleIndex = isRTL ? 1 : 0; // Check the cache in case we've already seen this object\n\n    if (cache.has(style)) {\n      var _cachedStyles = cache.get(style);\n\n      var _compiledStyle = _cachedStyles[compiledStyleIndex];\n\n      if (_compiledStyle == null) {\n        // Update the missing cache entry\n        _compiledStyle = compileStyle(style, isRTL);\n        _cachedStyles[compiledStyleIndex] = _compiledStyle;\n        cache.set(style, _cachedStyles);\n      }\n\n      return _compiledStyle;\n    } // Create a new compiled style for styleq\n\n\n    var compiledStyle = compileStyle(style, isRTL);\n    var cachedStyles = new Array(2);\n    cachedStyles[compiledStyleIndex] = compiledStyle;\n    cache.set(style, cachedStyles);\n    return compiledStyle;\n  }\n\n  return style;\n}","'use strict';\n\nvar regex$5 = /[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\n\nvar regex$4 = /[\\0-\\x1F\\x7F-\\x9F]/;\n\nvar regex$3 = /[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u0890\\u0891\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804[\\uDCBD\\uDCCD]|\\uD80D[\\uDC30-\\uDC3F]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]/;\n\nvar regex$2 = /[!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061D-\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C77\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1B7D\\u1B7E\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4F\\u2E52-\\u2E5D\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD803[\\uDEAD\\uDF55-\\uDF59\\uDF86-\\uDF89]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5A\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDEB9\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDD44-\\uDD46\\uDDE2\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2\\uDF00-\\uDF09]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8\\uDF43-\\uDF4F\\uDFFF]|\\uD809[\\uDC70-\\uDC74]|\\uD80B[\\uDFF1\\uDFF2]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDE97-\\uDE9A\\uDFE2]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]/;\n\nvar regex$1 = /[\\$\\+<->\\^`\\|~\\xA2-\\xA6\\xA8\\xA9\\xAC\\xAE-\\xB1\\xB4\\xB8\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u02FF\\u0375\\u0384\\u0385\\u03F6\\u0482\\u058D-\\u058F\\u0606-\\u0608\\u060B\\u060E\\u060F\\u06DE\\u06E9\\u06FD\\u06FE\\u07F6\\u07FE\\u07FF\\u0888\\u09F2\\u09F3\\u09FA\\u09FB\\u0AF1\\u0B70\\u0BF3-\\u0BFA\\u0C7F\\u0D4F\\u0D79\\u0E3F\\u0F01-\\u0F03\\u0F13\\u0F15-\\u0F17\\u0F1A-\\u0F1F\\u0F34\\u0F36\\u0F38\\u0FBE-\\u0FC5\\u0FC7-\\u0FCC\\u0FCE\\u0FCF\\u0FD5-\\u0FD8\\u109E\\u109F\\u1390-\\u1399\\u166D\\u17DB\\u1940\\u19DE-\\u19FF\\u1B61-\\u1B6A\\u1B74-\\u1B7C\\u1FBD\\u1FBF-\\u1FC1\\u1FCD-\\u1FCF\\u1FDD-\\u1FDF\\u1FED-\\u1FEF\\u1FFD\\u1FFE\\u2044\\u2052\\u207A-\\u207C\\u208A-\\u208C\\u20A0-\\u20C0\\u2100\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F\\u218A\\u218B\\u2190-\\u2307\\u230C-\\u2328\\u232B-\\u2426\\u2440-\\u244A\\u249C-\\u24E9\\u2500-\\u2767\\u2794-\\u27C4\\u27C7-\\u27E5\\u27F0-\\u2982\\u2999-\\u29D7\\u29DC-\\u29FB\\u29FE-\\u2B73\\u2B76-\\u2B95\\u2B97-\\u2BFF\\u2CE5-\\u2CEA\\u2E50\\u2E51\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFF\\u3004\\u3012\\u3013\\u3020\\u3036\\u3037\\u303E\\u303F\\u309B\\u309C\\u3190\\u3191\\u3196-\\u319F\\u31C0-\\u31E3\\u31EF\\u3200-\\u321E\\u322A-\\u3247\\u3250\\u3260-\\u327F\\u328A-\\u32B0\\u32C0-\\u33FF\\u4DC0-\\u4DFF\\uA490-\\uA4C6\\uA700-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA828-\\uA82B\\uA836-\\uA839\\uAA77-\\uAA79\\uAB5B\\uAB6A\\uAB6B\\uFB29\\uFBB2-\\uFBC2\\uFD40-\\uFD4F\\uFDCF\\uFDFC-\\uFDFF\\uFE62\\uFE64-\\uFE66\\uFE69\\uFF04\\uFF0B\\uFF1C-\\uFF1E\\uFF3E\\uFF40\\uFF5C\\uFF5E\\uFFE0-\\uFFE6\\uFFE8-\\uFFEE\\uFFFC\\uFFFD]|\\uD800[\\uDD37-\\uDD3F\\uDD79-\\uDD89\\uDD8C-\\uDD8E\\uDD90-\\uDD9C\\uDDA0\\uDDD0-\\uDDFC]|\\uD802[\\uDC77\\uDC78\\uDEC8]|\\uD805\\uDF3F|\\uD807[\\uDFD5-\\uDFF1]|\\uD81A[\\uDF3C-\\uDF3F\\uDF45]|\\uD82F\\uDC9C|\\uD833[\\uDF50-\\uDFC3]|\\uD834[\\uDC00-\\uDCF5\\uDD00-\\uDD26\\uDD29-\\uDD64\\uDD6A-\\uDD6C\\uDD83\\uDD84\\uDD8C-\\uDDA9\\uDDAE-\\uDDEA\\uDE00-\\uDE41\\uDE45\\uDF00-\\uDF56]|\\uD835[\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3]|\\uD836[\\uDC00-\\uDDFF\\uDE37-\\uDE3A\\uDE6D-\\uDE74\\uDE76-\\uDE83\\uDE85\\uDE86]|\\uD838[\\uDD4F\\uDEFF]|\\uD83B[\\uDCAC\\uDCB0\\uDD2E\\uDEF0\\uDEF1]|\\uD83C[\\uDC00-\\uDC2B\\uDC30-\\uDC93\\uDCA0-\\uDCAE\\uDCB1-\\uDCBF\\uDCC1-\\uDCCF\\uDCD1-\\uDCF5\\uDD0D-\\uDDAD\\uDDE6-\\uDE02\\uDE10-\\uDE3B\\uDE40-\\uDE48\\uDE50\\uDE51\\uDE60-\\uDE65\\uDF00-\\uDFFF]|\\uD83D[\\uDC00-\\uDED7\\uDEDC-\\uDEEC\\uDEF0-\\uDEFC\\uDF00-\\uDF76\\uDF7B-\\uDFD9\\uDFE0-\\uDFEB\\uDFF0]|\\uD83E[\\uDC00-\\uDC0B\\uDC10-\\uDC47\\uDC50-\\uDC59\\uDC60-\\uDC87\\uDC90-\\uDCAD\\uDCB0\\uDCB1\\uDD00-\\uDE53\\uDE60-\\uDE6D\\uDE70-\\uDE7C\\uDE80-\\uDE88\\uDE90-\\uDEBD\\uDEBF-\\uDEC5\\uDECE-\\uDEDB\\uDEE0-\\uDEE8\\uDEF0-\\uDEF8\\uDF00-\\uDF92\\uDF94-\\uDFCA]/;\n\nvar regex = /[ \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/;\n\nexports.Any = regex$5;\nexports.Cc = regex$4;\nexports.Cf = regex$3;\nexports.P = regex$2;\nexports.S = regex$1;\nexports.Z = regex;\n","export const copyComponentProperties = (Component, UniwindComponent) => {\n  Object.entries(Component).forEach(([key, value]) => {\n    if ([\"$$typeof\", \"render\", \"contextType\"].includes(key)) {\n      return;\n    }\n    UniwindComponent[key] = value;\n  });\n  UniwindComponent.displayName = Component.displayName;\n  UniwindComponent.prototype = Object.getPrototypeOf(Component);\n  return UniwindComponent;\n};\n","import Platform from '../../../exports/Platform';\nexport default Platform;","/**\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 * @format\n */\n\n'use strict';\n\nvar ReactNativeFeatureFlags = {\n  isLayoutAnimationEnabled: () => true,\n  shouldEmitW3CPointerEvents: () => false,\n  shouldPressibilityUseW3CPointerEventsForHover: () => false,\n  animatedShouldDebounceQueueFlush: () => false,\n  animatedShouldUseSingleOp: () => false\n};\nexport default ReactNativeFeatureFlags;","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\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 * @format\n */\n\nimport NativeAnimatedNonTurboModule from './NativeAnimatedModule';\nimport NativeAnimatedTurboModule from './NativeAnimatedTurboModule';\nimport NativeEventEmitter from '../EventEmitter/NativeEventEmitter';\nimport Platform from '../Utilities/Platform';\nimport ReactNativeFeatureFlags from '../ReactNative/ReactNativeFeatureFlags';\nimport invariant from 'fbjs/lib/invariant';\nimport RCTDeviceEventEmitter from '../EventEmitter/RCTDeviceEventEmitter';\n// TODO T69437152 @petetheheat - Delete this fork when Fabric ships to 100%.\nvar NativeAnimatedModule = Platform.OS === 'ios' && global.RN$Bridgeless === true ? NativeAnimatedTurboModule : NativeAnimatedNonTurboModule;\nvar __nativeAnimatedNodeTagCount = 1; /* used for animated nodes */\nvar __nativeAnimationIdCount = 1; /* used for started animations */\n\nvar nativeEventEmitter;\nvar waitingForQueuedOperations = new Set();\nvar queueOperations = false;\nvar queue = [];\n// $FlowFixMe\nvar singleOpQueue = [];\nvar useSingleOpBatching = false;\nPlatform.OS === 'android' && !!(NativeAnimatedModule != null && NativeAnimatedModule.queueAndExecuteBatchedOperations) && ReactNativeFeatureFlags.animatedShouldUseSingleOp();\nvar flushQueueTimeout = null;\nvar eventListenerGetValueCallbacks = {};\nvar eventListenerAnimationFinishedCallbacks = {};\nvar globalEventEmitterGetValueListener = null;\nvar globalEventEmitterAnimationFinishedListener = null;\nvar nativeOps = useSingleOpBatching ? function () {\n  var apis = ['createAnimatedNode',\n  // 1\n  'updateAnimatedNodeConfig',\n  // 2\n  'getValue',\n  // 3\n  'startListeningToAnimatedNodeValue',\n  // 4\n  'stopListeningToAnimatedNodeValue',\n  // 5\n  'connectAnimatedNodes',\n  // 6\n  'disconnectAnimatedNodes',\n  // 7\n  'startAnimatingNode',\n  // 8\n  'stopAnimation',\n  // 9\n  'setAnimatedNodeValue',\n  // 10\n  'setAnimatedNodeOffset',\n  // 11\n  'flattenAnimatedNodeOffset',\n  // 12\n  'extractAnimatedNodeOffset',\n  // 13\n  'connectAnimatedNodeToView',\n  // 14\n  'disconnectAnimatedNodeFromView',\n  // 15\n  'restoreDefaultValues',\n  // 16\n  'dropAnimatedNode',\n  // 17\n  'addAnimatedEventToView',\n  // 18\n  'removeAnimatedEventFromView',\n  // 19\n  'addListener',\n  // 20\n  'removeListener' // 21\n  ];\n  return apis.reduce((acc, functionName, i) => {\n    // These indices need to be kept in sync with the indices in native (see NativeAnimatedModule in Java, or the equivalent for any other native platform).\n    // $FlowFixMe[prop-missing]\n    acc[functionName] = i + 1;\n    return acc;\n  }, {});\n}() : NativeAnimatedModule;\n\n/**\n * Wrappers around NativeAnimatedModule to provide flow and autocomplete support for\n * the native module methods, and automatic queue management on Android\n */\nvar API = {\n  getValue: function getValue(tag, saveValueCallback) {\n    invariant(nativeOps, 'Native animated module is not available');\n    if (useSingleOpBatching) {\n      if (saveValueCallback) {\n        eventListenerGetValueCallbacks[tag] = saveValueCallback;\n      }\n      // $FlowFixMe\n      API.queueOperation(nativeOps.getValue, tag);\n    } else {\n      API.queueOperation(nativeOps.getValue, tag, saveValueCallback);\n    }\n  },\n  setWaitingForIdentifier: function setWaitingForIdentifier(id) {\n    waitingForQueuedOperations.add(id);\n    queueOperations = true;\n    if (ReactNativeFeatureFlags.animatedShouldDebounceQueueFlush() && flushQueueTimeout) {\n      clearTimeout(flushQueueTimeout);\n    }\n  },\n  unsetWaitingForIdentifier: function unsetWaitingForIdentifier(id) {\n    waitingForQueuedOperations.delete(id);\n    if (waitingForQueuedOperations.size === 0) {\n      queueOperations = false;\n      API.disableQueue();\n    }\n  },\n  disableQueue: function disableQueue() {\n    invariant(nativeOps, 'Native animated module is not available');\n    if (ReactNativeFeatureFlags.animatedShouldDebounceQueueFlush()) {\n      var prevTimeout = flushQueueTimeout;\n      clearImmediate(prevTimeout);\n      flushQueueTimeout = setImmediate(API.flushQueue);\n    } else {\n      API.flushQueue();\n    }\n  },\n  flushQueue: function flushQueue() {\n    /*\n    invariant(NativeAnimatedModule, 'Native animated module is not available');\n    flushQueueTimeout = null;\n     // Early returns before calling any APIs\n    if (useSingleOpBatching && singleOpQueue.length === 0) {\n      return;\n    }\n    if (!useSingleOpBatching && queue.length === 0) {\n      return;\n    }\n     if (useSingleOpBatching) {\n      // Set up event listener for callbacks if it's not set up\n      if (\n        !globalEventEmitterGetValueListener ||\n        !globalEventEmitterAnimationFinishedListener\n      ) {\n        setupGlobalEventEmitterListeners();\n      }\n      // Single op batching doesn't use callback functions, instead we\n      // use RCTDeviceEventEmitter. This reduces overhead of sending lots of\n      // JSI functions across to native code; but also, TM infrastructure currently\n      // does not support packing a function into native arrays.\n      NativeAnimatedModule.queueAndExecuteBatchedOperations?.(singleOpQueue);\n      singleOpQueue.length = 0;\n    } else {\n      Platform.OS === 'android' && NativeAnimatedModule.startOperationBatch?.();\n      for (let q = 0, l = queue.length; q < l; q++) {\n        queue[q]();\n      }\n      queue.length = 0;\n      Platform.OS === 'android' &&\n        NativeAnimatedModule.finishOperationBatch?.();\n    }\n    */\n  },\n  queueOperation: function queueOperation(fn) {\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 (useSingleOpBatching) {\n      // Get the command ID from the queued function, and push that ID and any arguments needed to execute the operation\n      // $FlowFixMe: surprise, fn is actually a number\n      singleOpQueue.push(fn, ...args);\n      return;\n    }\n\n    // If queueing is explicitly on, *or* the queue has not yet\n    // been flushed, use the queue. This is to prevent operations\n    // from being executed out of order.\n    if (queueOperations || queue.length !== 0) {\n      queue.push(() => fn(...args));\n    } else {\n      fn(...args);\n    }\n  },\n  createAnimatedNode: function createAnimatedNode(tag, config) {\n    invariant(nativeOps, 'Native animated module is not available');\n    API.queueOperation(nativeOps.createAnimatedNode, tag, config);\n  },\n  updateAnimatedNodeConfig: function updateAnimatedNodeConfig(tag, config) {\n    invariant(nativeOps, 'Native animated module is not available');\n    //if (nativeOps.updateAnimatedNodeConfig) {\n    //  API.queueOperation(nativeOps.updateAnimatedNodeConfig, tag, config);\n    //}\n  },\n  startListeningToAnimatedNodeValue: function startListeningToAnimatedNodeValue(tag) {\n    invariant(nativeOps, 'Native animated module is not available');\n    API.queueOperation(nativeOps.startListeningToAnimatedNodeValue, tag);\n  },\n  stopListeningToAnimatedNodeValue: function stopListeningToAnimatedNodeValue(tag) {\n    invariant(nativeOps, 'Native animated module is not available');\n    API.queueOperation(nativeOps.stopListeningToAnimatedNodeValue, tag);\n  },\n  connectAnimatedNodes: function connectAnimatedNodes(parentTag, childTag) {\n    invariant(nativeOps, 'Native animated module is not available');\n    API.queueOperation(nativeOps.connectAnimatedNodes, parentTag, childTag);\n  },\n  disconnectAnimatedNodes: function disconnectAnimatedNodes(parentTag, childTag) {\n    invariant(nativeOps, 'Native animated module is not available');\n    API.queueOperation(nativeOps.disconnectAnimatedNodes, parentTag, childTag);\n  },\n  startAnimatingNode: function startAnimatingNode(animationId, nodeTag, config, endCallback) {\n    invariant(nativeOps, 'Native animated module is not available');\n    if (useSingleOpBatching) {\n      if (endCallback) {\n        eventListenerAnimationFinishedCallbacks[animationId] = endCallback;\n      }\n      // $FlowFixMe\n      API.queueOperation(nativeOps.startAnimatingNode, animationId, nodeTag, config);\n    } else {\n      API.queueOperation(nativeOps.startAnimatingNode, animationId, nodeTag, config, endCallback);\n    }\n  },\n  stopAnimation: function stopAnimation(animationId) {\n    invariant(nativeOps, 'Native animated module is not available');\n    API.queueOperation(nativeOps.stopAnimation, animationId);\n  },\n  setAnimatedNodeValue: function setAnimatedNodeValue(nodeTag, value) {\n    invariant(nativeOps, 'Native animated module is not available');\n    API.queueOperation(nativeOps.setAnimatedNodeValue, nodeTag, value);\n  },\n  setAnimatedNodeOffset: function setAnimatedNodeOffset(nodeTag, offset) {\n    invariant(nativeOps, 'Native animated module is not available');\n    API.queueOperation(nativeOps.setAnimatedNodeOffset, nodeTag, offset);\n  },\n  flattenAnimatedNodeOffset: function flattenAnimatedNodeOffset(nodeTag) {\n    invariant(nativeOps, 'Native animated module is not available');\n    API.queueOperation(nativeOps.flattenAnimatedNodeOffset, nodeTag);\n  },\n  extractAnimatedNodeOffset: function extractAnimatedNodeOffset(nodeTag) {\n    invariant(nativeOps, 'Native animated module is not available');\n    API.queueOperation(nativeOps.extractAnimatedNodeOffset, nodeTag);\n  },\n  connectAnimatedNodeToView: function connectAnimatedNodeToView(nodeTag, viewTag) {\n    invariant(nativeOps, 'Native animated module is not available');\n    API.queueOperation(nativeOps.connectAnimatedNodeToView, nodeTag, viewTag);\n  },\n  disconnectAnimatedNodeFromView: function disconnectAnimatedNodeFromView(nodeTag, viewTag) {\n    invariant(nativeOps, 'Native animated module is not available');\n    API.queueOperation(nativeOps.disconnectAnimatedNodeFromView, nodeTag, viewTag);\n  },\n  restoreDefaultValues: function restoreDefaultValues(nodeTag) {\n    invariant(nativeOps, 'Native animated module is not available');\n    // Backwards compat with older native runtimes, can be removed later.\n    if (nativeOps.restoreDefaultValues != null) {\n      API.queueOperation(nativeOps.restoreDefaultValues, nodeTag);\n    }\n  },\n  dropAnimatedNode: function dropAnimatedNode(tag) {\n    invariant(nativeOps, 'Native animated module is not available');\n    API.queueOperation(nativeOps.dropAnimatedNode, tag);\n  },\n  addAnimatedEventToView: function addAnimatedEventToView(viewTag, eventName, eventMapping) {\n    invariant(nativeOps, 'Native animated module is not available');\n    API.queueOperation(nativeOps.addAnimatedEventToView, viewTag, eventName, eventMapping);\n  },\n  removeAnimatedEventFromView(viewTag, eventName, animatedNodeTag) {\n    invariant(nativeOps, 'Native animated module is not available');\n    API.queueOperation(nativeOps.removeAnimatedEventFromView, viewTag, eventName, animatedNodeTag);\n  }\n};\nfunction setupGlobalEventEmitterListeners() {\n  globalEventEmitterGetValueListener = RCTDeviceEventEmitter.addListener('onNativeAnimatedModuleGetValue', function (params) {\n    var tag = params.tag;\n    var callback = eventListenerGetValueCallbacks[tag];\n    if (!callback) {\n      return;\n    }\n    callback(params.value);\n    delete eventListenerGetValueCallbacks[tag];\n  });\n  globalEventEmitterAnimationFinishedListener = RCTDeviceEventEmitter.addListener('onNativeAnimatedModuleAnimationFinished', function (params) {\n    var animationId = params.animationId;\n    var callback = eventListenerAnimationFinishedCallbacks[animationId];\n    if (!callback) {\n      return;\n    }\n    callback(params);\n    delete eventListenerAnimationFinishedCallbacks[animationId];\n  });\n}\n\n/**\n * Styles allowed by the native animated implementation.\n *\n * In general native animated implementation should support any numeric or color property that\n * doesn't need to be updated through the shadow view hierarchy (all non-layout properties).\n */\nvar SUPPORTED_COLOR_STYLES = {\n  backgroundColor: true,\n  borderBottomColor: true,\n  borderColor: true,\n  borderEndColor: true,\n  borderLeftColor: true,\n  borderRightColor: true,\n  borderStartColor: true,\n  borderTopColor: true,\n  color: true,\n  tintColor: true\n};\nvar SUPPORTED_STYLES = _objectSpread(_objectSpread({}, SUPPORTED_COLOR_STYLES), {}, {\n  borderBottomEndRadius: true,\n  borderBottomLeftRadius: true,\n  borderBottomRightRadius: true,\n  borderBottomStartRadius: true,\n  borderRadius: true,\n  borderTopEndRadius: true,\n  borderTopLeftRadius: true,\n  borderTopRightRadius: true,\n  borderTopStartRadius: true,\n  elevation: true,\n  opacity: true,\n  transform: true,\n  zIndex: true,\n  /* ios styles */\n  shadowOpacity: true,\n  shadowRadius: true,\n  /* legacy android transform properties */\n  scaleX: true,\n  scaleY: true,\n  translateX: true,\n  translateY: true\n});\nvar SUPPORTED_TRANSFORMS = {\n  translateX: true,\n  translateY: true,\n  scale: true,\n  scaleX: true,\n  scaleY: true,\n  rotate: true,\n  rotateX: true,\n  rotateY: true,\n  rotateZ: true,\n  perspective: true\n};\nvar SUPPORTED_INTERPOLATION_PARAMS = {\n  inputRange: true,\n  outputRange: true,\n  extrapolate: true,\n  extrapolateRight: true,\n  extrapolateLeft: true\n};\nfunction addWhitelistedStyleProp(prop) {\n  SUPPORTED_STYLES[prop] = true;\n}\nfunction addWhitelistedTransformProp(prop) {\n  SUPPORTED_TRANSFORMS[prop] = true;\n}\nfunction addWhitelistedInterpolationParam(param) {\n  SUPPORTED_INTERPOLATION_PARAMS[param] = true;\n}\nfunction isSupportedColorStyleProp(prop) {\n  return SUPPORTED_COLOR_STYLES.hasOwnProperty(prop);\n}\nfunction isSupportedStyleProp(prop) {\n  return SUPPORTED_STYLES.hasOwnProperty(prop);\n}\nfunction isSupportedTransformProp(prop) {\n  return SUPPORTED_TRANSFORMS.hasOwnProperty(prop);\n}\nfunction isSupportedInterpolationParam(param) {\n  return SUPPORTED_INTERPOLATION_PARAMS.hasOwnProperty(param);\n}\nfunction validateTransform(configs) {\n  configs.forEach(config => {\n    if (!isSupportedTransformProp(config.property)) {\n      throw new Error(\"Property '\" + config.property + \"' is not supported by native animated module\");\n    }\n  });\n}\nfunction validateStyles(styles) {\n  for (var _key2 in styles) {\n    if (!isSupportedStyleProp(_key2)) {\n      throw new Error(\"Style property '\" + _key2 + \"' is not supported by native animated module\");\n    }\n  }\n}\nfunction validateInterpolation(config) {\n  for (var _key3 in config) {\n    if (!isSupportedInterpolationParam(_key3)) {\n      throw new Error(\"Interpolation property '\" + _key3 + \"' is not supported by native animated module\");\n    }\n  }\n}\nfunction generateNewNodeTag() {\n  return __nativeAnimatedNodeTagCount++;\n}\nfunction generateNewAnimationId() {\n  return __nativeAnimationIdCount++;\n}\nfunction assertNativeAnimatedModule() {\n  invariant(NativeAnimatedModule, 'Native animated module is not available');\n}\nvar _warnedMissingNativeAnimated = false;\nfunction shouldUseNativeDriver(config) {\n  if (config.useNativeDriver == null) {\n    console.warn('Animated: `useNativeDriver` was not specified. This is a required ' + 'option and must be explicitly set to `true` or `false`');\n  }\n  if (config.useNativeDriver === true && !NativeAnimatedModule) {\n    if (!_warnedMissingNativeAnimated) {\n      console.warn('Animated: `useNativeDriver` is not supported because the native ' + 'animated module is missing. Falling back to JS-based animation. To ' + 'resolve this, add `RCTAnimation` module to this app, or remove ' + '`useNativeDriver`. ' + 'Make sure to run `bundle exec pod install` first. Read more about autolinking: https://github.com/react-native-community/cli/blob/master/docs/autolinking.md');\n      _warnedMissingNativeAnimated = true;\n    }\n    return false;\n  }\n  return config.useNativeDriver || false;\n}\nfunction transformDataType(value) {\n  // Change the string type to number type so we can reuse the same logic in\n  // iOS and Android platform\n  if (typeof value !== 'string') {\n    return value;\n  }\n  if (/deg$/.test(value)) {\n    var degrees = parseFloat(value) || 0;\n    var radians = degrees * Math.PI / 180.0;\n    return radians;\n  } else {\n    return value;\n  }\n}\nexport { API, isSupportedColorStyleProp, isSupportedStyleProp, isSupportedTransformProp, isSupportedInterpolationParam, addWhitelistedStyleProp, addWhitelistedTransformProp, addWhitelistedInterpolationParam, validateStyles, validateTransform, validateInterpolation, generateNewNodeTag, generateNewAnimationId, assertNativeAnimatedModule, shouldUseNativeDriver, transformDataType };\nexport default {\n  API,\n  isSupportedColorStyleProp,\n  isSupportedStyleProp,\n  isSupportedTransformProp,\n  isSupportedInterpolationParam,\n  addWhitelistedStyleProp,\n  addWhitelistedTransformProp,\n  addWhitelistedInterpolationParam,\n  validateStyles,\n  validateTransform,\n  validateInterpolation,\n  generateNewNodeTag,\n  generateNewAnimationId,\n  assertNativeAnimatedModule,\n  shouldUseNativeDriver,\n  transformDataType,\n  // $FlowExpectedError[unsafe-getters-setters] - unsafe getter lint suppresion\n  // $FlowExpectedError[missing-type-arg] - unsafe getter lint suppresion\n  get nativeEventEmitter() {\n    if (!nativeEventEmitter) {\n      nativeEventEmitter = new NativeEventEmitter(\n      // T88715063: NativeEventEmitter only used this parameter on iOS. Now it uses it on all platforms, so this code was modified automatically to preserve its behavior\n      // If you want to use the native module on other platforms, please remove this condition and test its behavior\n      Platform.OS !== 'ios' ? null : NativeAnimatedModule);\n    }\n    return nativeEventEmitter;\n  }\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 * @format\n */\n\n'use strict';\n\nimport invariant from 'fbjs/lib/invariant';\nexport function get(name) {\n  return null;\n}\nexport function getEnforcing(name) {\n  var module = get(name);\n  invariant(module != null, \"TurboModuleRegistry.getEnforcing(...): '\" + name + \"' could not be found. \" + 'Verify that a module by this name is registered in the native binary.');\n  return module;\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 * @format\n */\n\n'use strict';\n\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nvar NativeAnimatedAPI = NativeAnimatedHelper.API;\nimport invariant from 'fbjs/lib/invariant';\nvar _uniqueId = 1;\n\n// Note(vjeux): this would be better as an interface but flow doesn't\n// support them yet\nclass AnimatedNode {\n  __attach() {}\n  __detach() {\n    if (this.__isNative && this.__nativeTag != null) {\n      NativeAnimatedHelper.API.dropAnimatedNode(this.__nativeTag);\n      this.__nativeTag = undefined;\n    }\n  }\n  __getValue() {}\n  __getAnimatedValue() {\n    return this.__getValue();\n  }\n  __addChild(child) {}\n  __removeChild(child) {}\n  __getChildren() {\n    return [];\n  }\n\n  /* Methods and props used by native Animated impl */\n\n  constructor() {\n    this._listeners = {};\n  }\n  __makeNative(platformConfig) {\n    if (!this.__isNative) {\n      throw new Error('This node cannot be made a \"native\" animated node');\n    }\n    this._platformConfig = platformConfig;\n    if (this.hasListeners()) {\n      this._startListeningToNativeValueUpdates();\n    }\n  }\n\n  /**\n   * Adds an asynchronous listener to the value so you can observe updates from\n   * animations.  This is useful because there is no way to\n   * synchronously read the value because it might be driven natively.\n   *\n   * See https://reactnative.dev/docs/animatedvalue#addlistener\n   */\n  addListener(callback) {\n    var id = String(_uniqueId++);\n    this._listeners[id] = callback;\n    if (this.__isNative) {\n      this._startListeningToNativeValueUpdates();\n    }\n    return id;\n  }\n\n  /**\n   * Unregister a listener. The `id` param shall match the identifier\n   * previously returned by `addListener()`.\n   *\n   * See https://reactnative.dev/docs/animatedvalue#removelistener\n   */\n  removeListener(id) {\n    delete this._listeners[id];\n    if (this.__isNative && !this.hasListeners()) {\n      this._stopListeningForNativeValueUpdates();\n    }\n  }\n\n  /**\n   * Remove all registered listeners.\n   *\n   * See https://reactnative.dev/docs/animatedvalue#removealllisteners\n   */\n  removeAllListeners() {\n    this._listeners = {};\n    if (this.__isNative) {\n      this._stopListeningForNativeValueUpdates();\n    }\n  }\n  hasListeners() {\n    return !!Object.keys(this._listeners).length;\n  }\n  _startListeningToNativeValueUpdates() {\n    if (this.__nativeAnimatedValueListener && !this.__shouldUpdateListenersForNewNativeTag) {\n      return;\n    }\n    if (this.__shouldUpdateListenersForNewNativeTag) {\n      this.__shouldUpdateListenersForNewNativeTag = false;\n      this._stopListeningForNativeValueUpdates();\n    }\n    NativeAnimatedAPI.startListeningToAnimatedNodeValue(this.__getNativeTag());\n    this.__nativeAnimatedValueListener = NativeAnimatedHelper.nativeEventEmitter.addListener('onAnimatedValueUpdate', data => {\n      if (data.tag !== this.__getNativeTag()) {\n        return;\n      }\n      this.__onAnimatedValueUpdateReceived(data.value);\n    });\n  }\n  __onAnimatedValueUpdateReceived(value) {\n    this.__callListeners(value);\n  }\n  __callListeners(value) {\n    for (var _key in this._listeners) {\n      this._listeners[_key]({\n        value\n      });\n    }\n  }\n  _stopListeningForNativeValueUpdates() {\n    if (!this.__nativeAnimatedValueListener) {\n      return;\n    }\n    this.__nativeAnimatedValueListener.remove();\n    this.__nativeAnimatedValueListener = null;\n    NativeAnimatedAPI.stopListeningToAnimatedNodeValue(this.__getNativeTag());\n  }\n  __getNativeTag() {\n    var _this$__nativeTag;\n    NativeAnimatedHelper.assertNativeAnimatedModule();\n    invariant(this.__isNative, 'Attempt to get native tag from node not marked as \"native\"');\n    var nativeTag = (_this$__nativeTag = this.__nativeTag) !== null && _this$__nativeTag !== void 0 ? _this$__nativeTag : NativeAnimatedHelper.generateNewNodeTag();\n    if (this.__nativeTag == null) {\n      this.__nativeTag = nativeTag;\n      var config = this.__getNativeConfig();\n      if (this._platformConfig) {\n        config.platformConfig = this._platformConfig;\n      }\n      NativeAnimatedHelper.API.createAnimatedNode(nativeTag, config);\n      this.__shouldUpdateListenersForNewNativeTag = true;\n    }\n    return nativeTag;\n  }\n  __getNativeConfig() {\n    throw new Error('This JS animated node type cannot be used as native animated node');\n  }\n  toJSON() {\n    return this.__getValue();\n  }\n  __getPlatformConfig() {\n    return this._platformConfig;\n  }\n  __setPlatformConfig(platformConfig) {\n    this._platformConfig = platformConfig;\n  }\n}\nexport default AnimatedNode;","/**\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 * @format\n */\n\n'use strict';\n\nimport _createForOfIteratorHelperLoose from \"@babel/runtime/helpers/createForOfIteratorHelperLoose\";\nimport AnimatedNode from './AnimatedNode';\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nclass AnimatedWithChildren extends AnimatedNode {\n  constructor() {\n    super();\n    this._children = [];\n  }\n  __makeNative(platformConfig) {\n    if (!this.__isNative) {\n      this.__isNative = true;\n      for (var _iterator = _createForOfIteratorHelperLoose(this._children), _step; !(_step = _iterator()).done;) {\n        var child = _step.value;\n        child.__makeNative(platformConfig);\n        NativeAnimatedHelper.API.connectAnimatedNodes(this.__getNativeTag(), child.__getNativeTag());\n      }\n    }\n    super.__makeNative(platformConfig);\n  }\n  __addChild(child) {\n    if (this._children.length === 0) {\n      this.__attach();\n    }\n    this._children.push(child);\n    if (this.__isNative) {\n      // Only accept \"native\" animated nodes as children\n      child.__makeNative(this.__getPlatformConfig());\n      NativeAnimatedHelper.API.connectAnimatedNodes(this.__getNativeTag(), child.__getNativeTag());\n    }\n  }\n  __removeChild(child) {\n    var index = this._children.indexOf(child);\n    if (index === -1) {\n      console.warn(\"Trying to remove a child that doesn't exist\");\n      return;\n    }\n    if (this.__isNative && child.__isNative) {\n      NativeAnimatedHelper.API.disconnectAnimatedNodes(this.__getNativeTag(), child.__getNativeTag());\n    }\n    this._children.splice(index, 1);\n    if (this._children.length === 0) {\n      this.__detach();\n    }\n  }\n  __getChildren() {\n    return this._children;\n  }\n  __callListeners(value) {\n    super.__callListeners(value);\n    if (!this.__isNative) {\n      for (var _iterator2 = _createForOfIteratorHelperLoose(this._children), _step2; !(_step2 = _iterator2()).done;) {\n        var child = _step2.value;\n        // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n        if (child.__getValue) {\n          child.__callListeners(child.__getValue());\n        }\n      }\n    }\n  }\n}\nexport default AnimatedWithChildren;","/**\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 * @format\n */\n\n/* eslint no-bitwise: 0 */\n\n'use strict';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport AnimatedWithChildren from './AnimatedWithChildren';\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nimport invariant from 'fbjs/lib/invariant';\nimport normalizeColor from '@react-native/normalize-colors';\nvar __DEV__ = process.env.NODE_ENV !== 'production';\nvar linear = t => t;\n\n/**\n * Very handy helper to map input ranges to output ranges with an easing\n * function and custom behavior outside of the ranges.\n */\nfunction createInterpolation(config) {\n  if (config.outputRange && typeof config.outputRange[0] === 'string') {\n    return createInterpolationFromStringOutputRange(config);\n  }\n  var outputRange = config.outputRange;\n  var inputRange = config.inputRange;\n  if (__DEV__) {\n    checkInfiniteRange('outputRange', outputRange);\n    checkInfiniteRange('inputRange', inputRange);\n    checkValidInputRange(inputRange);\n    invariant(inputRange.length === outputRange.length, 'inputRange (' + inputRange.length + ') and outputRange (' + outputRange.length + ') must have the same length');\n  }\n  var easing = config.easing || linear;\n  var extrapolateLeft = 'extend';\n  if (config.extrapolateLeft !== undefined) {\n    extrapolateLeft = config.extrapolateLeft;\n  } else if (config.extrapolate !== undefined) {\n    extrapolateLeft = config.extrapolate;\n  }\n  var extrapolateRight = 'extend';\n  if (config.extrapolateRight !== undefined) {\n    extrapolateRight = config.extrapolateRight;\n  } else if (config.extrapolate !== undefined) {\n    extrapolateRight = config.extrapolate;\n  }\n  return input => {\n    invariant(typeof input === 'number', 'Cannot interpolation an input which is not a number');\n    var range = findRange(input, inputRange);\n    return interpolate(input, inputRange[range], inputRange[range + 1], outputRange[range], outputRange[range + 1], easing, extrapolateLeft, extrapolateRight);\n  };\n}\nfunction interpolate(input, inputMin, inputMax, outputMin, outputMax, easing, extrapolateLeft, extrapolateRight) {\n  var result = input;\n\n  // Extrapolate\n  if (result < inputMin) {\n    if (extrapolateLeft === 'identity') {\n      return result;\n    } else if (extrapolateLeft === 'clamp') {\n      result = inputMin;\n    } else if (extrapolateLeft === 'extend') {\n      // noop\n    }\n  }\n  if (result > inputMax) {\n    if (extrapolateRight === 'identity') {\n      return result;\n    } else if (extrapolateRight === 'clamp') {\n      result = inputMax;\n    } else if (extrapolateRight === 'extend') {\n      // noop\n    }\n  }\n  if (outputMin === outputMax) {\n    return outputMin;\n  }\n  if (inputMin === inputMax) {\n    if (input <= inputMin) {\n      return outputMin;\n    }\n    return outputMax;\n  }\n\n  // Input Range\n  if (inputMin === -Infinity) {\n    result = -result;\n  } else if (inputMax === Infinity) {\n    result = result - inputMin;\n  } else {\n    result = (result - inputMin) / (inputMax - inputMin);\n  }\n\n  // Easing\n  result = easing(result);\n\n  // Output Range\n  if (outputMin === -Infinity) {\n    result = -result;\n  } else if (outputMax === Infinity) {\n    result = result + outputMin;\n  } else {\n    result = result * (outputMax - outputMin) + outputMin;\n  }\n  return result;\n}\nfunction colorToRgba(input) {\n  var normalizedColor = normalizeColor(input);\n  if (normalizedColor === null || typeof normalizedColor !== 'number') {\n    return input;\n  }\n  normalizedColor = normalizedColor || 0;\n  var r = (normalizedColor & 0xff000000) >>> 24;\n  var g = (normalizedColor & 0x00ff0000) >>> 16;\n  var b = (normalizedColor & 0x0000ff00) >>> 8;\n  var a = (normalizedColor & 0x000000ff) / 255;\n  return \"rgba(\" + r + \", \" + g + \", \" + b + \", \" + a + \")\";\n}\nvar stringShapeRegex = /[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:[eE][+-]?\\d+)?/g;\n\n/**\n * Supports string shapes by extracting numbers so new values can be computed,\n * and recombines those values into new strings of the same shape.  Supports\n * things like:\n *\n *   rgba(123, 42, 99, 0.36) // colors\n *   -45deg                  // values with units\n */\nfunction createInterpolationFromStringOutputRange(config) {\n  var outputRange = config.outputRange;\n  invariant(outputRange.length >= 2, 'Bad output range');\n  outputRange = outputRange.map(colorToRgba);\n  checkPattern(outputRange);\n\n  // ['rgba(0, 100, 200, 0)', 'rgba(50, 150, 250, 0.5)']\n  // ->\n  // [\n  //   [0, 50],\n  //   [100, 150],\n  //   [200, 250],\n  //   [0, 0.5],\n  // ]\n  /* $FlowFixMe[incompatible-use] (>=0.18.0): `outputRange[0].match()` can\n   * return `null`. Need to guard against this possibility. */\n  var outputRanges = outputRange[0].match(stringShapeRegex).map(() => []);\n  outputRange.forEach(value => {\n    /* $FlowFixMe[incompatible-use] (>=0.18.0): `value.match()` can return\n     * `null`. Need to guard against this possibility. */\n    value.match(stringShapeRegex).forEach((number, i) => {\n      outputRanges[i].push(+number);\n    });\n  });\n  var interpolations = outputRange[0].match(stringShapeRegex)\n  /* $FlowFixMe[incompatible-use] (>=0.18.0): `outputRange[0].match()` can\n   * return `null`. Need to guard against this possibility. */\n  /* $FlowFixMe[incompatible-call] (>=0.18.0): `outputRange[0].match()` can\n   * return `null`. Need to guard against this possibility. */.map((value, i) => {\n    return createInterpolation(_objectSpread(_objectSpread({}, config), {}, {\n      outputRange: outputRanges[i]\n    }));\n  });\n\n  // rgba requires that the r,g,b are integers.... so we want to round them, but we *dont* want to\n  // round the opacity (4th column).\n  var shouldRound = isRgbOrRgba(outputRange[0]);\n  return input => {\n    var i = 0;\n    // 'rgba(0, 100, 200, 0)'\n    // ->\n    // 'rgba(${interpolations[0](input)}, ${interpolations[1](input)}, ...'\n    return outputRange[0].replace(stringShapeRegex, () => {\n      var val = +interpolations[i++](input);\n      if (shouldRound) {\n        val = i < 4 ? Math.round(val) : Math.round(val * 1000) / 1000;\n      }\n      return String(val);\n    });\n  };\n}\nfunction isRgbOrRgba(range) {\n  return typeof range === 'string' && range.startsWith('rgb');\n}\nfunction checkPattern(arr) {\n  var pattern = arr[0].replace(stringShapeRegex, '');\n  for (var i = 1; i < arr.length; ++i) {\n    invariant(pattern === arr[i].replace(stringShapeRegex, ''), 'invalid pattern ' + arr[0] + ' and ' + arr[i]);\n  }\n}\nfunction findRange(input, inputRange) {\n  var i;\n  for (i = 1; i < inputRange.length - 1; ++i) {\n    if (inputRange[i] >= input) {\n      break;\n    }\n  }\n  return i - 1;\n}\nfunction checkValidInputRange(arr) {\n  invariant(arr.length >= 2, 'inputRange must have at least 2 elements');\n  var message = 'inputRange must be monotonically non-decreasing ' + String(arr);\n  for (var i = 1; i < arr.length; ++i) {\n    invariant(arr[i] >= arr[i - 1], message);\n  }\n}\nfunction checkInfiniteRange(name, arr) {\n  invariant(arr.length >= 2, name + ' must have at least 2 elements');\n  invariant(arr.length !== 2 || arr[0] !== -Infinity || arr[1] !== Infinity,\n  /* $FlowFixMe[incompatible-type] (>=0.13.0) - In the addition expression\n   * below this comment, one or both of the operands may be something that\n   * doesn't cleanly convert to a string, like undefined, null, and object,\n   * etc. If you really mean this implicit string conversion, you can do\n   * something like String(myThing) */\n  name + 'cannot be ]-infinity;+infinity[ ' + arr);\n}\nclass AnimatedInterpolation extends AnimatedWithChildren {\n  // Export for testing.\n\n  constructor(parent, config) {\n    super();\n    this._parent = parent;\n    this._config = config;\n    this._interpolation = createInterpolation(config);\n  }\n  __makeNative(platformConfig) {\n    this._parent.__makeNative(platformConfig);\n    super.__makeNative(platformConfig);\n  }\n  __getValue() {\n    var parentValue = this._parent.__getValue();\n    invariant(typeof parentValue === 'number', 'Cannot interpolate an input which is not a number.');\n    return this._interpolation(parentValue);\n  }\n  interpolate(config) {\n    return new AnimatedInterpolation(this, config);\n  }\n  __attach() {\n    this._parent.__addChild(this);\n  }\n  __detach() {\n    this._parent.__removeChild(this);\n    super.__detach();\n  }\n  __transformDataType(range) {\n    return range.map(NativeAnimatedHelper.transformDataType);\n  }\n  __getNativeConfig() {\n    if (__DEV__) {\n      NativeAnimatedHelper.validateInterpolation(this._config);\n    }\n    return {\n      inputRange: this._config.inputRange,\n      // Only the `outputRange` can contain strings so we don't need to transform `inputRange` here\n      outputRange: this.__transformDataType(this._config.outputRange),\n      extrapolateLeft: this._config.extrapolateLeft || this._config.extrapolate || 'extend',\n      extrapolateRight: this._config.extrapolateRight || this._config.extrapolate || 'extend',\n      type: 'interpolation'\n    };\n  }\n}\nAnimatedInterpolation.__createInterpolation = createInterpolation;\nexport default AnimatedInterpolation;","/**\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 * @format\n */\n\n'use strict';\n\nimport AnimatedInterpolation from './AnimatedInterpolation';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nimport InteractionManager from '../../../../exports/InteractionManager';\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nvar NativeAnimatedAPI = NativeAnimatedHelper.API;\n\n/**\n * Animated works by building a directed acyclic graph of dependencies\n * transparently when you render your Animated components.\n *\n *               new Animated.Value(0)\n *     .interpolate()        .interpolate()    new Animated.Value(1)\n *         opacity               translateY      scale\n *          style                         transform\n *         View#234                         style\n *                                         View#123\n *\n * A) Top Down phase\n * When an Animated.Value is updated, we recursively go down through this\n * graph in order to find leaf nodes: the views that we flag as needing\n * an update.\n *\n * B) Bottom Up phase\n * When a view is flagged as needing an update, we recursively go back up\n * in order to build the new value that it needs. The reason why we need\n * this two-phases process is to deal with composite props such as\n * transform which can receive values from multiple parents.\n */\nfunction _flush(rootNode) {\n  var animatedStyles = new Set();\n  function findAnimatedStyles(node) {\n    /* $FlowFixMe[prop-missing] (>=0.68.0 site=react_native_fb) This comment\n     * suppresses an error found when Flow v0.68 was deployed. To see the error\n     * delete this comment and run Flow. */\n    if (typeof node.update === 'function') {\n      animatedStyles.add(node);\n    } else {\n      node.__getChildren().forEach(findAnimatedStyles);\n    }\n  }\n  findAnimatedStyles(rootNode);\n  // $FlowFixMe[prop-missing]\n  animatedStyles.forEach(animatedStyle => animatedStyle.update());\n}\n\n/**\n * Some operations are executed only on batch end, which is _mostly_ scheduled when\n * Animated component props change. For some of the changes which require immediate execution\n * (e.g. setValue), we create a separate batch in case none is scheduled.\n */\nfunction _executeAsAnimatedBatch(id, operation) {\n  NativeAnimatedAPI.setWaitingForIdentifier(id);\n  operation();\n  NativeAnimatedAPI.unsetWaitingForIdentifier(id);\n}\n\n/**\n * Standard value for driving animations.  One `Animated.Value` can drive\n * multiple properties in a synchronized fashion, but can only be driven by one\n * mechanism at a time.  Using a new mechanism (e.g. starting a new animation,\n * or calling `setValue`) will stop any previous ones.\n *\n * See https://reactnative.dev/docs/animatedvalue\n */\nclass AnimatedValue extends AnimatedWithChildren {\n  constructor(value, config) {\n    super();\n    if (typeof value !== 'number') {\n      throw new Error('AnimatedValue: Attempting to set value to undefined');\n    }\n    this._startingValue = this._value = value;\n    this._offset = 0;\n    this._animation = null;\n    if (config && config.useNativeDriver) {\n      this.__makeNative();\n    }\n  }\n  __detach() {\n    if (this.__isNative) {\n      NativeAnimatedAPI.getValue(this.__getNativeTag(), value => {\n        this._value = value - this._offset;\n      });\n    }\n    this.stopAnimation();\n    super.__detach();\n  }\n  __getValue() {\n    return this._value + this._offset;\n  }\n\n  /**\n   * Directly set the value.  This will stop any animations running on the value\n   * and update all the bound properties.\n   *\n   * See https://reactnative.dev/docs/animatedvalue#setvalue\n   */\n  setValue(value) {\n    if (this._animation) {\n      this._animation.stop();\n      this._animation = null;\n    }\n    this._updateValue(value, !this.__isNative /* don't perform a flush for natively driven values */);\n    if (this.__isNative) {\n      _executeAsAnimatedBatch(this.__getNativeTag().toString(), () => NativeAnimatedAPI.setAnimatedNodeValue(this.__getNativeTag(), value));\n    }\n  }\n\n  /**\n   * Sets an offset that is applied on top of whatever value is set, whether via\n   * `setValue`, an animation, or `Animated.event`.  Useful for compensating\n   * things like the start of a pan gesture.\n   *\n   * See https://reactnative.dev/docs/animatedvalue#setoffset\n   */\n  setOffset(offset) {\n    this._offset = offset;\n    if (this.__isNative) {\n      NativeAnimatedAPI.setAnimatedNodeOffset(this.__getNativeTag(), offset);\n    }\n  }\n\n  /**\n   * Merges the offset value into the base value and resets the offset to zero.\n   * The final output of the value is unchanged.\n   *\n   * See https://reactnative.dev/docs/animatedvalue#flattenoffset\n   */\n  flattenOffset() {\n    this._value += this._offset;\n    this._offset = 0;\n    if (this.__isNative) {\n      NativeAnimatedAPI.flattenAnimatedNodeOffset(this.__getNativeTag());\n    }\n  }\n\n  /**\n   * Sets the offset value to the base value, and resets the base value to zero.\n   * The final output of the value is unchanged.\n   *\n   * See https://reactnative.dev/docs/animatedvalue#extractoffset\n   */\n  extractOffset() {\n    this._offset += this._value;\n    this._value = 0;\n    if (this.__isNative) {\n      NativeAnimatedAPI.extractAnimatedNodeOffset(this.__getNativeTag());\n    }\n  }\n\n  /**\n   * Stops any running animation or tracking. `callback` is invoked with the\n   * final value after stopping the animation, which is useful for updating\n   * state to match the animation position with layout.\n   *\n   * See https://reactnative.dev/docs/animatedvalue#stopanimation\n   */\n  stopAnimation(callback) {\n    this.stopTracking();\n    this._animation && this._animation.stop();\n    this._animation = null;\n    if (callback) {\n      if (this.__isNative) {\n        NativeAnimatedAPI.getValue(this.__getNativeTag(), callback);\n      } else {\n        callback(this.__getValue());\n      }\n    }\n  }\n\n  /**\n   * Stops any animation and resets the value to its original.\n   *\n   * See https://reactnative.dev/docs/animatedvalue#resetanimation\n   */\n  resetAnimation(callback) {\n    this.stopAnimation(callback);\n    this._value = this._startingValue;\n    if (this.__isNative) {\n      NativeAnimatedAPI.setAnimatedNodeValue(this.__getNativeTag(), this._startingValue);\n    }\n  }\n  __onAnimatedValueUpdateReceived(value) {\n    this._updateValue(value, false /*flush*/);\n  }\n\n  /**\n   * Interpolates the value before updating the property, e.g. mapping 0-1 to\n   * 0-10.\n   */\n  interpolate(config) {\n    return new AnimatedInterpolation(this, config);\n  }\n\n  /**\n   * Typically only used internally, but could be used by a custom Animation\n   * class.\n   *\n   * See https://reactnative.dev/docs/animatedvalue#animate\n   */\n  animate(animation, callback) {\n    var handle = null;\n    if (animation.__isInteraction) {\n      handle = InteractionManager.createInteractionHandle();\n    }\n    var previousAnimation = this._animation;\n    this._animation && this._animation.stop();\n    this._animation = animation;\n    animation.start(this._value, value => {\n      // Natively driven animations will never call into that callback\n      this._updateValue(value, true /* flush */);\n    }, result => {\n      this._animation = null;\n      if (handle !== null) {\n        InteractionManager.clearInteractionHandle(handle);\n      }\n      callback && callback(result);\n    }, previousAnimation, this);\n  }\n\n  /**\n   * Typically only used internally.\n   */\n  stopTracking() {\n    this._tracking && this._tracking.__detach();\n    this._tracking = null;\n  }\n\n  /**\n   * Typically only used internally.\n   */\n  track(tracking) {\n    this.stopTracking();\n    this._tracking = tracking;\n    // Make sure that the tracking animation starts executing\n    this._tracking && this._tracking.update();\n  }\n  _updateValue(value, flush) {\n    if (value === undefined) {\n      throw new Error('AnimatedValue: Attempting to set value to undefined');\n    }\n    this._value = value;\n    if (flush) {\n      _flush(this);\n    }\n    super.__callListeners(this.__getValue());\n  }\n  __getNativeConfig() {\n    return {\n      type: 'value',\n      value: this._value,\n      offset: this._offset\n    };\n  }\n}\nexport default AnimatedValue;","/**\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 * @format\n */\n\n'use strict';\n\nimport AnimatedValue from './nodes/AnimatedValue';\nimport NativeAnimatedHelper from './NativeAnimatedHelper';\nimport invariant from 'fbjs/lib/invariant';\nimport { shouldUseNativeDriver } from './NativeAnimatedHelper';\nvar __DEV__ = process.env.NODE_ENV !== 'production';\nexport function attachNativeEvent(viewRef, eventName, argMapping) {\n  // Find animated values in `argMapping` and create an array representing their\n  // key path inside the `nativeEvent` object. Ex.: ['contentOffset', 'x'].\n  var eventMappings = [];\n  var traverse = (value, path) => {\n    if (value instanceof AnimatedValue) {\n      value.__makeNative();\n      eventMappings.push({\n        nativeEventPath: path,\n        animatedValueTag: value.__getNativeTag()\n      });\n    } else if (typeof value === 'object') {\n      for (var _key in value) {\n        traverse(value[_key], path.concat(_key));\n      }\n    }\n  };\n  invariant(argMapping[0] && argMapping[0].nativeEvent, 'Native driven events only support animated values contained inside `nativeEvent`.');\n\n  // Assume that the event containing `nativeEvent` is always the first argument.\n  traverse(argMapping[0].nativeEvent, []);\n  if (viewRef != null) {\n    eventMappings.forEach(mapping => {\n      NativeAnimatedHelper.API.addAnimatedEventToView(viewRef, eventName, mapping);\n    });\n  }\n  return {\n    detach() {\n      if (viewRef != null) {\n        eventMappings.forEach(mapping => {\n          NativeAnimatedHelper.API.removeAnimatedEventFromView(viewRef, eventName,\n          // $FlowFixMe[incompatible-call]\n          mapping.animatedValueTag);\n        });\n      }\n    }\n  };\n}\nfunction validateMapping(argMapping, args) {\n  var validate = (recMapping, recEvt, key) => {\n    if (recMapping instanceof AnimatedValue) {\n      invariant(typeof recEvt === 'number', 'Bad mapping of event key ' + key + ', should be number but got ' + typeof recEvt);\n      return;\n    }\n    if (typeof recEvt === 'number') {\n      invariant(recMapping instanceof AnimatedValue, 'Bad mapping of type ' + typeof recMapping + ' for key ' + key + ', event value must map to AnimatedValue');\n      return;\n    }\n    invariant(typeof recMapping === 'object', 'Bad mapping of type ' + typeof recMapping + ' for key ' + key);\n    invariant(typeof recEvt === 'object', 'Bad event of type ' + typeof recEvt + ' for key ' + key);\n    for (var mappingKey in recMapping) {\n      validate(recMapping[mappingKey], recEvt[mappingKey], mappingKey);\n    }\n  };\n  invariant(args.length >= argMapping.length, 'Event has less arguments than mapping');\n  argMapping.forEach((mapping, idx) => {\n    validate(mapping, args[idx], 'arg' + idx);\n  });\n}\nexport class AnimatedEvent {\n  constructor(argMapping, config) {\n    this._listeners = [];\n    this._argMapping = argMapping;\n    if (config == null) {\n      console.warn('Animated.event now requires a second argument for options');\n      config = {\n        useNativeDriver: false\n      };\n    }\n    if (config.listener) {\n      this.__addListener(config.listener);\n    }\n    this._callListeners = this._callListeners.bind(this);\n    this._attachedEvent = null;\n    this.__isNative = shouldUseNativeDriver(config);\n  }\n  __addListener(callback) {\n    this._listeners.push(callback);\n  }\n  __removeListener(callback) {\n    this._listeners = this._listeners.filter(listener => listener !== callback);\n  }\n  __attach(viewRef, eventName) {\n    invariant(this.__isNative, 'Only native driven events need to be attached.');\n    this._attachedEvent = attachNativeEvent(viewRef, eventName, this._argMapping);\n  }\n  __detach(viewTag, eventName) {\n    invariant(this.__isNative, 'Only native driven events need to be detached.');\n    this._attachedEvent && this._attachedEvent.detach();\n  }\n  __getHandler() {\n    var _this = this;\n    if (this.__isNative) {\n      if (__DEV__) {\n        var _validatedMapping = false;\n        return function () {\n          for (var _len = arguments.length, args = new Array(_len), _key2 = 0; _key2 < _len; _key2++) {\n            args[_key2] = arguments[_key2];\n          }\n          if (!_validatedMapping) {\n            validateMapping(_this._argMapping, args);\n            _validatedMapping = true;\n          }\n          _this._callListeners(...args);\n        };\n      } else {\n        return this._callListeners;\n      }\n    }\n    var validatedMapping = false;\n    return function () {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key3 = 0; _key3 < _len2; _key3++) {\n        args[_key3] = arguments[_key3];\n      }\n      if (__DEV__ && !validatedMapping) {\n        validateMapping(_this._argMapping, args);\n        validatedMapping = true;\n      }\n      var traverse = (recMapping, recEvt, key) => {\n        if (recMapping instanceof AnimatedValue) {\n          if (typeof recEvt === 'number') {\n            recMapping.setValue(recEvt);\n          }\n        } else if (typeof recMapping === 'object') {\n          for (var mappingKey in recMapping) {\n            /* $FlowFixMe(>=0.120.0) This comment suppresses an error found\n             * when Flow v0.120 was deployed. To see the error, delete this\n             * comment and run Flow. */\n            traverse(recMapping[mappingKey], recEvt[mappingKey], mappingKey);\n          }\n        }\n      };\n      _this._argMapping.forEach((mapping, idx) => {\n        traverse(mapping, args[idx], 'arg' + idx);\n      });\n      _this._callListeners(...args);\n    };\n  }\n  _callListeners() {\n    for (var _len3 = arguments.length, args = new Array(_len3), _key4 = 0; _key4 < _len3; _key4++) {\n      args[_key4] = arguments[_key4];\n    }\n    this._listeners.forEach(listener => listener(...args));\n  }\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 * @format\n */\n\n'use strict';\n\nimport AnimatedNode from './AnimatedNode';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nclass AnimatedTransform extends AnimatedWithChildren {\n  constructor(transforms) {\n    super();\n    this._transforms = transforms;\n  }\n  __makeNative() {\n    this._transforms.forEach(transform => {\n      for (var key in transform) {\n        var value = transform[key];\n        if (value instanceof AnimatedNode) {\n          value.__makeNative();\n        }\n      }\n    });\n    super.__makeNative();\n  }\n  __getValue() {\n    return this._transforms.map(transform => {\n      var result = {};\n      for (var key in transform) {\n        var value = transform[key];\n        if (value instanceof AnimatedNode) {\n          result[key] = value.__getValue();\n        } else {\n          result[key] = value;\n        }\n      }\n      return result;\n    });\n  }\n  __getAnimatedValue() {\n    return this._transforms.map(transform => {\n      var result = {};\n      for (var key in transform) {\n        var value = transform[key];\n        if (value instanceof AnimatedNode) {\n          result[key] = value.__getAnimatedValue();\n        } else {\n          // All transform components needed to recompose matrix\n          result[key] = value;\n        }\n      }\n      return result;\n    });\n  }\n  __attach() {\n    this._transforms.forEach(transform => {\n      for (var key in transform) {\n        var value = transform[key];\n        if (value instanceof AnimatedNode) {\n          value.__addChild(this);\n        }\n      }\n    });\n  }\n  __detach() {\n    this._transforms.forEach(transform => {\n      for (var key in transform) {\n        var value = transform[key];\n        if (value instanceof AnimatedNode) {\n          value.__removeChild(this);\n        }\n      }\n    });\n    super.__detach();\n  }\n  __getNativeConfig() {\n    var transConfigs = [];\n    this._transforms.forEach(transform => {\n      for (var key in transform) {\n        var value = transform[key];\n        if (value instanceof AnimatedNode) {\n          transConfigs.push({\n            type: 'animated',\n            property: key,\n            nodeTag: value.__getNativeTag()\n          });\n        } else {\n          transConfigs.push({\n            type: 'static',\n            property: key,\n            value: NativeAnimatedHelper.transformDataType(value)\n          });\n        }\n      }\n    });\n    NativeAnimatedHelper.validateTransform(transConfigs);\n    return {\n      type: 'transform',\n      transforms: transConfigs\n    };\n  }\n}\nexport default AnimatedTransform;","/**\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 * @format\n */\n\n'use strict';\n\nimport AnimatedNode from './AnimatedNode';\nimport AnimatedTransform from './AnimatedTransform';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nimport StyleSheet from '../../../../exports/StyleSheet';\nvar flattenStyle = StyleSheet.flatten;\nfunction createAnimatedStyle(inputStyle) {\n  var style = flattenStyle(inputStyle);\n  var animatedStyles = {};\n  for (var key in style) {\n    var value = style[key];\n    if (key === 'transform' && Array.isArray(value)) {\n      animatedStyles[key] = new AnimatedTransform(value);\n    } else if (value instanceof AnimatedNode) {\n      animatedStyles[key] = value;\n    } else if (value && !Array.isArray(value) && typeof value === 'object') {\n      animatedStyles[key] = createAnimatedStyle(value);\n    }\n  }\n  return animatedStyles;\n}\nclass AnimatedStyle extends AnimatedWithChildren {\n  constructor(style) {\n    super();\n    this._inputStyle = style;\n    this._style = createAnimatedStyle(style);\n  }\n\n  // Recursively get values for nested styles (like iOS's shadowOffset)\n  _walkStyleAndGetValues(style) {\n    var updatedStyle = {};\n    for (var key in style) {\n      var value = style[key];\n      if (value instanceof AnimatedNode) {\n        if (!value.__isNative) {\n          // We cannot use value of natively driven nodes this way as the value we have access from\n          // JS may not be up to date.\n          updatedStyle[key] = value.__getValue();\n        }\n      } else if (value && !Array.isArray(value) && typeof value === 'object') {\n        // Support animating nested values (for example: shadowOffset.height)\n        updatedStyle[key] = this._walkStyleAndGetValues(value);\n      } else {\n        updatedStyle[key] = value;\n      }\n    }\n    return updatedStyle;\n  }\n  __getValue() {\n    return [this._inputStyle, this._walkStyleAndGetValues(this._style)];\n  }\n\n  // Recursively get animated values for nested styles (like iOS's shadowOffset)\n  _walkStyleAndGetAnimatedValues(style) {\n    var updatedStyle = {};\n    for (var key in style) {\n      var value = style[key];\n      if (value instanceof AnimatedNode) {\n        updatedStyle[key] = value.__getAnimatedValue();\n      } else if (value && !Array.isArray(value) && typeof value === 'object') {\n        // Support animating nested values (for example: shadowOffset.height)\n        updatedStyle[key] = this._walkStyleAndGetAnimatedValues(value);\n      }\n    }\n    return updatedStyle;\n  }\n  __getAnimatedValue() {\n    return this._walkStyleAndGetAnimatedValues(this._style);\n  }\n  __attach() {\n    for (var key in this._style) {\n      var value = this._style[key];\n      if (value instanceof AnimatedNode) {\n        value.__addChild(this);\n      }\n    }\n  }\n  __detach() {\n    for (var key in this._style) {\n      var value = this._style[key];\n      if (value instanceof AnimatedNode) {\n        value.__removeChild(this);\n      }\n    }\n    super.__detach();\n  }\n  __makeNative() {\n    for (var key in this._style) {\n      var value = this._style[key];\n      if (value instanceof AnimatedNode) {\n        value.__makeNative();\n      }\n    }\n    super.__makeNative();\n  }\n  __getNativeConfig() {\n    var styleConfig = {};\n    for (var styleKey in this._style) {\n      if (this._style[styleKey] instanceof AnimatedNode) {\n        var style = this._style[styleKey];\n        style.__makeNative();\n        styleConfig[styleKey] = style.__getNativeTag();\n      }\n    }\n    NativeAnimatedHelper.validateStyles(styleConfig);\n    return {\n      type: 'style',\n      style: styleConfig\n    };\n  }\n}\nexport default AnimatedStyle;","/**\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 * @format\n */\n\n'use strict';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport { AnimatedEvent } from '../AnimatedEvent';\nimport AnimatedNode from './AnimatedNode';\nimport AnimatedStyle from './AnimatedStyle';\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nimport invariant from 'fbjs/lib/invariant';\nclass AnimatedProps extends AnimatedNode {\n  constructor(props, callback) {\n    super();\n    if (props.style) {\n      props = _objectSpread(_objectSpread({}, props), {}, {\n        style: new AnimatedStyle(props.style)\n      });\n    }\n    this._props = props;\n    this._callback = callback;\n  }\n  __getValue() {\n    var props = {};\n    for (var key in this._props) {\n      var value = this._props[key];\n      if (value instanceof AnimatedNode) {\n        if (!value.__isNative || value instanceof AnimatedStyle) {\n          // We cannot use value of natively driven nodes this way as the value we have access from\n          // JS may not be up to date.\n          props[key] = value.__getValue();\n        }\n      } else if (value instanceof AnimatedEvent) {\n        props[key] = value.__getHandler();\n      } else {\n        props[key] = value;\n      }\n    }\n    return props;\n  }\n  __getAnimatedValue() {\n    var props = {};\n    for (var key in this._props) {\n      var value = this._props[key];\n      if (value instanceof AnimatedNode) {\n        props[key] = value.__getAnimatedValue();\n      }\n    }\n    return props;\n  }\n  __attach() {\n    for (var key in this._props) {\n      var value = this._props[key];\n      if (value instanceof AnimatedNode) {\n        value.__addChild(this);\n      }\n    }\n  }\n  __detach() {\n    if (this.__isNative && this._animatedView) {\n      this.__disconnectAnimatedView();\n    }\n    this._animatedView = null;\n    for (var key in this._props) {\n      var value = this._props[key];\n      if (value instanceof AnimatedNode) {\n        value.__removeChild(this);\n      }\n    }\n    super.__detach();\n  }\n  update() {\n    this._callback();\n  }\n  __makeNative() {\n    if (!this.__isNative) {\n      this.__isNative = true;\n      for (var key in this._props) {\n        var value = this._props[key];\n        if (value instanceof AnimatedNode) {\n          value.__makeNative();\n        }\n      }\n      if (this._animatedView) {\n        this.__connectAnimatedView();\n      }\n    }\n  }\n  setNativeView(animatedView) {\n    if (this._animatedView === animatedView) {\n      return;\n    }\n    this._animatedView = animatedView;\n    if (this.__isNative) {\n      this.__connectAnimatedView();\n    }\n  }\n  __connectAnimatedView() {\n    invariant(this.__isNative, 'Expected node to be marked as \"native\"');\n    var nativeViewTag = this._animatedView;\n    invariant(nativeViewTag != null, 'Unable to locate attached view in the native tree');\n    NativeAnimatedHelper.API.connectAnimatedNodeToView(this.__getNativeTag(), nativeViewTag);\n  }\n  __disconnectAnimatedView() {\n    invariant(this.__isNative, 'Expected node to be marked as \"native\"');\n    var nativeViewTag = this._animatedView;\n    invariant(nativeViewTag != null, 'Unable to locate attached view in the native tree');\n    NativeAnimatedHelper.API.disconnectAnimatedNodeFromView(this.__getNativeTag(), nativeViewTag);\n  }\n  __restoreDefaultValues() {\n    // When using the native driver, view properties need to be restored to\n    // their default values manually since react no longer tracks them. This\n    // is needed to handle cases where a prop driven by native animated is removed\n    // after having been changed natively by an animation.\n    if (this.__isNative) {\n      NativeAnimatedHelper.API.restoreDefaultValues(this.__getNativeTag());\n    }\n  }\n  __getNativeConfig() {\n    var propsConfig = {};\n    for (var propKey in this._props) {\n      var value = this._props[propKey];\n      if (value instanceof AnimatedNode) {\n        value.__makeNative();\n        propsConfig[propKey] = value.__getNativeTag();\n      }\n    }\n    return {\n      type: 'props',\n      props: propsConfig\n    };\n  }\n}\nexport default AnimatedProps;","/**\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 * @format\n */\n\n'use strict';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport AnimatedProps from './nodes/AnimatedProps';\nimport { AnimatedEvent } from './AnimatedEvent';\nimport useRefEffect from '../Utilities/useRefEffect';\nimport NativeAnimatedHelper from './NativeAnimatedHelper';\nimport { useCallback, useEffect, useMemo, useReducer, useRef } from 'react';\nimport useLayoutEffect from '../../../modules/useLayoutEffect';\nexport default function useAnimatedProps(props) {\n  var _useReducer = useReducer(count => count + 1, 0),\n    scheduleUpdate = _useReducer[1];\n  var onUpdateRef = useRef(null);\n\n  // TODO: Only invalidate `node` if animated props or `style` change. In the\n  // previous implementation, we permitted `style` to override props with the\n  // same name property name as styles, so we can probably continue doing that.\n  // The ordering of other props *should* not matter.\n  var node = useMemo(() => new AnimatedProps(props, () => onUpdateRef.current == null ? void 0 : onUpdateRef.current()), [props]);\n  useAnimatedPropsLifecycle(node);\n\n  // TODO: This \"effect\" does three things:\n  //\n  //   1) Call `setNativeView`.\n  //   2) Update `onUpdateRef`.\n  //   3) Update listeners for `AnimatedEvent` props.\n  //\n  // Ideally, each of these would be separat \"effects\" so that they are not\n  // unnecessarily re-run when irrelevant dependencies change. For example, we\n  // should be able to hoist all `AnimatedEvent` props and only do #3 if either\n  // the `AnimatedEvent` props change or `instance` changes.\n  //\n  // But there is no way to transparently compose three separate callback refs,\n  // so we just combine them all into one for now.\n  var refEffect = useCallback(instance => {\n    // NOTE: This may be called more often than necessary (e.g. when `props`\n    // changes), but `setNativeView` already optimizes for that.\n    node.setNativeView(instance);\n\n    // NOTE: This callback is only used by the JavaScript animation driver.\n    onUpdateRef.current = () => {\n      // Schedule an update for this component to update `reducedProps`,\n      // but do not compute it immediately. If a parent also updated, we\n      // need to merge those new props in before updating.\n      scheduleUpdate();\n    };\n    var target = getEventTarget(instance);\n    var events = [];\n    for (var propName in props) {\n      var propValue = props[propName];\n      if (propValue instanceof AnimatedEvent && propValue.__isNative) {\n        propValue.__attach(target, propName);\n        events.push([propName, propValue]);\n      }\n    }\n    return () => {\n      onUpdateRef.current = null;\n      for (var _i = 0, _events = events; _i < _events.length; _i++) {\n        var _events$_i = _events[_i],\n          _propName = _events$_i[0],\n          _propValue = _events$_i[1];\n        _propValue.__detach(target, _propName);\n      }\n    };\n  }, [props, node]);\n  var callbackRef = useRefEffect(refEffect);\n  return [reduceAnimatedProps(node), callbackRef];\n}\nfunction reduceAnimatedProps(node) {\n  // Force `collapsable` to be false so that the native view is not flattened.\n  // Flattened views cannot be accurately referenced by the native driver.\n  return _objectSpread(_objectSpread({}, node.__getValue()), {}, {\n    collapsable: false\n  });\n}\n\n/**\n * Manages the lifecycle of the supplied `AnimatedProps` by invoking `__attach`\n * and `__detach`. However, this is more complicated because `AnimatedProps`\n * uses reference counting to determine when to recursively detach its children\n * nodes. So in order to optimize this, we avoid detaching until the next attach\n * unless we are unmounting.\n */\nfunction useAnimatedPropsLifecycle(node) {\n  var prevNodeRef = useRef(null);\n  var isUnmountingRef = useRef(false);\n  useEffect(() => {\n    // It is ok for multiple components to call `flushQueue` because it noops\n    // if the queue is empty. When multiple animated components are mounted at\n    // the same time. Only first component flushes the queue and the others will noop.\n    NativeAnimatedHelper.API.flushQueue();\n  });\n  useLayoutEffect(() => {\n    isUnmountingRef.current = false;\n    return () => {\n      isUnmountingRef.current = true;\n    };\n  }, []);\n  useLayoutEffect(() => {\n    node.__attach();\n    if (prevNodeRef.current != null) {\n      var prevNode = prevNodeRef.current;\n      // TODO: Stop restoring default values (unless `reset` is called).\n      prevNode.__restoreDefaultValues();\n      prevNode.__detach();\n      prevNodeRef.current = null;\n    }\n    return () => {\n      if (isUnmountingRef.current) {\n        // NOTE: Do not restore default values on unmount, see D18197735.\n        node.__detach();\n      } else {\n        prevNodeRef.current = node;\n      }\n    };\n  }, [node]);\n}\nfunction getEventTarget(instance) {\n  return typeof instance === 'object' && typeof (instance == null ? void 0 : instance.getScrollableNode) === 'function' ?\n  // $FlowFixMe[incompatible-use] - Legacy instance assumptions.\n  instance.getScrollableNode() : instance;\n}\n\n// $FlowFixMe[unclear-type] - Legacy instance assumptions.\nfunction isFabricInstance(instance) {\n  var _instance$getScrollRe;\n  return hasFabricHandle(instance) ||\n  // Some components have a setNativeProps function but aren't a host component\n  // such as lists like FlatList and SectionList. These should also use\n  // forceUpdate in Fabric since setNativeProps doesn't exist on the underlying\n  // host component. This crazy hack is essentially special casing those lists and\n  // ScrollView itself to use forceUpdate in Fabric.\n  // If these components end up using forwardRef then these hacks can go away\n  // as instance would actually be the underlying host component and the above check\n  // would be sufficient.\n  hasFabricHandle(instance == null ? void 0 : instance.getNativeScrollRef == null ? void 0 : instance.getNativeScrollRef()) || hasFabricHandle(instance == null ? void 0 : instance.getScrollResponder == null ? void 0 : (_instance$getScrollRe = instance.getScrollResponder()) == null ? void 0 : _instance$getScrollRe.getNativeScrollRef == null ? void 0 : _instance$getScrollRe.getNativeScrollRef());\n}\n\n// $FlowFixMe[unclear-type] - Legacy instance assumptions.\nfunction hasFabricHandle(instance) {\n  var _instance$_internalIn, _instance$_internalIn2;\n  // eslint-disable-next-line dot-notation\n  return (instance == null ? void 0 : (_instance$_internalIn = instance['_internalInstanceHandle']) == null ? void 0 : (_instance$_internalIn2 = _instance$_internalIn.stateNode) == null ? void 0 : _instance$_internalIn2.canonical) != null;\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"style\"];\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 * @format\n */\n\nimport useAnimatedProps from './useAnimatedProps';\nimport useMergeRefs from '../Utilities/useMergeRefs';\nimport StyleSheet from '../../../exports/StyleSheet';\nimport View from '../../../exports/View';\nimport * as React from 'react';\n/**\n * Experimental implementation of `createAnimatedComponent` that is intended to\n * be compatible with concurrent rendering.\n */\nexport default function createAnimatedComponent(Component) {\n  return /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n    var _useAnimatedProps = useAnimatedProps(props),\n      reducedProps = _useAnimatedProps[0],\n      callbackRef = _useAnimatedProps[1];\n    var ref = useMergeRefs(callbackRef, forwardedRef);\n\n    // Some components require explicit passthrough values for animation\n    // to work properly. For example, if an animated component is\n    // transformed and Pressable, onPress will not work after transform\n    // without these passthrough values.\n    // $FlowFixMe[prop-missing]\n    var passthroughAnimatedPropExplicitValues = reducedProps.passthroughAnimatedPropExplicitValues,\n      style = reducedProps.style;\n    var _ref = passthroughAnimatedPropExplicitValues !== null && passthroughAnimatedPropExplicitValues !== void 0 ? passthroughAnimatedPropExplicitValues : {},\n      passthroughStyle = _ref.style,\n      passthroughProps = _objectWithoutPropertiesLoose(_ref, _excluded);\n    var mergedStyle = [style, passthroughStyle];\n    return /*#__PURE__*/React.createElement(Component, _extends({}, reducedProps, passthroughProps, {\n      style: mergedStyle,\n      ref: ref\n    }));\n  });\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 * @format\n */\n\nimport { useCallback, useRef } from 'react';\n/**\n * Constructs a callback ref that provides similar semantics as `useEffect`. The\n * supplied `effect` callback will be called with non-null component instances.\n * The `effect` callback can also optionally return a cleanup function.\n *\n * When a component is updated or unmounted, the cleanup function is called. The\n * `effect` callback will then be called again, if applicable.\n *\n * When a new `effect` callback is supplied, the previously returned cleanup\n * function will be called before the new `effect` callback is called with the\n * same instance.\n *\n * WARNING: The `effect` callback should be stable (e.g. using `useCallback`).\n */\nexport default function useRefEffect(effect) {\n  var cleanupRef = useRef(undefined);\n  return useCallback(instance => {\n    if (cleanupRef.current) {\n      cleanupRef.current();\n      cleanupRef.current = undefined;\n    }\n    if (instance != null) {\n      cleanupRef.current = effect(instance);\n    }\n  }, [effect]);\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 * @format\n */\n\nimport { useCallback } from 'react';\n/**\n * Constructs a new ref that forwards new values to each of the given refs. The\n * given refs will always be invoked in the order that they are supplied.\n *\n * WARNING: A known problem of merging refs using this approach is that if any\n * of the given refs change, the returned callback ref will also be changed. If\n * the returned callback ref is supplied as a `ref` to a React element, this may\n * lead to problems with the given refs being invoked more times than desired.\n */\nexport default function useMergeRefs() {\n  for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {\n    refs[_key] = arguments[_key];\n  }\n  return useCallback(current => {\n    for (var _i = 0, _refs = refs; _i < _refs.length; _i++) {\n      var ref = _refs[_i];\n      if (ref != null) {\n        if (typeof ref === 'function') {\n          ref(current);\n        } else {\n          ref.current = current;\n        }\n      }\n    }\n  }, [...refs] // eslint-disable-line react-hooks/exhaustive-deps\n  );\n}","import _extends from \"@babel/runtime/helpers/extends\";\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 * @format\n */\n\nimport * as React from 'react';\nimport FlatList from '../../../../exports/FlatList';\nimport createAnimatedComponent from '../createAnimatedComponent';\n/**\n * @see https://github.com/facebook/react-native/commit/b8c8562\n */\nvar FlatListWithEventThrottle = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(FlatList, _extends({\n  scrollEventThrottle: 0.0001\n}, props, {\n  ref: ref\n})));\nexport default createAnimatedComponent(FlatListWithEventThrottle);","/**\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 * @format\n */\n\nimport * as React from 'react';\nimport Image from '../../../../exports/Image';\nimport createAnimatedComponent from '../createAnimatedComponent';\nexport default createAnimatedComponent(Image);","import _extends from \"@babel/runtime/helpers/extends\";\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 * @format\n */\n\nimport * as React from 'react';\nimport ScrollView from '../../../../exports/ScrollView';\nimport createAnimatedComponent from '../createAnimatedComponent';\n/**\n * @see https://github.com/facebook/react-native/commit/b8c8562\n */\nvar ScrollViewWithEventThrottle = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(ScrollView, _extends({\n  scrollEventThrottle: 0.0001\n}, props, {\n  ref: ref\n})));\nexport default createAnimatedComponent(ScrollViewWithEventThrottle);","import _extends from \"@babel/runtime/helpers/extends\";\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 * @format\n */\n\nimport * as React from 'react';\nimport SectionList from '../../../../exports/SectionList';\nimport createAnimatedComponent from '../createAnimatedComponent';\n/**\n * @see https://github.com/facebook/react-native/commit/b8c8562\n */\nvar SectionListWithEventThrottle = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SectionList, _extends({\n  scrollEventThrottle: 0.0001\n}, props, {\n  ref: ref\n})));\nexport default createAnimatedComponent(SectionListWithEventThrottle);","/**\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 * @format\n */\n\nimport * as React from 'react';\nimport Text from '../../../../exports/Text';\nimport createAnimatedComponent from '../createAnimatedComponent';\nexport default createAnimatedComponent(Text);","/**\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 * @format\n */\n\nimport * as React from 'react';\nimport View from '../../../../exports/View';\nimport createAnimatedComponent from '../createAnimatedComponent';\nexport default createAnimatedComponent(View);","/**\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 * @format\n */\n\n'use strict';\n\nimport AnimatedInterpolation from './AnimatedInterpolation';\nimport AnimatedValue from './AnimatedValue';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nclass AnimatedAddition extends AnimatedWithChildren {\n  constructor(a, b) {\n    super();\n    this._a = typeof a === 'number' ? new AnimatedValue(a) : a;\n    this._b = typeof b === 'number' ? new AnimatedValue(b) : b;\n  }\n  __makeNative(platformConfig) {\n    this._a.__makeNative(platformConfig);\n    this._b.__makeNative(platformConfig);\n    super.__makeNative(platformConfig);\n  }\n  __getValue() {\n    return this._a.__getValue() + this._b.__getValue();\n  }\n  interpolate(config) {\n    return new AnimatedInterpolation(this, config);\n  }\n  __attach() {\n    this._a.__addChild(this);\n    this._b.__addChild(this);\n  }\n  __detach() {\n    this._a.__removeChild(this);\n    this._b.__removeChild(this);\n    super.__detach();\n  }\n  __getNativeConfig() {\n    return {\n      type: 'addition',\n      input: [this._a.__getNativeTag(), this._b.__getNativeTag()]\n    };\n  }\n}\nexport default AnimatedAddition;","/**\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 * @format\n */\n\n'use strict';\n\nimport AnimatedInterpolation from './AnimatedInterpolation';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nclass AnimatedDiffClamp extends AnimatedWithChildren {\n  constructor(a, min, max) {\n    super();\n    this._a = a;\n    this._min = min;\n    this._max = max;\n    this._value = this._lastValue = this._a.__getValue();\n  }\n  __makeNative(platformConfig) {\n    this._a.__makeNative(platformConfig);\n    super.__makeNative(platformConfig);\n  }\n  interpolate(config) {\n    return new AnimatedInterpolation(this, config);\n  }\n  __getValue() {\n    var value = this._a.__getValue();\n    var diff = value - this._lastValue;\n    this._lastValue = value;\n    this._value = Math.min(Math.max(this._value + diff, this._min), this._max);\n    return this._value;\n  }\n  __attach() {\n    this._a.__addChild(this);\n  }\n  __detach() {\n    this._a.__removeChild(this);\n    super.__detach();\n  }\n  __getNativeConfig() {\n    return {\n      type: 'diffclamp',\n      input: this._a.__getNativeTag(),\n      min: this._min,\n      max: this._max\n    };\n  }\n}\nexport default AnimatedDiffClamp;","/**\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 * @format\n */\n\n'use strict';\n\nimport AnimatedInterpolation from './AnimatedInterpolation';\nimport AnimatedNode from './AnimatedNode';\nimport AnimatedValue from './AnimatedValue';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nclass AnimatedDivision extends AnimatedWithChildren {\n  constructor(a, b) {\n    super();\n    this._warnedAboutDivideByZero = false;\n    if (b === 0 || b instanceof AnimatedNode && b.__getValue() === 0) {\n      console.error('Detected potential division by zero in AnimatedDivision');\n    }\n    this._a = typeof a === 'number' ? new AnimatedValue(a) : a;\n    this._b = typeof b === 'number' ? new AnimatedValue(b) : b;\n  }\n  __makeNative(platformConfig) {\n    this._a.__makeNative(platformConfig);\n    this._b.__makeNative(platformConfig);\n    super.__makeNative(platformConfig);\n  }\n  __getValue() {\n    var a = this._a.__getValue();\n    var b = this._b.__getValue();\n    if (b === 0) {\n      // Prevent spamming the console/LogBox\n      if (!this._warnedAboutDivideByZero) {\n        console.error('Detected division by zero in AnimatedDivision');\n        this._warnedAboutDivideByZero = true;\n      }\n      // Passing infinity/NaN to Fabric will cause a native crash\n      return 0;\n    }\n    this._warnedAboutDivideByZero = false;\n    return a / b;\n  }\n  interpolate(config) {\n    return new AnimatedInterpolation(this, config);\n  }\n  __attach() {\n    this._a.__addChild(this);\n    this._b.__addChild(this);\n  }\n  __detach() {\n    this._a.__removeChild(this);\n    this._b.__removeChild(this);\n    super.__detach();\n  }\n  __getNativeConfig() {\n    return {\n      type: 'division',\n      input: [this._a.__getNativeTag(), this._b.__getNativeTag()]\n    };\n  }\n}\nexport default AnimatedDivision;","/**\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 * @format\n */\n\n'use strict';\n\nimport AnimatedInterpolation from './AnimatedInterpolation';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nclass AnimatedModulo extends AnimatedWithChildren {\n  constructor(a, modulus) {\n    super();\n    this._a = a;\n    this._modulus = modulus;\n  }\n  __makeNative(platformConfig) {\n    this._a.__makeNative(platformConfig);\n    super.__makeNative(platformConfig);\n  }\n  __getValue() {\n    return (this._a.__getValue() % this._modulus + this._modulus) % this._modulus;\n  }\n  interpolate(config) {\n    return new AnimatedInterpolation(this, config);\n  }\n  __attach() {\n    this._a.__addChild(this);\n  }\n  __detach() {\n    this._a.__removeChild(this);\n    super.__detach();\n  }\n  __getNativeConfig() {\n    return {\n      type: 'modulus',\n      input: this._a.__getNativeTag(),\n      modulus: this._modulus\n    };\n  }\n}\nexport default AnimatedModulo;","/**\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 * @format\n */\n\n'use strict';\n\nimport AnimatedInterpolation from './AnimatedInterpolation';\nimport AnimatedValue from './AnimatedValue';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nclass AnimatedMultiplication extends AnimatedWithChildren {\n  constructor(a, b) {\n    super();\n    this._a = typeof a === 'number' ? new AnimatedValue(a) : a;\n    this._b = typeof b === 'number' ? new AnimatedValue(b) : b;\n  }\n  __makeNative(platformConfig) {\n    this._a.__makeNative(platformConfig);\n    this._b.__makeNative(platformConfig);\n    super.__makeNative(platformConfig);\n  }\n  __getValue() {\n    return this._a.__getValue() * this._b.__getValue();\n  }\n  interpolate(config) {\n    return new AnimatedInterpolation(this, config);\n  }\n  __attach() {\n    this._a.__addChild(this);\n    this._b.__addChild(this);\n  }\n  __detach() {\n    this._a.__removeChild(this);\n    this._b.__removeChild(this);\n    super.__detach();\n  }\n  __getNativeConfig() {\n    return {\n      type: 'multiplication',\n      input: [this._a.__getNativeTag(), this._b.__getNativeTag()]\n    };\n  }\n}\nexport default AnimatedMultiplication;","/**\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 * @format\n */\n\n'use strict';\n\nimport AnimatedInterpolation from './AnimatedInterpolation';\nimport AnimatedValue from './AnimatedValue';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nclass AnimatedSubtraction extends AnimatedWithChildren {\n  constructor(a, b) {\n    super();\n    this._a = typeof a === 'number' ? new AnimatedValue(a) : a;\n    this._b = typeof b === 'number' ? new AnimatedValue(b) : b;\n  }\n  __makeNative(platformConfig) {\n    this._a.__makeNative(platformConfig);\n    this._b.__makeNative(platformConfig);\n    super.__makeNative(platformConfig);\n  }\n  __getValue() {\n    return this._a.__getValue() - this._b.__getValue();\n  }\n  interpolate(config) {\n    return new AnimatedInterpolation(this, config);\n  }\n  __attach() {\n    this._a.__addChild(this);\n    this._b.__addChild(this);\n  }\n  __detach() {\n    this._a.__removeChild(this);\n    this._b.__removeChild(this);\n    super.__detach();\n  }\n  __getNativeConfig() {\n    return {\n      type: 'subtraction',\n      input: [this._a.__getNativeTag(), this._b.__getNativeTag()]\n    };\n  }\n}\nexport default AnimatedSubtraction;","/**\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 * @format\n */\n\n'use strict';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport AnimatedValue from './AnimatedValue';\nimport AnimatedNode from './AnimatedNode';\nimport { generateNewAnimationId, shouldUseNativeDriver } from '../NativeAnimatedHelper';\nclass AnimatedTracking extends AnimatedNode {\n  constructor(value, parent, animationClass, animationConfig, callback) {\n    super();\n    this._value = value;\n    this._parent = parent;\n    this._animationClass = animationClass;\n    this._animationConfig = animationConfig;\n    this._useNativeDriver = shouldUseNativeDriver(animationConfig);\n    this._callback = callback;\n    this.__attach();\n  }\n  __makeNative() {\n    this.__isNative = true;\n    this._parent.__makeNative();\n    super.__makeNative();\n    this._value.__makeNative();\n  }\n  __getValue() {\n    return this._parent.__getValue();\n  }\n  __attach() {\n    this._parent.__addChild(this);\n    if (this._useNativeDriver) {\n      // when the tracking starts we need to convert this node to a \"native node\"\n      // so that the parent node will be made \"native\" too. This is necessary as\n      // if we don't do this `update` method will get called. At that point it\n      // may be too late as it would mean the JS driver has already started\n      // updating node values\n      this.__makeNative();\n    }\n  }\n  __detach() {\n    this._parent.__removeChild(this);\n    super.__detach();\n  }\n  update() {\n    this._value.animate(new this._animationClass(_objectSpread(_objectSpread({}, this._animationConfig), {}, {\n      toValue: this._animationConfig.toValue.__getValue()\n    })), this._callback);\n  }\n  __getNativeConfig() {\n    var animation = new this._animationClass(_objectSpread(_objectSpread({}, this._animationConfig), {}, {\n      // remove toValue from the config as it's a ref to Animated.Value\n      toValue: undefined\n    }));\n    var animationConfig = animation.__getNativeAnimationConfig();\n    return {\n      type: 'tracking',\n      animationId: generateNewAnimationId(),\n      animationConfig,\n      toValue: this._parent.__getNativeTag(),\n      value: this._value.__getNativeTag()\n    };\n  }\n}\nexport default AnimatedTracking;","/**\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 * @format\n */\n\n'use strict';\n\nimport AnimatedValue from './AnimatedValue';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nimport invariant from 'fbjs/lib/invariant';\nvar _uniqueId = 1;\n\n/**\n * 2D Value for driving 2D animations, such as pan gestures. Almost identical\n * API to normal `Animated.Value`, but multiplexed.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html\n */\nclass AnimatedValueXY extends AnimatedWithChildren {\n  constructor(valueIn) {\n    super();\n    var value = valueIn || {\n      x: 0,\n      y: 0\n    }; // fixme: shouldn't need `: any`\n    if (typeof value.x === 'number' && typeof value.y === 'number') {\n      this.x = new AnimatedValue(value.x);\n      this.y = new AnimatedValue(value.y);\n    } else {\n      invariant(value.x instanceof AnimatedValue && value.y instanceof AnimatedValue, 'AnimatedValueXY must be initialized with an object of numbers or ' + 'AnimatedValues.');\n      this.x = value.x;\n      this.y = value.y;\n    }\n    this._listeners = {};\n  }\n\n  /**\n   * Directly set the value. This will stop any animations running on the value\n   * and update all the bound properties.\n   *\n   * See https://reactnative.dev/docs/animatedvaluexy.html#setvalue\n   */\n  setValue(value) {\n    this.x.setValue(value.x);\n    this.y.setValue(value.y);\n  }\n\n  /**\n   * Sets an offset that is applied on top of whatever value is set, whether\n   * via `setValue`, an animation, or `Animated.event`. Useful for compensating\n   * things like the start of a pan gesture.\n   *\n   * See https://reactnative.dev/docs/animatedvaluexy.html#setoffset\n   */\n  setOffset(offset) {\n    this.x.setOffset(offset.x);\n    this.y.setOffset(offset.y);\n  }\n\n  /**\n   * Merges the offset value into the base value and resets the offset to zero.\n   * The final output of the value is unchanged.\n   *\n   * See https://reactnative.dev/docs/animatedvaluexy.html#flattenoffset\n   */\n  flattenOffset() {\n    this.x.flattenOffset();\n    this.y.flattenOffset();\n  }\n\n  /**\n   * Sets the offset value to the base value, and resets the base value to\n   * zero. The final output of the value is unchanged.\n   *\n   * See https://reactnative.dev/docs/animatedvaluexy.html#extractoffset\n   */\n  extractOffset() {\n    this.x.extractOffset();\n    this.y.extractOffset();\n  }\n  __getValue() {\n    return {\n      x: this.x.__getValue(),\n      y: this.y.__getValue()\n    };\n  }\n\n  /**\n   * Stops any animation and resets the value to its original.\n   *\n   * See https://reactnative.dev/docs/animatedvaluexy.html#resetanimation\n   */\n  resetAnimation(callback) {\n    this.x.resetAnimation();\n    this.y.resetAnimation();\n    callback && callback(this.__getValue());\n  }\n\n  /**\n   * Stops any running animation or tracking. `callback` is invoked with the\n   * final value after stopping the animation, which is useful for updating\n   * state to match the animation position with layout.\n   *\n   * See https://reactnative.dev/docs/animatedvaluexy.html#stopanimation\n   */\n  stopAnimation(callback) {\n    this.x.stopAnimation();\n    this.y.stopAnimation();\n    callback && callback(this.__getValue());\n  }\n\n  /**\n   * Adds an asynchronous listener to the value so you can observe updates from\n   * animations.  This is useful because there is no way to synchronously read\n   * the value because it might be driven natively.\n   *\n   * Returns a string that serves as an identifier for the listener.\n   *\n   * See https://reactnative.dev/docs/animatedvaluexy.html#addlistener\n   */\n  addListener(callback) {\n    var id = String(_uniqueId++);\n    var jointCallback = _ref => {\n      var number = _ref.value;\n      callback(this.__getValue());\n    };\n    this._listeners[id] = {\n      x: this.x.addListener(jointCallback),\n      y: this.y.addListener(jointCallback)\n    };\n    return id;\n  }\n\n  /**\n   * Unregister a listener. The `id` param shall match the identifier\n   * previously returned by `addListener()`.\n   *\n   * See https://reactnative.dev/docs/animatedvaluexy.html#removelistener\n   */\n  removeListener(id) {\n    this.x.removeListener(this._listeners[id].x);\n    this.y.removeListener(this._listeners[id].y);\n    delete this._listeners[id];\n  }\n\n  /**\n   * Remove all registered listeners.\n   *\n   * See https://reactnative.dev/docs/animatedvaluexy.html#removealllisteners\n   */\n  removeAllListeners() {\n    this.x.removeAllListeners();\n    this.y.removeAllListeners();\n    this._listeners = {};\n  }\n\n  /**\n   * Converts `{x, y}` into `{left, top}` for use in style.\n   *\n   * See https://reactnative.dev/docs/animatedvaluexy.html#getlayout\n   */\n  getLayout() {\n    return {\n      left: this.x,\n      top: this.y\n    };\n  }\n\n  /**\n   * Converts `{x, y}` into a useable translation transform.\n   *\n   * See https://reactnative.dev/docs/animatedvaluexy.html#gettranslatetransform\n   */\n  getTranslateTransform() {\n    return [{\n      translateX: this.x\n    }, {\n      translateY: this.y\n    }];\n  }\n}\nexport default AnimatedValueXY;","/**\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 * @format\n */\n\n'use strict';\n\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nvar startNativeAnimationNextId = 1;\n\n// Important note: start() and stop() will only be called at most once.\n// Once an animation has been stopped or finished its course, it will\n// not be reused.\nclass Animation {\n  start(fromValue, onUpdate, onEnd, previousAnimation, animatedValue) {}\n  stop() {\n    if (this.__nativeId) {\n      NativeAnimatedHelper.API.stopAnimation(this.__nativeId);\n    }\n  }\n  __getNativeAnimationConfig() {\n    // Subclasses that have corresponding animation implementation done in native\n    // should override this method\n    throw new Error('This animation type cannot be offloaded to native');\n  }\n  // Helper function for subclasses to make sure onEnd is only called once.\n  __debouncedOnEnd(result) {\n    var onEnd = this.__onEnd;\n    this.__onEnd = null;\n    onEnd && onEnd(result);\n  }\n  __startNativeAnimation(animatedValue) {\n    var startNativeAnimationWaitId = startNativeAnimationNextId + \":startAnimation\";\n    startNativeAnimationNextId += 1;\n    NativeAnimatedHelper.API.setWaitingForIdentifier(startNativeAnimationWaitId);\n    try {\n      var config = this.__getNativeAnimationConfig();\n      animatedValue.__makeNative(config.platformConfig);\n      this.__nativeId = NativeAnimatedHelper.generateNewAnimationId();\n      NativeAnimatedHelper.API.startAnimatingNode(this.__nativeId, animatedValue.__getNativeTag(), config,\n      // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n      this.__debouncedOnEnd.bind(this));\n    } catch (e) {\n      throw e;\n    } finally {\n      NativeAnimatedHelper.API.unsetWaitingForIdentifier(startNativeAnimationWaitId);\n    }\n  }\n}\nexport default Animation;","/**\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 * @format\n */\n\n'use strict';\n\nimport Animation from './Animation';\nimport { shouldUseNativeDriver } from '../NativeAnimatedHelper';\nclass DecayAnimation extends Animation {\n  constructor(config) {\n    var _config$deceleration, _config$isInteraction, _config$iterations;\n    super();\n    this._deceleration = (_config$deceleration = config.deceleration) !== null && _config$deceleration !== void 0 ? _config$deceleration : 0.998;\n    this._velocity = config.velocity;\n    this._useNativeDriver = shouldUseNativeDriver(config);\n    this.__isInteraction = (_config$isInteraction = config.isInteraction) !== null && _config$isInteraction !== void 0 ? _config$isInteraction : !this._useNativeDriver;\n    this.__iterations = (_config$iterations = config.iterations) !== null && _config$iterations !== void 0 ? _config$iterations : 1;\n  }\n  __getNativeAnimationConfig() {\n    return {\n      type: 'decay',\n      deceleration: this._deceleration,\n      velocity: this._velocity,\n      iterations: this.__iterations\n    };\n  }\n  start(fromValue, onUpdate, onEnd, previousAnimation, animatedValue) {\n    this.__active = true;\n    this._lastValue = fromValue;\n    this._fromValue = fromValue;\n    this._onUpdate = onUpdate;\n    this.__onEnd = onEnd;\n    this._startTime = Date.now();\n    if (this._useNativeDriver) {\n      this.__startNativeAnimation(animatedValue);\n    } else {\n      this._animationFrame = requestAnimationFrame(this.onUpdate.bind(this));\n    }\n  }\n  onUpdate() {\n    var now = Date.now();\n    var value = this._fromValue + this._velocity / (1 - this._deceleration) * (1 - Math.exp(-(1 - this._deceleration) * (now - this._startTime)));\n    this._onUpdate(value);\n    if (Math.abs(this._lastValue - value) < 0.1) {\n      this.__debouncedOnEnd({\n        finished: true\n      });\n      return;\n    }\n    this._lastValue = value;\n    if (this.__active) {\n      this._animationFrame = requestAnimationFrame(this.onUpdate.bind(this));\n    }\n  }\n  stop() {\n    super.stop();\n    this.__active = false;\n    global.cancelAnimationFrame(this._animationFrame);\n    this.__debouncedOnEnd({\n      finished: false\n    });\n  }\n}\nexport default DecayAnimation;","/**\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 * @format\n * \n */\n\n'use strict';\n\nfunction stiffnessFromOrigamiValue(oValue) {\n  return (oValue - 30) * 3.62 + 194;\n}\nfunction dampingFromOrigamiValue(oValue) {\n  return (oValue - 8) * 3 + 25;\n}\nfunction fromOrigamiTensionAndFriction(tension, friction) {\n  return {\n    stiffness: stiffnessFromOrigamiValue(tension),\n    damping: dampingFromOrigamiValue(friction)\n  };\n}\nfunction fromBouncinessAndSpeed(bounciness, speed) {\n  function normalize(value, startValue, endValue) {\n    return (value - startValue) / (endValue - startValue);\n  }\n  function projectNormal(n, start, end) {\n    return start + n * (end - start);\n  }\n  function linearInterpolation(t, start, end) {\n    return t * end + (1 - t) * start;\n  }\n  function quadraticOutInterpolation(t, start, end) {\n    return linearInterpolation(2 * t - t * t, start, end);\n  }\n  function b3Friction1(x) {\n    return 0.0007 * Math.pow(x, 3) - 0.031 * Math.pow(x, 2) + 0.64 * x + 1.28;\n  }\n  function b3Friction2(x) {\n    return 0.000044 * Math.pow(x, 3) - 0.006 * Math.pow(x, 2) + 0.36 * x + 2;\n  }\n  function b3Friction3(x) {\n    return 0.00000045 * Math.pow(x, 3) - 0.000332 * Math.pow(x, 2) + 0.1078 * x + 5.84;\n  }\n  function b3Nobounce(tension) {\n    if (tension <= 18) {\n      return b3Friction1(tension);\n    } else if (tension > 18 && tension <= 44) {\n      return b3Friction2(tension);\n    } else {\n      return b3Friction3(tension);\n    }\n  }\n  var b = normalize(bounciness / 1.7, 0, 20);\n  b = projectNormal(b, 0, 0.8);\n  var s = normalize(speed / 1.7, 0, 20);\n  var bouncyTension = projectNormal(s, 0.5, 200);\n  var bouncyFriction = quadraticOutInterpolation(b, b3Nobounce(bouncyTension), 0.01);\n  return {\n    stiffness: stiffnessFromOrigamiValue(bouncyTension),\n    damping: dampingFromOrigamiValue(bouncyFriction)\n  };\n}\nexport default {\n  fromOrigamiTensionAndFriction,\n  fromBouncinessAndSpeed\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 * @format\n */\n\n'use strict';\n\nimport Animation from './Animation';\nimport SpringConfig from '../SpringConfig';\nimport invariant from 'fbjs/lib/invariant';\nimport { shouldUseNativeDriver } from '../NativeAnimatedHelper';\nimport AnimatedColor from '../nodes/AnimatedColor';\nclass SpringAnimation extends Animation {\n  constructor(config) {\n    var _config$overshootClam, _config$restDisplacem, _config$restSpeedThre, _config$velocity, _config$velocity2, _config$delay, _config$isInteraction, _config$iterations;\n    super();\n    this._overshootClamping = (_config$overshootClam = config.overshootClamping) !== null && _config$overshootClam !== void 0 ? _config$overshootClam : false;\n    this._restDisplacementThreshold = (_config$restDisplacem = config.restDisplacementThreshold) !== null && _config$restDisplacem !== void 0 ? _config$restDisplacem : 0.001;\n    this._restSpeedThreshold = (_config$restSpeedThre = config.restSpeedThreshold) !== null && _config$restSpeedThre !== void 0 ? _config$restSpeedThre : 0.001;\n    this._initialVelocity = (_config$velocity = config.velocity) !== null && _config$velocity !== void 0 ? _config$velocity : 0;\n    this._lastVelocity = (_config$velocity2 = config.velocity) !== null && _config$velocity2 !== void 0 ? _config$velocity2 : 0;\n    this._toValue = config.toValue;\n    this._delay = (_config$delay = config.delay) !== null && _config$delay !== void 0 ? _config$delay : 0;\n    this._useNativeDriver = shouldUseNativeDriver(config);\n    this._platformConfig = config.platformConfig;\n    this.__isInteraction = (_config$isInteraction = config.isInteraction) !== null && _config$isInteraction !== void 0 ? _config$isInteraction : !this._useNativeDriver;\n    this.__iterations = (_config$iterations = config.iterations) !== null && _config$iterations !== void 0 ? _config$iterations : 1;\n    if (config.stiffness !== undefined || config.damping !== undefined || config.mass !== undefined) {\n      var _config$stiffness, _config$damping, _config$mass;\n      invariant(config.bounciness === undefined && config.speed === undefined && config.tension === undefined && config.friction === undefined, 'You can define one of bounciness/speed, tension/friction, or stiffness/damping/mass, but not more than one');\n      this._stiffness = (_config$stiffness = config.stiffness) !== null && _config$stiffness !== void 0 ? _config$stiffness : 100;\n      this._damping = (_config$damping = config.damping) !== null && _config$damping !== void 0 ? _config$damping : 10;\n      this._mass = (_config$mass = config.mass) !== null && _config$mass !== void 0 ? _config$mass : 1;\n    } else if (config.bounciness !== undefined || config.speed !== undefined) {\n      var _config$bounciness, _config$speed;\n      // Convert the origami bounciness/speed values to stiffness/damping\n      // We assume mass is 1.\n      invariant(config.tension === undefined && config.friction === undefined && config.stiffness === undefined && config.damping === undefined && config.mass === undefined, 'You can define one of bounciness/speed, tension/friction, or stiffness/damping/mass, but not more than one');\n      var springConfig = SpringConfig.fromBouncinessAndSpeed((_config$bounciness = config.bounciness) !== null && _config$bounciness !== void 0 ? _config$bounciness : 8, (_config$speed = config.speed) !== null && _config$speed !== void 0 ? _config$speed : 12);\n      this._stiffness = springConfig.stiffness;\n      this._damping = springConfig.damping;\n      this._mass = 1;\n    } else {\n      var _config$tension, _config$friction;\n      // Convert the origami tension/friction values to stiffness/damping\n      // We assume mass is 1.\n      var _springConfig = SpringConfig.fromOrigamiTensionAndFriction((_config$tension = config.tension) !== null && _config$tension !== void 0 ? _config$tension : 40, (_config$friction = config.friction) !== null && _config$friction !== void 0 ? _config$friction : 7);\n      this._stiffness = _springConfig.stiffness;\n      this._damping = _springConfig.damping;\n      this._mass = 1;\n    }\n    invariant(this._stiffness > 0, 'Stiffness value must be greater than 0');\n    invariant(this._damping > 0, 'Damping value must be greater than 0');\n    invariant(this._mass > 0, 'Mass value must be greater than 0');\n  }\n  __getNativeAnimationConfig() {\n    var _this$_initialVelocit;\n    return {\n      type: 'spring',\n      overshootClamping: this._overshootClamping,\n      restDisplacementThreshold: this._restDisplacementThreshold,\n      restSpeedThreshold: this._restSpeedThreshold,\n      stiffness: this._stiffness,\n      damping: this._damping,\n      mass: this._mass,\n      initialVelocity: (_this$_initialVelocit = this._initialVelocity) !== null && _this$_initialVelocit !== void 0 ? _this$_initialVelocit : this._lastVelocity,\n      toValue: this._toValue,\n      iterations: this.__iterations,\n      platformConfig: this._platformConfig\n    };\n  }\n  start(fromValue, onUpdate, onEnd, previousAnimation, animatedValue) {\n    this.__active = true;\n    this._startPosition = fromValue;\n    this._lastPosition = this._startPosition;\n    this._onUpdate = onUpdate;\n    this.__onEnd = onEnd;\n    this._lastTime = Date.now();\n    this._frameTime = 0.0;\n    if (previousAnimation instanceof SpringAnimation) {\n      var internalState = previousAnimation.getInternalState();\n      this._lastPosition = internalState.lastPosition;\n      this._lastVelocity = internalState.lastVelocity;\n      // Set the initial velocity to the last velocity\n      this._initialVelocity = this._lastVelocity;\n      this._lastTime = internalState.lastTime;\n    }\n    var start = () => {\n      if (this._useNativeDriver) {\n        this.__startNativeAnimation(animatedValue);\n      } else {\n        this.onUpdate();\n      }\n    };\n\n    //  If this._delay is more than 0, we start after the timeout.\n    if (this._delay) {\n      this._timeout = setTimeout(start, this._delay);\n    } else {\n      start();\n    }\n  }\n  getInternalState() {\n    return {\n      lastPosition: this._lastPosition,\n      lastVelocity: this._lastVelocity,\n      lastTime: this._lastTime\n    };\n  }\n\n  /**\n   * This spring model is based off of a damped harmonic oscillator\n   * (https://en.wikipedia.org/wiki/Harmonic_oscillator#Damped_harmonic_oscillator).\n   *\n   * We use the closed form of the second order differential equation:\n   *\n   * x'' + (2ζ⍵_0)x' + ⍵^2x = 0\n   *\n   * where\n   *    ⍵_0 = √(k / m) (undamped angular frequency of the oscillator),\n   *    ζ = c / 2√mk (damping ratio),\n   *    c = damping constant\n   *    k = stiffness\n   *    m = mass\n   *\n   * The derivation of the closed form is described in detail here:\n   * http://planetmath.org/sites/default/files/texpdf/39745.pdf\n   *\n   * This algorithm happens to match the algorithm used by CASpringAnimation,\n   * a QuartzCore (iOS) API that creates spring animations.\n   */\n  onUpdate() {\n    // If for some reason we lost a lot of frames (e.g. process large payload or\n    // stopped in the debugger), we only advance by 4 frames worth of\n    // computation and will continue on the next frame. It's better to have it\n    // running at faster speed than jumping to the end.\n    var MAX_STEPS = 64;\n    var now = Date.now();\n    if (now > this._lastTime + MAX_STEPS) {\n      now = this._lastTime + MAX_STEPS;\n    }\n    var deltaTime = (now - this._lastTime) / 1000;\n    this._frameTime += deltaTime;\n    var c = this._damping;\n    var m = this._mass;\n    var k = this._stiffness;\n    var v0 = -this._initialVelocity;\n    var zeta = c / (2 * Math.sqrt(k * m)); // damping ratio\n    var omega0 = Math.sqrt(k / m); // undamped angular frequency of the oscillator (rad/ms)\n    var omega1 = omega0 * Math.sqrt(1.0 - zeta * zeta); // exponential decay\n    var x0 = this._toValue - this._startPosition; // calculate the oscillation from x0 = 1 to x = 0\n\n    var position = 0.0;\n    var velocity = 0.0;\n    var t = this._frameTime;\n    if (zeta < 1) {\n      // Under damped\n      var envelope = Math.exp(-zeta * omega0 * t);\n      position = this._toValue - envelope * ((v0 + zeta * omega0 * x0) / omega1 * Math.sin(omega1 * t) + x0 * Math.cos(omega1 * t));\n      // This looks crazy -- it's actually just the derivative of the\n      // oscillation function\n      velocity = zeta * omega0 * envelope * (Math.sin(omega1 * t) * (v0 + zeta * omega0 * x0) / omega1 + x0 * Math.cos(omega1 * t)) - envelope * (Math.cos(omega1 * t) * (v0 + zeta * omega0 * x0) - omega1 * x0 * Math.sin(omega1 * t));\n    } else {\n      // Critically damped\n      var _envelope = Math.exp(-omega0 * t);\n      position = this._toValue - _envelope * (x0 + (v0 + omega0 * x0) * t);\n      velocity = _envelope * (v0 * (t * omega0 - 1) + t * x0 * (omega0 * omega0));\n    }\n    this._lastTime = now;\n    this._lastPosition = position;\n    this._lastVelocity = velocity;\n    this._onUpdate(position);\n    if (!this.__active) {\n      // a listener might have stopped us in _onUpdate\n      return;\n    }\n\n    // Conditions for stopping the spring animation\n    var isOvershooting = false;\n    if (this._overshootClamping && this._stiffness !== 0) {\n      if (this._startPosition < this._toValue) {\n        isOvershooting = position > this._toValue;\n      } else {\n        isOvershooting = position < this._toValue;\n      }\n    }\n    var isVelocity = Math.abs(velocity) <= this._restSpeedThreshold;\n    var isDisplacement = true;\n    if (this._stiffness !== 0) {\n      isDisplacement = Math.abs(this._toValue - position) <= this._restDisplacementThreshold;\n    }\n    if (isOvershooting || isVelocity && isDisplacement) {\n      if (this._stiffness !== 0) {\n        // Ensure that we end up with a round value\n        this._lastPosition = this._toValue;\n        this._lastVelocity = 0;\n        this._onUpdate(this._toValue);\n      }\n      this.__debouncedOnEnd({\n        finished: true\n      });\n      return;\n    }\n    // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n    this._animationFrame = requestAnimationFrame(this.onUpdate.bind(this));\n  }\n  stop() {\n    super.stop();\n    this.__active = false;\n    clearTimeout(this._timeout);\n    global.cancelAnimationFrame(this._animationFrame);\n    this.__debouncedOnEnd({\n      finished: false\n    });\n  }\n}\nexport default SpringAnimation;","/**\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 * @format\n */\n\n'use strict';\n\nimport AnimatedValue from '../nodes/AnimatedValue';\nimport AnimatedValueXY from '../nodes/AnimatedValueXY';\nimport AnimatedInterpolation from '../nodes/AnimatedInterpolation';\nimport Easing from '../../../../exports/Easing';\nimport Animation from './Animation';\nimport { shouldUseNativeDriver } from '../NativeAnimatedHelper';\nimport AnimatedColor from '../nodes/AnimatedColor';\nvar _easeInOut;\nfunction easeInOut() {\n  if (!_easeInOut) {\n    _easeInOut = Easing.inOut(Easing.ease);\n  }\n  return _easeInOut;\n}\nclass TimingAnimation extends Animation {\n  constructor(config) {\n    var _config$easing, _config$duration, _config$delay, _config$iterations, _config$isInteraction;\n    super();\n    this._toValue = config.toValue;\n    this._easing = (_config$easing = config.easing) !== null && _config$easing !== void 0 ? _config$easing : easeInOut();\n    this._duration = (_config$duration = config.duration) !== null && _config$duration !== void 0 ? _config$duration : 500;\n    this._delay = (_config$delay = config.delay) !== null && _config$delay !== void 0 ? _config$delay : 0;\n    this.__iterations = (_config$iterations = config.iterations) !== null && _config$iterations !== void 0 ? _config$iterations : 1;\n    this._useNativeDriver = shouldUseNativeDriver(config);\n    this._platformConfig = config.platformConfig;\n    this.__isInteraction = (_config$isInteraction = config.isInteraction) !== null && _config$isInteraction !== void 0 ? _config$isInteraction : !this._useNativeDriver;\n  }\n  __getNativeAnimationConfig() {\n    var frameDuration = 1000.0 / 60.0;\n    var frames = [];\n    var numFrames = Math.round(this._duration / frameDuration);\n    for (var frame = 0; frame < numFrames; frame++) {\n      frames.push(this._easing(frame / numFrames));\n    }\n    frames.push(this._easing(1));\n    return {\n      type: 'frames',\n      frames,\n      toValue: this._toValue,\n      iterations: this.__iterations,\n      platformConfig: this._platformConfig\n    };\n  }\n  start(fromValue, onUpdate, onEnd, previousAnimation, animatedValue) {\n    this.__active = true;\n    this._fromValue = fromValue;\n    this._onUpdate = onUpdate;\n    this.__onEnd = onEnd;\n    var start = () => {\n      // Animations that sometimes have 0 duration and sometimes do not\n      // still need to use the native driver when duration is 0 so as to\n      // not cause intermixed JS and native animations.\n      if (this._duration === 0 && !this._useNativeDriver) {\n        this._onUpdate(this._toValue);\n        this.__debouncedOnEnd({\n          finished: true\n        });\n      } else {\n        this._startTime = Date.now();\n        if (this._useNativeDriver) {\n          this.__startNativeAnimation(animatedValue);\n        } else {\n          this._animationFrame = requestAnimationFrame(\n          // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n          this.onUpdate.bind(this));\n        }\n      }\n    };\n    if (this._delay) {\n      this._timeout = setTimeout(start, this._delay);\n    } else {\n      start();\n    }\n  }\n  onUpdate() {\n    var now = Date.now();\n    if (now >= this._startTime + this._duration) {\n      if (this._duration === 0) {\n        this._onUpdate(this._toValue);\n      } else {\n        this._onUpdate(this._fromValue + this._easing(1) * (this._toValue - this._fromValue));\n      }\n      this.__debouncedOnEnd({\n        finished: true\n      });\n      return;\n    }\n    this._onUpdate(this._fromValue + this._easing((now - this._startTime) / this._duration) * (this._toValue - this._fromValue));\n    if (this.__active) {\n      // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n      this._animationFrame = requestAnimationFrame(this.onUpdate.bind(this));\n    }\n  }\n  stop() {\n    super.stop();\n    this.__active = false;\n    clearTimeout(this._timeout);\n    global.cancelAnimationFrame(this._animationFrame);\n    this.__debouncedOnEnd({\n      finished: false\n    });\n  }\n}\nexport default TimingAnimation;","/**\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 * @format\n */\n\n'use strict';\n\nimport AnimatedValue from './AnimatedValue';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nimport normalizeColor from '@react-native/normalize-colors';\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nvar NativeAnimatedAPI = NativeAnimatedHelper.API;\nvar defaultColor = {\n  r: 0,\n  g: 0,\n  b: 0,\n  a: 1.0\n};\nvar _uniqueId = 1;\nvar processColorObject = color => {\n  return color;\n};\n\n/* eslint no-bitwise: 0 */\nfunction processColor(color) {\n  if (color === undefined || color === null) {\n    return null;\n  }\n  if (isRgbaValue(color)) {\n    // $FlowIgnore[incompatible-cast] - Type is verified above\n    return color;\n  }\n  var normalizedColor = normalizeColor(\n  // $FlowIgnore[incompatible-cast] - Type is verified above\n  color);\n  if (normalizedColor === undefined || normalizedColor === null) {\n    return null;\n  }\n  if (typeof normalizedColor === 'object') {\n    var processedColorObj = processColorObject(normalizedColor);\n    if (processedColorObj != null) {\n      return processedColorObj;\n    }\n  } else if (typeof normalizedColor === 'number') {\n    var r = (normalizedColor & 0xff000000) >>> 24;\n    var g = (normalizedColor & 0x00ff0000) >>> 16;\n    var b = (normalizedColor & 0x0000ff00) >>> 8;\n    var a = (normalizedColor & 0x000000ff) / 255;\n    return {\n      r,\n      g,\n      b,\n      a\n    };\n  }\n  return null;\n}\nfunction isRgbaValue(value) {\n  return value && typeof value.r === 'number' && typeof value.g === 'number' && typeof value.b === 'number' && typeof value.a === 'number';\n}\nfunction isRgbaAnimatedValue(value) {\n  return value && value.r instanceof AnimatedValue && value.g instanceof AnimatedValue && value.b instanceof AnimatedValue && value.a instanceof AnimatedValue;\n}\nexport default class AnimatedColor extends AnimatedWithChildren {\n  constructor(valueIn, config) {\n    super();\n    this._listeners = {};\n    var value = valueIn !== null && valueIn !== void 0 ? valueIn : defaultColor;\n    if (isRgbaAnimatedValue(value)) {\n      // $FlowIgnore[incompatible-cast] - Type is verified above\n      var rgbaAnimatedValue = value;\n      this.r = rgbaAnimatedValue.r;\n      this.g = rgbaAnimatedValue.g;\n      this.b = rgbaAnimatedValue.b;\n      this.a = rgbaAnimatedValue.a;\n    } else {\n      var _processColor;\n      var processedColor = // $FlowIgnore[incompatible-cast] - Type is verified above\n      (_processColor = processColor(value)) !== null && _processColor !== void 0 ? _processColor : defaultColor;\n      var initColor = defaultColor;\n      if (isRgbaValue(processedColor)) {\n        // $FlowIgnore[incompatible-cast] - Type is verified above\n        initColor = processedColor;\n      } else {\n        // $FlowIgnore[incompatible-cast] - Type is verified above\n        this.nativeColor = processedColor;\n      }\n      this.r = new AnimatedValue(initColor.r);\n      this.g = new AnimatedValue(initColor.g);\n      this.b = new AnimatedValue(initColor.b);\n      this.a = new AnimatedValue(initColor.a);\n    }\n    if (this.nativeColor || config && config.useNativeDriver) {\n      this.__makeNative();\n    }\n  }\n\n  /**\n   * Directly set the value. This will stop any animations running on the value\n   * and update all the bound properties.\n   */\n  setValue(value) {\n    var _processColor2;\n    var shouldUpdateNodeConfig = false;\n    if (this.__isNative) {\n      var nativeTag = this.__getNativeTag();\n      NativeAnimatedAPI.setWaitingForIdentifier(nativeTag.toString());\n    }\n    var processedColor = (_processColor2 = processColor(value)) !== null && _processColor2 !== void 0 ? _processColor2 : defaultColor;\n    if (isRgbaValue(processedColor)) {\n      // $FlowIgnore[incompatible-type] - Type is verified above\n      var rgbaValue = processedColor;\n      this.r.setValue(rgbaValue.r);\n      this.g.setValue(rgbaValue.g);\n      this.b.setValue(rgbaValue.b);\n      this.a.setValue(rgbaValue.a);\n      if (this.nativeColor != null) {\n        this.nativeColor = null;\n        shouldUpdateNodeConfig = true;\n      }\n    } else {\n      // $FlowIgnore[incompatible-type] - Type is verified above\n      var nativeColor = processedColor;\n      if (this.nativeColor !== nativeColor) {\n        this.nativeColor = nativeColor;\n        shouldUpdateNodeConfig = true;\n      }\n    }\n    if (this.__isNative) {\n      var _nativeTag = this.__getNativeTag();\n      if (shouldUpdateNodeConfig) {\n        NativeAnimatedAPI.updateAnimatedNodeConfig(_nativeTag, this.__getNativeConfig());\n      }\n      NativeAnimatedAPI.unsetWaitingForIdentifier(_nativeTag.toString());\n    }\n  }\n\n  /**\n   * Sets an offset that is applied on top of whatever value is set, whether\n   * via `setValue`, an animation, or `Animated.event`. Useful for compensating\n   * things like the start of a pan gesture.\n   */\n  setOffset(offset) {\n    this.r.setOffset(offset.r);\n    this.g.setOffset(offset.g);\n    this.b.setOffset(offset.b);\n    this.a.setOffset(offset.a);\n  }\n\n  /**\n   * Merges the offset value into the base value and resets the offset to zero.\n   * The final output of the value is unchanged.\n   */\n  flattenOffset() {\n    this.r.flattenOffset();\n    this.g.flattenOffset();\n    this.b.flattenOffset();\n    this.a.flattenOffset();\n  }\n\n  /**\n   * Sets the offset value to the base value, and resets the base value to\n   * zero. The final output of the value is unchanged.\n   */\n  extractOffset() {\n    this.r.extractOffset();\n    this.g.extractOffset();\n    this.b.extractOffset();\n    this.a.extractOffset();\n  }\n\n  /**\n   * Adds an asynchronous listener to the value so you can observe updates from\n   * animations.  This is useful because there is no way to synchronously read\n   * the value because it might be driven natively.\n   *\n   * Returns a string that serves as an identifier for the listener.\n   */\n  addListener(callback) {\n    var id = String(_uniqueId++);\n    var jointCallback = _ref => {\n      var number = _ref.value;\n      callback(this.__getValue());\n    };\n    this._listeners[id] = {\n      r: this.r.addListener(jointCallback),\n      g: this.g.addListener(jointCallback),\n      b: this.b.addListener(jointCallback),\n      a: this.a.addListener(jointCallback)\n    };\n    return id;\n  }\n\n  /**\n   * Unregister a listener. The `id` param shall match the identifier\n   * previously returned by `addListener()`.\n   */\n  removeListener(id) {\n    this.r.removeListener(this._listeners[id].r);\n    this.g.removeListener(this._listeners[id].g);\n    this.b.removeListener(this._listeners[id].b);\n    this.a.removeListener(this._listeners[id].a);\n    delete this._listeners[id];\n  }\n\n  /**\n   * Remove all registered listeners.\n   */\n  removeAllListeners() {\n    this.r.removeAllListeners();\n    this.g.removeAllListeners();\n    this.b.removeAllListeners();\n    this.a.removeAllListeners();\n    this._listeners = {};\n  }\n\n  /**\n   * Stops any running animation or tracking. `callback` is invoked with the\n   * final value after stopping the animation, which is useful for updating\n   * state to match the animation position with layout.\n   */\n  stopAnimation(callback) {\n    this.r.stopAnimation();\n    this.g.stopAnimation();\n    this.b.stopAnimation();\n    this.a.stopAnimation();\n    callback && callback(this.__getValue());\n  }\n\n  /**\n   * Stops any animation and resets the value to its original.\n   */\n  resetAnimation(callback) {\n    this.r.resetAnimation();\n    this.g.resetAnimation();\n    this.b.resetAnimation();\n    this.a.resetAnimation();\n    callback && callback(this.__getValue());\n  }\n  __getValue() {\n    if (this.nativeColor != null) {\n      return this.nativeColor;\n    } else {\n      return \"rgba(\" + this.r.__getValue() + \", \" + this.g.__getValue() + \", \" + this.b.__getValue() + \", \" + this.a.__getValue() + \")\";\n    }\n  }\n  __attach() {\n    this.r.__addChild(this);\n    this.g.__addChild(this);\n    this.b.__addChild(this);\n    this.a.__addChild(this);\n    super.__attach();\n  }\n  __detach() {\n    this.r.__removeChild(this);\n    this.g.__removeChild(this);\n    this.b.__removeChild(this);\n    this.a.__removeChild(this);\n    super.__detach();\n  }\n  __makeNative(platformConfig) {\n    this.r.__makeNative(platformConfig);\n    this.g.__makeNative(platformConfig);\n    this.b.__makeNative(platformConfig);\n    this.a.__makeNative(platformConfig);\n    super.__makeNative(platformConfig);\n  }\n  __getNativeConfig() {\n    return {\n      type: 'color',\n      r: this.r.__getNativeTag(),\n      g: this.g.__getNativeTag(),\n      b: this.b.__getNativeTag(),\n      a: this.a.__getNativeTag(),\n      nativeColor: this.nativeColor\n    };\n  }\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 * @format\n */\n\n'use strict';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport { AnimatedEvent, attachNativeEvent } from './AnimatedEvent';\nimport AnimatedAddition from './nodes/AnimatedAddition';\nimport AnimatedDiffClamp from './nodes/AnimatedDiffClamp';\nimport AnimatedDivision from './nodes/AnimatedDivision';\nimport AnimatedInterpolation from './nodes/AnimatedInterpolation';\nimport AnimatedModulo from './nodes/AnimatedModulo';\nimport AnimatedMultiplication from './nodes/AnimatedMultiplication';\nimport AnimatedNode from './nodes/AnimatedNode';\nimport AnimatedProps from './nodes/AnimatedProps';\nimport AnimatedSubtraction from './nodes/AnimatedSubtraction';\nimport AnimatedTracking from './nodes/AnimatedTracking';\nimport AnimatedValue from './nodes/AnimatedValue';\nimport AnimatedValueXY from './nodes/AnimatedValueXY';\nimport DecayAnimation from './animations/DecayAnimation';\nimport SpringAnimation from './animations/SpringAnimation';\nimport TimingAnimation from './animations/TimingAnimation';\nimport createAnimatedComponent from './createAnimatedComponent';\nimport AnimatedColor from './nodes/AnimatedColor';\nvar add = function add(a, b) {\n  return new AnimatedAddition(a, b);\n};\nvar subtract = function subtract(a, b) {\n  return new AnimatedSubtraction(a, b);\n};\nvar divide = function divide(a, b) {\n  return new AnimatedDivision(a, b);\n};\nvar multiply = function multiply(a, b) {\n  return new AnimatedMultiplication(a, b);\n};\nvar modulo = function modulo(a, modulus) {\n  return new AnimatedModulo(a, modulus);\n};\nvar diffClamp = function diffClamp(a, min, max) {\n  return new AnimatedDiffClamp(a, min, max);\n};\nvar _combineCallbacks = function _combineCallbacks(callback, config) {\n  if (callback && config.onComplete) {\n    return function () {\n      config.onComplete && config.onComplete(...arguments);\n      callback && callback(...arguments);\n    };\n  } else {\n    return callback || config.onComplete;\n  }\n};\nvar maybeVectorAnim = function maybeVectorAnim(value, config, anim) {\n  if (value instanceof AnimatedValueXY) {\n    var configX = _objectSpread({}, config);\n    var configY = _objectSpread({}, config);\n    for (var key in config) {\n      var _config$key = config[key],\n        x = _config$key.x,\n        y = _config$key.y;\n      if (x !== undefined && y !== undefined) {\n        configX[key] = x;\n        configY[key] = y;\n      }\n    }\n    var aX = anim(value.x, configX);\n    var aY = anim(value.y, configY);\n    // We use `stopTogether: false` here because otherwise tracking will break\n    // because the second animation will get stopped before it can update.\n    return parallel([aX, aY], {\n      stopTogether: false\n    });\n  } else if (value instanceof AnimatedColor) {\n    var configR = _objectSpread({}, config);\n    var configG = _objectSpread({}, config);\n    var configB = _objectSpread({}, config);\n    var configA = _objectSpread({}, config);\n    for (var _key in config) {\n      var _config$_key = config[_key],\n        r = _config$_key.r,\n        g = _config$_key.g,\n        b = _config$_key.b,\n        a = _config$_key.a;\n      if (r !== undefined && g !== undefined && b !== undefined && a !== undefined) {\n        configR[_key] = r;\n        configG[_key] = g;\n        configB[_key] = b;\n        configA[_key] = a;\n      }\n    }\n    var aR = anim(value.r, configR);\n    var aG = anim(value.g, configG);\n    var aB = anim(value.b, configB);\n    var aA = anim(value.a, configA);\n    // We use `stopTogether: false` here because otherwise tracking will break\n    // because the second animation will get stopped before it can update.\n    return parallel([aR, aG, aB, aA], {\n      stopTogether: false\n    });\n  }\n  return null;\n};\nvar spring = function spring(value, config) {\n  var _start = function start(animatedValue, configuration, callback) {\n    callback = _combineCallbacks(callback, configuration);\n    var singleValue = animatedValue;\n    var singleConfig = configuration;\n    singleValue.stopTracking();\n    if (configuration.toValue instanceof AnimatedNode) {\n      singleValue.track(new AnimatedTracking(singleValue, configuration.toValue, SpringAnimation, singleConfig, callback));\n    } else {\n      singleValue.animate(new SpringAnimation(singleConfig), callback);\n    }\n  };\n  return maybeVectorAnim(value, config, spring) || {\n    start: function start(callback) {\n      _start(value, config, callback);\n    },\n    stop: function stop() {\n      value.stopAnimation();\n    },\n    reset: function reset() {\n      value.resetAnimation();\n    },\n    _startNativeLoop: function _startNativeLoop(iterations) {\n      var singleConfig = _objectSpread(_objectSpread({}, config), {}, {\n        iterations\n      });\n      _start(value, singleConfig);\n    },\n    _isUsingNativeDriver: function _isUsingNativeDriver() {\n      return config.useNativeDriver || false;\n    }\n  };\n};\nvar timing = function timing(value, config) {\n  var _start2 = function start(animatedValue, configuration, callback) {\n    callback = _combineCallbacks(callback, configuration);\n    var singleValue = animatedValue;\n    var singleConfig = configuration;\n    singleValue.stopTracking();\n    if (configuration.toValue instanceof AnimatedNode) {\n      singleValue.track(new AnimatedTracking(singleValue, configuration.toValue, TimingAnimation, singleConfig, callback));\n    } else {\n      singleValue.animate(new TimingAnimation(singleConfig), callback);\n    }\n  };\n  return maybeVectorAnim(value, config, timing) || {\n    start: function start(callback) {\n      _start2(value, config, callback);\n    },\n    stop: function stop() {\n      value.stopAnimation();\n    },\n    reset: function reset() {\n      value.resetAnimation();\n    },\n    _startNativeLoop: function _startNativeLoop(iterations) {\n      var singleConfig = _objectSpread(_objectSpread({}, config), {}, {\n        iterations\n      });\n      _start2(value, singleConfig);\n    },\n    _isUsingNativeDriver: function _isUsingNativeDriver() {\n      return config.useNativeDriver || false;\n    }\n  };\n};\nvar decay = function decay(value, config) {\n  var _start3 = function start(animatedValue, configuration, callback) {\n    callback = _combineCallbacks(callback, configuration);\n    var singleValue = animatedValue;\n    var singleConfig = configuration;\n    singleValue.stopTracking();\n    singleValue.animate(new DecayAnimation(singleConfig), callback);\n  };\n  return maybeVectorAnim(value, config, decay) || {\n    start: function start(callback) {\n      _start3(value, config, callback);\n    },\n    stop: function stop() {\n      value.stopAnimation();\n    },\n    reset: function reset() {\n      value.resetAnimation();\n    },\n    _startNativeLoop: function _startNativeLoop(iterations) {\n      var singleConfig = _objectSpread(_objectSpread({}, config), {}, {\n        iterations\n      });\n      _start3(value, singleConfig);\n    },\n    _isUsingNativeDriver: function _isUsingNativeDriver() {\n      return config.useNativeDriver || false;\n    }\n  };\n};\nvar sequence = function sequence(animations) {\n  var current = 0;\n  return {\n    start: function start(callback) {\n      var onComplete = function onComplete(result) {\n        if (!result.finished) {\n          callback && callback(result);\n          return;\n        }\n        current++;\n        if (current === animations.length) {\n          // if the start is called, even without a reset, it should start from the beginning\n          current = 0;\n          callback && callback(result);\n          return;\n        }\n        animations[current].start(onComplete);\n      };\n      if (animations.length === 0) {\n        callback && callback({\n          finished: true\n        });\n      } else {\n        animations[current].start(onComplete);\n      }\n    },\n    stop: function stop() {\n      if (current < animations.length) {\n        animations[current].stop();\n      }\n    },\n    reset: function reset() {\n      animations.forEach((animation, idx) => {\n        if (idx <= current) {\n          animation.reset();\n        }\n      });\n      current = 0;\n    },\n    _startNativeLoop: function _startNativeLoop() {\n      throw new Error('Loops run using the native driver cannot contain Animated.sequence animations');\n    },\n    _isUsingNativeDriver: function _isUsingNativeDriver() {\n      return false;\n    }\n  };\n};\nvar parallel = function parallel(animations, config) {\n  var doneCount = 0;\n  // Make sure we only call stop() at most once for each animation\n  var hasEnded = {};\n  var stopTogether = !(config && config.stopTogether === false);\n  var result = {\n    start: function start(callback) {\n      if (doneCount === animations.length) {\n        callback && callback({\n          finished: true\n        });\n        return;\n      }\n      animations.forEach((animation, idx) => {\n        var cb = function cb(endResult) {\n          hasEnded[idx] = true;\n          doneCount++;\n          if (doneCount === animations.length) {\n            doneCount = 0;\n            callback && callback(endResult);\n            return;\n          }\n          if (!endResult.finished && stopTogether) {\n            result.stop();\n          }\n        };\n        if (!animation) {\n          cb({\n            finished: true\n          });\n        } else {\n          animation.start(cb);\n        }\n      });\n    },\n    stop: function stop() {\n      animations.forEach((animation, idx) => {\n        !hasEnded[idx] && animation.stop();\n        hasEnded[idx] = true;\n      });\n    },\n    reset: function reset() {\n      animations.forEach((animation, idx) => {\n        animation.reset();\n        hasEnded[idx] = false;\n        doneCount = 0;\n      });\n    },\n    _startNativeLoop: function _startNativeLoop() {\n      throw new Error('Loops run using the native driver cannot contain Animated.parallel animations');\n    },\n    _isUsingNativeDriver: function _isUsingNativeDriver() {\n      return false;\n    }\n  };\n  return result;\n};\nvar delay = function delay(time) {\n  // Would be nice to make a specialized implementation\n  return timing(new AnimatedValue(0), {\n    toValue: 0,\n    delay: time,\n    duration: 0,\n    useNativeDriver: false\n  });\n};\nvar stagger = function stagger(time, animations) {\n  return parallel(animations.map((animation, i) => {\n    return sequence([delay(time * i), animation]);\n  }));\n};\nvar loop = function loop(animation, // $FlowFixMe[prop-missing]\n_temp) {\n  var _ref = _temp === void 0 ? {} : _temp,\n    _ref$iterations = _ref.iterations,\n    iterations = _ref$iterations === void 0 ? -1 : _ref$iterations,\n    _ref$resetBeforeItera = _ref.resetBeforeIteration,\n    resetBeforeIteration = _ref$resetBeforeItera === void 0 ? true : _ref$resetBeforeItera;\n  var isFinished = false;\n  var iterationsSoFar = 0;\n  return {\n    start: function start(callback) {\n      var restart = function restart(result) {\n        if (result === void 0) {\n          result = {\n            finished: true\n          };\n        }\n        if (isFinished || iterationsSoFar === iterations || result.finished === false) {\n          callback && callback(result);\n        } else {\n          iterationsSoFar++;\n          resetBeforeIteration && animation.reset();\n          animation.start(restart);\n        }\n      };\n      if (!animation || iterations === 0) {\n        callback && callback({\n          finished: true\n        });\n      } else {\n        if (animation._isUsingNativeDriver()) {\n          animation._startNativeLoop(iterations);\n        } else {\n          restart(); // Start looping recursively on the js thread\n        }\n      }\n    },\n    stop: function stop() {\n      isFinished = true;\n      animation.stop();\n    },\n    reset: function reset() {\n      iterationsSoFar = 0;\n      isFinished = false;\n      animation.reset();\n    },\n    _startNativeLoop: function _startNativeLoop() {\n      throw new Error('Loops run using the native driver cannot contain Animated.loop animations');\n    },\n    _isUsingNativeDriver: function _isUsingNativeDriver() {\n      return animation._isUsingNativeDriver();\n    }\n  };\n};\nfunction forkEvent(event, listener) {\n  if (!event) {\n    return listener;\n  } else if (event instanceof AnimatedEvent) {\n    event.__addListener(listener);\n    return event;\n  } else {\n    return function () {\n      typeof event === 'function' && event(...arguments);\n      listener(...arguments);\n    };\n  }\n}\nfunction unforkEvent(event, listener) {\n  if (event && event instanceof AnimatedEvent) {\n    event.__removeListener(listener);\n  }\n}\nvar event = function event(argMapping, config) {\n  var animatedEvent = new AnimatedEvent(argMapping, config);\n  if (animatedEvent.__isNative) {\n    return animatedEvent;\n  } else {\n    return animatedEvent.__getHandler();\n  }\n};\n\n// All types of animated nodes that represent scalar numbers and can be interpolated (etc)\n\n/**\n * The `Animated` library is designed to make animations fluid, powerful, and\n * easy to build and maintain. `Animated` focuses on declarative relationships\n * between inputs and outputs, with configurable transforms in between, and\n * simple `start`/`stop` methods to control time-based animation execution.\n * If additional transforms are added, be sure to include them in\n * AnimatedMock.js as well.\n *\n * See https://reactnative.dev/docs/animated\n */\nexport default {\n  /**\n   * Standard value class for driving animations.  Typically initialized with\n   * `new Animated.Value(0);`\n   *\n   * See https://reactnative.dev/docs/animated#value\n   */\n  Value: AnimatedValue,\n  /**\n   * 2D value class for driving 2D animations, such as pan gestures.\n   *\n   * See https://reactnative.dev/docs/animatedvaluexy\n   */\n  ValueXY: AnimatedValueXY,\n  /**\n   * Value class for driving color animations.\n   */\n  Color: AnimatedColor,\n  /**\n   * Exported to use the Interpolation type in flow.\n   *\n   * See https://reactnative.dev/docs/animated#interpolation\n   */\n  Interpolation: AnimatedInterpolation,\n  /**\n   * Exported for ease of type checking. All animated values derive from this\n   * class.\n   *\n   * See https://reactnative.dev/docs/animated#node\n   */\n  Node: AnimatedNode,\n  /**\n   * Animates a value from an initial velocity to zero based on a decay\n   * coefficient.\n   *\n   * See https://reactnative.dev/docs/animated#decay\n   */\n  decay,\n  /**\n   * Animates a value along a timed easing curve. The Easing module has tons of\n   * predefined curves, or you can use your own function.\n   *\n   * See https://reactnative.dev/docs/animated#timing\n   */\n  timing,\n  /**\n   * Animates a value according to an analytical spring model based on\n   * damped harmonic oscillation.\n   *\n   * See https://reactnative.dev/docs/animated#spring\n   */\n  spring,\n  /**\n   * Creates a new Animated value composed from two Animated values added\n   * together.\n   *\n   * See https://reactnative.dev/docs/animated#add\n   */\n  add,\n  /**\n   * Creates a new Animated value composed by subtracting the second Animated\n   * value from the first Animated value.\n   *\n   * See https://reactnative.dev/docs/animated#subtract\n   */\n  subtract,\n  /**\n   * Creates a new Animated value composed by dividing the first Animated value\n   * by the second Animated value.\n   *\n   * See https://reactnative.dev/docs/animated#divide\n   */\n  divide,\n  /**\n   * Creates a new Animated value composed from two Animated values multiplied\n   * together.\n   *\n   * See https://reactnative.dev/docs/animated#multiply\n   */\n  multiply,\n  /**\n   * Creates a new Animated value that is the (non-negative) modulo of the\n   * provided Animated value.\n   *\n   * See https://reactnative.dev/docs/animated#modulo\n   */\n  modulo,\n  /**\n   * Create a new Animated value that is limited between 2 values. It uses the\n   * difference between the last value so even if the value is far from the\n   * bounds it will start changing when the value starts getting closer again.\n   *\n   * See https://reactnative.dev/docs/animated#diffclamp\n   */\n  diffClamp,\n  /**\n   * Starts an animation after the given delay.\n   *\n   * See https://reactnative.dev/docs/animated#delay\n   */\n  delay,\n  /**\n   * Starts an array of animations in order, waiting for each to complete\n   * before starting the next. If the current running animation is stopped, no\n   * following animations will be started.\n   *\n   * See https://reactnative.dev/docs/animated#sequence\n   */\n  sequence,\n  /**\n   * Starts an array of animations all at the same time. By default, if one\n   * of the animations is stopped, they will all be stopped. You can override\n   * this with the `stopTogether` flag.\n   *\n   * See https://reactnative.dev/docs/animated#parallel\n   */\n  parallel,\n  /**\n   * Array of animations may run in parallel (overlap), but are started in\n   * sequence with successive delays.  Nice for doing trailing effects.\n   *\n   * See https://reactnative.dev/docs/animated#stagger\n   */\n  stagger,\n  /**\n   * Loops a given animation continuously, so that each time it reaches the\n   * end, it resets and begins again from the start.\n   *\n   * See https://reactnative.dev/docs/animated#loop\n   */\n  loop,\n  /**\n   * Takes an array of mappings and extracts values from each arg accordingly,\n   * then calls `setValue` on the mapped outputs.\n   *\n   * See https://reactnative.dev/docs/animated#event\n   */\n  event,\n  /**\n   * Make any React component Animatable.  Used to create `Animated.View`, etc.\n   *\n   * See https://reactnative.dev/docs/animated#createanimatedcomponent\n   */\n  createAnimatedComponent,\n  /**\n   * Imperative API to attach an animated value to an event on a view. Prefer\n   * using `Animated.event` with `useNativeDrive: true` if possible.\n   *\n   * See https://reactnative.dev/docs/animated#attachnativeevent\n   */\n  attachNativeEvent,\n  /**\n   * Advanced imperative API for snooping on animated events that are passed in\n   * through props. Use values directly where possible.\n   *\n   * See https://reactnative.dev/docs/animated#forkevent\n   */\n  forkEvent,\n  unforkEvent,\n  /**\n   * Expose Event class, so it can be used as a type for type checkers.\n   */\n  Event: AnimatedEvent\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 * @format\n */\n\n'use strict';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport { AnimatedEvent, attachNativeEvent } from './AnimatedEvent';\nimport AnimatedImplementation from './AnimatedImplementation';\nimport AnimatedInterpolation from './nodes/AnimatedInterpolation';\nimport AnimatedNode from './nodes/AnimatedNode';\nimport AnimatedValue from './nodes/AnimatedValue';\nimport AnimatedValueXY from './nodes/AnimatedValueXY';\nimport createAnimatedComponent from './createAnimatedComponent';\nimport AnimatedColor from './nodes/AnimatedColor';\n\n/**\n * Animations are a source of flakiness in snapshot testing. This mock replaces\n * animation functions from AnimatedImplementation with empty animations for\n * predictability in tests. When possible the animation will run immediately\n * to the final state.\n */\n\n// Prevent any callback invocation from recursively triggering another\n// callback, which may trigger another animation\nvar inAnimationCallback = false;\nfunction mockAnimationStart(start) {\n  return callback => {\n    var guardedCallback = callback == null ? callback : function () {\n      if (inAnimationCallback) {\n        console.warn('Ignoring recursive animation callback when running mock animations');\n        return;\n      }\n      inAnimationCallback = true;\n      try {\n        callback(...arguments);\n      } finally {\n        inAnimationCallback = false;\n      }\n    };\n    start(guardedCallback);\n  };\n}\nvar emptyAnimation = {\n  start: () => {},\n  stop: () => {},\n  reset: () => {},\n  _startNativeLoop: () => {},\n  _isUsingNativeDriver: () => {\n    return false;\n  }\n};\nvar mockCompositeAnimation = animations => _objectSpread(_objectSpread({}, emptyAnimation), {}, {\n  start: mockAnimationStart(callback => {\n    animations.forEach(animation => animation.start());\n    callback == null ? void 0 : callback({\n      finished: true\n    });\n  })\n});\nvar spring = function spring(value, config) {\n  var anyValue = value;\n  return _objectSpread(_objectSpread({}, emptyAnimation), {}, {\n    start: mockAnimationStart(callback => {\n      anyValue.setValue(config.toValue);\n      callback == null ? void 0 : callback({\n        finished: true\n      });\n    })\n  });\n};\nvar timing = function timing(value, config) {\n  var anyValue = value;\n  return _objectSpread(_objectSpread({}, emptyAnimation), {}, {\n    start: mockAnimationStart(callback => {\n      anyValue.setValue(config.toValue);\n      callback == null ? void 0 : callback({\n        finished: true\n      });\n    })\n  });\n};\nvar decay = function decay(value, config) {\n  return emptyAnimation;\n};\nvar sequence = function sequence(animations) {\n  return mockCompositeAnimation(animations);\n};\nvar parallel = function parallel(animations, config) {\n  return mockCompositeAnimation(animations);\n};\nvar delay = function delay(time) {\n  return emptyAnimation;\n};\nvar stagger = function stagger(time, animations) {\n  return mockCompositeAnimation(animations);\n};\nvar loop = function loop(animation, // $FlowFixMe[prop-missing]\n_temp) {\n  var _ref = _temp === void 0 ? {} : _temp,\n    _ref$iterations = _ref.iterations,\n    iterations = _ref$iterations === void 0 ? -1 : _ref$iterations;\n  return emptyAnimation;\n};\nexport default {\n  Value: AnimatedValue,\n  ValueXY: AnimatedValueXY,\n  Color: AnimatedColor,\n  Interpolation: AnimatedInterpolation,\n  Node: AnimatedNode,\n  decay,\n  timing,\n  spring,\n  add: AnimatedImplementation.add,\n  subtract: AnimatedImplementation.subtract,\n  divide: AnimatedImplementation.divide,\n  multiply: AnimatedImplementation.multiply,\n  modulo: AnimatedImplementation.modulo,\n  diffClamp: AnimatedImplementation.diffClamp,\n  delay,\n  sequence,\n  parallel,\n  stagger,\n  loop,\n  event: AnimatedImplementation.event,\n  createAnimatedComponent,\n  attachNativeEvent,\n  forkEvent: AnimatedImplementation.forkEvent,\n  unforkEvent: AnimatedImplementation.unforkEvent,\n  Event: AnimatedEvent\n};","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\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 * @format\n */\n\nimport Platform from '../../../exports/Platform';\nimport FlatList from './components/AnimatedFlatList';\nimport Image from './components/AnimatedImage';\nimport ScrollView from './components/AnimatedScrollView';\nimport SectionList from './components/AnimatedSectionList';\nimport Text from './components/AnimatedText';\nimport View from './components/AnimatedView';\nimport AnimatedMock from './AnimatedMock';\nimport AnimatedImplementation from './AnimatedImplementation';\nvar Animated = Platform.isTesting ? AnimatedMock : AnimatedImplementation;\nexport default _objectSpread({\n  FlatList,\n  Image,\n  ScrollView,\n  SectionList,\n  Text,\n  View\n}, Animated);","/**\n * Copyright (c) Nicolas Gallagher.\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\n'use client';\n\nimport Animated from '../../vendor/react-native/Animated/Animated';\nexport default Animated;","import { jsx } from \"react/jsx-runtime\";\nimport { Animated as RNAnimated } from \"react-native\";\nimport { FlatList } from \"./FlatList.js\";\nimport { Image } from \"./Image.js\";\nimport { ScrollView } from \"./ScrollView.js\";\nimport { SectionList } from \"./SectionList.js\";\nimport { Text } from \"./Text.js\";\nimport { View } from \"./View.js\";\nexport const Animated = {\n  ...RNAnimated,\n  FlatList: RNAnimated.createAnimatedComponent((props) => /* @__PURE__ */ jsx(FlatList, { scrollEventThrottle: 1e-4, ...props })),\n  ScrollView: RNAnimated.createAnimatedComponent((props) => /* @__PURE__ */ jsx(ScrollView, { scrollEventThrottle: 1e-4, ...props })),\n  SectionList: RNAnimated.createAnimatedComponent((props) => /* @__PURE__ */ jsx(SectionList, { scrollEventThrottle: 1e-4, ...props })),\n  Image: RNAnimated.createAnimatedComponent(Image),\n  Text: RNAnimated.createAnimatedComponent(Text),\n  View: RNAnimated.createAnimatedComponent(View)\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { FlatList as RNFlatList } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nexport const FlatList = copyComponentProperties(RNFlatList, (props) => {\n  const hasSingleColumn = !(\"numColumns\" in props) || props.numColumns === 1;\n  return /* @__PURE__ */ jsx(\n    RNFlatList,\n    {\n      ...props,\n      style: [toRNWClassName(props.className), props.style],\n      columnWrapperStyle: hasSingleColumn ? void 0 : [toRNWClassName(props.columnWrapperClassName), props.columnWrapperStyle],\n      contentContainerStyle: [toRNWClassName(props.contentContainerClassName), props.contentContainerStyle],\n      ListFooterComponentStyle: [toRNWClassName(props.ListFooterComponentClassName), props.ListFooterComponentStyle],\n      ListHeaderComponentStyle: [toRNWClassName(props.ListHeaderComponentClassName), props.ListHeaderComponentStyle],\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default FlatList;\n","import { jsx } from \"react/jsx-runtime\";\nimport { Image as RNImage } from \"react-native\";\nimport { useResolveClassNames } from \"../../hooks/index.js\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nimport { useUniwindAccent } from \"./useUniwindAccent.js\";\nexport const Image = copyComponentProperties(RNImage, (props) => {\n  const tintColor = useUniwindAccent(props.tintColorClassName);\n  const styles = useResolveClassNames(props.className ?? \"\");\n  const isUsingWidth = styles.width !== void 0;\n  const isUsingHeight = styles.height !== void 0;\n  const styleReset = {\n    width: isUsingWidth ? \"\" : void 0,\n    height: isUsingHeight ? \"\" : void 0\n  };\n  return /* @__PURE__ */ jsx(\n    RNImage,\n    {\n      ...props,\n      style: [toRNWClassName(props.className), styleReset, props.style],\n      tintColor: props.tintColor ?? tintColor,\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default Image;\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\n'use strict';\n\nimport canUseDOM from '../canUseDom';\nvar emptyFunction = () => {};\nfunction supportsPassiveEvents() {\n  var supported = false;\n  // Check if browser supports event with passive listeners\n  // https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n  if (canUseDOM) {\n    try {\n      var options = {};\n      Object.defineProperty(options, 'passive', {\n        get() {\n          supported = true;\n          return false;\n        }\n      });\n      window.addEventListener('test', null, options);\n      window.removeEventListener('test', null, options);\n    } catch (e) {}\n  }\n  return supported;\n}\nvar canUsePassiveEvents = supportsPassiveEvents();\nfunction getOptions(options) {\n  if (options == null) {\n    return false;\n  }\n  return canUsePassiveEvents ? options : Boolean(options.capture);\n}\n\n/**\n * Shim generic API compatibility with ReactDOM's synthetic events, without needing the\n * large amount of code ReactDOM uses to do this. Ideally we wouldn't use a synthetic\n * event wrapper at all.\n */\nfunction isPropagationStopped() {\n  return this.cancelBubble;\n}\nfunction isDefaultPrevented() {\n  return this.defaultPrevented;\n}\nfunction normalizeEvent(event) {\n  event.nativeEvent = event;\n  event.persist = emptyFunction;\n  event.isDefaultPrevented = isDefaultPrevented;\n  event.isPropagationStopped = isPropagationStopped;\n  return event;\n}\n\n/**\n *\n */\nexport function addEventListener(target, type, listener, options) {\n  var opts = getOptions(options);\n  var compatListener = e => listener(normalizeEvent(e));\n  target.addEventListener(type, compatListener, opts);\n  return function removeEventListener() {\n    if (target != null) {\n      target.removeEventListener(type, compatListener, opts);\n    }\n  };\n}","/**\n * Copyright (c) Nicolas Gallagher.\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\nimport { addEventListener } from '../addEventListener';\nimport canUseDOM from '../canUseDom';\nvar supportsPointerEvent = () => !!(typeof window !== 'undefined' && window.PointerEvent != null);\nvar activeModality = 'keyboard';\nvar modality = 'keyboard';\nvar previousModality;\nvar previousActiveModality;\nvar isEmulatingMouseEvents = false;\nvar listeners = new Set();\nvar KEYBOARD = 'keyboard';\nvar MOUSE = 'mouse';\nvar TOUCH = 'touch';\nvar BLUR = 'blur';\nvar CONTEXTMENU = 'contextmenu';\nvar FOCUS = 'focus';\nvar KEYDOWN = 'keydown';\nvar MOUSEDOWN = 'mousedown';\nvar MOUSEMOVE = 'mousemove';\nvar MOUSEUP = 'mouseup';\nvar POINTERDOWN = 'pointerdown';\nvar POINTERMOVE = 'pointermove';\nvar SCROLL = 'scroll';\nvar SELECTIONCHANGE = 'selectionchange';\nvar TOUCHCANCEL = 'touchcancel';\nvar TOUCHMOVE = 'touchmove';\nvar TOUCHSTART = 'touchstart';\nvar VISIBILITYCHANGE = 'visibilitychange';\nvar bubbleOptions = {\n  passive: true\n};\nvar captureOptions = {\n  capture: true,\n  passive: true\n};\nfunction restoreModality() {\n  if (previousModality != null || previousActiveModality != null) {\n    if (previousModality != null) {\n      modality = previousModality;\n      previousModality = null;\n    }\n    if (previousActiveModality != null) {\n      activeModality = previousActiveModality;\n      previousActiveModality = null;\n    }\n    callListeners();\n  }\n}\nfunction onBlurWindow() {\n  previousModality = modality;\n  previousActiveModality = activeModality;\n  activeModality = KEYBOARD;\n  modality = KEYBOARD;\n  callListeners();\n  // for fallback events\n  isEmulatingMouseEvents = false;\n}\nfunction onFocusWindow() {\n  restoreModality();\n}\nfunction onKeyDown(event) {\n  if (event.metaKey || event.altKey || event.ctrlKey) {\n    return;\n  }\n  if (modality !== KEYBOARD) {\n    modality = KEYBOARD;\n    activeModality = KEYBOARD;\n    callListeners();\n  }\n}\nfunction onVisibilityChange() {\n  if (document.visibilityState !== 'hidden') {\n    restoreModality();\n  }\n}\nfunction onPointerish(event) {\n  var eventType = event.type;\n  if (supportsPointerEvent()) {\n    if (eventType === POINTERDOWN) {\n      if (activeModality !== event.pointerType) {\n        modality = event.pointerType;\n        activeModality = event.pointerType;\n        callListeners();\n      }\n      return;\n    }\n    if (eventType === POINTERMOVE) {\n      if (modality !== event.pointerType) {\n        modality = event.pointerType;\n        callListeners();\n      }\n      return;\n    }\n  }\n  // Fallback for non-PointerEvent environment\n  else {\n    if (!isEmulatingMouseEvents) {\n      if (eventType === MOUSEDOWN) {\n        if (activeModality !== MOUSE) {\n          modality = MOUSE;\n          activeModality = MOUSE;\n          callListeners();\n        }\n      }\n      if (eventType === MOUSEMOVE) {\n        if (modality !== MOUSE) {\n          modality = MOUSE;\n          callListeners();\n        }\n      }\n    }\n\n    // Flag when browser may produce emulated events\n    if (eventType === TOUCHSTART) {\n      isEmulatingMouseEvents = true;\n      if (event.touches && event.touches.length > 1) {\n        isEmulatingMouseEvents = false;\n      }\n      if (activeModality !== TOUCH) {\n        modality = TOUCH;\n        activeModality = TOUCH;\n        callListeners();\n      }\n      return;\n    }\n\n    // Remove flag after emulated events are finished or cancelled, and if an\n    // event occurs that cuts short a touch event sequence.\n    if (eventType === CONTEXTMENU || eventType === MOUSEUP || eventType === SELECTIONCHANGE || eventType === SCROLL || eventType === TOUCHCANCEL || eventType === TOUCHMOVE) {\n      isEmulatingMouseEvents = false;\n    }\n  }\n}\nif (canUseDOM) {\n  // Window events\n  addEventListener(window, BLUR, onBlurWindow, bubbleOptions);\n  addEventListener(window, FOCUS, onFocusWindow, bubbleOptions);\n  // Must be capture phase because 'stopPropagation' might prevent these\n  // events bubbling to the document.\n  addEventListener(document, KEYDOWN, onKeyDown, captureOptions);\n  addEventListener(document, VISIBILITYCHANGE, onVisibilityChange, captureOptions);\n  addEventListener(document, POINTERDOWN, onPointerish, captureOptions);\n  addEventListener(document, POINTERMOVE, onPointerish, captureOptions);\n  // Fallback events\n  addEventListener(document, CONTEXTMENU, onPointerish, captureOptions);\n  addEventListener(document, MOUSEDOWN, onPointerish, captureOptions);\n  addEventListener(document, MOUSEMOVE, onPointerish, captureOptions);\n  addEventListener(document, MOUSEUP, onPointerish, captureOptions);\n  addEventListener(document, TOUCHCANCEL, onPointerish, captureOptions);\n  addEventListener(document, TOUCHMOVE, onPointerish, captureOptions);\n  addEventListener(document, TOUCHSTART, onPointerish, captureOptions);\n  addEventListener(document, SELECTIONCHANGE, onPointerish, captureOptions);\n  addEventListener(document, SCROLL, onPointerish, captureOptions);\n}\nfunction callListeners() {\n  var value = {\n    activeModality,\n    modality\n  };\n  listeners.forEach(listener => {\n    listener(value);\n  });\n}\nexport function getActiveModality() {\n  return activeModality;\n}\nexport function getModality() {\n  return modality;\n}\nexport function addModalityListener(listener) {\n  listeners.add(listener);\n  return () => {\n    listeners.delete(listener);\n  };\n}\nexport function testOnly_resetActiveModality() {\n  isEmulatingMouseEvents = false;\n  activeModality = KEYBOARD;\n  modality = KEYBOARD;\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\nimport { addEventListener } from '../addEventListener';\nimport useLayoutEffect from '../useLayoutEffect';\nimport useStable from '../useStable';\n/**\n * This can be used with any event type include custom events.\n *\n * const click = useEvent('click', options);\n * useEffect(() => {\n *   click.setListener(target, onClick);\n *   return () => click.clear();\n * }).\n */\nexport default function useEvent(eventType, options) {\n  var targetListeners = useStable(() => new Map());\n  var addListener = useStable(() => {\n    return (target, callback) => {\n      var removeTargetListener = targetListeners.get(target);\n      if (removeTargetListener != null) {\n        removeTargetListener();\n      }\n      if (callback == null) {\n        targetListeners.delete(target);\n        callback = () => {};\n      }\n      var removeEventListener = addEventListener(target, eventType, callback, options);\n      targetListeners.set(target, removeEventListener);\n      return removeEventListener;\n    };\n  });\n  useLayoutEffect(() => {\n    return () => {\n      targetListeners.forEach(removeListener => {\n        removeListener();\n      });\n      targetListeners.clear();\n    };\n  }, [targetListeners]);\n  return addListener;\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\nimport { getModality } from '../modality';\nimport useEvent from '../useEvent';\nimport useLayoutEffect from '../useLayoutEffect';\n\n/**\n * Types\n */\n\n/**\n * Implementation\n */\n\nvar emptyObject = {};\nvar opts = {\n  passive: true\n};\nvar lockEventType = 'react-gui:hover:lock';\nvar unlockEventType = 'react-gui:hover:unlock';\nvar supportsPointerEvent = () => !!(typeof window !== 'undefined' && window.PointerEvent != null);\nfunction dispatchCustomEvent(target, type, payload) {\n  var event = document.createEvent('CustomEvent');\n  var _ref = payload || emptyObject,\n    _ref$bubbles = _ref.bubbles,\n    bubbles = _ref$bubbles === void 0 ? true : _ref$bubbles,\n    _ref$cancelable = _ref.cancelable,\n    cancelable = _ref$cancelable === void 0 ? true : _ref$cancelable,\n    detail = _ref.detail;\n  event.initCustomEvent(type, bubbles, cancelable, detail);\n  target.dispatchEvent(event);\n}\n\n// This accounts for the non-PointerEvent fallback events.\nfunction getPointerType(event) {\n  var pointerType = event.pointerType;\n  return pointerType != null ? pointerType : getModality();\n}\nexport default function useHover(targetRef, config) {\n  var contain = config.contain,\n    disabled = config.disabled,\n    onHoverStart = config.onHoverStart,\n    onHoverChange = config.onHoverChange,\n    onHoverUpdate = config.onHoverUpdate,\n    onHoverEnd = config.onHoverEnd;\n  var canUsePE = supportsPointerEvent();\n  var addMoveListener = useEvent(canUsePE ? 'pointermove' : 'mousemove', opts);\n  var addEnterListener = useEvent(canUsePE ? 'pointerenter' : 'mouseenter', opts);\n  var addLeaveListener = useEvent(canUsePE ? 'pointerleave' : 'mouseleave', opts);\n  // These custom events are used to implement the \"contain\" prop.\n  var addLockListener = useEvent(lockEventType, opts);\n  var addUnlockListener = useEvent(unlockEventType, opts);\n  useLayoutEffect(() => {\n    var target = targetRef.current;\n    if (target !== null) {\n      /**\n       * End the hover gesture\n       */\n      var hoverEnd = function hoverEnd(e) {\n        if (onHoverEnd != null) {\n          onHoverEnd(e);\n        }\n        if (onHoverChange != null) {\n          onHoverChange(false);\n        }\n        // Remove the listeners once finished.\n        addMoveListener(target, null);\n        addLeaveListener(target, null);\n      };\n\n      /**\n       * Leave element\n       */\n      var leaveListener = function leaveListener(e) {\n        var target = targetRef.current;\n        if (target != null && getPointerType(e) !== 'touch') {\n          if (contain) {\n            dispatchCustomEvent(target, unlockEventType);\n          }\n          hoverEnd(e);\n        }\n      };\n\n      /**\n       * Move within element\n       */\n      var moveListener = function moveListener(e) {\n        if (getPointerType(e) !== 'touch') {\n          if (onHoverUpdate != null) {\n            // Not all browsers have these properties\n            if (e.x == null) {\n              e.x = e.clientX;\n            }\n            if (e.y == null) {\n              e.y = e.clientY;\n            }\n            onHoverUpdate(e);\n          }\n        }\n      };\n\n      /**\n       * Start the hover gesture\n       */\n      var hoverStart = function hoverStart(e) {\n        if (onHoverStart != null) {\n          onHoverStart(e);\n        }\n        if (onHoverChange != null) {\n          onHoverChange(true);\n        }\n        // Set the listeners needed for the rest of the hover gesture.\n        if (onHoverUpdate != null) {\n          addMoveListener(target, !disabled ? moveListener : null);\n        }\n        addLeaveListener(target, !disabled ? leaveListener : null);\n      };\n\n      /**\n       * Enter element\n       */\n      var enterListener = function enterListener(e) {\n        var target = targetRef.current;\n        if (target != null && getPointerType(e) !== 'touch') {\n          if (contain) {\n            dispatchCustomEvent(target, lockEventType);\n          }\n          hoverStart(e);\n          var lockListener = function lockListener(lockEvent) {\n            if (lockEvent.target !== target) {\n              hoverEnd(e);\n            }\n          };\n          var unlockListener = function unlockListener(lockEvent) {\n            if (lockEvent.target !== target) {\n              hoverStart(e);\n            }\n          };\n          addLockListener(target, !disabled ? lockListener : null);\n          addUnlockListener(target, !disabled ? unlockListener : null);\n        }\n      };\n      addEnterListener(target, !disabled ? enterListener : null);\n    }\n  }, [addEnterListener, addMoveListener, addLeaveListener, addLockListener, addUnlockListener, contain, disabled, onHoverStart, onHoverChange, onHoverUpdate, onHoverEnd, targetRef]);\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\n'use client';\n\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"children\", \"delayLongPress\", \"delayPressIn\", \"delayPressOut\", \"disabled\", \"onBlur\", \"onContextMenu\", \"onFocus\", \"onHoverIn\", \"onHoverOut\", \"onKeyDown\", \"onLongPress\", \"onPress\", \"onPressMove\", \"onPressIn\", \"onPressOut\", \"style\", \"tabIndex\", \"testOnly_hovered\", \"testOnly_pressed\"];\nimport * as React from 'react';\nimport { forwardRef, memo, useMemo, useState, useRef } from 'react';\nimport useMergeRefs from '../../modules/useMergeRefs';\nimport useHover from '../../modules/useHover';\nimport usePressEvents from '../../modules/usePressEvents';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\n/**\n * Component used to build display components that should respond to whether the\n * component is currently pressed or not.\n */\nfunction Pressable(props, forwardedRef) {\n  var children = props.children,\n    delayLongPress = props.delayLongPress,\n    delayPressIn = props.delayPressIn,\n    delayPressOut = props.delayPressOut,\n    disabled = props.disabled,\n    onBlur = props.onBlur,\n    onContextMenu = props.onContextMenu,\n    onFocus = props.onFocus,\n    onHoverIn = props.onHoverIn,\n    onHoverOut = props.onHoverOut,\n    onKeyDown = props.onKeyDown,\n    onLongPress = props.onLongPress,\n    onPress = props.onPress,\n    onPressMove = props.onPressMove,\n    onPressIn = props.onPressIn,\n    onPressOut = props.onPressOut,\n    style = props.style,\n    tabIndex = props.tabIndex,\n    testOnly_hovered = props.testOnly_hovered,\n    testOnly_pressed = props.testOnly_pressed,\n    rest = _objectWithoutPropertiesLoose(props, _excluded);\n  var _useForceableState = useForceableState(testOnly_hovered === true),\n    hovered = _useForceableState[0],\n    setHovered = _useForceableState[1];\n  var _useForceableState2 = useForceableState(false),\n    focused = _useForceableState2[0],\n    setFocused = _useForceableState2[1];\n  var _useForceableState3 = useForceableState(testOnly_pressed === true),\n    pressed = _useForceableState3[0],\n    setPressed = _useForceableState3[1];\n  var hostRef = useRef(null);\n  var setRef = useMergeRefs(forwardedRef, hostRef);\n  var pressConfig = useMemo(() => ({\n    delayLongPress,\n    delayPressStart: delayPressIn,\n    delayPressEnd: delayPressOut,\n    disabled,\n    onLongPress,\n    onPress,\n    onPressChange: setPressed,\n    onPressStart: onPressIn,\n    onPressMove,\n    onPressEnd: onPressOut\n  }), [delayLongPress, delayPressIn, delayPressOut, disabled, onLongPress, onPress, onPressIn, onPressMove, onPressOut, setPressed]);\n  var pressEventHandlers = usePressEvents(hostRef, pressConfig);\n  var onContextMenuPress = pressEventHandlers.onContextMenu,\n    onKeyDownPress = pressEventHandlers.onKeyDown;\n  useHover(hostRef, {\n    contain: true,\n    disabled,\n    onHoverChange: setHovered,\n    onHoverStart: onHoverIn,\n    onHoverEnd: onHoverOut\n  });\n  var interactionState = {\n    hovered,\n    focused,\n    pressed\n  };\n  var blurHandler = React.useCallback(e => {\n    if (e.nativeEvent.target === hostRef.current) {\n      setFocused(false);\n      if (onBlur != null) {\n        onBlur(e);\n      }\n    }\n  }, [hostRef, setFocused, onBlur]);\n  var focusHandler = React.useCallback(e => {\n    if (e.nativeEvent.target === hostRef.current) {\n      setFocused(true);\n      if (onFocus != null) {\n        onFocus(e);\n      }\n    }\n  }, [hostRef, setFocused, onFocus]);\n  var contextMenuHandler = React.useCallback(e => {\n    if (onContextMenuPress != null) {\n      onContextMenuPress(e);\n    }\n    if (onContextMenu != null) {\n      onContextMenu(e);\n    }\n  }, [onContextMenu, onContextMenuPress]);\n  var keyDownHandler = React.useCallback(e => {\n    if (onKeyDownPress != null) {\n      onKeyDownPress(e);\n    }\n    if (onKeyDown != null) {\n      onKeyDown(e);\n    }\n  }, [onKeyDown, onKeyDownPress]);\n  var _tabIndex;\n  if (tabIndex !== undefined) {\n    _tabIndex = tabIndex;\n  } else {\n    _tabIndex = disabled ? -1 : 0;\n  }\n  return /*#__PURE__*/React.createElement(View, _extends({}, rest, pressEventHandlers, {\n    \"aria-disabled\": disabled,\n    onBlur: blurHandler,\n    onContextMenu: contextMenuHandler,\n    onFocus: focusHandler,\n    onKeyDown: keyDownHandler,\n    ref: setRef,\n    style: [disabled ? styles.disabled : styles.active, typeof style === 'function' ? style(interactionState) : style],\n    tabIndex: _tabIndex\n  }), typeof children === 'function' ? children(interactionState) : children);\n}\nfunction useForceableState(forced) {\n  var _useState = useState(false),\n    bool = _useState[0],\n    setBool = _useState[1];\n  return [bool || forced, setBool];\n}\nvar styles = StyleSheet.create({\n  active: {\n    cursor: 'pointer',\n    touchAction: 'manipulation'\n  },\n  disabled: {\n    pointerEvents: 'box-none'\n  }\n});\nvar MemoedPressable = /*#__PURE__*/memo(/*#__PURE__*/forwardRef(Pressable));\nMemoedPressable.displayName = 'Pressable';\nexport default MemoedPressable;","import { jsx } from \"react/jsx-runtime\";\nimport { Pressable as RNPressable } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nexport const Pressable = copyComponentProperties(RNPressable, (props) => {\n  return /* @__PURE__ */ jsx(\n    RNPressable,\n    {\n      ...props,\n      style: (state) => [toRNWClassName(props.className), typeof props.style === \"function\" ? props.style(state) : props.style],\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default Pressable;\n","import { jsx } from \"react/jsx-runtime\";\nimport { RefreshControl as RNRefreshControl } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nexport const RefreshControl = copyComponentProperties(RNRefreshControl, (props) => {\n  return /* @__PURE__ */ jsx(\n    RNRefreshControl,\n    {\n      ...props,\n      style: [toRNWClassName(props.className), props.style],\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default RefreshControl;\n","import { jsx } from \"react/jsx-runtime\";\nimport { ScrollView as RNScrollView } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nexport const ScrollView = copyComponentProperties(RNScrollView, (props) => {\n  return /* @__PURE__ */ jsx(\n    RNScrollView,\n    {\n      ...props,\n      style: [toRNWClassName(props.className), props.style],\n      contentContainerStyle: [toRNWClassName(props.contentContainerClassName), props.contentContainerStyle],\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default ScrollView;\n","import { jsx } from \"react/jsx-runtime\";\nimport { SectionList as RNSectionList } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nexport const SectionList = copyComponentProperties(RNSectionList, (props) => {\n  return /* @__PURE__ */ jsx(\n    RNSectionList,\n    {\n      ...props,\n      style: [toRNWClassName(props.className), props.style],\n      contentContainerStyle: [toRNWClassName(props.contentContainerClassName), props.contentContainerStyle],\n      ListFooterComponentStyle: [toRNWClassName(props.ListFooterComponentClassName), props.ListFooterComponentStyle],\n      ListHeaderComponentStyle: [toRNWClassName(props.ListHeaderComponentClassName), props.ListHeaderComponentStyle],\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default SectionList;\n","/**\n * Copyright (c) Nicolas Gallagher.\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\nvar CSS_UNIT_RE = /^[+-]?\\d*(?:\\.\\d+)?(?:[Ee][+-]?\\d+)?(%|\\w*)/;\nvar getUnit = str => str.match(CSS_UNIT_RE)[1];\nvar isNumeric = n => {\n  return !isNaN(parseFloat(n)) && isFinite(n);\n};\nvar multiplyStyleLengthValue = (value, multiple) => {\n  if (typeof value === 'string') {\n    var number = parseFloat(value) * multiple;\n    var unit = getUnit(value);\n    return \"\" + number + unit;\n  } else if (isNumeric(value)) {\n    return value * multiple;\n  }\n};\nexport default multiplyStyleLengthValue;","/**\n * Copyright (c) Nicolas Gallagher.\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\n'use client';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"aria-label\", \"accessibilityLabel\", \"activeThumbColor\", \"activeTrackColor\", \"disabled\", \"onValueChange\", \"style\", \"thumbColor\", \"trackColor\", \"value\"];\nimport * as React from 'react';\nimport createElement from '../createElement';\nimport multiplyStyleLengthValue from '../../modules/multiplyStyleLengthValue';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\nvar emptyObject = {};\nvar thumbDefaultBoxShadow = '0px 1px 3px rgba(0,0,0,0.5)';\nvar thumbFocusedBoxShadow = thumbDefaultBoxShadow + \", 0 0 0 10px rgba(0,0,0,0.1)\";\nvar defaultActiveTrackColor = '#A3D3CF';\nvar defaultTrackColor = '#939393';\nvar defaultDisabledTrackColor = '#D5D5D5';\nvar defaultActiveThumbColor = '#009688';\nvar defaultThumbColor = '#FAFAFA';\nvar defaultDisabledThumbColor = '#BDBDBD';\nvar Switch = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n  var ariaLabel = props['aria-label'],\n    accessibilityLabel = props.accessibilityLabel,\n    activeThumbColor = props.activeThumbColor,\n    activeTrackColor = props.activeTrackColor,\n    _props$disabled = props.disabled,\n    disabled = _props$disabled === void 0 ? false : _props$disabled,\n    onValueChange = props.onValueChange,\n    _props$style = props.style,\n    style = _props$style === void 0 ? emptyObject : _props$style,\n    thumbColor = props.thumbColor,\n    trackColor = props.trackColor,\n    _props$value = props.value,\n    value = _props$value === void 0 ? false : _props$value,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  var thumbRef = React.useRef(null);\n  function handleChange(event) {\n    if (onValueChange != null) {\n      onValueChange(event.nativeEvent.target.checked);\n    }\n  }\n  function handleFocusState(event) {\n    var isFocused = event.nativeEvent.type === 'focus';\n    var boxShadow = isFocused ? thumbFocusedBoxShadow : thumbDefaultBoxShadow;\n    if (thumbRef.current != null) {\n      thumbRef.current.style.boxShadow = boxShadow;\n    }\n  }\n  var _StyleSheet$flatten = StyleSheet.flatten(style),\n    styleHeight = _StyleSheet$flatten.height,\n    styleWidth = _StyleSheet$flatten.width;\n  var height = styleHeight || '20px';\n  var minWidth = multiplyStyleLengthValue(height, 2);\n  var width = styleWidth > minWidth ? styleWidth : minWidth;\n  var trackBorderRadius = multiplyStyleLengthValue(height, 0.5);\n  var trackCurrentColor = function () {\n    if (value === true) {\n      if (trackColor != null && typeof trackColor === 'object') {\n        return trackColor.true;\n      } else {\n        return activeTrackColor !== null && activeTrackColor !== void 0 ? activeTrackColor : defaultActiveTrackColor;\n      }\n    } else {\n      if (trackColor != null && typeof trackColor === 'object') {\n        return trackColor.false;\n      } else {\n        return trackColor !== null && trackColor !== void 0 ? trackColor : defaultTrackColor;\n      }\n    }\n  }();\n  var thumbCurrentColor = value ? activeThumbColor !== null && activeThumbColor !== void 0 ? activeThumbColor : defaultActiveThumbColor : thumbColor !== null && thumbColor !== void 0 ? thumbColor : defaultThumbColor;\n  var thumbHeight = height;\n  var thumbWidth = thumbHeight;\n  var rootStyle = [styles.root, style, disabled && styles.cursorDefault, {\n    height,\n    width\n  }];\n  var disabledTrackColor = function () {\n    if (value === true) {\n      if (typeof activeTrackColor === 'string' && activeTrackColor != null || typeof trackColor === 'object' && trackColor != null && trackColor.true) {\n        return trackCurrentColor;\n      } else {\n        return defaultDisabledTrackColor;\n      }\n    } else {\n      if (typeof trackColor === 'string' && trackColor != null || typeof trackColor === 'object' && trackColor != null && trackColor.false) {\n        return trackCurrentColor;\n      } else {\n        return defaultDisabledTrackColor;\n      }\n    }\n  }();\n  var disabledThumbColor = function () {\n    if (value === true) {\n      if (activeThumbColor == null) {\n        return defaultDisabledThumbColor;\n      } else {\n        return thumbCurrentColor;\n      }\n    } else {\n      if (thumbColor == null) {\n        return defaultDisabledThumbColor;\n      } else {\n        return thumbCurrentColor;\n      }\n    }\n  }();\n  var trackStyle = [styles.track, {\n    backgroundColor: disabled ? disabledTrackColor : trackCurrentColor,\n    borderRadius: trackBorderRadius\n  }];\n  var thumbStyle = [styles.thumb, value && styles.thumbActive, {\n    backgroundColor: disabled ? disabledThumbColor : thumbCurrentColor,\n    height: thumbHeight,\n    marginStart: value ? multiplyStyleLengthValue(thumbWidth, -1) : 0,\n    width: thumbWidth\n  }];\n  var nativeControl = createElement('input', {\n    'aria-label': ariaLabel || accessibilityLabel,\n    checked: value,\n    disabled: disabled,\n    onBlur: handleFocusState,\n    onChange: handleChange,\n    onFocus: handleFocusState,\n    ref: forwardedRef,\n    style: [styles.nativeControl, styles.cursorInherit],\n    type: 'checkbox',\n    role: 'switch'\n  });\n  return /*#__PURE__*/React.createElement(View, _extends({}, other, {\n    style: rootStyle\n  }), /*#__PURE__*/React.createElement(View, {\n    style: trackStyle\n  }), /*#__PURE__*/React.createElement(View, {\n    ref: thumbRef,\n    style: thumbStyle\n  }), nativeControl);\n});\nSwitch.displayName = 'Switch';\nvar styles = StyleSheet.create({\n  root: {\n    cursor: 'pointer',\n    userSelect: 'none'\n  },\n  cursorDefault: {\n    cursor: 'default'\n  },\n  cursorInherit: {\n    cursor: 'inherit'\n  },\n  track: _objectSpread(_objectSpread({\n    forcedColorAdjust: 'none'\n  }, StyleSheet.absoluteFillObject), {}, {\n    height: '70%',\n    margin: 'auto',\n    transitionDuration: '0.1s',\n    width: '100%'\n  }),\n  thumb: {\n    forcedColorAdjust: 'none',\n    alignSelf: 'flex-start',\n    borderRadius: '100%',\n    boxShadow: thumbDefaultBoxShadow,\n    start: '0%',\n    transform: 'translateZ(0)',\n    transitionDuration: '0.1s'\n  },\n  thumbActive: {\n    insetInlineStart: '100%'\n  },\n  nativeControl: _objectSpread(_objectSpread({}, StyleSheet.absoluteFillObject), {}, {\n    height: '100%',\n    margin: 0,\n    appearance: 'none',\n    padding: 0,\n    width: '100%'\n  })\n});\nexport default Switch;","import { jsx } from \"react/jsx-runtime\";\nimport { Switch as RNSwitch } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nimport { useUniwindAccent } from \"./useUniwindAccent.js\";\nexport const Switch = copyComponentProperties(RNSwitch, (props) => {\n  const trackColorOn = useUniwindAccent(props.trackColorOnClassName);\n  const trackColorOff = useUniwindAccent(props.trackColorOffClassName);\n  const thumbColor = useUniwindAccent(props.thumbColorClassName);\n  return /* @__PURE__ */ jsx(\n    RNSwitch,\n    {\n      ...props,\n      style: [toRNWClassName(props.className), props.style],\n      thumbColor: props.thumbColor ?? thumbColor,\n      trackColor: { true: props.trackColor?.true ?? trackColorOn, false: props.trackColor?.false ?? trackColorOff },\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default Switch;\n","import { jsx } from \"react/jsx-runtime\";\nimport { Text as RNText } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nexport const Text = copyComponentProperties(RNText, (props) => {\n  return /* @__PURE__ */ jsx(\n    RNText,\n    {\n      ...props,\n      style: [toRNWClassName(props.className), props.style],\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default Text;\n","/**\n * Copyright (c) Nicolas Gallagher.\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\n'use client';\n\nimport * as React from 'react';\nimport createElement from '../createElement';\nimport * as forwardedProps from '../../modules/forwardedProps';\nimport pick from '../../modules/pick';\nimport useElementLayout from '../../modules/useElementLayout';\nimport useLayoutEffect from '../../modules/useLayoutEffect';\nimport useMergeRefs from '../../modules/useMergeRefs';\nimport usePlatformMethods from '../../modules/usePlatformMethods';\nimport useResponderEvents from '../../modules/useResponderEvents';\nimport { getLocaleDirection, useLocaleContext } from '../../modules/useLocale';\nimport StyleSheet from '../StyleSheet';\nimport TextInputState from '../../modules/TextInputState';\n//import { warnOnce } from '../../modules/warnOnce';\n\n/**\n * Determines whether a 'selection' prop differs from a node's existing\n * selection state.\n */\nvar isSelectionStale = (node, selection) => {\n  var selectionEnd = node.selectionEnd,\n    selectionStart = node.selectionStart;\n  var start = selection.start,\n    end = selection.end;\n  return start !== selectionStart || end !== selectionEnd;\n};\n\n/**\n * Certain input types do no support 'selectSelectionRange' and will throw an\n * error.\n */\nvar setSelection = (node, selection) => {\n  if (isSelectionStale(node, selection)) {\n    var start = selection.start,\n      end = selection.end;\n    try {\n      node.setSelectionRange(start, end || start);\n    } catch (e) {}\n  }\n};\nvar forwardPropsList = Object.assign({}, forwardedProps.defaultProps, forwardedProps.accessibilityProps, forwardedProps.clickProps, forwardedProps.focusProps, forwardedProps.keyboardProps, forwardedProps.mouseProps, forwardedProps.touchProps, forwardedProps.styleProps, {\n  autoCapitalize: true,\n  autoComplete: true,\n  autoCorrect: true,\n  autoFocus: true,\n  defaultValue: true,\n  disabled: true,\n  lang: true,\n  maxLength: true,\n  onChange: true,\n  onScroll: true,\n  placeholder: true,\n  pointerEvents: true,\n  readOnly: true,\n  rows: true,\n  spellCheck: true,\n  value: true,\n  type: true\n});\nvar pickProps = props => pick(props, forwardPropsList);\n\n// If an Input Method Editor is processing key input, the 'keyCode' is 229.\n// https://www.w3.org/TR/uievents/#determine-keydown-keyup-keyCode\nfunction isEventComposing(nativeEvent) {\n  return nativeEvent.isComposing || nativeEvent.keyCode === 229;\n}\nvar focusTimeout = null;\nvar TextInput = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n  var _props$autoCapitalize = props.autoCapitalize,\n    autoCapitalize = _props$autoCapitalize === void 0 ? 'sentences' : _props$autoCapitalize,\n    autoComplete = props.autoComplete,\n    autoCompleteType = props.autoCompleteType,\n    _props$autoCorrect = props.autoCorrect,\n    autoCorrect = _props$autoCorrect === void 0 ? true : _props$autoCorrect,\n    blurOnSubmit = props.blurOnSubmit,\n    caretHidden = props.caretHidden,\n    clearTextOnFocus = props.clearTextOnFocus,\n    dir = props.dir,\n    editable = props.editable,\n    enterKeyHint = props.enterKeyHint,\n    inputMode = props.inputMode,\n    keyboardType = props.keyboardType,\n    _props$multiline = props.multiline,\n    multiline = _props$multiline === void 0 ? false : _props$multiline,\n    numberOfLines = props.numberOfLines,\n    onBlur = props.onBlur,\n    onChange = props.onChange,\n    onChangeText = props.onChangeText,\n    onContentSizeChange = props.onContentSizeChange,\n    onFocus = props.onFocus,\n    onKeyPress = props.onKeyPress,\n    onLayout = props.onLayout,\n    onMoveShouldSetResponder = props.onMoveShouldSetResponder,\n    onMoveShouldSetResponderCapture = props.onMoveShouldSetResponderCapture,\n    onResponderEnd = props.onResponderEnd,\n    onResponderGrant = props.onResponderGrant,\n    onResponderMove = props.onResponderMove,\n    onResponderReject = props.onResponderReject,\n    onResponderRelease = props.onResponderRelease,\n    onResponderStart = props.onResponderStart,\n    onResponderTerminate = props.onResponderTerminate,\n    onResponderTerminationRequest = props.onResponderTerminationRequest,\n    onScrollShouldSetResponder = props.onScrollShouldSetResponder,\n    onScrollShouldSetResponderCapture = props.onScrollShouldSetResponderCapture,\n    onSelectionChange = props.onSelectionChange,\n    onSelectionChangeShouldSetResponder = props.onSelectionChangeShouldSetResponder,\n    onSelectionChangeShouldSetResponderCapture = props.onSelectionChangeShouldSetResponderCapture,\n    onStartShouldSetResponder = props.onStartShouldSetResponder,\n    onStartShouldSetResponderCapture = props.onStartShouldSetResponderCapture,\n    onSubmitEditing = props.onSubmitEditing,\n    placeholderTextColor = props.placeholderTextColor,\n    _props$readOnly = props.readOnly,\n    readOnly = _props$readOnly === void 0 ? false : _props$readOnly,\n    returnKeyType = props.returnKeyType,\n    rows = props.rows,\n    _props$secureTextEntr = props.secureTextEntry,\n    secureTextEntry = _props$secureTextEntr === void 0 ? false : _props$secureTextEntr,\n    selection = props.selection,\n    selectTextOnFocus = props.selectTextOnFocus,\n    showSoftInputOnFocus = props.showSoftInputOnFocus,\n    spellCheck = props.spellCheck;\n  var type;\n  var _inputMode;\n  if (inputMode != null) {\n    _inputMode = inputMode;\n    if (inputMode === 'email') {\n      type = 'email';\n    } else if (inputMode === 'tel') {\n      type = 'tel';\n    } else if (inputMode === 'search') {\n      type = 'search';\n    } else if (inputMode === 'url') {\n      type = 'url';\n    } else {\n      type = 'text';\n    }\n  } else if (keyboardType != null) {\n    // warnOnce('keyboardType', 'keyboardType is deprecated. Use inputMode.');\n    switch (keyboardType) {\n      case 'email-address':\n        type = 'email';\n        break;\n      case 'number-pad':\n      case 'numeric':\n        _inputMode = 'numeric';\n        break;\n      case 'decimal-pad':\n        _inputMode = 'decimal';\n        break;\n      case 'phone-pad':\n        type = 'tel';\n        break;\n      case 'search':\n      case 'web-search':\n        type = 'search';\n        break;\n      case 'url':\n        type = 'url';\n        break;\n      default:\n        type = 'text';\n    }\n  }\n  if (secureTextEntry) {\n    type = 'password';\n  }\n  var dimensions = React.useRef({\n    height: null,\n    width: null\n  });\n  var hostRef = React.useRef(null);\n  var prevSelection = React.useRef(null);\n  var prevSecureTextEntry = React.useRef(false);\n  React.useEffect(() => {\n    if (hostRef.current && prevSelection.current) {\n      setSelection(hostRef.current, prevSelection.current);\n    }\n    prevSecureTextEntry.current = secureTextEntry;\n  }, [secureTextEntry]);\n  var handleContentSizeChange = React.useCallback(hostNode => {\n    if (multiline && onContentSizeChange && hostNode != null) {\n      var newHeight = hostNode.scrollHeight;\n      var newWidth = hostNode.scrollWidth;\n      if (newHeight !== dimensions.current.height || newWidth !== dimensions.current.width) {\n        dimensions.current.height = newHeight;\n        dimensions.current.width = newWidth;\n        onContentSizeChange({\n          nativeEvent: {\n            contentSize: {\n              height: dimensions.current.height,\n              width: dimensions.current.width\n            }\n          }\n        });\n      }\n    }\n  }, [multiline, onContentSizeChange]);\n  var imperativeRef = React.useMemo(() => hostNode => {\n    // TextInput needs to add more methods to the hostNode in addition to those\n    // added by `usePlatformMethods`. This is temporarily until an API like\n    // `TextInput.clear(hostRef)` is added to React Native.\n    if (hostNode != null) {\n      hostNode.clear = function () {\n        if (hostNode != null) {\n          hostNode.value = '';\n        }\n      };\n      hostNode.isFocused = function () {\n        return hostNode != null && TextInputState.currentlyFocusedField() === hostNode;\n      };\n      handleContentSizeChange(hostNode);\n    }\n  }, [handleContentSizeChange]);\n  function handleBlur(e) {\n    TextInputState._currentlyFocusedNode = null;\n    if (onBlur) {\n      e.nativeEvent.text = e.target.value;\n      onBlur(e);\n    }\n  }\n  function handleChange(e) {\n    var hostNode = e.target;\n    var text = hostNode.value;\n    e.nativeEvent.text = text;\n    handleContentSizeChange(hostNode);\n    if (onChange) {\n      onChange(e);\n    }\n    if (onChangeText) {\n      onChangeText(text);\n    }\n  }\n  function handleFocus(e) {\n    var hostNode = e.target;\n    if (onFocus) {\n      e.nativeEvent.text = hostNode.value;\n      onFocus(e);\n    }\n    if (hostNode != null) {\n      TextInputState._currentlyFocusedNode = hostNode;\n      if (clearTextOnFocus) {\n        hostNode.value = '';\n      }\n      if (selectTextOnFocus) {\n        // Safari requires selection to occur in a setTimeout\n        if (focusTimeout != null) {\n          clearTimeout(focusTimeout);\n        }\n        focusTimeout = setTimeout(() => {\n          // Check if the input is still focused after the timeout\n          // (see #2704)\n          if (hostNode != null && document.activeElement === hostNode) {\n            hostNode.select();\n          }\n        }, 0);\n      }\n    }\n  }\n  function handleKeyDown(e) {\n    var hostNode = e.target;\n    // Prevent key events bubbling (see #612)\n    e.stopPropagation();\n    var blurOnSubmitDefault = !multiline;\n    var shouldBlurOnSubmit = blurOnSubmit == null ? blurOnSubmitDefault : blurOnSubmit;\n    var nativeEvent = e.nativeEvent;\n    var isComposing = isEventComposing(nativeEvent);\n    if (onKeyPress) {\n      onKeyPress(e);\n    }\n    if (e.key === 'Enter' && !e.shiftKey &&\n    // Do not call submit if composition is occuring.\n    !isComposing && !e.isDefaultPrevented()) {\n      if ((blurOnSubmit || !multiline) && onSubmitEditing) {\n        // prevent \"Enter\" from inserting a newline or submitting a form\n        e.preventDefault();\n        nativeEvent.text = e.target.value;\n        onSubmitEditing(e);\n      }\n      if (shouldBlurOnSubmit && hostNode != null) {\n        setTimeout(() => hostNode.blur(), 0);\n      }\n    }\n  }\n  function handleSelectionChange(e) {\n    try {\n      var _e$target = e.target,\n        selectionStart = _e$target.selectionStart,\n        selectionEnd = _e$target.selectionEnd;\n      var _selection = {\n        start: selectionStart,\n        end: selectionEnd\n      };\n      if (onSelectionChange) {\n        e.nativeEvent.selection = _selection;\n        e.nativeEvent.text = e.target.value;\n        onSelectionChange(e);\n      }\n      if (prevSecureTextEntry.current === secureTextEntry) {\n        prevSelection.current = _selection;\n      }\n    } catch (e) {}\n  }\n  useLayoutEffect(() => {\n    var node = hostRef.current;\n    if (node != null && selection != null) {\n      setSelection(node, selection);\n    }\n    if (document.activeElement === node) {\n      TextInputState._currentlyFocusedNode = node;\n    }\n  }, [hostRef, selection]);\n  var component = multiline ? 'textarea' : 'input';\n  useElementLayout(hostRef, onLayout);\n  useResponderEvents(hostRef, {\n    onMoveShouldSetResponder,\n    onMoveShouldSetResponderCapture,\n    onResponderEnd,\n    onResponderGrant,\n    onResponderMove,\n    onResponderReject,\n    onResponderRelease,\n    onResponderStart,\n    onResponderTerminate,\n    onResponderTerminationRequest,\n    onScrollShouldSetResponder,\n    onScrollShouldSetResponderCapture,\n    onSelectionChangeShouldSetResponder,\n    onSelectionChangeShouldSetResponderCapture,\n    onStartShouldSetResponder,\n    onStartShouldSetResponderCapture\n  });\n  var _useLocaleContext = useLocaleContext(),\n    contextDirection = _useLocaleContext.direction;\n  var supportedProps = pickProps(props);\n  supportedProps.autoCapitalize = autoCapitalize;\n  supportedProps.autoComplete = autoComplete || autoCompleteType || 'on';\n  supportedProps.autoCorrect = autoCorrect ? 'on' : 'off';\n  // 'auto' by default allows browsers to infer writing direction\n  supportedProps.dir = dir !== undefined ? dir : 'auto';\n  /*\n  if (returnKeyType != null) {\n    warnOnce('returnKeyType', 'returnKeyType is deprecated. Use enterKeyHint.');\n  }\n  */\n  supportedProps.enterKeyHint = enterKeyHint || returnKeyType;\n  supportedProps.inputMode = _inputMode;\n  supportedProps.onBlur = handleBlur;\n  supportedProps.onChange = handleChange;\n  supportedProps.onFocus = handleFocus;\n  supportedProps.onKeyDown = handleKeyDown;\n  supportedProps.onSelect = handleSelectionChange;\n  /*\n  if (editable != null) {\n    warnOnce('editable', 'editable is deprecated. Use readOnly.');\n  }\n  */\n  supportedProps.readOnly = readOnly === true || editable === false;\n  /*\n  if (numberOfLines != null) {\n    warnOnce(\n      'numberOfLines',\n      'TextInput numberOfLines is deprecated. Use rows.'\n    );\n  }\n  */\n  supportedProps.rows = multiline ? rows != null ? rows : numberOfLines : 1;\n  supportedProps.spellCheck = spellCheck != null ? spellCheck : autoCorrect;\n  supportedProps.style = [{\n    '--placeholderTextColor': placeholderTextColor\n  }, styles.textinput$raw, styles.placeholder, props.style, caretHidden && styles.caretHidden];\n  supportedProps.type = multiline ? undefined : type;\n  supportedProps.virtualkeyboardpolicy = showSoftInputOnFocus === false ? 'manual' : 'auto';\n  var platformMethodsRef = usePlatformMethods(supportedProps);\n  var setRef = useMergeRefs(hostRef, platformMethodsRef, imperativeRef, forwardedRef);\n  supportedProps.ref = setRef;\n  var langDirection = props.lang != null ? getLocaleDirection(props.lang) : null;\n  var componentDirection = props.dir || langDirection;\n  var writingDirection = componentDirection || contextDirection;\n  var element = createElement(component, supportedProps, {\n    writingDirection\n  });\n  return element;\n});\nTextInput.displayName = 'TextInput';\n// $FlowFixMe\nTextInput.State = TextInputState;\nvar styles = StyleSheet.create({\n  textinput$raw: {\n    MozAppearance: 'textfield',\n    WebkitAppearance: 'none',\n    backgroundColor: 'transparent',\n    border: '0 solid black',\n    borderRadius: 0,\n    boxSizing: 'border-box',\n    font: '14px System',\n    margin: 0,\n    padding: 0,\n    resize: 'none'\n  },\n  placeholder: {\n    placeholderTextColor: 'var(--placeholderTextColor)'\n  },\n  caretHidden: {\n    caretColor: 'transparent'\n  }\n});\nexport default TextInput;","import { jsx } from \"react/jsx-runtime\";\nimport { TextInput as RNTextInput } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nimport { useUniwindAccent } from \"./useUniwindAccent.js\";\nexport const TextInput = copyComponentProperties(RNTextInput, (props) => {\n  const placeholderTextColor = useUniwindAccent(props.placeholderTextColorClassName);\n  return /* @__PURE__ */ jsx(\n    RNTextInput,\n    {\n      ...props,\n      style: [toRNWClassName(props.className), props.style],\n      placeholderTextColor: props.placeholderTextColor ?? placeholderTextColor,\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default TextInput;\n","import { jsx } from \"react/jsx-runtime\";\nimport { View as RNView } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nexport const View = copyComponentProperties(RNView, (props) => {\n  return /* @__PURE__ */ jsx(\n    RNView,\n    {\n      ...props,\n      dataSet: generateDataSet(props),\n      style: [toRNWClassName(props.className), props.style]\n    }\n  );\n});\nexport default View;\n","const toCamelCase = (str) => str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());\nexport const generateDataSet = (props) => {\n  const dataSet = props.dataSet !== void 0 ? { ...props.dataSet } : {};\n  Object.entries(props).forEach(([key, value]) => {\n    if (key.startsWith(\"data-\")) {\n      dataSet[toCamelCase(key.slice(5))] = value;\n    }\n  });\n  return dataSet;\n};\n","/**\n * Copyright (c) Nicolas Gallagher.\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\n'use client';\n\nimport { createRoot as domCreateRoot, hydrateRoot as domHydrateRoot } from 'react-dom/client';\nimport { createSheet } from '../StyleSheet/dom';\nexport function hydrate(element, root) {\n  createSheet(root);\n  return domHydrateRoot(root, element);\n}\nexport default function render(element, root) {\n  createSheet(root);\n  var reactRoot = domCreateRoot(root);\n  reactRoot.render(element);\n  return reactRoot;\n}","/**\n * Copyright (c) Nicolas Gallagher.\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\nexport default function unmountComponentAtNode(rootTag) {\n  rootTag.unmount();\n  return true;\n}","/**\n * Copyright (c) Nicolas Gallagher.\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\nimport UIManager from '../UIManager';\n\n// NativeModules shim\nvar NativeModules = {\n  UIManager\n};\nexport default NativeModules;","/**\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\n'use client';\n\nimport canUseDOM from '../../modules/canUseDom';\nfunction isScreenReaderEnabled() {\n  return new Promise((resolve, reject) => {\n    resolve(true);\n  });\n}\nvar prefersReducedMotionMedia = canUseDOM && typeof window.matchMedia === 'function' ? window.matchMedia('(prefers-reduced-motion: reduce)') : null;\nfunction isReduceMotionEnabled() {\n  return new Promise((resolve, reject) => {\n    resolve(prefersReducedMotionMedia ? prefersReducedMotionMedia.matches : true);\n  });\n}\nfunction addChangeListener(fn) {\n  if (prefersReducedMotionMedia != null) {\n    prefersReducedMotionMedia.addEventListener != null ? prefersReducedMotionMedia.addEventListener('change', fn) : prefersReducedMotionMedia.addListener(fn);\n  }\n}\nfunction removeChangeListener(fn) {\n  if (prefersReducedMotionMedia != null) {\n    prefersReducedMotionMedia.removeEventListener != null ? prefersReducedMotionMedia.removeEventListener('change', fn) : prefersReducedMotionMedia.removeListener(fn);\n  }\n}\nvar handlers = {};\nvar AccessibilityInfo = {\n  /**\n   * Query whether a screen reader is currently enabled.\n   *\n   * Returns a promise which resolves to a boolean.\n   * The result is `true` when a screen reader is enabled and `false` otherwise.\n   */\n  isScreenReaderEnabled,\n  /**\n   * Query whether the user prefers reduced motion.\n   *\n   * Returns a promise which resolves to a boolean.\n   * The result is `true` when a screen reader is enabled and `false` otherwise.\n   */\n  isReduceMotionEnabled,\n  /**\n   * Deprecated\n   */\n  fetch: isScreenReaderEnabled,\n  /**\n   * Add an event handler. Supported events: reduceMotionChanged\n   */\n  addEventListener: function addEventListener(eventName, handler) {\n    if (eventName === 'reduceMotionChanged') {\n      if (!prefersReducedMotionMedia) {\n        return;\n      }\n      var listener = event => {\n        handler(event.matches);\n      };\n      addChangeListener(listener);\n      handlers[handler] = listener;\n    }\n    return {\n      remove: () => AccessibilityInfo.removeEventListener(eventName, handler)\n    };\n  },\n  /**\n   * Set accessibility focus to a react component.\n   */\n  setAccessibilityFocus: function setAccessibilityFocus(reactTag) {},\n  /**\n   * Post a string to be announced by the screen reader.\n   */\n  announceForAccessibility: function announceForAccessibility(announcement) {},\n  /**\n   * Remove an event handler.\n   */\n  removeEventListener: function removeEventListener(eventName, handler) {\n    if (eventName === 'reduceMotionChanged') {\n      var listener = handlers[handler];\n      if (!listener || !prefersReducedMotionMedia) {\n        return;\n      }\n      removeChangeListener(listener);\n    }\n    return;\n  }\n};\nexport default AccessibilityInfo;","/**\n * Copyright (c) Nicolas Gallagher.\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\nclass Alert {\n  static alert() {}\n}\nexport default Alert;","/**\n * Copyright (c) Nicolas Gallagher.\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\nimport * as React from 'react';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\nvar RootTagContext = /*#__PURE__*/React.createContext(null);\nvar AppContainer = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n  var children = props.children,\n    WrapperComponent = props.WrapperComponent;\n  var innerView = /*#__PURE__*/React.createElement(View, {\n    children: children,\n    key: 1,\n    style: styles.appContainer\n  });\n  if (WrapperComponent) {\n    innerView = /*#__PURE__*/React.createElement(WrapperComponent, null, innerView);\n  }\n  return /*#__PURE__*/React.createElement(RootTagContext.Provider, {\n    value: props.rootTag\n  }, /*#__PURE__*/React.createElement(View, {\n    ref: forwardedRef,\n    style: styles.appContainer\n  }, innerView));\n});\nAppContainer.displayName = 'AppContainer';\nexport default AppContainer;\nvar styles = StyleSheet.create({\n  appContainer: {\n    flex: 1,\n    pointerEvents: 'box-none'\n  }\n});","/**\n * Copyright (c) Nicolas Gallagher.\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\n'use client';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport invariant from 'fbjs/lib/invariant';\nimport unmountComponentAtNode from '../unmountComponentAtNode';\nimport renderApplication, { getApplication as _getApplication } from './renderApplication';\nvar emptyObject = {};\nvar runnables = {};\nvar componentProviderInstrumentationHook = component => component();\nvar wrapperComponentProvider;\n\n/**\n * `AppRegistry` is the JS entry point to running all React Native apps.\n */\nexport default class AppRegistry {\n  static getAppKeys() {\n    return Object.keys(runnables);\n  }\n  static getApplication(appKey, appParameters) {\n    invariant(runnables[appKey] && runnables[appKey].getApplication, \"Application \" + appKey + \" has not been registered. \" + 'This is either due to an import error during initialization or failure to call AppRegistry.registerComponent.');\n    return runnables[appKey].getApplication(appParameters);\n  }\n  static registerComponent(appKey, componentProvider) {\n    runnables[appKey] = {\n      getApplication: appParameters => _getApplication(componentProviderInstrumentationHook(componentProvider), appParameters ? appParameters.initialProps : emptyObject, wrapperComponentProvider && wrapperComponentProvider(appParameters)),\n      run: appParameters => renderApplication(componentProviderInstrumentationHook(componentProvider), wrapperComponentProvider && wrapperComponentProvider(appParameters), appParameters.callback, {\n        hydrate: appParameters.hydrate || false,\n        initialProps: appParameters.initialProps || emptyObject,\n        mode: appParameters.mode || 'concurrent',\n        rootTag: appParameters.rootTag\n      })\n    };\n    return appKey;\n  }\n  static registerConfig(config) {\n    config.forEach(_ref => {\n      var appKey = _ref.appKey,\n        component = _ref.component,\n        run = _ref.run;\n      if (run) {\n        AppRegistry.registerRunnable(appKey, run);\n      } else {\n        invariant(component, 'No component provider passed in');\n        AppRegistry.registerComponent(appKey, component);\n      }\n    });\n  }\n\n  // TODO: fix style sheet creation when using this method\n  static registerRunnable(appKey, run) {\n    runnables[appKey] = {\n      run\n    };\n    return appKey;\n  }\n  static runApplication(appKey, appParameters) {\n    var isDevelopment = process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test';\n    if (isDevelopment) {\n      var params = _objectSpread({}, appParameters);\n      params.rootTag = \"#\" + params.rootTag.id;\n      console.log(\"Running application \\\"\" + appKey + \"\\\" with appParams:\\n\", params, \"\\nDevelopment-level warnings: \" + (isDevelopment ? 'ON' : 'OFF') + \".\" + (\"\\nPerformance optimizations: \" + (isDevelopment ? 'OFF' : 'ON') + \".\"));\n    }\n    invariant(runnables[appKey] && runnables[appKey].run, \"Application \\\"\" + appKey + \"\\\" has not been registered. \" + 'This is either due to an import error during initialization or failure to call AppRegistry.registerComponent.');\n    return runnables[appKey].run(appParameters);\n  }\n  static setComponentProviderInstrumentationHook(hook) {\n    componentProviderInstrumentationHook = hook;\n  }\n  static setWrapperComponentProvider(provider) {\n    wrapperComponentProvider = provider;\n  }\n  static unmountApplicationComponentAtRootTag(rootTag) {\n    unmountComponentAtNode(rootTag);\n  }\n}","import _extends from \"@babel/runtime/helpers/extends\";\n/**\n * Copyright (c) Nicolas Gallagher.\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\nimport AppContainer from './AppContainer';\nimport invariant from 'fbjs/lib/invariant';\nimport render, { hydrate } from '../render';\nimport StyleSheet from '../StyleSheet';\nimport React from 'react';\nexport default function renderApplication(RootComponent, WrapperComponent, callback, options) {\n  var shouldHydrate = options.hydrate,\n    initialProps = options.initialProps,\n    rootTag = options.rootTag;\n  var renderFn = shouldHydrate ? hydrate : render;\n  invariant(rootTag, 'Expect to have a valid rootTag, instead got ', rootTag);\n  return renderFn(/*#__PURE__*/React.createElement(AppContainer, {\n    WrapperComponent: WrapperComponent,\n    ref: callback,\n    rootTag: rootTag\n  }, /*#__PURE__*/React.createElement(RootComponent, initialProps)), rootTag);\n}\nexport function getApplication(RootComponent, initialProps, WrapperComponent) {\n  var element = /*#__PURE__*/React.createElement(AppContainer, {\n    WrapperComponent: WrapperComponent,\n    rootTag: {}\n  }, /*#__PURE__*/React.createElement(RootComponent, initialProps));\n  // Don't escape CSS text\n  var getStyleElement = props => {\n    var sheet = StyleSheet.getSheet();\n    return /*#__PURE__*/React.createElement(\"style\", _extends({}, props, {\n      dangerouslySetInnerHTML: {\n        __html: sheet.textContent\n      },\n      id: sheet.id\n    }));\n  };\n  return {\n    element,\n    getStyleElement\n  };\n}","/**\n * Copyright (c) Nicolas Gallagher.\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\n'use client';\n\nimport invariant from 'fbjs/lib/invariant';\nimport EventEmitter from '../../vendor/react-native/vendor/emitter/EventEmitter';\nimport canUseDOM from '../../modules/canUseDom';\n\n// Android 4.4 browser\nvar isPrefixed = canUseDOM && !document.hasOwnProperty('hidden') && document.hasOwnProperty('webkitHidden');\nvar EVENT_TYPES = ['change', 'memoryWarning'];\nvar VISIBILITY_CHANGE_EVENT = isPrefixed ? 'webkitvisibilitychange' : 'visibilitychange';\nvar VISIBILITY_STATE_PROPERTY = isPrefixed ? 'webkitVisibilityState' : 'visibilityState';\nvar AppStates = {\n  BACKGROUND: 'background',\n  ACTIVE: 'active'\n};\nvar changeEmitter = null;\nexport default class AppState {\n  static get currentState() {\n    if (!AppState.isAvailable) {\n      return AppStates.ACTIVE;\n    }\n    switch (document[VISIBILITY_STATE_PROPERTY]) {\n      case 'hidden':\n      case 'prerender':\n      case 'unloaded':\n        return AppStates.BACKGROUND;\n      default:\n        return AppStates.ACTIVE;\n    }\n  }\n  static addEventListener(type, handler) {\n    if (AppState.isAvailable) {\n      invariant(EVENT_TYPES.indexOf(type) !== -1, 'Trying to subscribe to unknown event: \"%s\"', type);\n      if (type === 'change') {\n        if (!changeEmitter) {\n          changeEmitter = new EventEmitter();\n          document.addEventListener(VISIBILITY_CHANGE_EVENT, () => {\n            if (changeEmitter) {\n              changeEmitter.emit('change', AppState.currentState);\n            }\n          }, false);\n        }\n        return changeEmitter.addListener(type, handler);\n      }\n    }\n  }\n}\nAppState.isAvailable = canUseDOM && !!document[VISIBILITY_STATE_PROPERTY];","/**\n * Copyright (c) Nicolas Gallagher.\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\n'use client';\n\nvar clipboardAvailable;\nexport default class Clipboard {\n  static isAvailable() {\n    if (clipboardAvailable === undefined) {\n      clipboardAvailable = typeof document.queryCommandSupported === 'function' && document.queryCommandSupported('copy');\n    }\n    return clipboardAvailable;\n  }\n  static getString() {\n    return Promise.resolve('');\n  }\n  static setString(text) {\n    var success = false;\n    var body = document.body;\n    if (body) {\n      // add the text to a hidden node\n      var node = document.createElement('span');\n      node.textContent = text;\n      node.style.opacity = '0';\n      node.style.position = 'absolute';\n      node.style.whiteSpace = 'pre-wrap';\n      node.style.userSelect = 'auto';\n      body.appendChild(node);\n\n      // select the text\n      var selection = window.getSelection();\n      selection.removeAllRanges();\n      var range = document.createRange();\n      range.selectNodeContents(node);\n      selection.addRange(range);\n\n      // attempt to copy\n      try {\n        document.execCommand('copy');\n        success = true;\n      } catch (e) {}\n\n      // remove selection and node\n      selection.removeAllRanges();\n      body.removeChild(node);\n    }\n    return success;\n  }\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 * @format\n */\n\n'use strict';\n\nimport Platform from '../../../exports/Platform';\nimport UIManager from '../../../exports/UIManager';\nvar __DEV__ = process.env.NODE_ENV !== 'production';\nfunction configureNext(config, onAnimationDidEnd) {\n  if (!Platform.isTesting) {\n    UIManager.configureNextLayoutAnimation(config, onAnimationDidEnd !== null && onAnimationDidEnd !== void 0 ? onAnimationDidEnd : function () {}, function () {} /* unused onError */);\n  }\n}\nfunction create(duration, type, property) {\n  return {\n    duration,\n    create: {\n      type,\n      property\n    },\n    update: {\n      type\n    },\n    delete: {\n      type,\n      property\n    }\n  };\n}\nvar Presets = {\n  easeInEaseOut: create(300, 'easeInEaseOut', 'opacity'),\n  linear: create(500, 'linear', 'opacity'),\n  spring: {\n    duration: 700,\n    create: {\n      type: 'linear',\n      property: 'opacity'\n    },\n    update: {\n      type: 'spring',\n      springDamping: 0.4\n    },\n    delete: {\n      type: 'linear',\n      property: 'opacity'\n    }\n  }\n};\n\n/**\n * Automatically animates views to their new positions when the\n * next layout happens.\n *\n * A common way to use this API is to call it before calling `setState`.\n *\n * Note that in order to get this to work on **Android** you need to set the following flags via `UIManager`:\n *\n *     UIManager.setLayoutAnimationEnabledExperimental && UIManager.setLayoutAnimationEnabledExperimental(true);\n */\nvar LayoutAnimation = {\n  /**\n   * Schedules an animation to happen on the next layout.\n   *\n   * @param config Specifies animation properties:\n   *\n   *   - `duration` in milliseconds\n   *   - `create`, `AnimationConfig` for animating in new views\n   *   - `update`, `AnimationConfig` for animating views that have been updated\n   *\n   * @param onAnimationDidEnd Called when the animation finished.\n   * Only supported on iOS.\n   * @param onError Called on error. Only supported on iOS.\n   */\n  configureNext,\n  /**\n   * Helper for creating a config for `configureNext`.\n   */\n  create,\n  Types: Object.freeze({\n    spring: 'spring',\n    linear: 'linear',\n    easeInEaseOut: 'easeInEaseOut',\n    easeIn: 'easeIn',\n    easeOut: 'easeOut',\n    keyboard: 'keyboard'\n  }),\n  Properties: Object.freeze({\n    opacity: 'opacity',\n    scaleX: 'scaleX',\n    scaleY: 'scaleY',\n    scaleXY: 'scaleXY'\n  }),\n  checkConfig() {\n    console.error('LayoutAnimation.checkConfig(...) has been disabled.');\n  },\n  Presets,\n  easeInEaseOut: configureNext.bind(null, Presets.easeInEaseOut),\n  linear: configureNext.bind(null, Presets.linear),\n  spring: configureNext.bind(null, Presets.spring)\n};\nexport default LayoutAnimation;","/**\n * Copyright (c) Nicolas Gallagher.\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\nimport LayoutAnimation from '../../vendor/react-native/LayoutAnimation';\nexport default LayoutAnimation;","/**\n * Copyright (c) Nicolas Gallagher.\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\nimport invariant from 'fbjs/lib/invariant';\nimport canUseDOM from '../../modules/canUseDom';\nvar initialURL = canUseDOM ? window.location.href : '';\nclass Linking {\n  constructor() {\n    this._eventCallbacks = {};\n  }\n  /**\n   * An object mapping of event name\n   * and all the callbacks subscribing to it\n   */\n  _dispatchEvent(event) {\n    for (var _len = arguments.length, data = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      data[_key - 1] = arguments[_key];\n    }\n    var listeners = this._eventCallbacks[event];\n    if (listeners != null && Array.isArray(listeners)) {\n      listeners.map(listener => {\n        listener(...data);\n      });\n    }\n  }\n\n  /**\n   * Adds a event listener for the specified event. The callback will be called when the\n   * said event is dispatched.\n   */\n  addEventListener(eventType, callback) {\n    var _this = this;\n    if (!_this._eventCallbacks[eventType]) {\n      _this._eventCallbacks[eventType] = [callback];\n    }\n    _this._eventCallbacks[eventType].push(callback);\n    return {\n      remove() {\n        var callbacks = _this._eventCallbacks[eventType];\n        var filteredCallbacks = callbacks.filter(c => c.toString() !== callback.toString());\n        _this._eventCallbacks[eventType] = filteredCallbacks;\n      }\n    };\n  }\n\n  /**\n   * Removes a previously added event listener for the specified event. The callback must\n   * be the same object as the one passed to `addEventListener`.\n   */\n  removeEventListener(eventType, callback) {\n    console.error(\"Linking.removeEventListener('\" + eventType + \"', ...): Method has been \" + 'deprecated. Please instead use `remove()` on the subscription ' + 'returned by `Linking.addEventListener`.');\n    var callbacks = this._eventCallbacks[eventType];\n    var filteredCallbacks = callbacks.filter(c => c.toString() !== callback.toString());\n    this._eventCallbacks[eventType] = filteredCallbacks;\n  }\n  canOpenURL() {\n    return Promise.resolve(true);\n  }\n  getInitialURL() {\n    return Promise.resolve(initialURL);\n  }\n\n  /**\n   * Try to open the given url in a secure fashion. The method returns a Promise object.\n   * If a target is passed (including undefined) that target will be used, otherwise '_blank'.\n   * If the url opens, the promise is resolved. If not, the promise is rejected.\n   * Dispatches the `onOpen` event if `url` is opened successfully.\n   */\n  openURL(url, target) {\n    if (arguments.length === 1) {\n      target = '_blank';\n    }\n    try {\n      open(url, target);\n      this._dispatchEvent('onOpen', url);\n      return Promise.resolve();\n    } catch (e) {\n      return Promise.reject(e);\n    }\n  }\n  _validateURL(url) {\n    invariant(typeof url === 'string', 'Invalid URL: should be a string. Was: ' + url);\n    invariant(url, 'Invalid URL: cannot be empty');\n  }\n}\nvar open = (url, target) => {\n  if (canUseDOM) {\n    var urlToOpen = new URL(url, window.location).toString();\n    if (urlToOpen.indexOf('tel:') === 0) {\n      window.location = urlToOpen;\n    } else {\n      window.open(urlToOpen, target, 'noopener');\n    }\n  }\n};\nexport default new Linking();","/**\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\nimport NativeEventEmitter from '../../vendor/react-native/EventEmitter/NativeEventEmitter';\nexport default NativeEventEmitter;","/**\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 * @format\n */\n\nvar TouchHistoryMath = {\n  /**\n   * This code is optimized and not intended to look beautiful. This allows\n   * computing of touch centroids that have moved after `touchesChangedAfter`\n   * timeStamp. You can compute the current centroid involving all touches\n   * moves after `touchesChangedAfter`, or you can compute the previous\n   * centroid of all touches that were moved after `touchesChangedAfter`.\n   *\n   * @param {TouchHistoryMath} touchHistory Standard Responder touch track\n   * data.\n   * @param {number} touchesChangedAfter timeStamp after which moved touches\n   * are considered \"actively moving\" - not just \"active\".\n   * @param {boolean} isXAxis Consider `x` dimension vs. `y` dimension.\n   * @param {boolean} ofCurrent Compute current centroid for actively moving\n   * touches vs. previous centroid of now actively moving touches.\n   * @return {number} value of centroid in specified dimension.\n   */\n  centroidDimension: function centroidDimension(touchHistory, touchesChangedAfter, isXAxis, ofCurrent) {\n    var touchBank = touchHistory.touchBank;\n    var total = 0;\n    var count = 0;\n    var oneTouchData = touchHistory.numberActiveTouches === 1 ? touchHistory.touchBank[touchHistory.indexOfSingleActiveTouch] : null;\n    if (oneTouchData !== null) {\n      if (oneTouchData.touchActive && oneTouchData.currentTimeStamp > touchesChangedAfter) {\n        total += ofCurrent && isXAxis ? oneTouchData.currentPageX : ofCurrent && !isXAxis ? oneTouchData.currentPageY : !ofCurrent && isXAxis ? oneTouchData.previousPageX : oneTouchData.previousPageY;\n        count = 1;\n      }\n    } else {\n      for (var i = 0; i < touchBank.length; i++) {\n        var touchTrack = touchBank[i];\n        if (touchTrack !== null && touchTrack !== undefined && touchTrack.touchActive && touchTrack.currentTimeStamp >= touchesChangedAfter) {\n          var toAdd = void 0; // Yuck, program temporarily in invalid state.\n          if (ofCurrent && isXAxis) {\n            toAdd = touchTrack.currentPageX;\n          } else if (ofCurrent && !isXAxis) {\n            toAdd = touchTrack.currentPageY;\n          } else if (!ofCurrent && isXAxis) {\n            toAdd = touchTrack.previousPageX;\n          } else {\n            toAdd = touchTrack.previousPageY;\n          }\n          total += toAdd;\n          count++;\n        }\n      }\n    }\n    return count > 0 ? total / count : TouchHistoryMath.noCentroid;\n  },\n  currentCentroidXOfTouchesChangedAfter: function currentCentroidXOfTouchesChangedAfter(touchHistory, touchesChangedAfter) {\n    return TouchHistoryMath.centroidDimension(touchHistory, touchesChangedAfter, true,\n    // isXAxis\n    true // ofCurrent\n    );\n  },\n  currentCentroidYOfTouchesChangedAfter: function currentCentroidYOfTouchesChangedAfter(touchHistory, touchesChangedAfter) {\n    return TouchHistoryMath.centroidDimension(touchHistory, touchesChangedAfter, false,\n    // isXAxis\n    true // ofCurrent\n    );\n  },\n  previousCentroidXOfTouchesChangedAfter: function previousCentroidXOfTouchesChangedAfter(touchHistory, touchesChangedAfter) {\n    return TouchHistoryMath.centroidDimension(touchHistory, touchesChangedAfter, true,\n    // isXAxis\n    false // ofCurrent\n    );\n  },\n  previousCentroidYOfTouchesChangedAfter: function previousCentroidYOfTouchesChangedAfter(touchHistory, touchesChangedAfter) {\n    return TouchHistoryMath.centroidDimension(touchHistory, touchesChangedAfter, false,\n    // isXAxis\n    false // ofCurrent\n    );\n  },\n  currentCentroidX: function currentCentroidX(touchHistory) {\n    return TouchHistoryMath.centroidDimension(touchHistory, 0,\n    // touchesChangedAfter\n    true,\n    // isXAxis\n    true // ofCurrent\n    );\n  },\n  currentCentroidY: function currentCentroidY(touchHistory) {\n    return TouchHistoryMath.centroidDimension(touchHistory, 0,\n    // touchesChangedAfter\n    false,\n    // isXAxis\n    true // ofCurrent\n    );\n  },\n  noCentroid: -1\n};\nexport default TouchHistoryMath;","/**\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 * @format\n */\n\n'use strict';\n\nimport InteractionManager from '../../../exports/InteractionManager';\nimport TouchHistoryMath from '../TouchHistoryMath';\nvar currentCentroidXOfTouchesChangedAfter = TouchHistoryMath.currentCentroidXOfTouchesChangedAfter;\nvar currentCentroidYOfTouchesChangedAfter = TouchHistoryMath.currentCentroidYOfTouchesChangedAfter;\nvar previousCentroidXOfTouchesChangedAfter = TouchHistoryMath.previousCentroidXOfTouchesChangedAfter;\nvar previousCentroidYOfTouchesChangedAfter = TouchHistoryMath.previousCentroidYOfTouchesChangedAfter;\nvar currentCentroidX = TouchHistoryMath.currentCentroidX;\nvar currentCentroidY = TouchHistoryMath.currentCentroidY;\n\n/**\n * `PanResponder` reconciles several touches into a single gesture. It makes\n * single-touch gestures resilient to extra touches, and can be used to\n * recognize simple multi-touch gestures.\n *\n * By default, `PanResponder` holds an `InteractionManager` handle to block\n * long-running JS events from interrupting active gestures.\n *\n * It provides a predictable wrapper of the responder handlers provided by the\n * [gesture responder system](docs/gesture-responder-system.html).\n * For each handler, it provides a new `gestureState` object alongside the\n * native event object:\n *\n * ```\n * onPanResponderMove: (event, gestureState) => {}\n * ```\n *\n * A native event is a synthetic touch event with the following form:\n *\n *  - `nativeEvent`\n *      + `changedTouches` - Array of all touch events that have changed since the last event\n *      + `identifier` - The ID of the touch\n *      + `locationX` - The X position of the touch, relative to the element\n *      + `locationY` - The Y position of the touch, relative to the element\n *      + `pageX` - The X position of the touch, relative to the root element\n *      + `pageY` - The Y position of the touch, relative to the root element\n *      + `target` - The node id of the element receiving the touch event\n *      + `timestamp` - A time identifier for the touch, useful for velocity calculation\n *      + `touches` - Array of all current touches on the screen\n *\n * A `gestureState` object has the following:\n *\n *  - `stateID` - ID of the gestureState- persisted as long as there at least\n *     one touch on screen\n *  - `moveX` - the latest screen coordinates of the recently-moved touch\n *  - `moveY` - the latest screen coordinates of the recently-moved touch\n *  - `x0` - the screen coordinates of the responder grant\n *  - `y0` - the screen coordinates of the responder grant\n *  - `dx` - accumulated distance of the gesture since the touch started\n *  - `dy` - accumulated distance of the gesture since the touch started\n *  - `vx` - current velocity of the gesture\n *  - `vy` - current velocity of the gesture\n *  - `numberActiveTouches` - Number of touches currently on screen\n *\n * ### Basic Usage\n *\n * ```\n *   componentWillMount: function() {\n *     this._panResponder = PanResponder.create({\n *       // Ask to be the responder:\n *       onStartShouldSetPanResponder: (evt, gestureState) => true,\n *       onStartShouldSetPanResponderCapture: (evt, gestureState) => true,\n *       onMoveShouldSetPanResponder: (evt, gestureState) => true,\n *       onMoveShouldSetPanResponderCapture: (evt, gestureState) => true,\n *\n *       onPanResponderGrant: (evt, gestureState) => {\n *         // The gesture has started. Show visual feedback so the user knows\n *         // what is happening!\n *\n *         // gestureState.d{x,y} will be set to zero now\n *       },\n *       onPanResponderMove: (evt, gestureState) => {\n *         // The most recent move distance is gestureState.move{X,Y}\n *\n *         // The accumulated gesture distance since becoming responder is\n *         // gestureState.d{x,y}\n *       },\n *       onPanResponderTerminationRequest: (evt, gestureState) => true,\n *       onPanResponderRelease: (evt, gestureState) => {\n *         // The user has released all touches while this view is the\n *         // responder. This typically means a gesture has succeeded\n *       },\n *       onPanResponderTerminate: (evt, gestureState) => {\n *         // Another component has become the responder, so this gesture\n *         // should be cancelled\n *       },\n *       onShouldBlockNativeResponder: (evt, gestureState) => {\n *         // Returns whether this component should block native components from becoming the JS\n *         // responder. Returns true by default. Is currently only supported on android.\n *         return true;\n *       },\n *     });\n *   },\n *\n *   render: function() {\n *     return (\n *       <View {...this._panResponder.panHandlers} />\n *     );\n *   },\n *\n * ```\n *\n * ### Working Example\n *\n * To see it in action, try the\n * [PanResponder example in RNTester](https://github.com/facebook/react-native/blob/master/RNTester/js/PanResponderExample.js)\n */\n\nvar PanResponder = {\n  /**\n   *\n   * A graphical explanation of the touch data flow:\n   *\n   * +----------------------------+             +--------------------------------+\n   * | ResponderTouchHistoryStore |             |TouchHistoryMath                |\n   * +----------------------------+             +----------+---------------------+\n   * |Global store of touchHistory|             |Allocation-less math util       |\n   * |including activeness, start |             |on touch history (centroids     |\n   * |position, prev/cur position.|             |and multitouch movement etc)    |\n   * |                            |             |                                |\n   * +----^-----------------------+             +----^---------------------------+\n   *      |                                          |\n   *      | (records relevant history                |\n   *      |  of touches relevant for                 |\n   *      |  implementing higher level               |\n   *      |  gestures)                               |\n   *      |                                          |\n   * +----+-----------------------+             +----|---------------------------+\n   * | ResponderEventPlugin       |             |    |   Your App/Component      |\n   * +----------------------------+             +----|---------------------------+\n   * |Negotiates which view gets  | Low level   |    |             High level    |\n   * |onResponderMove events.     | events w/   |  +-+-------+     events w/     |\n   * |Also records history into   | touchHistory|  |   Pan   |     multitouch +  |\n   * |ResponderTouchHistoryStore. +---------------->Responder+-----> accumulative|\n   * +----------------------------+ attached to |  |         |     distance and  |\n   *                                 each event |  +---------+     velocity.     |\n   *                                            |                                |\n   *                                            |                                |\n   *                                            +--------------------------------+\n   *\n   *\n   *\n   * Gesture that calculates cumulative movement over time in a way that just\n   * \"does the right thing\" for multiple touches. The \"right thing\" is very\n   * nuanced. When moving two touches in opposite directions, the cumulative\n   * distance is zero in each dimension. When two touches move in parallel five\n   * pixels in the same direction, the cumulative distance is five, not ten. If\n   * two touches start, one moves five in a direction, then stops and the other\n   * touch moves fives in the same direction, the cumulative distance is ten.\n   *\n   * This logic requires a kind of processing of time \"clusters\" of touch events\n   * so that two touch moves that essentially occur in parallel but move every\n   * other frame respectively, are considered part of the same movement.\n   *\n   * Explanation of some of the non-obvious fields:\n   *\n   * - moveX/moveY: If no move event has been observed, then `(moveX, moveY)` is\n   *   invalid. If a move event has been observed, `(moveX, moveY)` is the\n   *   centroid of the most recently moved \"cluster\" of active touches.\n   *   (Currently all move have the same timeStamp, but later we should add some\n   *   threshold for what is considered to be \"moving\"). If a palm is\n   *   accidentally counted as a touch, but a finger is moving greatly, the palm\n   *   will move slightly, but we only want to count the single moving touch.\n   * - x0/y0: Centroid location (non-cumulative) at the time of becoming\n   *   responder.\n   * - dx/dy: Cumulative touch distance - not the same thing as sum of each touch\n   *   distance. Accounts for touch moves that are clustered together in time,\n   *   moving the same direction. Only valid when currently responder (otherwise,\n   *   it only represents the drag distance below the threshold).\n   * - vx/vy: Velocity.\n   */\n\n  _initializeGestureState(gestureState) {\n    gestureState.moveX = 0;\n    gestureState.moveY = 0;\n    gestureState.x0 = 0;\n    gestureState.y0 = 0;\n    gestureState.dx = 0;\n    gestureState.dy = 0;\n    gestureState.vx = 0;\n    gestureState.vy = 0;\n    gestureState.numberActiveTouches = 0;\n    // All `gestureState` accounts for timeStamps up until:\n    gestureState._accountsForMovesUpTo = 0;\n  },\n  /**\n   * This is nuanced and is necessary. It is incorrect to continuously take all\n   * active *and* recently moved touches, find the centroid, and track how that\n   * result changes over time. Instead, we must take all recently moved\n   * touches, and calculate how the centroid has changed just for those\n   * recently moved touches, and append that change to an accumulator. This is\n   * to (at least) handle the case where the user is moving three fingers, and\n   * then one of the fingers stops but the other two continue.\n   *\n   * This is very different than taking all of the recently moved touches and\n   * storing their centroid as `dx/dy`. For correctness, we must *accumulate\n   * changes* in the centroid of recently moved touches.\n   *\n   * There is also some nuance with how we handle multiple moved touches in a\n   * single event. With the way `ReactNativeEventEmitter` dispatches touches as\n   * individual events, multiple touches generate two 'move' events, each of\n   * them triggering `onResponderMove`. But with the way `PanResponder` works,\n   * all of the gesture inference is performed on the first dispatch, since it\n   * looks at all of the touches (even the ones for which there hasn't been a\n   * native dispatch yet). Therefore, `PanResponder` does not call\n   * `onResponderMove` passed the first dispatch. This diverges from the\n   * typical responder callback pattern (without using `PanResponder`), but\n   * avoids more dispatches than necessary.\n   */\n  _updateGestureStateOnMove(gestureState, touchHistory) {\n    gestureState.numberActiveTouches = touchHistory.numberActiveTouches;\n    gestureState.moveX = currentCentroidXOfTouchesChangedAfter(touchHistory, gestureState._accountsForMovesUpTo);\n    gestureState.moveY = currentCentroidYOfTouchesChangedAfter(touchHistory, gestureState._accountsForMovesUpTo);\n    var movedAfter = gestureState._accountsForMovesUpTo;\n    var prevX = previousCentroidXOfTouchesChangedAfter(touchHistory, movedAfter);\n    var x = currentCentroidXOfTouchesChangedAfter(touchHistory, movedAfter);\n    var prevY = previousCentroidYOfTouchesChangedAfter(touchHistory, movedAfter);\n    var y = currentCentroidYOfTouchesChangedAfter(touchHistory, movedAfter);\n    var nextDX = gestureState.dx + (x - prevX);\n    var nextDY = gestureState.dy + (y - prevY);\n\n    // TODO: This must be filtered intelligently.\n    var dt = touchHistory.mostRecentTimeStamp - gestureState._accountsForMovesUpTo;\n    gestureState.vx = (nextDX - gestureState.dx) / dt;\n    gestureState.vy = (nextDY - gestureState.dy) / dt;\n    gestureState.dx = nextDX;\n    gestureState.dy = nextDY;\n    gestureState._accountsForMovesUpTo = touchHistory.mostRecentTimeStamp;\n  },\n  /**\n   * @param {object} config Enhanced versions of all of the responder callbacks\n   * that provide not only the typical `ResponderSyntheticEvent`, but also the\n   * `PanResponder` gesture state.  Simply replace the word `Responder` with\n   * `PanResponder` in each of the typical `onResponder*` callbacks. For\n   * example, the `config` object would look like:\n   *\n   *  - `onMoveShouldSetPanResponder: (e, gestureState) => {...}`\n   *  - `onMoveShouldSetPanResponderCapture: (e, gestureState) => {...}`\n   *  - `onStartShouldSetPanResponder: (e, gestureState) => {...}`\n   *  - `onStartShouldSetPanResponderCapture: (e, gestureState) => {...}`\n   *  - `onPanResponderReject: (e, gestureState) => {...}`\n   *  - `onPanResponderGrant: (e, gestureState) => {...}`\n   *  - `onPanResponderStart: (e, gestureState) => {...}`\n   *  - `onPanResponderEnd: (e, gestureState) => {...}`\n   *  - `onPanResponderRelease: (e, gestureState) => {...}`\n   *  - `onPanResponderMove: (e, gestureState) => {...}`\n   *  - `onPanResponderTerminate: (e, gestureState) => {...}`\n   *  - `onPanResponderTerminationRequest: (e, gestureState) => {...}`\n   *  - `onShouldBlockNativeResponder: (e, gestureState) => {...}`\n   *\n   *  In general, for events that have capture equivalents, we update the\n   *  gestureState once in the capture phase and can use it in the bubble phase\n   *  as well.\n   *\n   *  Be careful with onStartShould* callbacks. They only reflect updated\n   *  `gestureState` for start/end events that bubble/capture to the Node.\n   *  Once the node is the responder, you can rely on every start/end event\n   *  being processed by the gesture and `gestureState` being updated\n   *  accordingly. (numberActiveTouches) may not be totally accurate unless you\n   *  are the responder.\n   */\n  create(config) {\n    var interactionState = {\n      handle: null,\n      shouldCancelClick: false,\n      timeout: null\n    };\n    var gestureState = {\n      // Useful for debugging\n      stateID: Math.random(),\n      moveX: 0,\n      moveY: 0,\n      x0: 0,\n      y0: 0,\n      dx: 0,\n      dy: 0,\n      vx: 0,\n      vy: 0,\n      numberActiveTouches: 0,\n      _accountsForMovesUpTo: 0\n    };\n    var panHandlers = {\n      onStartShouldSetResponder(event) {\n        return config.onStartShouldSetPanResponder == null ? false : config.onStartShouldSetPanResponder(event, gestureState);\n      },\n      onMoveShouldSetResponder(event) {\n        return config.onMoveShouldSetPanResponder == null ? false : config.onMoveShouldSetPanResponder(event, gestureState);\n      },\n      onStartShouldSetResponderCapture(event) {\n        // TODO: Actually, we should reinitialize the state any time\n        // touches.length increases from 0 active to > 0 active.\n        if (event.nativeEvent.touches.length === 1) {\n          PanResponder._initializeGestureState(gestureState);\n        }\n        gestureState.numberActiveTouches = event.touchHistory.numberActiveTouches;\n        return config.onStartShouldSetPanResponderCapture != null ? config.onStartShouldSetPanResponderCapture(event, gestureState) : false;\n      },\n      onMoveShouldSetResponderCapture(event) {\n        var touchHistory = event.touchHistory;\n        // Responder system incorrectly dispatches should* to current responder\n        // Filter out any touch moves past the first one - we would have\n        // already processed multi-touch geometry during the first event.\n        if (gestureState._accountsForMovesUpTo === touchHistory.mostRecentTimeStamp) {\n          return false;\n        }\n        PanResponder._updateGestureStateOnMove(gestureState, touchHistory);\n        return config.onMoveShouldSetPanResponderCapture ? config.onMoveShouldSetPanResponderCapture(event, gestureState) : false;\n      },\n      onResponderGrant(event) {\n        if (!interactionState.handle) {\n          interactionState.handle = InteractionManager.createInteractionHandle();\n        }\n        if (interactionState.timeout) {\n          clearInteractionTimeout(interactionState);\n        }\n        interactionState.shouldCancelClick = true;\n        gestureState.x0 = currentCentroidX(event.touchHistory);\n        gestureState.y0 = currentCentroidY(event.touchHistory);\n        gestureState.dx = 0;\n        gestureState.dy = 0;\n        if (config.onPanResponderGrant) {\n          config.onPanResponderGrant(event, gestureState);\n        }\n        // TODO: t7467124 investigate if this can be removed\n        return config.onShouldBlockNativeResponder == null ? true : config.onShouldBlockNativeResponder(event, gestureState);\n      },\n      onResponderReject(event) {\n        clearInteractionHandle(interactionState, config.onPanResponderReject, event, gestureState);\n      },\n      onResponderRelease(event) {\n        clearInteractionHandle(interactionState, config.onPanResponderRelease, event, gestureState);\n        setInteractionTimeout(interactionState);\n        PanResponder._initializeGestureState(gestureState);\n      },\n      onResponderStart(event) {\n        var touchHistory = event.touchHistory;\n        gestureState.numberActiveTouches = touchHistory.numberActiveTouches;\n        if (config.onPanResponderStart) {\n          config.onPanResponderStart(event, gestureState);\n        }\n      },\n      onResponderMove(event) {\n        var touchHistory = event.touchHistory;\n        // Guard against the dispatch of two touch moves when there are two\n        // simultaneously changed touches.\n        if (gestureState._accountsForMovesUpTo === touchHistory.mostRecentTimeStamp) {\n          return;\n        }\n        // Filter out any touch moves past the first one - we would have\n        // already processed multi-touch geometry during the first event.\n        PanResponder._updateGestureStateOnMove(gestureState, touchHistory);\n        if (config.onPanResponderMove) {\n          config.onPanResponderMove(event, gestureState);\n        }\n      },\n      onResponderEnd(event) {\n        var touchHistory = event.touchHistory;\n        gestureState.numberActiveTouches = touchHistory.numberActiveTouches;\n        clearInteractionHandle(interactionState, config.onPanResponderEnd, event, gestureState);\n      },\n      onResponderTerminate(event) {\n        clearInteractionHandle(interactionState, config.onPanResponderTerminate, event, gestureState);\n        setInteractionTimeout(interactionState);\n        PanResponder._initializeGestureState(gestureState);\n      },\n      onResponderTerminationRequest(event) {\n        return config.onPanResponderTerminationRequest == null ? true : config.onPanResponderTerminationRequest(event, gestureState);\n      },\n      // We do not want to trigger 'click' activated gestures or native behaviors\n      // on any pan target that is under a mouse cursor when it is released.\n      // Browsers will natively cancel 'click' events on a target if a non-mouse\n      // active pointer moves.\n      onClickCapture: event => {\n        if (interactionState.shouldCancelClick === true) {\n          event.stopPropagation();\n          event.preventDefault();\n        }\n      }\n    };\n    return {\n      panHandlers,\n      getInteractionHandle() {\n        return interactionState.handle;\n      }\n    };\n  }\n};\nfunction clearInteractionHandle(interactionState, callback, event, gestureState) {\n  if (interactionState.handle) {\n    InteractionManager.clearInteractionHandle(interactionState.handle);\n    interactionState.handle = null;\n  }\n  if (callback) {\n    callback(event, gestureState);\n  }\n}\nfunction clearInteractionTimeout(interactionState) {\n  clearTimeout(interactionState.timeout);\n}\nfunction setInteractionTimeout(interactionState) {\n  interactionState.timeout = setTimeout(() => {\n    interactionState.shouldCancelClick = false;\n  }, 250);\n}\nexport default PanResponder;","import PanResponder from '../../vendor/react-native/PanResponder';\nexport default PanResponder;","/**\n * Copyright (c) Nicolas Gallagher.\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\nimport invariant from 'fbjs/lib/invariant';\nclass Share {\n  static share(content, options) {\n    if (options === void 0) {\n      options = {};\n    }\n    invariant(typeof content === 'object' && content !== null, 'Content to share must be a valid object');\n    invariant(typeof content.url === 'string' || typeof content.message === 'string', 'At least one of URL and message is required');\n    invariant(typeof options === 'object' && options !== null, 'Options must be a valid object');\n    invariant(!content.title || typeof content.title === 'string', 'Invalid title: title should be a string.');\n    if (window.navigator.share !== undefined) {\n      return window.navigator.share({\n        title: content.title,\n        text: content.message,\n        url: content.url\n      });\n    } else {\n      return Promise.reject(new Error('Share is not supported in this browser'));\n    }\n  }\n\n  /**\n   * The content was successfully shared.\n   */\n  static get sharedAction() {\n    return 'sharedAction';\n  }\n\n  /**\n   * The dialog has been dismissed.\n   * @platform ios\n   */\n  static get dismissedAction() {\n    return 'dismissedAction';\n  }\n}\nexport default Share;","/**\n * Copyright (c) Nicolas Gallagher.\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\nvar vibrate = pattern => {\n  if ('vibrate' in window.navigator) {\n    window.navigator.vibrate(pattern);\n  }\n};\nvar Vibration = {\n  cancel() {\n    vibrate(0);\n  },\n  vibrate(pattern) {\n    if (pattern === void 0) {\n      pattern = 400;\n    }\n    vibrate(pattern);\n  }\n};\nexport default Vibration;","/**\n * Copyright (c) Nicolas Gallagher.\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\n'use client';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"aria-readonly\", \"color\", \"disabled\", \"onChange\", \"onValueChange\", \"readOnly\", \"style\", \"value\"];\nimport * as React from 'react';\nimport createElement from '../createElement';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\nvar CheckBox = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n  var ariaReadOnly = props['aria-readonly'],\n    color = props.color,\n    disabled = props.disabled,\n    onChange = props.onChange,\n    onValueChange = props.onValueChange,\n    readOnly = props.readOnly,\n    style = props.style,\n    value = props.value,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  function handleChange(event) {\n    var value = event.nativeEvent.target.checked;\n    event.nativeEvent.value = value;\n    onChange && onChange(event);\n    onValueChange && onValueChange(value);\n  }\n  var fakeControl = /*#__PURE__*/React.createElement(View, {\n    style: [styles.fakeControl, value && styles.fakeControlChecked,\n    // custom color\n    value && color && {\n      backgroundColor: color,\n      borderColor: color\n    }, disabled && styles.fakeControlDisabled, value && disabled && styles.fakeControlCheckedAndDisabled]\n  });\n  var nativeControl = createElement('input', {\n    checked: value,\n    disabled: disabled,\n    onChange: handleChange,\n    readOnly: readOnly === true || ariaReadOnly === true || other.accessibilityReadOnly === true,\n    ref: forwardedRef,\n    style: [styles.nativeControl, styles.cursorInherit],\n    type: 'checkbox'\n  });\n  return /*#__PURE__*/React.createElement(View, _extends({}, other, {\n    \"aria-disabled\": disabled,\n    \"aria-readonly\": ariaReadOnly,\n    style: [styles.root, style, disabled && styles.cursorDefault]\n  }), fakeControl, nativeControl);\n});\nCheckBox.displayName = 'CheckBox';\nvar styles = StyleSheet.create({\n  root: {\n    cursor: 'pointer',\n    height: 16,\n    userSelect: 'none',\n    width: 16\n  },\n  cursorDefault: {\n    cursor: 'default'\n  },\n  cursorInherit: {\n    cursor: 'inherit'\n  },\n  fakeControl: {\n    alignItems: 'center',\n    backgroundColor: '#fff',\n    borderColor: '#657786',\n    borderRadius: 2,\n    borderStyle: 'solid',\n    borderWidth: 2,\n    height: '100%',\n    justifyContent: 'center',\n    width: '100%'\n  },\n  fakeControlChecked: {\n    backgroundColor: '#009688',\n    backgroundImage: 'url(\"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8cGF0aAogICAgIGQ9Ik0gMC4wNDAzODA1OSwwLjYyNjc3NjcgMC4xNDY0NDY2MSwwLjUyMDcxMDY4IDAuNDI5Mjg5MzIsMC44MDM1NTMzOSAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IE0gMC4yMTcxNTcyOSwwLjgwMzU1MzM5IDAuODUzNTUzMzksMC4xNjcxNTcyOSAwLjk1OTYxOTQxLDAuMjczMjIzMyAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IgogICAgIGlkPSJyZWN0Mzc4MCIKICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgo8L3N2Zz4K\")',\n    backgroundRepeat: 'no-repeat',\n    borderColor: '#009688'\n  },\n  fakeControlDisabled: {\n    borderColor: '#CCD6DD'\n  },\n  fakeControlCheckedAndDisabled: {\n    backgroundColor: '#AAB8C2',\n    borderColor: '#AAB8C2'\n  },\n  nativeControl: _objectSpread(_objectSpread({}, StyleSheet.absoluteFillObject), {}, {\n    height: '100%',\n    margin: 0,\n    appearance: 'none',\n    padding: 0,\n    width: '100%'\n  })\n});\nexport default CheckBox;","/**\n * Copyright (c) Nicolas Gallagher.\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\n'use client';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"children\", \"enabled\", \"onValueChange\", \"selectedValue\", \"style\", \"testID\", \"itemStyle\", \"mode\", \"prompt\"];\nimport * as React from 'react';\nimport createElement from '../createElement';\nimport useMergeRefs from '../../modules/useMergeRefs';\nimport usePlatformMethods from '../../modules/usePlatformMethods';\nimport PickerItem from './PickerItem';\nimport StyleSheet from '../StyleSheet';\nvar Picker = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n  var children = props.children,\n    enabled = props.enabled,\n    onValueChange = props.onValueChange,\n    selectedValue = props.selectedValue,\n    style = props.style,\n    testID = props.testID,\n    itemStyle = props.itemStyle,\n    mode = props.mode,\n    prompt = props.prompt,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  var hostRef = React.useRef(null);\n  function handleChange(e) {\n    var _e$target = e.target,\n      selectedIndex = _e$target.selectedIndex,\n      value = _e$target.value;\n    if (onValueChange) {\n      onValueChange(value, selectedIndex);\n    }\n  }\n\n  // $FlowFixMe\n  var supportedProps = _objectSpread({\n    children,\n    disabled: enabled === false ? true : undefined,\n    onChange: handleChange,\n    style: [styles.initial, style],\n    testID,\n    value: selectedValue\n  }, other);\n  var platformMethodsRef = usePlatformMethods(supportedProps);\n  var setRef = useMergeRefs(hostRef, platformMethodsRef, forwardedRef);\n  supportedProps.ref = setRef;\n  return createElement('select', supportedProps);\n});\n\n// $FlowFixMe\nPicker.Item = PickerItem;\nvar styles = StyleSheet.create({\n  initial: {\n    fontFamily: 'System',\n    fontSize: 'inherit',\n    margin: 0\n  }\n});\nexport default Picker;","/**\n * Copyright (c) Nicolas Gallagher.\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\nimport createElement from '../createElement';\nexport default function PickerItem(props) {\n  var color = props.color,\n    label = props.label,\n    testID = props.testID,\n    value = props.value;\n  var style = {\n    color\n  };\n  return createElement('option', {\n    children: label,\n    style,\n    testID,\n    value\n  });\n}","/**\n * Copyright (c) Nicolas Gallagher.\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\n'use client';\n\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"color\", \"indeterminate\", \"progress\", \"trackColor\", \"style\"];\nimport * as React from 'react';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\nvar ProgressBar = /*#__PURE__*/React.forwardRef((props, ref) => {\n  var _props$color = props.color,\n    color = _props$color === void 0 ? '#1976D2' : _props$color,\n    _props$indeterminate = props.indeterminate,\n    indeterminate = _props$indeterminate === void 0 ? false : _props$indeterminate,\n    _props$progress = props.progress,\n    progress = _props$progress === void 0 ? 0 : _props$progress,\n    _props$trackColor = props.trackColor,\n    trackColor = _props$trackColor === void 0 ? 'transparent' : _props$trackColor,\n    style = props.style,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  var percentageProgress = progress * 100;\n  var width = indeterminate ? '25%' : percentageProgress + \"%\";\n  return /*#__PURE__*/React.createElement(View, _extends({}, other, {\n    \"aria-valuemax\": 100,\n    \"aria-valuemin\": 0,\n    \"aria-valuenow\": indeterminate ? null : percentageProgress,\n    ref: ref,\n    role: \"progressbar\",\n    style: [styles.track, style, {\n      backgroundColor: trackColor\n    }]\n  }), /*#__PURE__*/React.createElement(View, {\n    style: [{\n      backgroundColor: color,\n      width\n    }, styles.progress, indeterminate && styles.animation]\n  }));\n});\nProgressBar.displayName = 'ProgressBar';\nvar styles = StyleSheet.create({\n  track: {\n    forcedColorAdjust: 'none',\n    height: 5,\n    overflow: 'hidden',\n    userSelect: 'none',\n    zIndex: 0\n  },\n  progress: {\n    forcedColorAdjust: 'none',\n    height: '100%',\n    zIndex: -1\n  },\n  animation: {\n    animationDuration: '1s',\n    animationKeyframes: [{\n      '0%': {\n        transform: 'translateX(-100%)'\n      },\n      '100%': {\n        transform: 'translateX(400%)'\n      }\n    }],\n    animationTimingFunction: 'linear',\n    animationIterationCount: 'infinite'\n  }\n});\nexport default ProgressBar;","/**\n * Copyright (c) Nicolas Gallagher.\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\nimport React from 'react';\nimport UnimplementedView from '../../modules/UnimplementedView';\nfunction YellowBox(props) {\n  return /*#__PURE__*/React.createElement(UnimplementedView, props);\n}\nYellowBox.ignoreWarnings = () => {};\nexport default YellowBox;","/**\n * Copyright (c) 2016-present, Nicolas Gallagher.\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\nvar LogBox = {\n  ignoreLogs() {},\n  ignoreAllLogs() {},\n  uninstall() {},\n  install() {}\n};\nexport default LogBox;","/**\n * Copyright (c) Nicolas Gallagher.\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\n'use client';\n\nimport * as React from 'react';\nimport Appearance from '../Appearance';\nexport default function useColorScheme() {\n  var _React$useState = React.useState(Appearance.getColorScheme()),\n    colorScheme = _React$useState[0],\n    setColorScheme = _React$useState[1];\n  React.useEffect(() => {\n    function listener(appearance) {\n      setColorScheme(appearance.colorScheme);\n    }\n    var _Appearance$addChange = Appearance.addChangeListener(listener),\n      remove = _Appearance$addChange.remove;\n    return remove;\n  });\n  return colorScheme;\n}","/**\n * Copyright (c) Nicolas Gallagher.\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\n'use client';\n\nimport { useLocaleContext } from '../../modules/useLocale';\nexport default useLocaleContext;","/**\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 * @format\n * \n */\n\n'use client';\n\nimport Dimensions from '../Dimensions';\nimport { useEffect, useState } from 'react';\nexport default function useWindowDimensions() {\n  var _useState = useState(() => Dimensions.get('window')),\n    dims = _useState[0],\n    setDims = _useState[1];\n  useEffect(() => {\n    function handleChange(_ref) {\n      var window = _ref.window;\n      if (window != null) {\n        setDims(window);\n      }\n    }\n    Dimensions.addEventListener('change', handleChange);\n    // We might have missed an update between calling `get` in render and\n    // `addEventListener` in this handler, so we set it here. If there was\n    // no change, React will filter out this update as a no-op.\n    setDims(Dimensions.get('window'));\n    return () => {\n      Dimensions.removeEventListener('change', handleChange);\n    };\n  }, []);\n  return dims;\n}","/**\n * Copyright (c) Nicolas Gallagher.\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\n'use client';\n\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"animating\", \"color\", \"hidesWhenStopped\", \"size\", \"style\"];\nimport * as React from 'react';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\nvar createSvgCircle = style => /*#__PURE__*/React.createElement(\"circle\", {\n  cx: \"16\",\n  cy: \"16\",\n  fill: \"none\",\n  r: \"14\",\n  strokeWidth: \"4\",\n  style: style\n});\nvar ActivityIndicator = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n  var _props$animating = props.animating,\n    animating = _props$animating === void 0 ? true : _props$animating,\n    _props$color = props.color,\n    color = _props$color === void 0 ? '#1976D2' : _props$color,\n    _props$hidesWhenStopp = props.hidesWhenStopped,\n    hidesWhenStopped = _props$hidesWhenStopp === void 0 ? true : _props$hidesWhenStopp,\n    _props$size = props.size,\n    size = _props$size === void 0 ? 'small' : _props$size,\n    style = props.style,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  var svg = /*#__PURE__*/React.createElement(\"svg\", {\n    height: \"100%\",\n    viewBox: \"0 0 32 32\",\n    width: \"100%\"\n  }, createSvgCircle({\n    stroke: color,\n    opacity: 0.2\n  }), createSvgCircle({\n    stroke: color,\n    strokeDasharray: 80,\n    strokeDashoffset: 60\n  }));\n  return /*#__PURE__*/React.createElement(View, _extends({}, other, {\n    \"aria-valuemax\": 1,\n    \"aria-valuemin\": 0,\n    ref: forwardedRef,\n    role: \"progressbar\",\n    style: [styles.container, style]\n  }), /*#__PURE__*/React.createElement(View, {\n    children: svg,\n    style: [typeof size === 'number' ? {\n      height: size,\n      width: size\n    } : indicatorSizes[size], styles.animation, !animating && styles.animationPause, !animating && hidesWhenStopped && styles.hidesWhenStopped]\n  }));\n});\nActivityIndicator.displayName = 'ActivityIndicator';\nvar styles = StyleSheet.create({\n  container: {\n    alignItems: 'center',\n    justifyContent: 'center'\n  },\n  hidesWhenStopped: {\n    visibility: 'hidden'\n  },\n  animation: {\n    animationDuration: '0.75s',\n    animationKeyframes: [{\n      '0%': {\n        transform: 'rotate(0deg)'\n      },\n      '100%': {\n        transform: 'rotate(360deg)'\n      }\n    }],\n    animationTimingFunction: 'linear',\n    animationIterationCount: 'infinite'\n  },\n  animationPause: {\n    animationPlayState: 'paused'\n  }\n});\nvar indicatorSizes = StyleSheet.create({\n  small: {\n    width: 20,\n    height: 20\n  },\n  large: {\n    width: 36,\n    height: 36\n  }\n});\nexport default ActivityIndicator;","import { jsx } from \"react/jsx-runtime\";\nimport { ActivityIndicator as RNActivityIndicator } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nimport { useUniwindAccent } from \"./useUniwindAccent.js\";\nexport const ActivityIndicator = copyComponentProperties(RNActivityIndicator, (props) => {\n  const color = useUniwindAccent(props.colorClassName);\n  return /* @__PURE__ */ jsx(\n    RNActivityIndicator,\n    {\n      ...props,\n      style: [toRNWClassName(props.className), props.style],\n      color: props.color ?? color,\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default ActivityIndicator;\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 * @format\n */\n\n'use client';\n\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"activeOpacity\", \"delayPressIn\", \"delayPressOut\", \"delayLongPress\", \"disabled\", \"focusable\", \"onLongPress\", \"onPress\", \"onPressIn\", \"onPressOut\", \"rejectResponderTermination\", \"style\"];\nimport * as React from 'react';\nimport { useCallback, useMemo, useState, useRef } from 'react';\nimport useMergeRefs from '../../modules/useMergeRefs';\nimport usePressEvents from '../../modules/usePressEvents';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\n//import { warnOnce } from '../../modules/warnOnce';\n\n/**\n * A wrapper for making views respond properly to touches.\n * On press down, the opacity of the wrapped view is decreased, dimming it.\n */\nfunction TouchableOpacity(props, forwardedRef) {\n  /*\n  warnOnce(\n    'TouchableOpacity',\n    'TouchableOpacity is deprecated. Please use Pressable.'\n  );\n  */\n\n  var activeOpacity = props.activeOpacity,\n    delayPressIn = props.delayPressIn,\n    delayPressOut = props.delayPressOut,\n    delayLongPress = props.delayLongPress,\n    disabled = props.disabled,\n    focusable = props.focusable,\n    onLongPress = props.onLongPress,\n    onPress = props.onPress,\n    onPressIn = props.onPressIn,\n    onPressOut = props.onPressOut,\n    rejectResponderTermination = props.rejectResponderTermination,\n    style = props.style,\n    rest = _objectWithoutPropertiesLoose(props, _excluded);\n  var hostRef = useRef(null);\n  var setRef = useMergeRefs(forwardedRef, hostRef);\n  var _useState = useState('0s'),\n    duration = _useState[0],\n    setDuration = _useState[1];\n  var _useState2 = useState(null),\n    opacityOverride = _useState2[0],\n    setOpacityOverride = _useState2[1];\n  var setOpacityTo = useCallback((value, duration) => {\n    setOpacityOverride(value);\n    setDuration(duration ? duration / 1000 + \"s\" : '0s');\n  }, [setOpacityOverride, setDuration]);\n  var setOpacityActive = useCallback(duration => {\n    setOpacityTo(activeOpacity !== null && activeOpacity !== void 0 ? activeOpacity : 0.2, duration);\n  }, [activeOpacity, setOpacityTo]);\n  var setOpacityInactive = useCallback(duration => {\n    setOpacityTo(null, duration);\n  }, [setOpacityTo]);\n  var pressConfig = useMemo(() => ({\n    cancelable: !rejectResponderTermination,\n    disabled,\n    delayLongPress,\n    delayPressStart: delayPressIn,\n    delayPressEnd: delayPressOut,\n    onLongPress,\n    onPress,\n    onPressStart(event) {\n      var isGrant = event.dispatchConfig != null ? event.dispatchConfig.registrationName === 'onResponderGrant' : event.type === 'keydown';\n      setOpacityActive(isGrant ? 0 : 150);\n      if (onPressIn != null) {\n        onPressIn(event);\n      }\n    },\n    onPressEnd(event) {\n      setOpacityInactive(250);\n      if (onPressOut != null) {\n        onPressOut(event);\n      }\n    }\n  }), [delayLongPress, delayPressIn, delayPressOut, disabled, onLongPress, onPress, onPressIn, onPressOut, rejectResponderTermination, setOpacityActive, setOpacityInactive]);\n  var pressEventHandlers = usePressEvents(hostRef, pressConfig);\n  return /*#__PURE__*/React.createElement(View, _extends({}, rest, pressEventHandlers, {\n    accessibilityDisabled: disabled,\n    focusable: !disabled && focusable !== false,\n    pointerEvents: disabled ? 'box-none' : undefined,\n    ref: setRef,\n    style: [styles.root, !disabled && styles.actionable, style, opacityOverride != null && {\n      opacity: opacityOverride\n    }, {\n      transitionDuration: duration\n    }]\n  }));\n}\nvar styles = StyleSheet.create({\n  root: {\n    transitionProperty: 'opacity',\n    transitionDuration: '0.15s',\n    userSelect: 'none'\n  },\n  actionable: {\n    cursor: 'pointer',\n    touchAction: 'manipulation'\n  }\n});\nvar MemoedTouchableOpacity = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(TouchableOpacity));\nMemoedTouchableOpacity.displayName = 'TouchableOpacity';\nexport default MemoedTouchableOpacity;","/**\n * Copyright (c) Nicolas Gallagher.\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\nimport * as React from 'react';\nimport StyleSheet from '../StyleSheet';\nimport TouchableOpacity from '../TouchableOpacity';\nimport Text from '../Text';\n//import { warnOnce } from '../../modules/warnOnce';\n\nvar Button = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n  // warnOnce('Button', 'Button is deprecated. Please use Pressable.');\n\n  var accessibilityLabel = props.accessibilityLabel,\n    color = props.color,\n    disabled = props.disabled,\n    onPress = props.onPress,\n    testID = props.testID,\n    title = props.title;\n  return /*#__PURE__*/React.createElement(TouchableOpacity, {\n    accessibilityLabel: accessibilityLabel,\n    accessibilityRole: \"button\",\n    disabled: disabled,\n    focusable: !disabled,\n    onPress: onPress,\n    ref: forwardedRef,\n    style: [styles.button, color && {\n      backgroundColor: color\n    }, disabled && styles.buttonDisabled],\n    testID: testID\n  }, /*#__PURE__*/React.createElement(Text, {\n    style: [styles.text, disabled && styles.textDisabled]\n  }, title));\n});\nButton.displayName = 'Button';\nvar styles = StyleSheet.create({\n  button: {\n    backgroundColor: '#2196F3',\n    borderRadius: 2\n  },\n  text: {\n    color: '#fff',\n    fontWeight: '500',\n    padding: 8,\n    textAlign: 'center',\n    textTransform: 'uppercase'\n  },\n  buttonDisabled: {\n    backgroundColor: '#dfdfdf'\n  },\n  textDisabled: {\n    color: '#a1a1a1'\n  }\n});\nexport default Button;","import { jsx } from \"react/jsx-runtime\";\nimport { Button as RNButton } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { useUniwindAccent } from \"./useUniwindAccent.js\";\nexport const Button = copyComponentProperties(RNButton, (props) => {\n  const color = useUniwindAccent(props.colorClassName);\n  return /* @__PURE__ */ jsx(\n    RNButton,\n    {\n      ...props,\n      color: props.color ?? color,\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default Button;\n","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"children\", \"style\", \"imageStyle\", \"imageRef\"];\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\nimport * as React from 'react';\nimport { forwardRef } from 'react';\nimport Image from '../Image';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\nvar emptyObject = {};\n\n/**\n * Very simple drop-in replacement for <Image> which supports nesting views.\n */\nvar ImageBackground = /*#__PURE__*/forwardRef((props, forwardedRef) => {\n  var children = props.children,\n    _props$style = props.style,\n    style = _props$style === void 0 ? emptyObject : _props$style,\n    imageStyle = props.imageStyle,\n    imageRef = props.imageRef,\n    rest = _objectWithoutPropertiesLoose(props, _excluded);\n  var _StyleSheet$flatten = StyleSheet.flatten(style),\n    height = _StyleSheet$flatten.height,\n    width = _StyleSheet$flatten.width;\n  return /*#__PURE__*/React.createElement(View, {\n    ref: forwardedRef,\n    style: style\n  }, /*#__PURE__*/React.createElement(Image, _extends({}, rest, {\n    ref: imageRef,\n    style: [{\n      // Temporary Workaround:\n      // Current (imperfect yet) implementation of <Image> overwrites width and height styles\n      // (which is not quite correct), and these styles conflict with explicitly set styles\n      // of <ImageBackground> and with our internal layout model here.\n      // So, we have to proxy/reapply these styles explicitly for actual <Image> component.\n      // This workaround should be removed after implementing proper support of\n      // intrinsic content size of the <Image>.\n      width,\n      height,\n      zIndex: -1\n    }, StyleSheet.absoluteFill, imageStyle]\n  })), children);\n});\nImageBackground.displayName = 'ImageBackground';\nexport default ImageBackground;","import { jsx } from \"react/jsx-runtime\";\nimport { ImageBackground as RNImageBackground } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nimport { useUniwindAccent } from \"./useUniwindAccent.js\";\nexport const ImageBackground = copyComponentProperties(RNImageBackground, (props) => {\n  const tintColor = useUniwindAccent(props.tintColorClassName);\n  return /* @__PURE__ */ jsx(\n    RNImageBackground,\n    {\n      ...props,\n      style: [toRNWClassName(props.className), props.style],\n      imageStyle: [toRNWClassName(props.imageClassName), props.imageStyle],\n      tintColor: props.tintColor ?? tintColor,\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default ImageBackground;\n","/**\n * Copyright (c) Nicolas Gallagher.\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\n'use client';\n\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"behavior\", \"contentContainerStyle\", \"keyboardVerticalOffset\"];\nimport * as React from 'react';\nimport View from '../View';\nclass KeyboardAvoidingView extends React.Component {\n  constructor() {\n    super(...arguments);\n    this.frame = null;\n    this.onLayout = event => {\n      this.frame = event.nativeEvent.layout;\n    };\n  }\n  relativeKeyboardHeight(keyboardFrame) {\n    var frame = this.frame;\n    if (!frame || !keyboardFrame) {\n      return 0;\n    }\n    var keyboardY = keyboardFrame.screenY - (this.props.keyboardVerticalOffset || 0);\n    return Math.max(frame.y + frame.height - keyboardY, 0);\n  }\n  onKeyboardChange(event) {}\n  render() {\n    var _this$props = this.props,\n      behavior = _this$props.behavior,\n      contentContainerStyle = _this$props.contentContainerStyle,\n      keyboardVerticalOffset = _this$props.keyboardVerticalOffset,\n      rest = _objectWithoutPropertiesLoose(_this$props, _excluded);\n    return /*#__PURE__*/React.createElement(View, _extends({\n      onLayout: this.onLayout\n    }, rest));\n  }\n}\nexport default KeyboardAvoidingView;","import { jsx } from \"react/jsx-runtime\";\nimport { KeyboardAvoidingView as RNKeyboardAvoidingView } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nexport const KeyboardAvoidingView = copyComponentProperties(RNKeyboardAvoidingView, (props) => {\n  return /* @__PURE__ */ jsx(\n    RNKeyboardAvoidingView,\n    {\n      ...props,\n      style: [toRNWClassName(props.className), props.style],\n      contentContainerStyle: [toRNWClassName(props.contentContainerClassName), props.contentContainerStyle],\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default KeyboardAvoidingView;\n","/**\n * Copyright (c) Nicolas Gallagher.\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\nimport * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport canUseDOM from '../../modules/canUseDom';\nfunction ModalPortal(props) {\n  var children = props.children;\n  var elementRef = React.useRef(null);\n  if (canUseDOM && !elementRef.current) {\n    var element = document.createElement('div');\n    if (element && document.body) {\n      document.body.appendChild(element);\n      elementRef.current = element;\n    }\n  }\n  React.useEffect(() => {\n    if (canUseDOM) {\n      return () => {\n        if (document.body && elementRef.current) {\n          document.body.removeChild(elementRef.current);\n          elementRef.current = null;\n        }\n      };\n    }\n  }, []);\n  return elementRef.current && canUseDOM ? /*#__PURE__*/createPortal(children, elementRef.current) : null;\n}\nexport default ModalPortal;","/**\n * Copyright (c) Nicolas Gallagher.\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\nimport * as React from 'react';\nimport StyleSheet from '../StyleSheet';\nimport createElement from '../createElement';\nvar ANIMATION_DURATION = 250;\nfunction getAnimationStyle(animationType, visible) {\n  if (animationType === 'slide') {\n    return visible ? animatedSlideInStyles : animatedSlideOutStyles;\n  }\n  if (animationType === 'fade') {\n    return visible ? animatedFadeInStyles : animatedFadeOutStyles;\n  }\n  return visible ? styles.container : styles.hidden;\n}\nfunction ModalAnimation(props) {\n  var animationType = props.animationType,\n    children = props.children,\n    onDismiss = props.onDismiss,\n    onShow = props.onShow,\n    visible = props.visible;\n  var _React$useState = React.useState(false),\n    isRendering = _React$useState[0],\n    setIsRendering = _React$useState[1];\n  var wasVisible = React.useRef(false);\n  var wasRendering = React.useRef(false);\n  var isAnimated = animationType && animationType !== 'none';\n  var animationEndCallback = React.useCallback(e => {\n    if (e && e.currentTarget !== e.target) {\n      // If the event was generated for something NOT this element we\n      // should ignore it as it's not relevant to us\n      return;\n    }\n    if (visible) {\n      if (onShow) {\n        onShow();\n      }\n    } else {\n      setIsRendering(false);\n    }\n  }, [onShow, visible]);\n  React.useEffect(() => {\n    if (wasRendering.current && !isRendering && onDismiss) {\n      onDismiss();\n    }\n    wasRendering.current = isRendering;\n  }, [isRendering, onDismiss]);\n  React.useEffect(() => {\n    if (visible) {\n      setIsRendering(true);\n    }\n    if (visible !== wasVisible.current && !isAnimated) {\n      // Manually call `animationEndCallback` if no animation is used\n      animationEndCallback();\n    }\n    wasVisible.current = visible;\n  }, [isAnimated, visible, animationEndCallback]);\n  return isRendering || visible ? createElement('div', {\n    style: isRendering ? getAnimationStyle(animationType, visible) : styles.hidden,\n    onAnimationEnd: animationEndCallback,\n    children\n  }) : null;\n}\nvar styles = StyleSheet.create({\n  container: {\n    position: 'fixed',\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n    zIndex: 9999\n  },\n  animatedIn: {\n    animationDuration: ANIMATION_DURATION + \"ms\",\n    animationTimingFunction: 'cubic-bezier(0.215, 0.61, 0.355, 1)'\n  },\n  animatedOut: {\n    pointerEvents: 'none',\n    animationDuration: ANIMATION_DURATION + \"ms\",\n    animationTimingFunction: 'cubic-bezier(0.47, 0, 0.745, 0.715)'\n  },\n  fadeIn: {\n    opacity: 1,\n    animationKeyframes: {\n      '0%': {\n        opacity: 0\n      },\n      '100%': {\n        opacity: 1\n      }\n    }\n  },\n  fadeOut: {\n    opacity: 0,\n    animationKeyframes: {\n      '0%': {\n        opacity: 1\n      },\n      '100%': {\n        opacity: 0\n      }\n    }\n  },\n  slideIn: {\n    transform: 'translateY(0%)',\n    animationKeyframes: {\n      '0%': {\n        transform: 'translateY(100%)'\n      },\n      '100%': {\n        transform: 'translateY(0%)'\n      }\n    }\n  },\n  slideOut: {\n    transform: 'translateY(100%)',\n    animationKeyframes: {\n      '0%': {\n        transform: 'translateY(0%)'\n      },\n      '100%': {\n        transform: 'translateY(100%)'\n      }\n    }\n  },\n  hidden: {\n    opacity: 0\n  }\n});\nvar animatedSlideInStyles = [styles.container, styles.animatedIn, styles.slideIn];\nvar animatedSlideOutStyles = [styles.container, styles.animatedOut, styles.slideOut];\nvar animatedFadeInStyles = [styles.container, styles.animatedIn, styles.fadeIn];\nvar animatedFadeOutStyles = [styles.container, styles.animatedOut, styles.fadeOut];\nexport default ModalAnimation;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"active\", \"children\", \"onRequestClose\", \"transparent\"];\n/**\n * Copyright (c) Nicolas Gallagher.\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\nimport * as React from 'react';\nimport View from '../View';\nimport StyleSheet from '../StyleSheet';\nimport canUseDOM from '../../modules/canUseDom';\nvar ModalContent = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n  var active = props.active,\n    children = props.children,\n    onRequestClose = props.onRequestClose,\n    transparent = props.transparent,\n    rest = _objectWithoutPropertiesLoose(props, _excluded);\n  React.useEffect(() => {\n    if (canUseDOM) {\n      var closeOnEscape = e => {\n        if (active && e.key === 'Escape') {\n          e.stopPropagation();\n          if (onRequestClose) {\n            onRequestClose();\n          }\n        }\n      };\n      document.addEventListener('keyup', closeOnEscape, false);\n      return () => document.removeEventListener('keyup', closeOnEscape, false);\n    }\n  }, [active, onRequestClose]);\n  var style = React.useMemo(() => {\n    return [styles.modal, transparent ? styles.modalTransparent : styles.modalOpaque];\n  }, [transparent]);\n  return /*#__PURE__*/React.createElement(View, _extends({}, rest, {\n    \"aria-modal\": true,\n    ref: forwardedRef,\n    role: active ? 'dialog' : null,\n    style: style\n  }), /*#__PURE__*/React.createElement(View, {\n    style: styles.container\n  }, children));\n});\nvar styles = StyleSheet.create({\n  modal: {\n    position: 'fixed',\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  },\n  modalTransparent: {\n    backgroundColor: 'transparent'\n  },\n  modalOpaque: {\n    backgroundColor: 'white'\n  },\n  container: {\n    top: 0,\n    flex: 1\n  }\n});\nexport default ModalContent;","/**\n * Copyright (c) Nicolas Gallagher.\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\nimport * as React from 'react';\nimport View from '../View';\nimport createElement from '../createElement';\nimport StyleSheet from '../StyleSheet';\nimport UIManager from '../UIManager';\nimport canUseDOM from '../../modules/canUseDom';\n\n/**\n * This Component is used to \"wrap\" the modal we're opening\n * so that changing focus via tab will never leave the document.\n *\n * This allows us to properly trap the focus within a modal\n * even if the modal is at the start or end of a document.\n */\n\nvar FocusBracket = () => {\n  return createElement('div', {\n    role: 'none',\n    tabIndex: 0,\n    style: styles.focusBracket\n  });\n};\nfunction attemptFocus(element) {\n  if (!canUseDOM) {\n    return false;\n  }\n  try {\n    element.focus();\n  } catch (e) {\n    // Do nothing\n  }\n  return document.activeElement === element;\n}\nfunction focusFirstDescendant(element) {\n  for (var i = 0; i < element.childNodes.length; i++) {\n    var child = element.childNodes[i];\n    if (attemptFocus(child) || focusFirstDescendant(child)) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction focusLastDescendant(element) {\n  for (var i = element.childNodes.length - 1; i >= 0; i--) {\n    var child = element.childNodes[i];\n    if (attemptFocus(child) || focusLastDescendant(child)) {\n      return true;\n    }\n  }\n  return false;\n}\nvar ModalFocusTrap = _ref => {\n  var active = _ref.active,\n    children = _ref.children;\n  var trapElementRef = React.useRef();\n  var focusRef = React.useRef({\n    trapFocusInProgress: false,\n    lastFocusedElement: null\n  });\n  React.useEffect(() => {\n    if (canUseDOM) {\n      var trapFocus = () => {\n        // We should not trap focus if:\n        // - The modal hasn't fully initialized with an HTMLElement ref\n        // - Focus is already in the process of being trapped (e.g., we're refocusing)\n        // - isTrapActive prop being falsey tells us to do nothing\n        if (trapElementRef.current == null || focusRef.current.trapFocusInProgress || !active) {\n          return;\n        }\n        try {\n          focusRef.current.trapFocusInProgress = true;\n          if (document.activeElement instanceof Node && !trapElementRef.current.contains(document.activeElement)) {\n            // To handle keyboard focusing we can make an assumption here.\n            // If you're tabbing through the focusable elements, the previously\n            // active element will either be the first or the last.\n            // If the previously selected element is the \"first\" descendant\n            // and we're leaving it - this means that we should be looping\n            // around to the other side of the modal.\n            var hasFocused = focusFirstDescendant(trapElementRef.current);\n            if (focusRef.current.lastFocusedElement === document.activeElement) {\n              hasFocused = focusLastDescendant(trapElementRef.current);\n            }\n            // If we couldn't focus a new element then we need to focus onto the trap target\n            if (!hasFocused && trapElementRef.current != null && document.activeElement) {\n              UIManager.focus(trapElementRef.current);\n            }\n          }\n        } finally {\n          focusRef.current.trapFocusInProgress = false;\n        }\n        focusRef.current.lastFocusedElement = document.activeElement;\n      };\n\n      // Call the trapFocus callback at least once when this modal has been activated.\n      trapFocus();\n      document.addEventListener('focus', trapFocus, true);\n      return () => document.removeEventListener('focus', trapFocus, true);\n    }\n  }, [active]);\n\n  // To be fully compliant with WCAG we need to refocus element that triggered opening modal\n  // after closing it\n  React.useEffect(function () {\n    if (canUseDOM) {\n      var lastFocusedElementOutsideTrap = document.activeElement;\n      return function () {\n        if (lastFocusedElementOutsideTrap && document.contains(lastFocusedElementOutsideTrap)) {\n          UIManager.focus(lastFocusedElementOutsideTrap);\n        }\n      };\n    }\n  }, []);\n  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(FocusBracket, null), /*#__PURE__*/React.createElement(View, {\n    ref: trapElementRef\n  }, children), /*#__PURE__*/React.createElement(FocusBracket, null));\n};\nexport default ModalFocusTrap;\nvar styles = StyleSheet.create({\n  focusBracket: {\n    outlineStyle: 'none'\n  }\n});","/**\n * Copyright (c) Nicolas Gallagher.\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\n'use client';\n\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"animationType\", \"children\", \"onDismiss\", \"onRequestClose\", \"onShow\", \"transparent\", \"visible\"];\nimport * as React from 'react';\nimport ModalPortal from './ModalPortal';\nimport ModalAnimation from './ModalAnimation';\nimport ModalContent from './ModalContent';\nimport ModalFocusTrap from './ModalFocusTrap';\nvar uniqueModalIdentifier = 0;\nvar activeModalStack = [];\nvar activeModalListeners = {};\nfunction notifyActiveModalListeners() {\n  if (activeModalStack.length === 0) {\n    return;\n  }\n  var activeModalId = activeModalStack[activeModalStack.length - 1];\n  activeModalStack.forEach(modalId => {\n    if (modalId in activeModalListeners) {\n      activeModalListeners[modalId](modalId === activeModalId);\n    }\n  });\n}\nfunction removeActiveModal(modalId) {\n  if (modalId in activeModalListeners) {\n    // Before removing this listener we should probably tell it\n    // that it's no longer the active modal for sure.\n    activeModalListeners[modalId](false);\n    delete activeModalListeners[modalId];\n  }\n  var index = activeModalStack.indexOf(modalId);\n  if (index !== -1) {\n    activeModalStack.splice(index, 1);\n    notifyActiveModalListeners();\n  }\n}\nfunction addActiveModal(modalId, listener) {\n  removeActiveModal(modalId);\n  activeModalStack.push(modalId);\n  activeModalListeners[modalId] = listener;\n  notifyActiveModalListeners();\n}\nvar Modal = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n  var animationType = props.animationType,\n    children = props.children,\n    onDismiss = props.onDismiss,\n    onRequestClose = props.onRequestClose,\n    onShow = props.onShow,\n    transparent = props.transparent,\n    _props$visible = props.visible,\n    visible = _props$visible === void 0 ? true : _props$visible,\n    rest = _objectWithoutPropertiesLoose(props, _excluded);\n\n  // Set a unique model identifier so we can correctly route\n  // dismissals and check the layering of modals.\n  var modalId = React.useMemo(() => uniqueModalIdentifier++, []);\n  var _React$useState = React.useState(false),\n    isActive = _React$useState[0],\n    setIsActive = _React$useState[1];\n  var onDismissCallback = React.useCallback(() => {\n    removeActiveModal(modalId);\n    if (onDismiss) {\n      onDismiss();\n    }\n  }, [modalId, onDismiss]);\n  var onShowCallback = React.useCallback(() => {\n    addActiveModal(modalId, setIsActive);\n    if (onShow) {\n      onShow();\n    }\n  }, [modalId, onShow]);\n  React.useEffect(() => {\n    return () => removeActiveModal(modalId);\n  }, [modalId]);\n  return /*#__PURE__*/React.createElement(ModalPortal, null, /*#__PURE__*/React.createElement(ModalAnimation, {\n    animationType: animationType,\n    onDismiss: onDismissCallback,\n    onShow: onShowCallback,\n    visible: visible\n  }, /*#__PURE__*/React.createElement(ModalFocusTrap, {\n    active: isActive\n  }, /*#__PURE__*/React.createElement(ModalContent, _extends({}, rest, {\n    active: isActive,\n    onRequestClose: onRequestClose,\n    ref: forwardedRef,\n    transparent: transparent\n  }), children))));\n});\nexport default Modal;","import { jsx } from \"react/jsx-runtime\";\nimport { Modal as RNModal } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nexport const Modal = copyComponentProperties(RNModal, (props) => {\n  return /* @__PURE__ */ jsx(\n    RNModal,\n    {\n      ...props,\n      style: [toRNWClassName(props.className), props.style],\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default Modal;\n","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"style\"];\n/**\n * Copyright (c) Nicolas Gallagher.\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\nimport * as React from 'react';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\nimport canUseDOM from '../../modules/canUseDom';\nvar cssFunction = function () {\n  if (canUseDOM && window.CSS && window.CSS.supports && window.CSS.supports('top: constant(safe-area-inset-top)')) {\n    return 'constant';\n  }\n  return 'env';\n}();\nvar SafeAreaView = /*#__PURE__*/React.forwardRef((props, ref) => {\n  var style = props.style,\n    rest = _objectWithoutPropertiesLoose(props, _excluded);\n  return /*#__PURE__*/React.createElement(View, _extends({}, rest, {\n    ref: ref,\n    style: [styles.root, style]\n  }));\n});\nSafeAreaView.displayName = 'SafeAreaView';\nvar styles = StyleSheet.create({\n  root: {\n    paddingTop: cssFunction + \"(safe-area-inset-top)\",\n    paddingRight: cssFunction + \"(safe-area-inset-right)\",\n    paddingBottom: cssFunction + \"(safe-area-inset-bottom)\",\n    paddingLeft: cssFunction + \"(safe-area-inset-left)\"\n  }\n});\nexport default SafeAreaView;","import { jsx } from \"react/jsx-runtime\";\nimport { SafeAreaView as RNSafeAreaView } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nexport const SafeAreaView = copyComponentProperties(RNSafeAreaView, (props) => {\n  return /* @__PURE__ */ jsx(\n    RNSafeAreaView,\n    {\n      ...props,\n      style: [toRNWClassName(props.className), props.style],\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default SafeAreaView;\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 * @format\n */\n\n'use client';\n\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"activeOpacity\", \"children\", \"delayPressIn\", \"delayPressOut\", \"delayLongPress\", \"disabled\", \"focusable\", \"onHideUnderlay\", \"onLongPress\", \"onPress\", \"onPressIn\", \"onPressOut\", \"onShowUnderlay\", \"rejectResponderTermination\", \"style\", \"testOnly_pressed\", \"underlayColor\"];\nimport * as React from 'react';\nimport { useCallback, useMemo, useState, useRef } from 'react';\nimport useMergeRefs from '../../modules/useMergeRefs';\nimport usePressEvents from '../../modules/usePressEvents';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\n//import { warnOnce } from '../../modules/warnOnce';\n\nfunction createExtraStyles(activeOpacity, underlayColor) {\n  return {\n    child: {\n      opacity: activeOpacity !== null && activeOpacity !== void 0 ? activeOpacity : 0.85\n    },\n    underlay: {\n      backgroundColor: underlayColor === undefined ? 'black' : underlayColor\n    }\n  };\n}\nfunction hasPressHandler(props) {\n  return props.onPress != null || props.onPressIn != null || props.onPressOut != null || props.onLongPress != null;\n}\n\n/**\n * A wrapper for making views respond properly to touches.\n * On press down, the opacity of the wrapped view is decreased, which allows\n * the underlay color to show through, darkening or tinting the view.\n *\n * The underlay comes from wrapping the child in a new View, which can affect\n * layout, and sometimes cause unwanted visual artifacts if not used correctly,\n * for example if the backgroundColor of the wrapped view isn't explicitly set\n * to an opaque color.\n *\n * TouchableHighlight must have one child (not zero or more than one).\n * If you wish to have several child components, wrap them in a View.\n */\nfunction TouchableHighlight(props, forwardedRef) {\n  /*\n  warnOnce(\n    'TouchableHighlight',\n    'TouchableHighlight is deprecated. Please use Pressable.'\n  );\n  */\n\n  var activeOpacity = props.activeOpacity,\n    children = props.children,\n    delayPressIn = props.delayPressIn,\n    delayPressOut = props.delayPressOut,\n    delayLongPress = props.delayLongPress,\n    disabled = props.disabled,\n    focusable = props.focusable,\n    onHideUnderlay = props.onHideUnderlay,\n    onLongPress = props.onLongPress,\n    onPress = props.onPress,\n    onPressIn = props.onPressIn,\n    onPressOut = props.onPressOut,\n    onShowUnderlay = props.onShowUnderlay,\n    rejectResponderTermination = props.rejectResponderTermination,\n    style = props.style,\n    testOnly_pressed = props.testOnly_pressed,\n    underlayColor = props.underlayColor,\n    rest = _objectWithoutPropertiesLoose(props, _excluded);\n  var hostRef = useRef(null);\n  var setRef = useMergeRefs(forwardedRef, hostRef);\n  var _useState = useState(testOnly_pressed === true ? createExtraStyles(activeOpacity, underlayColor) : null),\n    extraStyles = _useState[0],\n    setExtraStyles = _useState[1];\n  var showUnderlay = useCallback(() => {\n    if (!hasPressHandler(props)) {\n      return;\n    }\n    setExtraStyles(createExtraStyles(activeOpacity, underlayColor));\n    if (onShowUnderlay != null) {\n      onShowUnderlay();\n    }\n  }, [activeOpacity, onShowUnderlay, props, underlayColor]);\n  var hideUnderlay = useCallback(() => {\n    if (testOnly_pressed === true) {\n      return;\n    }\n    if (hasPressHandler(props)) {\n      setExtraStyles(null);\n      if (onHideUnderlay != null) {\n        onHideUnderlay();\n      }\n    }\n  }, [onHideUnderlay, props, testOnly_pressed]);\n  var pressConfig = useMemo(() => ({\n    cancelable: !rejectResponderTermination,\n    disabled,\n    delayLongPress,\n    delayPressStart: delayPressIn,\n    delayPressEnd: delayPressOut,\n    onLongPress,\n    onPress,\n    onPressStart(event) {\n      showUnderlay();\n      if (onPressIn != null) {\n        onPressIn(event);\n      }\n    },\n    onPressEnd(event) {\n      hideUnderlay();\n      if (onPressOut != null) {\n        onPressOut(event);\n      }\n    }\n  }), [delayLongPress, delayPressIn, delayPressOut, disabled, onLongPress, onPress, onPressIn, onPressOut, rejectResponderTermination, showUnderlay, hideUnderlay]);\n  var pressEventHandlers = usePressEvents(hostRef, pressConfig);\n  var child = React.Children.only(children);\n  return /*#__PURE__*/React.createElement(View, _extends({}, rest, pressEventHandlers, {\n    accessibilityDisabled: disabled,\n    focusable: !disabled && focusable !== false,\n    pointerEvents: disabled ? 'box-none' : undefined,\n    ref: setRef,\n    style: [styles.root, style, !disabled && styles.actionable, extraStyles && extraStyles.underlay]\n  }), /*#__PURE__*/React.cloneElement(child, {\n    style: [child.props.style, extraStyles && extraStyles.child]\n  }));\n}\nvar styles = StyleSheet.create({\n  root: {\n    userSelect: 'none'\n  },\n  actionable: {\n    cursor: 'pointer',\n    touchAction: 'manipulation'\n  }\n});\nvar MemoedTouchableHighlight = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(TouchableHighlight));\nMemoedTouchableHighlight.displayName = 'TouchableHighlight';\nexport default MemoedTouchableHighlight;","import { jsx } from \"react/jsx-runtime\";\nimport { TouchableHighlight as RNTouchableHighlight } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nimport { useUniwindAccent } from \"./useUniwindAccent.js\";\nexport const TouchableHighlight = copyComponentProperties(RNTouchableHighlight, (props) => {\n  const underlayColor = useUniwindAccent(props.underlayColorClassName);\n  return /* @__PURE__ */ jsx(\n    RNTouchableHighlight,\n    {\n      ...props,\n      style: [toRNWClassName(props.className), props.style],\n      underlayColor: props.underlayColor ?? underlayColor,\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default TouchableHighlight;\n","import { jsx } from \"react/jsx-runtime\";\nimport { TouchableOpacity as RNTouchableOpacity } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nexport const TouchableOpacity = copyComponentProperties(RNTouchableOpacity, (props) => {\n  return /* @__PURE__ */ jsx(\n    RNTouchableOpacity,\n    {\n      ...props,\n      style: [toRNWClassName(props.className), props.style],\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default TouchableOpacity;\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 * @format\n */\n\n'use client';\n\nimport * as React from 'react';\nimport { useMemo, useRef } from 'react';\nimport pick from '../../modules/pick';\nimport useMergeRefs from '../../modules/useMergeRefs';\nimport usePressEvents from '../../modules/usePressEvents';\nimport { warnOnce } from '../../modules/warnOnce';\nvar forwardPropsList = {\n  accessibilityDisabled: true,\n  accessibilityLabel: true,\n  accessibilityLiveRegion: true,\n  accessibilityRole: true,\n  accessibilityState: true,\n  accessibilityValue: true,\n  children: true,\n  disabled: true,\n  focusable: true,\n  nativeID: true,\n  onBlur: true,\n  onFocus: true,\n  onLayout: true,\n  testID: true\n};\nvar pickProps = props => pick(props, forwardPropsList);\nfunction TouchableWithoutFeedback(props, forwardedRef) {\n  warnOnce('TouchableWithoutFeedback', 'TouchableWithoutFeedback is deprecated. Please use Pressable.');\n  var delayPressIn = props.delayPressIn,\n    delayPressOut = props.delayPressOut,\n    delayLongPress = props.delayLongPress,\n    disabled = props.disabled,\n    focusable = props.focusable,\n    onLongPress = props.onLongPress,\n    onPress = props.onPress,\n    onPressIn = props.onPressIn,\n    onPressOut = props.onPressOut,\n    rejectResponderTermination = props.rejectResponderTermination;\n  var hostRef = useRef(null);\n  var pressConfig = useMemo(() => ({\n    cancelable: !rejectResponderTermination,\n    disabled,\n    delayLongPress,\n    delayPressStart: delayPressIn,\n    delayPressEnd: delayPressOut,\n    onLongPress,\n    onPress,\n    onPressStart: onPressIn,\n    onPressEnd: onPressOut\n  }), [disabled, delayPressIn, delayPressOut, delayLongPress, onLongPress, onPress, onPressIn, onPressOut, rejectResponderTermination]);\n  var pressEventHandlers = usePressEvents(hostRef, pressConfig);\n  var element = React.Children.only(props.children);\n  var children = [element.props.children];\n  var supportedProps = pickProps(props);\n  supportedProps.accessibilityDisabled = disabled;\n  supportedProps.focusable = !disabled && focusable !== false;\n  supportedProps.ref = useMergeRefs(forwardedRef, hostRef, element.ref);\n  var elementProps = Object.assign(supportedProps, pressEventHandlers);\n  return /*#__PURE__*/React.cloneElement(element, elementProps, ...children);\n}\nvar MemoedTouchableWithoutFeedback = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(TouchableWithoutFeedback));\nMemoedTouchableWithoutFeedback.displayName = 'TouchableWithoutFeedback';\nexport default MemoedTouchableWithoutFeedback;","import { jsx } from \"react/jsx-runtime\";\nimport { TouchableWithoutFeedback as RNTouchableWithoutFeedback } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nexport const TouchableWithoutFeedback = copyComponentProperties(RNTouchableWithoutFeedback, (props) => {\n  return /* @__PURE__ */ jsx(\n    RNTouchableWithoutFeedback,\n    {\n      ...props,\n      style: [toRNWClassName(props.className), props.style],\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default TouchableWithoutFeedback;\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\n'use client';\n\nimport VirtualizedList from '../../vendor/react-native/VirtualizedList';\nexport default VirtualizedList;","import { jsx } from \"react/jsx-runtime\";\nimport { VirtualizedList as RNVirtualizedList } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nexport const VirtualizedList = copyComponentProperties(RNVirtualizedList, (props) => {\n  return /* @__PURE__ */ jsx(\n    RNVirtualizedList,\n    {\n      ...props,\n      style: [toRNWClassName(props.className), props.style],\n      contentContainerStyle: [toRNWClassName(props.contentContainerClassName), props.contentContainerStyle],\n      ListFooterComponentStyle: [toRNWClassName(props.ListFooterComponentClassName), props.ListFooterComponentStyle],\n      ListHeaderComponentStyle: [toRNWClassName(props.ListHeaderComponentClassName), props.ListHeaderComponentStyle],\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default VirtualizedList;\n","import { getWebVariable } from \"../../core/web/index.js\";\nexport const getVariableValue = getWebVariable;\n","import { Appearance, Platform } from \"react-native\";\nimport { getCSSVariable } from \"../../hooks/useCSSVariable/useCSSVariable.js\";\nimport { ColorScheme, StyleDependency } from \"../../types.js\";\nimport { UniwindListener } from \"../listener.js\";\nconst SYSTEM_THEME = \"system\";\nconst RN_VERSION = Platform.constants?.reactNativeVersion?.minor ?? 0;\nconst UNSPECIFIED_THEME = RN_VERSION >= 82 ? \"unspecified\" : void 0;\nexport class UniwindConfigBuilder {\n  _themes = [\"light\", \"dark\"];\n  #hasAdaptiveThemes = true;\n  #currentTheme = this.colorScheme;\n  constructor() {\n    Appearance.addChangeListener((event) => {\n      const colorScheme = event.colorScheme === \"unspecified\" ? ColorScheme.Light : event.colorScheme ?? ColorScheme.Light;\n      const prevTheme = this.#currentTheme;\n      if (this.#hasAdaptiveThemes && prevTheme !== colorScheme) {\n        this.#currentTheme = colorScheme;\n        this.onThemeChange();\n        UniwindListener.notify([StyleDependency.Theme]);\n      }\n    });\n  }\n  get themes() {\n    return this._themes;\n  }\n  get hasAdaptiveThemes() {\n    return this.#hasAdaptiveThemes;\n  }\n  get currentTheme() {\n    return this.#currentTheme;\n  }\n  get colorScheme() {\n    const colorScheme = Appearance.getColorScheme();\n    if (colorScheme === \"unspecified\") {\n      return ColorScheme.Light;\n    }\n    return colorScheme ?? ColorScheme.Light;\n  }\n  // oxlint-disable-next-line typescript/no-redundant-type-constituents\n  setTheme(theme) {\n    const prevTheme = this.#currentTheme;\n    const prevHasAdaptiveThemes = this.#hasAdaptiveThemes;\n    const isAdaptiveTheme = [\"light\", \"dark\"].includes(theme);\n    try {\n      if (theme === SYSTEM_THEME) {\n        this.#hasAdaptiveThemes = true;\n        this.#currentTheme = this.colorScheme;\n        if (Platform.OS !== \"web\") {\n          Appearance.setColorScheme(UNSPECIFIED_THEME);\n        }\n        return;\n      }\n      if (!this._themes.includes(theme)) {\n        throw new Error(`Uniwind: You're trying to setTheme to '${theme}', but it was not registered.`);\n      }\n      this.#hasAdaptiveThemes = false;\n      this.#currentTheme = theme;\n      if (Platform.OS !== \"web\") {\n        Appearance.setColorScheme(\n          // @ts-expect-error RN >0.82 - breaking change\n          isAdaptiveTheme ? this.#currentTheme : UNSPECIFIED_THEME\n        );\n      }\n    } finally {\n      if (prevTheme !== this.#currentTheme) {\n        this.onThemeChange();\n        UniwindListener.notify([StyleDependency.Theme]);\n      }\n      if (prevHasAdaptiveThemes !== this.#hasAdaptiveThemes) {\n        UniwindListener.notify([StyleDependency.AdaptiveThemes]);\n      }\n    }\n  }\n  // oxlint-disable-next-line typescript/no-unused-vars\n  updateCSSVariables(theme, cssVariables) {\n  }\n  // oxlint-disable-next-line typescript/no-unused-vars\n  updateInsets(insets) {\n  }\n  getCSSVariable = ((variableName) => {\n    return getCSSVariable(variableName, { scopedTheme: null });\n  });\n  __reinit(_, themes) {\n    this._themes = themes;\n  }\n  onThemeChange() {\n  }\n}\nexport const Uniwind = new UniwindConfigBuilder();\n","import { useLayoutEffect, useRef, useState } from \"react\";\nimport { arrayEquals } from \"../../common/utils.js\";\nimport { useUniwindContext } from \"../../core/context.js\";\nimport { UniwindListener } from \"../../core/listener.js\";\nimport { Logger } from \"../../core/logger.js\";\nimport { StyleDependency } from \"../../types.js\";\nimport { getVariableValue } from \"./getVariableValue.js\";\nlet warned = false;\nconst logDevError = (name) => {\n  warned = true;\n  Logger.warn(\n    `We couldn't find your variable ${name}. Make sure it's used at least once in your className, or define it in a static theme as described in the docs: https://docs.uniwind.dev/api/use-css-variable`\n  );\n};\nexport const getCSSVariable = (name, uniwindContext) => {\n  const value = Array.isArray(name) ? name.map((name2) => getVariableValue(name2, uniwindContext)) : getVariableValue(name, uniwindContext);\n  if (Array.isArray(value)) {\n    value.forEach((val, index) => {\n      if (val === void 0 && __DEV__ && !warned) {\n        logDevError(name[index] ?? \"\");\n      }\n    });\n  }\n  if (value === void 0 && __DEV__ && !warned) {\n    logDevError(name);\n  }\n  return value;\n};\nexport const useCSSVariable = (name) => {\n  const uniwindContext = useUniwindContext();\n  const [value, setValue] = useState(getCSSVariable(name, uniwindContext));\n  const nameRef = useRef(name);\n  useLayoutEffect(() => {\n    if (Array.isArray(name) && Array.isArray(nameRef.current)) {\n      if (arrayEquals(name, nameRef.current)) {\n        return;\n      }\n      setValue(getCSSVariable(name, uniwindContext));\n      nameRef.current = name;\n      return;\n    }\n    if (name !== nameRef.current) {\n      setValue(getCSSVariable(name, uniwindContext));\n      nameRef.current = name;\n    }\n  }, [name]);\n  useLayoutEffect(() => {\n    const updateValue = () => setValue(getCSSVariable(nameRef.current, uniwindContext));\n    const dispose = UniwindListener.subscribe(\n      updateValue,\n      [StyleDependency.Theme, StyleDependency.Variables]\n    );\n    return dispose;\n  }, [uniwindContext]);\n  return value;\n};\n","import { arrayEquals } from \"../../common/utils.js\";\nimport { StyleDependency } from \"../../types.js\";\nimport { UniwindListener } from \"../listener.js\";\nimport { Logger } from \"../logger.js\";\nimport { getWebVariable } from \"../web/index.js\";\nimport { UniwindConfigBuilder as UniwindConfigBuilderBase } from \"./config.common.js\";\nclass UniwindConfigBuilder extends UniwindConfigBuilderBase {\n  cssRules;\n  constructor() {\n    super();\n  }\n  updateCSSVariables(theme, variables) {\n    if (typeof document === \"undefined\") {\n      return;\n    }\n    const uniwindRules = this.getUniwindDynamicCSSRules();\n    Object.entries(variables).forEach(([varName, varValue]) => {\n      if (!varName.startsWith(\"--\") && __DEV__) {\n        Logger.error(`CSS variable name must start with \"--\", instead got: ${varName}`);\n      }\n      const existingRules = Object.fromEntries(\n        uniwindRules.map((rule) => [rule.theme, getWebVariable(varName, { scopedTheme: rule.theme })])\n      );\n      uniwindRules.forEach((rule) => {\n        if (rule.theme === theme) {\n          rule.style.setProperty(\n            varName,\n            typeof varValue === \"number\" ? `${varValue}px` : varValue\n          );\n          return;\n        }\n        rule.style.setProperty(varName, existingRules[rule.theme] ?? null);\n      });\n    });\n    UniwindListener.notify([StyleDependency.Variables]);\n  }\n  __reinit(generateStyleSheetCallback, themes) {\n    const oldThemes = this.themes;\n    super.__reinit(generateStyleSheetCallback, themes);\n    if (arrayEquals(themes, oldThemes)) {\n      return;\n    }\n    this.cssRules = void 0;\n    if (typeof document !== \"undefined\") {\n      document.querySelector(\"#uniwind-dynamic-styles\")?.remove();\n    }\n  }\n  getUniwindDynamicCSSRules() {\n    if (this.cssRules) {\n      return this.cssRules;\n    }\n    if (typeof document === \"undefined\") {\n      return [];\n    }\n    const styleElement = document.createElement(\"style\");\n    styleElement.innerText = this.themes.reduce(\n      (acc, theme) => {\n        return `${acc}.${theme}{}`;\n      },\n      \"\"\n    );\n    styleElement.setAttribute(\"id\", \"uniwind-dynamic-styles\");\n    document.head.appendChild(styleElement);\n    const cssRules = Array.from(styleElement.sheet?.cssRules ?? []).filter((rule) => \"selectorText\" in rule && \"style\" in rule).map((rule) => ({ style: rule.style, theme: rule.selectorText.replace(\".\", \"\") }));\n    this.cssRules = cssRules;\n    return cssRules;\n  }\n}\nexport const Uniwind = new UniwindConfigBuilder();\n","export const isDefined = (value) => value !== void 0 && value !== null;\nexport const arrayEquals = (a, b) => {\n  if (a.length !== b.length) {\n    return false;\n  }\n  return a.every((value, index) => value === b[index]);\n};\n","import { Uniwind } from \"../../core/index.js\";\nimport { UniwindListener } from \"../../core/listener.js\";\nimport { StyleDependency } from \"../../types.js\";\nimport \"./metro-injected\";\nconst addClassNameToRoot = () => {\n  if (typeof document === \"undefined\") {\n    return;\n  }\n  const root = document.documentElement;\n  Uniwind.themes.forEach((theme) => root.classList.remove(theme));\n  root.classList.add(Uniwind.currentTheme);\n};\nUniwindListener.subscribe(() => {\n  addClassNameToRoot();\n}, [StyleDependency.Theme]);\naddClassNameToRoot();\nexport const toRNWClassName = (className) => className !== void 0 ? { $$css: true, tailwind: className } : {};\n","import { isDefined } from \"../../common/utils.js\";\nimport { Logger } from \"../../core/logger.js\";\nimport { formatColor } from \"../../core/web/formatColor.js\";\nimport { useResolveClassNames } from \"../../hooks/useResolveClassNames.js\";\nlet warnedOnce = false;\nexport const useUniwindAccent = (className) => {\n  const styles = useResolveClassNames(className ?? \"\");\n  if (__DEV__ && !warnedOnce && isDefined(className) && className.trim() !== \"\" && styles.accentColor === void 0) {\n    warnedOnce = true;\n    Logger.warn(\n      `className '${className}' was provided to extract accentColor but no color was found. Make sure the className includes a color utility (e.g., 'accent-red-500', 'accent-blue-600'). See https://docs.uniwind.dev/class-names#the-accent-prefix`\n    );\n  }\n  return styles.accentColor !== void 0 ? formatColor(styles.accentColor) : void 0;\n};\n","import { StyleDependency } from \"../types.js\";\nclass UniwindListenerBuilder {\n  listeners = {\n    [StyleDependency.ColorScheme]: /* @__PURE__ */ new Set(),\n    [StyleDependency.Theme]: /* @__PURE__ */ new Set(),\n    [StyleDependency.Dimensions]: /* @__PURE__ */ new Set(),\n    [StyleDependency.Orientation]: /* @__PURE__ */ new Set(),\n    [StyleDependency.Insets]: /* @__PURE__ */ new Set(),\n    [StyleDependency.FontScale]: /* @__PURE__ */ new Set(),\n    [StyleDependency.Rtl]: /* @__PURE__ */ new Set(),\n    [StyleDependency.AdaptiveThemes]: /* @__PURE__ */ new Set(),\n    [StyleDependency.Variables]: /* @__PURE__ */ new Set()\n  };\n  notify(dependencies) {\n    dependencies.forEach((dep) => {\n      this.listeners[dep].forEach((callback) => callback());\n    });\n  }\n  notifyAll() {\n    Object.values(this.listeners).forEach((listenerSet) => {\n      listenerSet.forEach((callback) => callback());\n    });\n  }\n  subscribe(listener, dependencies, options) {\n    const wrappedListeners = /* @__PURE__ */ new Map();\n    const dispose = () => {\n      wrappedListeners.forEach((wrappedListener, dep) => {\n        this.listeners[dep].delete(wrappedListener);\n      });\n      wrappedListeners.clear();\n    };\n    dependencies.forEach((dep) => {\n      const wrappedListener = () => {\n        listener();\n        if (options?.once) {\n          dispose();\n        }\n      };\n      wrappedListeners.set(dep, wrappedListener);\n      this.listeners[dep].add(wrappedListener);\n    });\n    return dispose;\n  }\n}\nexport const UniwindListener = new UniwindListenerBuilder();\n","import { StyleDependency } from \"../../types.js\";\nimport { UniwindListener } from \"../listener.js\";\nclass CSSListenerBuilder {\n  activeRules = /* @__PURE__ */ new Set();\n  classNameMediaQueryListeners = /* @__PURE__ */ new Map();\n  listeners = /* @__PURE__ */ new Map();\n  registeredRulesMediaQueries = /* @__PURE__ */ new Map();\n  processedStyleSheets = /* @__PURE__ */ new WeakSet();\n  pendingInitialization = void 0;\n  constructor() {\n    if (typeof document === \"undefined\") {\n      return;\n    }\n    const observer = new MutationObserver((mutations) => {\n      for (const mutation of mutations) {\n        if (mutation.type === \"attributes\") {\n          const el = mutation.target;\n          if (!(\"sheet\" in el)) {\n            continue;\n          }\n          const sheet = el.sheet;\n          if (sheet) {\n            this.processedStyleSheets.delete(sheet);\n          }\n          this.scheduleInitialization();\n        }\n        if (mutation.type === \"childList\") {\n          this.scheduleInitialization();\n        }\n      }\n    });\n    this.initialize();\n    observer.observe(document.head, {\n      childList: true,\n      subtree: false,\n      attributes: true,\n      attributeFilter: [\"disabled\", \"media\", \"title\", \"href\", \"rel\"]\n    });\n  }\n  subscribeToClassName(classNames, listener) {\n    const disposables = [];\n    classNames.split(\" \").forEach((className) => {\n      const mediaQuery = this.classNameMediaQueryListeners.get(className);\n      if (!mediaQuery) {\n        return () => {\n        };\n      }\n      const listeners = this.listeners.get(mediaQuery);\n      listeners?.add(listener);\n      disposables.push(() => listeners?.delete(listener));\n    });\n    const disposeThemeListener = UniwindListener.subscribe(listener, [StyleDependency.Theme, StyleDependency.Variables]);\n    return () => {\n      disposables.forEach((disposable) => disposable());\n      disposeThemeListener();\n    };\n  }\n  scheduleInitialization() {\n    this.cancelPendingInitialization();\n    if (typeof requestIdleCallback !== \"undefined\") {\n      this.pendingInitialization = requestIdleCallback(() => {\n        this.initialize();\n      }, { timeout: 50 });\n      return;\n    }\n    this.pendingInitialization = setTimeout(() => {\n      this.initialize();\n    }, 50);\n  }\n  cancelPendingInitialization() {\n    if (this.pendingInitialization !== void 0) {\n      if (typeof cancelIdleCallback !== \"undefined\") {\n        cancelIdleCallback(this.pendingInitialization);\n      } else {\n        clearTimeout(this.pendingInitialization);\n      }\n      this.pendingInitialization = void 0;\n    }\n  }\n  pruneStaleRules() {\n    const activeSheets = new Set(Array.from(document.styleSheets));\n    for (const rule of this.activeRules) {\n      if (!rule.parentStyleSheet || !activeSheets.has(rule.parentStyleSheet)) {\n        this.activeRules.delete(rule);\n      }\n    }\n  }\n  initialize() {\n    this.pendingInitialization = void 0;\n    this.pruneStaleRules();\n    for (const sheet of Array.from(document.styleSheets)) {\n      if (this.processedStyleSheets.has(sheet)) {\n        continue;\n      }\n      let rules;\n      try {\n        rules = sheet.cssRules;\n      } catch {\n        continue;\n      }\n      if (!rules) {\n        continue;\n      }\n      this.processedStyleSheets.add(sheet);\n      this.addMediaQueriesDeep(rules);\n    }\n  }\n  isStyleRule(rule) {\n    return rule.constructor.name === \"CSSStyleRule\";\n  }\n  isMediaRule(rule) {\n    return rule.constructor.name === \"CSSMediaRule\";\n  }\n  isSupportsRule(rule) {\n    return rule.constructor.name === \"CSSSupportsRule\";\n  }\n  collectParentMediaQueries(rule, acc = []) {\n    const { parentRule } = rule;\n    if (!parentRule) {\n      return [];\n    }\n    if (this.isMediaRule(parentRule)) {\n      acc.push(parentRule);\n    }\n    const result = this.collectParentMediaQueries(parentRule, acc);\n    acc.push(...result);\n    return Array.from(new Set(acc));\n  }\n  addMediaQueriesDeep(rules) {\n    for (const rule of Array.from(rules)) {\n      if (this.isStyleRule(rule)) {\n        const mediaQueries = this.collectParentMediaQueries(rule);\n        this.activeRules.add(rule);\n        if (mediaQueries.length > 0) {\n          this.addMediaQuery(mediaQueries, rule);\n        }\n        continue;\n      }\n      if (this.isSupportsRule(rule)) {\n        if (!CSS.supports(rule.conditionText)) {\n          continue;\n        }\n        this.addMediaQueriesDeep(rule.cssRules);\n        continue;\n      }\n      if (\"cssRules\" in rule && rule.cssRules instanceof CSSRuleList) {\n        this.addMediaQueriesDeep(rule.cssRules);\n        continue;\n      }\n    }\n  }\n  addMediaQuery(mediaQueries, rule) {\n    const className = rule.selectorText;\n    const rules = mediaQueries.map((mediaQuery) => mediaQuery.conditionText).sort().join(\" and \");\n    const parsedClassName = className.replace(\".\", \"\").replace(\"\\\\\", \"\");\n    const cachedMediaQueryList = this.registeredRulesMediaQueries.get(rules);\n    if (cachedMediaQueryList) {\n      this.classNameMediaQueryListeners.set(parsedClassName, cachedMediaQueryList);\n      this.toggleRule(cachedMediaQueryList, rule);\n      cachedMediaQueryList.addEventListener(\"change\", () => {\n        this.toggleRule(cachedMediaQueryList, rule);\n      });\n      return;\n    }\n    const mediaQueryList = window.matchMedia(rules);\n    this.toggleRule(mediaQueryList, rule);\n    this.registeredRulesMediaQueries.set(rules, mediaQueryList);\n    this.listeners.set(mediaQueryList, /* @__PURE__ */ new Set());\n    this.classNameMediaQueryListeners.set(parsedClassName, mediaQueryList);\n    mediaQueryList.addEventListener(\"change\", () => {\n      this.listeners.get(mediaQueryList).forEach((listener) => {\n        listener();\n      });\n      this.toggleRule(mediaQueryList, rule);\n    });\n  }\n  isRuleLive(rule) {\n    const sheet = rule.parentStyleSheet;\n    return sheet !== null && Array.from(document.styleSheets).includes(sheet);\n  }\n  toggleRule(mqList, rule) {\n    if (mqList.matches && this.isRuleLive(rule)) {\n      this.activeRules.add(rule);\n    } else {\n      this.activeRules.delete(rule);\n    }\n  }\n}\nexport const CSSListener = new CSSListenerBuilder();\n","import { formatHex, formatHex8, parse } from \"culori\";\nexport const formatColor = (color) => {\n  const parsedColor = parse(color);\n  if (!parsedColor) {\n    return color;\n  }\n  return parsedColor.alpha !== void 0 && parsedColor.alpha !== 1 ? formatHex8(parsedColor) : formatHex(parsedColor);\n};\n","import { parse } from \"culori\";\nimport { formatColor } from \"./formatColor.js\";\nexport const parseCSSValue = (value) => {\n  if (isNaN(Number(value)) && parse(value) !== void 0) {\n    return formatColor(value);\n  }\n  return value;\n};\n","import { generateDataSet } from \"../../components/web/generateDataSet.js\";\nimport { CSSListener } from \"./cssListener.js\";\nimport { parseCSSValue } from \"./parseCSSValue.js\";\nconst dummyParent = typeof document !== \"undefined\" ? Object.assign(document.createElement(\"div\"), {\n  style: \"display: none\"\n}) : null;\nconst dummy = typeof document !== \"undefined\" ? document.createElement(\"div\") : null;\nif (dummyParent && dummy) {\n  document.body.appendChild(dummyParent);\n  dummyParent.appendChild(dummy);\n}\nconst getActiveStylesForClass = (className) => {\n  const extractedStyles = {};\n  if (!dummy) {\n    return extractedStyles;\n  }\n  const classNames = className.split(/\\s+/).filter(Boolean);\n  const computedStyles = window.getComputedStyle(dummy);\n  CSSListener.activeRules.forEach((rule) => {\n    const selector = rule.selectorText;\n    const mightMatch = classNames.some((cls) => selector.includes(`.${CSS.escape(cls)}`));\n    if (!mightMatch) {\n      return;\n    }\n    const safeSelector = selector.replace(/::[a-z-]+/gi, \"\");\n    try {\n      if (safeSelector !== \"\" && dummy.matches(safeSelector)) {\n        for (const propertyName of rule.style) {\n          extractedStyles[propertyName] = computedStyles.getPropertyValue(propertyName);\n        }\n      }\n    } catch {\n    }\n  });\n  return extractedStyles;\n};\nexport const getWebStyles = (className, componentProps, uniwindContext) => {\n  if (className === void 0) {\n    return {};\n  }\n  if (!dummy) {\n    return {};\n  }\n  if (uniwindContext.scopedTheme !== null) {\n    dummyParent?.setAttribute(\"class\", uniwindContext.scopedTheme);\n  } else {\n    dummyParent?.removeAttribute(\"class\");\n  }\n  dummy.className = className;\n  const dataSet = generateDataSet(componentProps ?? {});\n  Object.entries(dataSet).forEach(([key, value]) => {\n    if (value === false || value === void 0) {\n      return;\n    }\n    dummy.dataset[key] = String(value);\n  });\n  const computedStyles = getActiveStylesForClass(className);\n  Object.keys(dataSet).forEach((key) => {\n    delete dummy.dataset[key];\n  });\n  return Object.fromEntries(\n    Object.entries(computedStyles).map(([key, value]) => {\n      const parsedKey = key[0] === \"-\" ? key : key.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());\n      return [\n        parsedKey,\n        parseCSSValue(value)\n      ];\n    })\n  );\n};\nexport const getWebVariable = (name, uniwindContext) => {\n  if (!dummyParent) {\n    return void 0;\n  }\n  if (uniwindContext.scopedTheme !== null) {\n    dummyParent.setAttribute(\"class\", uniwindContext.scopedTheme);\n  } else {\n    dummyParent.removeAttribute(\"class\");\n  }\n  const variable = window.getComputedStyle(dummyParent).getPropertyValue(name);\n  return parseCSSValue(variable);\n};\n","import { createContext, useContext } from \"react\";\nexport const UniwindContext = createContext({\n  scopedTheme: null\n});\nexport const useUniwindContext = () => useContext(UniwindContext);\nUniwindContext.displayName = \"UniwindContext\";\n","import { useLayoutEffect, useReducer } from \"react\";\nimport { useUniwindContext } from \"../core/context.js\";\nimport { CSSListener, getWebStyles } from \"../core/web/index.js\";\nconst emptyState = {};\nexport const useResolveClassNames = (className) => {\n  const uniwindContext = useUniwindContext();\n  const [styles, recreate] = useReducer(\n    () => className !== \"\" ? getWebStyles(className, void 0, uniwindContext) : emptyState,\n    void 0,\n    () => className !== \"\" ? getWebStyles(className, void 0, uniwindContext) : emptyState\n  );\n  useLayoutEffect(() => {\n    if (className === \"\") {\n      return;\n    }\n    recreate();\n    const dispose = CSSListener.subscribeToClassName(className, recreate);\n    return dispose;\n  }, [className, uniwindContext]);\n  return styles;\n};\n","export var StyleDependency = /* @__PURE__ */ ((StyleDependency2) => {\n  StyleDependency2[StyleDependency2[\"ColorScheme\"] = 1] = \"ColorScheme\";\n  StyleDependency2[StyleDependency2[\"Theme\"] = 2] = \"Theme\";\n  StyleDependency2[StyleDependency2[\"Dimensions\"] = 3] = \"Dimensions\";\n  StyleDependency2[StyleDependency2[\"Orientation\"] = 4] = \"Orientation\";\n  StyleDependency2[StyleDependency2[\"Insets\"] = 5] = \"Insets\";\n  StyleDependency2[StyleDependency2[\"FontScale\"] = 6] = \"FontScale\";\n  StyleDependency2[StyleDependency2[\"Rtl\"] = 7] = \"Rtl\";\n  StyleDependency2[StyleDependency2[\"AdaptiveThemes\"] = 8] = \"AdaptiveThemes\";\n  StyleDependency2[StyleDependency2[\"Variables\"] = 9] = \"Variables\";\n  return StyleDependency2;\n})(StyleDependency || {});\nexport var Orientation = /* @__PURE__ */ ((Orientation2) => {\n  Orientation2[\"Portrait\"] = \"portrait\";\n  Orientation2[\"Landscape\"] = \"landscape\";\n  return Orientation2;\n})(Orientation || {});\nexport var ColorScheme = /* @__PURE__ */ ((ColorScheme2) => {\n  ColorScheme2[\"Light\"] = \"light\";\n  ColorScheme2[\"Dark\"] = \"dark\";\n  return ColorScheme2;\n})(ColorScheme || {});\n","'use strict';\n\nvar common = require('@lezer/common');\nvar state = require('@codemirror/state');\nvar view = require('@codemirror/view');\nvar highlight = require('@lezer/highlight');\nvar styleMod = require('style-mod');\n\nvar _a;\n/**\nNode prop stored in a parser's top syntax node to provide the\nfacet that stores language-specific data for that language.\n*/\nconst languageDataProp = new common.NodeProp();\n/**\nHelper function to define a facet (to be added to the top syntax\nnode(s) for a language via\n[`languageDataProp`](https://codemirror.net/6/docs/ref/#language.languageDataProp)), that will be\nused to associate language data with the language. You\nprobably only need this when subclassing\n[`Language`](https://codemirror.net/6/docs/ref/#language.Language).\n*/\nfunction defineLanguageFacet(baseData) {\n    return state.Facet.define({\n        combine: baseData ? values => values.concat(baseData) : undefined\n    });\n}\n/**\nSyntax node prop used to register sublanguages. Should be added to\nthe top level node type for the language.\n*/\nconst sublanguageProp = new common.NodeProp();\n/**\nA language object manages parsing and per-language\n[metadata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt). Parse data is\nmanaged as a [Lezer](https://lezer.codemirror.net) tree. The class\ncan be used directly, via the [`LRLanguage`](https://codemirror.net/6/docs/ref/#language.LRLanguage)\nsubclass for [Lezer](https://lezer.codemirror.net/) LR parsers, or\nvia the [`StreamLanguage`](https://codemirror.net/6/docs/ref/#language.StreamLanguage) subclass\nfor stream parsers.\n*/\nclass Language {\n    /**\n    Construct a language object. If you need to invoke this\n    directly, first define a data facet with\n    [`defineLanguageFacet`](https://codemirror.net/6/docs/ref/#language.defineLanguageFacet), and then\n    configure your parser to [attach](https://codemirror.net/6/docs/ref/#language.languageDataProp) it\n    to the language's outer syntax node.\n    */\n    constructor(\n    /**\n    The [language data](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt) facet\n    used for this language.\n    */\n    data, parser, extraExtensions = [], \n    /**\n    A language name.\n    */\n    name = \"\") {\n        this.data = data;\n        this.name = name;\n        // Kludge to define EditorState.tree as a debugging helper,\n        // without the EditorState package actually knowing about\n        // languages and lezer trees.\n        if (!state.EditorState.prototype.hasOwnProperty(\"tree\"))\n            Object.defineProperty(state.EditorState.prototype, \"tree\", { get() { return syntaxTree(this); } });\n        this.parser = parser;\n        this.extension = [\n            language.of(this),\n            state.EditorState.languageData.of((state, pos, side) => {\n                let top = topNodeAt(state, pos, side), data = top.type.prop(languageDataProp);\n                if (!data)\n                    return [];\n                let base = state.facet(data), sub = top.type.prop(sublanguageProp);\n                if (sub) {\n                    let innerNode = top.resolve(pos - top.from, side);\n                    for (let sublang of sub)\n                        if (sublang.test(innerNode, state)) {\n                            let data = state.facet(sublang.facet);\n                            return sublang.type == \"replace\" ? data : data.concat(base);\n                        }\n                }\n                return base;\n            })\n        ].concat(extraExtensions);\n    }\n    /**\n    Query whether this language is active at the given position.\n    */\n    isActiveAt(state, pos, side = -1) {\n        return topNodeAt(state, pos, side).type.prop(languageDataProp) == this.data;\n    }\n    /**\n    Find the document regions that were parsed using this language.\n    The returned regions will _include_ any nested languages rooted\n    in this language, when those exist.\n    */\n    findRegions(state) {\n        let lang = state.facet(language);\n        if ((lang === null || lang === void 0 ? void 0 : lang.data) == this.data)\n            return [{ from: 0, to: state.doc.length }];\n        if (!lang || !lang.allowsNesting)\n            return [];\n        let result = [];\n        let explore = (tree, from) => {\n            if (tree.prop(languageDataProp) == this.data) {\n                result.push({ from, to: from + tree.length });\n                return;\n            }\n            let mount = tree.prop(common.NodeProp.mounted);\n            if (mount) {\n                if (mount.tree.prop(languageDataProp) == this.data) {\n                    if (mount.overlay)\n                        for (let r of mount.overlay)\n                            result.push({ from: r.from + from, to: r.to + from });\n                    else\n                        result.push({ from: from, to: from + tree.length });\n                    return;\n                }\n                else if (mount.overlay) {\n                    let size = result.length;\n                    explore(mount.tree, mount.overlay[0].from + from);\n                    if (result.length > size)\n                        return;\n                }\n            }\n            for (let i = 0; i < tree.children.length; i++) {\n                let ch = tree.children[i];\n                if (ch instanceof common.Tree)\n                    explore(ch, tree.positions[i] + from);\n            }\n        };\n        explore(syntaxTree(state), 0);\n        return result;\n    }\n    /**\n    Indicates whether this language allows nested languages. The\n    default implementation returns true.\n    */\n    get allowsNesting() { return true; }\n}\n/**\n@internal\n*/\nLanguage.setState = state.StateEffect.define();\nfunction topNodeAt(state, pos, side) {\n    let topLang = state.facet(language), tree = syntaxTree(state).topNode;\n    if (!topLang || topLang.allowsNesting) {\n        for (let node = tree; node; node = node.enter(pos, side, common.IterMode.ExcludeBuffers))\n            if (node.type.isTop)\n                tree = node;\n    }\n    return tree;\n}\n/**\nA subclass of [`Language`](https://codemirror.net/6/docs/ref/#language.Language) for use with Lezer\n[LR parsers](https://lezer.codemirror.net/docs/ref#lr.LRParser)\nparsers.\n*/\nclass LRLanguage extends Language {\n    constructor(data, parser, name) {\n        super(data, parser, [], name);\n        this.parser = parser;\n    }\n    /**\n    Define a language from a parser.\n    */\n    static define(spec) {\n        let data = defineLanguageFacet(spec.languageData);\n        return new LRLanguage(data, spec.parser.configure({\n            props: [languageDataProp.add(type => type.isTop ? data : undefined)]\n        }), spec.name);\n    }\n    /**\n    Create a new instance of this language with a reconfigured\n    version of its parser and optionally a new name.\n    */\n    configure(options, name) {\n        return new LRLanguage(this.data, this.parser.configure(options), name || this.name);\n    }\n    get allowsNesting() { return this.parser.hasWrappers(); }\n}\n/**\nGet the syntax tree for a state, which is the current (possibly\nincomplete) parse tree of the active\n[language](https://codemirror.net/6/docs/ref/#language.Language), or the empty tree if there is no\nlanguage available.\n*/\nfunction syntaxTree(state) {\n    let field = state.field(Language.state, false);\n    return field ? field.tree : common.Tree.empty;\n}\n/**\nTry to get a parse tree that spans at least up to `upto`. The\nmethod will do at most `timeout` milliseconds of work to parse\nup to that point if the tree isn't already available.\n*/\nfunction ensureSyntaxTree(state, upto, timeout = 50) {\n    var _a;\n    let parse = (_a = state.field(Language.state, false)) === null || _a === void 0 ? void 0 : _a.context;\n    if (!parse)\n        return null;\n    let oldVieport = parse.viewport;\n    parse.updateViewport({ from: 0, to: upto });\n    let result = parse.isDone(upto) || parse.work(timeout, upto) ? parse.tree : null;\n    parse.updateViewport(oldVieport);\n    return result;\n}\n/**\nQueries whether there is a full syntax tree available up to the\ngiven document position. If there isn't, the background parse\nprocess _might_ still be working and update the tree further, but\nthere is no guarantee of that—the parser will [stop\nworking](https://codemirror.net/6/docs/ref/#language.syntaxParserRunning) when it has spent a\ncertain amount of time or has moved beyond the visible viewport.\nAlways returns false if no language has been enabled.\n*/\nfunction syntaxTreeAvailable(state, upto = state.doc.length) {\n    var _a;\n    return ((_a = state.field(Language.state, false)) === null || _a === void 0 ? void 0 : _a.context.isDone(upto)) || false;\n}\n/**\nMove parsing forward, and update the editor state afterwards to\nreflect the new tree. Will work for at most `timeout`\nmilliseconds. Returns true if the parser managed get to the given\nposition in that time.\n*/\nfunction forceParsing(view, upto = view.viewport.to, timeout = 100) {\n    let success = ensureSyntaxTree(view.state, upto, timeout);\n    if (success != syntaxTree(view.state))\n        view.dispatch({});\n    return !!success;\n}\n/**\nTells you whether the language parser is planning to do more\nparsing work (in a `requestIdleCallback` pseudo-thread) or has\nstopped running, either because it parsed the entire document,\nbecause it spent too much time and was cut off, or because there\nis no language parser enabled.\n*/\nfunction syntaxParserRunning(view) {\n    var _a;\n    return ((_a = view.plugin(parseWorker)) === null || _a === void 0 ? void 0 : _a.isWorking()) || false;\n}\n/**\nLezer-style\n[`Input`](https://lezer.codemirror.net/docs/ref#common.Input)\nobject for a [`Text`](https://codemirror.net/6/docs/ref/#state.Text) object.\n*/\nclass DocInput {\n    /**\n    Create an input object for the given document.\n    */\n    constructor(doc) {\n        this.doc = doc;\n        this.cursorPos = 0;\n        this.string = \"\";\n        this.cursor = doc.iter();\n    }\n    get length() { return this.doc.length; }\n    syncTo(pos) {\n        this.string = this.cursor.next(pos - this.cursorPos).value;\n        this.cursorPos = pos + this.string.length;\n        return this.cursorPos - this.string.length;\n    }\n    chunk(pos) {\n        this.syncTo(pos);\n        return this.string;\n    }\n    get lineChunks() { return true; }\n    read(from, to) {\n        let stringStart = this.cursorPos - this.string.length;\n        if (from < stringStart || to >= this.cursorPos)\n            return this.doc.sliceString(from, to);\n        else\n            return this.string.slice(from - stringStart, to - stringStart);\n    }\n}\nlet currentContext = null;\n/**\nA parse context provided to parsers working on the editor content.\n*/\nclass ParseContext {\n    constructor(parser, \n    /**\n    The current editor state.\n    */\n    state, \n    /**\n    Tree fragments that can be reused by incremental re-parses.\n    */\n    fragments = [], \n    /**\n    @internal\n    */\n    tree, \n    /**\n    @internal\n    */\n    treeLen, \n    /**\n    The current editor viewport (or some overapproximation\n    thereof). Intended to be used for opportunistically avoiding\n    work (in which case\n    [`skipUntilInView`](https://codemirror.net/6/docs/ref/#language.ParseContext.skipUntilInView)\n    should be called to make sure the parser is restarted when the\n    skipped region becomes visible).\n    */\n    viewport, \n    /**\n    @internal\n    */\n    skipped, \n    /**\n    This is where skipping parsers can register a promise that,\n    when resolved, will schedule a new parse. It is cleared when\n    the parse worker picks up the promise. @internal\n    */\n    scheduleOn) {\n        this.parser = parser;\n        this.state = state;\n        this.fragments = fragments;\n        this.tree = tree;\n        this.treeLen = treeLen;\n        this.viewport = viewport;\n        this.skipped = skipped;\n        this.scheduleOn = scheduleOn;\n        this.parse = null;\n        /**\n        @internal\n        */\n        this.tempSkipped = [];\n    }\n    /**\n    @internal\n    */\n    static create(parser, state, viewport) {\n        return new ParseContext(parser, state, [], common.Tree.empty, 0, viewport, [], null);\n    }\n    startParse() {\n        return this.parser.startParse(new DocInput(this.state.doc), this.fragments);\n    }\n    /**\n    @internal\n    */\n    work(until, upto) {\n        if (upto != null && upto >= this.state.doc.length)\n            upto = undefined;\n        if (this.tree != common.Tree.empty && this.isDone(upto !== null && upto !== void 0 ? upto : this.state.doc.length)) {\n            this.takeTree();\n            return true;\n        }\n        return this.withContext(() => {\n            var _a;\n            if (typeof until == \"number\") {\n                let endTime = Date.now() + until;\n                until = () => Date.now() > endTime;\n            }\n            if (!this.parse)\n                this.parse = this.startParse();\n            if (upto != null && (this.parse.stoppedAt == null || this.parse.stoppedAt > upto) &&\n                upto < this.state.doc.length)\n                this.parse.stopAt(upto);\n            for (;;) {\n                let done = this.parse.advance();\n                if (done) {\n                    this.fragments = this.withoutTempSkipped(common.TreeFragment.addTree(done, this.fragments, this.parse.stoppedAt != null));\n                    this.treeLen = (_a = this.parse.stoppedAt) !== null && _a !== void 0 ? _a : this.state.doc.length;\n                    this.tree = done;\n                    this.parse = null;\n                    if (this.treeLen < (upto !== null && upto !== void 0 ? upto : this.state.doc.length))\n                        this.parse = this.startParse();\n                    else\n                        return true;\n                }\n                if (until())\n                    return false;\n            }\n        });\n    }\n    /**\n    @internal\n    */\n    takeTree() {\n        let pos, tree;\n        if (this.parse && (pos = this.parse.parsedPos) >= this.treeLen) {\n            if (this.parse.stoppedAt == null || this.parse.stoppedAt > pos)\n                this.parse.stopAt(pos);\n            this.withContext(() => { while (!(tree = this.parse.advance())) { } });\n            this.treeLen = pos;\n            this.tree = tree;\n            this.fragments = this.withoutTempSkipped(common.TreeFragment.addTree(this.tree, this.fragments, true));\n            this.parse = null;\n        }\n    }\n    withContext(f) {\n        let prev = currentContext;\n        currentContext = this;\n        try {\n            return f();\n        }\n        finally {\n            currentContext = prev;\n        }\n    }\n    withoutTempSkipped(fragments) {\n        for (let r; r = this.tempSkipped.pop();)\n            fragments = cutFragments(fragments, r.from, r.to);\n        return fragments;\n    }\n    /**\n    @internal\n    */\n    changes(changes, newState) {\n        let { fragments, tree, treeLen, viewport, skipped } = this;\n        this.takeTree();\n        if (!changes.empty) {\n            let ranges = [];\n            changes.iterChangedRanges((fromA, toA, fromB, toB) => ranges.push({ fromA, toA, fromB, toB }));\n            fragments = common.TreeFragment.applyChanges(fragments, ranges);\n            tree = common.Tree.empty;\n            treeLen = 0;\n            viewport = { from: changes.mapPos(viewport.from, -1), to: changes.mapPos(viewport.to, 1) };\n            if (this.skipped.length) {\n                skipped = [];\n                for (let r of this.skipped) {\n                    let from = changes.mapPos(r.from, 1), to = changes.mapPos(r.to, -1);\n                    if (from < to)\n                        skipped.push({ from, to });\n                }\n            }\n        }\n        return new ParseContext(this.parser, newState, fragments, tree, treeLen, viewport, skipped, this.scheduleOn);\n    }\n    /**\n    @internal\n    */\n    updateViewport(viewport) {\n        if (this.viewport.from == viewport.from && this.viewport.to == viewport.to)\n            return false;\n        this.viewport = viewport;\n        let startLen = this.skipped.length;\n        for (let i = 0; i < this.skipped.length; i++) {\n            let { from, to } = this.skipped[i];\n            if (from < viewport.to && to > viewport.from) {\n                this.fragments = cutFragments(this.fragments, from, to);\n                this.skipped.splice(i--, 1);\n            }\n        }\n        if (this.skipped.length >= startLen)\n            return false;\n        this.reset();\n        return true;\n    }\n    /**\n    @internal\n    */\n    reset() {\n        if (this.parse) {\n            this.takeTree();\n            this.parse = null;\n        }\n    }\n    /**\n    Notify the parse scheduler that the given region was skipped\n    because it wasn't in view, and the parse should be restarted\n    when it comes into view.\n    */\n    skipUntilInView(from, to) {\n        this.skipped.push({ from, to });\n    }\n    /**\n    Returns a parser intended to be used as placeholder when\n    asynchronously loading a nested parser. It'll skip its input and\n    mark it as not-really-parsed, so that the next update will parse\n    it again.\n    \n    When `until` is given, a reparse will be scheduled when that\n    promise resolves.\n    */\n    static getSkippingParser(until) {\n        return new class extends common.Parser {\n            createParse(input, fragments, ranges) {\n                let from = ranges[0].from, to = ranges[ranges.length - 1].to;\n                let parser = {\n                    parsedPos: from,\n                    advance() {\n                        let cx = currentContext;\n                        if (cx) {\n                            for (let r of ranges)\n                                cx.tempSkipped.push(r);\n                            if (until)\n                                cx.scheduleOn = cx.scheduleOn ? Promise.all([cx.scheduleOn, until]) : until;\n                        }\n                        this.parsedPos = to;\n                        return new common.Tree(common.NodeType.none, [], [], to - from);\n                    },\n                    stoppedAt: null,\n                    stopAt() { }\n                };\n                return parser;\n            }\n        };\n    }\n    /**\n    @internal\n    */\n    isDone(upto) {\n        upto = Math.min(upto, this.state.doc.length);\n        let frags = this.fragments;\n        return this.treeLen >= upto && frags.length && frags[0].from == 0 && frags[0].to >= upto;\n    }\n    /**\n    Get the context for the current parse, or `null` if no editor\n    parse is in progress.\n    */\n    static get() { return currentContext; }\n}\nfunction cutFragments(fragments, from, to) {\n    return common.TreeFragment.applyChanges(fragments, [{ fromA: from, toA: to, fromB: from, toB: to }]);\n}\nclass LanguageState {\n    constructor(\n    // A mutable parse state that is used to preserve work done during\n    // the lifetime of a state when moving to the next state.\n    context) {\n        this.context = context;\n        this.tree = context.tree;\n    }\n    apply(tr) {\n        if (!tr.docChanged && this.tree == this.context.tree)\n            return this;\n        let newCx = this.context.changes(tr.changes, tr.state);\n        // If the previous parse wasn't done, go forward only up to its\n        // end position or the end of the viewport, to avoid slowing down\n        // state updates with parse work beyond the viewport.\n        let upto = this.context.treeLen == tr.startState.doc.length ? undefined\n            : Math.max(tr.changes.mapPos(this.context.treeLen), newCx.viewport.to);\n        if (!newCx.work(20 /* Work.Apply */, upto))\n            newCx.takeTree();\n        return new LanguageState(newCx);\n    }\n    static init(state) {\n        let vpTo = Math.min(3000 /* Work.InitViewport */, state.doc.length);\n        let parseState = ParseContext.create(state.facet(language).parser, state, { from: 0, to: vpTo });\n        if (!parseState.work(20 /* Work.Apply */, vpTo))\n            parseState.takeTree();\n        return new LanguageState(parseState);\n    }\n}\nLanguage.state = state.StateField.define({\n    create: LanguageState.init,\n    update(value, tr) {\n        for (let e of tr.effects)\n            if (e.is(Language.setState))\n                return e.value;\n        if (tr.startState.facet(language) != tr.state.facet(language))\n            return LanguageState.init(tr.state);\n        return value.apply(tr);\n    }\n});\nlet requestIdle = (callback) => {\n    let timeout = setTimeout(() => callback(), 500 /* Work.MaxPause */);\n    return () => clearTimeout(timeout);\n};\nif (typeof requestIdleCallback != \"undefined\")\n    requestIdle = (callback) => {\n        let idle = -1, timeout = setTimeout(() => {\n            idle = requestIdleCallback(callback, { timeout: 500 /* Work.MaxPause */ - 100 /* Work.MinPause */ });\n        }, 100 /* Work.MinPause */);\n        return () => idle < 0 ? clearTimeout(timeout) : cancelIdleCallback(idle);\n    };\nconst isInputPending = typeof navigator != \"undefined\" && ((_a = navigator.scheduling) === null || _a === void 0 ? void 0 : _a.isInputPending)\n    ? () => navigator.scheduling.isInputPending() : null;\nconst parseWorker = view.ViewPlugin.fromClass(class ParseWorker {\n    constructor(view) {\n        this.view = view;\n        this.working = null;\n        this.workScheduled = 0;\n        // End of the current time chunk\n        this.chunkEnd = -1;\n        // Milliseconds of budget left for this chunk\n        this.chunkBudget = -1;\n        this.work = this.work.bind(this);\n        this.scheduleWork();\n    }\n    update(update) {\n        let cx = this.view.state.field(Language.state).context;\n        if (cx.updateViewport(update.view.viewport) || this.view.viewport.to > cx.treeLen)\n            this.scheduleWork();\n        if (update.docChanged || update.selectionSet) {\n            if (this.view.hasFocus)\n                this.chunkBudget += 50 /* Work.ChangeBonus */;\n            this.scheduleWork();\n        }\n        this.checkAsyncSchedule(cx);\n    }\n    scheduleWork() {\n        if (this.working)\n            return;\n        let { state } = this.view, field = state.field(Language.state);\n        if (field.tree != field.context.tree || !field.context.isDone(state.doc.length))\n            this.working = requestIdle(this.work);\n    }\n    work(deadline) {\n        this.working = null;\n        let now = Date.now();\n        if (this.chunkEnd < now && (this.chunkEnd < 0 || this.view.hasFocus)) { // Start a new chunk\n            this.chunkEnd = now + 30000 /* Work.ChunkTime */;\n            this.chunkBudget = 3000 /* Work.ChunkBudget */;\n        }\n        if (this.chunkBudget <= 0)\n            return; // No more budget\n        let { state, viewport: { to: vpTo } } = this.view, field = state.field(Language.state);\n        if (field.tree == field.context.tree && field.context.isDone(vpTo + 100000 /* Work.MaxParseAhead */))\n            return;\n        let endTime = Date.now() + Math.min(this.chunkBudget, 100 /* Work.Slice */, deadline && !isInputPending ? Math.max(25 /* Work.MinSlice */, deadline.timeRemaining() - 5) : 1e9);\n        let viewportFirst = field.context.treeLen < vpTo && state.doc.length > vpTo + 1000;\n        let done = field.context.work(() => {\n            return isInputPending && isInputPending() || Date.now() > endTime;\n        }, vpTo + (viewportFirst ? 0 : 100000 /* Work.MaxParseAhead */));\n        this.chunkBudget -= Date.now() - now;\n        if (done || this.chunkBudget <= 0) {\n            field.context.takeTree();\n            this.view.dispatch({ effects: Language.setState.of(new LanguageState(field.context)) });\n        }\n        if (this.chunkBudget > 0 && !(done && !viewportFirst))\n            this.scheduleWork();\n        this.checkAsyncSchedule(field.context);\n    }\n    checkAsyncSchedule(cx) {\n        if (cx.scheduleOn) {\n            this.workScheduled++;\n            cx.scheduleOn\n                .then(() => this.scheduleWork())\n                .catch(err => view.logException(this.view.state, err))\n                .then(() => this.workScheduled--);\n            cx.scheduleOn = null;\n        }\n    }\n    destroy() {\n        if (this.working)\n            this.working();\n    }\n    isWorking() {\n        return !!(this.working || this.workScheduled > 0);\n    }\n}, {\n    eventHandlers: { focus() { this.scheduleWork(); } }\n});\n/**\nThe facet used to associate a language with an editor state. Used\nby `Language` object's `extension` property (so you don't need to\nmanually wrap your languages in this). Can be used to access the\ncurrent language on a state.\n*/\nconst language = state.Facet.define({\n    combine(languages) { return languages.length ? languages[0] : null; },\n    enables: language => [\n        Language.state,\n        parseWorker,\n        view.EditorView.contentAttributes.compute([language], state => {\n            let lang = state.facet(language);\n            return lang && lang.name ? { \"data-language\": lang.name } : {};\n        })\n    ]\n});\n/**\nThis class bundles a [language](https://codemirror.net/6/docs/ref/#language.Language) with an\noptional set of supporting extensions. Language packages are\nencouraged to export a function that optionally takes a\nconfiguration object and returns a `LanguageSupport` instance, as\nthe main way for client code to use the package.\n*/\nclass LanguageSupport {\n    /**\n    Create a language support object.\n    */\n    constructor(\n    /**\n    The language object.\n    */\n    language, \n    /**\n    An optional set of supporting extensions. When nesting a\n    language in another language, the outer language is encouraged\n    to include the supporting extensions for its inner languages\n    in its own set of support extensions.\n    */\n    support = []) {\n        this.language = language;\n        this.support = support;\n        this.extension = [language, support];\n    }\n}\n/**\nLanguage descriptions are used to store metadata about languages\nand to dynamically load them. Their main role is finding the\nappropriate language for a filename or dynamically loading nested\nparsers.\n*/\nclass LanguageDescription {\n    constructor(\n    /**\n    The name of this language.\n    */\n    name, \n    /**\n    Alternative names for the mode (lowercased, includes `this.name`).\n    */\n    alias, \n    /**\n    File extensions associated with this language.\n    */\n    extensions, \n    /**\n    Optional filename pattern that should be associated with this\n    language.\n    */\n    filename, loadFunc, \n    /**\n    If the language has been loaded, this will hold its value.\n    */\n    support = undefined) {\n        this.name = name;\n        this.alias = alias;\n        this.extensions = extensions;\n        this.filename = filename;\n        this.loadFunc = loadFunc;\n        this.support = support;\n        this.loading = null;\n    }\n    /**\n    Start loading the the language. Will return a promise that\n    resolves to a [`LanguageSupport`](https://codemirror.net/6/docs/ref/#language.LanguageSupport)\n    object when the language successfully loads.\n    */\n    load() {\n        return this.loading || (this.loading = this.loadFunc().then(support => this.support = support, err => { this.loading = null; throw err; }));\n    }\n    /**\n    Create a language description.\n    */\n    static of(spec) {\n        let { load, support } = spec;\n        if (!load) {\n            if (!support)\n                throw new RangeError(\"Must pass either 'load' or 'support' to LanguageDescription.of\");\n            load = () => Promise.resolve(support);\n        }\n        return new LanguageDescription(spec.name, (spec.alias || []).concat(spec.name).map(s => s.toLowerCase()), spec.extensions || [], spec.filename, load, support);\n    }\n    /**\n    Look for a language in the given array of descriptions that\n    matches the filename. Will first match\n    [`filename`](https://codemirror.net/6/docs/ref/#language.LanguageDescription.filename) patterns,\n    and then [extensions](https://codemirror.net/6/docs/ref/#language.LanguageDescription.extensions),\n    and return the first language that matches.\n    */\n    static matchFilename(descs, filename) {\n        for (let d of descs)\n            if (d.filename && d.filename.test(filename))\n                return d;\n        let ext = /\\.([^.]+)$/.exec(filename);\n        if (ext)\n            for (let d of descs)\n                if (d.extensions.indexOf(ext[1]) > -1)\n                    return d;\n        return null;\n    }\n    /**\n    Look for a language whose name or alias matches the the given\n    name (case-insensitively). If `fuzzy` is true, and no direct\n    matchs is found, this'll also search for a language whose name\n    or alias occurs in the string (for names shorter than three\n    characters, only when surrounded by non-word characters).\n    */\n    static matchLanguageName(descs, name, fuzzy = true) {\n        name = name.toLowerCase();\n        for (let d of descs)\n            if (d.alias.some(a => a == name))\n                return d;\n        if (fuzzy)\n            for (let d of descs)\n                for (let a of d.alias) {\n                    let found = name.indexOf(a);\n                    if (found > -1 && (a.length > 2 || !/\\w/.test(name[found - 1]) && !/\\w/.test(name[found + a.length])))\n                        return d;\n                }\n        return null;\n    }\n}\n\n/**\nFacet that defines a way to provide a function that computes the\nappropriate indentation depth, as a column number (see\n[`indentString`](https://codemirror.net/6/docs/ref/#language.indentString)), at the start of a given\nline. A return value of `null` indicates no indentation can be\ndetermined, and the line should inherit the indentation of the one\nabove it. A return value of `undefined` defers to the next indent\nservice.\n*/\nconst indentService = state.Facet.define();\n/**\nFacet for overriding the unit by which indentation happens. Should\nbe a string consisting either entirely of the same whitespace\ncharacter. When not set, this defaults to 2 spaces.\n*/\nconst indentUnit = state.Facet.define({\n    combine: values => {\n        if (!values.length)\n            return \"  \";\n        let unit = values[0];\n        if (!unit || /\\S/.test(unit) || Array.from(unit).some(e => e != unit[0]))\n            throw new Error(\"Invalid indent unit: \" + JSON.stringify(values[0]));\n        return unit;\n    }\n});\n/**\nReturn the _column width_ of an indent unit in the state.\nDetermined by the [`indentUnit`](https://codemirror.net/6/docs/ref/#language.indentUnit)\nfacet, and [`tabSize`](https://codemirror.net/6/docs/ref/#state.EditorState^tabSize) when that\ncontains tabs.\n*/\nfunction getIndentUnit(state) {\n    let unit = state.facet(indentUnit);\n    return unit.charCodeAt(0) == 9 ? state.tabSize * unit.length : unit.length;\n}\n/**\nCreate an indentation string that covers columns 0 to `cols`.\nWill use tabs for as much of the columns as possible when the\n[`indentUnit`](https://codemirror.net/6/docs/ref/#language.indentUnit) facet contains\ntabs.\n*/\nfunction indentString(state, cols) {\n    let result = \"\", ts = state.tabSize, ch = state.facet(indentUnit)[0];\n    if (ch == \"\\t\") {\n        while (cols >= ts) {\n            result += \"\\t\";\n            cols -= ts;\n        }\n        ch = \" \";\n    }\n    for (let i = 0; i < cols; i++)\n        result += ch;\n    return result;\n}\n/**\nGet the indentation, as a column number, at the given position.\nWill first consult any [indent services](https://codemirror.net/6/docs/ref/#language.indentService)\nthat are registered, and if none of those return an indentation,\nthis will check the syntax tree for the [indent node\nprop](https://codemirror.net/6/docs/ref/#language.indentNodeProp) and use that if found. Returns a\nnumber when an indentation could be determined, and null\notherwise.\n*/\nfunction getIndentation(context, pos) {\n    if (context instanceof state.EditorState)\n        context = new IndentContext(context);\n    for (let service of context.state.facet(indentService)) {\n        let result = service(context, pos);\n        if (result !== undefined)\n            return result;\n    }\n    let tree = syntaxTree(context.state);\n    return tree.length >= pos ? syntaxIndentation(context, tree, pos) : null;\n}\n/**\nCreate a change set that auto-indents all lines touched by the\ngiven document range.\n*/\nfunction indentRange(state, from, to) {\n    let updated = Object.create(null);\n    let context = new IndentContext(state, { overrideIndentation: start => { var _a; return (_a = updated[start]) !== null && _a !== void 0 ? _a : -1; } });\n    let changes = [];\n    for (let pos = from; pos <= to;) {\n        let line = state.doc.lineAt(pos);\n        pos = line.to + 1;\n        let indent = getIndentation(context, line.from);\n        if (indent == null)\n            continue;\n        if (!/\\S/.test(line.text))\n            indent = 0;\n        let cur = /^\\s*/.exec(line.text)[0];\n        let norm = indentString(state, indent);\n        if (cur != norm) {\n            updated[line.from] = indent;\n            changes.push({ from: line.from, to: line.from + cur.length, insert: norm });\n        }\n    }\n    return state.changes(changes);\n}\n/**\nIndentation contexts are used when calling [indentation\nservices](https://codemirror.net/6/docs/ref/#language.indentService). They provide helper utilities\nuseful in indentation logic, and can selectively override the\nindentation reported for some lines.\n*/\nclass IndentContext {\n    /**\n    Create an indent context.\n    */\n    constructor(\n    /**\n    The editor state.\n    */\n    state, \n    /**\n    @internal\n    */\n    options = {}) {\n        this.state = state;\n        this.options = options;\n        this.unit = getIndentUnit(state);\n    }\n    /**\n    Get a description of the line at the given position, taking\n    [simulated line\n    breaks](https://codemirror.net/6/docs/ref/#language.IndentContext.constructor^options.simulateBreak)\n    into account. If there is such a break at `pos`, the `bias`\n    argument determines whether the part of the line line before or\n    after the break is used.\n    */\n    lineAt(pos, bias = 1) {\n        let line = this.state.doc.lineAt(pos);\n        let { simulateBreak, simulateDoubleBreak } = this.options;\n        if (simulateBreak != null && simulateBreak >= line.from && simulateBreak <= line.to) {\n            if (simulateDoubleBreak && simulateBreak == pos)\n                return { text: \"\", from: pos };\n            else if (bias < 0 ? simulateBreak < pos : simulateBreak <= pos)\n                return { text: line.text.slice(simulateBreak - line.from), from: simulateBreak };\n            else\n                return { text: line.text.slice(0, simulateBreak - line.from), from: line.from };\n        }\n        return line;\n    }\n    /**\n    Get the text directly after `pos`, either the entire line\n    or the next 100 characters, whichever is shorter.\n    */\n    textAfterPos(pos, bias = 1) {\n        if (this.options.simulateDoubleBreak && pos == this.options.simulateBreak)\n            return \"\";\n        let { text, from } = this.lineAt(pos, bias);\n        return text.slice(pos - from, Math.min(text.length, pos + 100 - from));\n    }\n    /**\n    Find the column for the given position.\n    */\n    column(pos, bias = 1) {\n        let { text, from } = this.lineAt(pos, bias);\n        let result = this.countColumn(text, pos - from);\n        let override = this.options.overrideIndentation ? this.options.overrideIndentation(from) : -1;\n        if (override > -1)\n            result += override - this.countColumn(text, text.search(/\\S|$/));\n        return result;\n    }\n    /**\n    Find the column position (taking tabs into account) of the given\n    position in the given string.\n    */\n    countColumn(line, pos = line.length) {\n        return state.countColumn(line, this.state.tabSize, pos);\n    }\n    /**\n    Find the indentation column of the line at the given point.\n    */\n    lineIndent(pos, bias = 1) {\n        let { text, from } = this.lineAt(pos, bias);\n        let override = this.options.overrideIndentation;\n        if (override) {\n            let overriden = override(from);\n            if (overriden > -1)\n                return overriden;\n        }\n        return this.countColumn(text, text.search(/\\S|$/));\n    }\n    /**\n    Returns the [simulated line\n    break](https://codemirror.net/6/docs/ref/#language.IndentContext.constructor^options.simulateBreak)\n    for this context, if any.\n    */\n    get simulatedBreak() {\n        return this.options.simulateBreak || null;\n    }\n}\n/**\nA syntax tree node prop used to associate indentation strategies\nwith node types. Such a strategy is a function from an indentation\ncontext to a column number (see also\n[`indentString`](https://codemirror.net/6/docs/ref/#language.indentString)) or null, where null\nindicates that no definitive indentation can be determined.\n*/\nconst indentNodeProp = new common.NodeProp();\n// Compute the indentation for a given position from the syntax tree.\nfunction syntaxIndentation(cx, ast, pos) {\n    let stack = ast.resolveStack(pos);\n    let inner = stack.node.enterUnfinishedNodesBefore(pos);\n    if (inner != stack.node) {\n        let add = [];\n        for (let cur = inner; cur != stack.node; cur = cur.parent)\n            add.push(cur);\n        for (let i = add.length - 1; i >= 0; i--)\n            stack = { node: add[i], next: stack };\n    }\n    return indentFor(stack, cx, pos);\n}\nfunction indentFor(stack, cx, pos) {\n    for (let cur = stack; cur; cur = cur.next) {\n        let strategy = indentStrategy(cur.node);\n        if (strategy)\n            return strategy(TreeIndentContext.create(cx, pos, cur));\n    }\n    return 0;\n}\nfunction ignoreClosed(cx) {\n    return cx.pos == cx.options.simulateBreak && cx.options.simulateDoubleBreak;\n}\nfunction indentStrategy(tree) {\n    let strategy = tree.type.prop(indentNodeProp);\n    if (strategy)\n        return strategy;\n    let first = tree.firstChild, close;\n    if (first && (close = first.type.prop(common.NodeProp.closedBy))) {\n        let last = tree.lastChild, closed = last && close.indexOf(last.name) > -1;\n        return cx => delimitedStrategy(cx, true, 1, undefined, closed && !ignoreClosed(cx) ? last.from : undefined);\n    }\n    return tree.parent == null ? topIndent : null;\n}\nfunction topIndent() { return 0; }\n/**\nObjects of this type provide context information and helper\nmethods to indentation functions registered on syntax nodes.\n*/\nclass TreeIndentContext extends IndentContext {\n    constructor(base, \n    /**\n    The position at which indentation is being computed.\n    */\n    pos, \n    /**\n    @internal\n    */\n    context) {\n        super(base.state, base.options);\n        this.base = base;\n        this.pos = pos;\n        this.context = context;\n    }\n    /**\n    The syntax tree node to which the indentation strategy\n    applies.\n    */\n    get node() { return this.context.node; }\n    /**\n    @internal\n    */\n    static create(base, pos, context) {\n        return new TreeIndentContext(base, pos, context);\n    }\n    /**\n    Get the text directly after `this.pos`, either the entire line\n    or the next 100 characters, whichever is shorter.\n    */\n    get textAfter() {\n        return this.textAfterPos(this.pos);\n    }\n    /**\n    Get the indentation at the reference line for `this.node`, which\n    is the line on which it starts, unless there is a node that is\n    _not_ a parent of this node covering the start of that line. If\n    so, the line at the start of that node is tried, again skipping\n    on if it is covered by another such node.\n    */\n    get baseIndent() {\n        return this.baseIndentFor(this.node);\n    }\n    /**\n    Get the indentation for the reference line of the given node\n    (see [`baseIndent`](https://codemirror.net/6/docs/ref/#language.TreeIndentContext.baseIndent)).\n    */\n    baseIndentFor(node) {\n        let line = this.state.doc.lineAt(node.from);\n        // Skip line starts that are covered by a sibling (or cousin, etc)\n        for (;;) {\n            let atBreak = node.resolve(line.from);\n            while (atBreak.parent && atBreak.parent.from == atBreak.from)\n                atBreak = atBreak.parent;\n            if (isParent(atBreak, node))\n                break;\n            line = this.state.doc.lineAt(atBreak.from);\n        }\n        return this.lineIndent(line.from);\n    }\n    /**\n    Continue looking for indentations in the node's parent nodes,\n    and return the result of that.\n    */\n    continue() {\n        return indentFor(this.context.next, this.base, this.pos);\n    }\n}\nfunction isParent(parent, of) {\n    for (let cur = of; cur; cur = cur.parent)\n        if (parent == cur)\n            return true;\n    return false;\n}\n// Check whether a delimited node is aligned (meaning there are\n// non-skipped nodes on the same line as the opening delimiter). And\n// if so, return the opening token.\nfunction bracketedAligned(context) {\n    let tree = context.node;\n    let openToken = tree.childAfter(tree.from), last = tree.lastChild;\n    if (!openToken)\n        return null;\n    let sim = context.options.simulateBreak;\n    let openLine = context.state.doc.lineAt(openToken.from);\n    let lineEnd = sim == null || sim <= openLine.from ? openLine.to : Math.min(openLine.to, sim);\n    for (let pos = openToken.to;;) {\n        let next = tree.childAfter(pos);\n        if (!next || next == last)\n            return null;\n        if (!next.type.isSkipped) {\n            if (next.from >= lineEnd)\n                return null;\n            let space = /^ */.exec(openLine.text.slice(openToken.to - openLine.from))[0].length;\n            return { from: openToken.from, to: openToken.to + space };\n        }\n        pos = next.to;\n    }\n}\n/**\nAn indentation strategy for delimited (usually bracketed) nodes.\nWill, by default, indent one unit more than the parent's base\nindent unless the line starts with a closing token. When `align`\nis true and there are non-skipped nodes on the node's opening\nline, the content of the node will be aligned with the end of the\nopening node, like this:\n\n    foo(bar,\n        baz)\n*/\nfunction delimitedIndent({ closing, align = true, units = 1 }) {\n    return (context) => delimitedStrategy(context, align, units, closing);\n}\nfunction delimitedStrategy(context, align, units, closing, closedAt) {\n    let after = context.textAfter, space = after.match(/^\\s*/)[0].length;\n    let closed = closing && after.slice(space, space + closing.length) == closing || closedAt == context.pos + space;\n    let aligned = align ? bracketedAligned(context) : null;\n    if (aligned)\n        return closed ? context.column(aligned.from) : context.column(aligned.to);\n    return context.baseIndent + (closed ? 0 : context.unit * units);\n}\n/**\nAn indentation strategy that aligns a node's content to its base\nindentation.\n*/\nconst flatIndent = (context) => context.baseIndent;\n/**\nCreates an indentation strategy that, by default, indents\ncontinued lines one unit more than the node's base indentation.\nYou can provide `except` to prevent indentation of lines that\nmatch a pattern (for example `/^else\\b/` in `if`/`else`\nconstructs), and you can change the amount of units used with the\n`units` option.\n*/\nfunction continuedIndent({ except, units = 1 } = {}) {\n    return (context) => {\n        let matchExcept = except && except.test(context.textAfter);\n        return context.baseIndent + (matchExcept ? 0 : units * context.unit);\n    };\n}\nconst DontIndentBeyond = 200;\n/**\nEnables reindentation on input. When a language defines an\n`indentOnInput` field in its [language\ndata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt), which must hold a regular\nexpression, the line at the cursor will be reindented whenever new\ntext is typed and the input from the start of the line up to the\ncursor matches that regexp.\n\nTo avoid unneccesary reindents, it is recommended to start the\nregexp with `^` (usually followed by `\\s*`), and end it with `$`.\nFor example, `/^\\s*\\}$/` will reindent when a closing brace is\nadded at the start of a line.\n*/\nfunction indentOnInput() {\n    return state.EditorState.transactionFilter.of(tr => {\n        if (!tr.docChanged || !tr.isUserEvent(\"input.type\") && !tr.isUserEvent(\"input.complete\"))\n            return tr;\n        let rules = tr.startState.languageDataAt(\"indentOnInput\", tr.startState.selection.main.head);\n        if (!rules.length)\n            return tr;\n        let doc = tr.newDoc, { head } = tr.newSelection.main, line = doc.lineAt(head);\n        if (head > line.from + DontIndentBeyond)\n            return tr;\n        let lineStart = doc.sliceString(line.from, head);\n        if (!rules.some(r => r.test(lineStart)))\n            return tr;\n        let { state } = tr, last = -1, changes = [];\n        for (let { head } of state.selection.ranges) {\n            let line = state.doc.lineAt(head);\n            if (line.from == last)\n                continue;\n            last = line.from;\n            let indent = getIndentation(state, line.from);\n            if (indent == null)\n                continue;\n            let cur = /^\\s*/.exec(line.text)[0];\n            let norm = indentString(state, indent);\n            if (cur != norm)\n                changes.push({ from: line.from, to: line.from + cur.length, insert: norm });\n        }\n        return changes.length ? [tr, { changes, sequential: true }] : tr;\n    });\n}\n\n/**\nA facet that registers a code folding service. When called with\nthe extent of a line, such a function should return a foldable\nrange that starts on that line (but continues beyond it), if one\ncan be found.\n*/\nconst foldService = state.Facet.define();\n/**\nThis node prop is used to associate folding information with\nsyntax node types. Given a syntax node, it should check whether\nthat tree is foldable and return the range that can be collapsed\nwhen it is.\n*/\nconst foldNodeProp = new common.NodeProp();\n/**\n[Fold](https://codemirror.net/6/docs/ref/#language.foldNodeProp) function that folds everything but\nthe first and the last child of a syntax node. Useful for nodes\nthat start and end with delimiters.\n*/\nfunction foldInside(node) {\n    let first = node.firstChild, last = node.lastChild;\n    return first && first.to < last.from ? { from: first.to, to: last.type.isError ? node.to : last.from } : null;\n}\nfunction syntaxFolding(state, start, end) {\n    let tree = syntaxTree(state);\n    if (tree.length < end)\n        return null;\n    let stack = tree.resolveStack(end, 1);\n    let found = null;\n    for (let iter = stack; iter; iter = iter.next) {\n        let cur = iter.node;\n        if (cur.to <= end || cur.from > end)\n            continue;\n        if (found && cur.from < start)\n            break;\n        let prop = cur.type.prop(foldNodeProp);\n        if (prop && (cur.to < tree.length - 50 || tree.length == state.doc.length || !isUnfinished(cur))) {\n            let value = prop(cur, state);\n            if (value && value.from <= end && value.from >= start && value.to > end)\n                found = value;\n        }\n    }\n    return found;\n}\nfunction isUnfinished(node) {\n    let ch = node.lastChild;\n    return ch && ch.to == node.to && ch.type.isError;\n}\n/**\nCheck whether the given line is foldable. First asks any fold\nservices registered through\n[`foldService`](https://codemirror.net/6/docs/ref/#language.foldService), and if none of them return\na result, tries to query the [fold node\nprop](https://codemirror.net/6/docs/ref/#language.foldNodeProp) of syntax nodes that cover the end\nof the line.\n*/\nfunction foldable(state, lineStart, lineEnd) {\n    for (let service of state.facet(foldService)) {\n        let result = service(state, lineStart, lineEnd);\n        if (result)\n            return result;\n    }\n    return syntaxFolding(state, lineStart, lineEnd);\n}\nfunction mapRange(range, mapping) {\n    let from = mapping.mapPos(range.from, 1), to = mapping.mapPos(range.to, -1);\n    return from >= to ? undefined : { from, to };\n}\n/**\nState effect that can be attached to a transaction to fold the\ngiven range. (You probably only need this in exceptional\ncircumstances—usually you'll just want to let\n[`foldCode`](https://codemirror.net/6/docs/ref/#language.foldCode) and the [fold\ngutter](https://codemirror.net/6/docs/ref/#language.foldGutter) create the transactions.)\n*/\nconst foldEffect = state.StateEffect.define({ map: mapRange });\n/**\nState effect that unfolds the given range (if it was folded).\n*/\nconst unfoldEffect = state.StateEffect.define({ map: mapRange });\nfunction selectedLines(view) {\n    let lines = [];\n    for (let { head } of view.state.selection.ranges) {\n        if (lines.some(l => l.from <= head && l.to >= head))\n            continue;\n        lines.push(view.lineBlockAt(head));\n    }\n    return lines;\n}\n/**\nThe state field that stores the folded ranges (as a [decoration\nset](https://codemirror.net/6/docs/ref/#view.DecorationSet)). Can be passed to\n[`EditorState.toJSON`](https://codemirror.net/6/docs/ref/#state.EditorState.toJSON) and\n[`fromJSON`](https://codemirror.net/6/docs/ref/#state.EditorState^fromJSON) to serialize the fold\nstate.\n*/\nconst foldState = state.StateField.define({\n    create() {\n        return view.Decoration.none;\n    },\n    update(folded, tr) {\n        folded = folded.map(tr.changes);\n        for (let e of tr.effects) {\n            if (e.is(foldEffect) && !foldExists(folded, e.value.from, e.value.to)) {\n                let { preparePlaceholder } = tr.state.facet(foldConfig);\n                let widget = !preparePlaceholder ? foldWidget :\n                    view.Decoration.replace({ widget: new PreparedFoldWidget(preparePlaceholder(tr.state, e.value)) });\n                folded = folded.update({ add: [widget.range(e.value.from, e.value.to)] });\n            }\n            else if (e.is(unfoldEffect)) {\n                folded = folded.update({ filter: (from, to) => e.value.from != from || e.value.to != to,\n                    filterFrom: e.value.from, filterTo: e.value.to });\n            }\n        }\n        // Clear folded ranges that cover the selection head\n        if (tr.selection) {\n            let onSelection = false, { head } = tr.selection.main;\n            folded.between(head, head, (a, b) => { if (a < head && b > head)\n                onSelection = true; });\n            if (onSelection)\n                folded = folded.update({\n                    filterFrom: head,\n                    filterTo: head,\n                    filter: (a, b) => b <= head || a >= head\n                });\n        }\n        return folded;\n    },\n    provide: f => view.EditorView.decorations.from(f),\n    toJSON(folded, state) {\n        let ranges = [];\n        folded.between(0, state.doc.length, (from, to) => { ranges.push(from, to); });\n        return ranges;\n    },\n    fromJSON(value) {\n        if (!Array.isArray(value) || value.length % 2)\n            throw new RangeError(\"Invalid JSON for fold state\");\n        let ranges = [];\n        for (let i = 0; i < value.length;) {\n            let from = value[i++], to = value[i++];\n            if (typeof from != \"number\" || typeof to != \"number\")\n                throw new RangeError(\"Invalid JSON for fold state\");\n            ranges.push(foldWidget.range(from, to));\n        }\n        return view.Decoration.set(ranges, true);\n    }\n});\n/**\nGet a [range set](https://codemirror.net/6/docs/ref/#state.RangeSet) containing the folded ranges\nin the given state.\n*/\nfunction foldedRanges(state$1) {\n    return state$1.field(foldState, false) || state.RangeSet.empty;\n}\nfunction findFold(state, from, to) {\n    var _a;\n    let found = null;\n    (_a = state.field(foldState, false)) === null || _a === void 0 ? void 0 : _a.between(from, to, (from, to) => {\n        if (!found || found.from > from)\n            found = { from, to };\n    });\n    return found;\n}\nfunction foldExists(folded, from, to) {\n    let found = false;\n    folded.between(from, from, (a, b) => { if (a == from && b == to)\n        found = true; });\n    return found;\n}\nfunction maybeEnable(state$1, other) {\n    return state$1.field(foldState, false) ? other : other.concat(state.StateEffect.appendConfig.of(codeFolding()));\n}\n/**\nFold the lines that are selected, if possible.\n*/\nconst foldCode = view => {\n    for (let line of selectedLines(view)) {\n        let range = foldable(view.state, line.from, line.to);\n        if (range) {\n            view.dispatch({ effects: maybeEnable(view.state, [foldEffect.of(range), announceFold(view, range)]) });\n            return true;\n        }\n    }\n    return false;\n};\n/**\nUnfold folded ranges on selected lines.\n*/\nconst unfoldCode = view => {\n    if (!view.state.field(foldState, false))\n        return false;\n    let effects = [];\n    for (let line of selectedLines(view)) {\n        let folded = findFold(view.state, line.from, line.to);\n        if (folded)\n            effects.push(unfoldEffect.of(folded), announceFold(view, folded, false));\n    }\n    if (effects.length)\n        view.dispatch({ effects });\n    return effects.length > 0;\n};\nfunction announceFold(view$1, range, fold = true) {\n    let lineFrom = view$1.state.doc.lineAt(range.from).number, lineTo = view$1.state.doc.lineAt(range.to).number;\n    return view.EditorView.announce.of(`${view$1.state.phrase(fold ? \"Folded lines\" : \"Unfolded lines\")} ${lineFrom} ${view$1.state.phrase(\"to\")} ${lineTo}.`);\n}\n/**\nFold all top-level foldable ranges. Note that, in most cases,\nfolding information will depend on the [syntax\ntree](https://codemirror.net/6/docs/ref/#language.syntaxTree), and folding everything may not work\nreliably when the document hasn't been fully parsed (either\nbecause the editor state was only just initialized, or because the\ndocument is so big that the parser decided not to parse it\nentirely).\n*/\nconst foldAll = view => {\n    let { state } = view, effects = [];\n    for (let pos = 0; pos < state.doc.length;) {\n        let line = view.lineBlockAt(pos), range = foldable(state, line.from, line.to);\n        if (range)\n            effects.push(foldEffect.of(range));\n        pos = (range ? view.lineBlockAt(range.to) : line).to + 1;\n    }\n    if (effects.length)\n        view.dispatch({ effects: maybeEnable(view.state, effects) });\n    return !!effects.length;\n};\n/**\nUnfold all folded code.\n*/\nconst unfoldAll = view => {\n    let field = view.state.field(foldState, false);\n    if (!field || !field.size)\n        return false;\n    let effects = [];\n    field.between(0, view.state.doc.length, (from, to) => { effects.push(unfoldEffect.of({ from, to })); });\n    view.dispatch({ effects });\n    return true;\n};\n// Find the foldable region containing the given line, if one exists\nfunction foldableContainer(view, lineBlock) {\n    // Look backwards through line blocks until we find a foldable region that\n    // intersects with the line\n    for (let line = lineBlock;;) {\n        let foldableRegion = foldable(view.state, line.from, line.to);\n        if (foldableRegion && foldableRegion.to > lineBlock.from)\n            return foldableRegion;\n        if (!line.from)\n            return null;\n        line = view.lineBlockAt(line.from - 1);\n    }\n}\n/**\nToggle folding at cursors. Unfolds if there is an existing fold\nstarting in that line, tries to find a foldable range around it\notherwise.\n*/\nconst toggleFold = (view) => {\n    let effects = [];\n    for (let line of selectedLines(view)) {\n        let folded = findFold(view.state, line.from, line.to);\n        if (folded) {\n            effects.push(unfoldEffect.of(folded), announceFold(view, folded, false));\n        }\n        else {\n            let foldRange = foldableContainer(view, line);\n            if (foldRange)\n                effects.push(foldEffect.of(foldRange), announceFold(view, foldRange));\n        }\n    }\n    if (effects.length > 0)\n        view.dispatch({ effects: maybeEnable(view.state, effects) });\n    return !!effects.length;\n};\n/**\nDefault fold-related key bindings.\n\n - Ctrl-Shift-[ (Cmd-Alt-[ on macOS): [`foldCode`](https://codemirror.net/6/docs/ref/#language.foldCode).\n - Ctrl-Shift-] (Cmd-Alt-] on macOS): [`unfoldCode`](https://codemirror.net/6/docs/ref/#language.unfoldCode).\n - Ctrl-Alt-[: [`foldAll`](https://codemirror.net/6/docs/ref/#language.foldAll).\n - Ctrl-Alt-]: [`unfoldAll`](https://codemirror.net/6/docs/ref/#language.unfoldAll).\n*/\nconst foldKeymap = [\n    { key: \"Ctrl-Shift-[\", mac: \"Cmd-Alt-[\", run: foldCode },\n    { key: \"Ctrl-Shift-]\", mac: \"Cmd-Alt-]\", run: unfoldCode },\n    { key: \"Ctrl-Alt-[\", run: foldAll },\n    { key: \"Ctrl-Alt-]\", run: unfoldAll }\n];\nconst defaultConfig = {\n    placeholderDOM: null,\n    preparePlaceholder: null,\n    placeholderText: \"…\"\n};\nconst foldConfig = state.Facet.define({\n    combine(values) { return state.combineConfig(values, defaultConfig); }\n});\n/**\nCreate an extension that configures code folding.\n*/\nfunction codeFolding(config) {\n    let result = [foldState, baseTheme$1];\n    if (config)\n        result.push(foldConfig.of(config));\n    return result;\n}\nfunction widgetToDOM(view, prepared) {\n    let { state } = view, conf = state.facet(foldConfig);\n    let onclick = (event) => {\n        let line = view.lineBlockAt(view.posAtDOM(event.target));\n        let folded = findFold(view.state, line.from, line.to);\n        if (folded)\n            view.dispatch({ effects: unfoldEffect.of(folded) });\n        event.preventDefault();\n    };\n    if (conf.placeholderDOM)\n        return conf.placeholderDOM(view, onclick, prepared);\n    let element = document.createElement(\"span\");\n    element.textContent = conf.placeholderText;\n    element.setAttribute(\"aria-label\", state.phrase(\"folded code\"));\n    element.title = state.phrase(\"unfold\");\n    element.className = \"cm-foldPlaceholder\";\n    element.onclick = onclick;\n    return element;\n}\nconst foldWidget = view.Decoration.replace({ widget: new class extends view.WidgetType {\n        toDOM(view) { return widgetToDOM(view, null); }\n    } });\nclass PreparedFoldWidget extends view.WidgetType {\n    constructor(value) {\n        super();\n        this.value = value;\n    }\n    eq(other) { return this.value == other.value; }\n    toDOM(view) { return widgetToDOM(view, this.value); }\n}\nconst foldGutterDefaults = {\n    openText: \"⌄\",\n    closedText: \"›\",\n    markerDOM: null,\n    domEventHandlers: {},\n    foldingChanged: () => false\n};\nclass FoldMarker extends view.GutterMarker {\n    constructor(config, open) {\n        super();\n        this.config = config;\n        this.open = open;\n    }\n    eq(other) { return this.config == other.config && this.open == other.open; }\n    toDOM(view) {\n        if (this.config.markerDOM)\n            return this.config.markerDOM(this.open);\n        let span = document.createElement(\"span\");\n        span.textContent = this.open ? this.config.openText : this.config.closedText;\n        span.title = view.state.phrase(this.open ? \"Fold line\" : \"Unfold line\");\n        return span;\n    }\n}\n/**\nCreate an extension that registers a fold gutter, which shows a\nfold status indicator before foldable lines (which can be clicked\nto fold or unfold the line).\n*/\nfunction foldGutter(config = {}) {\n    let fullConfig = Object.assign(Object.assign({}, foldGutterDefaults), config);\n    let canFold = new FoldMarker(fullConfig, true), canUnfold = new FoldMarker(fullConfig, false);\n    let markers = view.ViewPlugin.fromClass(class {\n        constructor(view) {\n            this.from = view.viewport.from;\n            this.markers = this.buildMarkers(view);\n        }\n        update(update) {\n            if (update.docChanged || update.viewportChanged ||\n                update.startState.facet(language) != update.state.facet(language) ||\n                update.startState.field(foldState, false) != update.state.field(foldState, false) ||\n                syntaxTree(update.startState) != syntaxTree(update.state) ||\n                fullConfig.foldingChanged(update))\n                this.markers = this.buildMarkers(update.view);\n        }\n        buildMarkers(view) {\n            let builder = new state.RangeSetBuilder();\n            for (let line of view.viewportLineBlocks) {\n                let mark = findFold(view.state, line.from, line.to) ? canUnfold\n                    : foldable(view.state, line.from, line.to) ? canFold : null;\n                if (mark)\n                    builder.add(line.from, line.from, mark);\n            }\n            return builder.finish();\n        }\n    });\n    let { domEventHandlers } = fullConfig;\n    return [\n        markers,\n        view.gutter({\n            class: \"cm-foldGutter\",\n            markers(view) { var _a; return ((_a = view.plugin(markers)) === null || _a === void 0 ? void 0 : _a.markers) || state.RangeSet.empty; },\n            initialSpacer() {\n                return new FoldMarker(fullConfig, false);\n            },\n            domEventHandlers: Object.assign(Object.assign({}, domEventHandlers), { click: (view, line, event) => {\n                    if (domEventHandlers.click && domEventHandlers.click(view, line, event))\n                        return true;\n                    let folded = findFold(view.state, line.from, line.to);\n                    if (folded) {\n                        view.dispatch({ effects: unfoldEffect.of(folded) });\n                        return true;\n                    }\n                    let range = foldable(view.state, line.from, line.to);\n                    if (range) {\n                        view.dispatch({ effects: foldEffect.of(range) });\n                        return true;\n                    }\n                    return false;\n                } })\n        }),\n        codeFolding()\n    ];\n}\nconst baseTheme$1 = view.EditorView.baseTheme({\n    \".cm-foldPlaceholder\": {\n        backgroundColor: \"#eee\",\n        border: \"1px solid #ddd\",\n        color: \"#888\",\n        borderRadius: \".2em\",\n        margin: \"0 1px\",\n        padding: \"0 1px\",\n        cursor: \"pointer\"\n    },\n    \".cm-foldGutter span\": {\n        padding: \"0 1px\",\n        cursor: \"pointer\"\n    }\n});\n\n/**\nA highlight style associates CSS styles with higlighting\n[tags](https://lezer.codemirror.net/docs/ref#highlight.Tag).\n*/\nclass HighlightStyle {\n    constructor(\n    /**\n    The tag styles used to create this highlight style.\n    */\n    specs, options) {\n        this.specs = specs;\n        let modSpec;\n        function def(spec) {\n            let cls = styleMod.StyleModule.newName();\n            (modSpec || (modSpec = Object.create(null)))[\".\" + cls] = spec;\n            return cls;\n        }\n        const all = typeof options.all == \"string\" ? options.all : options.all ? def(options.all) : undefined;\n        const scopeOpt = options.scope;\n        this.scope = scopeOpt instanceof Language ? (type) => type.prop(languageDataProp) == scopeOpt.data\n            : scopeOpt ? (type) => type == scopeOpt : undefined;\n        this.style = highlight.tagHighlighter(specs.map(style => ({\n            tag: style.tag,\n            class: style.class || def(Object.assign({}, style, { tag: null }))\n        })), {\n            all,\n        }).style;\n        this.module = modSpec ? new styleMod.StyleModule(modSpec) : null;\n        this.themeType = options.themeType;\n    }\n    /**\n    Create a highlighter style that associates the given styles to\n    the given tags. The specs must be objects that hold a style tag\n    or array of tags in their `tag` property, and either a single\n    `class` property providing a static CSS class (for highlighter\n    that rely on external styling), or a\n    [`style-mod`](https://github.com/marijnh/style-mod#documentation)-style\n    set of CSS properties (which define the styling for those tags).\n    \n    The CSS rules created for a highlighter will be emitted in the\n    order of the spec's properties. That means that for elements that\n    have multiple tags associated with them, styles defined further\n    down in the list will have a higher CSS precedence than styles\n    defined earlier.\n    */\n    static define(specs, options) {\n        return new HighlightStyle(specs, options || {});\n    }\n}\nconst highlighterFacet = state.Facet.define();\nconst fallbackHighlighter = state.Facet.define({\n    combine(values) { return values.length ? [values[0]] : null; }\n});\nfunction getHighlighters(state) {\n    let main = state.facet(highlighterFacet);\n    return main.length ? main : state.facet(fallbackHighlighter);\n}\n/**\nWrap a highlighter in an editor extension that uses it to apply\nsyntax highlighting to the editor content.\n\nWhen multiple (non-fallback) styles are provided, the styling\napplied is the union of the classes they emit.\n*/\nfunction syntaxHighlighting(highlighter, options) {\n    let ext = [treeHighlighter], themeType;\n    if (highlighter instanceof HighlightStyle) {\n        if (highlighter.module)\n            ext.push(view.EditorView.styleModule.of(highlighter.module));\n        themeType = highlighter.themeType;\n    }\n    if (options === null || options === void 0 ? void 0 : options.fallback)\n        ext.push(fallbackHighlighter.of(highlighter));\n    else if (themeType)\n        ext.push(highlighterFacet.computeN([view.EditorView.darkTheme], state => {\n            return state.facet(view.EditorView.darkTheme) == (themeType == \"dark\") ? [highlighter] : [];\n        }));\n    else\n        ext.push(highlighterFacet.of(highlighter));\n    return ext;\n}\n/**\nReturns the CSS classes (if any) that the highlighters active in\nthe state would assign to the given style\n[tags](https://lezer.codemirror.net/docs/ref#highlight.Tag) and\n(optional) language\n[scope](https://codemirror.net/6/docs/ref/#language.HighlightStyle^define^options.scope).\n*/\nfunction highlightingFor(state, tags, scope) {\n    let highlighters = getHighlighters(state);\n    let result = null;\n    if (highlighters)\n        for (let highlighter of highlighters) {\n            if (!highlighter.scope || scope && highlighter.scope(scope)) {\n                let cls = highlighter.style(tags);\n                if (cls)\n                    result = result ? result + \" \" + cls : cls;\n            }\n        }\n    return result;\n}\nclass TreeHighlighter {\n    constructor(view) {\n        this.markCache = Object.create(null);\n        this.tree = syntaxTree(view.state);\n        this.decorations = this.buildDeco(view, getHighlighters(view.state));\n        this.decoratedTo = view.viewport.to;\n    }\n    update(update) {\n        let tree = syntaxTree(update.state), highlighters = getHighlighters(update.state);\n        let styleChange = highlighters != getHighlighters(update.startState);\n        let { viewport } = update.view, decoratedToMapped = update.changes.mapPos(this.decoratedTo, 1);\n        if (tree.length < viewport.to && !styleChange && tree.type == this.tree.type && decoratedToMapped >= viewport.to) {\n            this.decorations = this.decorations.map(update.changes);\n            this.decoratedTo = decoratedToMapped;\n        }\n        else if (tree != this.tree || update.viewportChanged || styleChange) {\n            this.tree = tree;\n            this.decorations = this.buildDeco(update.view, highlighters);\n            this.decoratedTo = viewport.to;\n        }\n    }\n    buildDeco(view$1, highlighters) {\n        if (!highlighters || !this.tree.length)\n            return view.Decoration.none;\n        let builder = new state.RangeSetBuilder();\n        for (let { from, to } of view$1.visibleRanges) {\n            highlight.highlightTree(this.tree, highlighters, (from, to, style) => {\n                builder.add(from, to, this.markCache[style] || (this.markCache[style] = view.Decoration.mark({ class: style })));\n            }, from, to);\n        }\n        return builder.finish();\n    }\n}\nconst treeHighlighter = state.Prec.high(view.ViewPlugin.fromClass(TreeHighlighter, {\n    decorations: v => v.decorations\n}));\n/**\nA default highlight style (works well with light themes).\n*/\nconst defaultHighlightStyle = HighlightStyle.define([\n    { tag: highlight.tags.meta,\n        color: \"#404740\" },\n    { tag: highlight.tags.link,\n        textDecoration: \"underline\" },\n    { tag: highlight.tags.heading,\n        textDecoration: \"underline\",\n        fontWeight: \"bold\" },\n    { tag: highlight.tags.emphasis,\n        fontStyle: \"italic\" },\n    { tag: highlight.tags.strong,\n        fontWeight: \"bold\" },\n    { tag: highlight.tags.strikethrough,\n        textDecoration: \"line-through\" },\n    { tag: highlight.tags.keyword,\n        color: \"#708\" },\n    { tag: [highlight.tags.atom, highlight.tags.bool, highlight.tags.url, highlight.tags.contentSeparator, highlight.tags.labelName],\n        color: \"#219\" },\n    { tag: [highlight.tags.literal, highlight.tags.inserted],\n        color: \"#164\" },\n    { tag: [highlight.tags.string, highlight.tags.deleted],\n        color: \"#a11\" },\n    { tag: [highlight.tags.regexp, highlight.tags.escape, highlight.tags.special(highlight.tags.string)],\n        color: \"#e40\" },\n    { tag: highlight.tags.definition(highlight.tags.variableName),\n        color: \"#00f\" },\n    { tag: highlight.tags.local(highlight.tags.variableName),\n        color: \"#30a\" },\n    { tag: [highlight.tags.typeName, highlight.tags.namespace],\n        color: \"#085\" },\n    { tag: highlight.tags.className,\n        color: \"#167\" },\n    { tag: [highlight.tags.special(highlight.tags.variableName), highlight.tags.macroName],\n        color: \"#256\" },\n    { tag: highlight.tags.definition(highlight.tags.propertyName),\n        color: \"#00c\" },\n    { tag: highlight.tags.comment,\n        color: \"#940\" },\n    { tag: highlight.tags.invalid,\n        color: \"#f00\" }\n]);\n\nconst baseTheme = view.EditorView.baseTheme({\n    \"&.cm-focused .cm-matchingBracket\": { backgroundColor: \"#328c8252\" },\n    \"&.cm-focused .cm-nonmatchingBracket\": { backgroundColor: \"#bb555544\" }\n});\nconst DefaultScanDist = 10000, DefaultBrackets = \"()[]{}\";\nconst bracketMatchingConfig = state.Facet.define({\n    combine(configs) {\n        return state.combineConfig(configs, {\n            afterCursor: true,\n            brackets: DefaultBrackets,\n            maxScanDistance: DefaultScanDist,\n            renderMatch: defaultRenderMatch\n        });\n    }\n});\nconst matchingMark = view.Decoration.mark({ class: \"cm-matchingBracket\" }), nonmatchingMark = view.Decoration.mark({ class: \"cm-nonmatchingBracket\" });\nfunction defaultRenderMatch(match) {\n    let decorations = [];\n    let mark = match.matched ? matchingMark : nonmatchingMark;\n    decorations.push(mark.range(match.start.from, match.start.to));\n    if (match.end)\n        decorations.push(mark.range(match.end.from, match.end.to));\n    return decorations;\n}\nconst bracketMatchingState = state.StateField.define({\n    create() { return view.Decoration.none; },\n    update(deco, tr) {\n        if (!tr.docChanged && !tr.selection)\n            return deco;\n        let decorations = [];\n        let config = tr.state.facet(bracketMatchingConfig);\n        for (let range of tr.state.selection.ranges) {\n            if (!range.empty)\n                continue;\n            let match = matchBrackets(tr.state, range.head, -1, config)\n                || (range.head > 0 && matchBrackets(tr.state, range.head - 1, 1, config))\n                || (config.afterCursor &&\n                    (matchBrackets(tr.state, range.head, 1, config) ||\n                        (range.head < tr.state.doc.length && matchBrackets(tr.state, range.head + 1, -1, config))));\n            if (match)\n                decorations = decorations.concat(config.renderMatch(match, tr.state));\n        }\n        return view.Decoration.set(decorations, true);\n    },\n    provide: f => view.EditorView.decorations.from(f)\n});\nconst bracketMatchingUnique = [\n    bracketMatchingState,\n    baseTheme\n];\n/**\nCreate an extension that enables bracket matching. Whenever the\ncursor is next to a bracket, that bracket and the one it matches\nare highlighted. Or, when no matching bracket is found, another\nhighlighting style is used to indicate this.\n*/\nfunction bracketMatching(config = {}) {\n    return [bracketMatchingConfig.of(config), bracketMatchingUnique];\n}\n/**\nWhen larger syntax nodes, such as HTML tags, are marked as\nopening/closing, it can be a bit messy to treat the whole node as\na matchable bracket. This node prop allows you to define, for such\na node, a ‘handle’—the part of the node that is highlighted, and\nthat the cursor must be on to activate highlighting in the first\nplace.\n*/\nconst bracketMatchingHandle = new common.NodeProp();\nfunction matchingNodes(node, dir, brackets) {\n    let byProp = node.prop(dir < 0 ? common.NodeProp.openedBy : common.NodeProp.closedBy);\n    if (byProp)\n        return byProp;\n    if (node.name.length == 1) {\n        let index = brackets.indexOf(node.name);\n        if (index > -1 && index % 2 == (dir < 0 ? 1 : 0))\n            return [brackets[index + dir]];\n    }\n    return null;\n}\nfunction findHandle(node) {\n    let hasHandle = node.type.prop(bracketMatchingHandle);\n    return hasHandle ? hasHandle(node.node) : node;\n}\n/**\nFind the matching bracket for the token at `pos`, scanning\ndirection `dir`. Only the `brackets` and `maxScanDistance`\nproperties are used from `config`, if given. Returns null if no\nbracket was found at `pos`, or a match result otherwise.\n*/\nfunction matchBrackets(state, pos, dir, config = {}) {\n    let maxScanDistance = config.maxScanDistance || DefaultScanDist, brackets = config.brackets || DefaultBrackets;\n    let tree = syntaxTree(state), node = tree.resolveInner(pos, dir);\n    for (let cur = node; cur; cur = cur.parent) {\n        let matches = matchingNodes(cur.type, dir, brackets);\n        if (matches && cur.from < cur.to) {\n            let handle = findHandle(cur);\n            if (handle && (dir > 0 ? pos >= handle.from && pos < handle.to : pos > handle.from && pos <= handle.to))\n                return matchMarkedBrackets(state, pos, dir, cur, handle, matches, brackets);\n        }\n    }\n    return matchPlainBrackets(state, pos, dir, tree, node.type, maxScanDistance, brackets);\n}\nfunction matchMarkedBrackets(_state, _pos, dir, token, handle, matching, brackets) {\n    let parent = token.parent, firstToken = { from: handle.from, to: handle.to };\n    let depth = 0, cursor = parent === null || parent === void 0 ? void 0 : parent.cursor();\n    if (cursor && (dir < 0 ? cursor.childBefore(token.from) : cursor.childAfter(token.to)))\n        do {\n            if (dir < 0 ? cursor.to <= token.from : cursor.from >= token.to) {\n                if (depth == 0 && matching.indexOf(cursor.type.name) > -1 && cursor.from < cursor.to) {\n                    let endHandle = findHandle(cursor);\n                    return { start: firstToken, end: endHandle ? { from: endHandle.from, to: endHandle.to } : undefined, matched: true };\n                }\n                else if (matchingNodes(cursor.type, dir, brackets)) {\n                    depth++;\n                }\n                else if (matchingNodes(cursor.type, -dir, brackets)) {\n                    if (depth == 0) {\n                        let endHandle = findHandle(cursor);\n                        return {\n                            start: firstToken,\n                            end: endHandle && endHandle.from < endHandle.to ? { from: endHandle.from, to: endHandle.to } : undefined,\n                            matched: false\n                        };\n                    }\n                    depth--;\n                }\n            }\n        } while (dir < 0 ? cursor.prevSibling() : cursor.nextSibling());\n    return { start: firstToken, matched: false };\n}\nfunction matchPlainBrackets(state, pos, dir, tree, tokenType, maxScanDistance, brackets) {\n    let startCh = dir < 0 ? state.sliceDoc(pos - 1, pos) : state.sliceDoc(pos, pos + 1);\n    let bracket = brackets.indexOf(startCh);\n    if (bracket < 0 || (bracket % 2 == 0) != (dir > 0))\n        return null;\n    let startToken = { from: dir < 0 ? pos - 1 : pos, to: dir > 0 ? pos + 1 : pos };\n    let iter = state.doc.iterRange(pos, dir > 0 ? state.doc.length : 0), depth = 0;\n    for (let distance = 0; !(iter.next()).done && distance <= maxScanDistance;) {\n        let text = iter.value;\n        if (dir < 0)\n            distance += text.length;\n        let basePos = pos + distance * dir;\n        for (let pos = dir > 0 ? 0 : text.length - 1, end = dir > 0 ? text.length : -1; pos != end; pos += dir) {\n            let found = brackets.indexOf(text[pos]);\n            if (found < 0 || tree.resolveInner(basePos + pos, 1).type != tokenType)\n                continue;\n            if ((found % 2 == 0) == (dir > 0)) {\n                depth++;\n            }\n            else if (depth == 1) { // Closing\n                return { start: startToken, end: { from: basePos + pos, to: basePos + pos + 1 }, matched: (found >> 1) == (bracket >> 1) };\n            }\n            else {\n                depth--;\n            }\n        }\n        if (dir > 0)\n            distance += text.length;\n    }\n    return iter.done ? { start: startToken, matched: false } : null;\n}\n\n// Counts the column offset in a string, taking tabs into account.\n// Used mostly to find indentation.\nfunction countCol(string, end, tabSize, startIndex = 0, startValue = 0) {\n    if (end == null) {\n        end = string.search(/[^\\s\\u00a0]/);\n        if (end == -1)\n            end = string.length;\n    }\n    let n = startValue;\n    for (let i = startIndex; i < end; i++) {\n        if (string.charCodeAt(i) == 9)\n            n += tabSize - (n % tabSize);\n        else\n            n++;\n    }\n    return n;\n}\n/**\nEncapsulates a single line of input. Given to stream syntax code,\nwhich uses it to tokenize the content.\n*/\nclass StringStream {\n    /**\n    Create a stream.\n    */\n    constructor(\n    /**\n    The line.\n    */\n    string, tabSize, \n    /**\n    The current indent unit size.\n    */\n    indentUnit, overrideIndent) {\n        this.string = string;\n        this.tabSize = tabSize;\n        this.indentUnit = indentUnit;\n        this.overrideIndent = overrideIndent;\n        /**\n        The current position on the line.\n        */\n        this.pos = 0;\n        /**\n        The start position of the current token.\n        */\n        this.start = 0;\n        this.lastColumnPos = 0;\n        this.lastColumnValue = 0;\n    }\n    /**\n    True if we are at the end of the line.\n    */\n    eol() { return this.pos >= this.string.length; }\n    /**\n    True if we are at the start of the line.\n    */\n    sol() { return this.pos == 0; }\n    /**\n    Get the next code unit after the current position, or undefined\n    if we're at the end of the line.\n    */\n    peek() { return this.string.charAt(this.pos) || undefined; }\n    /**\n    Read the next code unit and advance `this.pos`.\n    */\n    next() {\n        if (this.pos < this.string.length)\n            return this.string.charAt(this.pos++);\n    }\n    /**\n    Match the next character against the given string, regular\n    expression, or predicate. Consume and return it if it matches.\n    */\n    eat(match) {\n        let ch = this.string.charAt(this.pos);\n        let ok;\n        if (typeof match == \"string\")\n            ok = ch == match;\n        else\n            ok = ch && (match instanceof RegExp ? match.test(ch) : match(ch));\n        if (ok) {\n            ++this.pos;\n            return ch;\n        }\n    }\n    /**\n    Continue matching characters that match the given string,\n    regular expression, or predicate function. Return true if any\n    characters were consumed.\n    */\n    eatWhile(match) {\n        let start = this.pos;\n        while (this.eat(match)) { }\n        return this.pos > start;\n    }\n    /**\n    Consume whitespace ahead of `this.pos`. Return true if any was\n    found.\n    */\n    eatSpace() {\n        let start = this.pos;\n        while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos)))\n            ++this.pos;\n        return this.pos > start;\n    }\n    /**\n    Move to the end of the line.\n    */\n    skipToEnd() { this.pos = this.string.length; }\n    /**\n    Move to directly before the given character, if found on the\n    current line.\n    */\n    skipTo(ch) {\n        let found = this.string.indexOf(ch, this.pos);\n        if (found > -1) {\n            this.pos = found;\n            return true;\n        }\n    }\n    /**\n    Move back `n` characters.\n    */\n    backUp(n) { this.pos -= n; }\n    /**\n    Get the column position at `this.pos`.\n    */\n    column() {\n        if (this.lastColumnPos < this.start) {\n            this.lastColumnValue = countCol(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n            this.lastColumnPos = this.start;\n        }\n        return this.lastColumnValue;\n    }\n    /**\n    Get the indentation column of the current line.\n    */\n    indentation() {\n        var _a;\n        return (_a = this.overrideIndent) !== null && _a !== void 0 ? _a : countCol(this.string, null, this.tabSize);\n    }\n    /**\n    Match the input against the given string or regular expression\n    (which should start with a `^`). Return true or the regexp match\n    if it matches.\n    \n    Unless `consume` is set to `false`, this will move `this.pos`\n    past the matched text.\n    \n    When matching a string `caseInsensitive` can be set to true to\n    make the match case-insensitive.\n    */\n    match(pattern, consume, caseInsensitive) {\n        if (typeof pattern == \"string\") {\n            let cased = (str) => caseInsensitive ? str.toLowerCase() : str;\n            let substr = this.string.substr(this.pos, pattern.length);\n            if (cased(substr) == cased(pattern)) {\n                if (consume !== false)\n                    this.pos += pattern.length;\n                return true;\n            }\n            else\n                return null;\n        }\n        else {\n            let match = this.string.slice(this.pos).match(pattern);\n            if (match && match.index > 0)\n                return null;\n            if (match && consume !== false)\n                this.pos += match[0].length;\n            return match;\n        }\n    }\n    /**\n    Get the current token.\n    */\n    current() { return this.string.slice(this.start, this.pos); }\n}\n\nfunction fullParser(spec) {\n    return {\n        name: spec.name || \"\",\n        token: spec.token,\n        blankLine: spec.blankLine || (() => { }),\n        startState: spec.startState || (() => true),\n        copyState: spec.copyState || defaultCopyState,\n        indent: spec.indent || (() => null),\n        languageData: spec.languageData || {},\n        tokenTable: spec.tokenTable || noTokens\n    };\n}\nfunction defaultCopyState(state) {\n    if (typeof state != \"object\")\n        return state;\n    let newState = {};\n    for (let prop in state) {\n        let val = state[prop];\n        newState[prop] = (val instanceof Array ? val.slice() : val);\n    }\n    return newState;\n}\nconst IndentedFrom = new WeakMap();\n/**\nA [language](https://codemirror.net/6/docs/ref/#language.Language) class based on a CodeMirror\n5-style [streaming parser](https://codemirror.net/6/docs/ref/#language.StreamParser).\n*/\nclass StreamLanguage extends Language {\n    constructor(parser) {\n        let data = defineLanguageFacet(parser.languageData);\n        let p = fullParser(parser), self;\n        let impl = new class extends common.Parser {\n            createParse(input, fragments, ranges) {\n                return new Parse(self, input, fragments, ranges);\n            }\n        };\n        super(data, impl, [], parser.name);\n        this.topNode = docID(data, this);\n        self = this;\n        this.streamParser = p;\n        this.stateAfter = new common.NodeProp({ perNode: true });\n        this.tokenTable = parser.tokenTable ? new TokenTable(p.tokenTable) : defaultTokenTable;\n    }\n    /**\n    Define a stream language.\n    */\n    static define(spec) { return new StreamLanguage(spec); }\n    /**\n    @internal\n    */\n    getIndent(cx) {\n        let from = undefined;\n        let { overrideIndentation } = cx.options;\n        if (overrideIndentation) {\n            from = IndentedFrom.get(cx.state);\n            if (from != null && from < cx.pos - 1e4)\n                from = undefined;\n        }\n        let start = findState(this, cx.node.tree, 0, cx.node.from, from !== null && from !== void 0 ? from : cx.pos), statePos, state;\n        if (start) {\n            state = start.state;\n            statePos = start.pos + 1;\n        }\n        else {\n            state = this.streamParser.startState(cx.unit);\n            statePos = 0;\n        }\n        if (cx.pos - statePos > 10000 /* C.MaxIndentScanDist */)\n            return null;\n        while (statePos < cx.pos) {\n            let line = cx.state.doc.lineAt(statePos), end = Math.min(cx.pos, line.to);\n            if (line.length) {\n                let indentation = overrideIndentation ? overrideIndentation(line.from) : -1;\n                let stream = new StringStream(line.text, cx.state.tabSize, cx.unit, indentation < 0 ? undefined : indentation);\n                while (stream.pos < end - line.from)\n                    readToken(this.streamParser.token, stream, state);\n            }\n            else {\n                this.streamParser.blankLine(state, cx.unit);\n            }\n            if (end == cx.pos)\n                break;\n            statePos = line.to + 1;\n        }\n        let line = cx.lineAt(cx.pos);\n        if (overrideIndentation && from == null)\n            IndentedFrom.set(cx.state, line.from);\n        return this.streamParser.indent(state, /^\\s*(.*)/.exec(line.text)[1], cx);\n    }\n    get allowsNesting() { return false; }\n}\nfunction findState(lang, tree, off, startPos, before) {\n    let state = off >= startPos && off + tree.length <= before && tree.prop(lang.stateAfter);\n    if (state)\n        return { state: lang.streamParser.copyState(state), pos: off + tree.length };\n    for (let i = tree.children.length - 1; i >= 0; i--) {\n        let child = tree.children[i], pos = off + tree.positions[i];\n        let found = child instanceof common.Tree && pos < before && findState(lang, child, pos, startPos, before);\n        if (found)\n            return found;\n    }\n    return null;\n}\nfunction cutTree(lang, tree, from, to, inside) {\n    if (inside && from <= 0 && to >= tree.length)\n        return tree;\n    if (!inside && from == 0 && tree.type == lang.topNode)\n        inside = true;\n    for (let i = tree.children.length - 1; i >= 0; i--) {\n        let pos = tree.positions[i], child = tree.children[i], inner;\n        if (pos < to && child instanceof common.Tree) {\n            if (!(inner = cutTree(lang, child, from - pos, to - pos, inside)))\n                break;\n            return !inside ? inner\n                : new common.Tree(tree.type, tree.children.slice(0, i).concat(inner), tree.positions.slice(0, i + 1), pos + inner.length);\n        }\n    }\n    return null;\n}\nfunction findStartInFragments(lang, fragments, startPos, endPos, editorState) {\n    for (let f of fragments) {\n        let from = f.from + (f.openStart ? 25 : 0), to = f.to - (f.openEnd ? 25 : 0);\n        let found = from <= startPos && to > startPos && findState(lang, f.tree, 0 - f.offset, startPos, to), tree;\n        if (found && found.pos <= endPos && (tree = cutTree(lang, f.tree, startPos + f.offset, found.pos + f.offset, false)))\n            return { state: found.state, tree };\n    }\n    return { state: lang.streamParser.startState(editorState ? getIndentUnit(editorState) : 4), tree: common.Tree.empty };\n}\nclass Parse {\n    constructor(lang, input, fragments, ranges) {\n        this.lang = lang;\n        this.input = input;\n        this.fragments = fragments;\n        this.ranges = ranges;\n        this.stoppedAt = null;\n        this.chunks = [];\n        this.chunkPos = [];\n        this.chunk = [];\n        this.chunkReused = undefined;\n        this.rangeIndex = 0;\n        this.to = ranges[ranges.length - 1].to;\n        let context = ParseContext.get(), from = ranges[0].from;\n        let { state, tree } = findStartInFragments(lang, fragments, from, this.to, context === null || context === void 0 ? void 0 : context.state);\n        this.state = state;\n        this.parsedPos = this.chunkStart = from + tree.length;\n        for (let i = 0; i < tree.children.length; i++) {\n            this.chunks.push(tree.children[i]);\n            this.chunkPos.push(tree.positions[i]);\n        }\n        if (context && this.parsedPos < context.viewport.from - 100000 /* C.MaxDistanceBeforeViewport */ &&\n            ranges.some(r => r.from <= context.viewport.from && r.to >= context.viewport.from)) {\n            this.state = this.lang.streamParser.startState(getIndentUnit(context.state));\n            context.skipUntilInView(this.parsedPos, context.viewport.from);\n            this.parsedPos = context.viewport.from;\n        }\n        this.moveRangeIndex();\n    }\n    advance() {\n        let context = ParseContext.get();\n        let parseEnd = this.stoppedAt == null ? this.to : Math.min(this.to, this.stoppedAt);\n        let end = Math.min(parseEnd, this.chunkStart + 2048 /* C.ChunkSize */);\n        if (context)\n            end = Math.min(end, context.viewport.to);\n        while (this.parsedPos < end)\n            this.parseLine(context);\n        if (this.chunkStart < this.parsedPos)\n            this.finishChunk();\n        if (this.parsedPos >= parseEnd)\n            return this.finish();\n        if (context && this.parsedPos >= context.viewport.to) {\n            context.skipUntilInView(this.parsedPos, parseEnd);\n            return this.finish();\n        }\n        return null;\n    }\n    stopAt(pos) {\n        this.stoppedAt = pos;\n    }\n    lineAfter(pos) {\n        let chunk = this.input.chunk(pos);\n        if (!this.input.lineChunks) {\n            let eol = chunk.indexOf(\"\\n\");\n            if (eol > -1)\n                chunk = chunk.slice(0, eol);\n        }\n        else if (chunk == \"\\n\") {\n            chunk = \"\";\n        }\n        return pos + chunk.length <= this.to ? chunk : chunk.slice(0, this.to - pos);\n    }\n    nextLine() {\n        let from = this.parsedPos, line = this.lineAfter(from), end = from + line.length;\n        for (let index = this.rangeIndex;;) {\n            let rangeEnd = this.ranges[index].to;\n            if (rangeEnd >= end)\n                break;\n            line = line.slice(0, rangeEnd - (end - line.length));\n            index++;\n            if (index == this.ranges.length)\n                break;\n            let rangeStart = this.ranges[index].from;\n            let after = this.lineAfter(rangeStart);\n            line += after;\n            end = rangeStart + after.length;\n        }\n        return { line, end };\n    }\n    skipGapsTo(pos, offset, side) {\n        for (;;) {\n            let end = this.ranges[this.rangeIndex].to, offPos = pos + offset;\n            if (side > 0 ? end > offPos : end >= offPos)\n                break;\n            let start = this.ranges[++this.rangeIndex].from;\n            offset += start - end;\n        }\n        return offset;\n    }\n    moveRangeIndex() {\n        while (this.ranges[this.rangeIndex].to < this.parsedPos)\n            this.rangeIndex++;\n    }\n    emitToken(id, from, to, offset) {\n        let size = 4;\n        if (this.ranges.length > 1) {\n            offset = this.skipGapsTo(from, offset, 1);\n            from += offset;\n            let len0 = this.chunk.length;\n            offset = this.skipGapsTo(to, offset, -1);\n            to += offset;\n            size += this.chunk.length - len0;\n        }\n        let last = this.chunk.length - 4;\n        if (size == 4 && last >= 0 && this.chunk[last] == id && this.chunk[last + 2] == from)\n            this.chunk[last + 2] = to;\n        else\n            this.chunk.push(id, from, to, size);\n        return offset;\n    }\n    parseLine(context) {\n        let { line, end } = this.nextLine(), offset = 0, { streamParser } = this.lang;\n        let stream = new StringStream(line, context ? context.state.tabSize : 4, context ? getIndentUnit(context.state) : 2);\n        if (stream.eol()) {\n            streamParser.blankLine(this.state, stream.indentUnit);\n        }\n        else {\n            while (!stream.eol()) {\n                let token = readToken(streamParser.token, stream, this.state);\n                if (token)\n                    offset = this.emitToken(this.lang.tokenTable.resolve(token), this.parsedPos + stream.start, this.parsedPos + stream.pos, offset);\n                if (stream.start > 10000 /* C.MaxLineLength */)\n                    break;\n            }\n        }\n        this.parsedPos = end;\n        this.moveRangeIndex();\n        if (this.parsedPos < this.to)\n            this.parsedPos++;\n    }\n    finishChunk() {\n        let tree = common.Tree.build({\n            buffer: this.chunk,\n            start: this.chunkStart,\n            length: this.parsedPos - this.chunkStart,\n            nodeSet,\n            topID: 0,\n            maxBufferLength: 2048 /* C.ChunkSize */,\n            reused: this.chunkReused\n        });\n        tree = new common.Tree(tree.type, tree.children, tree.positions, tree.length, [[this.lang.stateAfter, this.lang.streamParser.copyState(this.state)]]);\n        this.chunks.push(tree);\n        this.chunkPos.push(this.chunkStart - this.ranges[0].from);\n        this.chunk = [];\n        this.chunkReused = undefined;\n        this.chunkStart = this.parsedPos;\n    }\n    finish() {\n        return new common.Tree(this.lang.topNode, this.chunks, this.chunkPos, this.parsedPos - this.ranges[0].from).balance();\n    }\n}\nfunction readToken(token, stream, state) {\n    stream.start = stream.pos;\n    for (let i = 0; i < 10; i++) {\n        let result = token(stream, state);\n        if (stream.pos > stream.start)\n            return result;\n    }\n    throw new Error(\"Stream parser failed to advance stream.\");\n}\nconst noTokens = Object.create(null);\nconst typeArray = [common.NodeType.none];\nconst nodeSet = new common.NodeSet(typeArray);\nconst warned = [];\n// Cache of node types by name and tags\nconst byTag = Object.create(null);\nconst defaultTable = Object.create(null);\nfor (let [legacyName, name] of [\n    [\"variable\", \"variableName\"],\n    [\"variable-2\", \"variableName.special\"],\n    [\"string-2\", \"string.special\"],\n    [\"def\", \"variableName.definition\"],\n    [\"tag\", \"tagName\"],\n    [\"attribute\", \"attributeName\"],\n    [\"type\", \"typeName\"],\n    [\"builtin\", \"variableName.standard\"],\n    [\"qualifier\", \"modifier\"],\n    [\"error\", \"invalid\"],\n    [\"header\", \"heading\"],\n    [\"property\", \"propertyName\"]\n])\n    defaultTable[legacyName] = createTokenType(noTokens, name);\nclass TokenTable {\n    constructor(extra) {\n        this.extra = extra;\n        this.table = Object.assign(Object.create(null), defaultTable);\n    }\n    resolve(tag) {\n        return !tag ? 0 : this.table[tag] || (this.table[tag] = createTokenType(this.extra, tag));\n    }\n}\nconst defaultTokenTable = new TokenTable(noTokens);\nfunction warnForPart(part, msg) {\n    if (warned.indexOf(part) > -1)\n        return;\n    warned.push(part);\n    console.warn(msg);\n}\nfunction createTokenType(extra, tagStr) {\n    let tags = [];\n    for (let name of tagStr.split(\" \")) {\n        let found = [];\n        for (let part of name.split(\".\")) {\n            let value = (extra[part] || highlight.tags[part]);\n            if (!value) {\n                warnForPart(part, `Unknown highlighting tag ${part}`);\n            }\n            else if (typeof value == \"function\") {\n                if (!found.length)\n                    warnForPart(part, `Modifier ${part} used at start of tag`);\n                else\n                    found = found.map(value);\n            }\n            else {\n                if (found.length)\n                    warnForPart(part, `Tag ${part} used as modifier`);\n                else\n                    found = Array.isArray(value) ? value : [value];\n            }\n        }\n        for (let tag of found)\n            tags.push(tag);\n    }\n    if (!tags.length)\n        return 0;\n    let name = tagStr.replace(/ /g, \"_\"), key = name + \" \" + tags.map(t => t.id);\n    let known = byTag[key];\n    if (known)\n        return known.id;\n    let type = byTag[key] = common.NodeType.define({\n        id: typeArray.length,\n        name,\n        props: [highlight.styleTags({ [name]: tags })]\n    });\n    typeArray.push(type);\n    return type.id;\n}\nfunction docID(data, lang) {\n    let type = common.NodeType.define({ id: typeArray.length, name: \"Document\", props: [\n            languageDataProp.add(() => data),\n            indentNodeProp.add(() => cx => lang.getIndent(cx))\n        ], top: true });\n    typeArray.push(type);\n    return type;\n}\n\nfunction buildForLine(line) {\n    return line.length <= 4096 && /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\ufb50-\\ufdff]/.test(line);\n}\nfunction textHasRTL(text) {\n    for (let i = text.iter(); !i.next().done;)\n        if (buildForLine(i.value))\n            return true;\n    return false;\n}\nfunction changeAddsRTL(change) {\n    let added = false;\n    change.iterChanges((fA, tA, fB, tB, ins) => {\n        if (!added && textHasRTL(ins))\n            added = true;\n    });\n    return added;\n}\nconst alwaysIsolate = state.Facet.define({ combine: values => values.some(x => x) });\n/**\nMake sure nodes\n[marked](https://lezer.codemirror.net/docs/ref/#common.NodeProp^isolate)\nas isolating for bidirectional text are rendered in a way that\nisolates them from the surrounding text.\n*/\nfunction bidiIsolates(options = {}) {\n    let extensions = [isolateMarks];\n    if (options.alwaysIsolate)\n        extensions.push(alwaysIsolate.of(true));\n    return extensions;\n}\nconst isolateMarks = view.ViewPlugin.fromClass(class {\n    constructor(view$1) {\n        this.always = view$1.state.facet(alwaysIsolate) ||\n            view$1.textDirection != view.Direction.LTR ||\n            view$1.state.facet(view.EditorView.perLineTextDirection);\n        this.hasRTL = !this.always && textHasRTL(view$1.state.doc);\n        this.tree = syntaxTree(view$1.state);\n        this.decorations = this.always || this.hasRTL ? buildDeco(view$1, this.tree, this.always) : view.Decoration.none;\n    }\n    update(update) {\n        let always = update.state.facet(alwaysIsolate) ||\n            update.view.textDirection != view.Direction.LTR ||\n            update.state.facet(view.EditorView.perLineTextDirection);\n        if (!always && !this.hasRTL && changeAddsRTL(update.changes))\n            this.hasRTL = true;\n        if (!always && !this.hasRTL)\n            return;\n        let tree = syntaxTree(update.state);\n        if (always != this.always || tree != this.tree || update.docChanged || update.viewportChanged) {\n            this.tree = tree;\n            this.always = always;\n            this.decorations = buildDeco(update.view, tree, always);\n        }\n    }\n}, {\n    provide: plugin => {\n        function access(view$1) {\n            var _a, _b;\n            return (_b = (_a = view$1.plugin(plugin)) === null || _a === void 0 ? void 0 : _a.decorations) !== null && _b !== void 0 ? _b : view.Decoration.none;\n        }\n        return [view.EditorView.outerDecorations.of(access),\n            state.Prec.lowest(view.EditorView.bidiIsolatedRanges.of(access))];\n    }\n});\nfunction buildDeco(view, tree, always) {\n    let deco = new state.RangeSetBuilder();\n    let ranges = view.visibleRanges;\n    if (!always)\n        ranges = clipRTLLines(ranges, view.state.doc);\n    for (let { from, to } of ranges) {\n        tree.iterate({\n            enter: node => {\n                let iso = node.type.prop(common.NodeProp.isolate);\n                if (iso)\n                    deco.add(node.from, node.to, marks[iso]);\n            },\n            from, to\n        });\n    }\n    return deco.finish();\n}\nfunction clipRTLLines(ranges, doc) {\n    let cur = doc.iter(), pos = 0, result = [], last = null;\n    for (let { from, to } of ranges) {\n        if (last && last.to > from) {\n            from = last.to;\n            if (from >= to)\n                continue;\n        }\n        if (pos + cur.value.length < from) {\n            cur.next(from - (pos + cur.value.length));\n            pos = from;\n        }\n        for (;;) {\n            let start = pos, end = pos + cur.value.length;\n            if (!cur.lineBreak && buildForLine(cur.value)) {\n                if (last && last.to > start - 10)\n                    last.to = Math.min(to, end);\n                else\n                    result.push(last = { from: start, to: Math.min(to, end) });\n            }\n            if (end >= to)\n                break;\n            pos = end;\n            cur.next();\n        }\n    }\n    return result;\n}\nconst marks = {\n    rtl: view.Decoration.mark({ class: \"cm-iso\", inclusive: true, attributes: { dir: \"rtl\" }, bidiIsolate: view.Direction.RTL }),\n    ltr: view.Decoration.mark({ class: \"cm-iso\", inclusive: true, attributes: { dir: \"ltr\" }, bidiIsolate: view.Direction.LTR }),\n    auto: view.Decoration.mark({ class: \"cm-iso\", inclusive: true, attributes: { dir: \"auto\" }, bidiIsolate: null })\n};\n\nexports.DocInput = DocInput;\nexports.HighlightStyle = HighlightStyle;\nexports.IndentContext = IndentContext;\nexports.LRLanguage = LRLanguage;\nexports.Language = Language;\nexports.LanguageDescription = LanguageDescription;\nexports.LanguageSupport = LanguageSupport;\nexports.ParseContext = ParseContext;\nexports.StreamLanguage = StreamLanguage;\nexports.StringStream = StringStream;\nexports.TreeIndentContext = TreeIndentContext;\nexports.bidiIsolates = bidiIsolates;\nexports.bracketMatching = bracketMatching;\nexports.bracketMatchingHandle = bracketMatchingHandle;\nexports.codeFolding = codeFolding;\nexports.continuedIndent = continuedIndent;\nexports.defaultHighlightStyle = defaultHighlightStyle;\nexports.defineLanguageFacet = defineLanguageFacet;\nexports.delimitedIndent = delimitedIndent;\nexports.ensureSyntaxTree = ensureSyntaxTree;\nexports.flatIndent = flatIndent;\nexports.foldAll = foldAll;\nexports.foldCode = foldCode;\nexports.foldEffect = foldEffect;\nexports.foldGutter = foldGutter;\nexports.foldInside = foldInside;\nexports.foldKeymap = foldKeymap;\nexports.foldNodeProp = foldNodeProp;\nexports.foldService = foldService;\nexports.foldState = foldState;\nexports.foldable = foldable;\nexports.foldedRanges = foldedRanges;\nexports.forceParsing = forceParsing;\nexports.getIndentUnit = getIndentUnit;\nexports.getIndentation = getIndentation;\nexports.highlightingFor = highlightingFor;\nexports.indentNodeProp = indentNodeProp;\nexports.indentOnInput = indentOnInput;\nexports.indentRange = indentRange;\nexports.indentService = indentService;\nexports.indentString = indentString;\nexports.indentUnit = indentUnit;\nexports.language = language;\nexports.languageDataProp = languageDataProp;\nexports.matchBrackets = matchBrackets;\nexports.sublanguageProp = sublanguageProp;\nexports.syntaxHighlighting = syntaxHighlighting;\nexports.syntaxParserRunning = syntaxParserRunning;\nexports.syntaxTree = syntaxTree;\nexports.syntaxTreeAvailable = syntaxTreeAvailable;\nexports.toggleFold = toggleFold;\nexports.unfoldAll = unfoldAll;\nexports.unfoldCode = unfoldCode;\nexports.unfoldEffect = unfoldEffect;\n","'use strict';\n\nvar findClusterBreak$1 = require('@marijn/find-cluster-break');\n\n/**\nThe data structure for documents. @nonabstract\n*/\nclass Text {\n    /**\n    Get the line description around the given position.\n    */\n    lineAt(pos) {\n        if (pos < 0 || pos > this.length)\n            throw new RangeError(`Invalid position ${pos} in document of length ${this.length}`);\n        return this.lineInner(pos, false, 1, 0);\n    }\n    /**\n    Get the description for the given (1-based) line number.\n    */\n    line(n) {\n        if (n < 1 || n > this.lines)\n            throw new RangeError(`Invalid line number ${n} in ${this.lines}-line document`);\n        return this.lineInner(n, true, 1, 0);\n    }\n    /**\n    Replace a range of the text with the given content.\n    */\n    replace(from, to, text) {\n        [from, to] = clip(this, from, to);\n        let parts = [];\n        this.decompose(0, from, parts, 2 /* Open.To */);\n        if (text.length)\n            text.decompose(0, text.length, parts, 1 /* Open.From */ | 2 /* Open.To */);\n        this.decompose(to, this.length, parts, 1 /* Open.From */);\n        return TextNode.from(parts, this.length - (to - from) + text.length);\n    }\n    /**\n    Append another document to this one.\n    */\n    append(other) {\n        return this.replace(this.length, this.length, other);\n    }\n    /**\n    Retrieve the text between the given points.\n    */\n    slice(from, to = this.length) {\n        [from, to] = clip(this, from, to);\n        let parts = [];\n        this.decompose(from, to, parts, 0);\n        return TextNode.from(parts, to - from);\n    }\n    /**\n    Test whether this text is equal to another instance.\n    */\n    eq(other) {\n        if (other == this)\n            return true;\n        if (other.length != this.length || other.lines != this.lines)\n            return false;\n        let start = this.scanIdentical(other, 1), end = this.length - this.scanIdentical(other, -1);\n        let a = new RawTextCursor(this), b = new RawTextCursor(other);\n        for (let skip = start, pos = start;;) {\n            a.next(skip);\n            b.next(skip);\n            skip = 0;\n            if (a.lineBreak != b.lineBreak || a.done != b.done || a.value != b.value)\n                return false;\n            pos += a.value.length;\n            if (a.done || pos >= end)\n                return true;\n        }\n    }\n    /**\n    Iterate over the text. When `dir` is `-1`, iteration happens\n    from end to start. This will return lines and the breaks between\n    them as separate strings.\n    */\n    iter(dir = 1) { return new RawTextCursor(this, dir); }\n    /**\n    Iterate over a range of the text. When `from` > `to`, the\n    iterator will run in reverse.\n    */\n    iterRange(from, to = this.length) { return new PartialTextCursor(this, from, to); }\n    /**\n    Return a cursor that iterates over the given range of lines,\n    _without_ returning the line breaks between, and yielding empty\n    strings for empty lines.\n    \n    When `from` and `to` are given, they should be 1-based line numbers.\n    */\n    iterLines(from, to) {\n        let inner;\n        if (from == null) {\n            inner = this.iter();\n        }\n        else {\n            if (to == null)\n                to = this.lines + 1;\n            let start = this.line(from).from;\n            inner = this.iterRange(start, Math.max(start, to == this.lines + 1 ? this.length : to <= 1 ? 0 : this.line(to - 1).to));\n        }\n        return new LineCursor(inner);\n    }\n    /**\n    Return the document as a string, using newline characters to\n    separate lines.\n    */\n    toString() { return this.sliceString(0); }\n    /**\n    Convert the document to an array of lines (which can be\n    deserialized again via [`Text.of`](https://codemirror.net/6/docs/ref/#state.Text^of)).\n    */\n    toJSON() {\n        let lines = [];\n        this.flatten(lines);\n        return lines;\n    }\n    /**\n    @internal\n    */\n    constructor() { }\n    /**\n    Create a `Text` instance for the given array of lines.\n    */\n    static of(text) {\n        if (text.length == 0)\n            throw new RangeError(\"A document must have at least one line\");\n        if (text.length == 1 && !text[0])\n            return Text.empty;\n        return text.length <= 32 /* Tree.Branch */ ? new TextLeaf(text) : TextNode.from(TextLeaf.split(text, []));\n    }\n}\n// Leaves store an array of line strings. There are always line breaks\n// between these strings. Leaves are limited in size and have to be\n// contained in TextNode instances for bigger documents.\nclass TextLeaf extends Text {\n    constructor(text, length = textLength(text)) {\n        super();\n        this.text = text;\n        this.length = length;\n    }\n    get lines() { return this.text.length; }\n    get children() { return null; }\n    lineInner(target, isLine, line, offset) {\n        for (let i = 0;; i++) {\n            let string = this.text[i], end = offset + string.length;\n            if ((isLine ? line : end) >= target)\n                return new Line(offset, end, line, string);\n            offset = end + 1;\n            line++;\n        }\n    }\n    decompose(from, to, target, open) {\n        let text = from <= 0 && to >= this.length ? this\n            : new TextLeaf(sliceText(this.text, from, to), Math.min(to, this.length) - Math.max(0, from));\n        if (open & 1 /* Open.From */) {\n            let prev = target.pop();\n            let joined = appendText(text.text, prev.text.slice(), 0, text.length);\n            if (joined.length <= 32 /* Tree.Branch */) {\n                target.push(new TextLeaf(joined, prev.length + text.length));\n            }\n            else {\n                let mid = joined.length >> 1;\n                target.push(new TextLeaf(joined.slice(0, mid)), new TextLeaf(joined.slice(mid)));\n            }\n        }\n        else {\n            target.push(text);\n        }\n    }\n    replace(from, to, text) {\n        if (!(text instanceof TextLeaf))\n            return super.replace(from, to, text);\n        [from, to] = clip(this, from, to);\n        let lines = appendText(this.text, appendText(text.text, sliceText(this.text, 0, from)), to);\n        let newLen = this.length + text.length - (to - from);\n        if (lines.length <= 32 /* Tree.Branch */)\n            return new TextLeaf(lines, newLen);\n        return TextNode.from(TextLeaf.split(lines, []), newLen);\n    }\n    sliceString(from, to = this.length, lineSep = \"\\n\") {\n        [from, to] = clip(this, from, to);\n        let result = \"\";\n        for (let pos = 0, i = 0; pos <= to && i < this.text.length; i++) {\n            let line = this.text[i], end = pos + line.length;\n            if (pos > from && i)\n                result += lineSep;\n            if (from < end && to > pos)\n                result += line.slice(Math.max(0, from - pos), to - pos);\n            pos = end + 1;\n        }\n        return result;\n    }\n    flatten(target) {\n        for (let line of this.text)\n            target.push(line);\n    }\n    scanIdentical() { return 0; }\n    static split(text, target) {\n        let part = [], len = -1;\n        for (let line of text) {\n            part.push(line);\n            len += line.length + 1;\n            if (part.length == 32 /* Tree.Branch */) {\n                target.push(new TextLeaf(part, len));\n                part = [];\n                len = -1;\n            }\n        }\n        if (len > -1)\n            target.push(new TextLeaf(part, len));\n        return target;\n    }\n}\n// Nodes provide the tree structure of the `Text` type. They store a\n// number of other nodes or leaves, taking care to balance themselves\n// on changes. There are implied line breaks _between_ the children of\n// a node (but not before the first or after the last child).\nclass TextNode extends Text {\n    constructor(children, length) {\n        super();\n        this.children = children;\n        this.length = length;\n        this.lines = 0;\n        for (let child of children)\n            this.lines += child.lines;\n    }\n    lineInner(target, isLine, line, offset) {\n        for (let i = 0;; i++) {\n            let child = this.children[i], end = offset + child.length, endLine = line + child.lines - 1;\n            if ((isLine ? endLine : end) >= target)\n                return child.lineInner(target, isLine, line, offset);\n            offset = end + 1;\n            line = endLine + 1;\n        }\n    }\n    decompose(from, to, target, open) {\n        for (let i = 0, pos = 0; pos <= to && i < this.children.length; i++) {\n            let child = this.children[i], end = pos + child.length;\n            if (from <= end && to >= pos) {\n                let childOpen = open & ((pos <= from ? 1 /* Open.From */ : 0) | (end >= to ? 2 /* Open.To */ : 0));\n                if (pos >= from && end <= to && !childOpen)\n                    target.push(child);\n                else\n                    child.decompose(from - pos, to - pos, target, childOpen);\n            }\n            pos = end + 1;\n        }\n    }\n    replace(from, to, text) {\n        [from, to] = clip(this, from, to);\n        if (text.lines < this.lines)\n            for (let i = 0, pos = 0; i < this.children.length; i++) {\n                let child = this.children[i], end = pos + child.length;\n                // Fast path: if the change only affects one child and the\n                // child's size remains in the acceptable range, only update\n                // that child\n                if (from >= pos && to <= end) {\n                    let updated = child.replace(from - pos, to - pos, text);\n                    let totalLines = this.lines - child.lines + updated.lines;\n                    if (updated.lines < (totalLines >> (5 /* Tree.BranchShift */ - 1)) &&\n                        updated.lines > (totalLines >> (5 /* Tree.BranchShift */ + 1))) {\n                        let copy = this.children.slice();\n                        copy[i] = updated;\n                        return new TextNode(copy, this.length - (to - from) + text.length);\n                    }\n                    return super.replace(pos, end, updated);\n                }\n                pos = end + 1;\n            }\n        return super.replace(from, to, text);\n    }\n    sliceString(from, to = this.length, lineSep = \"\\n\") {\n        [from, to] = clip(this, from, to);\n        let result = \"\";\n        for (let i = 0, pos = 0; i < this.children.length && pos <= to; i++) {\n            let child = this.children[i], end = pos + child.length;\n            if (pos > from && i)\n                result += lineSep;\n            if (from < end && to > pos)\n                result += child.sliceString(from - pos, to - pos, lineSep);\n            pos = end + 1;\n        }\n        return result;\n    }\n    flatten(target) {\n        for (let child of this.children)\n            child.flatten(target);\n    }\n    scanIdentical(other, dir) {\n        if (!(other instanceof TextNode))\n            return 0;\n        let length = 0;\n        let [iA, iB, eA, eB] = dir > 0 ? [0, 0, this.children.length, other.children.length]\n            : [this.children.length - 1, other.children.length - 1, -1, -1];\n        for (;; iA += dir, iB += dir) {\n            if (iA == eA || iB == eB)\n                return length;\n            let chA = this.children[iA], chB = other.children[iB];\n            if (chA != chB)\n                return length + chA.scanIdentical(chB, dir);\n            length += chA.length + 1;\n        }\n    }\n    static from(children, length = children.reduce((l, ch) => l + ch.length + 1, -1)) {\n        let lines = 0;\n        for (let ch of children)\n            lines += ch.lines;\n        if (lines < 32 /* Tree.Branch */) {\n            let flat = [];\n            for (let ch of children)\n                ch.flatten(flat);\n            return new TextLeaf(flat, length);\n        }\n        let chunk = Math.max(32 /* Tree.Branch */, lines >> 5 /* Tree.BranchShift */), maxChunk = chunk << 1, minChunk = chunk >> 1;\n        let chunked = [], currentLines = 0, currentLen = -1, currentChunk = [];\n        function add(child) {\n            let last;\n            if (child.lines > maxChunk && child instanceof TextNode) {\n                for (let node of child.children)\n                    add(node);\n            }\n            else if (child.lines > minChunk && (currentLines > minChunk || !currentLines)) {\n                flush();\n                chunked.push(child);\n            }\n            else if (child instanceof TextLeaf && currentLines &&\n                (last = currentChunk[currentChunk.length - 1]) instanceof TextLeaf &&\n                child.lines + last.lines <= 32 /* Tree.Branch */) {\n                currentLines += child.lines;\n                currentLen += child.length + 1;\n                currentChunk[currentChunk.length - 1] = new TextLeaf(last.text.concat(child.text), last.length + 1 + child.length);\n            }\n            else {\n                if (currentLines + child.lines > chunk)\n                    flush();\n                currentLines += child.lines;\n                currentLen += child.length + 1;\n                currentChunk.push(child);\n            }\n        }\n        function flush() {\n            if (currentLines == 0)\n                return;\n            chunked.push(currentChunk.length == 1 ? currentChunk[0] : TextNode.from(currentChunk, currentLen));\n            currentLen = -1;\n            currentLines = currentChunk.length = 0;\n        }\n        for (let child of children)\n            add(child);\n        flush();\n        return chunked.length == 1 ? chunked[0] : new TextNode(chunked, length);\n    }\n}\nText.empty = new TextLeaf([\"\"], 0);\nfunction textLength(text) {\n    let length = -1;\n    for (let line of text)\n        length += line.length + 1;\n    return length;\n}\nfunction appendText(text, target, from = 0, to = 1e9) {\n    for (let pos = 0, i = 0, first = true; i < text.length && pos <= to; i++) {\n        let line = text[i], end = pos + line.length;\n        if (end >= from) {\n            if (end > to)\n                line = line.slice(0, to - pos);\n            if (pos < from)\n                line = line.slice(from - pos);\n            if (first) {\n                target[target.length - 1] += line;\n                first = false;\n            }\n            else\n                target.push(line);\n        }\n        pos = end + 1;\n    }\n    return target;\n}\nfunction sliceText(text, from, to) {\n    return appendText(text, [\"\"], from, to);\n}\nclass RawTextCursor {\n    constructor(text, dir = 1) {\n        this.dir = dir;\n        this.done = false;\n        this.lineBreak = false;\n        this.value = \"\";\n        this.nodes = [text];\n        this.offsets = [dir > 0 ? 1 : (text instanceof TextLeaf ? text.text.length : text.children.length) << 1];\n    }\n    nextInner(skip, dir) {\n        this.done = this.lineBreak = false;\n        for (;;) {\n            let last = this.nodes.length - 1;\n            let top = this.nodes[last], offsetValue = this.offsets[last], offset = offsetValue >> 1;\n            let size = top instanceof TextLeaf ? top.text.length : top.children.length;\n            if (offset == (dir > 0 ? size : 0)) {\n                if (last == 0) {\n                    this.done = true;\n                    this.value = \"\";\n                    return this;\n                }\n                if (dir > 0)\n                    this.offsets[last - 1]++;\n                this.nodes.pop();\n                this.offsets.pop();\n            }\n            else if ((offsetValue & 1) == (dir > 0 ? 0 : 1)) {\n                this.offsets[last] += dir;\n                if (skip == 0) {\n                    this.lineBreak = true;\n                    this.value = \"\\n\";\n                    return this;\n                }\n                skip--;\n            }\n            else if (top instanceof TextLeaf) {\n                // Move to the next string\n                let next = top.text[offset + (dir < 0 ? -1 : 0)];\n                this.offsets[last] += dir;\n                if (next.length > Math.max(0, skip)) {\n                    this.value = skip == 0 ? next : dir > 0 ? next.slice(skip) : next.slice(0, next.length - skip);\n                    return this;\n                }\n                skip -= next.length;\n            }\n            else {\n                let next = top.children[offset + (dir < 0 ? -1 : 0)];\n                if (skip > next.length) {\n                    skip -= next.length;\n                    this.offsets[last] += dir;\n                }\n                else {\n                    if (dir < 0)\n                        this.offsets[last]--;\n                    this.nodes.push(next);\n                    this.offsets.push(dir > 0 ? 1 : (next instanceof TextLeaf ? next.text.length : next.children.length) << 1);\n                }\n            }\n        }\n    }\n    next(skip = 0) {\n        if (skip < 0) {\n            this.nextInner(-skip, (-this.dir));\n            skip = this.value.length;\n        }\n        return this.nextInner(skip, this.dir);\n    }\n}\nclass PartialTextCursor {\n    constructor(text, start, end) {\n        this.value = \"\";\n        this.done = false;\n        this.cursor = new RawTextCursor(text, start > end ? -1 : 1);\n        this.pos = start > end ? text.length : 0;\n        this.from = Math.min(start, end);\n        this.to = Math.max(start, end);\n    }\n    nextInner(skip, dir) {\n        if (dir < 0 ? this.pos <= this.from : this.pos >= this.to) {\n            this.value = \"\";\n            this.done = true;\n            return this;\n        }\n        skip += Math.max(0, dir < 0 ? this.pos - this.to : this.from - this.pos);\n        let limit = dir < 0 ? this.pos - this.from : this.to - this.pos;\n        if (skip > limit)\n            skip = limit;\n        limit -= skip;\n        let { value } = this.cursor.next(skip);\n        this.pos += (value.length + skip) * dir;\n        this.value = value.length <= limit ? value : dir < 0 ? value.slice(value.length - limit) : value.slice(0, limit);\n        this.done = !this.value;\n        return this;\n    }\n    next(skip = 0) {\n        if (skip < 0)\n            skip = Math.max(skip, this.from - this.pos);\n        else if (skip > 0)\n            skip = Math.min(skip, this.to - this.pos);\n        return this.nextInner(skip, this.cursor.dir);\n    }\n    get lineBreak() { return this.cursor.lineBreak && this.value != \"\"; }\n}\nclass LineCursor {\n    constructor(inner) {\n        this.inner = inner;\n        this.afterBreak = true;\n        this.value = \"\";\n        this.done = false;\n    }\n    next(skip = 0) {\n        let { done, lineBreak, value } = this.inner.next(skip);\n        if (done && this.afterBreak) {\n            this.value = \"\";\n            this.afterBreak = false;\n        }\n        else if (done) {\n            this.done = true;\n            this.value = \"\";\n        }\n        else if (lineBreak) {\n            if (this.afterBreak) {\n                this.value = \"\";\n            }\n            else {\n                this.afterBreak = true;\n                this.next();\n            }\n        }\n        else {\n            this.value = value;\n            this.afterBreak = false;\n        }\n        return this;\n    }\n    get lineBreak() { return false; }\n}\nif (typeof Symbol != \"undefined\") {\n    Text.prototype[Symbol.iterator] = function () { return this.iter(); };\n    RawTextCursor.prototype[Symbol.iterator] = PartialTextCursor.prototype[Symbol.iterator] =\n        LineCursor.prototype[Symbol.iterator] = function () { return this; };\n}\n/**\nThis type describes a line in the document. It is created\non-demand when lines are [queried](https://codemirror.net/6/docs/ref/#state.Text.lineAt).\n*/\nclass Line {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The position of the start of the line.\n    */\n    from, \n    /**\n    The position at the end of the line (_before_ the line break,\n    or at the end of document for the last line).\n    */\n    to, \n    /**\n    This line's line number (1-based).\n    */\n    number, \n    /**\n    The line's content.\n    */\n    text) {\n        this.from = from;\n        this.to = to;\n        this.number = number;\n        this.text = text;\n    }\n    /**\n    The length of the line (not including any line break after it).\n    */\n    get length() { return this.to - this.from; }\n}\nfunction clip(text, from, to) {\n    from = Math.max(0, Math.min(text.length, from));\n    return [from, Math.max(from, Math.min(text.length, to))];\n}\n\n/**\nReturns a next grapheme cluster break _after_ (not equal to)\n`pos`, if `forward` is true, or before otherwise. Returns `pos`\nitself if no further cluster break is available in the string.\nMoves across surrogate pairs, extending characters (when\n`includeExtending` is true), characters joined with zero-width\njoiners, and flag emoji.\n*/\nfunction findClusterBreak(str, pos, forward = true, includeExtending = true) {\n    return findClusterBreak$1.findClusterBreak(str, pos, forward, includeExtending);\n}\nfunction surrogateLow(ch) { return ch >= 0xDC00 && ch < 0xE000; }\nfunction surrogateHigh(ch) { return ch >= 0xD800 && ch < 0xDC00; }\n/**\nFind the code point at the given position in a string (like the\n[`codePointAt`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/codePointAt)\nstring method).\n*/\nfunction codePointAt(str, pos) {\n    let code0 = str.charCodeAt(pos);\n    if (!surrogateHigh(code0) || pos + 1 == str.length)\n        return code0;\n    let code1 = str.charCodeAt(pos + 1);\n    if (!surrogateLow(code1))\n        return code0;\n    return ((code0 - 0xd800) << 10) + (code1 - 0xdc00) + 0x10000;\n}\n/**\nGiven a Unicode codepoint, return the JavaScript string that\nrespresents it (like\n[`String.fromCodePoint`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCodePoint)).\n*/\nfunction fromCodePoint(code) {\n    if (code <= 0xffff)\n        return String.fromCharCode(code);\n    code -= 0x10000;\n    return String.fromCharCode((code >> 10) + 0xd800, (code & 1023) + 0xdc00);\n}\n/**\nThe amount of positions a character takes up in a JavaScript string.\n*/\nfunction codePointSize(code) { return code < 0x10000 ? 1 : 2; }\n\nconst DefaultSplit = /\\r\\n?|\\n/;\n/**\nDistinguishes different ways in which positions can be mapped.\n*/\nexports.MapMode = void 0;\n(function (MapMode) {\n    /**\n    Map a position to a valid new position, even when its context\n    was deleted.\n    */\n    MapMode[MapMode[\"Simple\"] = 0] = \"Simple\";\n    /**\n    Return null if deletion happens across the position.\n    */\n    MapMode[MapMode[\"TrackDel\"] = 1] = \"TrackDel\";\n    /**\n    Return null if the character _before_ the position is deleted.\n    */\n    MapMode[MapMode[\"TrackBefore\"] = 2] = \"TrackBefore\";\n    /**\n    Return null if the character _after_ the position is deleted.\n    */\n    MapMode[MapMode[\"TrackAfter\"] = 3] = \"TrackAfter\";\n})(exports.MapMode || (exports.MapMode = {}));\n/**\nA change description is a variant of [change set](https://codemirror.net/6/docs/ref/#state.ChangeSet)\nthat doesn't store the inserted text. As such, it can't be\napplied, but is cheaper to store and manipulate.\n*/\nclass ChangeDesc {\n    // Sections are encoded as pairs of integers. The first is the\n    // length in the current document, and the second is -1 for\n    // unaffected sections, and the length of the replacement content\n    // otherwise. So an insertion would be (0, n>0), a deletion (n>0,\n    // 0), and a replacement two positive numbers.\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    @internal\n    */\n    sections) {\n        this.sections = sections;\n    }\n    /**\n    The length of the document before the change.\n    */\n    get length() {\n        let result = 0;\n        for (let i = 0; i < this.sections.length; i += 2)\n            result += this.sections[i];\n        return result;\n    }\n    /**\n    The length of the document after the change.\n    */\n    get newLength() {\n        let result = 0;\n        for (let i = 0; i < this.sections.length; i += 2) {\n            let ins = this.sections[i + 1];\n            result += ins < 0 ? this.sections[i] : ins;\n        }\n        return result;\n    }\n    /**\n    False when there are actual changes in this set.\n    */\n    get empty() { return this.sections.length == 0 || this.sections.length == 2 && this.sections[1] < 0; }\n    /**\n    Iterate over the unchanged parts left by these changes. `posA`\n    provides the position of the range in the old document, `posB`\n    the new position in the changed document.\n    */\n    iterGaps(f) {\n        for (let i = 0, posA = 0, posB = 0; i < this.sections.length;) {\n            let len = this.sections[i++], ins = this.sections[i++];\n            if (ins < 0) {\n                f(posA, posB, len);\n                posB += len;\n            }\n            else {\n                posB += ins;\n            }\n            posA += len;\n        }\n    }\n    /**\n    Iterate over the ranges changed by these changes. (See\n    [`ChangeSet.iterChanges`](https://codemirror.net/6/docs/ref/#state.ChangeSet.iterChanges) for a\n    variant that also provides you with the inserted text.)\n    `fromA`/`toA` provides the extent of the change in the starting\n    document, `fromB`/`toB` the extent of the replacement in the\n    changed document.\n    \n    When `individual` is true, adjacent changes (which are kept\n    separate for [position mapping](https://codemirror.net/6/docs/ref/#state.ChangeDesc.mapPos)) are\n    reported separately.\n    */\n    iterChangedRanges(f, individual = false) {\n        iterChanges(this, f, individual);\n    }\n    /**\n    Get a description of the inverted form of these changes.\n    */\n    get invertedDesc() {\n        let sections = [];\n        for (let i = 0; i < this.sections.length;) {\n            let len = this.sections[i++], ins = this.sections[i++];\n            if (ins < 0)\n                sections.push(len, ins);\n            else\n                sections.push(ins, len);\n        }\n        return new ChangeDesc(sections);\n    }\n    /**\n    Compute the combined effect of applying another set of changes\n    after this one. The length of the document after this set should\n    match the length before `other`.\n    */\n    composeDesc(other) { return this.empty ? other : other.empty ? this : composeSets(this, other); }\n    /**\n    Map this description, which should start with the same document\n    as `other`, over another set of changes, so that it can be\n    applied after it. When `before` is true, map as if the changes\n    in `this` happened before the ones in `other`.\n    */\n    mapDesc(other, before = false) { return other.empty ? this : mapSet(this, other, before); }\n    mapPos(pos, assoc = -1, mode = exports.MapMode.Simple) {\n        let posA = 0, posB = 0;\n        for (let i = 0; i < this.sections.length;) {\n            let len = this.sections[i++], ins = this.sections[i++], endA = posA + len;\n            if (ins < 0) {\n                if (endA > pos)\n                    return posB + (pos - posA);\n                posB += len;\n            }\n            else {\n                if (mode != exports.MapMode.Simple && endA >= pos &&\n                    (mode == exports.MapMode.TrackDel && posA < pos && endA > pos ||\n                        mode == exports.MapMode.TrackBefore && posA < pos ||\n                        mode == exports.MapMode.TrackAfter && endA > pos))\n                    return null;\n                if (endA > pos || endA == pos && assoc < 0 && !len)\n                    return pos == posA || assoc < 0 ? posB : posB + ins;\n                posB += ins;\n            }\n            posA = endA;\n        }\n        if (pos > posA)\n            throw new RangeError(`Position ${pos} is out of range for changeset of length ${posA}`);\n        return posB;\n    }\n    /**\n    Check whether these changes touch a given range. When one of the\n    changes entirely covers the range, the string `\"cover\"` is\n    returned.\n    */\n    touchesRange(from, to = from) {\n        for (let i = 0, pos = 0; i < this.sections.length && pos <= to;) {\n            let len = this.sections[i++], ins = this.sections[i++], end = pos + len;\n            if (ins >= 0 && pos <= to && end >= from)\n                return pos < from && end > to ? \"cover\" : true;\n            pos = end;\n        }\n        return false;\n    }\n    /**\n    @internal\n    */\n    toString() {\n        let result = \"\";\n        for (let i = 0; i < this.sections.length;) {\n            let len = this.sections[i++], ins = this.sections[i++];\n            result += (result ? \" \" : \"\") + len + (ins >= 0 ? \":\" + ins : \"\");\n        }\n        return result;\n    }\n    /**\n    Serialize this change desc to a JSON-representable value.\n    */\n    toJSON() { return this.sections; }\n    /**\n    Create a change desc from its JSON representation (as produced\n    by [`toJSON`](https://codemirror.net/6/docs/ref/#state.ChangeDesc.toJSON).\n    */\n    static fromJSON(json) {\n        if (!Array.isArray(json) || json.length % 2 || json.some(a => typeof a != \"number\"))\n            throw new RangeError(\"Invalid JSON representation of ChangeDesc\");\n        return new ChangeDesc(json);\n    }\n    /**\n    @internal\n    */\n    static create(sections) { return new ChangeDesc(sections); }\n}\n/**\nA change set represents a group of modifications to a document. It\nstores the document length, and can only be applied to documents\nwith exactly that length.\n*/\nclass ChangeSet extends ChangeDesc {\n    constructor(sections, \n    /**\n    @internal\n    */\n    inserted) {\n        super(sections);\n        this.inserted = inserted;\n    }\n    /**\n    Apply the changes to a document, returning the modified\n    document.\n    */\n    apply(doc) {\n        if (this.length != doc.length)\n            throw new RangeError(\"Applying change set to a document with the wrong length\");\n        iterChanges(this, (fromA, toA, fromB, _toB, text) => doc = doc.replace(fromB, fromB + (toA - fromA), text), false);\n        return doc;\n    }\n    mapDesc(other, before = false) { return mapSet(this, other, before, true); }\n    /**\n    Given the document as it existed _before_ the changes, return a\n    change set that represents the inverse of this set, which could\n    be used to go from the document created by the changes back to\n    the document as it existed before the changes.\n    */\n    invert(doc) {\n        let sections = this.sections.slice(), inserted = [];\n        for (let i = 0, pos = 0; i < sections.length; i += 2) {\n            let len = sections[i], ins = sections[i + 1];\n            if (ins >= 0) {\n                sections[i] = ins;\n                sections[i + 1] = len;\n                let index = i >> 1;\n                while (inserted.length < index)\n                    inserted.push(Text.empty);\n                inserted.push(len ? doc.slice(pos, pos + len) : Text.empty);\n            }\n            pos += len;\n        }\n        return new ChangeSet(sections, inserted);\n    }\n    /**\n    Combine two subsequent change sets into a single set. `other`\n    must start in the document produced by `this`. If `this` goes\n    `docA` → `docB` and `other` represents `docB` → `docC`, the\n    returned value will represent the change `docA` → `docC`.\n    */\n    compose(other) { return this.empty ? other : other.empty ? this : composeSets(this, other, true); }\n    /**\n    Given another change set starting in the same document, maps this\n    change set over the other, producing a new change set that can be\n    applied to the document produced by applying `other`. When\n    `before` is `true`, order changes as if `this` comes before\n    `other`, otherwise (the default) treat `other` as coming first.\n    \n    Given two changes `A` and `B`, `A.compose(B.map(A))` and\n    `B.compose(A.map(B, true))` will produce the same document. This\n    provides a basic form of [operational\n    transformation](https://en.wikipedia.org/wiki/Operational_transformation),\n    and can be used for collaborative editing.\n    */\n    map(other, before = false) { return other.empty ? this : mapSet(this, other, before, true); }\n    /**\n    Iterate over the changed ranges in the document, calling `f` for\n    each, with the range in the original document (`fromA`-`toA`)\n    and the range that replaces it in the new document\n    (`fromB`-`toB`).\n    \n    When `individual` is true, adjacent changes are reported\n    separately.\n    */\n    iterChanges(f, individual = false) {\n        iterChanges(this, f, individual);\n    }\n    /**\n    Get a [change description](https://codemirror.net/6/docs/ref/#state.ChangeDesc) for this change\n    set.\n    */\n    get desc() { return ChangeDesc.create(this.sections); }\n    /**\n    @internal\n    */\n    filter(ranges) {\n        let resultSections = [], resultInserted = [], filteredSections = [];\n        let iter = new SectionIter(this);\n        done: for (let i = 0, pos = 0;;) {\n            let next = i == ranges.length ? 1e9 : ranges[i++];\n            while (pos < next || pos == next && iter.len == 0) {\n                if (iter.done)\n                    break done;\n                let len = Math.min(iter.len, next - pos);\n                addSection(filteredSections, len, -1);\n                let ins = iter.ins == -1 ? -1 : iter.off == 0 ? iter.ins : 0;\n                addSection(resultSections, len, ins);\n                if (ins > 0)\n                    addInsert(resultInserted, resultSections, iter.text);\n                iter.forward(len);\n                pos += len;\n            }\n            let end = ranges[i++];\n            while (pos < end) {\n                if (iter.done)\n                    break done;\n                let len = Math.min(iter.len, end - pos);\n                addSection(resultSections, len, -1);\n                addSection(filteredSections, len, iter.ins == -1 ? -1 : iter.off == 0 ? iter.ins : 0);\n                iter.forward(len);\n                pos += len;\n            }\n        }\n        return { changes: new ChangeSet(resultSections, resultInserted),\n            filtered: ChangeDesc.create(filteredSections) };\n    }\n    /**\n    Serialize this change set to a JSON-representable value.\n    */\n    toJSON() {\n        let parts = [];\n        for (let i = 0; i < this.sections.length; i += 2) {\n            let len = this.sections[i], ins = this.sections[i + 1];\n            if (ins < 0)\n                parts.push(len);\n            else if (ins == 0)\n                parts.push([len]);\n            else\n                parts.push([len].concat(this.inserted[i >> 1].toJSON()));\n        }\n        return parts;\n    }\n    /**\n    Create a change set for the given changes, for a document of the\n    given length, using `lineSep` as line separator.\n    */\n    static of(changes, length, lineSep) {\n        let sections = [], inserted = [], pos = 0;\n        let total = null;\n        function flush(force = false) {\n            if (!force && !sections.length)\n                return;\n            if (pos < length)\n                addSection(sections, length - pos, -1);\n            let set = new ChangeSet(sections, inserted);\n            total = total ? total.compose(set.map(total)) : set;\n            sections = [];\n            inserted = [];\n            pos = 0;\n        }\n        function process(spec) {\n            if (Array.isArray(spec)) {\n                for (let sub of spec)\n                    process(sub);\n            }\n            else if (spec instanceof ChangeSet) {\n                if (spec.length != length)\n                    throw new RangeError(`Mismatched change set length (got ${spec.length}, expected ${length})`);\n                flush();\n                total = total ? total.compose(spec.map(total)) : spec;\n            }\n            else {\n                let { from, to = from, insert } = spec;\n                if (from > to || from < 0 || to > length)\n                    throw new RangeError(`Invalid change range ${from} to ${to} (in doc of length ${length})`);\n                let insText = !insert ? Text.empty : typeof insert == \"string\" ? Text.of(insert.split(lineSep || DefaultSplit)) : insert;\n                let insLen = insText.length;\n                if (from == to && insLen == 0)\n                    return;\n                if (from < pos)\n                    flush();\n                if (from > pos)\n                    addSection(sections, from - pos, -1);\n                addSection(sections, to - from, insLen);\n                addInsert(inserted, sections, insText);\n                pos = to;\n            }\n        }\n        process(changes);\n        flush(!total);\n        return total;\n    }\n    /**\n    Create an empty changeset of the given length.\n    */\n    static empty(length) {\n        return new ChangeSet(length ? [length, -1] : [], []);\n    }\n    /**\n    Create a changeset from its JSON representation (as produced by\n    [`toJSON`](https://codemirror.net/6/docs/ref/#state.ChangeSet.toJSON).\n    */\n    static fromJSON(json) {\n        if (!Array.isArray(json))\n            throw new RangeError(\"Invalid JSON representation of ChangeSet\");\n        let sections = [], inserted = [];\n        for (let i = 0; i < json.length; i++) {\n            let part = json[i];\n            if (typeof part == \"number\") {\n                sections.push(part, -1);\n            }\n            else if (!Array.isArray(part) || typeof part[0] != \"number\" || part.some((e, i) => i && typeof e != \"string\")) {\n                throw new RangeError(\"Invalid JSON representation of ChangeSet\");\n            }\n            else if (part.length == 1) {\n                sections.push(part[0], 0);\n            }\n            else {\n                while (inserted.length < i)\n                    inserted.push(Text.empty);\n                inserted[i] = Text.of(part.slice(1));\n                sections.push(part[0], inserted[i].length);\n            }\n        }\n        return new ChangeSet(sections, inserted);\n    }\n    /**\n    @internal\n    */\n    static createSet(sections, inserted) {\n        return new ChangeSet(sections, inserted);\n    }\n}\nfunction addSection(sections, len, ins, forceJoin = false) {\n    if (len == 0 && ins <= 0)\n        return;\n    let last = sections.length - 2;\n    if (last >= 0 && ins <= 0 && ins == sections[last + 1])\n        sections[last] += len;\n    else if (last >= 0 && len == 0 && sections[last] == 0)\n        sections[last + 1] += ins;\n    else if (forceJoin) {\n        sections[last] += len;\n        sections[last + 1] += ins;\n    }\n    else\n        sections.push(len, ins);\n}\nfunction addInsert(values, sections, value) {\n    if (value.length == 0)\n        return;\n    let index = (sections.length - 2) >> 1;\n    if (index < values.length) {\n        values[values.length - 1] = values[values.length - 1].append(value);\n    }\n    else {\n        while (values.length < index)\n            values.push(Text.empty);\n        values.push(value);\n    }\n}\nfunction iterChanges(desc, f, individual) {\n    let inserted = desc.inserted;\n    for (let posA = 0, posB = 0, i = 0; i < desc.sections.length;) {\n        let len = desc.sections[i++], ins = desc.sections[i++];\n        if (ins < 0) {\n            posA += len;\n            posB += len;\n        }\n        else {\n            let endA = posA, endB = posB, text = Text.empty;\n            for (;;) {\n                endA += len;\n                endB += ins;\n                if (ins && inserted)\n                    text = text.append(inserted[(i - 2) >> 1]);\n                if (individual || i == desc.sections.length || desc.sections[i + 1] < 0)\n                    break;\n                len = desc.sections[i++];\n                ins = desc.sections[i++];\n            }\n            f(posA, endA, posB, endB, text);\n            posA = endA;\n            posB = endB;\n        }\n    }\n}\nfunction mapSet(setA, setB, before, mkSet = false) {\n    // Produce a copy of setA that applies to the document after setB\n    // has been applied (assuming both start at the same document).\n    let sections = [], insert = mkSet ? [] : null;\n    let a = new SectionIter(setA), b = new SectionIter(setB);\n    // Iterate over both sets in parallel. inserted tracks, for changes\n    // in A that have to be processed piece-by-piece, whether their\n    // content has been inserted already, and refers to the section\n    // index.\n    for (let inserted = -1;;) {\n        if (a.done && b.len || b.done && a.len) {\n            throw new Error(\"Mismatched change set lengths\");\n        }\n        else if (a.ins == -1 && b.ins == -1) {\n            // Move across ranges skipped by both sets.\n            let len = Math.min(a.len, b.len);\n            addSection(sections, len, -1);\n            a.forward(len);\n            b.forward(len);\n        }\n        else if (b.ins >= 0 && (a.ins < 0 || inserted == a.i || a.off == 0 && (b.len < a.len || b.len == a.len && !before))) {\n            // If there's a change in B that comes before the next change in\n            // A (ordered by start pos, then len, then before flag), skip\n            // that (and process any changes in A it covers).\n            let len = b.len;\n            addSection(sections, b.ins, -1);\n            while (len) {\n                let piece = Math.min(a.len, len);\n                if (a.ins >= 0 && inserted < a.i && a.len <= piece) {\n                    addSection(sections, 0, a.ins);\n                    if (insert)\n                        addInsert(insert, sections, a.text);\n                    inserted = a.i;\n                }\n                a.forward(piece);\n                len -= piece;\n            }\n            b.next();\n        }\n        else if (a.ins >= 0) {\n            // Process the part of a change in A up to the start of the next\n            // non-deletion change in B (if overlapping).\n            let len = 0, left = a.len;\n            while (left) {\n                if (b.ins == -1) {\n                    let piece = Math.min(left, b.len);\n                    len += piece;\n                    left -= piece;\n                    b.forward(piece);\n                }\n                else if (b.ins == 0 && b.len < left) {\n                    left -= b.len;\n                    b.next();\n                }\n                else {\n                    break;\n                }\n            }\n            addSection(sections, len, inserted < a.i ? a.ins : 0);\n            if (insert && inserted < a.i)\n                addInsert(insert, sections, a.text);\n            inserted = a.i;\n            a.forward(a.len - left);\n        }\n        else if (a.done && b.done) {\n            return insert ? ChangeSet.createSet(sections, insert) : ChangeDesc.create(sections);\n        }\n        else {\n            throw new Error(\"Mismatched change set lengths\");\n        }\n    }\n}\nfunction composeSets(setA, setB, mkSet = false) {\n    let sections = [];\n    let insert = mkSet ? [] : null;\n    let a = new SectionIter(setA), b = new SectionIter(setB);\n    for (let open = false;;) {\n        if (a.done && b.done) {\n            return insert ? ChangeSet.createSet(sections, insert) : ChangeDesc.create(sections);\n        }\n        else if (a.ins == 0) { // Deletion in A\n            addSection(sections, a.len, 0, open);\n            a.next();\n        }\n        else if (b.len == 0 && !b.done) { // Insertion in B\n            addSection(sections, 0, b.ins, open);\n            if (insert)\n                addInsert(insert, sections, b.text);\n            b.next();\n        }\n        else if (a.done || b.done) {\n            throw new Error(\"Mismatched change set lengths\");\n        }\n        else {\n            let len = Math.min(a.len2, b.len), sectionLen = sections.length;\n            if (a.ins == -1) {\n                let insB = b.ins == -1 ? -1 : b.off ? 0 : b.ins;\n                addSection(sections, len, insB, open);\n                if (insert && insB)\n                    addInsert(insert, sections, b.text);\n            }\n            else if (b.ins == -1) {\n                addSection(sections, a.off ? 0 : a.len, len, open);\n                if (insert)\n                    addInsert(insert, sections, a.textBit(len));\n            }\n            else {\n                addSection(sections, a.off ? 0 : a.len, b.off ? 0 : b.ins, open);\n                if (insert && !b.off)\n                    addInsert(insert, sections, b.text);\n            }\n            open = (a.ins > len || b.ins >= 0 && b.len > len) && (open || sections.length > sectionLen);\n            a.forward2(len);\n            b.forward(len);\n        }\n    }\n}\nclass SectionIter {\n    constructor(set) {\n        this.set = set;\n        this.i = 0;\n        this.next();\n    }\n    next() {\n        let { sections } = this.set;\n        if (this.i < sections.length) {\n            this.len = sections[this.i++];\n            this.ins = sections[this.i++];\n        }\n        else {\n            this.len = 0;\n            this.ins = -2;\n        }\n        this.off = 0;\n    }\n    get done() { return this.ins == -2; }\n    get len2() { return this.ins < 0 ? this.len : this.ins; }\n    get text() {\n        let { inserted } = this.set, index = (this.i - 2) >> 1;\n        return index >= inserted.length ? Text.empty : inserted[index];\n    }\n    textBit(len) {\n        let { inserted } = this.set, index = (this.i - 2) >> 1;\n        return index >= inserted.length && !len ? Text.empty\n            : inserted[index].slice(this.off, len == null ? undefined : this.off + len);\n    }\n    forward(len) {\n        if (len == this.len)\n            this.next();\n        else {\n            this.len -= len;\n            this.off += len;\n        }\n    }\n    forward2(len) {\n        if (this.ins == -1)\n            this.forward(len);\n        else if (len == this.ins)\n            this.next();\n        else {\n            this.ins -= len;\n            this.off += len;\n        }\n    }\n}\n\n/**\nA single selection range. When\n[`allowMultipleSelections`](https://codemirror.net/6/docs/ref/#state.EditorState^allowMultipleSelections)\nis enabled, a [selection](https://codemirror.net/6/docs/ref/#state.EditorSelection) may hold\nmultiple ranges. By default, selections hold exactly one range.\n*/\nclass SelectionRange {\n    constructor(\n    /**\n    The lower boundary of the range.\n    */\n    from, \n    /**\n    The upper boundary of the range.\n    */\n    to, flags) {\n        this.from = from;\n        this.to = to;\n        this.flags = flags;\n    }\n    /**\n    The anchor of the range—the side that doesn't move when you\n    extend it.\n    */\n    get anchor() { return this.flags & 32 /* RangeFlag.Inverted */ ? this.to : this.from; }\n    /**\n    The head of the range, which is moved when the range is\n    [extended](https://codemirror.net/6/docs/ref/#state.SelectionRange.extend).\n    */\n    get head() { return this.flags & 32 /* RangeFlag.Inverted */ ? this.from : this.to; }\n    /**\n    True when `anchor` and `head` are at the same position.\n    */\n    get empty() { return this.from == this.to; }\n    /**\n    If this is a cursor that is explicitly associated with the\n    character on one of its sides, this returns the side. -1 means\n    the character before its position, 1 the character after, and 0\n    means no association.\n    */\n    get assoc() { return this.flags & 8 /* RangeFlag.AssocBefore */ ? -1 : this.flags & 16 /* RangeFlag.AssocAfter */ ? 1 : 0; }\n    /**\n    The bidirectional text level associated with this cursor, if\n    any.\n    */\n    get bidiLevel() {\n        let level = this.flags & 7 /* RangeFlag.BidiLevelMask */;\n        return level == 7 ? null : level;\n    }\n    /**\n    The goal column (stored vertical offset) associated with a\n    cursor. This is used to preserve the vertical position when\n    [moving](https://codemirror.net/6/docs/ref/#view.EditorView.moveVertically) across\n    lines of different length.\n    */\n    get goalColumn() {\n        let value = this.flags >> 6 /* RangeFlag.GoalColumnOffset */;\n        return value == 16777215 /* RangeFlag.NoGoalColumn */ ? undefined : value;\n    }\n    /**\n    Map this range through a change, producing a valid range in the\n    updated document.\n    */\n    map(change, assoc = -1) {\n        let from, to;\n        if (this.empty) {\n            from = to = change.mapPos(this.from, assoc);\n        }\n        else {\n            from = change.mapPos(this.from, 1);\n            to = change.mapPos(this.to, -1);\n        }\n        return from == this.from && to == this.to ? this : new SelectionRange(from, to, this.flags);\n    }\n    /**\n    Extend this range to cover at least `from` to `to`.\n    */\n    extend(from, to = from) {\n        if (from <= this.anchor && to >= this.anchor)\n            return EditorSelection.range(from, to);\n        let head = Math.abs(from - this.anchor) > Math.abs(to - this.anchor) ? from : to;\n        return EditorSelection.range(this.anchor, head);\n    }\n    /**\n    Compare this range to another range.\n    */\n    eq(other, includeAssoc = false) {\n        return this.anchor == other.anchor && this.head == other.head &&\n            (!includeAssoc || !this.empty || this.assoc == other.assoc);\n    }\n    /**\n    Return a JSON-serializable object representing the range.\n    */\n    toJSON() { return { anchor: this.anchor, head: this.head }; }\n    /**\n    Convert a JSON representation of a range to a `SelectionRange`\n    instance.\n    */\n    static fromJSON(json) {\n        if (!json || typeof json.anchor != \"number\" || typeof json.head != \"number\")\n            throw new RangeError(\"Invalid JSON representation for SelectionRange\");\n        return EditorSelection.range(json.anchor, json.head);\n    }\n    /**\n    @internal\n    */\n    static create(from, to, flags) {\n        return new SelectionRange(from, to, flags);\n    }\n}\n/**\nAn editor selection holds one or more selection ranges.\n*/\nclass EditorSelection {\n    constructor(\n    /**\n    The ranges in the selection, sorted by position. Ranges cannot\n    overlap (but they may touch, if they aren't empty).\n    */\n    ranges, \n    /**\n    The index of the _main_ range in the selection (which is\n    usually the range that was added last).\n    */\n    mainIndex) {\n        this.ranges = ranges;\n        this.mainIndex = mainIndex;\n    }\n    /**\n    Map a selection through a change. Used to adjust the selection\n    position for changes.\n    */\n    map(change, assoc = -1) {\n        if (change.empty)\n            return this;\n        return EditorSelection.create(this.ranges.map(r => r.map(change, assoc)), this.mainIndex);\n    }\n    /**\n    Compare this selection to another selection. By default, ranges\n    are compared only by position. When `includeAssoc` is true,\n    cursor ranges must also have the same\n    [`assoc`](https://codemirror.net/6/docs/ref/#state.SelectionRange.assoc) value.\n    */\n    eq(other, includeAssoc = false) {\n        if (this.ranges.length != other.ranges.length ||\n            this.mainIndex != other.mainIndex)\n            return false;\n        for (let i = 0; i < this.ranges.length; i++)\n            if (!this.ranges[i].eq(other.ranges[i], includeAssoc))\n                return false;\n        return true;\n    }\n    /**\n    Get the primary selection range. Usually, you should make sure\n    your code applies to _all_ ranges, by using methods like\n    [`changeByRange`](https://codemirror.net/6/docs/ref/#state.EditorState.changeByRange).\n    */\n    get main() { return this.ranges[this.mainIndex]; }\n    /**\n    Make sure the selection only has one range. Returns a selection\n    holding only the main range from this selection.\n    */\n    asSingle() {\n        return this.ranges.length == 1 ? this : new EditorSelection([this.main], 0);\n    }\n    /**\n    Extend this selection with an extra range.\n    */\n    addRange(range, main = true) {\n        return EditorSelection.create([range].concat(this.ranges), main ? 0 : this.mainIndex + 1);\n    }\n    /**\n    Replace a given range with another range, and then normalize the\n    selection to merge and sort ranges if necessary.\n    */\n    replaceRange(range, which = this.mainIndex) {\n        let ranges = this.ranges.slice();\n        ranges[which] = range;\n        return EditorSelection.create(ranges, this.mainIndex);\n    }\n    /**\n    Convert this selection to an object that can be serialized to\n    JSON.\n    */\n    toJSON() {\n        return { ranges: this.ranges.map(r => r.toJSON()), main: this.mainIndex };\n    }\n    /**\n    Create a selection from a JSON representation.\n    */\n    static fromJSON(json) {\n        if (!json || !Array.isArray(json.ranges) || typeof json.main != \"number\" || json.main >= json.ranges.length)\n            throw new RangeError(\"Invalid JSON representation for EditorSelection\");\n        return new EditorSelection(json.ranges.map((r) => SelectionRange.fromJSON(r)), json.main);\n    }\n    /**\n    Create a selection holding a single range.\n    */\n    static single(anchor, head = anchor) {\n        return new EditorSelection([EditorSelection.range(anchor, head)], 0);\n    }\n    /**\n    Sort and merge the given set of ranges, creating a valid\n    selection.\n    */\n    static create(ranges, mainIndex = 0) {\n        if (ranges.length == 0)\n            throw new RangeError(\"A selection needs at least one range\");\n        for (let pos = 0, i = 0; i < ranges.length; i++) {\n            let range = ranges[i];\n            if (range.empty ? range.from <= pos : range.from < pos)\n                return EditorSelection.normalized(ranges.slice(), mainIndex);\n            pos = range.to;\n        }\n        return new EditorSelection(ranges, mainIndex);\n    }\n    /**\n    Create a cursor selection range at the given position. You can\n    safely ignore the optional arguments in most situations.\n    */\n    static cursor(pos, assoc = 0, bidiLevel, goalColumn) {\n        return SelectionRange.create(pos, pos, (assoc == 0 ? 0 : assoc < 0 ? 8 /* RangeFlag.AssocBefore */ : 16 /* RangeFlag.AssocAfter */) |\n            (bidiLevel == null ? 7 : Math.min(6, bidiLevel)) |\n            ((goalColumn !== null && goalColumn !== void 0 ? goalColumn : 16777215 /* RangeFlag.NoGoalColumn */) << 6 /* RangeFlag.GoalColumnOffset */));\n    }\n    /**\n    Create a selection range.\n    */\n    static range(anchor, head, goalColumn, bidiLevel) {\n        let flags = ((goalColumn !== null && goalColumn !== void 0 ? goalColumn : 16777215 /* RangeFlag.NoGoalColumn */) << 6 /* RangeFlag.GoalColumnOffset */) |\n            (bidiLevel == null ? 7 : Math.min(6, bidiLevel));\n        return head < anchor ? SelectionRange.create(head, anchor, 32 /* RangeFlag.Inverted */ | 16 /* RangeFlag.AssocAfter */ | flags)\n            : SelectionRange.create(anchor, head, (head > anchor ? 8 /* RangeFlag.AssocBefore */ : 0) | flags);\n    }\n    /**\n    @internal\n    */\n    static normalized(ranges, mainIndex = 0) {\n        let main = ranges[mainIndex];\n        ranges.sort((a, b) => a.from - b.from);\n        mainIndex = ranges.indexOf(main);\n        for (let i = 1; i < ranges.length; i++) {\n            let range = ranges[i], prev = ranges[i - 1];\n            if (range.empty ? range.from <= prev.to : range.from < prev.to) {\n                let from = prev.from, to = Math.max(range.to, prev.to);\n                if (i <= mainIndex)\n                    mainIndex--;\n                ranges.splice(--i, 2, range.anchor > range.head ? EditorSelection.range(to, from) : EditorSelection.range(from, to));\n            }\n        }\n        return new EditorSelection(ranges, mainIndex);\n    }\n}\nfunction checkSelection(selection, docLength) {\n    for (let range of selection.ranges)\n        if (range.to > docLength)\n            throw new RangeError(\"Selection points outside of document\");\n}\n\nlet nextID = 0;\n/**\nA facet is a labeled value that is associated with an editor\nstate. It takes inputs from any number of extensions, and combines\nthose into a single output value.\n\nExamples of uses of facets are the [tab\nsize](https://codemirror.net/6/docs/ref/#state.EditorState^tabSize), [editor\nattributes](https://codemirror.net/6/docs/ref/#view.EditorView^editorAttributes), and [update\nlisteners](https://codemirror.net/6/docs/ref/#view.EditorView^updateListener).\n\nNote that `Facet` instances can be used anywhere where\n[`FacetReader`](https://codemirror.net/6/docs/ref/#state.FacetReader) is expected.\n*/\nclass Facet {\n    constructor(\n    /**\n    @internal\n    */\n    combine, \n    /**\n    @internal\n    */\n    compareInput, \n    /**\n    @internal\n    */\n    compare, isStatic, enables) {\n        this.combine = combine;\n        this.compareInput = compareInput;\n        this.compare = compare;\n        this.isStatic = isStatic;\n        /**\n        @internal\n        */\n        this.id = nextID++;\n        this.default = combine([]);\n        this.extensions = typeof enables == \"function\" ? enables(this) : enables;\n    }\n    /**\n    Returns a facet reader for this facet, which can be used to\n    [read](https://codemirror.net/6/docs/ref/#state.EditorState.facet) it but not to define values for it.\n    */\n    get reader() { return this; }\n    /**\n    Define a new facet.\n    */\n    static define(config = {}) {\n        return new Facet(config.combine || ((a) => a), config.compareInput || ((a, b) => a === b), config.compare || (!config.combine ? sameArray : (a, b) => a === b), !!config.static, config.enables);\n    }\n    /**\n    Returns an extension that adds the given value to this facet.\n    */\n    of(value) {\n        return new FacetProvider([], this, 0 /* Provider.Static */, value);\n    }\n    /**\n    Create an extension that computes a value for the facet from a\n    state. You must take care to declare the parts of the state that\n    this value depends on, since your function is only called again\n    for a new state when one of those parts changed.\n    \n    In cases where your value depends only on a single field, you'll\n    want to use the [`from`](https://codemirror.net/6/docs/ref/#state.Facet.from) method instead.\n    */\n    compute(deps, get) {\n        if (this.isStatic)\n            throw new Error(\"Can't compute a static facet\");\n        return new FacetProvider(deps, this, 1 /* Provider.Single */, get);\n    }\n    /**\n    Create an extension that computes zero or more values for this\n    facet from a state.\n    */\n    computeN(deps, get) {\n        if (this.isStatic)\n            throw new Error(\"Can't compute a static facet\");\n        return new FacetProvider(deps, this, 2 /* Provider.Multi */, get);\n    }\n    from(field, get) {\n        if (!get)\n            get = x => x;\n        return this.compute([field], state => get(state.field(field)));\n    }\n}\nfunction sameArray(a, b) {\n    return a == b || a.length == b.length && a.every((e, i) => e === b[i]);\n}\nclass FacetProvider {\n    constructor(dependencies, facet, type, value) {\n        this.dependencies = dependencies;\n        this.facet = facet;\n        this.type = type;\n        this.value = value;\n        this.id = nextID++;\n    }\n    dynamicSlot(addresses) {\n        var _a;\n        let getter = this.value;\n        let compare = this.facet.compareInput;\n        let id = this.id, idx = addresses[id] >> 1, multi = this.type == 2 /* Provider.Multi */;\n        let depDoc = false, depSel = false, depAddrs = [];\n        for (let dep of this.dependencies) {\n            if (dep == \"doc\")\n                depDoc = true;\n            else if (dep == \"selection\")\n                depSel = true;\n            else if ((((_a = addresses[dep.id]) !== null && _a !== void 0 ? _a : 1) & 1) == 0)\n                depAddrs.push(addresses[dep.id]);\n        }\n        return {\n            create(state) {\n                state.values[idx] = getter(state);\n                return 1 /* SlotStatus.Changed */;\n            },\n            update(state, tr) {\n                if ((depDoc && tr.docChanged) || (depSel && (tr.docChanged || tr.selection)) || ensureAll(state, depAddrs)) {\n                    let newVal = getter(state);\n                    if (multi ? !compareArray(newVal, state.values[idx], compare) : !compare(newVal, state.values[idx])) {\n                        state.values[idx] = newVal;\n                        return 1 /* SlotStatus.Changed */;\n                    }\n                }\n                return 0;\n            },\n            reconfigure: (state, oldState) => {\n                let newVal, oldAddr = oldState.config.address[id];\n                if (oldAddr != null) {\n                    let oldVal = getAddr(oldState, oldAddr);\n                    if (this.dependencies.every(dep => {\n                        return dep instanceof Facet ? oldState.facet(dep) === state.facet(dep) :\n                            dep instanceof StateField ? oldState.field(dep, false) == state.field(dep, false) : true;\n                    }) || (multi ? compareArray(newVal = getter(state), oldVal, compare) : compare(newVal = getter(state), oldVal))) {\n                        state.values[idx] = oldVal;\n                        return 0;\n                    }\n                }\n                else {\n                    newVal = getter(state);\n                }\n                state.values[idx] = newVal;\n                return 1 /* SlotStatus.Changed */;\n            }\n        };\n    }\n}\nfunction compareArray(a, b, compare) {\n    if (a.length != b.length)\n        return false;\n    for (let i = 0; i < a.length; i++)\n        if (!compare(a[i], b[i]))\n            return false;\n    return true;\n}\nfunction ensureAll(state, addrs) {\n    let changed = false;\n    for (let addr of addrs)\n        if (ensureAddr(state, addr) & 1 /* SlotStatus.Changed */)\n            changed = true;\n    return changed;\n}\nfunction dynamicFacetSlot(addresses, facet, providers) {\n    let providerAddrs = providers.map(p => addresses[p.id]);\n    let providerTypes = providers.map(p => p.type);\n    let dynamic = providerAddrs.filter(p => !(p & 1));\n    let idx = addresses[facet.id] >> 1;\n    function get(state) {\n        let values = [];\n        for (let i = 0; i < providerAddrs.length; i++) {\n            let value = getAddr(state, providerAddrs[i]);\n            if (providerTypes[i] == 2 /* Provider.Multi */)\n                for (let val of value)\n                    values.push(val);\n            else\n                values.push(value);\n        }\n        return facet.combine(values);\n    }\n    return {\n        create(state) {\n            for (let addr of providerAddrs)\n                ensureAddr(state, addr);\n            state.values[idx] = get(state);\n            return 1 /* SlotStatus.Changed */;\n        },\n        update(state, tr) {\n            if (!ensureAll(state, dynamic))\n                return 0;\n            let value = get(state);\n            if (facet.compare(value, state.values[idx]))\n                return 0;\n            state.values[idx] = value;\n            return 1 /* SlotStatus.Changed */;\n        },\n        reconfigure(state, oldState) {\n            let depChanged = ensureAll(state, providerAddrs);\n            let oldProviders = oldState.config.facets[facet.id], oldValue = oldState.facet(facet);\n            if (oldProviders && !depChanged && sameArray(providers, oldProviders)) {\n                state.values[idx] = oldValue;\n                return 0;\n            }\n            let value = get(state);\n            if (facet.compare(value, oldValue)) {\n                state.values[idx] = oldValue;\n                return 0;\n            }\n            state.values[idx] = value;\n            return 1 /* SlotStatus.Changed */;\n        }\n    };\n}\nconst initField = Facet.define({ static: true });\n/**\nFields can store additional information in an editor state, and\nkeep it in sync with the rest of the state.\n*/\nclass StateField {\n    constructor(\n    /**\n    @internal\n    */\n    id, createF, updateF, compareF, \n    /**\n    @internal\n    */\n    spec) {\n        this.id = id;\n        this.createF = createF;\n        this.updateF = updateF;\n        this.compareF = compareF;\n        this.spec = spec;\n        /**\n        @internal\n        */\n        this.provides = undefined;\n    }\n    /**\n    Define a state field.\n    */\n    static define(config) {\n        let field = new StateField(nextID++, config.create, config.update, config.compare || ((a, b) => a === b), config);\n        if (config.provide)\n            field.provides = config.provide(field);\n        return field;\n    }\n    create(state) {\n        let init = state.facet(initField).find(i => i.field == this);\n        return ((init === null || init === void 0 ? void 0 : init.create) || this.createF)(state);\n    }\n    /**\n    @internal\n    */\n    slot(addresses) {\n        let idx = addresses[this.id] >> 1;\n        return {\n            create: (state) => {\n                state.values[idx] = this.create(state);\n                return 1 /* SlotStatus.Changed */;\n            },\n            update: (state, tr) => {\n                let oldVal = state.values[idx];\n                let value = this.updateF(oldVal, tr);\n                if (this.compareF(oldVal, value))\n                    return 0;\n                state.values[idx] = value;\n                return 1 /* SlotStatus.Changed */;\n            },\n            reconfigure: (state, oldState) => {\n                if (oldState.config.address[this.id] != null) {\n                    state.values[idx] = oldState.field(this);\n                    return 0;\n                }\n                state.values[idx] = this.create(state);\n                return 1 /* SlotStatus.Changed */;\n            }\n        };\n    }\n    /**\n    Returns an extension that enables this field and overrides the\n    way it is initialized. Can be useful when you need to provide a\n    non-default starting value for the field.\n    */\n    init(create) {\n        return [this, initField.of({ field: this, create })];\n    }\n    /**\n    State field instances can be used as\n    [`Extension`](https://codemirror.net/6/docs/ref/#state.Extension) values to enable the field in a\n    given state.\n    */\n    get extension() { return this; }\n}\nconst Prec_ = { lowest: 4, low: 3, default: 2, high: 1, highest: 0 };\nfunction prec(value) {\n    return (ext) => new PrecExtension(ext, value);\n}\n/**\nBy default extensions are registered in the order they are found\nin the flattened form of nested array that was provided.\nIndividual extension values can be assigned a precedence to\noverride this. Extensions that do not have a precedence set get\nthe precedence of the nearest parent with a precedence, or\n[`default`](https://codemirror.net/6/docs/ref/#state.Prec.default) if there is no such parent. The\nfinal ordering of extensions is determined by first sorting by\nprecedence and then by order within each precedence.\n*/\nconst Prec = {\n    /**\n    The highest precedence level, for extensions that should end up\n    near the start of the precedence ordering.\n    */\n    highest: prec(Prec_.highest),\n    /**\n    A higher-than-default precedence, for extensions that should\n    come before those with default precedence.\n    */\n    high: prec(Prec_.high),\n    /**\n    The default precedence, which is also used for extensions\n    without an explicit precedence.\n    */\n    default: prec(Prec_.default),\n    /**\n    A lower-than-default precedence.\n    */\n    low: prec(Prec_.low),\n    /**\n    The lowest precedence level. Meant for things that should end up\n    near the end of the extension order.\n    */\n    lowest: prec(Prec_.lowest)\n};\nclass PrecExtension {\n    constructor(inner, prec) {\n        this.inner = inner;\n        this.prec = prec;\n    }\n}\n/**\nExtension compartments can be used to make a configuration\ndynamic. By [wrapping](https://codemirror.net/6/docs/ref/#state.Compartment.of) part of your\nconfiguration in a compartment, you can later\n[replace](https://codemirror.net/6/docs/ref/#state.Compartment.reconfigure) that part through a\ntransaction.\n*/\nclass Compartment {\n    /**\n    Create an instance of this compartment to add to your [state\n    configuration](https://codemirror.net/6/docs/ref/#state.EditorStateConfig.extensions).\n    */\n    of(ext) { return new CompartmentInstance(this, ext); }\n    /**\n    Create an [effect](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects) that\n    reconfigures this compartment.\n    */\n    reconfigure(content) {\n        return Compartment.reconfigure.of({ compartment: this, extension: content });\n    }\n    /**\n    Get the current content of the compartment in the state, or\n    `undefined` if it isn't present.\n    */\n    get(state) {\n        return state.config.compartments.get(this);\n    }\n}\nclass CompartmentInstance {\n    constructor(compartment, inner) {\n        this.compartment = compartment;\n        this.inner = inner;\n    }\n}\nclass Configuration {\n    constructor(base, compartments, dynamicSlots, address, staticValues, facets) {\n        this.base = base;\n        this.compartments = compartments;\n        this.dynamicSlots = dynamicSlots;\n        this.address = address;\n        this.staticValues = staticValues;\n        this.facets = facets;\n        this.statusTemplate = [];\n        while (this.statusTemplate.length < dynamicSlots.length)\n            this.statusTemplate.push(0 /* SlotStatus.Unresolved */);\n    }\n    staticFacet(facet) {\n        let addr = this.address[facet.id];\n        return addr == null ? facet.default : this.staticValues[addr >> 1];\n    }\n    static resolve(base, compartments, oldState) {\n        let fields = [];\n        let facets = Object.create(null);\n        let newCompartments = new Map();\n        for (let ext of flatten(base, compartments, newCompartments)) {\n            if (ext instanceof StateField)\n                fields.push(ext);\n            else\n                (facets[ext.facet.id] || (facets[ext.facet.id] = [])).push(ext);\n        }\n        let address = Object.create(null);\n        let staticValues = [];\n        let dynamicSlots = [];\n        for (let field of fields) {\n            address[field.id] = dynamicSlots.length << 1;\n            dynamicSlots.push(a => field.slot(a));\n        }\n        let oldFacets = oldState === null || oldState === void 0 ? void 0 : oldState.config.facets;\n        for (let id in facets) {\n            let providers = facets[id], facet = providers[0].facet;\n            let oldProviders = oldFacets && oldFacets[id] || [];\n            if (providers.every(p => p.type == 0 /* Provider.Static */)) {\n                address[facet.id] = (staticValues.length << 1) | 1;\n                if (sameArray(oldProviders, providers)) {\n                    staticValues.push(oldState.facet(facet));\n                }\n                else {\n                    let value = facet.combine(providers.map(p => p.value));\n                    staticValues.push(oldState && facet.compare(value, oldState.facet(facet)) ? oldState.facet(facet) : value);\n                }\n            }\n            else {\n                for (let p of providers) {\n                    if (p.type == 0 /* Provider.Static */) {\n                        address[p.id] = (staticValues.length << 1) | 1;\n                        staticValues.push(p.value);\n                    }\n                    else {\n                        address[p.id] = dynamicSlots.length << 1;\n                        dynamicSlots.push(a => p.dynamicSlot(a));\n                    }\n                }\n                address[facet.id] = dynamicSlots.length << 1;\n                dynamicSlots.push(a => dynamicFacetSlot(a, facet, providers));\n            }\n        }\n        let dynamic = dynamicSlots.map(f => f(address));\n        return new Configuration(base, newCompartments, dynamic, address, staticValues, facets);\n    }\n}\nfunction flatten(extension, compartments, newCompartments) {\n    let result = [[], [], [], [], []];\n    let seen = new Map();\n    function inner(ext, prec) {\n        let known = seen.get(ext);\n        if (known != null) {\n            if (known <= prec)\n                return;\n            let found = result[known].indexOf(ext);\n            if (found > -1)\n                result[known].splice(found, 1);\n            if (ext instanceof CompartmentInstance)\n                newCompartments.delete(ext.compartment);\n        }\n        seen.set(ext, prec);\n        if (Array.isArray(ext)) {\n            for (let e of ext)\n                inner(e, prec);\n        }\n        else if (ext instanceof CompartmentInstance) {\n            if (newCompartments.has(ext.compartment))\n                throw new RangeError(`Duplicate use of compartment in extensions`);\n            let content = compartments.get(ext.compartment) || ext.inner;\n            newCompartments.set(ext.compartment, content);\n            inner(content, prec);\n        }\n        else if (ext instanceof PrecExtension) {\n            inner(ext.inner, ext.prec);\n        }\n        else if (ext instanceof StateField) {\n            result[prec].push(ext);\n            if (ext.provides)\n                inner(ext.provides, prec);\n        }\n        else if (ext instanceof FacetProvider) {\n            result[prec].push(ext);\n            if (ext.facet.extensions)\n                inner(ext.facet.extensions, Prec_.default);\n        }\n        else {\n            let content = ext.extension;\n            if (!content)\n                throw new Error(`Unrecognized extension value in extension set (${ext}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);\n            inner(content, prec);\n        }\n    }\n    inner(extension, Prec_.default);\n    return result.reduce((a, b) => a.concat(b));\n}\nfunction ensureAddr(state, addr) {\n    if (addr & 1)\n        return 2 /* SlotStatus.Computed */;\n    let idx = addr >> 1;\n    let status = state.status[idx];\n    if (status == 4 /* SlotStatus.Computing */)\n        throw new Error(\"Cyclic dependency between fields and/or facets\");\n    if (status & 2 /* SlotStatus.Computed */)\n        return status;\n    state.status[idx] = 4 /* SlotStatus.Computing */;\n    let changed = state.computeSlot(state, state.config.dynamicSlots[idx]);\n    return state.status[idx] = 2 /* SlotStatus.Computed */ | changed;\n}\nfunction getAddr(state, addr) {\n    return addr & 1 ? state.config.staticValues[addr >> 1] : state.values[addr >> 1];\n}\n\nconst languageData = Facet.define();\nconst allowMultipleSelections = Facet.define({\n    combine: values => values.some(v => v),\n    static: true\n});\nconst lineSeparator = Facet.define({\n    combine: values => values.length ? values[0] : undefined,\n    static: true\n});\nconst changeFilter = Facet.define();\nconst transactionFilter = Facet.define();\nconst transactionExtender = Facet.define();\nconst readOnly = Facet.define({\n    combine: values => values.length ? values[0] : false\n});\n\n/**\nAnnotations are tagged values that are used to add metadata to\ntransactions in an extensible way. They should be used to model\nthings that effect the entire transaction (such as its [time\nstamp](https://codemirror.net/6/docs/ref/#state.Transaction^time) or information about its\n[origin](https://codemirror.net/6/docs/ref/#state.Transaction^userEvent)). For effects that happen\n_alongside_ the other changes made by the transaction, [state\neffects](https://codemirror.net/6/docs/ref/#state.StateEffect) are more appropriate.\n*/\nclass Annotation {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The annotation type.\n    */\n    type, \n    /**\n    The value of this annotation.\n    */\n    value) {\n        this.type = type;\n        this.value = value;\n    }\n    /**\n    Define a new type of annotation.\n    */\n    static define() { return new AnnotationType(); }\n}\n/**\nMarker that identifies a type of [annotation](https://codemirror.net/6/docs/ref/#state.Annotation).\n*/\nclass AnnotationType {\n    /**\n    Create an instance of this annotation.\n    */\n    of(value) { return new Annotation(this, value); }\n}\n/**\nRepresentation of a type of state effect. Defined with\n[`StateEffect.define`](https://codemirror.net/6/docs/ref/#state.StateEffect^define).\n*/\nclass StateEffectType {\n    /**\n    @internal\n    */\n    constructor(\n    // The `any` types in these function types are there to work\n    // around TypeScript issue #37631, where the type guard on\n    // `StateEffect.is` mysteriously stops working when these properly\n    // have type `Value`.\n    /**\n    @internal\n    */\n    map) {\n        this.map = map;\n    }\n    /**\n    Create a [state effect](https://codemirror.net/6/docs/ref/#state.StateEffect) instance of this\n    type.\n    */\n    of(value) { return new StateEffect(this, value); }\n}\n/**\nState effects can be used to represent additional effects\nassociated with a [transaction](https://codemirror.net/6/docs/ref/#state.Transaction.effects). They\nare often useful to model changes to custom [state\nfields](https://codemirror.net/6/docs/ref/#state.StateField), when those changes aren't implicit in\ndocument or selection changes.\n*/\nclass StateEffect {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    @internal\n    */\n    type, \n    /**\n    The value of this effect.\n    */\n    value) {\n        this.type = type;\n        this.value = value;\n    }\n    /**\n    Map this effect through a position mapping. Will return\n    `undefined` when that ends up deleting the effect.\n    */\n    map(mapping) {\n        let mapped = this.type.map(this.value, mapping);\n        return mapped === undefined ? undefined : mapped == this.value ? this : new StateEffect(this.type, mapped);\n    }\n    /**\n    Tells you whether this effect object is of a given\n    [type](https://codemirror.net/6/docs/ref/#state.StateEffectType).\n    */\n    is(type) { return this.type == type; }\n    /**\n    Define a new effect type. The type parameter indicates the type\n    of values that his effect holds. It should be a type that\n    doesn't include `undefined`, since that is used in\n    [mapping](https://codemirror.net/6/docs/ref/#state.StateEffect.map) to indicate that an effect is\n    removed.\n    */\n    static define(spec = {}) {\n        return new StateEffectType(spec.map || (v => v));\n    }\n    /**\n    Map an array of effects through a change set.\n    */\n    static mapEffects(effects, mapping) {\n        if (!effects.length)\n            return effects;\n        let result = [];\n        for (let effect of effects) {\n            let mapped = effect.map(mapping);\n            if (mapped)\n                result.push(mapped);\n        }\n        return result;\n    }\n}\n/**\nThis effect can be used to reconfigure the root extensions of\nthe editor. Doing this will discard any extensions\n[appended](https://codemirror.net/6/docs/ref/#state.StateEffect^appendConfig), but does not reset\nthe content of [reconfigured](https://codemirror.net/6/docs/ref/#state.Compartment.reconfigure)\ncompartments.\n*/\nStateEffect.reconfigure = StateEffect.define();\n/**\nAppend extensions to the top-level configuration of the editor.\n*/\nStateEffect.appendConfig = StateEffect.define();\n/**\nChanges to the editor state are grouped into transactions.\nTypically, a user action creates a single transaction, which may\ncontain any number of document changes, may change the selection,\nor have other effects. Create a transaction by calling\n[`EditorState.update`](https://codemirror.net/6/docs/ref/#state.EditorState.update), or immediately\ndispatch one by calling\n[`EditorView.dispatch`](https://codemirror.net/6/docs/ref/#view.EditorView.dispatch).\n*/\nclass Transaction {\n    constructor(\n    /**\n    The state from which the transaction starts.\n    */\n    startState, \n    /**\n    The document changes made by this transaction.\n    */\n    changes, \n    /**\n    The selection set by this transaction, or undefined if it\n    doesn't explicitly set a selection.\n    */\n    selection, \n    /**\n    The effects added to the transaction.\n    */\n    effects, \n    /**\n    @internal\n    */\n    annotations, \n    /**\n    Whether the selection should be scrolled into view after this\n    transaction is dispatched.\n    */\n    scrollIntoView) {\n        this.startState = startState;\n        this.changes = changes;\n        this.selection = selection;\n        this.effects = effects;\n        this.annotations = annotations;\n        this.scrollIntoView = scrollIntoView;\n        /**\n        @internal\n        */\n        this._doc = null;\n        /**\n        @internal\n        */\n        this._state = null;\n        if (selection)\n            checkSelection(selection, changes.newLength);\n        if (!annotations.some((a) => a.type == Transaction.time))\n            this.annotations = annotations.concat(Transaction.time.of(Date.now()));\n    }\n    /**\n    @internal\n    */\n    static create(startState, changes, selection, effects, annotations, scrollIntoView) {\n        return new Transaction(startState, changes, selection, effects, annotations, scrollIntoView);\n    }\n    /**\n    The new document produced by the transaction. Contrary to\n    [`.state`](https://codemirror.net/6/docs/ref/#state.Transaction.state)`.doc`, accessing this won't\n    force the entire new state to be computed right away, so it is\n    recommended that [transaction\n    filters](https://codemirror.net/6/docs/ref/#state.EditorState^transactionFilter) use this getter\n    when they need to look at the new document.\n    */\n    get newDoc() {\n        return this._doc || (this._doc = this.changes.apply(this.startState.doc));\n    }\n    /**\n    The new selection produced by the transaction. If\n    [`this.selection`](https://codemirror.net/6/docs/ref/#state.Transaction.selection) is undefined,\n    this will [map](https://codemirror.net/6/docs/ref/#state.EditorSelection.map) the start state's\n    current selection through the changes made by the transaction.\n    */\n    get newSelection() {\n        return this.selection || this.startState.selection.map(this.changes);\n    }\n    /**\n    The new state created by the transaction. Computed on demand\n    (but retained for subsequent access), so it is recommended not to\n    access it in [transaction\n    filters](https://codemirror.net/6/docs/ref/#state.EditorState^transactionFilter) when possible.\n    */\n    get state() {\n        if (!this._state)\n            this.startState.applyTransaction(this);\n        return this._state;\n    }\n    /**\n    Get the value of the given annotation type, if any.\n    */\n    annotation(type) {\n        for (let ann of this.annotations)\n            if (ann.type == type)\n                return ann.value;\n        return undefined;\n    }\n    /**\n    Indicates whether the transaction changed the document.\n    */\n    get docChanged() { return !this.changes.empty; }\n    /**\n    Indicates whether this transaction reconfigures the state\n    (through a [configuration compartment](https://codemirror.net/6/docs/ref/#state.Compartment) or\n    with a top-level configuration\n    [effect](https://codemirror.net/6/docs/ref/#state.StateEffect^reconfigure).\n    */\n    get reconfigured() { return this.startState.config != this.state.config; }\n    /**\n    Returns true if the transaction has a [user\n    event](https://codemirror.net/6/docs/ref/#state.Transaction^userEvent) annotation that is equal to\n    or more specific than `event`. For example, if the transaction\n    has `\"select.pointer\"` as user event, `\"select\"` and\n    `\"select.pointer\"` will match it.\n    */\n    isUserEvent(event) {\n        let e = this.annotation(Transaction.userEvent);\n        return !!(e && (e == event || e.length > event.length && e.slice(0, event.length) == event && e[event.length] == \".\"));\n    }\n}\n/**\nAnnotation used to store transaction timestamps. Automatically\nadded to every transaction, holding `Date.now()`.\n*/\nTransaction.time = Annotation.define();\n/**\nAnnotation used to associate a transaction with a user interface\nevent. Holds a string identifying the event, using a\ndot-separated format to support attaching more specific\ninformation. The events used by the core libraries are:\n\n - `\"input\"` when content is entered\n   - `\"input.type\"` for typed input\n     - `\"input.type.compose\"` for composition\n   - `\"input.paste\"` for pasted input\n   - `\"input.drop\"` when adding content with drag-and-drop\n   - `\"input.complete\"` when autocompleting\n - `\"delete\"` when the user deletes content\n   - `\"delete.selection\"` when deleting the selection\n   - `\"delete.forward\"` when deleting forward from the selection\n   - `\"delete.backward\"` when deleting backward from the selection\n   - `\"delete.cut\"` when cutting to the clipboard\n - `\"move\"` when content is moved\n   - `\"move.drop\"` when content is moved within the editor through drag-and-drop\n - `\"select\"` when explicitly changing the selection\n   - `\"select.pointer\"` when selecting with a mouse or other pointing device\n - `\"undo\"` and `\"redo\"` for history actions\n\nUse [`isUserEvent`](https://codemirror.net/6/docs/ref/#state.Transaction.isUserEvent) to check\nwhether the annotation matches a given event.\n*/\nTransaction.userEvent = Annotation.define();\n/**\nAnnotation indicating whether a transaction should be added to\nthe undo history or not.\n*/\nTransaction.addToHistory = Annotation.define();\n/**\nAnnotation indicating (when present and true) that a transaction\nrepresents a change made by some other actor, not the user. This\nis used, for example, to tag other people's changes in\ncollaborative editing.\n*/\nTransaction.remote = Annotation.define();\nfunction joinRanges(a, b) {\n    let result = [];\n    for (let iA = 0, iB = 0;;) {\n        let from, to;\n        if (iA < a.length && (iB == b.length || b[iB] >= a[iA])) {\n            from = a[iA++];\n            to = a[iA++];\n        }\n        else if (iB < b.length) {\n            from = b[iB++];\n            to = b[iB++];\n        }\n        else\n            return result;\n        if (!result.length || result[result.length - 1] < from)\n            result.push(from, to);\n        else if (result[result.length - 1] < to)\n            result[result.length - 1] = to;\n    }\n}\nfunction mergeTransaction(a, b, sequential) {\n    var _a;\n    let mapForA, mapForB, changes;\n    if (sequential) {\n        mapForA = b.changes;\n        mapForB = ChangeSet.empty(b.changes.length);\n        changes = a.changes.compose(b.changes);\n    }\n    else {\n        mapForA = b.changes.map(a.changes);\n        mapForB = a.changes.mapDesc(b.changes, true);\n        changes = a.changes.compose(mapForA);\n    }\n    return {\n        changes,\n        selection: b.selection ? b.selection.map(mapForB) : (_a = a.selection) === null || _a === void 0 ? void 0 : _a.map(mapForA),\n        effects: StateEffect.mapEffects(a.effects, mapForA).concat(StateEffect.mapEffects(b.effects, mapForB)),\n        annotations: a.annotations.length ? a.annotations.concat(b.annotations) : b.annotations,\n        scrollIntoView: a.scrollIntoView || b.scrollIntoView\n    };\n}\nfunction resolveTransactionInner(state, spec, docSize) {\n    let sel = spec.selection, annotations = asArray(spec.annotations);\n    if (spec.userEvent)\n        annotations = annotations.concat(Transaction.userEvent.of(spec.userEvent));\n    return {\n        changes: spec.changes instanceof ChangeSet ? spec.changes\n            : ChangeSet.of(spec.changes || [], docSize, state.facet(lineSeparator)),\n        selection: sel && (sel instanceof EditorSelection ? sel : EditorSelection.single(sel.anchor, sel.head)),\n        effects: asArray(spec.effects),\n        annotations,\n        scrollIntoView: !!spec.scrollIntoView\n    };\n}\nfunction resolveTransaction(state, specs, filter) {\n    let s = resolveTransactionInner(state, specs.length ? specs[0] : {}, state.doc.length);\n    if (specs.length && specs[0].filter === false)\n        filter = false;\n    for (let i = 1; i < specs.length; i++) {\n        if (specs[i].filter === false)\n            filter = false;\n        let seq = !!specs[i].sequential;\n        s = mergeTransaction(s, resolveTransactionInner(state, specs[i], seq ? s.changes.newLength : state.doc.length), seq);\n    }\n    let tr = Transaction.create(state, s.changes, s.selection, s.effects, s.annotations, s.scrollIntoView);\n    return extendTransaction(filter ? filterTransaction(tr) : tr);\n}\n// Finish a transaction by applying filters if necessary.\nfunction filterTransaction(tr) {\n    let state = tr.startState;\n    // Change filters\n    let result = true;\n    for (let filter of state.facet(changeFilter)) {\n        let value = filter(tr);\n        if (value === false) {\n            result = false;\n            break;\n        }\n        if (Array.isArray(value))\n            result = result === true ? value : joinRanges(result, value);\n    }\n    if (result !== true) {\n        let changes, back;\n        if (result === false) {\n            back = tr.changes.invertedDesc;\n            changes = ChangeSet.empty(state.doc.length);\n        }\n        else {\n            let filtered = tr.changes.filter(result);\n            changes = filtered.changes;\n            back = filtered.filtered.mapDesc(filtered.changes).invertedDesc;\n        }\n        tr = Transaction.create(state, changes, tr.selection && tr.selection.map(back), StateEffect.mapEffects(tr.effects, back), tr.annotations, tr.scrollIntoView);\n    }\n    // Transaction filters\n    let filters = state.facet(transactionFilter);\n    for (let i = filters.length - 1; i >= 0; i--) {\n        let filtered = filters[i](tr);\n        if (filtered instanceof Transaction)\n            tr = filtered;\n        else if (Array.isArray(filtered) && filtered.length == 1 && filtered[0] instanceof Transaction)\n            tr = filtered[0];\n        else\n            tr = resolveTransaction(state, asArray(filtered), false);\n    }\n    return tr;\n}\nfunction extendTransaction(tr) {\n    let state = tr.startState, extenders = state.facet(transactionExtender), spec = tr;\n    for (let i = extenders.length - 1; i >= 0; i--) {\n        let extension = extenders[i](tr);\n        if (extension && Object.keys(extension).length)\n            spec = mergeTransaction(spec, resolveTransactionInner(state, extension, tr.changes.newLength), true);\n    }\n    return spec == tr ? tr : Transaction.create(state, tr.changes, tr.selection, spec.effects, spec.annotations, spec.scrollIntoView);\n}\nconst none = [];\nfunction asArray(value) {\n    return value == null ? none : Array.isArray(value) ? value : [value];\n}\n\n/**\nThe categories produced by a [character\ncategorizer](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer). These are used\ndo things like selecting by word.\n*/\nexports.CharCategory = void 0;\n(function (CharCategory) {\n    /**\n    Word characters.\n    */\n    CharCategory[CharCategory[\"Word\"] = 0] = \"Word\";\n    /**\n    Whitespace.\n    */\n    CharCategory[CharCategory[\"Space\"] = 1] = \"Space\";\n    /**\n    Anything else.\n    */\n    CharCategory[CharCategory[\"Other\"] = 2] = \"Other\";\n})(exports.CharCategory || (exports.CharCategory = {}));\nconst nonASCIISingleCaseWordChar = /[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\nlet wordChar;\ntry {\n    wordChar = new RegExp(\"[\\\\p{Alphabetic}\\\\p{Number}_]\", \"u\");\n}\ncatch (_) { }\nfunction hasWordChar(str) {\n    if (wordChar)\n        return wordChar.test(str);\n    for (let i = 0; i < str.length; i++) {\n        let ch = str[i];\n        if (/\\w/.test(ch) || ch > \"\\x80\" && (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)))\n            return true;\n    }\n    return false;\n}\nfunction makeCategorizer(wordChars) {\n    return (char) => {\n        if (!/\\S/.test(char))\n            return exports.CharCategory.Space;\n        if (hasWordChar(char))\n            return exports.CharCategory.Word;\n        for (let i = 0; i < wordChars.length; i++)\n            if (char.indexOf(wordChars[i]) > -1)\n                return exports.CharCategory.Word;\n        return exports.CharCategory.Other;\n    };\n}\n\n/**\nThe editor state class is a persistent (immutable) data structure.\nTo update a state, you [create](https://codemirror.net/6/docs/ref/#state.EditorState.update) a\n[transaction](https://codemirror.net/6/docs/ref/#state.Transaction), which produces a _new_ state\ninstance, without modifying the original object.\n\nAs such, _never_ mutate properties of a state directly. That'll\njust break things.\n*/\nclass EditorState {\n    constructor(\n    /**\n    @internal\n    */\n    config, \n    /**\n    The current document.\n    */\n    doc, \n    /**\n    The current selection.\n    */\n    selection, \n    /**\n    @internal\n    */\n    values, computeSlot, tr) {\n        this.config = config;\n        this.doc = doc;\n        this.selection = selection;\n        this.values = values;\n        this.status = config.statusTemplate.slice();\n        this.computeSlot = computeSlot;\n        // Fill in the computed state immediately, so that further queries\n        // for it made during the update return this state\n        if (tr)\n            tr._state = this;\n        for (let i = 0; i < this.config.dynamicSlots.length; i++)\n            ensureAddr(this, i << 1);\n        this.computeSlot = null;\n    }\n    field(field, require = true) {\n        let addr = this.config.address[field.id];\n        if (addr == null) {\n            if (require)\n                throw new RangeError(\"Field is not present in this state\");\n            return undefined;\n        }\n        ensureAddr(this, addr);\n        return getAddr(this, addr);\n    }\n    /**\n    Create a [transaction](https://codemirror.net/6/docs/ref/#state.Transaction) that updates this\n    state. Any number of [transaction specs](https://codemirror.net/6/docs/ref/#state.TransactionSpec)\n    can be passed. Unless\n    [`sequential`](https://codemirror.net/6/docs/ref/#state.TransactionSpec.sequential) is set, the\n    [changes](https://codemirror.net/6/docs/ref/#state.TransactionSpec.changes) (if any) of each spec\n    are assumed to start in the _current_ document (not the document\n    produced by previous specs), and its\n    [selection](https://codemirror.net/6/docs/ref/#state.TransactionSpec.selection) and\n    [effects](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects) are assumed to refer\n    to the document created by its _own_ changes. The resulting\n    transaction contains the combined effect of all the different\n    specs. For [selection](https://codemirror.net/6/docs/ref/#state.TransactionSpec.selection), later\n    specs take precedence over earlier ones.\n    */\n    update(...specs) {\n        return resolveTransaction(this, specs, true);\n    }\n    /**\n    @internal\n    */\n    applyTransaction(tr) {\n        let conf = this.config, { base, compartments } = conf;\n        for (let effect of tr.effects) {\n            if (effect.is(Compartment.reconfigure)) {\n                if (conf) {\n                    compartments = new Map;\n                    conf.compartments.forEach((val, key) => compartments.set(key, val));\n                    conf = null;\n                }\n                compartments.set(effect.value.compartment, effect.value.extension);\n            }\n            else if (effect.is(StateEffect.reconfigure)) {\n                conf = null;\n                base = effect.value;\n            }\n            else if (effect.is(StateEffect.appendConfig)) {\n                conf = null;\n                base = asArray(base).concat(effect.value);\n            }\n        }\n        let startValues;\n        if (!conf) {\n            conf = Configuration.resolve(base, compartments, this);\n            let intermediateState = new EditorState(conf, this.doc, this.selection, conf.dynamicSlots.map(() => null), (state, slot) => slot.reconfigure(state, this), null);\n            startValues = intermediateState.values;\n        }\n        else {\n            startValues = tr.startState.values.slice();\n        }\n        let selection = tr.startState.facet(allowMultipleSelections) ? tr.newSelection : tr.newSelection.asSingle();\n        new EditorState(conf, tr.newDoc, selection, startValues, (state, slot) => slot.update(state, tr), tr);\n    }\n    /**\n    Create a [transaction spec](https://codemirror.net/6/docs/ref/#state.TransactionSpec) that\n    replaces every selection range with the given content.\n    */\n    replaceSelection(text) {\n        if (typeof text == \"string\")\n            text = this.toText(text);\n        return this.changeByRange(range => ({ changes: { from: range.from, to: range.to, insert: text },\n            range: EditorSelection.cursor(range.from + text.length) }));\n    }\n    /**\n    Create a set of changes and a new selection by running the given\n    function for each range in the active selection. The function\n    can return an optional set of changes (in the coordinate space\n    of the start document), plus an updated range (in the coordinate\n    space of the document produced by the call's own changes). This\n    method will merge all the changes and ranges into a single\n    changeset and selection, and return it as a [transaction\n    spec](https://codemirror.net/6/docs/ref/#state.TransactionSpec), which can be passed to\n    [`update`](https://codemirror.net/6/docs/ref/#state.EditorState.update).\n    */\n    changeByRange(f) {\n        let sel = this.selection;\n        let result1 = f(sel.ranges[0]);\n        let changes = this.changes(result1.changes), ranges = [result1.range];\n        let effects = asArray(result1.effects);\n        for (let i = 1; i < sel.ranges.length; i++) {\n            let result = f(sel.ranges[i]);\n            let newChanges = this.changes(result.changes), newMapped = newChanges.map(changes);\n            for (let j = 0; j < i; j++)\n                ranges[j] = ranges[j].map(newMapped);\n            let mapBy = changes.mapDesc(newChanges, true);\n            ranges.push(result.range.map(mapBy));\n            changes = changes.compose(newMapped);\n            effects = StateEffect.mapEffects(effects, newMapped).concat(StateEffect.mapEffects(asArray(result.effects), mapBy));\n        }\n        return {\n            changes,\n            selection: EditorSelection.create(ranges, sel.mainIndex),\n            effects\n        };\n    }\n    /**\n    Create a [change set](https://codemirror.net/6/docs/ref/#state.ChangeSet) from the given change\n    description, taking the state's document length and line\n    separator into account.\n    */\n    changes(spec = []) {\n        if (spec instanceof ChangeSet)\n            return spec;\n        return ChangeSet.of(spec, this.doc.length, this.facet(EditorState.lineSeparator));\n    }\n    /**\n    Using the state's [line\n    separator](https://codemirror.net/6/docs/ref/#state.EditorState^lineSeparator), create a\n    [`Text`](https://codemirror.net/6/docs/ref/#state.Text) instance from the given string.\n    */\n    toText(string) {\n        return Text.of(string.split(this.facet(EditorState.lineSeparator) || DefaultSplit));\n    }\n    /**\n    Return the given range of the document as a string.\n    */\n    sliceDoc(from = 0, to = this.doc.length) {\n        return this.doc.sliceString(from, to, this.lineBreak);\n    }\n    /**\n    Get the value of a state [facet](https://codemirror.net/6/docs/ref/#state.Facet).\n    */\n    facet(facet) {\n        let addr = this.config.address[facet.id];\n        if (addr == null)\n            return facet.default;\n        ensureAddr(this, addr);\n        return getAddr(this, addr);\n    }\n    /**\n    Convert this state to a JSON-serializable object. When custom\n    fields should be serialized, you can pass them in as an object\n    mapping property names (in the resulting object, which should\n    not use `doc` or `selection`) to fields.\n    */\n    toJSON(fields) {\n        let result = {\n            doc: this.sliceDoc(),\n            selection: this.selection.toJSON()\n        };\n        if (fields)\n            for (let prop in fields) {\n                let value = fields[prop];\n                if (value instanceof StateField && this.config.address[value.id] != null)\n                    result[prop] = value.spec.toJSON(this.field(fields[prop]), this);\n            }\n        return result;\n    }\n    /**\n    Deserialize a state from its JSON representation. When custom\n    fields should be deserialized, pass the same object you passed\n    to [`toJSON`](https://codemirror.net/6/docs/ref/#state.EditorState.toJSON) when serializing as\n    third argument.\n    */\n    static fromJSON(json, config = {}, fields) {\n        if (!json || typeof json.doc != \"string\")\n            throw new RangeError(\"Invalid JSON representation for EditorState\");\n        let fieldInit = [];\n        if (fields)\n            for (let prop in fields) {\n                if (Object.prototype.hasOwnProperty.call(json, prop)) {\n                    let field = fields[prop], value = json[prop];\n                    fieldInit.push(field.init(state => field.spec.fromJSON(value, state)));\n                }\n            }\n        return EditorState.create({\n            doc: json.doc,\n            selection: EditorSelection.fromJSON(json.selection),\n            extensions: config.extensions ? fieldInit.concat([config.extensions]) : fieldInit\n        });\n    }\n    /**\n    Create a new state. You'll usually only need this when\n    initializing an editor—updated states are created by applying\n    transactions.\n    */\n    static create(config = {}) {\n        let configuration = Configuration.resolve(config.extensions || [], new Map);\n        let doc = config.doc instanceof Text ? config.doc\n            : Text.of((config.doc || \"\").split(configuration.staticFacet(EditorState.lineSeparator) || DefaultSplit));\n        let selection = !config.selection ? EditorSelection.single(0)\n            : config.selection instanceof EditorSelection ? config.selection\n                : EditorSelection.single(config.selection.anchor, config.selection.head);\n        checkSelection(selection, doc.length);\n        if (!configuration.staticFacet(allowMultipleSelections))\n            selection = selection.asSingle();\n        return new EditorState(configuration, doc, selection, configuration.dynamicSlots.map(() => null), (state, slot) => slot.create(state), null);\n    }\n    /**\n    The size (in columns) of a tab in the document, determined by\n    the [`tabSize`](https://codemirror.net/6/docs/ref/#state.EditorState^tabSize) facet.\n    */\n    get tabSize() { return this.facet(EditorState.tabSize); }\n    /**\n    Get the proper [line-break](https://codemirror.net/6/docs/ref/#state.EditorState^lineSeparator)\n    string for this state.\n    */\n    get lineBreak() { return this.facet(EditorState.lineSeparator) || \"\\n\"; }\n    /**\n    Returns true when the editor is\n    [configured](https://codemirror.net/6/docs/ref/#state.EditorState^readOnly) to be read-only.\n    */\n    get readOnly() { return this.facet(readOnly); }\n    /**\n    Look up a translation for the given phrase (via the\n    [`phrases`](https://codemirror.net/6/docs/ref/#state.EditorState^phrases) facet), or return the\n    original string if no translation is found.\n    \n    If additional arguments are passed, they will be inserted in\n    place of markers like `$1` (for the first value) and `$2`, etc.\n    A single `$` is equivalent to `$1`, and `$$` will produce a\n    literal dollar sign.\n    */\n    phrase(phrase, ...insert) {\n        for (let map of this.facet(EditorState.phrases))\n            if (Object.prototype.hasOwnProperty.call(map, phrase)) {\n                phrase = map[phrase];\n                break;\n            }\n        if (insert.length)\n            phrase = phrase.replace(/\\$(\\$|\\d*)/g, (m, i) => {\n                if (i == \"$\")\n                    return \"$\";\n                let n = +(i || 1);\n                return !n || n > insert.length ? m : insert[n - 1];\n            });\n        return phrase;\n    }\n    /**\n    Find the values for a given language data field, provided by the\n    the [`languageData`](https://codemirror.net/6/docs/ref/#state.EditorState^languageData) facet.\n    \n    Examples of language data fields are...\n    \n    - [`\"commentTokens\"`](https://codemirror.net/6/docs/ref/#commands.CommentTokens) for specifying\n      comment syntax.\n    - [`\"autocomplete\"`](https://codemirror.net/6/docs/ref/#autocomplete.autocompletion^config.override)\n      for providing language-specific completion sources.\n    - [`\"wordChars\"`](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer) for adding\n      characters that should be considered part of words in this\n      language.\n    - [`\"closeBrackets\"`](https://codemirror.net/6/docs/ref/#autocomplete.CloseBracketConfig) controls\n      bracket closing behavior.\n    */\n    languageDataAt(name, pos, side = -1) {\n        let values = [];\n        for (let provider of this.facet(languageData)) {\n            for (let result of provider(this, pos, side)) {\n                if (Object.prototype.hasOwnProperty.call(result, name))\n                    values.push(result[name]);\n            }\n        }\n        return values;\n    }\n    /**\n    Return a function that can categorize strings (expected to\n    represent a single [grapheme cluster](https://codemirror.net/6/docs/ref/#state.findClusterBreak))\n    into one of:\n    \n     - Word (contains an alphanumeric character or a character\n       explicitly listed in the local language's `\"wordChars\"`\n       language data, which should be a string)\n     - Space (contains only whitespace)\n     - Other (anything else)\n    */\n    charCategorizer(at) {\n        return makeCategorizer(this.languageDataAt(\"wordChars\", at).join(\"\"));\n    }\n    /**\n    Find the word at the given position, meaning the range\n    containing all [word](https://codemirror.net/6/docs/ref/#state.CharCategory.Word) characters\n    around it. If no word characters are adjacent to the position,\n    this returns null.\n    */\n    wordAt(pos) {\n        let { text, from, length } = this.doc.lineAt(pos);\n        let cat = this.charCategorizer(pos);\n        let start = pos - from, end = pos - from;\n        while (start > 0) {\n            let prev = findClusterBreak(text, start, false);\n            if (cat(text.slice(prev, start)) != exports.CharCategory.Word)\n                break;\n            start = prev;\n        }\n        while (end < length) {\n            let next = findClusterBreak(text, end);\n            if (cat(text.slice(end, next)) != exports.CharCategory.Word)\n                break;\n            end = next;\n        }\n        return start == end ? null : EditorSelection.range(start + from, end + from);\n    }\n}\n/**\nA facet that, when enabled, causes the editor to allow multiple\nranges to be selected. Be careful though, because by default the\neditor relies on the native DOM selection, which cannot handle\nmultiple selections. An extension like\n[`drawSelection`](https://codemirror.net/6/docs/ref/#view.drawSelection) can be used to make\nsecondary selections visible to the user.\n*/\nEditorState.allowMultipleSelections = allowMultipleSelections;\n/**\nConfigures the tab size to use in this state. The first\n(highest-precedence) value of the facet is used. If no value is\ngiven, this defaults to 4.\n*/\nEditorState.tabSize = Facet.define({\n    combine: values => values.length ? values[0] : 4\n});\n/**\nThe line separator to use. By default, any of `\"\\n\"`, `\"\\r\\n\"`\nand `\"\\r\"` is treated as a separator when splitting lines, and\nlines are joined with `\"\\n\"`.\n\nWhen you configure a value here, only that precise separator\nwill be used, allowing you to round-trip documents through the\neditor without normalizing line separators.\n*/\nEditorState.lineSeparator = lineSeparator;\n/**\nThis facet controls the value of the\n[`readOnly`](https://codemirror.net/6/docs/ref/#state.EditorState.readOnly) getter, which is\nconsulted by commands and extensions that implement editing\nfunctionality to determine whether they should apply. It\ndefaults to false, but when its highest-precedence value is\n`true`, such functionality disables itself.\n\nNot to be confused with\n[`EditorView.editable`](https://codemirror.net/6/docs/ref/#view.EditorView^editable), which\ncontrols whether the editor's DOM is set to be editable (and\nthus focusable).\n*/\nEditorState.readOnly = readOnly;\n/**\nRegisters translation phrases. The\n[`phrase`](https://codemirror.net/6/docs/ref/#state.EditorState.phrase) method will look through\nall objects registered with this facet to find translations for\nits argument.\n*/\nEditorState.phrases = Facet.define({\n    compare(a, b) {\n        let kA = Object.keys(a), kB = Object.keys(b);\n        return kA.length == kB.length && kA.every(k => a[k] == b[k]);\n    }\n});\n/**\nA facet used to register [language\ndata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt) providers.\n*/\nEditorState.languageData = languageData;\n/**\nFacet used to register change filters, which are called for each\ntransaction (unless explicitly\n[disabled](https://codemirror.net/6/docs/ref/#state.TransactionSpec.filter)), and can suppress\npart of the transaction's changes.\n\nSuch a function can return `true` to indicate that it doesn't\nwant to do anything, `false` to completely stop the changes in\nthe transaction, or a set of ranges in which changes should be\nsuppressed. Such ranges are represented as an array of numbers,\nwith each pair of two numbers indicating the start and end of a\nrange. So for example `[10, 20, 100, 110]` suppresses changes\nbetween 10 and 20, and between 100 and 110.\n*/\nEditorState.changeFilter = changeFilter;\n/**\nFacet used to register a hook that gets a chance to update or\nreplace transaction specs before they are applied. This will\nonly be applied for transactions that don't have\n[`filter`](https://codemirror.net/6/docs/ref/#state.TransactionSpec.filter) set to `false`. You\ncan either return a single transaction spec (possibly the input\ntransaction), or an array of specs (which will be combined in\nthe same way as the arguments to\n[`EditorState.update`](https://codemirror.net/6/docs/ref/#state.EditorState.update)).\n\nWhen possible, it is recommended to avoid accessing\n[`Transaction.state`](https://codemirror.net/6/docs/ref/#state.Transaction.state) in a filter,\nsince it will force creation of a state that will then be\ndiscarded again, if the transaction is actually filtered.\n\n(This functionality should be used with care. Indiscriminately\nmodifying transaction is likely to break something or degrade\nthe user experience.)\n*/\nEditorState.transactionFilter = transactionFilter;\n/**\nThis is a more limited form of\n[`transactionFilter`](https://codemirror.net/6/docs/ref/#state.EditorState^transactionFilter),\nwhich can only add\n[annotations](https://codemirror.net/6/docs/ref/#state.TransactionSpec.annotations) and\n[effects](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects). _But_, this type\nof filter runs even if the transaction has disabled regular\n[filtering](https://codemirror.net/6/docs/ref/#state.TransactionSpec.filter), making it suitable\nfor effects that don't need to touch the changes or selection,\nbut do want to process every transaction.\n\nExtenders run _after_ filters, when both are present.\n*/\nEditorState.transactionExtender = transactionExtender;\nCompartment.reconfigure = StateEffect.define();\n\n/**\nUtility function for combining behaviors to fill in a config\nobject from an array of provided configs. `defaults` should hold\ndefault values for all optional fields in `Config`.\n\nThe function will, by default, error\nwhen a field gets two values that aren't `===`-equal, but you can\nprovide combine functions per field to do something else.\n*/\nfunction combineConfig(configs, defaults, // Should hold only the optional properties of Config, but I haven't managed to express that\ncombine = {}) {\n    let result = {};\n    for (let config of configs)\n        for (let key of Object.keys(config)) {\n            let value = config[key], current = result[key];\n            if (current === undefined)\n                result[key] = value;\n            else if (current === value || value === undefined) ; // No conflict\n            else if (Object.hasOwnProperty.call(combine, key))\n                result[key] = combine[key](current, value);\n            else\n                throw new Error(\"Config merge conflict for field \" + key);\n        }\n    for (let key in defaults)\n        if (result[key] === undefined)\n            result[key] = defaults[key];\n    return result;\n}\n\n/**\nEach range is associated with a value, which must inherit from\nthis class.\n*/\nclass RangeValue {\n    /**\n    Compare this value with another value. Used when comparing\n    rangesets. The default implementation compares by identity.\n    Unless you are only creating a fixed number of unique instances\n    of your value type, it is a good idea to implement this\n    properly.\n    */\n    eq(other) { return this == other; }\n    /**\n    Create a [range](https://codemirror.net/6/docs/ref/#state.Range) with this value.\n    */\n    range(from, to = from) { return Range.create(from, to, this); }\n}\nRangeValue.prototype.startSide = RangeValue.prototype.endSide = 0;\nRangeValue.prototype.point = false;\nRangeValue.prototype.mapMode = exports.MapMode.TrackDel;\n/**\nA range associates a value with a range of positions.\n*/\nclass Range {\n    constructor(\n    /**\n    The range's start position.\n    */\n    from, \n    /**\n    Its end position.\n    */\n    to, \n    /**\n    The value associated with this range.\n    */\n    value) {\n        this.from = from;\n        this.to = to;\n        this.value = value;\n    }\n    /**\n    @internal\n    */\n    static create(from, to, value) {\n        return new Range(from, to, value);\n    }\n}\nfunction cmpRange(a, b) {\n    return a.from - b.from || a.value.startSide - b.value.startSide;\n}\nclass Chunk {\n    constructor(from, to, value, \n    // Chunks are marked with the largest point that occurs\n    // in them (or -1 for no points), so that scans that are\n    // only interested in points (such as the\n    // heightmap-related logic) can skip range-only chunks.\n    maxPoint) {\n        this.from = from;\n        this.to = to;\n        this.value = value;\n        this.maxPoint = maxPoint;\n    }\n    get length() { return this.to[this.to.length - 1]; }\n    // Find the index of the given position and side. Use the ranges'\n    // `from` pos when `end == false`, `to` when `end == true`.\n    findIndex(pos, side, end, startAt = 0) {\n        let arr = end ? this.to : this.from;\n        for (let lo = startAt, hi = arr.length;;) {\n            if (lo == hi)\n                return lo;\n            let mid = (lo + hi) >> 1;\n            let diff = arr[mid] - pos || (end ? this.value[mid].endSide : this.value[mid].startSide) - side;\n            if (mid == lo)\n                return diff >= 0 ? lo : hi;\n            if (diff >= 0)\n                hi = mid;\n            else\n                lo = mid + 1;\n        }\n    }\n    between(offset, from, to, f) {\n        for (let i = this.findIndex(from, -1000000000 /* C.Far */, true), e = this.findIndex(to, 1000000000 /* C.Far */, false, i); i < e; i++)\n            if (f(this.from[i] + offset, this.to[i] + offset, this.value[i]) === false)\n                return false;\n    }\n    map(offset, changes) {\n        let value = [], from = [], to = [], newPos = -1, maxPoint = -1;\n        for (let i = 0; i < this.value.length; i++) {\n            let val = this.value[i], curFrom = this.from[i] + offset, curTo = this.to[i] + offset, newFrom, newTo;\n            if (curFrom == curTo) {\n                let mapped = changes.mapPos(curFrom, val.startSide, val.mapMode);\n                if (mapped == null)\n                    continue;\n                newFrom = newTo = mapped;\n                if (val.startSide != val.endSide) {\n                    newTo = changes.mapPos(curFrom, val.endSide);\n                    if (newTo < newFrom)\n                        continue;\n                }\n            }\n            else {\n                newFrom = changes.mapPos(curFrom, val.startSide);\n                newTo = changes.mapPos(curTo, val.endSide);\n                if (newFrom > newTo || newFrom == newTo && val.startSide > 0 && val.endSide <= 0)\n                    continue;\n            }\n            if ((newTo - newFrom || val.endSide - val.startSide) < 0)\n                continue;\n            if (newPos < 0)\n                newPos = newFrom;\n            if (val.point)\n                maxPoint = Math.max(maxPoint, newTo - newFrom);\n            value.push(val);\n            from.push(newFrom - newPos);\n            to.push(newTo - newPos);\n        }\n        return { mapped: value.length ? new Chunk(from, to, value, maxPoint) : null, pos: newPos };\n    }\n}\n/**\nA range set stores a collection of [ranges](https://codemirror.net/6/docs/ref/#state.Range) in a\nway that makes them efficient to [map](https://codemirror.net/6/docs/ref/#state.RangeSet.map) and\n[update](https://codemirror.net/6/docs/ref/#state.RangeSet.update). This is an immutable data\nstructure.\n*/\nclass RangeSet {\n    constructor(\n    /**\n    @internal\n    */\n    chunkPos, \n    /**\n    @internal\n    */\n    chunk, \n    /**\n    @internal\n    */\n    nextLayer, \n    /**\n    @internal\n    */\n    maxPoint) {\n        this.chunkPos = chunkPos;\n        this.chunk = chunk;\n        this.nextLayer = nextLayer;\n        this.maxPoint = maxPoint;\n    }\n    /**\n    @internal\n    */\n    static create(chunkPos, chunk, nextLayer, maxPoint) {\n        return new RangeSet(chunkPos, chunk, nextLayer, maxPoint);\n    }\n    /**\n    @internal\n    */\n    get length() {\n        let last = this.chunk.length - 1;\n        return last < 0 ? 0 : Math.max(this.chunkEnd(last), this.nextLayer.length);\n    }\n    /**\n    The number of ranges in the set.\n    */\n    get size() {\n        if (this.isEmpty)\n            return 0;\n        let size = this.nextLayer.size;\n        for (let chunk of this.chunk)\n            size += chunk.value.length;\n        return size;\n    }\n    /**\n    @internal\n    */\n    chunkEnd(index) {\n        return this.chunkPos[index] + this.chunk[index].length;\n    }\n    /**\n    Update the range set, optionally adding new ranges or filtering\n    out existing ones.\n    \n    (Note: The type parameter is just there as a kludge to work\n    around TypeScript variance issues that prevented `RangeSet<X>`\n    from being a subtype of `RangeSet<Y>` when `X` is a subtype of\n    `Y`.)\n    */\n    update(updateSpec) {\n        let { add = [], sort = false, filterFrom = 0, filterTo = this.length } = updateSpec;\n        let filter = updateSpec.filter;\n        if (add.length == 0 && !filter)\n            return this;\n        if (sort)\n            add = add.slice().sort(cmpRange);\n        if (this.isEmpty)\n            return add.length ? RangeSet.of(add) : this;\n        let cur = new LayerCursor(this, null, -1).goto(0), i = 0, spill = [];\n        let builder = new RangeSetBuilder();\n        while (cur.value || i < add.length) {\n            if (i < add.length && (cur.from - add[i].from || cur.startSide - add[i].value.startSide) >= 0) {\n                let range = add[i++];\n                if (!builder.addInner(range.from, range.to, range.value))\n                    spill.push(range);\n            }\n            else if (cur.rangeIndex == 1 && cur.chunkIndex < this.chunk.length &&\n                (i == add.length || this.chunkEnd(cur.chunkIndex) < add[i].from) &&\n                (!filter || filterFrom > this.chunkEnd(cur.chunkIndex) || filterTo < this.chunkPos[cur.chunkIndex]) &&\n                builder.addChunk(this.chunkPos[cur.chunkIndex], this.chunk[cur.chunkIndex])) {\n                cur.nextChunk();\n            }\n            else {\n                if (!filter || filterFrom > cur.to || filterTo < cur.from || filter(cur.from, cur.to, cur.value)) {\n                    if (!builder.addInner(cur.from, cur.to, cur.value))\n                        spill.push(Range.create(cur.from, cur.to, cur.value));\n                }\n                cur.next();\n            }\n        }\n        return builder.finishInner(this.nextLayer.isEmpty && !spill.length ? RangeSet.empty\n            : this.nextLayer.update({ add: spill, filter, filterFrom, filterTo }));\n    }\n    /**\n    Map this range set through a set of changes, return the new set.\n    */\n    map(changes) {\n        if (changes.empty || this.isEmpty)\n            return this;\n        let chunks = [], chunkPos = [], maxPoint = -1;\n        for (let i = 0; i < this.chunk.length; i++) {\n            let start = this.chunkPos[i], chunk = this.chunk[i];\n            let touch = changes.touchesRange(start, start + chunk.length);\n            if (touch === false) {\n                maxPoint = Math.max(maxPoint, chunk.maxPoint);\n                chunks.push(chunk);\n                chunkPos.push(changes.mapPos(start));\n            }\n            else if (touch === true) {\n                let { mapped, pos } = chunk.map(start, changes);\n                if (mapped) {\n                    maxPoint = Math.max(maxPoint, mapped.maxPoint);\n                    chunks.push(mapped);\n                    chunkPos.push(pos);\n                }\n            }\n        }\n        let next = this.nextLayer.map(changes);\n        return chunks.length == 0 ? next : new RangeSet(chunkPos, chunks, next || RangeSet.empty, maxPoint);\n    }\n    /**\n    Iterate over the ranges that touch the region `from` to `to`,\n    calling `f` for each. There is no guarantee that the ranges will\n    be reported in any specific order. When the callback returns\n    `false`, iteration stops.\n    */\n    between(from, to, f) {\n        if (this.isEmpty)\n            return;\n        for (let i = 0; i < this.chunk.length; i++) {\n            let start = this.chunkPos[i], chunk = this.chunk[i];\n            if (to >= start && from <= start + chunk.length &&\n                chunk.between(start, from - start, to - start, f) === false)\n                return;\n        }\n        this.nextLayer.between(from, to, f);\n    }\n    /**\n    Iterate over the ranges in this set, in order, including all\n    ranges that end at or after `from`.\n    */\n    iter(from = 0) {\n        return HeapCursor.from([this]).goto(from);\n    }\n    /**\n    @internal\n    */\n    get isEmpty() { return this.nextLayer == this; }\n    /**\n    Iterate over the ranges in a collection of sets, in order,\n    starting from `from`.\n    */\n    static iter(sets, from = 0) {\n        return HeapCursor.from(sets).goto(from);\n    }\n    /**\n    Iterate over two groups of sets, calling methods on `comparator`\n    to notify it of possible differences.\n    */\n    static compare(oldSets, newSets, \n    /**\n    This indicates how the underlying data changed between these\n    ranges, and is needed to synchronize the iteration.\n    */\n    textDiff, comparator, \n    /**\n    Can be used to ignore all non-point ranges, and points below\n    the given size. When -1, all ranges are compared.\n    */\n    minPointSize = -1) {\n        let a = oldSets.filter(set => set.maxPoint > 0 || !set.isEmpty && set.maxPoint >= minPointSize);\n        let b = newSets.filter(set => set.maxPoint > 0 || !set.isEmpty && set.maxPoint >= minPointSize);\n        let sharedChunks = findSharedChunks(a, b, textDiff);\n        let sideA = new SpanCursor(a, sharedChunks, minPointSize);\n        let sideB = new SpanCursor(b, sharedChunks, minPointSize);\n        textDiff.iterGaps((fromA, fromB, length) => compare(sideA, fromA, sideB, fromB, length, comparator));\n        if (textDiff.empty && textDiff.length == 0)\n            compare(sideA, 0, sideB, 0, 0, comparator);\n    }\n    /**\n    Compare the contents of two groups of range sets, returning true\n    if they are equivalent in the given range.\n    */\n    static eq(oldSets, newSets, from = 0, to) {\n        if (to == null)\n            to = 1000000000 /* C.Far */ - 1;\n        let a = oldSets.filter(set => !set.isEmpty && newSets.indexOf(set) < 0);\n        let b = newSets.filter(set => !set.isEmpty && oldSets.indexOf(set) < 0);\n        if (a.length != b.length)\n            return false;\n        if (!a.length)\n            return true;\n        let sharedChunks = findSharedChunks(a, b);\n        let sideA = new SpanCursor(a, sharedChunks, 0).goto(from), sideB = new SpanCursor(b, sharedChunks, 0).goto(from);\n        for (;;) {\n            if (sideA.to != sideB.to ||\n                !sameValues(sideA.active, sideB.active) ||\n                sideA.point && (!sideB.point || !sideA.point.eq(sideB.point)))\n                return false;\n            if (sideA.to > to)\n                return true;\n            sideA.next();\n            sideB.next();\n        }\n    }\n    /**\n    Iterate over a group of range sets at the same time, notifying\n    the iterator about the ranges covering every given piece of\n    content. Returns the open count (see\n    [`SpanIterator.span`](https://codemirror.net/6/docs/ref/#state.SpanIterator.span)) at the end\n    of the iteration.\n    */\n    static spans(sets, from, to, iterator, \n    /**\n    When given and greater than -1, only points of at least this\n    size are taken into account.\n    */\n    minPointSize = -1) {\n        let cursor = new SpanCursor(sets, null, minPointSize).goto(from), pos = from;\n        let openRanges = cursor.openStart;\n        for (;;) {\n            let curTo = Math.min(cursor.to, to);\n            if (cursor.point) {\n                let active = cursor.activeForPoint(cursor.to);\n                let openCount = cursor.pointFrom < from ? active.length + 1\n                    : cursor.point.startSide < 0 ? active.length\n                        : Math.min(active.length, openRanges);\n                iterator.point(pos, curTo, cursor.point, active, openCount, cursor.pointRank);\n                openRanges = Math.min(cursor.openEnd(curTo), active.length);\n            }\n            else if (curTo > pos) {\n                iterator.span(pos, curTo, cursor.active, openRanges);\n                openRanges = cursor.openEnd(curTo);\n            }\n            if (cursor.to > to)\n                return openRanges + (cursor.point && cursor.to > to ? 1 : 0);\n            pos = cursor.to;\n            cursor.next();\n        }\n    }\n    /**\n    Create a range set for the given range or array of ranges. By\n    default, this expects the ranges to be _sorted_ (by start\n    position and, if two start at the same position,\n    `value.startSide`). You can pass `true` as second argument to\n    cause the method to sort them.\n    */\n    static of(ranges, sort = false) {\n        let build = new RangeSetBuilder();\n        for (let range of ranges instanceof Range ? [ranges] : sort ? lazySort(ranges) : ranges)\n            build.add(range.from, range.to, range.value);\n        return build.finish();\n    }\n    /**\n    Join an array of range sets into a single set.\n    */\n    static join(sets) {\n        if (!sets.length)\n            return RangeSet.empty;\n        let result = sets[sets.length - 1];\n        for (let i = sets.length - 2; i >= 0; i--) {\n            for (let layer = sets[i]; layer != RangeSet.empty; layer = layer.nextLayer)\n                result = new RangeSet(layer.chunkPos, layer.chunk, result, Math.max(layer.maxPoint, result.maxPoint));\n        }\n        return result;\n    }\n}\n/**\nThe empty set of ranges.\n*/\nRangeSet.empty = new RangeSet([], [], null, -1);\nfunction lazySort(ranges) {\n    if (ranges.length > 1)\n        for (let prev = ranges[0], i = 1; i < ranges.length; i++) {\n            let cur = ranges[i];\n            if (cmpRange(prev, cur) > 0)\n                return ranges.slice().sort(cmpRange);\n            prev = cur;\n        }\n    return ranges;\n}\nRangeSet.empty.nextLayer = RangeSet.empty;\n/**\nA range set builder is a data structure that helps build up a\n[range set](https://codemirror.net/6/docs/ref/#state.RangeSet) directly, without first allocating\nan array of [`Range`](https://codemirror.net/6/docs/ref/#state.Range) objects.\n*/\nclass RangeSetBuilder {\n    finishChunk(newArrays) {\n        this.chunks.push(new Chunk(this.from, this.to, this.value, this.maxPoint));\n        this.chunkPos.push(this.chunkStart);\n        this.chunkStart = -1;\n        this.setMaxPoint = Math.max(this.setMaxPoint, this.maxPoint);\n        this.maxPoint = -1;\n        if (newArrays) {\n            this.from = [];\n            this.to = [];\n            this.value = [];\n        }\n    }\n    /**\n    Create an empty builder.\n    */\n    constructor() {\n        this.chunks = [];\n        this.chunkPos = [];\n        this.chunkStart = -1;\n        this.last = null;\n        this.lastFrom = -1000000000 /* C.Far */;\n        this.lastTo = -1000000000 /* C.Far */;\n        this.from = [];\n        this.to = [];\n        this.value = [];\n        this.maxPoint = -1;\n        this.setMaxPoint = -1;\n        this.nextLayer = null;\n    }\n    /**\n    Add a range. Ranges should be added in sorted (by `from` and\n    `value.startSide`) order.\n    */\n    add(from, to, value) {\n        if (!this.addInner(from, to, value))\n            (this.nextLayer || (this.nextLayer = new RangeSetBuilder)).add(from, to, value);\n    }\n    /**\n    @internal\n    */\n    addInner(from, to, value) {\n        let diff = from - this.lastTo || value.startSide - this.last.endSide;\n        if (diff <= 0 && (from - this.lastFrom || value.startSide - this.last.startSide) < 0)\n            throw new Error(\"Ranges must be added sorted by `from` position and `startSide`\");\n        if (diff < 0)\n            return false;\n        if (this.from.length == 250 /* C.ChunkSize */)\n            this.finishChunk(true);\n        if (this.chunkStart < 0)\n            this.chunkStart = from;\n        this.from.push(from - this.chunkStart);\n        this.to.push(to - this.chunkStart);\n        this.last = value;\n        this.lastFrom = from;\n        this.lastTo = to;\n        this.value.push(value);\n        if (value.point)\n            this.maxPoint = Math.max(this.maxPoint, to - from);\n        return true;\n    }\n    /**\n    @internal\n    */\n    addChunk(from, chunk) {\n        if ((from - this.lastTo || chunk.value[0].startSide - this.last.endSide) < 0)\n            return false;\n        if (this.from.length)\n            this.finishChunk(true);\n        this.setMaxPoint = Math.max(this.setMaxPoint, chunk.maxPoint);\n        this.chunks.push(chunk);\n        this.chunkPos.push(from);\n        let last = chunk.value.length - 1;\n        this.last = chunk.value[last];\n        this.lastFrom = chunk.from[last] + from;\n        this.lastTo = chunk.to[last] + from;\n        return true;\n    }\n    /**\n    Finish the range set. Returns the new set. The builder can't be\n    used anymore after this has been called.\n    */\n    finish() { return this.finishInner(RangeSet.empty); }\n    /**\n    @internal\n    */\n    finishInner(next) {\n        if (this.from.length)\n            this.finishChunk(false);\n        if (this.chunks.length == 0)\n            return next;\n        let result = RangeSet.create(this.chunkPos, this.chunks, this.nextLayer ? this.nextLayer.finishInner(next) : next, this.setMaxPoint);\n        this.from = null; // Make sure further `add` calls produce errors\n        return result;\n    }\n}\nfunction findSharedChunks(a, b, textDiff) {\n    let inA = new Map();\n    for (let set of a)\n        for (let i = 0; i < set.chunk.length; i++)\n            if (set.chunk[i].maxPoint <= 0)\n                inA.set(set.chunk[i], set.chunkPos[i]);\n    let shared = new Set();\n    for (let set of b)\n        for (let i = 0; i < set.chunk.length; i++) {\n            let known = inA.get(set.chunk[i]);\n            if (known != null && (textDiff ? textDiff.mapPos(known) : known) == set.chunkPos[i] &&\n                !(textDiff === null || textDiff === void 0 ? void 0 : textDiff.touchesRange(known, known + set.chunk[i].length)))\n                shared.add(set.chunk[i]);\n        }\n    return shared;\n}\nclass LayerCursor {\n    constructor(layer, skip, minPoint, rank = 0) {\n        this.layer = layer;\n        this.skip = skip;\n        this.minPoint = minPoint;\n        this.rank = rank;\n    }\n    get startSide() { return this.value ? this.value.startSide : 0; }\n    get endSide() { return this.value ? this.value.endSide : 0; }\n    goto(pos, side = -1000000000 /* C.Far */) {\n        this.chunkIndex = this.rangeIndex = 0;\n        this.gotoInner(pos, side, false);\n        return this;\n    }\n    gotoInner(pos, side, forward) {\n        while (this.chunkIndex < this.layer.chunk.length) {\n            let next = this.layer.chunk[this.chunkIndex];\n            if (!(this.skip && this.skip.has(next) ||\n                this.layer.chunkEnd(this.chunkIndex) < pos ||\n                next.maxPoint < this.minPoint))\n                break;\n            this.chunkIndex++;\n            forward = false;\n        }\n        if (this.chunkIndex < this.layer.chunk.length) {\n            let rangeIndex = this.layer.chunk[this.chunkIndex].findIndex(pos - this.layer.chunkPos[this.chunkIndex], side, true);\n            if (!forward || this.rangeIndex < rangeIndex)\n                this.setRangeIndex(rangeIndex);\n        }\n        this.next();\n    }\n    forward(pos, side) {\n        if ((this.to - pos || this.endSide - side) < 0)\n            this.gotoInner(pos, side, true);\n    }\n    next() {\n        for (;;) {\n            if (this.chunkIndex == this.layer.chunk.length) {\n                this.from = this.to = 1000000000 /* C.Far */;\n                this.value = null;\n                break;\n            }\n            else {\n                let chunkPos = this.layer.chunkPos[this.chunkIndex], chunk = this.layer.chunk[this.chunkIndex];\n                let from = chunkPos + chunk.from[this.rangeIndex];\n                this.from = from;\n                this.to = chunkPos + chunk.to[this.rangeIndex];\n                this.value = chunk.value[this.rangeIndex];\n                this.setRangeIndex(this.rangeIndex + 1);\n                if (this.minPoint < 0 || this.value.point && this.to - this.from >= this.minPoint)\n                    break;\n            }\n        }\n    }\n    setRangeIndex(index) {\n        if (index == this.layer.chunk[this.chunkIndex].value.length) {\n            this.chunkIndex++;\n            if (this.skip) {\n                while (this.chunkIndex < this.layer.chunk.length && this.skip.has(this.layer.chunk[this.chunkIndex]))\n                    this.chunkIndex++;\n            }\n            this.rangeIndex = 0;\n        }\n        else {\n            this.rangeIndex = index;\n        }\n    }\n    nextChunk() {\n        this.chunkIndex++;\n        this.rangeIndex = 0;\n        this.next();\n    }\n    compare(other) {\n        return this.from - other.from || this.startSide - other.startSide || this.rank - other.rank ||\n            this.to - other.to || this.endSide - other.endSide;\n    }\n}\nclass HeapCursor {\n    constructor(heap) {\n        this.heap = heap;\n    }\n    static from(sets, skip = null, minPoint = -1) {\n        let heap = [];\n        for (let i = 0; i < sets.length; i++) {\n            for (let cur = sets[i]; !cur.isEmpty; cur = cur.nextLayer) {\n                if (cur.maxPoint >= minPoint)\n                    heap.push(new LayerCursor(cur, skip, minPoint, i));\n            }\n        }\n        return heap.length == 1 ? heap[0] : new HeapCursor(heap);\n    }\n    get startSide() { return this.value ? this.value.startSide : 0; }\n    goto(pos, side = -1000000000 /* C.Far */) {\n        for (let cur of this.heap)\n            cur.goto(pos, side);\n        for (let i = this.heap.length >> 1; i >= 0; i--)\n            heapBubble(this.heap, i);\n        this.next();\n        return this;\n    }\n    forward(pos, side) {\n        for (let cur of this.heap)\n            cur.forward(pos, side);\n        for (let i = this.heap.length >> 1; i >= 0; i--)\n            heapBubble(this.heap, i);\n        if ((this.to - pos || this.value.endSide - side) < 0)\n            this.next();\n    }\n    next() {\n        if (this.heap.length == 0) {\n            this.from = this.to = 1000000000 /* C.Far */;\n            this.value = null;\n            this.rank = -1;\n        }\n        else {\n            let top = this.heap[0];\n            this.from = top.from;\n            this.to = top.to;\n            this.value = top.value;\n            this.rank = top.rank;\n            if (top.value)\n                top.next();\n            heapBubble(this.heap, 0);\n        }\n    }\n}\nfunction heapBubble(heap, index) {\n    for (let cur = heap[index];;) {\n        let childIndex = (index << 1) + 1;\n        if (childIndex >= heap.length)\n            break;\n        let child = heap[childIndex];\n        if (childIndex + 1 < heap.length && child.compare(heap[childIndex + 1]) >= 0) {\n            child = heap[childIndex + 1];\n            childIndex++;\n        }\n        if (cur.compare(child) < 0)\n            break;\n        heap[childIndex] = cur;\n        heap[index] = child;\n        index = childIndex;\n    }\n}\nclass SpanCursor {\n    constructor(sets, skip, minPoint) {\n        this.minPoint = minPoint;\n        this.active = [];\n        this.activeTo = [];\n        this.activeRank = [];\n        this.minActive = -1;\n        // A currently active point range, if any\n        this.point = null;\n        this.pointFrom = 0;\n        this.pointRank = 0;\n        this.to = -1000000000 /* C.Far */;\n        this.endSide = 0;\n        // The amount of open active ranges at the start of the iterator.\n        // Not including points.\n        this.openStart = -1;\n        this.cursor = HeapCursor.from(sets, skip, minPoint);\n    }\n    goto(pos, side = -1000000000 /* C.Far */) {\n        this.cursor.goto(pos, side);\n        this.active.length = this.activeTo.length = this.activeRank.length = 0;\n        this.minActive = -1;\n        this.to = pos;\n        this.endSide = side;\n        this.openStart = -1;\n        this.next();\n        return this;\n    }\n    forward(pos, side) {\n        while (this.minActive > -1 && (this.activeTo[this.minActive] - pos || this.active[this.minActive].endSide - side) < 0)\n            this.removeActive(this.minActive);\n        this.cursor.forward(pos, side);\n    }\n    removeActive(index) {\n        remove(this.active, index);\n        remove(this.activeTo, index);\n        remove(this.activeRank, index);\n        this.minActive = findMinIndex(this.active, this.activeTo);\n    }\n    addActive(trackOpen) {\n        let i = 0, { value, to, rank } = this.cursor;\n        // Organize active marks by rank first, then by size\n        while (i < this.activeRank.length && (rank - this.activeRank[i] || to - this.activeTo[i]) > 0)\n            i++;\n        insert(this.active, i, value);\n        insert(this.activeTo, i, to);\n        insert(this.activeRank, i, rank);\n        if (trackOpen)\n            insert(trackOpen, i, this.cursor.from);\n        this.minActive = findMinIndex(this.active, this.activeTo);\n    }\n    // After calling this, if `this.point` != null, the next range is a\n    // point. Otherwise, it's a regular range, covered by `this.active`.\n    next() {\n        let from = this.to, wasPoint = this.point;\n        this.point = null;\n        let trackOpen = this.openStart < 0 ? [] : null;\n        for (;;) {\n            let a = this.minActive;\n            if (a > -1 && (this.activeTo[a] - this.cursor.from || this.active[a].endSide - this.cursor.startSide) < 0) {\n                if (this.activeTo[a] > from) {\n                    this.to = this.activeTo[a];\n                    this.endSide = this.active[a].endSide;\n                    break;\n                }\n                this.removeActive(a);\n                if (trackOpen)\n                    remove(trackOpen, a);\n            }\n            else if (!this.cursor.value) {\n                this.to = this.endSide = 1000000000 /* C.Far */;\n                break;\n            }\n            else if (this.cursor.from > from) {\n                this.to = this.cursor.from;\n                this.endSide = this.cursor.startSide;\n                break;\n            }\n            else {\n                let nextVal = this.cursor.value;\n                if (!nextVal.point) { // Opening a range\n                    this.addActive(trackOpen);\n                    this.cursor.next();\n                }\n                else if (wasPoint && this.cursor.to == this.to && this.cursor.from < this.cursor.to) {\n                    // Ignore any non-empty points that end precisely at the end of the prev point\n                    this.cursor.next();\n                }\n                else { // New point\n                    this.point = nextVal;\n                    this.pointFrom = this.cursor.from;\n                    this.pointRank = this.cursor.rank;\n                    this.to = this.cursor.to;\n                    this.endSide = nextVal.endSide;\n                    this.cursor.next();\n                    this.forward(this.to, this.endSide);\n                    break;\n                }\n            }\n        }\n        if (trackOpen) {\n            this.openStart = 0;\n            for (let i = trackOpen.length - 1; i >= 0 && trackOpen[i] < from; i--)\n                this.openStart++;\n        }\n    }\n    activeForPoint(to) {\n        if (!this.active.length)\n            return this.active;\n        let active = [];\n        for (let i = this.active.length - 1; i >= 0; i--) {\n            if (this.activeRank[i] < this.pointRank)\n                break;\n            if (this.activeTo[i] > to || this.activeTo[i] == to && this.active[i].endSide >= this.point.endSide)\n                active.push(this.active[i]);\n        }\n        return active.reverse();\n    }\n    openEnd(to) {\n        let open = 0;\n        for (let i = this.activeTo.length - 1; i >= 0 && this.activeTo[i] > to; i--)\n            open++;\n        return open;\n    }\n}\nfunction compare(a, startA, b, startB, length, comparator) {\n    a.goto(startA);\n    b.goto(startB);\n    let endB = startB + length;\n    let pos = startB, dPos = startB - startA;\n    for (;;) {\n        let dEnd = (a.to + dPos) - b.to, diff = dEnd || a.endSide - b.endSide;\n        let end = diff < 0 ? a.to + dPos : b.to, clipEnd = Math.min(end, endB);\n        if (a.point || b.point) {\n            if (!(a.point && b.point && (a.point == b.point || a.point.eq(b.point)) &&\n                sameValues(a.activeForPoint(a.to), b.activeForPoint(b.to))))\n                comparator.comparePoint(pos, clipEnd, a.point, b.point);\n        }\n        else {\n            if (clipEnd > pos && !sameValues(a.active, b.active))\n                comparator.compareRange(pos, clipEnd, a.active, b.active);\n        }\n        if (end > endB)\n            break;\n        if ((dEnd || a.openEnd != b.openEnd) && comparator.boundChange)\n            comparator.boundChange(end);\n        pos = end;\n        if (diff <= 0)\n            a.next();\n        if (diff >= 0)\n            b.next();\n    }\n}\nfunction sameValues(a, b) {\n    if (a.length != b.length)\n        return false;\n    for (let i = 0; i < a.length; i++)\n        if (a[i] != b[i] && !a[i].eq(b[i]))\n            return false;\n    return true;\n}\nfunction remove(array, index) {\n    for (let i = index, e = array.length - 1; i < e; i++)\n        array[i] = array[i + 1];\n    array.pop();\n}\nfunction insert(array, index, value) {\n    for (let i = array.length - 1; i >= index; i--)\n        array[i + 1] = array[i];\n    array[index] = value;\n}\nfunction findMinIndex(value, array) {\n    let found = -1, foundPos = 1000000000 /* C.Far */;\n    for (let i = 0; i < array.length; i++)\n        if ((array[i] - foundPos || value[i].endSide - value[found].endSide) < 0) {\n            found = i;\n            foundPos = array[i];\n        }\n    return found;\n}\n\n/**\nCount the column position at the given offset into the string,\ntaking extending characters and tab size into account.\n*/\nfunction countColumn(string, tabSize, to = string.length) {\n    let n = 0;\n    for (let i = 0; i < to;) {\n        if (string.charCodeAt(i) == 9) {\n            n += tabSize - (n % tabSize);\n            i++;\n        }\n        else {\n            n++;\n            i = findClusterBreak(string, i);\n        }\n    }\n    return n;\n}\n/**\nFind the offset that corresponds to the given column position in a\nstring, taking extending characters and tab size into account. By\ndefault, the string length is returned when it is too short to\nreach the column. Pass `strict` true to make it return -1 in that\nsituation.\n*/\nfunction findColumn(string, col, tabSize, strict) {\n    for (let i = 0, n = 0;;) {\n        if (n >= col)\n            return i;\n        if (i == string.length)\n            break;\n        n += string.charCodeAt(i) == 9 ? tabSize - (n % tabSize) : 1;\n        i = findClusterBreak(string, i);\n    }\n    return strict === true ? -1 : string.length;\n}\n\nexports.Annotation = Annotation;\nexports.AnnotationType = AnnotationType;\nexports.ChangeDesc = ChangeDesc;\nexports.ChangeSet = ChangeSet;\nexports.Compartment = Compartment;\nexports.EditorSelection = EditorSelection;\nexports.EditorState = EditorState;\nexports.Facet = Facet;\nexports.Line = Line;\nexports.Prec = Prec;\nexports.Range = Range;\nexports.RangeSet = RangeSet;\nexports.RangeSetBuilder = RangeSetBuilder;\nexports.RangeValue = RangeValue;\nexports.SelectionRange = SelectionRange;\nexports.StateEffect = StateEffect;\nexports.StateEffectType = StateEffectType;\nexports.StateField = StateField;\nexports.Text = Text;\nexports.Transaction = Transaction;\nexports.codePointAt = codePointAt;\nexports.codePointSize = codePointSize;\nexports.combineConfig = combineConfig;\nexports.countColumn = countColumn;\nexports.findClusterBreak = findClusterBreak;\nexports.findColumn = findColumn;\nexports.fromCodePoint = fromCodePoint;\n","'use strict';\n\nvar state = require('@codemirror/state');\nvar styleMod = require('style-mod');\nvar w3cKeyname = require('w3c-keyname');\n\nfunction getSelection(root) {\n    let target;\n    // Browsers differ on whether shadow roots have a getSelection\n    // method. If it exists, use that, otherwise, call it on the\n    // document.\n    if (root.nodeType == 11) { // Shadow root\n        target = root.getSelection ? root : root.ownerDocument;\n    }\n    else {\n        target = root;\n    }\n    return target.getSelection();\n}\nfunction contains(dom, node) {\n    return node ? dom == node || dom.contains(node.nodeType != 1 ? node.parentNode : node) : false;\n}\nfunction hasSelection(dom, selection) {\n    if (!selection.anchorNode)\n        return false;\n    try {\n        // Firefox will raise 'permission denied' errors when accessing\n        // properties of `sel.anchorNode` when it's in a generated CSS\n        // element.\n        return contains(dom, selection.anchorNode);\n    }\n    catch (_) {\n        return false;\n    }\n}\nfunction clientRectsFor(dom) {\n    if (dom.nodeType == 3)\n        return textRange(dom, 0, dom.nodeValue.length).getClientRects();\n    else if (dom.nodeType == 1)\n        return dom.getClientRects();\n    else\n        return [];\n}\n// Scans forward and backward through DOM positions equivalent to the\n// given one to see if the two are in the same place (i.e. after a\n// text node vs at the end of that text node)\nfunction isEquivalentPosition(node, off, targetNode, targetOff) {\n    return targetNode ? (scanFor(node, off, targetNode, targetOff, -1) ||\n        scanFor(node, off, targetNode, targetOff, 1)) : false;\n}\nfunction domIndex(node) {\n    for (var index = 0;; index++) {\n        node = node.previousSibling;\n        if (!node)\n            return index;\n    }\n}\nfunction isBlockElement(node) {\n    return node.nodeType == 1 && /^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\\d|SECTION|PRE)$/.test(node.nodeName);\n}\nfunction scanFor(node, off, targetNode, targetOff, dir) {\n    for (;;) {\n        if (node == targetNode && off == targetOff)\n            return true;\n        if (off == (dir < 0 ? 0 : maxOffset(node))) {\n            if (node.nodeName == \"DIV\")\n                return false;\n            let parent = node.parentNode;\n            if (!parent || parent.nodeType != 1)\n                return false;\n            off = domIndex(node) + (dir < 0 ? 0 : 1);\n            node = parent;\n        }\n        else if (node.nodeType == 1) {\n            node = node.childNodes[off + (dir < 0 ? -1 : 0)];\n            if (node.nodeType == 1 && node.contentEditable == \"false\")\n                return false;\n            off = dir < 0 ? maxOffset(node) : 0;\n        }\n        else {\n            return false;\n        }\n    }\n}\nfunction maxOffset(node) {\n    return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length;\n}\nfunction flattenRect(rect, left) {\n    let x = left ? rect.left : rect.right;\n    return { left: x, right: x, top: rect.top, bottom: rect.bottom };\n}\nfunction windowRect(win) {\n    let vp = win.visualViewport;\n    if (vp)\n        return {\n            left: 0, right: vp.width,\n            top: 0, bottom: vp.height\n        };\n    return { left: 0, right: win.innerWidth,\n        top: 0, bottom: win.innerHeight };\n}\nfunction getScale(elt, rect) {\n    let scaleX = rect.width / elt.offsetWidth;\n    let scaleY = rect.height / elt.offsetHeight;\n    if (scaleX > 0.995 && scaleX < 1.005 || !isFinite(scaleX) || Math.abs(rect.width - elt.offsetWidth) < 1)\n        scaleX = 1;\n    if (scaleY > 0.995 && scaleY < 1.005 || !isFinite(scaleY) || Math.abs(rect.height - elt.offsetHeight) < 1)\n        scaleY = 1;\n    return { scaleX, scaleY };\n}\nfunction scrollRectIntoView(dom, rect, side, x, y, xMargin, yMargin, ltr) {\n    let doc = dom.ownerDocument, win = doc.defaultView || window;\n    for (let cur = dom, stop = false; cur && !stop;) {\n        if (cur.nodeType == 1) { // Element\n            let bounding, top = cur == doc.body;\n            let scaleX = 1, scaleY = 1;\n            if (top) {\n                bounding = windowRect(win);\n            }\n            else {\n                if (/^(fixed|sticky)$/.test(getComputedStyle(cur).position))\n                    stop = true;\n                if (cur.scrollHeight <= cur.clientHeight && cur.scrollWidth <= cur.clientWidth) {\n                    cur = cur.assignedSlot || cur.parentNode;\n                    continue;\n                }\n                let rect = cur.getBoundingClientRect();\n                ({ scaleX, scaleY } = getScale(cur, rect));\n                // Make sure scrollbar width isn't included in the rectangle\n                bounding = { left: rect.left, right: rect.left + cur.clientWidth * scaleX,\n                    top: rect.top, bottom: rect.top + cur.clientHeight * scaleY };\n            }\n            let moveX = 0, moveY = 0;\n            if (y == \"nearest\") {\n                if (rect.top < bounding.top) {\n                    moveY = -(bounding.top - rect.top + yMargin);\n                    if (side > 0 && rect.bottom > bounding.bottom + moveY)\n                        moveY = rect.bottom - bounding.bottom + moveY + yMargin;\n                }\n                else if (rect.bottom > bounding.bottom) {\n                    moveY = rect.bottom - bounding.bottom + yMargin;\n                    if (side < 0 && (rect.top - moveY) < bounding.top)\n                        moveY = -(bounding.top + moveY - rect.top + yMargin);\n                }\n            }\n            else {\n                let rectHeight = rect.bottom - rect.top, boundingHeight = bounding.bottom - bounding.top;\n                let targetTop = y == \"center\" && rectHeight <= boundingHeight ? rect.top + rectHeight / 2 - boundingHeight / 2 :\n                    y == \"start\" || y == \"center\" && side < 0 ? rect.top - yMargin :\n                        rect.bottom - boundingHeight + yMargin;\n                moveY = targetTop - bounding.top;\n            }\n            if (x == \"nearest\") {\n                if (rect.left < bounding.left) {\n                    moveX = -(bounding.left - rect.left + xMargin);\n                    if (side > 0 && rect.right > bounding.right + moveX)\n                        moveX = rect.right - bounding.right + moveX + xMargin;\n                }\n                else if (rect.right > bounding.right) {\n                    moveX = rect.right - bounding.right + xMargin;\n                    if (side < 0 && rect.left < bounding.left + moveX)\n                        moveX = -(bounding.left + moveX - rect.left + xMargin);\n                }\n            }\n            else {\n                let targetLeft = x == \"center\" ? rect.left + (rect.right - rect.left) / 2 - (bounding.right - bounding.left) / 2 :\n                    (x == \"start\") == ltr ? rect.left - xMargin :\n                        rect.right - (bounding.right - bounding.left) + xMargin;\n                moveX = targetLeft - bounding.left;\n            }\n            if (moveX || moveY) {\n                if (top) {\n                    win.scrollBy(moveX, moveY);\n                }\n                else {\n                    let movedX = 0, movedY = 0;\n                    if (moveY) {\n                        let start = cur.scrollTop;\n                        cur.scrollTop += moveY / scaleY;\n                        movedY = (cur.scrollTop - start) * scaleY;\n                    }\n                    if (moveX) {\n                        let start = cur.scrollLeft;\n                        cur.scrollLeft += moveX / scaleX;\n                        movedX = (cur.scrollLeft - start) * scaleX;\n                    }\n                    rect = { left: rect.left - movedX, top: rect.top - movedY,\n                        right: rect.right - movedX, bottom: rect.bottom - movedY };\n                    if (movedX && Math.abs(movedX - moveX) < 1)\n                        x = \"nearest\";\n                    if (movedY && Math.abs(movedY - moveY) < 1)\n                        y = \"nearest\";\n                }\n            }\n            if (top)\n                break;\n            cur = cur.assignedSlot || cur.parentNode;\n        }\n        else if (cur.nodeType == 11) { // A shadow root\n            cur = cur.host;\n        }\n        else {\n            break;\n        }\n    }\n}\nfunction scrollableParents(dom) {\n    let doc = dom.ownerDocument, x, y;\n    for (let cur = dom.parentNode; cur;) {\n        if (cur == doc.body || (x && y)) {\n            break;\n        }\n        else if (cur.nodeType == 1) {\n            if (!y && cur.scrollHeight > cur.clientHeight)\n                y = cur;\n            if (!x && cur.scrollWidth > cur.clientWidth)\n                x = cur;\n            cur = cur.assignedSlot || cur.parentNode;\n        }\n        else if (cur.nodeType == 11) {\n            cur = cur.host;\n        }\n        else {\n            break;\n        }\n    }\n    return { x, y };\n}\nclass DOMSelectionState {\n    constructor() {\n        this.anchorNode = null;\n        this.anchorOffset = 0;\n        this.focusNode = null;\n        this.focusOffset = 0;\n    }\n    eq(domSel) {\n        return this.anchorNode == domSel.anchorNode && this.anchorOffset == domSel.anchorOffset &&\n            this.focusNode == domSel.focusNode && this.focusOffset == domSel.focusOffset;\n    }\n    setRange(range) {\n        let { anchorNode, focusNode } = range;\n        // Clip offsets to node size to avoid crashes when Safari reports bogus offsets (#1152)\n        this.set(anchorNode, Math.min(range.anchorOffset, anchorNode ? maxOffset(anchorNode) : 0), focusNode, Math.min(range.focusOffset, focusNode ? maxOffset(focusNode) : 0));\n    }\n    set(anchorNode, anchorOffset, focusNode, focusOffset) {\n        this.anchorNode = anchorNode;\n        this.anchorOffset = anchorOffset;\n        this.focusNode = focusNode;\n        this.focusOffset = focusOffset;\n    }\n}\nlet preventScrollSupported = null;\n// Feature-detects support for .focus({preventScroll: true}), and uses\n// a fallback kludge when not supported.\nfunction focusPreventScroll(dom) {\n    if (dom.setActive)\n        return dom.setActive(); // in IE\n    if (preventScrollSupported)\n        return dom.focus(preventScrollSupported);\n    let stack = [];\n    for (let cur = dom; cur; cur = cur.parentNode) {\n        stack.push(cur, cur.scrollTop, cur.scrollLeft);\n        if (cur == cur.ownerDocument)\n            break;\n    }\n    dom.focus(preventScrollSupported == null ? {\n        get preventScroll() {\n            preventScrollSupported = { preventScroll: true };\n            return true;\n        }\n    } : undefined);\n    if (!preventScrollSupported) {\n        preventScrollSupported = false;\n        for (let i = 0; i < stack.length;) {\n            let elt = stack[i++], top = stack[i++], left = stack[i++];\n            if (elt.scrollTop != top)\n                elt.scrollTop = top;\n            if (elt.scrollLeft != left)\n                elt.scrollLeft = left;\n        }\n    }\n}\nlet scratchRange;\nfunction textRange(node, from, to = from) {\n    let range = scratchRange || (scratchRange = document.createRange());\n    range.setEnd(node, to);\n    range.setStart(node, from);\n    return range;\n}\nfunction dispatchKey(elt, name, code, mods) {\n    let options = { key: name, code: name, keyCode: code, which: code, cancelable: true };\n    if (mods)\n        ({ altKey: options.altKey, ctrlKey: options.ctrlKey, shiftKey: options.shiftKey, metaKey: options.metaKey } = mods);\n    let down = new KeyboardEvent(\"keydown\", options);\n    down.synthetic = true;\n    elt.dispatchEvent(down);\n    let up = new KeyboardEvent(\"keyup\", options);\n    up.synthetic = true;\n    elt.dispatchEvent(up);\n    return down.defaultPrevented || up.defaultPrevented;\n}\nfunction getRoot(node) {\n    while (node) {\n        if (node && (node.nodeType == 9 || node.nodeType == 11 && node.host))\n            return node;\n        node = node.assignedSlot || node.parentNode;\n    }\n    return null;\n}\nfunction clearAttributes(node) {\n    while (node.attributes.length)\n        node.removeAttributeNode(node.attributes[0]);\n}\nfunction atElementStart(doc, selection) {\n    let node = selection.focusNode, offset = selection.focusOffset;\n    if (!node || selection.anchorNode != node || selection.anchorOffset != offset)\n        return false;\n    // Safari can report bogus offsets (#1152)\n    offset = Math.min(offset, maxOffset(node));\n    for (;;) {\n        if (offset) {\n            if (node.nodeType != 1)\n                return false;\n            let prev = node.childNodes[offset - 1];\n            if (prev.contentEditable == \"false\")\n                offset--;\n            else {\n                node = prev;\n                offset = maxOffset(node);\n            }\n        }\n        else if (node == doc) {\n            return true;\n        }\n        else {\n            offset = domIndex(node);\n            node = node.parentNode;\n        }\n    }\n}\nfunction isScrolledToBottom(elt) {\n    return elt.scrollTop > Math.max(1, elt.scrollHeight - elt.clientHeight - 4);\n}\nfunction textNodeBefore(startNode, startOffset) {\n    for (let node = startNode, offset = startOffset;;) {\n        if (node.nodeType == 3 && offset > 0) {\n            return { node: node, offset: offset };\n        }\n        else if (node.nodeType == 1 && offset > 0) {\n            if (node.contentEditable == \"false\")\n                return null;\n            node = node.childNodes[offset - 1];\n            offset = maxOffset(node);\n        }\n        else if (node.parentNode && !isBlockElement(node)) {\n            offset = domIndex(node);\n            node = node.parentNode;\n        }\n        else {\n            return null;\n        }\n    }\n}\nfunction textNodeAfter(startNode, startOffset) {\n    for (let node = startNode, offset = startOffset;;) {\n        if (node.nodeType == 3 && offset < node.nodeValue.length) {\n            return { node: node, offset: offset };\n        }\n        else if (node.nodeType == 1 && offset < node.childNodes.length) {\n            if (node.contentEditable == \"false\")\n                return null;\n            node = node.childNodes[offset];\n            offset = 0;\n        }\n        else if (node.parentNode && !isBlockElement(node)) {\n            offset = domIndex(node) + 1;\n            node = node.parentNode;\n        }\n        else {\n            return null;\n        }\n    }\n}\n\nclass DOMPos {\n    constructor(node, offset, precise = true) {\n        this.node = node;\n        this.offset = offset;\n        this.precise = precise;\n    }\n    static before(dom, precise) { return new DOMPos(dom.parentNode, domIndex(dom), precise); }\n    static after(dom, precise) { return new DOMPos(dom.parentNode, domIndex(dom) + 1, precise); }\n}\nconst noChildren = [];\nclass ContentView {\n    constructor() {\n        this.parent = null;\n        this.dom = null;\n        this.flags = 2 /* ViewFlag.NodeDirty */;\n    }\n    get overrideDOMText() { return null; }\n    get posAtStart() {\n        return this.parent ? this.parent.posBefore(this) : 0;\n    }\n    get posAtEnd() {\n        return this.posAtStart + this.length;\n    }\n    posBefore(view) {\n        let pos = this.posAtStart;\n        for (let child of this.children) {\n            if (child == view)\n                return pos;\n            pos += child.length + child.breakAfter;\n        }\n        throw new RangeError(\"Invalid child in posBefore\");\n    }\n    posAfter(view) {\n        return this.posBefore(view) + view.length;\n    }\n    sync(view, track) {\n        if (this.flags & 2 /* ViewFlag.NodeDirty */) {\n            let parent = this.dom;\n            let prev = null, next;\n            for (let child of this.children) {\n                if (child.flags & 7 /* ViewFlag.Dirty */) {\n                    if (!child.dom && (next = prev ? prev.nextSibling : parent.firstChild)) {\n                        let contentView = ContentView.get(next);\n                        if (!contentView || !contentView.parent && contentView.canReuseDOM(child))\n                            child.reuseDOM(next);\n                    }\n                    child.sync(view, track);\n                    child.flags &= ~7 /* ViewFlag.Dirty */;\n                }\n                next = prev ? prev.nextSibling : parent.firstChild;\n                if (track && !track.written && track.node == parent && next != child.dom)\n                    track.written = true;\n                if (child.dom.parentNode == parent) {\n                    while (next && next != child.dom)\n                        next = rm$1(next);\n                }\n                else {\n                    parent.insertBefore(child.dom, next);\n                }\n                prev = child.dom;\n            }\n            next = prev ? prev.nextSibling : parent.firstChild;\n            if (next && track && track.node == parent)\n                track.written = true;\n            while (next)\n                next = rm$1(next);\n        }\n        else if (this.flags & 1 /* ViewFlag.ChildDirty */) {\n            for (let child of this.children)\n                if (child.flags & 7 /* ViewFlag.Dirty */) {\n                    child.sync(view, track);\n                    child.flags &= ~7 /* ViewFlag.Dirty */;\n                }\n        }\n    }\n    reuseDOM(_dom) { }\n    localPosFromDOM(node, offset) {\n        let after;\n        if (node == this.dom) {\n            after = this.dom.childNodes[offset];\n        }\n        else {\n            let bias = maxOffset(node) == 0 ? 0 : offset == 0 ? -1 : 1;\n            for (;;) {\n                let parent = node.parentNode;\n                if (parent == this.dom)\n                    break;\n                if (bias == 0 && parent.firstChild != parent.lastChild) {\n                    if (node == parent.firstChild)\n                        bias = -1;\n                    else\n                        bias = 1;\n                }\n                node = parent;\n            }\n            if (bias < 0)\n                after = node;\n            else\n                after = node.nextSibling;\n        }\n        if (after == this.dom.firstChild)\n            return 0;\n        while (after && !ContentView.get(after))\n            after = after.nextSibling;\n        if (!after)\n            return this.length;\n        for (let i = 0, pos = 0;; i++) {\n            let child = this.children[i];\n            if (child.dom == after)\n                return pos;\n            pos += child.length + child.breakAfter;\n        }\n    }\n    domBoundsAround(from, to, offset = 0) {\n        let fromI = -1, fromStart = -1, toI = -1, toEnd = -1;\n        for (let i = 0, pos = offset, prevEnd = offset; i < this.children.length; i++) {\n            let child = this.children[i], end = pos + child.length;\n            if (pos < from && end > to)\n                return child.domBoundsAround(from, to, pos);\n            if (end >= from && fromI == -1) {\n                fromI = i;\n                fromStart = pos;\n            }\n            if (pos > to && child.dom.parentNode == this.dom) {\n                toI = i;\n                toEnd = prevEnd;\n                break;\n            }\n            prevEnd = end;\n            pos = end + child.breakAfter;\n        }\n        return { from: fromStart, to: toEnd < 0 ? offset + this.length : toEnd,\n            startDOM: (fromI ? this.children[fromI - 1].dom.nextSibling : null) || this.dom.firstChild,\n            endDOM: toI < this.children.length && toI >= 0 ? this.children[toI].dom : null };\n    }\n    markDirty(andParent = false) {\n        this.flags |= 2 /* ViewFlag.NodeDirty */;\n        this.markParentsDirty(andParent);\n    }\n    markParentsDirty(childList) {\n        for (let parent = this.parent; parent; parent = parent.parent) {\n            if (childList)\n                parent.flags |= 2 /* ViewFlag.NodeDirty */;\n            if (parent.flags & 1 /* ViewFlag.ChildDirty */)\n                return;\n            parent.flags |= 1 /* ViewFlag.ChildDirty */;\n            childList = false;\n        }\n    }\n    setParent(parent) {\n        if (this.parent != parent) {\n            this.parent = parent;\n            if (this.flags & 7 /* ViewFlag.Dirty */)\n                this.markParentsDirty(true);\n        }\n    }\n    setDOM(dom) {\n        if (this.dom == dom)\n            return;\n        if (this.dom)\n            this.dom.cmView = null;\n        this.dom = dom;\n        dom.cmView = this;\n    }\n    get rootView() {\n        for (let v = this;;) {\n            let parent = v.parent;\n            if (!parent)\n                return v;\n            v = parent;\n        }\n    }\n    replaceChildren(from, to, children = noChildren) {\n        this.markDirty();\n        for (let i = from; i < to; i++) {\n            let child = this.children[i];\n            if (child.parent == this && children.indexOf(child) < 0)\n                child.destroy();\n        }\n        if (children.length < 250)\n            this.children.splice(from, to - from, ...children);\n        else\n            this.children = [].concat(this.children.slice(0, from), children, this.children.slice(to));\n        for (let i = 0; i < children.length; i++)\n            children[i].setParent(this);\n    }\n    ignoreMutation(_rec) { return false; }\n    ignoreEvent(_event) { return false; }\n    childCursor(pos = this.length) {\n        return new ChildCursor(this.children, pos, this.children.length);\n    }\n    childPos(pos, bias = 1) {\n        return this.childCursor().findPos(pos, bias);\n    }\n    toString() {\n        let name = this.constructor.name.replace(\"View\", \"\");\n        return name + (this.children.length ? \"(\" + this.children.join() + \")\" :\n            this.length ? \"[\" + (name == \"Text\" ? this.text : this.length) + \"]\" : \"\") +\n            (this.breakAfter ? \"#\" : \"\");\n    }\n    static get(node) { return node.cmView; }\n    get isEditable() { return true; }\n    get isWidget() { return false; }\n    get isHidden() { return false; }\n    merge(from, to, source, hasStart, openStart, openEnd) {\n        return false;\n    }\n    become(other) { return false; }\n    canReuseDOM(other) {\n        return other.constructor == this.constructor && !((this.flags | other.flags) & 8 /* ViewFlag.Composition */);\n    }\n    // When this is a zero-length view with a side, this should return a\n    // number <= 0 to indicate it is before its position, or a\n    // number > 0 when after its position.\n    getSide() { return 0; }\n    destroy() {\n        for (let child of this.children)\n            if (child.parent == this)\n                child.destroy();\n        this.parent = null;\n    }\n}\nContentView.prototype.breakAfter = 0;\n// Remove a DOM node and return its next sibling.\nfunction rm$1(dom) {\n    let next = dom.nextSibling;\n    dom.parentNode.removeChild(dom);\n    return next;\n}\nclass ChildCursor {\n    constructor(children, pos, i) {\n        this.children = children;\n        this.pos = pos;\n        this.i = i;\n        this.off = 0;\n    }\n    findPos(pos, bias = 1) {\n        for (;;) {\n            if (pos > this.pos || pos == this.pos &&\n                (bias > 0 || this.i == 0 || this.children[this.i - 1].breakAfter)) {\n                this.off = pos - this.pos;\n                return this;\n            }\n            let next = this.children[--this.i];\n            this.pos -= next.length + next.breakAfter;\n        }\n    }\n}\nfunction replaceRange(parent, fromI, fromOff, toI, toOff, insert, breakAtStart, openStart, openEnd) {\n    let { children } = parent;\n    let before = children.length ? children[fromI] : null;\n    let last = insert.length ? insert[insert.length - 1] : null;\n    let breakAtEnd = last ? last.breakAfter : breakAtStart;\n    // Change within a single child\n    if (fromI == toI && before && !breakAtStart && !breakAtEnd && insert.length < 2 &&\n        before.merge(fromOff, toOff, insert.length ? last : null, fromOff == 0, openStart, openEnd))\n        return;\n    if (toI < children.length) {\n        let after = children[toI];\n        // Make sure the end of the child after the update is preserved in `after`\n        if (after && (toOff < after.length || after.breakAfter && (last === null || last === void 0 ? void 0 : last.breakAfter))) {\n            // If we're splitting a child, separate part of it to avoid that\n            // being mangled when updating the child before the update.\n            if (fromI == toI) {\n                after = after.split(toOff);\n                toOff = 0;\n            }\n            // If the element after the replacement should be merged with\n            // the last replacing element, update `content`\n            if (!breakAtEnd && last && after.merge(0, toOff, last, true, 0, openEnd)) {\n                insert[insert.length - 1] = after;\n            }\n            else {\n                // Remove the start of the after element, if necessary, and\n                // add it to `content`.\n                if (toOff || after.children.length && !after.children[0].length)\n                    after.merge(0, toOff, null, false, 0, openEnd);\n                insert.push(after);\n            }\n        }\n        else if (after === null || after === void 0 ? void 0 : after.breakAfter) {\n            // The element at `toI` is entirely covered by this range.\n            // Preserve its line break, if any.\n            if (last)\n                last.breakAfter = 1;\n            else\n                breakAtStart = 1;\n        }\n        // Since we've handled the next element from the current elements\n        // now, make sure `toI` points after that.\n        toI++;\n    }\n    if (before) {\n        before.breakAfter = breakAtStart;\n        if (fromOff > 0) {\n            if (!breakAtStart && insert.length && before.merge(fromOff, before.length, insert[0], false, openStart, 0)) {\n                before.breakAfter = insert.shift().breakAfter;\n            }\n            else if (fromOff < before.length || before.children.length && before.children[before.children.length - 1].length == 0) {\n                before.merge(fromOff, before.length, null, false, openStart, 0);\n            }\n            fromI++;\n        }\n    }\n    // Try to merge widgets on the boundaries of the replacement\n    while (fromI < toI && insert.length) {\n        if (children[toI - 1].become(insert[insert.length - 1])) {\n            toI--;\n            insert.pop();\n            openEnd = insert.length ? 0 : openStart;\n        }\n        else if (children[fromI].become(insert[0])) {\n            fromI++;\n            insert.shift();\n            openStart = insert.length ? 0 : openEnd;\n        }\n        else {\n            break;\n        }\n    }\n    if (!insert.length && fromI && toI < children.length && !children[fromI - 1].breakAfter &&\n        children[toI].merge(0, 0, children[fromI - 1], false, openStart, openEnd))\n        fromI--;\n    if (fromI < toI || insert.length)\n        parent.replaceChildren(fromI, toI, insert);\n}\nfunction mergeChildrenInto(parent, from, to, insert, openStart, openEnd) {\n    let cur = parent.childCursor();\n    let { i: toI, off: toOff } = cur.findPos(to, 1);\n    let { i: fromI, off: fromOff } = cur.findPos(from, -1);\n    let dLen = from - to;\n    for (let view of insert)\n        dLen += view.length;\n    parent.length += dLen;\n    replaceRange(parent, fromI, fromOff, toI, toOff, insert, 0, openStart, openEnd);\n}\n\nlet nav = typeof navigator != \"undefined\" ? navigator : { userAgent: \"\", vendor: \"\", platform: \"\" };\nlet doc = typeof document != \"undefined\" ? document : { documentElement: { style: {} } };\nconst ie_edge = /Edge\\/(\\d+)/.exec(nav.userAgent);\nconst ie_upto10 = /MSIE \\d/.test(nav.userAgent);\nconst ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(nav.userAgent);\nconst ie = !!(ie_upto10 || ie_11up || ie_edge);\nconst gecko = !ie && /gecko\\/(\\d+)/i.test(nav.userAgent);\nconst chrome = !ie && /Chrome\\/(\\d+)/.exec(nav.userAgent);\nconst webkit = \"webkitFontSmoothing\" in doc.documentElement.style;\nconst safari = !ie && /Apple Computer/.test(nav.vendor);\nconst ios = safari && (/Mobile\\/\\w+/.test(nav.userAgent) || nav.maxTouchPoints > 2);\nvar browser = {\n    mac: ios || /Mac/.test(nav.platform),\n    windows: /Win/.test(nav.platform),\n    linux: /Linux|X11/.test(nav.platform),\n    ie,\n    ie_version: ie_upto10 ? doc.documentMode || 6 : ie_11up ? +ie_11up[1] : ie_edge ? +ie_edge[1] : 0,\n    gecko,\n    gecko_version: gecko ? +(/Firefox\\/(\\d+)/.exec(nav.userAgent) || [0, 0])[1] : 0,\n    chrome: !!chrome,\n    chrome_version: chrome ? +chrome[1] : 0,\n    ios,\n    android: /Android\\b/.test(nav.userAgent),\n    webkit,\n    safari,\n    webkit_version: webkit ? +(/\\bAppleWebKit\\/(\\d+)/.exec(nav.userAgent) || [0, 0])[1] : 0,\n    tabSize: doc.documentElement.style.tabSize != null ? \"tab-size\" : \"-moz-tab-size\"\n};\n\nconst MaxJoinLen = 256;\nclass TextView extends ContentView {\n    constructor(text) {\n        super();\n        this.text = text;\n    }\n    get length() { return this.text.length; }\n    createDOM(textDOM) {\n        this.setDOM(textDOM || document.createTextNode(this.text));\n    }\n    sync(view, track) {\n        if (!this.dom)\n            this.createDOM();\n        if (this.dom.nodeValue != this.text) {\n            if (track && track.node == this.dom)\n                track.written = true;\n            this.dom.nodeValue = this.text;\n        }\n    }\n    reuseDOM(dom) {\n        if (dom.nodeType == 3)\n            this.createDOM(dom);\n    }\n    merge(from, to, source) {\n        if ((this.flags & 8 /* ViewFlag.Composition */) ||\n            source && (!(source instanceof TextView) ||\n                this.length - (to - from) + source.length > MaxJoinLen ||\n                (source.flags & 8 /* ViewFlag.Composition */)))\n            return false;\n        this.text = this.text.slice(0, from) + (source ? source.text : \"\") + this.text.slice(to);\n        this.markDirty();\n        return true;\n    }\n    split(from) {\n        let result = new TextView(this.text.slice(from));\n        this.text = this.text.slice(0, from);\n        this.markDirty();\n        result.flags |= this.flags & 8 /* ViewFlag.Composition */;\n        return result;\n    }\n    localPosFromDOM(node, offset) {\n        return node == this.dom ? offset : offset ? this.text.length : 0;\n    }\n    domAtPos(pos) { return new DOMPos(this.dom, pos); }\n    domBoundsAround(_from, _to, offset) {\n        return { from: offset, to: offset + this.length, startDOM: this.dom, endDOM: this.dom.nextSibling };\n    }\n    coordsAt(pos, side) {\n        return textCoords(this.dom, pos, side);\n    }\n}\nclass MarkView extends ContentView {\n    constructor(mark, children = [], length = 0) {\n        super();\n        this.mark = mark;\n        this.children = children;\n        this.length = length;\n        for (let ch of children)\n            ch.setParent(this);\n    }\n    setAttrs(dom) {\n        clearAttributes(dom);\n        if (this.mark.class)\n            dom.className = this.mark.class;\n        if (this.mark.attrs)\n            for (let name in this.mark.attrs)\n                dom.setAttribute(name, this.mark.attrs[name]);\n        return dom;\n    }\n    canReuseDOM(other) {\n        return super.canReuseDOM(other) && !((this.flags | other.flags) & 8 /* ViewFlag.Composition */);\n    }\n    reuseDOM(node) {\n        if (node.nodeName == this.mark.tagName.toUpperCase()) {\n            this.setDOM(node);\n            this.flags |= 4 /* ViewFlag.AttrsDirty */ | 2 /* ViewFlag.NodeDirty */;\n        }\n    }\n    sync(view, track) {\n        if (!this.dom)\n            this.setDOM(this.setAttrs(document.createElement(this.mark.tagName)));\n        else if (this.flags & 4 /* ViewFlag.AttrsDirty */)\n            this.setAttrs(this.dom);\n        super.sync(view, track);\n    }\n    merge(from, to, source, _hasStart, openStart, openEnd) {\n        if (source && (!(source instanceof MarkView && source.mark.eq(this.mark)) ||\n            (from && openStart <= 0) || (to < this.length && openEnd <= 0)))\n            return false;\n        mergeChildrenInto(this, from, to, source ? source.children.slice() : [], openStart - 1, openEnd - 1);\n        this.markDirty();\n        return true;\n    }\n    split(from) {\n        let result = [], off = 0, detachFrom = -1, i = 0;\n        for (let elt of this.children) {\n            let end = off + elt.length;\n            if (end > from)\n                result.push(off < from ? elt.split(from - off) : elt);\n            if (detachFrom < 0 && off >= from)\n                detachFrom = i;\n            off = end;\n            i++;\n        }\n        let length = this.length - from;\n        this.length = from;\n        if (detachFrom > -1) {\n            this.children.length = detachFrom;\n            this.markDirty();\n        }\n        return new MarkView(this.mark, result, length);\n    }\n    domAtPos(pos) {\n        return inlineDOMAtPos(this, pos);\n    }\n    coordsAt(pos, side) {\n        return coordsInChildren(this, pos, side);\n    }\n}\nfunction textCoords(text, pos, side) {\n    let length = text.nodeValue.length;\n    if (pos > length)\n        pos = length;\n    let from = pos, to = pos, flatten = 0;\n    if (pos == 0 && side < 0 || pos == length && side >= 0) {\n        if (!(browser.chrome || browser.gecko)) { // These browsers reliably return valid rectangles for empty ranges\n            if (pos) {\n                from--;\n                flatten = 1;\n            } // FIXME this is wrong in RTL text\n            else if (to < length) {\n                to++;\n                flatten = -1;\n            }\n        }\n    }\n    else {\n        if (side < 0)\n            from--;\n        else if (to < length)\n            to++;\n    }\n    let rects = textRange(text, from, to).getClientRects();\n    if (!rects.length)\n        return null;\n    let rect = rects[(flatten ? flatten < 0 : side >= 0) ? 0 : rects.length - 1];\n    if (browser.safari && !flatten && rect.width == 0)\n        rect = Array.prototype.find.call(rects, r => r.width) || rect;\n    return flatten ? flattenRect(rect, flatten < 0) : rect || null;\n}\n// Also used for collapsed ranges that don't have a placeholder widget!\nclass WidgetView extends ContentView {\n    static create(widget, length, side) {\n        return new WidgetView(widget, length, side);\n    }\n    constructor(widget, length, side) {\n        super();\n        this.widget = widget;\n        this.length = length;\n        this.side = side;\n        this.prevWidget = null;\n    }\n    split(from) {\n        let result = WidgetView.create(this.widget, this.length - from, this.side);\n        this.length -= from;\n        return result;\n    }\n    sync(view) {\n        if (!this.dom || !this.widget.updateDOM(this.dom, view)) {\n            if (this.dom && this.prevWidget)\n                this.prevWidget.destroy(this.dom);\n            this.prevWidget = null;\n            this.setDOM(this.widget.toDOM(view));\n            if (!this.widget.editable)\n                this.dom.contentEditable = \"false\";\n        }\n    }\n    getSide() { return this.side; }\n    merge(from, to, source, hasStart, openStart, openEnd) {\n        if (source && (!(source instanceof WidgetView) || !this.widget.compare(source.widget) ||\n            from > 0 && openStart <= 0 || to < this.length && openEnd <= 0))\n            return false;\n        this.length = from + (source ? source.length : 0) + (this.length - to);\n        return true;\n    }\n    become(other) {\n        if (other instanceof WidgetView && other.side == this.side &&\n            this.widget.constructor == other.widget.constructor) {\n            if (!this.widget.compare(other.widget))\n                this.markDirty(true);\n            if (this.dom && !this.prevWidget)\n                this.prevWidget = this.widget;\n            this.widget = other.widget;\n            this.length = other.length;\n            return true;\n        }\n        return false;\n    }\n    ignoreMutation() { return true; }\n    ignoreEvent(event) { return this.widget.ignoreEvent(event); }\n    get overrideDOMText() {\n        if (this.length == 0)\n            return state.Text.empty;\n        let top = this;\n        while (top.parent)\n            top = top.parent;\n        let { view } = top, text = view && view.state.doc, start = this.posAtStart;\n        return text ? text.slice(start, start + this.length) : state.Text.empty;\n    }\n    domAtPos(pos) {\n        return (this.length ? pos == 0 : this.side > 0)\n            ? DOMPos.before(this.dom)\n            : DOMPos.after(this.dom, pos == this.length);\n    }\n    domBoundsAround() { return null; }\n    coordsAt(pos, side) {\n        let custom = this.widget.coordsAt(this.dom, pos, side);\n        if (custom)\n            return custom;\n        let rects = this.dom.getClientRects(), rect = null;\n        if (!rects.length)\n            return null;\n        let fromBack = this.side ? this.side < 0 : pos > 0;\n        for (let i = fromBack ? rects.length - 1 : 0;; i += (fromBack ? -1 : 1)) {\n            rect = rects[i];\n            if (pos > 0 ? i == 0 : i == rects.length - 1 || rect.top < rect.bottom)\n                break;\n        }\n        return flattenRect(rect, !fromBack);\n    }\n    get isEditable() { return false; }\n    get isWidget() { return true; }\n    get isHidden() { return this.widget.isHidden; }\n    destroy() {\n        super.destroy();\n        if (this.dom)\n            this.widget.destroy(this.dom);\n    }\n}\n// These are drawn around uneditable widgets to avoid a number of\n// browser bugs that show up when the cursor is directly next to\n// uneditable inline content.\nclass WidgetBufferView extends ContentView {\n    constructor(side) {\n        super();\n        this.side = side;\n    }\n    get length() { return 0; }\n    merge() { return false; }\n    become(other) {\n        return other instanceof WidgetBufferView && other.side == this.side;\n    }\n    split() { return new WidgetBufferView(this.side); }\n    sync() {\n        if (!this.dom) {\n            let dom = document.createElement(\"img\");\n            dom.className = \"cm-widgetBuffer\";\n            dom.setAttribute(\"aria-hidden\", \"true\");\n            this.setDOM(dom);\n        }\n    }\n    getSide() { return this.side; }\n    domAtPos(pos) { return this.side > 0 ? DOMPos.before(this.dom) : DOMPos.after(this.dom); }\n    localPosFromDOM() { return 0; }\n    domBoundsAround() { return null; }\n    coordsAt(pos) {\n        return this.dom.getBoundingClientRect();\n    }\n    get overrideDOMText() {\n        return state.Text.empty;\n    }\n    get isHidden() { return true; }\n}\nTextView.prototype.children = WidgetView.prototype.children = WidgetBufferView.prototype.children = noChildren;\nfunction inlineDOMAtPos(parent, pos) {\n    let dom = parent.dom, { children } = parent, i = 0;\n    for (let off = 0; i < children.length; i++) {\n        let child = children[i], end = off + child.length;\n        if (end == off && child.getSide() <= 0)\n            continue;\n        if (pos > off && pos < end && child.dom.parentNode == dom)\n            return child.domAtPos(pos - off);\n        if (pos <= off)\n            break;\n        off = end;\n    }\n    for (let j = i; j > 0; j--) {\n        let prev = children[j - 1];\n        if (prev.dom.parentNode == dom)\n            return prev.domAtPos(prev.length);\n    }\n    for (let j = i; j < children.length; j++) {\n        let next = children[j];\n        if (next.dom.parentNode == dom)\n            return next.domAtPos(0);\n    }\n    return new DOMPos(dom, 0);\n}\n// Assumes `view`, if a mark view, has precisely 1 child.\nfunction joinInlineInto(parent, view, open) {\n    let last, { children } = parent;\n    if (open > 0 && view instanceof MarkView && children.length &&\n        (last = children[children.length - 1]) instanceof MarkView && last.mark.eq(view.mark)) {\n        joinInlineInto(last, view.children[0], open - 1);\n    }\n    else {\n        children.push(view);\n        view.setParent(parent);\n    }\n    parent.length += view.length;\n}\nfunction coordsInChildren(view, pos, side) {\n    let before = null, beforePos = -1, after = null, afterPos = -1;\n    function scan(view, pos) {\n        for (let i = 0, off = 0; i < view.children.length && off <= pos; i++) {\n            let child = view.children[i], end = off + child.length;\n            if (end >= pos) {\n                if (child.children.length) {\n                    scan(child, pos - off);\n                }\n                else if ((!after || after.isHidden && side > 0) &&\n                    (end > pos || off == end && child.getSide() > 0)) {\n                    after = child;\n                    afterPos = pos - off;\n                }\n                else if (off < pos || (off == end && child.getSide() < 0) && !child.isHidden) {\n                    before = child;\n                    beforePos = pos - off;\n                }\n            }\n            off = end;\n        }\n    }\n    scan(view, pos);\n    let target = (side < 0 ? before : after) || before || after;\n    if (target)\n        return target.coordsAt(Math.max(0, target == before ? beforePos : afterPos), side);\n    return fallbackRect(view);\n}\nfunction fallbackRect(view) {\n    let last = view.dom.lastChild;\n    if (!last)\n        return view.dom.getBoundingClientRect();\n    let rects = clientRectsFor(last);\n    return rects[rects.length - 1] || null;\n}\n\nfunction combineAttrs(source, target) {\n    for (let name in source) {\n        if (name == \"class\" && target.class)\n            target.class += \" \" + source.class;\n        else if (name == \"style\" && target.style)\n            target.style += \";\" + source.style;\n        else\n            target[name] = source[name];\n    }\n    return target;\n}\nconst noAttrs = Object.create(null);\nfunction attrsEq(a, b, ignore) {\n    if (a == b)\n        return true;\n    if (!a)\n        a = noAttrs;\n    if (!b)\n        b = noAttrs;\n    let keysA = Object.keys(a), keysB = Object.keys(b);\n    if (keysA.length - (ignore && keysA.indexOf(ignore) > -1 ? 1 : 0) !=\n        keysB.length - (ignore && keysB.indexOf(ignore) > -1 ? 1 : 0))\n        return false;\n    for (let key of keysA) {\n        if (key != ignore && (keysB.indexOf(key) == -1 || a[key] !== b[key]))\n            return false;\n    }\n    return true;\n}\nfunction updateAttrs(dom, prev, attrs) {\n    let changed = false;\n    if (prev)\n        for (let name in prev)\n            if (!(attrs && name in attrs)) {\n                changed = true;\n                if (name == \"style\")\n                    dom.style.cssText = \"\";\n                else\n                    dom.removeAttribute(name);\n            }\n    if (attrs)\n        for (let name in attrs)\n            if (!(prev && prev[name] == attrs[name])) {\n                changed = true;\n                if (name == \"style\")\n                    dom.style.cssText = attrs[name];\n                else\n                    dom.setAttribute(name, attrs[name]);\n            }\n    return changed;\n}\nfunction getAttrs(dom) {\n    let attrs = Object.create(null);\n    for (let i = 0; i < dom.attributes.length; i++) {\n        let attr = dom.attributes[i];\n        attrs[attr.name] = attr.value;\n    }\n    return attrs;\n}\n\n/**\nWidgets added to the content are described by subclasses of this\nclass. Using a description object like that makes it possible to\ndelay creating of the DOM structure for a widget until it is\nneeded, and to avoid redrawing widgets even if the decorations\nthat define them are recreated.\n*/\nclass WidgetType {\n    /**\n    Compare this instance to another instance of the same type.\n    (TypeScript can't express this, but only instances of the same\n    specific class will be passed to this method.) This is used to\n    avoid redrawing widgets when they are replaced by a new\n    decoration of the same type. The default implementation just\n    returns `false`, which will cause new instances of the widget to\n    always be redrawn.\n    */\n    eq(widget) { return false; }\n    /**\n    Update a DOM element created by a widget of the same type (but\n    different, non-`eq` content) to reflect this widget. May return\n    true to indicate that it could update, false to indicate it\n    couldn't (in which case the widget will be redrawn). The default\n    implementation just returns false.\n    */\n    updateDOM(dom, view) { return false; }\n    /**\n    @internal\n    */\n    compare(other) {\n        return this == other || this.constructor == other.constructor && this.eq(other);\n    }\n    /**\n    The estimated height this widget will have, to be used when\n    estimating the height of content that hasn't been drawn. May\n    return -1 to indicate you don't know. The default implementation\n    returns -1.\n    */\n    get estimatedHeight() { return -1; }\n    /**\n    For inline widgets that are displayed inline (as opposed to\n    `inline-block`) and introduce line breaks (through `<br>` tags\n    or textual newlines), this must indicate the amount of line\n    breaks they introduce. Defaults to 0.\n    */\n    get lineBreaks() { return 0; }\n    /**\n    Can be used to configure which kinds of events inside the widget\n    should be ignored by the editor. The default is to ignore all\n    events.\n    */\n    ignoreEvent(event) { return true; }\n    /**\n    Override the way screen coordinates for positions at/in the\n    widget are found. `pos` will be the offset into the widget, and\n    `side` the side of the position that is being queried—less than\n    zero for before, greater than zero for after, and zero for\n    directly at that position.\n    */\n    coordsAt(dom, pos, side) { return null; }\n    /**\n    @internal\n    */\n    get isHidden() { return false; }\n    /**\n    @internal\n    */\n    get editable() { return false; }\n    /**\n    This is called when the an instance of the widget is removed\n    from the editor view.\n    */\n    destroy(dom) { }\n}\n/**\nThe different types of blocks that can occur in an editor view.\n*/\nexports.BlockType = void 0;\n(function (BlockType) {\n    /**\n    A line of text.\n    */\n    BlockType[BlockType[\"Text\"] = 0] = \"Text\";\n    /**\n    A block widget associated with the position after it.\n    */\n    BlockType[BlockType[\"WidgetBefore\"] = 1] = \"WidgetBefore\";\n    /**\n    A block widget associated with the position before it.\n    */\n    BlockType[BlockType[\"WidgetAfter\"] = 2] = \"WidgetAfter\";\n    /**\n    A block widget [replacing](https://codemirror.net/6/docs/ref/#view.Decoration^replace) a range of content.\n    */\n    BlockType[BlockType[\"WidgetRange\"] = 3] = \"WidgetRange\";\n})(exports.BlockType || (exports.BlockType = {}));\n/**\nA decoration provides information on how to draw or style a piece\nof content. You'll usually use it wrapped in a\n[`Range`](https://codemirror.net/6/docs/ref/#state.Range), which adds a start and end position.\n@nonabstract\n*/\nclass Decoration extends state.RangeValue {\n    constructor(\n    /**\n    @internal\n    */\n    startSide, \n    /**\n    @internal\n    */\n    endSide, \n    /**\n    @internal\n    */\n    widget, \n    /**\n    The config object used to create this decoration. You can\n    include additional properties in there to store metadata about\n    your decoration.\n    */\n    spec) {\n        super();\n        this.startSide = startSide;\n        this.endSide = endSide;\n        this.widget = widget;\n        this.spec = spec;\n    }\n    /**\n    @internal\n    */\n    get heightRelevant() { return false; }\n    /**\n    Create a mark decoration, which influences the styling of the\n    content in its range. Nested mark decorations will cause nested\n    DOM elements to be created. Nesting order is determined by\n    precedence of the [facet](https://codemirror.net/6/docs/ref/#view.EditorView^decorations), with\n    the higher-precedence decorations creating the inner DOM nodes.\n    Such elements are split on line boundaries and on the boundaries\n    of lower-precedence decorations.\n    */\n    static mark(spec) {\n        return new MarkDecoration(spec);\n    }\n    /**\n    Create a widget decoration, which displays a DOM element at the\n    given position.\n    */\n    static widget(spec) {\n        let side = Math.max(-10000, Math.min(10000, spec.side || 0)), block = !!spec.block;\n        side += (block && !spec.inlineOrder)\n            ? (side > 0 ? 300000000 /* Side.BlockAfter */ : -400000000 /* Side.BlockBefore */)\n            : (side > 0 ? 100000000 /* Side.InlineAfter */ : -100000000 /* Side.InlineBefore */);\n        return new PointDecoration(spec, side, side, block, spec.widget || null, false);\n    }\n    /**\n    Create a replace decoration which replaces the given range with\n    a widget, or simply hides it.\n    */\n    static replace(spec) {\n        let block = !!spec.block, startSide, endSide;\n        if (spec.isBlockGap) {\n            startSide = -500000000 /* Side.GapStart */;\n            endSide = 400000000 /* Side.GapEnd */;\n        }\n        else {\n            let { start, end } = getInclusive(spec, block);\n            startSide = (start ? (block ? -300000000 /* Side.BlockIncStart */ : -1 /* Side.InlineIncStart */) : 500000000 /* Side.NonIncStart */) - 1;\n            endSide = (end ? (block ? 200000000 /* Side.BlockIncEnd */ : 1 /* Side.InlineIncEnd */) : -600000000 /* Side.NonIncEnd */) + 1;\n        }\n        return new PointDecoration(spec, startSide, endSide, block, spec.widget || null, true);\n    }\n    /**\n    Create a line decoration, which can add DOM attributes to the\n    line starting at the given position.\n    */\n    static line(spec) {\n        return new LineDecoration(spec);\n    }\n    /**\n    Build a [`DecorationSet`](https://codemirror.net/6/docs/ref/#view.DecorationSet) from the given\n    decorated range or ranges. If the ranges aren't already sorted,\n    pass `true` for `sort` to make the library sort them for you.\n    */\n    static set(of, sort = false) {\n        return state.RangeSet.of(of, sort);\n    }\n    /**\n    @internal\n    */\n    hasHeight() { return this.widget ? this.widget.estimatedHeight > -1 : false; }\n}\n/**\nThe empty set of decorations.\n*/\nDecoration.none = state.RangeSet.empty;\nclass MarkDecoration extends Decoration {\n    constructor(spec) {\n        let { start, end } = getInclusive(spec);\n        super(start ? -1 /* Side.InlineIncStart */ : 500000000 /* Side.NonIncStart */, end ? 1 /* Side.InlineIncEnd */ : -600000000 /* Side.NonIncEnd */, null, spec);\n        this.tagName = spec.tagName || \"span\";\n        this.class = spec.class || \"\";\n        this.attrs = spec.attributes || null;\n    }\n    eq(other) {\n        var _a, _b;\n        return this == other ||\n            other instanceof MarkDecoration &&\n                this.tagName == other.tagName &&\n                (this.class || ((_a = this.attrs) === null || _a === void 0 ? void 0 : _a.class)) == (other.class || ((_b = other.attrs) === null || _b === void 0 ? void 0 : _b.class)) &&\n                attrsEq(this.attrs, other.attrs, \"class\");\n    }\n    range(from, to = from) {\n        if (from >= to)\n            throw new RangeError(\"Mark decorations may not be empty\");\n        return super.range(from, to);\n    }\n}\nMarkDecoration.prototype.point = false;\nclass LineDecoration extends Decoration {\n    constructor(spec) {\n        super(-200000000 /* Side.Line */, -200000000 /* Side.Line */, null, spec);\n    }\n    eq(other) {\n        return other instanceof LineDecoration &&\n            this.spec.class == other.spec.class &&\n            attrsEq(this.spec.attributes, other.spec.attributes);\n    }\n    range(from, to = from) {\n        if (to != from)\n            throw new RangeError(\"Line decoration ranges must be zero-length\");\n        return super.range(from, to);\n    }\n}\nLineDecoration.prototype.mapMode = state.MapMode.TrackBefore;\nLineDecoration.prototype.point = true;\nclass PointDecoration extends Decoration {\n    constructor(spec, startSide, endSide, block, widget, isReplace) {\n        super(startSide, endSide, widget, spec);\n        this.block = block;\n        this.isReplace = isReplace;\n        this.mapMode = !block ? state.MapMode.TrackDel : startSide <= 0 ? state.MapMode.TrackBefore : state.MapMode.TrackAfter;\n    }\n    // Only relevant when this.block == true\n    get type() {\n        return this.startSide != this.endSide ? exports.BlockType.WidgetRange\n            : this.startSide <= 0 ? exports.BlockType.WidgetBefore : exports.BlockType.WidgetAfter;\n    }\n    get heightRelevant() {\n        return this.block || !!this.widget && (this.widget.estimatedHeight >= 5 || this.widget.lineBreaks > 0);\n    }\n    eq(other) {\n        return other instanceof PointDecoration &&\n            widgetsEq(this.widget, other.widget) &&\n            this.block == other.block &&\n            this.startSide == other.startSide && this.endSide == other.endSide;\n    }\n    range(from, to = from) {\n        if (this.isReplace && (from > to || (from == to && this.startSide > 0 && this.endSide <= 0)))\n            throw new RangeError(\"Invalid range for replacement decoration\");\n        if (!this.isReplace && to != from)\n            throw new RangeError(\"Widget decorations can only have zero-length ranges\");\n        return super.range(from, to);\n    }\n}\nPointDecoration.prototype.point = true;\nfunction getInclusive(spec, block = false) {\n    let { inclusiveStart: start, inclusiveEnd: end } = spec;\n    if (start == null)\n        start = spec.inclusive;\n    if (end == null)\n        end = spec.inclusive;\n    return { start: start !== null && start !== void 0 ? start : block, end: end !== null && end !== void 0 ? end : block };\n}\nfunction widgetsEq(a, b) {\n    return a == b || !!(a && b && a.compare(b));\n}\nfunction addRange(from, to, ranges, margin = 0) {\n    let last = ranges.length - 1;\n    if (last >= 0 && ranges[last] + margin >= from)\n        ranges[last] = Math.max(ranges[last], to);\n    else\n        ranges.push(from, to);\n}\n\nclass LineView extends ContentView {\n    constructor() {\n        super(...arguments);\n        this.children = [];\n        this.length = 0;\n        this.prevAttrs = undefined;\n        this.attrs = null;\n        this.breakAfter = 0;\n    }\n    // Consumes source\n    merge(from, to, source, hasStart, openStart, openEnd) {\n        if (source) {\n            if (!(source instanceof LineView))\n                return false;\n            if (!this.dom)\n                source.transferDOM(this); // Reuse source.dom when appropriate\n        }\n        if (hasStart)\n            this.setDeco(source ? source.attrs : null);\n        mergeChildrenInto(this, from, to, source ? source.children.slice() : [], openStart, openEnd);\n        return true;\n    }\n    split(at) {\n        let end = new LineView;\n        end.breakAfter = this.breakAfter;\n        if (this.length == 0)\n            return end;\n        let { i, off } = this.childPos(at);\n        if (off) {\n            end.append(this.children[i].split(off), 0);\n            this.children[i].merge(off, this.children[i].length, null, false, 0, 0);\n            i++;\n        }\n        for (let j = i; j < this.children.length; j++)\n            end.append(this.children[j], 0);\n        while (i > 0 && this.children[i - 1].length == 0)\n            this.children[--i].destroy();\n        this.children.length = i;\n        this.markDirty();\n        this.length = at;\n        return end;\n    }\n    transferDOM(other) {\n        if (!this.dom)\n            return;\n        this.markDirty();\n        other.setDOM(this.dom);\n        other.prevAttrs = this.prevAttrs === undefined ? this.attrs : this.prevAttrs;\n        this.prevAttrs = undefined;\n        this.dom = null;\n    }\n    setDeco(attrs) {\n        if (!attrsEq(this.attrs, attrs)) {\n            if (this.dom) {\n                this.prevAttrs = this.attrs;\n                this.markDirty();\n            }\n            this.attrs = attrs;\n        }\n    }\n    append(child, openStart) {\n        joinInlineInto(this, child, openStart);\n    }\n    // Only called when building a line view in ContentBuilder\n    addLineDeco(deco) {\n        let attrs = deco.spec.attributes, cls = deco.spec.class;\n        if (attrs)\n            this.attrs = combineAttrs(attrs, this.attrs || {});\n        if (cls)\n            this.attrs = combineAttrs({ class: cls }, this.attrs || {});\n    }\n    domAtPos(pos) {\n        return inlineDOMAtPos(this, pos);\n    }\n    reuseDOM(node) {\n        if (node.nodeName == \"DIV\") {\n            this.setDOM(node);\n            this.flags |= 4 /* ViewFlag.AttrsDirty */ | 2 /* ViewFlag.NodeDirty */;\n        }\n    }\n    sync(view, track) {\n        var _a;\n        if (!this.dom) {\n            this.setDOM(document.createElement(\"div\"));\n            this.dom.className = \"cm-line\";\n            this.prevAttrs = this.attrs ? null : undefined;\n        }\n        else if (this.flags & 4 /* ViewFlag.AttrsDirty */) {\n            clearAttributes(this.dom);\n            this.dom.className = \"cm-line\";\n            this.prevAttrs = this.attrs ? null : undefined;\n        }\n        if (this.prevAttrs !== undefined) {\n            updateAttrs(this.dom, this.prevAttrs, this.attrs);\n            this.dom.classList.add(\"cm-line\");\n            this.prevAttrs = undefined;\n        }\n        super.sync(view, track);\n        let last = this.dom.lastChild;\n        while (last && ContentView.get(last) instanceof MarkView)\n            last = last.lastChild;\n        if (!last || !this.length ||\n            last.nodeName != \"BR\" && ((_a = ContentView.get(last)) === null || _a === void 0 ? void 0 : _a.isEditable) == false &&\n                (!browser.ios || !this.children.some(ch => ch instanceof TextView))) {\n            let hack = document.createElement(\"BR\");\n            hack.cmIgnore = true;\n            this.dom.appendChild(hack);\n        }\n    }\n    measureTextSize() {\n        if (this.children.length == 0 || this.length > 20)\n            return null;\n        let totalWidth = 0, textHeight;\n        for (let child of this.children) {\n            if (!(child instanceof TextView) || /[^ -~]/.test(child.text))\n                return null;\n            let rects = clientRectsFor(child.dom);\n            if (rects.length != 1)\n                return null;\n            totalWidth += rects[0].width;\n            textHeight = rects[0].height;\n        }\n        return !totalWidth ? null : {\n            lineHeight: this.dom.getBoundingClientRect().height,\n            charWidth: totalWidth / this.length,\n            textHeight\n        };\n    }\n    coordsAt(pos, side) {\n        let rect = coordsInChildren(this, pos, side);\n        // Correct rectangle height for empty lines when the returned\n        // height is larger than the text height.\n        if (!this.children.length && rect && this.parent) {\n            let { heightOracle } = this.parent.view.viewState, height = rect.bottom - rect.top;\n            if (Math.abs(height - heightOracle.lineHeight) < 2 && heightOracle.textHeight < height) {\n                let dist = (height - heightOracle.textHeight) / 2;\n                return { top: rect.top + dist, bottom: rect.bottom - dist, left: rect.left, right: rect.left };\n            }\n        }\n        return rect;\n    }\n    become(other) {\n        return other instanceof LineView && this.children.length == 0 && other.children.length == 0 &&\n            attrsEq(this.attrs, other.attrs) && this.breakAfter == other.breakAfter;\n    }\n    covers() { return true; }\n    static find(docView, pos) {\n        for (let i = 0, off = 0; i < docView.children.length; i++) {\n            let block = docView.children[i], end = off + block.length;\n            if (end >= pos) {\n                if (block instanceof LineView)\n                    return block;\n                if (end > pos)\n                    break;\n            }\n            off = end + block.breakAfter;\n        }\n        return null;\n    }\n}\nclass BlockWidgetView extends ContentView {\n    constructor(widget, length, deco) {\n        super();\n        this.widget = widget;\n        this.length = length;\n        this.deco = deco;\n        this.breakAfter = 0;\n        this.prevWidget = null;\n    }\n    merge(from, to, source, _takeDeco, openStart, openEnd) {\n        if (source && (!(source instanceof BlockWidgetView) || !this.widget.compare(source.widget) ||\n            from > 0 && openStart <= 0 || to < this.length && openEnd <= 0))\n            return false;\n        this.length = from + (source ? source.length : 0) + (this.length - to);\n        return true;\n    }\n    domAtPos(pos) {\n        return pos == 0 ? DOMPos.before(this.dom) : DOMPos.after(this.dom, pos == this.length);\n    }\n    split(at) {\n        let len = this.length - at;\n        this.length = at;\n        let end = new BlockWidgetView(this.widget, len, this.deco);\n        end.breakAfter = this.breakAfter;\n        return end;\n    }\n    get children() { return noChildren; }\n    sync(view) {\n        if (!this.dom || !this.widget.updateDOM(this.dom, view)) {\n            if (this.dom && this.prevWidget)\n                this.prevWidget.destroy(this.dom);\n            this.prevWidget = null;\n            this.setDOM(this.widget.toDOM(view));\n            if (!this.widget.editable)\n                this.dom.contentEditable = \"false\";\n        }\n    }\n    get overrideDOMText() {\n        return this.parent ? this.parent.view.state.doc.slice(this.posAtStart, this.posAtEnd) : state.Text.empty;\n    }\n    domBoundsAround() { return null; }\n    become(other) {\n        if (other instanceof BlockWidgetView &&\n            other.widget.constructor == this.widget.constructor) {\n            if (!other.widget.compare(this.widget))\n                this.markDirty(true);\n            if (this.dom && !this.prevWidget)\n                this.prevWidget = this.widget;\n            this.widget = other.widget;\n            this.length = other.length;\n            this.deco = other.deco;\n            this.breakAfter = other.breakAfter;\n            return true;\n        }\n        return false;\n    }\n    ignoreMutation() { return true; }\n    ignoreEvent(event) { return this.widget.ignoreEvent(event); }\n    get isEditable() { return false; }\n    get isWidget() { return true; }\n    coordsAt(pos, side) {\n        let custom = this.widget.coordsAt(this.dom, pos, side);\n        if (custom)\n            return custom;\n        if (this.widget instanceof BlockGapWidget)\n            return null;\n        return flattenRect(this.dom.getBoundingClientRect(), this.length ? pos == 0 : side <= 0);\n    }\n    destroy() {\n        super.destroy();\n        if (this.dom)\n            this.widget.destroy(this.dom);\n    }\n    covers(side) {\n        let { startSide, endSide } = this.deco;\n        return startSide == endSide ? false : side < 0 ? startSide < 0 : endSide > 0;\n    }\n}\nclass BlockGapWidget extends WidgetType {\n    constructor(height) {\n        super();\n        this.height = height;\n    }\n    toDOM() {\n        let elt = document.createElement(\"div\");\n        elt.className = \"cm-gap\";\n        this.updateDOM(elt);\n        return elt;\n    }\n    eq(other) { return other.height == this.height; }\n    updateDOM(elt) {\n        elt.style.height = this.height + \"px\";\n        return true;\n    }\n    get editable() { return true; }\n    get estimatedHeight() { return this.height; }\n    ignoreEvent() { return false; }\n}\n\nclass ContentBuilder {\n    constructor(doc, pos, end, disallowBlockEffectsFor) {\n        this.doc = doc;\n        this.pos = pos;\n        this.end = end;\n        this.disallowBlockEffectsFor = disallowBlockEffectsFor;\n        this.content = [];\n        this.curLine = null;\n        this.breakAtStart = 0;\n        this.pendingBuffer = 0 /* Buf.No */;\n        this.bufferMarks = [];\n        // Set to false directly after a widget that covers the position after it\n        this.atCursorPos = true;\n        this.openStart = -1;\n        this.openEnd = -1;\n        this.text = \"\";\n        this.textOff = 0;\n        this.cursor = doc.iter();\n        this.skip = pos;\n    }\n    posCovered() {\n        if (this.content.length == 0)\n            return !this.breakAtStart && this.doc.lineAt(this.pos).from != this.pos;\n        let last = this.content[this.content.length - 1];\n        return !(last.breakAfter || last instanceof BlockWidgetView && last.deco.endSide < 0);\n    }\n    getLine() {\n        if (!this.curLine) {\n            this.content.push(this.curLine = new LineView);\n            this.atCursorPos = true;\n        }\n        return this.curLine;\n    }\n    flushBuffer(active = this.bufferMarks) {\n        if (this.pendingBuffer) {\n            this.curLine.append(wrapMarks(new WidgetBufferView(-1), active), active.length);\n            this.pendingBuffer = 0 /* Buf.No */;\n        }\n    }\n    addBlockWidget(view) {\n        this.flushBuffer();\n        this.curLine = null;\n        this.content.push(view);\n    }\n    finish(openEnd) {\n        if (this.pendingBuffer && openEnd <= this.bufferMarks.length)\n            this.flushBuffer();\n        else\n            this.pendingBuffer = 0 /* Buf.No */;\n        if (!this.posCovered() &&\n            !(openEnd && this.content.length && this.content[this.content.length - 1] instanceof BlockWidgetView))\n            this.getLine();\n    }\n    buildText(length, active, openStart) {\n        while (length > 0) {\n            if (this.textOff == this.text.length) {\n                let { value, lineBreak, done } = this.cursor.next(this.skip);\n                this.skip = 0;\n                if (done)\n                    throw new Error(\"Ran out of text content when drawing inline views\");\n                if (lineBreak) {\n                    if (!this.posCovered())\n                        this.getLine();\n                    if (this.content.length)\n                        this.content[this.content.length - 1].breakAfter = 1;\n                    else\n                        this.breakAtStart = 1;\n                    this.flushBuffer();\n                    this.curLine = null;\n                    this.atCursorPos = true;\n                    length--;\n                    continue;\n                }\n                else {\n                    this.text = value;\n                    this.textOff = 0;\n                }\n            }\n            let take = Math.min(this.text.length - this.textOff, length, 512 /* T.Chunk */);\n            this.flushBuffer(active.slice(active.length - openStart));\n            this.getLine().append(wrapMarks(new TextView(this.text.slice(this.textOff, this.textOff + take)), active), openStart);\n            this.atCursorPos = true;\n            this.textOff += take;\n            length -= take;\n            openStart = 0;\n        }\n    }\n    span(from, to, active, openStart) {\n        this.buildText(to - from, active, openStart);\n        this.pos = to;\n        if (this.openStart < 0)\n            this.openStart = openStart;\n    }\n    point(from, to, deco, active, openStart, index) {\n        if (this.disallowBlockEffectsFor[index] && deco instanceof PointDecoration) {\n            if (deco.block)\n                throw new RangeError(\"Block decorations may not be specified via plugins\");\n            if (to > this.doc.lineAt(this.pos).to)\n                throw new RangeError(\"Decorations that replace line breaks may not be specified via plugins\");\n        }\n        let len = to - from;\n        if (deco instanceof PointDecoration) {\n            if (deco.block) {\n                if (deco.startSide > 0 && !this.posCovered())\n                    this.getLine();\n                this.addBlockWidget(new BlockWidgetView(deco.widget || NullWidget.block, len, deco));\n            }\n            else {\n                let view = WidgetView.create(deco.widget || NullWidget.inline, len, len ? 0 : deco.startSide);\n                let cursorBefore = this.atCursorPos && !view.isEditable && openStart <= active.length &&\n                    (from < to || deco.startSide > 0);\n                let cursorAfter = !view.isEditable && (from < to || openStart > active.length || deco.startSide <= 0);\n                let line = this.getLine();\n                if (this.pendingBuffer == 2 /* Buf.IfCursor */ && !cursorBefore && !view.isEditable)\n                    this.pendingBuffer = 0 /* Buf.No */;\n                this.flushBuffer(active);\n                if (cursorBefore) {\n                    line.append(wrapMarks(new WidgetBufferView(1), active), openStart);\n                    openStart = active.length + Math.max(0, openStart - active.length);\n                }\n                line.append(wrapMarks(view, active), openStart);\n                this.atCursorPos = cursorAfter;\n                this.pendingBuffer = !cursorAfter ? 0 /* Buf.No */ : from < to || openStart > active.length ? 1 /* Buf.Yes */ : 2 /* Buf.IfCursor */;\n                if (this.pendingBuffer)\n                    this.bufferMarks = active.slice();\n            }\n        }\n        else if (this.doc.lineAt(this.pos).from == this.pos) { // Line decoration\n            this.getLine().addLineDeco(deco);\n        }\n        if (len) {\n            // Advance the iterator past the replaced content\n            if (this.textOff + len <= this.text.length) {\n                this.textOff += len;\n            }\n            else {\n                this.skip += len - (this.text.length - this.textOff);\n                this.text = \"\";\n                this.textOff = 0;\n            }\n            this.pos = to;\n        }\n        if (this.openStart < 0)\n            this.openStart = openStart;\n    }\n    static build(text, from, to, decorations, dynamicDecorationMap) {\n        let builder = new ContentBuilder(text, from, to, dynamicDecorationMap);\n        builder.openEnd = state.RangeSet.spans(decorations, from, to, builder);\n        if (builder.openStart < 0)\n            builder.openStart = builder.openEnd;\n        builder.finish(builder.openEnd);\n        return builder;\n    }\n}\nfunction wrapMarks(view, active) {\n    for (let mark of active)\n        view = new MarkView(mark, [view], view.length);\n    return view;\n}\nclass NullWidget extends WidgetType {\n    constructor(tag) {\n        super();\n        this.tag = tag;\n    }\n    eq(other) { return other.tag == this.tag; }\n    toDOM() { return document.createElement(this.tag); }\n    updateDOM(elt) { return elt.nodeName.toLowerCase() == this.tag; }\n    get isHidden() { return true; }\n}\nNullWidget.inline = new NullWidget(\"span\");\nNullWidget.block = new NullWidget(\"div\");\n\n/**\nUsed to indicate [text direction](https://codemirror.net/6/docs/ref/#view.EditorView.textDirection).\n*/\nexports.Direction = void 0;\n(function (Direction) {\n    // (These are chosen to match the base levels, in bidi algorithm\n    // terms, of spans in that direction.)\n    /**\n    Left-to-right.\n    */\n    Direction[Direction[\"LTR\"] = 0] = \"LTR\";\n    /**\n    Right-to-left.\n    */\n    Direction[Direction[\"RTL\"] = 1] = \"RTL\";\n})(exports.Direction || (exports.Direction = {}));\nconst LTR = exports.Direction.LTR, RTL = exports.Direction.RTL;\n// Decode a string with each type encoded as log2(type)\nfunction dec(str) {\n    let result = [];\n    for (let i = 0; i < str.length; i++)\n        result.push(1 << +str[i]);\n    return result;\n}\n// Character types for codepoints 0 to 0xf8\nconst LowTypes = dec(\"88888888888888888888888888888888888666888888787833333333337888888000000000000000000000000008888880000000000000000000000000088888888888888888888888888888888888887866668888088888663380888308888800000000000000000000000800000000000000000000000000000008\");\n// Character types for codepoints 0x600 to 0x6f9\nconst ArabicTypes = dec(\"4444448826627288999999999992222222222222222222222222222222222222222222222229999999999999999999994444444444644222822222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222999999949999999229989999223333333333\");\nconst Brackets = Object.create(null), BracketStack = [];\n// There's a lot more in\n// https://www.unicode.org/Public/UCD/latest/ucd/BidiBrackets.txt,\n// which are left out to keep code size down.\nfor (let p of [\"()\", \"[]\", \"{}\"]) {\n    let l = p.charCodeAt(0), r = p.charCodeAt(1);\n    Brackets[l] = r;\n    Brackets[r] = -l;\n}\nfunction charType(ch) {\n    return ch <= 0xf7 ? LowTypes[ch] :\n        0x590 <= ch && ch <= 0x5f4 ? 2 /* T.R */ :\n            0x600 <= ch && ch <= 0x6f9 ? ArabicTypes[ch - 0x600] :\n                0x6ee <= ch && ch <= 0x8ac ? 4 /* T.AL */ :\n                    0x2000 <= ch && ch <= 0x200c ? 256 /* T.NI */ :\n                        0xfb50 <= ch && ch <= 0xfdff ? 4 /* T.AL */ : 1 /* T.L */;\n}\nconst BidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\ufb50-\\ufdff]/;\n/**\nRepresents a contiguous range of text that has a single direction\n(as in left-to-right or right-to-left).\n*/\nclass BidiSpan {\n    /**\n    The direction of this span.\n    */\n    get dir() { return this.level % 2 ? RTL : LTR; }\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The start of the span (relative to the start of the line).\n    */\n    from, \n    /**\n    The end of the span.\n    */\n    to, \n    /**\n    The [\"bidi\n    level\"](https://unicode.org/reports/tr9/#Basic_Display_Algorithm)\n    of the span (in this context, 0 means\n    left-to-right, 1 means right-to-left, 2 means left-to-right\n    number inside right-to-left text).\n    */\n    level) {\n        this.from = from;\n        this.to = to;\n        this.level = level;\n    }\n    /**\n    @internal\n    */\n    side(end, dir) { return (this.dir == dir) == end ? this.to : this.from; }\n    /**\n    @internal\n    */\n    forward(forward, dir) { return forward == (this.dir == dir); }\n    /**\n    @internal\n    */\n    static find(order, index, level, assoc) {\n        let maybe = -1;\n        for (let i = 0; i < order.length; i++) {\n            let span = order[i];\n            if (span.from <= index && span.to >= index) {\n                if (span.level == level)\n                    return i;\n                // When multiple spans match, if assoc != 0, take the one that\n                // covers that side, otherwise take the one with the minimum\n                // level.\n                if (maybe < 0 || (assoc != 0 ? (assoc < 0 ? span.from < index : span.to > index) : order[maybe].level > span.level))\n                    maybe = i;\n            }\n        }\n        if (maybe < 0)\n            throw new RangeError(\"Index out of range\");\n        return maybe;\n    }\n}\nfunction isolatesEq(a, b) {\n    if (a.length != b.length)\n        return false;\n    for (let i = 0; i < a.length; i++) {\n        let iA = a[i], iB = b[i];\n        if (iA.from != iB.from || iA.to != iB.to || iA.direction != iB.direction || !isolatesEq(iA.inner, iB.inner))\n            return false;\n    }\n    return true;\n}\n// Reused array of character types\nconst types = [];\n// Fill in the character types (in `types`) from `from` to `to` and\n// apply W normalization rules.\nfunction computeCharTypes(line, rFrom, rTo, isolates, outerType) {\n    for (let iI = 0; iI <= isolates.length; iI++) {\n        let from = iI ? isolates[iI - 1].to : rFrom, to = iI < isolates.length ? isolates[iI].from : rTo;\n        let prevType = iI ? 256 /* T.NI */ : outerType;\n        // W1. Examine each non-spacing mark (NSM) in the level run, and\n        // change the type of the NSM to the type of the previous\n        // character. If the NSM is at the start of the level run, it will\n        // get the type of sor.\n        // W2. Search backwards from each instance of a European number\n        // until the first strong type (R, L, AL, or sor) is found. If an\n        // AL is found, change the type of the European number to Arabic\n        // number.\n        // W3. Change all ALs to R.\n        // (Left after this: L, R, EN, AN, ET, CS, NI)\n        for (let i = from, prev = prevType, prevStrong = prevType; i < to; i++) {\n            let type = charType(line.charCodeAt(i));\n            if (type == 512 /* T.NSM */)\n                type = prev;\n            else if (type == 8 /* T.EN */ && prevStrong == 4 /* T.AL */)\n                type = 16 /* T.AN */;\n            types[i] = type == 4 /* T.AL */ ? 2 /* T.R */ : type;\n            if (type & 7 /* T.Strong */)\n                prevStrong = type;\n            prev = type;\n        }\n        // W5. A sequence of European terminators adjacent to European\n        // numbers changes to all European numbers.\n        // W6. Otherwise, separators and terminators change to Other\n        // Neutral.\n        // W7. Search backwards from each instance of a European number\n        // until the first strong type (R, L, or sor) is found. If an L is\n        // found, then change the type of the European number to L.\n        // (Left after this: L, R, EN+AN, NI)\n        for (let i = from, prev = prevType, prevStrong = prevType; i < to; i++) {\n            let type = types[i];\n            if (type == 128 /* T.CS */) {\n                if (i < to - 1 && prev == types[i + 1] && (prev & 24 /* T.Num */))\n                    type = types[i] = prev;\n                else\n                    types[i] = 256 /* T.NI */;\n            }\n            else if (type == 64 /* T.ET */) {\n                let end = i + 1;\n                while (end < to && types[end] == 64 /* T.ET */)\n                    end++;\n                let replace = (i && prev == 8 /* T.EN */) || (end < rTo && types[end] == 8 /* T.EN */) ? (prevStrong == 1 /* T.L */ ? 1 /* T.L */ : 8 /* T.EN */) : 256 /* T.NI */;\n                for (let j = i; j < end; j++)\n                    types[j] = replace;\n                i = end - 1;\n            }\n            else if (type == 8 /* T.EN */ && prevStrong == 1 /* T.L */) {\n                types[i] = 1 /* T.L */;\n            }\n            prev = type;\n            if (type & 7 /* T.Strong */)\n                prevStrong = type;\n        }\n    }\n}\n// Process brackets throughout a run sequence.\nfunction processBracketPairs(line, rFrom, rTo, isolates, outerType) {\n    let oppositeType = outerType == 1 /* T.L */ ? 2 /* T.R */ : 1 /* T.L */;\n    for (let iI = 0, sI = 0, context = 0; iI <= isolates.length; iI++) {\n        let from = iI ? isolates[iI - 1].to : rFrom, to = iI < isolates.length ? isolates[iI].from : rTo;\n        // N0. Process bracket pairs in an isolating run sequence\n        // sequentially in the logical order of the text positions of the\n        // opening paired brackets using the logic given below. Within this\n        // scope, bidirectional types EN and AN are treated as R.\n        for (let i = from, ch, br, type; i < to; i++) {\n            // Keeps [startIndex, type, strongSeen] triples for each open\n            // bracket on BracketStack.\n            if (br = Brackets[ch = line.charCodeAt(i)]) {\n                if (br < 0) { // Closing bracket\n                    for (let sJ = sI - 3; sJ >= 0; sJ -= 3) {\n                        if (BracketStack[sJ + 1] == -br) {\n                            let flags = BracketStack[sJ + 2];\n                            let type = (flags & 2 /* Bracketed.EmbedInside */) ? outerType :\n                                !(flags & 4 /* Bracketed.OppositeInside */) ? 0 :\n                                    (flags & 1 /* Bracketed.OppositeBefore */) ? oppositeType : outerType;\n                            if (type)\n                                types[i] = types[BracketStack[sJ]] = type;\n                            sI = sJ;\n                            break;\n                        }\n                    }\n                }\n                else if (BracketStack.length == 189 /* Bracketed.MaxDepth */) {\n                    break;\n                }\n                else {\n                    BracketStack[sI++] = i;\n                    BracketStack[sI++] = ch;\n                    BracketStack[sI++] = context;\n                }\n            }\n            else if ((type = types[i]) == 2 /* T.R */ || type == 1 /* T.L */) {\n                let embed = type == outerType;\n                context = embed ? 0 : 1 /* Bracketed.OppositeBefore */;\n                for (let sJ = sI - 3; sJ >= 0; sJ -= 3) {\n                    let cur = BracketStack[sJ + 2];\n                    if (cur & 2 /* Bracketed.EmbedInside */)\n                        break;\n                    if (embed) {\n                        BracketStack[sJ + 2] |= 2 /* Bracketed.EmbedInside */;\n                    }\n                    else {\n                        if (cur & 4 /* Bracketed.OppositeInside */)\n                            break;\n                        BracketStack[sJ + 2] |= 4 /* Bracketed.OppositeInside */;\n                    }\n                }\n            }\n        }\n    }\n}\nfunction processNeutrals(rFrom, rTo, isolates, outerType) {\n    for (let iI = 0, prev = outerType; iI <= isolates.length; iI++) {\n        let from = iI ? isolates[iI - 1].to : rFrom, to = iI < isolates.length ? isolates[iI].from : rTo;\n        // N1. A sequence of neutrals takes the direction of the\n        // surrounding strong text if the text on both sides has the same\n        // direction. European and Arabic numbers act as if they were R in\n        // terms of their influence on neutrals. Start-of-level-run (sor)\n        // and end-of-level-run (eor) are used at level run boundaries.\n        // N2. Any remaining neutrals take the embedding direction.\n        // (Left after this: L, R, EN+AN)\n        for (let i = from; i < to;) {\n            let type = types[i];\n            if (type == 256 /* T.NI */) {\n                let end = i + 1;\n                for (;;) {\n                    if (end == to) {\n                        if (iI == isolates.length)\n                            break;\n                        end = isolates[iI++].to;\n                        to = iI < isolates.length ? isolates[iI].from : rTo;\n                    }\n                    else if (types[end] == 256 /* T.NI */) {\n                        end++;\n                    }\n                    else {\n                        break;\n                    }\n                }\n                let beforeL = prev == 1 /* T.L */;\n                let afterL = (end < rTo ? types[end] : outerType) == 1 /* T.L */;\n                let replace = beforeL == afterL ? (beforeL ? 1 /* T.L */ : 2 /* T.R */) : outerType;\n                for (let j = end, jI = iI, fromJ = jI ? isolates[jI - 1].to : rFrom; j > i;) {\n                    if (j == fromJ) {\n                        j = isolates[--jI].from;\n                        fromJ = jI ? isolates[jI - 1].to : rFrom;\n                    }\n                    types[--j] = replace;\n                }\n                i = end;\n            }\n            else {\n                prev = type;\n                i++;\n            }\n        }\n    }\n}\n// Find the contiguous ranges of character types in a given range, and\n// emit spans for them. Flip the order of the spans as appropriate\n// based on the level, and call through to compute the spans for\n// isolates at the proper point.\nfunction emitSpans(line, from, to, level, baseLevel, isolates, order) {\n    let ourType = level % 2 ? 2 /* T.R */ : 1 /* T.L */;\n    if ((level % 2) == (baseLevel % 2)) { // Same dir as base direction, don't flip\n        for (let iCh = from, iI = 0; iCh < to;) {\n            // Scan a section of characters in direction ourType, unless\n            // there's another type of char right after iCh, in which case\n            // we scan a section of other characters (which, if ourType ==\n            // T.L, may contain both T.R and T.AN chars).\n            let sameDir = true, isNum = false;\n            if (iI == isolates.length || iCh < isolates[iI].from) {\n                let next = types[iCh];\n                if (next != ourType) {\n                    sameDir = false;\n                    isNum = next == 16 /* T.AN */;\n                }\n            }\n            // Holds an array of isolates to pass to a recursive call if we\n            // must recurse (to distinguish T.AN inside an RTL section in\n            // LTR text), null if we can emit directly\n            let recurse = !sameDir && ourType == 1 /* T.L */ ? [] : null;\n            let localLevel = sameDir ? level : level + 1;\n            let iScan = iCh;\n            run: for (;;) {\n                if (iI < isolates.length && iScan == isolates[iI].from) {\n                    if (isNum)\n                        break run;\n                    let iso = isolates[iI];\n                    // Scan ahead to verify that there is another char in this dir after the isolate(s)\n                    if (!sameDir)\n                        for (let upto = iso.to, jI = iI + 1;;) {\n                            if (upto == to)\n                                break run;\n                            if (jI < isolates.length && isolates[jI].from == upto)\n                                upto = isolates[jI++].to;\n                            else if (types[upto] == ourType)\n                                break run;\n                            else\n                                break;\n                        }\n                    iI++;\n                    if (recurse) {\n                        recurse.push(iso);\n                    }\n                    else {\n                        if (iso.from > iCh)\n                            order.push(new BidiSpan(iCh, iso.from, localLevel));\n                        let dirSwap = (iso.direction == LTR) != !(localLevel % 2);\n                        computeSectionOrder(line, dirSwap ? level + 1 : level, baseLevel, iso.inner, iso.from, iso.to, order);\n                        iCh = iso.to;\n                    }\n                    iScan = iso.to;\n                }\n                else if (iScan == to || (sameDir ? types[iScan] != ourType : types[iScan] == ourType)) {\n                    break;\n                }\n                else {\n                    iScan++;\n                }\n            }\n            if (recurse)\n                emitSpans(line, iCh, iScan, level + 1, baseLevel, recurse, order);\n            else if (iCh < iScan)\n                order.push(new BidiSpan(iCh, iScan, localLevel));\n            iCh = iScan;\n        }\n    }\n    else {\n        // Iterate in reverse to flip the span order. Same code again, but\n        // going from the back of the section to the front\n        for (let iCh = to, iI = isolates.length; iCh > from;) {\n            let sameDir = true, isNum = false;\n            if (!iI || iCh > isolates[iI - 1].to) {\n                let next = types[iCh - 1];\n                if (next != ourType) {\n                    sameDir = false;\n                    isNum = next == 16 /* T.AN */;\n                }\n            }\n            let recurse = !sameDir && ourType == 1 /* T.L */ ? [] : null;\n            let localLevel = sameDir ? level : level + 1;\n            let iScan = iCh;\n            run: for (;;) {\n                if (iI && iScan == isolates[iI - 1].to) {\n                    if (isNum)\n                        break run;\n                    let iso = isolates[--iI];\n                    // Scan ahead to verify that there is another char in this dir after the isolate(s)\n                    if (!sameDir)\n                        for (let upto = iso.from, jI = iI;;) {\n                            if (upto == from)\n                                break run;\n                            if (jI && isolates[jI - 1].to == upto)\n                                upto = isolates[--jI].from;\n                            else if (types[upto - 1] == ourType)\n                                break run;\n                            else\n                                break;\n                        }\n                    if (recurse) {\n                        recurse.push(iso);\n                    }\n                    else {\n                        if (iso.to < iCh)\n                            order.push(new BidiSpan(iso.to, iCh, localLevel));\n                        let dirSwap = (iso.direction == LTR) != !(localLevel % 2);\n                        computeSectionOrder(line, dirSwap ? level + 1 : level, baseLevel, iso.inner, iso.from, iso.to, order);\n                        iCh = iso.from;\n                    }\n                    iScan = iso.from;\n                }\n                else if (iScan == from || (sameDir ? types[iScan - 1] != ourType : types[iScan - 1] == ourType)) {\n                    break;\n                }\n                else {\n                    iScan--;\n                }\n            }\n            if (recurse)\n                emitSpans(line, iScan, iCh, level + 1, baseLevel, recurse, order);\n            else if (iScan < iCh)\n                order.push(new BidiSpan(iScan, iCh, localLevel));\n            iCh = iScan;\n        }\n    }\n}\nfunction computeSectionOrder(line, level, baseLevel, isolates, from, to, order) {\n    let outerType = (level % 2 ? 2 /* T.R */ : 1 /* T.L */);\n    computeCharTypes(line, from, to, isolates, outerType);\n    processBracketPairs(line, from, to, isolates, outerType);\n    processNeutrals(from, to, isolates, outerType);\n    emitSpans(line, from, to, level, baseLevel, isolates, order);\n}\nfunction computeOrder(line, direction, isolates) {\n    if (!line)\n        return [new BidiSpan(0, 0, direction == RTL ? 1 : 0)];\n    if (direction == LTR && !isolates.length && !BidiRE.test(line))\n        return trivialOrder(line.length);\n    if (isolates.length)\n        while (line.length > types.length)\n            types[types.length] = 256 /* T.NI */; // Make sure types array has no gaps\n    let order = [], level = direction == LTR ? 0 : 1;\n    computeSectionOrder(line, level, level, isolates, 0, line.length, order);\n    return order;\n}\nfunction trivialOrder(length) {\n    return [new BidiSpan(0, length, 0)];\n}\nlet movedOver = \"\";\n// This implementation moves strictly visually, without concern for a\n// traversal visiting every logical position in the string. It will\n// still do so for simple input, but situations like multiple isolates\n// with the same level next to each other, or text going against the\n// main dir at the end of the line, will make some positions\n// unreachable with this motion. Each visible cursor position will\n// correspond to the lower-level bidi span that touches it.\n//\n// The alternative would be to solve an order globally for a given\n// line, making sure that it includes every position, but that would\n// require associating non-canonical (higher bidi span level)\n// positions with a given visual position, which is likely to confuse\n// people. (And would generally be a lot more complicated.)\nfunction moveVisually(line, order, dir, start, forward) {\n    var _a;\n    let startIndex = start.head - line.from;\n    let spanI = BidiSpan.find(order, startIndex, (_a = start.bidiLevel) !== null && _a !== void 0 ? _a : -1, start.assoc);\n    let span = order[spanI], spanEnd = span.side(forward, dir);\n    // End of span\n    if (startIndex == spanEnd) {\n        let nextI = spanI += forward ? 1 : -1;\n        if (nextI < 0 || nextI >= order.length)\n            return null;\n        span = order[spanI = nextI];\n        startIndex = span.side(!forward, dir);\n        spanEnd = span.side(forward, dir);\n    }\n    let nextIndex = state.findClusterBreak(line.text, startIndex, span.forward(forward, dir));\n    if (nextIndex < span.from || nextIndex > span.to)\n        nextIndex = spanEnd;\n    movedOver = line.text.slice(Math.min(startIndex, nextIndex), Math.max(startIndex, nextIndex));\n    let nextSpan = spanI == (forward ? order.length - 1 : 0) ? null : order[spanI + (forward ? 1 : -1)];\n    if (nextSpan && nextIndex == spanEnd && nextSpan.level + (forward ? 0 : 1) < span.level)\n        return state.EditorSelection.cursor(nextSpan.side(!forward, dir) + line.from, nextSpan.forward(forward, dir) ? 1 : -1, nextSpan.level);\n    return state.EditorSelection.cursor(nextIndex + line.from, span.forward(forward, dir) ? -1 : 1, span.level);\n}\nfunction autoDirection(text, from, to) {\n    for (let i = from; i < to; i++) {\n        let type = charType(text.charCodeAt(i));\n        if (type == 1 /* T.L */)\n            return LTR;\n        if (type == 2 /* T.R */ || type == 4 /* T.AL */)\n            return RTL;\n    }\n    return LTR;\n}\n\nconst clickAddsSelectionRange = state.Facet.define();\nconst dragMovesSelection$1 = state.Facet.define();\nconst mouseSelectionStyle = state.Facet.define();\nconst exceptionSink = state.Facet.define();\nconst updateListener = state.Facet.define();\nconst inputHandler = state.Facet.define();\nconst focusChangeEffect = state.Facet.define();\nconst clipboardInputFilter = state.Facet.define();\nconst clipboardOutputFilter = state.Facet.define();\nconst perLineTextDirection = state.Facet.define({\n    combine: values => values.some(x => x)\n});\nconst nativeSelectionHidden = state.Facet.define({\n    combine: values => values.some(x => x)\n});\nconst scrollHandler = state.Facet.define();\nclass ScrollTarget {\n    constructor(range, y = \"nearest\", x = \"nearest\", yMargin = 5, xMargin = 5, \n    // This data structure is abused to also store precise scroll\n    // snapshots, instead of a `scrollIntoView` request. When this\n    // flag is `true`, `range` points at a position in the reference\n    // line, `yMargin` holds the difference between the top of that\n    // line and the top of the editor, and `xMargin` holds the\n    // editor's `scrollLeft`.\n    isSnapshot = false) {\n        this.range = range;\n        this.y = y;\n        this.x = x;\n        this.yMargin = yMargin;\n        this.xMargin = xMargin;\n        this.isSnapshot = isSnapshot;\n    }\n    map(changes) {\n        return changes.empty ? this :\n            new ScrollTarget(this.range.map(changes), this.y, this.x, this.yMargin, this.xMargin, this.isSnapshot);\n    }\n    clip(state$1) {\n        return this.range.to <= state$1.doc.length ? this :\n            new ScrollTarget(state.EditorSelection.cursor(state$1.doc.length), this.y, this.x, this.yMargin, this.xMargin, this.isSnapshot);\n    }\n}\nconst scrollIntoView = state.StateEffect.define({ map: (t, ch) => t.map(ch) });\nconst setEditContextFormatting = state.StateEffect.define();\n/**\nLog or report an unhandled exception in client code. Should\nprobably only be used by extension code that allows client code to\nprovide functions, and calls those functions in a context where an\nexception can't be propagated to calling code in a reasonable way\n(for example when in an event handler).\n\nEither calls a handler registered with\n[`EditorView.exceptionSink`](https://codemirror.net/6/docs/ref/#view.EditorView^exceptionSink),\n`window.onerror`, if defined, or `console.error` (in which case\nit'll pass `context`, when given, as first argument).\n*/\nfunction logException(state, exception, context) {\n    let handler = state.facet(exceptionSink);\n    if (handler.length)\n        handler[0](exception);\n    else if (window.onerror)\n        window.onerror(String(exception), context, undefined, undefined, exception);\n    else if (context)\n        console.error(context + \":\", exception);\n    else\n        console.error(exception);\n}\nconst editable = state.Facet.define({ combine: values => values.length ? values[0] : true });\nlet nextPluginID = 0;\nconst viewPlugin = state.Facet.define();\n/**\nView plugins associate stateful values with a view. They can\ninfluence the way the content is drawn, and are notified of things\nthat happen in the view.\n*/\nclass ViewPlugin {\n    constructor(\n    /**\n    @internal\n    */\n    id, \n    /**\n    @internal\n    */\n    create, \n    /**\n    @internal\n    */\n    domEventHandlers, \n    /**\n    @internal\n    */\n    domEventObservers, buildExtensions) {\n        this.id = id;\n        this.create = create;\n        this.domEventHandlers = domEventHandlers;\n        this.domEventObservers = domEventObservers;\n        this.extension = buildExtensions(this);\n    }\n    /**\n    Define a plugin from a constructor function that creates the\n    plugin's value, given an editor view.\n    */\n    static define(create, spec) {\n        const { eventHandlers, eventObservers, provide, decorations: deco } = spec || {};\n        return new ViewPlugin(nextPluginID++, create, eventHandlers, eventObservers, plugin => {\n            let ext = [viewPlugin.of(plugin)];\n            if (deco)\n                ext.push(decorations.of(view => {\n                    let pluginInst = view.plugin(plugin);\n                    return pluginInst ? deco(pluginInst) : Decoration.none;\n                }));\n            if (provide)\n                ext.push(provide(plugin));\n            return ext;\n        });\n    }\n    /**\n    Create a plugin for a class whose constructor takes a single\n    editor view as argument.\n    */\n    static fromClass(cls, spec) {\n        return ViewPlugin.define(view => new cls(view), spec);\n    }\n}\nclass PluginInstance {\n    constructor(spec) {\n        this.spec = spec;\n        // When starting an update, all plugins have this field set to the\n        // update object, indicating they need to be updated. When finished\n        // updating, it is set to `false`. Retrieving a plugin that needs to\n        // be updated with `view.plugin` forces an eager update.\n        this.mustUpdate = null;\n        // This is null when the plugin is initially created, but\n        // initialized on the first update.\n        this.value = null;\n    }\n    update(view) {\n        if (!this.value) {\n            if (this.spec) {\n                try {\n                    this.value = this.spec.create(view);\n                }\n                catch (e) {\n                    logException(view.state, e, \"CodeMirror plugin crashed\");\n                    this.deactivate();\n                }\n            }\n        }\n        else if (this.mustUpdate) {\n            let update = this.mustUpdate;\n            this.mustUpdate = null;\n            if (this.value.update) {\n                try {\n                    this.value.update(update);\n                }\n                catch (e) {\n                    logException(update.state, e, \"CodeMirror plugin crashed\");\n                    if (this.value.destroy)\n                        try {\n                            this.value.destroy();\n                        }\n                        catch (_) { }\n                    this.deactivate();\n                }\n            }\n        }\n        return this;\n    }\n    destroy(view) {\n        var _a;\n        if ((_a = this.value) === null || _a === void 0 ? void 0 : _a.destroy) {\n            try {\n                this.value.destroy();\n            }\n            catch (e) {\n                logException(view.state, e, \"CodeMirror plugin crashed\");\n            }\n        }\n    }\n    deactivate() {\n        this.spec = this.value = null;\n    }\n}\nconst editorAttributes = state.Facet.define();\nconst contentAttributes = state.Facet.define();\n// Provide decorations\nconst decorations = state.Facet.define();\nconst outerDecorations = state.Facet.define();\nconst atomicRanges = state.Facet.define();\nconst bidiIsolatedRanges = state.Facet.define();\nfunction getIsolatedRanges(view, line) {\n    let isolates = view.state.facet(bidiIsolatedRanges);\n    if (!isolates.length)\n        return isolates;\n    let sets = isolates.map(i => i instanceof Function ? i(view) : i);\n    let result = [];\n    state.RangeSet.spans(sets, line.from, line.to, {\n        point() { },\n        span(fromDoc, toDoc, active, open) {\n            let from = fromDoc - line.from, to = toDoc - line.from;\n            let level = result;\n            for (let i = active.length - 1; i >= 0; i--, open--) {\n                let direction = active[i].spec.bidiIsolate, update;\n                if (direction == null)\n                    direction = autoDirection(line.text, from, to);\n                if (open > 0 && level.length &&\n                    (update = level[level.length - 1]).to == from && update.direction == direction) {\n                    update.to = to;\n                    level = update.inner;\n                }\n                else {\n                    let add = { from, to, direction, inner: [] };\n                    level.push(add);\n                    level = add.inner;\n                }\n            }\n        }\n    });\n    return result;\n}\nconst scrollMargins = state.Facet.define();\nfunction getScrollMargins(view) {\n    let left = 0, right = 0, top = 0, bottom = 0;\n    for (let source of view.state.facet(scrollMargins)) {\n        let m = source(view);\n        if (m) {\n            if (m.left != null)\n                left = Math.max(left, m.left);\n            if (m.right != null)\n                right = Math.max(right, m.right);\n            if (m.top != null)\n                top = Math.max(top, m.top);\n            if (m.bottom != null)\n                bottom = Math.max(bottom, m.bottom);\n        }\n    }\n    return { left, right, top, bottom };\n}\nconst styleModule = state.Facet.define();\nclass ChangedRange {\n    constructor(fromA, toA, fromB, toB) {\n        this.fromA = fromA;\n        this.toA = toA;\n        this.fromB = fromB;\n        this.toB = toB;\n    }\n    join(other) {\n        return new ChangedRange(Math.min(this.fromA, other.fromA), Math.max(this.toA, other.toA), Math.min(this.fromB, other.fromB), Math.max(this.toB, other.toB));\n    }\n    addToSet(set) {\n        let i = set.length, me = this;\n        for (; i > 0; i--) {\n            let range = set[i - 1];\n            if (range.fromA > me.toA)\n                continue;\n            if (range.toA < me.fromA)\n                break;\n            me = me.join(range);\n            set.splice(i - 1, 1);\n        }\n        set.splice(i, 0, me);\n        return set;\n    }\n    static extendWithRanges(diff, ranges) {\n        if (ranges.length == 0)\n            return diff;\n        let result = [];\n        for (let dI = 0, rI = 0, posA = 0, posB = 0;; dI++) {\n            let next = dI == diff.length ? null : diff[dI], off = posA - posB;\n            let end = next ? next.fromB : 1e9;\n            while (rI < ranges.length && ranges[rI] < end) {\n                let from = ranges[rI], to = ranges[rI + 1];\n                let fromB = Math.max(posB, from), toB = Math.min(end, to);\n                if (fromB <= toB)\n                    new ChangedRange(fromB + off, toB + off, fromB, toB).addToSet(result);\n                if (to > end)\n                    break;\n                else\n                    rI += 2;\n            }\n            if (!next)\n                return result;\n            new ChangedRange(next.fromA, next.toA, next.fromB, next.toB).addToSet(result);\n            posA = next.toA;\n            posB = next.toB;\n        }\n    }\n}\n/**\nView [plugins](https://codemirror.net/6/docs/ref/#view.ViewPlugin) are given instances of this\nclass, which describe what happened, whenever the view is updated.\n*/\nclass ViewUpdate {\n    constructor(\n    /**\n    The editor view that the update is associated with.\n    */\n    view, \n    /**\n    The new editor state.\n    */\n    state$1, \n    /**\n    The transactions involved in the update. May be empty.\n    */\n    transactions) {\n        this.view = view;\n        this.state = state$1;\n        this.transactions = transactions;\n        /**\n        @internal\n        */\n        this.flags = 0;\n        this.startState = view.state;\n        this.changes = state.ChangeSet.empty(this.startState.doc.length);\n        for (let tr of transactions)\n            this.changes = this.changes.compose(tr.changes);\n        let changedRanges = [];\n        this.changes.iterChangedRanges((fromA, toA, fromB, toB) => changedRanges.push(new ChangedRange(fromA, toA, fromB, toB)));\n        this.changedRanges = changedRanges;\n    }\n    /**\n    @internal\n    */\n    static create(view, state, transactions) {\n        return new ViewUpdate(view, state, transactions);\n    }\n    /**\n    Tells you whether the [viewport](https://codemirror.net/6/docs/ref/#view.EditorView.viewport) or\n    [visible ranges](https://codemirror.net/6/docs/ref/#view.EditorView.visibleRanges) changed in this\n    update.\n    */\n    get viewportChanged() {\n        return (this.flags & 4 /* UpdateFlag.Viewport */) > 0;\n    }\n    /**\n    Indicates whether the height of a block element in the editor\n    changed in this update.\n    */\n    get heightChanged() {\n        return (this.flags & 2 /* UpdateFlag.Height */) > 0;\n    }\n    /**\n    Returns true when the document was modified or the size of the\n    editor, or elements within the editor, changed.\n    */\n    get geometryChanged() {\n        return this.docChanged || (this.flags & (8 /* UpdateFlag.Geometry */ | 2 /* UpdateFlag.Height */)) > 0;\n    }\n    /**\n    True when this update indicates a focus change.\n    */\n    get focusChanged() {\n        return (this.flags & 1 /* UpdateFlag.Focus */) > 0;\n    }\n    /**\n    Whether the document changed in this update.\n    */\n    get docChanged() {\n        return !this.changes.empty;\n    }\n    /**\n    Whether the selection was explicitly set in this update.\n    */\n    get selectionSet() {\n        return this.transactions.some(tr => tr.selection);\n    }\n    /**\n    @internal\n    */\n    get empty() { return this.flags == 0 && this.transactions.length == 0; }\n}\n\nclass DocView extends ContentView {\n    get length() { return this.view.state.doc.length; }\n    constructor(view) {\n        super();\n        this.view = view;\n        this.decorations = [];\n        this.dynamicDecorationMap = [false];\n        this.domChanged = null;\n        this.hasComposition = null;\n        this.markedForComposition = new Set;\n        this.editContextFormatting = Decoration.none;\n        this.lastCompositionAfterCursor = false;\n        // Track a minimum width for the editor. When measuring sizes in\n        // measureVisibleLineHeights, this is updated to point at the width\n        // of a given element and its extent in the document. When a change\n        // happens in that range, these are reset. That way, once we've seen\n        // a line/element of a given length, we keep the editor wide enough\n        // to fit at least that element, until it is changed, at which point\n        // we forget it again.\n        this.minWidth = 0;\n        this.minWidthFrom = 0;\n        this.minWidthTo = 0;\n        // Track whether the DOM selection was set in a lossy way, so that\n        // we don't mess it up when reading it back it\n        this.impreciseAnchor = null;\n        this.impreciseHead = null;\n        this.forceSelection = false;\n        // Used by the resize observer to ignore resizes that we caused\n        // ourselves\n        this.lastUpdate = Date.now();\n        this.setDOM(view.contentDOM);\n        this.children = [new LineView];\n        this.children[0].setParent(this);\n        this.updateDeco();\n        this.updateInner([new ChangedRange(0, 0, 0, view.state.doc.length)], 0, null);\n    }\n    // Update the document view to a given state.\n    update(update) {\n        var _a;\n        let changedRanges = update.changedRanges;\n        if (this.minWidth > 0 && changedRanges.length) {\n            if (!changedRanges.every(({ fromA, toA }) => toA < this.minWidthFrom || fromA > this.minWidthTo)) {\n                this.minWidth = this.minWidthFrom = this.minWidthTo = 0;\n            }\n            else {\n                this.minWidthFrom = update.changes.mapPos(this.minWidthFrom, 1);\n                this.minWidthTo = update.changes.mapPos(this.minWidthTo, 1);\n            }\n        }\n        this.updateEditContextFormatting(update);\n        let readCompositionAt = -1;\n        if (this.view.inputState.composing >= 0 && !this.view.observer.editContext) {\n            if ((_a = this.domChanged) === null || _a === void 0 ? void 0 : _a.newSel)\n                readCompositionAt = this.domChanged.newSel.head;\n            else if (!touchesComposition(update.changes, this.hasComposition) && !update.selectionSet)\n                readCompositionAt = update.state.selection.main.head;\n        }\n        let composition = readCompositionAt > -1 ? findCompositionRange(this.view, update.changes, readCompositionAt) : null;\n        this.domChanged = null;\n        if (this.hasComposition) {\n            this.markedForComposition.clear();\n            let { from, to } = this.hasComposition;\n            changedRanges = new ChangedRange(from, to, update.changes.mapPos(from, -1), update.changes.mapPos(to, 1))\n                .addToSet(changedRanges.slice());\n        }\n        this.hasComposition = composition ? { from: composition.range.fromB, to: composition.range.toB } : null;\n        // When the DOM nodes around the selection are moved to another\n        // parent, Chrome sometimes reports a different selection through\n        // getSelection than the one that it actually shows to the user.\n        // This forces a selection update when lines are joined to work\n        // around that. Issue #54\n        if ((browser.ie || browser.chrome) && !composition && update &&\n            update.state.doc.lines != update.startState.doc.lines)\n            this.forceSelection = true;\n        let prevDeco = this.decorations, deco = this.updateDeco();\n        let decoDiff = findChangedDeco(prevDeco, deco, update.changes);\n        changedRanges = ChangedRange.extendWithRanges(changedRanges, decoDiff);\n        if (!(this.flags & 7 /* ViewFlag.Dirty */) && changedRanges.length == 0) {\n            return false;\n        }\n        else {\n            this.updateInner(changedRanges, update.startState.doc.length, composition);\n            if (update.transactions.length)\n                this.lastUpdate = Date.now();\n            return true;\n        }\n    }\n    // Used by update and the constructor do perform the actual DOM\n    // update\n    updateInner(changes, oldLength, composition) {\n        this.view.viewState.mustMeasureContent = true;\n        this.updateChildren(changes, oldLength, composition);\n        let { observer } = this.view;\n        observer.ignore(() => {\n            // Lock the height during redrawing, since Chrome sometimes\n            // messes with the scroll position during DOM mutation (though\n            // no relayout is triggered and I cannot imagine how it can\n            // recompute the scroll position without a layout)\n            this.dom.style.height = this.view.viewState.contentHeight / this.view.scaleY + \"px\";\n            this.dom.style.flexBasis = this.minWidth ? this.minWidth + \"px\" : \"\";\n            // Chrome will sometimes, when DOM mutations occur directly\n            // around the selection, get confused and report a different\n            // selection from the one it displays (issue #218). This tries\n            // to detect that situation.\n            let track = browser.chrome || browser.ios ? { node: observer.selectionRange.focusNode, written: false } : undefined;\n            this.sync(this.view, track);\n            this.flags &= ~7 /* ViewFlag.Dirty */;\n            if (track && (track.written || observer.selectionRange.focusNode != track.node))\n                this.forceSelection = true;\n            this.dom.style.height = \"\";\n        });\n        this.markedForComposition.forEach(cView => cView.flags &= ~8 /* ViewFlag.Composition */);\n        let gaps = [];\n        if (this.view.viewport.from || this.view.viewport.to < this.view.state.doc.length)\n            for (let child of this.children)\n                if (child instanceof BlockWidgetView && child.widget instanceof BlockGapWidget)\n                    gaps.push(child.dom);\n        observer.updateGaps(gaps);\n    }\n    updateChildren(changes, oldLength, composition) {\n        let ranges = composition ? composition.range.addToSet(changes.slice()) : changes;\n        let cursor = this.childCursor(oldLength);\n        for (let i = ranges.length - 1;; i--) {\n            let next = i >= 0 ? ranges[i] : null;\n            if (!next)\n                break;\n            let { fromA, toA, fromB, toB } = next, content, breakAtStart, openStart, openEnd;\n            if (composition && composition.range.fromB < toB && composition.range.toB > fromB) {\n                let before = ContentBuilder.build(this.view.state.doc, fromB, composition.range.fromB, this.decorations, this.dynamicDecorationMap);\n                let after = ContentBuilder.build(this.view.state.doc, composition.range.toB, toB, this.decorations, this.dynamicDecorationMap);\n                breakAtStart = before.breakAtStart;\n                openStart = before.openStart;\n                openEnd = after.openEnd;\n                let compLine = this.compositionView(composition);\n                if (after.breakAtStart) {\n                    compLine.breakAfter = 1;\n                }\n                else if (after.content.length &&\n                    compLine.merge(compLine.length, compLine.length, after.content[0], false, after.openStart, 0)) {\n                    compLine.breakAfter = after.content[0].breakAfter;\n                    after.content.shift();\n                }\n                if (before.content.length &&\n                    compLine.merge(0, 0, before.content[before.content.length - 1], true, 0, before.openEnd)) {\n                    before.content.pop();\n                }\n                content = before.content.concat(compLine).concat(after.content);\n            }\n            else {\n                ({ content, breakAtStart, openStart, openEnd } =\n                    ContentBuilder.build(this.view.state.doc, fromB, toB, this.decorations, this.dynamicDecorationMap));\n            }\n            let { i: toI, off: toOff } = cursor.findPos(toA, 1);\n            let { i: fromI, off: fromOff } = cursor.findPos(fromA, -1);\n            replaceRange(this, fromI, fromOff, toI, toOff, content, breakAtStart, openStart, openEnd);\n        }\n        if (composition)\n            this.fixCompositionDOM(composition);\n    }\n    updateEditContextFormatting(update) {\n        this.editContextFormatting = this.editContextFormatting.map(update.changes);\n        for (let tr of update.transactions)\n            for (let effect of tr.effects)\n                if (effect.is(setEditContextFormatting)) {\n                    this.editContextFormatting = effect.value;\n                }\n    }\n    compositionView(composition) {\n        let cur = new TextView(composition.text.nodeValue);\n        cur.flags |= 8 /* ViewFlag.Composition */;\n        for (let { deco } of composition.marks)\n            cur = new MarkView(deco, [cur], cur.length);\n        let line = new LineView;\n        line.append(cur, 0);\n        return line;\n    }\n    fixCompositionDOM(composition) {\n        let fix = (dom, cView) => {\n            cView.flags |= 8 /* ViewFlag.Composition */ | (cView.children.some(c => c.flags & 7 /* ViewFlag.Dirty */) ? 1 /* ViewFlag.ChildDirty */ : 0);\n            this.markedForComposition.add(cView);\n            let prev = ContentView.get(dom);\n            if (prev && prev != cView)\n                prev.dom = null;\n            cView.setDOM(dom);\n        };\n        let pos = this.childPos(composition.range.fromB, 1);\n        let cView = this.children[pos.i];\n        fix(composition.line, cView);\n        for (let i = composition.marks.length - 1; i >= -1; i--) {\n            pos = cView.childPos(pos.off, 1);\n            cView = cView.children[pos.i];\n            fix(i >= 0 ? composition.marks[i].node : composition.text, cView);\n        }\n    }\n    // Sync the DOM selection to this.state.selection\n    updateSelection(mustRead = false, fromPointer = false) {\n        if (mustRead || !this.view.observer.selectionRange.focusNode)\n            this.view.observer.readSelectionRange();\n        let activeElt = this.view.root.activeElement, focused = activeElt == this.dom;\n        let selectionNotFocus = !focused && !(this.view.state.facet(editable) || this.dom.tabIndex > -1) &&\n            hasSelection(this.dom, this.view.observer.selectionRange) && !(activeElt && this.dom.contains(activeElt));\n        if (!(focused || fromPointer || selectionNotFocus))\n            return;\n        let force = this.forceSelection;\n        this.forceSelection = false;\n        let main = this.view.state.selection.main;\n        let anchor = this.moveToLine(this.domAtPos(main.anchor));\n        let head = main.empty ? anchor : this.moveToLine(this.domAtPos(main.head));\n        // Always reset on Firefox when next to an uneditable node to\n        // avoid invisible cursor bugs (#111)\n        if (browser.gecko && main.empty && !this.hasComposition && betweenUneditable(anchor)) {\n            let dummy = document.createTextNode(\"\");\n            this.view.observer.ignore(() => anchor.node.insertBefore(dummy, anchor.node.childNodes[anchor.offset] || null));\n            anchor = head = new DOMPos(dummy, 0);\n            force = true;\n        }\n        let domSel = this.view.observer.selectionRange;\n        // If the selection is already here, or in an equivalent position, don't touch it\n        if (force || !domSel.focusNode || (!isEquivalentPosition(anchor.node, anchor.offset, domSel.anchorNode, domSel.anchorOffset) ||\n            !isEquivalentPosition(head.node, head.offset, domSel.focusNode, domSel.focusOffset)) && !this.suppressWidgetCursorChange(domSel, main)) {\n            this.view.observer.ignore(() => {\n                // Chrome Android will hide the virtual keyboard when tapping\n                // inside an uneditable node, and not bring it back when we\n                // move the cursor to its proper position. This tries to\n                // restore the keyboard by cycling focus.\n                if (browser.android && browser.chrome && this.dom.contains(domSel.focusNode) &&\n                    inUneditable(domSel.focusNode, this.dom)) {\n                    this.dom.blur();\n                    this.dom.focus({ preventScroll: true });\n                }\n                let rawSel = getSelection(this.view.root);\n                if (!rawSel) ;\n                else if (main.empty) {\n                    // Work around https://bugzilla.mozilla.org/show_bug.cgi?id=1612076\n                    if (browser.gecko) {\n                        let nextTo = nextToUneditable(anchor.node, anchor.offset);\n                        if (nextTo && nextTo != (1 /* NextTo.Before */ | 2 /* NextTo.After */)) {\n                            let text = (nextTo == 1 /* NextTo.Before */ ? textNodeBefore : textNodeAfter)(anchor.node, anchor.offset);\n                            if (text)\n                                anchor = new DOMPos(text.node, text.offset);\n                        }\n                    }\n                    rawSel.collapse(anchor.node, anchor.offset);\n                    if (main.bidiLevel != null && rawSel.caretBidiLevel !== undefined)\n                        rawSel.caretBidiLevel = main.bidiLevel;\n                }\n                else if (rawSel.extend) {\n                    // Selection.extend can be used to create an 'inverted' selection\n                    // (one where the focus is before the anchor), but not all\n                    // browsers support it yet.\n                    rawSel.collapse(anchor.node, anchor.offset);\n                    // Safari will ignore the call above when the editor is\n                    // hidden, and then raise an error on the call to extend\n                    // (#940).\n                    try {\n                        rawSel.extend(head.node, head.offset);\n                    }\n                    catch (_) { }\n                }\n                else {\n                    // Primitive (IE) way\n                    let range = document.createRange();\n                    if (main.anchor > main.head)\n                        [anchor, head] = [head, anchor];\n                    range.setEnd(head.node, head.offset);\n                    range.setStart(anchor.node, anchor.offset);\n                    rawSel.removeAllRanges();\n                    rawSel.addRange(range);\n                }\n                if (selectionNotFocus && this.view.root.activeElement == this.dom) {\n                    this.dom.blur();\n                    if (activeElt)\n                        activeElt.focus();\n                }\n            });\n            this.view.observer.setSelectionRange(anchor, head);\n        }\n        this.impreciseAnchor = anchor.precise ? null : new DOMPos(domSel.anchorNode, domSel.anchorOffset);\n        this.impreciseHead = head.precise ? null : new DOMPos(domSel.focusNode, domSel.focusOffset);\n    }\n    // If a zero-length widget is inserted next to the cursor during\n    // composition, avoid moving it across it and disrupting the\n    // composition.\n    suppressWidgetCursorChange(sel, cursor) {\n        return this.hasComposition && cursor.empty &&\n            isEquivalentPosition(sel.focusNode, sel.focusOffset, sel.anchorNode, sel.anchorOffset) &&\n            this.posFromDOM(sel.focusNode, sel.focusOffset) == cursor.head;\n    }\n    enforceCursorAssoc() {\n        if (this.hasComposition)\n            return;\n        let { view } = this, cursor = view.state.selection.main;\n        let sel = getSelection(view.root);\n        let { anchorNode, anchorOffset } = view.observer.selectionRange;\n        if (!sel || !cursor.empty || !cursor.assoc || !sel.modify)\n            return;\n        let line = LineView.find(this, cursor.head);\n        if (!line)\n            return;\n        let lineStart = line.posAtStart;\n        if (cursor.head == lineStart || cursor.head == lineStart + line.length)\n            return;\n        let before = this.coordsAt(cursor.head, -1), after = this.coordsAt(cursor.head, 1);\n        if (!before || !after || before.bottom > after.top)\n            return;\n        let dom = this.domAtPos(cursor.head + cursor.assoc);\n        sel.collapse(dom.node, dom.offset);\n        sel.modify(\"move\", cursor.assoc < 0 ? \"forward\" : \"backward\", \"lineboundary\");\n        // This can go wrong in corner cases like single-character lines,\n        // so check and reset if necessary.\n        view.observer.readSelectionRange();\n        let newRange = view.observer.selectionRange;\n        if (view.docView.posFromDOM(newRange.anchorNode, newRange.anchorOffset) != cursor.from)\n            sel.collapse(anchorNode, anchorOffset);\n    }\n    // If a position is in/near a block widget, move it to a nearby text\n    // line, since we don't want the cursor inside a block widget.\n    moveToLine(pos) {\n        // Block widgets will return positions before/after them, which\n        // are thus directly in the document DOM element.\n        let dom = this.dom, newPos;\n        if (pos.node != dom)\n            return pos;\n        for (let i = pos.offset; !newPos && i < dom.childNodes.length; i++) {\n            let view = ContentView.get(dom.childNodes[i]);\n            if (view instanceof LineView)\n                newPos = view.domAtPos(0);\n        }\n        for (let i = pos.offset - 1; !newPos && i >= 0; i--) {\n            let view = ContentView.get(dom.childNodes[i]);\n            if (view instanceof LineView)\n                newPos = view.domAtPos(view.length);\n        }\n        return newPos ? new DOMPos(newPos.node, newPos.offset, true) : pos;\n    }\n    nearest(dom) {\n        for (let cur = dom; cur;) {\n            let domView = ContentView.get(cur);\n            if (domView && domView.rootView == this)\n                return domView;\n            cur = cur.parentNode;\n        }\n        return null;\n    }\n    posFromDOM(node, offset) {\n        let view = this.nearest(node);\n        if (!view)\n            throw new RangeError(\"Trying to find position for a DOM position outside of the document\");\n        return view.localPosFromDOM(node, offset) + view.posAtStart;\n    }\n    domAtPos(pos) {\n        let { i, off } = this.childCursor().findPos(pos, -1);\n        for (; i < this.children.length - 1;) {\n            let child = this.children[i];\n            if (off < child.length || child instanceof LineView)\n                break;\n            i++;\n            off = 0;\n        }\n        return this.children[i].domAtPos(off);\n    }\n    coordsAt(pos, side) {\n        let best = null, bestPos = 0;\n        for (let off = this.length, i = this.children.length - 1; i >= 0; i--) {\n            let child = this.children[i], end = off - child.breakAfter, start = end - child.length;\n            if (end < pos)\n                break;\n            if (start <= pos && (start < pos || child.covers(-1)) && (end > pos || child.covers(1)) &&\n                (!best || child instanceof LineView && !(best instanceof LineView && side >= 0))) {\n                best = child;\n                bestPos = start;\n            }\n            else if (best && start == pos && end == pos && child instanceof BlockWidgetView && Math.abs(side) < 2) {\n                if (child.deco.startSide < 0)\n                    break;\n                else if (i)\n                    best = null;\n            }\n            off = start;\n        }\n        return best ? best.coordsAt(pos - bestPos, side) : null;\n    }\n    coordsForChar(pos) {\n        let { i, off } = this.childPos(pos, 1), child = this.children[i];\n        if (!(child instanceof LineView))\n            return null;\n        while (child.children.length) {\n            let { i, off: childOff } = child.childPos(off, 1);\n            for (;; i++) {\n                if (i == child.children.length)\n                    return null;\n                if ((child = child.children[i]).length)\n                    break;\n            }\n            off = childOff;\n        }\n        if (!(child instanceof TextView))\n            return null;\n        let end = state.findClusterBreak(child.text, off);\n        if (end == off)\n            return null;\n        let rects = textRange(child.dom, off, end).getClientRects();\n        for (let i = 0; i < rects.length; i++) {\n            let rect = rects[i];\n            if (i == rects.length - 1 || rect.top < rect.bottom && rect.left < rect.right)\n                return rect;\n        }\n        return null;\n    }\n    measureVisibleLineHeights(viewport) {\n        let result = [], { from, to } = viewport;\n        let contentWidth = this.view.contentDOM.clientWidth;\n        let isWider = contentWidth > Math.max(this.view.scrollDOM.clientWidth, this.minWidth) + 1;\n        let widest = -1, ltr = this.view.textDirection == exports.Direction.LTR;\n        for (let pos = 0, i = 0; i < this.children.length; i++) {\n            let child = this.children[i], end = pos + child.length;\n            if (end > to)\n                break;\n            if (pos >= from) {\n                let childRect = child.dom.getBoundingClientRect();\n                result.push(childRect.height);\n                if (isWider) {\n                    let last = child.dom.lastChild;\n                    let rects = last ? clientRectsFor(last) : [];\n                    if (rects.length) {\n                        let rect = rects[rects.length - 1];\n                        let width = ltr ? rect.right - childRect.left : childRect.right - rect.left;\n                        if (width > widest) {\n                            widest = width;\n                            this.minWidth = contentWidth;\n                            this.minWidthFrom = pos;\n                            this.minWidthTo = end;\n                        }\n                    }\n                }\n            }\n            pos = end + child.breakAfter;\n        }\n        return result;\n    }\n    textDirectionAt(pos) {\n        let { i } = this.childPos(pos, 1);\n        return getComputedStyle(this.children[i].dom).direction == \"rtl\" ? exports.Direction.RTL : exports.Direction.LTR;\n    }\n    measureTextSize() {\n        for (let child of this.children) {\n            if (child instanceof LineView) {\n                let measure = child.measureTextSize();\n                if (measure)\n                    return measure;\n            }\n        }\n        // If no workable line exists, force a layout of a measurable element\n        let dummy = document.createElement(\"div\"), lineHeight, charWidth, textHeight;\n        dummy.className = \"cm-line\";\n        dummy.style.width = \"99999px\";\n        dummy.style.position = \"absolute\";\n        dummy.textContent = \"abc def ghi jkl mno pqr stu\";\n        this.view.observer.ignore(() => {\n            this.dom.appendChild(dummy);\n            let rect = clientRectsFor(dummy.firstChild)[0];\n            lineHeight = dummy.getBoundingClientRect().height;\n            charWidth = rect ? rect.width / 27 : 7;\n            textHeight = rect ? rect.height : lineHeight;\n            dummy.remove();\n        });\n        return { lineHeight, charWidth, textHeight };\n    }\n    childCursor(pos = this.length) {\n        // Move back to start of last element when possible, so that\n        // `ChildCursor.findPos` doesn't have to deal with the edge case\n        // of being after the last element.\n        let i = this.children.length;\n        if (i)\n            pos -= this.children[--i].length;\n        return new ChildCursor(this.children, pos, i);\n    }\n    computeBlockGapDeco() {\n        let deco = [], vs = this.view.viewState;\n        for (let pos = 0, i = 0;; i++) {\n            let next = i == vs.viewports.length ? null : vs.viewports[i];\n            let end = next ? next.from - 1 : this.length;\n            if (end > pos) {\n                let height = (vs.lineBlockAt(end).bottom - vs.lineBlockAt(pos).top) / this.view.scaleY;\n                deco.push(Decoration.replace({\n                    widget: new BlockGapWidget(height),\n                    block: true,\n                    inclusive: true,\n                    isBlockGap: true,\n                }).range(pos, end));\n            }\n            if (!next)\n                break;\n            pos = next.to + 1;\n        }\n        return Decoration.set(deco);\n    }\n    updateDeco() {\n        let i = 1;\n        let allDeco = this.view.state.facet(decorations).map(d => {\n            let dynamic = this.dynamicDecorationMap[i++] = typeof d == \"function\";\n            return dynamic ? d(this.view) : d;\n        });\n        let dynamicOuter = false, outerDeco = this.view.state.facet(outerDecorations).map((d, i) => {\n            let dynamic = typeof d == \"function\";\n            if (dynamic)\n                dynamicOuter = true;\n            return dynamic ? d(this.view) : d;\n        });\n        if (outerDeco.length) {\n            this.dynamicDecorationMap[i++] = dynamicOuter;\n            allDeco.push(state.RangeSet.join(outerDeco));\n        }\n        this.decorations = [\n            this.editContextFormatting,\n            ...allDeco,\n            this.computeBlockGapDeco(),\n            this.view.viewState.lineGapDeco\n        ];\n        while (i < this.decorations.length)\n            this.dynamicDecorationMap[i++] = false;\n        return this.decorations;\n    }\n    scrollIntoView(target) {\n        if (target.isSnapshot) {\n            let ref = this.view.viewState.lineBlockAt(target.range.head);\n            this.view.scrollDOM.scrollTop = ref.top - target.yMargin;\n            this.view.scrollDOM.scrollLeft = target.xMargin;\n            return;\n        }\n        for (let handler of this.view.state.facet(scrollHandler)) {\n            try {\n                if (handler(this.view, target.range, target))\n                    return true;\n            }\n            catch (e) {\n                logException(this.view.state, e, \"scroll handler\");\n            }\n        }\n        let { range } = target;\n        let rect = this.coordsAt(range.head, range.empty ? range.assoc : range.head > range.anchor ? -1 : 1), other;\n        if (!rect)\n            return;\n        if (!range.empty && (other = this.coordsAt(range.anchor, range.anchor > range.head ? -1 : 1)))\n            rect = { left: Math.min(rect.left, other.left), top: Math.min(rect.top, other.top),\n                right: Math.max(rect.right, other.right), bottom: Math.max(rect.bottom, other.bottom) };\n        let margins = getScrollMargins(this.view);\n        let targetRect = {\n            left: rect.left - margins.left, top: rect.top - margins.top,\n            right: rect.right + margins.right, bottom: rect.bottom + margins.bottom\n        };\n        let { offsetWidth, offsetHeight } = this.view.scrollDOM;\n        scrollRectIntoView(this.view.scrollDOM, targetRect, range.head < range.anchor ? -1 : 1, target.x, target.y, Math.max(Math.min(target.xMargin, offsetWidth), -offsetWidth), Math.max(Math.min(target.yMargin, offsetHeight), -offsetHeight), this.view.textDirection == exports.Direction.LTR);\n    }\n}\nfunction betweenUneditable(pos) {\n    return pos.node.nodeType == 1 && pos.node.firstChild &&\n        (pos.offset == 0 || pos.node.childNodes[pos.offset - 1].contentEditable == \"false\") &&\n        (pos.offset == pos.node.childNodes.length || pos.node.childNodes[pos.offset].contentEditable == \"false\");\n}\nfunction findCompositionNode(view, headPos) {\n    let sel = view.observer.selectionRange;\n    if (!sel.focusNode)\n        return null;\n    let textBefore = textNodeBefore(sel.focusNode, sel.focusOffset);\n    let textAfter = textNodeAfter(sel.focusNode, sel.focusOffset);\n    let textNode = textBefore || textAfter;\n    if (textAfter && textBefore && textAfter.node != textBefore.node) {\n        let descAfter = ContentView.get(textAfter.node);\n        if (!descAfter || descAfter instanceof TextView && descAfter.text != textAfter.node.nodeValue) {\n            textNode = textAfter;\n        }\n        else if (view.docView.lastCompositionAfterCursor) {\n            let descBefore = ContentView.get(textBefore.node);\n            if (!(!descBefore || descBefore instanceof TextView && descBefore.text != textBefore.node.nodeValue))\n                textNode = textAfter;\n        }\n    }\n    view.docView.lastCompositionAfterCursor = textNode != textBefore;\n    if (!textNode)\n        return null;\n    let from = headPos - textNode.offset;\n    return { from, to: from + textNode.node.nodeValue.length, node: textNode.node };\n}\nfunction findCompositionRange(view, changes, headPos) {\n    let found = findCompositionNode(view, headPos);\n    if (!found)\n        return null;\n    let { node: textNode, from, to } = found, text = textNode.nodeValue;\n    // Don't try to preserve multi-line compositions\n    if (/[\\n\\r]/.test(text))\n        return null;\n    if (view.state.doc.sliceString(found.from, found.to) != text)\n        return null;\n    let inv = changes.invertedDesc;\n    let range = new ChangedRange(inv.mapPos(from), inv.mapPos(to), from, to);\n    let marks = [];\n    for (let parent = textNode.parentNode;; parent = parent.parentNode) {\n        let parentView = ContentView.get(parent);\n        if (parentView instanceof MarkView)\n            marks.push({ node: parent, deco: parentView.mark });\n        else if (parentView instanceof LineView || parent.nodeName == \"DIV\" && parent.parentNode == view.contentDOM)\n            return { range, text: textNode, marks, line: parent };\n        else if (parent != view.contentDOM)\n            marks.push({ node: parent, deco: new MarkDecoration({\n                    inclusive: true,\n                    attributes: getAttrs(parent),\n                    tagName: parent.tagName.toLowerCase()\n                }) });\n        else\n            return null;\n    }\n}\nfunction nextToUneditable(node, offset) {\n    if (node.nodeType != 1)\n        return 0;\n    return (offset && node.childNodes[offset - 1].contentEditable == \"false\" ? 1 /* NextTo.Before */ : 0) |\n        (offset < node.childNodes.length && node.childNodes[offset].contentEditable == \"false\" ? 2 /* NextTo.After */ : 0);\n}\nlet DecorationComparator$1 = class DecorationComparator {\n    constructor() {\n        this.changes = [];\n    }\n    compareRange(from, to) { addRange(from, to, this.changes); }\n    comparePoint(from, to) { addRange(from, to, this.changes); }\n    boundChange(pos) { addRange(pos, pos, this.changes); }\n};\nfunction findChangedDeco(a, b, diff) {\n    let comp = new DecorationComparator$1;\n    state.RangeSet.compare(a, b, diff, comp);\n    return comp.changes;\n}\nfunction inUneditable(node, inside) {\n    for (let cur = node; cur && cur != inside; cur = cur.assignedSlot || cur.parentNode) {\n        if (cur.nodeType == 1 && cur.contentEditable == 'false') {\n            return true;\n        }\n    }\n    return false;\n}\nfunction touchesComposition(changes, composition) {\n    let touched = false;\n    if (composition)\n        changes.iterChangedRanges((from, to) => {\n            if (from < composition.to && to > composition.from)\n                touched = true;\n        });\n    return touched;\n}\n\nfunction groupAt(state$1, pos, bias = 1) {\n    let categorize = state$1.charCategorizer(pos);\n    let line = state$1.doc.lineAt(pos), linePos = pos - line.from;\n    if (line.length == 0)\n        return state.EditorSelection.cursor(pos);\n    if (linePos == 0)\n        bias = 1;\n    else if (linePos == line.length)\n        bias = -1;\n    let from = linePos, to = linePos;\n    if (bias < 0)\n        from = state.findClusterBreak(line.text, linePos, false);\n    else\n        to = state.findClusterBreak(line.text, linePos);\n    let cat = categorize(line.text.slice(from, to));\n    while (from > 0) {\n        let prev = state.findClusterBreak(line.text, from, false);\n        if (categorize(line.text.slice(prev, from)) != cat)\n            break;\n        from = prev;\n    }\n    while (to < line.length) {\n        let next = state.findClusterBreak(line.text, to);\n        if (categorize(line.text.slice(to, next)) != cat)\n            break;\n        to = next;\n    }\n    return state.EditorSelection.range(from + line.from, to + line.from);\n}\n// Search the DOM for the {node, offset} position closest to the given\n// coordinates. Very inefficient and crude, but can usually be avoided\n// by calling caret(Position|Range)FromPoint instead.\nfunction getdx(x, rect) {\n    return rect.left > x ? rect.left - x : Math.max(0, x - rect.right);\n}\nfunction getdy(y, rect) {\n    return rect.top > y ? rect.top - y : Math.max(0, y - rect.bottom);\n}\nfunction yOverlap(a, b) {\n    return a.top < b.bottom - 1 && a.bottom > b.top + 1;\n}\nfunction upTop(rect, top) {\n    return top < rect.top ? { top, left: rect.left, right: rect.right, bottom: rect.bottom } : rect;\n}\nfunction upBot(rect, bottom) {\n    return bottom > rect.bottom ? { top: rect.top, left: rect.left, right: rect.right, bottom } : rect;\n}\nfunction domPosAtCoords(parent, x, y) {\n    let closest, closestRect, closestX, closestY, closestOverlap = false;\n    let above, below, aboveRect, belowRect;\n    for (let child = parent.firstChild; child; child = child.nextSibling) {\n        let rects = clientRectsFor(child);\n        for (let i = 0; i < rects.length; i++) {\n            let rect = rects[i];\n            if (closestRect && yOverlap(closestRect, rect))\n                rect = upTop(upBot(rect, closestRect.bottom), closestRect.top);\n            let dx = getdx(x, rect), dy = getdy(y, rect);\n            if (dx == 0 && dy == 0)\n                return child.nodeType == 3 ? domPosInText(child, x, y) : domPosAtCoords(child, x, y);\n            if (!closest || closestY > dy || closestY == dy && closestX > dx) {\n                closest = child;\n                closestRect = rect;\n                closestX = dx;\n                closestY = dy;\n                let side = dy ? (y < rect.top ? -1 : 1) : dx ? (x < rect.left ? -1 : 1) : 0;\n                closestOverlap = !side || (side > 0 ? i < rects.length - 1 : i > 0);\n            }\n            if (dx == 0) {\n                if (y > rect.bottom && (!aboveRect || aboveRect.bottom < rect.bottom)) {\n                    above = child;\n                    aboveRect = rect;\n                }\n                else if (y < rect.top && (!belowRect || belowRect.top > rect.top)) {\n                    below = child;\n                    belowRect = rect;\n                }\n            }\n            else if (aboveRect && yOverlap(aboveRect, rect)) {\n                aboveRect = upBot(aboveRect, rect.bottom);\n            }\n            else if (belowRect && yOverlap(belowRect, rect)) {\n                belowRect = upTop(belowRect, rect.top);\n            }\n        }\n    }\n    if (aboveRect && aboveRect.bottom >= y) {\n        closest = above;\n        closestRect = aboveRect;\n    }\n    else if (belowRect && belowRect.top <= y) {\n        closest = below;\n        closestRect = belowRect;\n    }\n    if (!closest)\n        return { node: parent, offset: 0 };\n    let clipX = Math.max(closestRect.left, Math.min(closestRect.right, x));\n    if (closest.nodeType == 3)\n        return domPosInText(closest, clipX, y);\n    if (closestOverlap && closest.contentEditable != \"false\")\n        return domPosAtCoords(closest, clipX, y);\n    let offset = Array.prototype.indexOf.call(parent.childNodes, closest) +\n        (x >= (closestRect.left + closestRect.right) / 2 ? 1 : 0);\n    return { node: parent, offset };\n}\nfunction domPosInText(node, x, y) {\n    let len = node.nodeValue.length;\n    let closestOffset = -1, closestDY = 1e9, generalSide = 0;\n    for (let i = 0; i < len; i++) {\n        let rects = textRange(node, i, i + 1).getClientRects();\n        for (let j = 0; j < rects.length; j++) {\n            let rect = rects[j];\n            if (rect.top == rect.bottom)\n                continue;\n            if (!generalSide)\n                generalSide = x - rect.left;\n            let dy = (rect.top > y ? rect.top - y : y - rect.bottom) - 1;\n            if (rect.left - 1 <= x && rect.right + 1 >= x && dy < closestDY) {\n                let right = x >= (rect.left + rect.right) / 2, after = right;\n                if (browser.chrome || browser.gecko) {\n                    // Check for RTL on browsers that support getting client\n                    // rects for empty ranges.\n                    let rectBefore = textRange(node, i).getBoundingClientRect();\n                    if (rectBefore.left == rect.right)\n                        after = !right;\n                }\n                if (dy <= 0)\n                    return { node, offset: i + (after ? 1 : 0) };\n                closestOffset = i + (after ? 1 : 0);\n                closestDY = dy;\n            }\n        }\n    }\n    return { node, offset: closestOffset > -1 ? closestOffset : generalSide > 0 ? node.nodeValue.length : 0 };\n}\nfunction posAtCoords(view, coords, precise, bias = -1) {\n    var _a, _b;\n    let content = view.contentDOM.getBoundingClientRect(), docTop = content.top + view.viewState.paddingTop;\n    let block, { docHeight } = view.viewState;\n    let { x, y } = coords, yOffset = y - docTop;\n    if (yOffset < 0)\n        return 0;\n    if (yOffset > docHeight)\n        return view.state.doc.length;\n    // Scan for a text block near the queried y position\n    for (let halfLine = view.viewState.heightOracle.textHeight / 2, bounced = false;;) {\n        block = view.elementAtHeight(yOffset);\n        if (block.type == exports.BlockType.Text)\n            break;\n        for (;;) {\n            // Move the y position out of this block\n            yOffset = bias > 0 ? block.bottom + halfLine : block.top - halfLine;\n            if (yOffset >= 0 && yOffset <= docHeight)\n                break;\n            // If the document consists entirely of replaced widgets, we\n            // won't find a text block, so return 0\n            if (bounced)\n                return precise ? null : 0;\n            bounced = true;\n            bias = -bias;\n        }\n    }\n    y = docTop + yOffset;\n    let lineStart = block.from;\n    // If this is outside of the rendered viewport, we can't determine a position\n    if (lineStart < view.viewport.from)\n        return view.viewport.from == 0 ? 0 : precise ? null : posAtCoordsImprecise(view, content, block, x, y);\n    if (lineStart > view.viewport.to)\n        return view.viewport.to == view.state.doc.length ? view.state.doc.length :\n            precise ? null : posAtCoordsImprecise(view, content, block, x, y);\n    // Prefer ShadowRootOrDocument.elementFromPoint if present, fall back to document if not\n    let doc = view.dom.ownerDocument;\n    let root = view.root.elementFromPoint ? view.root : doc;\n    let element = root.elementFromPoint(x, y);\n    if (element && !view.contentDOM.contains(element))\n        element = null;\n    // If the element is unexpected, clip x at the sides of the content area and try again\n    if (!element) {\n        x = Math.max(content.left + 1, Math.min(content.right - 1, x));\n        element = root.elementFromPoint(x, y);\n        if (element && !view.contentDOM.contains(element))\n            element = null;\n    }\n    // There's visible editor content under the point, so we can try\n    // using caret(Position|Range)FromPoint as a shortcut\n    let node, offset = -1;\n    if (element && ((_a = view.docView.nearest(element)) === null || _a === void 0 ? void 0 : _a.isEditable) != false) {\n        if (doc.caretPositionFromPoint) {\n            let pos = doc.caretPositionFromPoint(x, y);\n            if (pos)\n                ({ offsetNode: node, offset } = pos);\n        }\n        else if (doc.caretRangeFromPoint) {\n            let range = doc.caretRangeFromPoint(x, y);\n            if (range) {\n                ({ startContainer: node, startOffset: offset } = range);\n                if (!view.contentDOM.contains(node) ||\n                    browser.safari && isSuspiciousSafariCaretResult(node, offset, x) ||\n                    browser.chrome && isSuspiciousChromeCaretResult(node, offset, x))\n                    node = undefined;\n            }\n        }\n        // Chrome will return offsets into <input> elements without child\n        // nodes, which will lead to a null deref below, so clip the\n        // offset to the node size.\n        if (node)\n            offset = Math.min(maxOffset(node), offset);\n    }\n    // No luck, do our own (potentially expensive) search\n    if (!node || !view.docView.dom.contains(node)) {\n        let line = LineView.find(view.docView, lineStart);\n        if (!line)\n            return yOffset > block.top + block.height / 2 ? block.to : block.from;\n        ({ node, offset } = domPosAtCoords(line.dom, x, y));\n    }\n    let nearest = view.docView.nearest(node);\n    if (!nearest)\n        return null;\n    if (nearest.isWidget && ((_b = nearest.dom) === null || _b === void 0 ? void 0 : _b.nodeType) == 1) {\n        let rect = nearest.dom.getBoundingClientRect();\n        return coords.y < rect.top || coords.y <= rect.bottom && coords.x <= (rect.left + rect.right) / 2\n            ? nearest.posAtStart : nearest.posAtEnd;\n    }\n    else {\n        return nearest.localPosFromDOM(node, offset) + nearest.posAtStart;\n    }\n}\nfunction posAtCoordsImprecise(view, contentRect, block, x, y) {\n    let into = Math.round((x - contentRect.left) * view.defaultCharacterWidth);\n    if (view.lineWrapping && block.height > view.defaultLineHeight * 1.5) {\n        let textHeight = view.viewState.heightOracle.textHeight;\n        let line = Math.floor((y - block.top - (view.defaultLineHeight - textHeight) * 0.5) / textHeight);\n        into += line * view.viewState.heightOracle.lineLength;\n    }\n    let content = view.state.sliceDoc(block.from, block.to);\n    return block.from + state.findColumn(content, into, view.state.tabSize);\n}\n// In case of a high line height, Safari's caretRangeFromPoint treats\n// the space between lines as belonging to the last character of the\n// line before. This is used to detect such a result so that it can be\n// ignored (issue #401).\nfunction isSuspiciousSafariCaretResult(node, offset, x) {\n    let len;\n    if (node.nodeType != 3 || offset != (len = node.nodeValue.length))\n        return false;\n    for (let next = node.nextSibling; next; next = next.nextSibling)\n        if (next.nodeType != 1 || next.nodeName != \"BR\")\n            return false;\n    return textRange(node, len - 1, len).getBoundingClientRect().left > x;\n}\n// Chrome will move positions between lines to the start of the next line\nfunction isSuspiciousChromeCaretResult(node, offset, x) {\n    if (offset != 0)\n        return false;\n    for (let cur = node;;) {\n        let parent = cur.parentNode;\n        if (!parent || parent.nodeType != 1 || parent.firstChild != cur)\n            return false;\n        if (parent.classList.contains(\"cm-line\"))\n            break;\n        cur = parent;\n    }\n    let rect = node.nodeType == 1 ? node.getBoundingClientRect()\n        : textRange(node, 0, Math.max(node.nodeValue.length, 1)).getBoundingClientRect();\n    return x - rect.left > 5;\n}\nfunction blockAt(view, pos) {\n    let line = view.lineBlockAt(pos);\n    if (Array.isArray(line.type))\n        for (let l of line.type) {\n            if (l.to > pos || l.to == pos && (l.to == line.to || l.type == exports.BlockType.Text))\n                return l;\n        }\n    return line;\n}\nfunction moveToLineBoundary(view, start, forward, includeWrap) {\n    let line = blockAt(view, start.head);\n    let coords = !includeWrap || line.type != exports.BlockType.Text || !(view.lineWrapping || line.widgetLineBreaks) ? null\n        : view.coordsAtPos(start.assoc < 0 && start.head > line.from ? start.head - 1 : start.head);\n    if (coords) {\n        let editorRect = view.dom.getBoundingClientRect();\n        let direction = view.textDirectionAt(line.from);\n        let pos = view.posAtCoords({ x: forward == (direction == exports.Direction.LTR) ? editorRect.right - 1 : editorRect.left + 1,\n            y: (coords.top + coords.bottom) / 2 });\n        if (pos != null)\n            return state.EditorSelection.cursor(pos, forward ? -1 : 1);\n    }\n    return state.EditorSelection.cursor(forward ? line.to : line.from, forward ? -1 : 1);\n}\nfunction moveByChar(view, start, forward, by) {\n    let line = view.state.doc.lineAt(start.head), spans = view.bidiSpans(line);\n    let direction = view.textDirectionAt(line.from);\n    for (let cur = start, check = null;;) {\n        let next = moveVisually(line, spans, direction, cur, forward), char = movedOver;\n        if (!next) {\n            if (line.number == (forward ? view.state.doc.lines : 1))\n                return cur;\n            char = \"\\n\";\n            line = view.state.doc.line(line.number + (forward ? 1 : -1));\n            spans = view.bidiSpans(line);\n            next = view.visualLineSide(line, !forward);\n        }\n        if (!check) {\n            if (!by)\n                return next;\n            check = by(char);\n        }\n        else if (!check(char)) {\n            return cur;\n        }\n        cur = next;\n    }\n}\nfunction byGroup(view, pos, start) {\n    let categorize = view.state.charCategorizer(pos);\n    let cat = categorize(start);\n    return (next) => {\n        let nextCat = categorize(next);\n        if (cat == state.CharCategory.Space)\n            cat = nextCat;\n        return cat == nextCat;\n    };\n}\nfunction moveVertically(view, start, forward, distance) {\n    let startPos = start.head, dir = forward ? 1 : -1;\n    if (startPos == (forward ? view.state.doc.length : 0))\n        return state.EditorSelection.cursor(startPos, start.assoc);\n    let goal = start.goalColumn, startY;\n    let rect = view.contentDOM.getBoundingClientRect();\n    let startCoords = view.coordsAtPos(startPos, start.assoc || -1), docTop = view.documentTop;\n    if (startCoords) {\n        if (goal == null)\n            goal = startCoords.left - rect.left;\n        startY = dir < 0 ? startCoords.top : startCoords.bottom;\n    }\n    else {\n        let line = view.viewState.lineBlockAt(startPos);\n        if (goal == null)\n            goal = Math.min(rect.right - rect.left, view.defaultCharacterWidth * (startPos - line.from));\n        startY = (dir < 0 ? line.top : line.bottom) + docTop;\n    }\n    let resolvedGoal = rect.left + goal;\n    let dist = distance !== null && distance !== void 0 ? distance : (view.viewState.heightOracle.textHeight >> 1);\n    for (let extra = 0;; extra += 10) {\n        let curY = startY + (dist + extra) * dir;\n        let pos = posAtCoords(view, { x: resolvedGoal, y: curY }, false, dir);\n        if (curY < rect.top || curY > rect.bottom || (dir < 0 ? pos < startPos : pos > startPos)) {\n            let charRect = view.docView.coordsForChar(pos);\n            let assoc = !charRect || curY < charRect.top ? -1 : 1;\n            return state.EditorSelection.cursor(pos, assoc, undefined, goal);\n        }\n    }\n}\nfunction skipAtomicRanges(atoms, pos, bias) {\n    for (;;) {\n        let moved = 0;\n        for (let set of atoms) {\n            set.between(pos - 1, pos + 1, (from, to, value) => {\n                if (pos > from && pos < to) {\n                    let side = moved || bias || (pos - from < to - pos ? -1 : 1);\n                    pos = side < 0 ? from : to;\n                    moved = side;\n                }\n            });\n        }\n        if (!moved)\n            return pos;\n    }\n}\nfunction skipAtoms(view, oldPos, pos) {\n    let newPos = skipAtomicRanges(view.state.facet(atomicRanges).map(f => f(view)), pos.from, oldPos.head > pos.from ? -1 : 1);\n    return newPos == pos.from ? pos : state.EditorSelection.cursor(newPos, newPos < pos.from ? 1 : -1);\n}\n\nconst LineBreakPlaceholder = \"\\uffff\";\nclass DOMReader {\n    constructor(points, state$1) {\n        this.points = points;\n        this.text = \"\";\n        this.lineSeparator = state$1.facet(state.EditorState.lineSeparator);\n    }\n    append(text) {\n        this.text += text;\n    }\n    lineBreak() {\n        this.text += LineBreakPlaceholder;\n    }\n    readRange(start, end) {\n        if (!start)\n            return this;\n        let parent = start.parentNode;\n        for (let cur = start;;) {\n            this.findPointBefore(parent, cur);\n            let oldLen = this.text.length;\n            this.readNode(cur);\n            let next = cur.nextSibling;\n            if (next == end)\n                break;\n            let view = ContentView.get(cur), nextView = ContentView.get(next);\n            if (view && nextView ? view.breakAfter :\n                (view ? view.breakAfter : isBlockElement(cur)) ||\n                    (isBlockElement(next) && (cur.nodeName != \"BR\" || cur.cmIgnore) && this.text.length > oldLen))\n                this.lineBreak();\n            cur = next;\n        }\n        this.findPointBefore(parent, end);\n        return this;\n    }\n    readTextNode(node) {\n        let text = node.nodeValue;\n        for (let point of this.points)\n            if (point.node == node)\n                point.pos = this.text.length + Math.min(point.offset, text.length);\n        for (let off = 0, re = this.lineSeparator ? null : /\\r\\n?|\\n/g;;) {\n            let nextBreak = -1, breakSize = 1, m;\n            if (this.lineSeparator) {\n                nextBreak = text.indexOf(this.lineSeparator, off);\n                breakSize = this.lineSeparator.length;\n            }\n            else if (m = re.exec(text)) {\n                nextBreak = m.index;\n                breakSize = m[0].length;\n            }\n            this.append(text.slice(off, nextBreak < 0 ? text.length : nextBreak));\n            if (nextBreak < 0)\n                break;\n            this.lineBreak();\n            if (breakSize > 1)\n                for (let point of this.points)\n                    if (point.node == node && point.pos > this.text.length)\n                        point.pos -= breakSize - 1;\n            off = nextBreak + breakSize;\n        }\n    }\n    readNode(node) {\n        if (node.cmIgnore)\n            return;\n        let view = ContentView.get(node);\n        let fromView = view && view.overrideDOMText;\n        if (fromView != null) {\n            this.findPointInside(node, fromView.length);\n            for (let i = fromView.iter(); !i.next().done;) {\n                if (i.lineBreak)\n                    this.lineBreak();\n                else\n                    this.append(i.value);\n            }\n        }\n        else if (node.nodeType == 3) {\n            this.readTextNode(node);\n        }\n        else if (node.nodeName == \"BR\") {\n            if (node.nextSibling)\n                this.lineBreak();\n        }\n        else if (node.nodeType == 1) {\n            this.readRange(node.firstChild, null);\n        }\n    }\n    findPointBefore(node, next) {\n        for (let point of this.points)\n            if (point.node == node && node.childNodes[point.offset] == next)\n                point.pos = this.text.length;\n    }\n    findPointInside(node, length) {\n        for (let point of this.points)\n            if (node.nodeType == 3 ? point.node == node : node.contains(point.node))\n                point.pos = this.text.length + (isAtEnd(node, point.node, point.offset) ? length : 0);\n    }\n}\nfunction isAtEnd(parent, node, offset) {\n    for (;;) {\n        if (!node || offset < maxOffset(node))\n            return false;\n        if (node == parent)\n            return true;\n        offset = domIndex(node) + 1;\n        node = node.parentNode;\n    }\n}\nclass DOMPoint {\n    constructor(node, offset) {\n        this.node = node;\n        this.offset = offset;\n        this.pos = -1;\n    }\n}\n\nclass DOMChange {\n    constructor(view, start, end, typeOver) {\n        this.typeOver = typeOver;\n        this.bounds = null;\n        this.text = \"\";\n        this.domChanged = start > -1;\n        let { impreciseHead: iHead, impreciseAnchor: iAnchor } = view.docView;\n        if (view.state.readOnly && start > -1) {\n            // Ignore changes when the editor is read-only\n            this.newSel = null;\n        }\n        else if (start > -1 && (this.bounds = view.docView.domBoundsAround(start, end, 0))) {\n            let selPoints = iHead || iAnchor ? [] : selectionPoints(view);\n            let reader = new DOMReader(selPoints, view.state);\n            reader.readRange(this.bounds.startDOM, this.bounds.endDOM);\n            this.text = reader.text;\n            this.newSel = selectionFromPoints(selPoints, this.bounds.from);\n        }\n        else {\n            let domSel = view.observer.selectionRange;\n            let head = iHead && iHead.node == domSel.focusNode && iHead.offset == domSel.focusOffset ||\n                !contains(view.contentDOM, domSel.focusNode)\n                ? view.state.selection.main.head\n                : view.docView.posFromDOM(domSel.focusNode, domSel.focusOffset);\n            let anchor = iAnchor && iAnchor.node == domSel.anchorNode && iAnchor.offset == domSel.anchorOffset ||\n                !contains(view.contentDOM, domSel.anchorNode)\n                ? view.state.selection.main.anchor\n                : view.docView.posFromDOM(domSel.anchorNode, domSel.anchorOffset);\n            // iOS will refuse to select the block gaps when doing\n            // select-all.\n            // Chrome will put the selection *inside* them, confusing\n            // posFromDOM\n            let vp = view.viewport;\n            if ((browser.ios || browser.chrome) && view.state.selection.main.empty && head != anchor &&\n                (vp.from > 0 || vp.to < view.state.doc.length)) {\n                let from = Math.min(head, anchor), to = Math.max(head, anchor);\n                let offFrom = vp.from - from, offTo = vp.to - to;\n                if ((offFrom == 0 || offFrom == 1 || from == 0) && (offTo == 0 || offTo == -1 || to == view.state.doc.length)) {\n                    head = 0;\n                    anchor = view.state.doc.length;\n                }\n            }\n            this.newSel = state.EditorSelection.single(anchor, head);\n        }\n    }\n}\nfunction applyDOMChange(view, domChange) {\n    let change;\n    let { newSel } = domChange, sel = view.state.selection.main;\n    let lastKey = view.inputState.lastKeyTime > Date.now() - 100 ? view.inputState.lastKeyCode : -1;\n    if (domChange.bounds) {\n        let { from, to } = domChange.bounds;\n        let preferredPos = sel.from, preferredSide = null;\n        // Prefer anchoring to end when Backspace is pressed (or, on\n        // Android, when something was deleted)\n        if (lastKey === 8 || browser.android && domChange.text.length < to - from) {\n            preferredPos = sel.to;\n            preferredSide = \"end\";\n        }\n        let diff = findDiff(view.state.doc.sliceString(from, to, LineBreakPlaceholder), domChange.text, preferredPos - from, preferredSide);\n        if (diff) {\n            // Chrome inserts two newlines when pressing shift-enter at the\n            // end of a line. DomChange drops one of those.\n            if (browser.chrome && lastKey == 13 &&\n                diff.toB == diff.from + 2 && domChange.text.slice(diff.from, diff.toB) == LineBreakPlaceholder + LineBreakPlaceholder)\n                diff.toB--;\n            change = { from: from + diff.from, to: from + diff.toA,\n                insert: state.Text.of(domChange.text.slice(diff.from, diff.toB).split(LineBreakPlaceholder)) };\n        }\n    }\n    else if (newSel && (!view.hasFocus && view.state.facet(editable) || newSel.main.eq(sel))) {\n        newSel = null;\n    }\n    if (!change && !newSel)\n        return false;\n    if (!change && domChange.typeOver && !sel.empty && newSel && newSel.main.empty) {\n        // Heuristic to notice typing over a selected character\n        change = { from: sel.from, to: sel.to, insert: view.state.doc.slice(sel.from, sel.to) };\n    }\n    else if (change && change.from >= sel.from && change.to <= sel.to &&\n        (change.from != sel.from || change.to != sel.to) &&\n        (sel.to - sel.from) - (change.to - change.from) <= 4) {\n        // If the change is inside the selection and covers most of it,\n        // assume it is a selection replace (with identical characters at\n        // the start/end not included in the diff)\n        change = {\n            from: sel.from, to: sel.to,\n            insert: view.state.doc.slice(sel.from, change.from).append(change.insert).append(view.state.doc.slice(change.to, sel.to))\n        };\n    }\n    else if ((browser.mac || browser.android) && change && change.from == change.to && change.from == sel.head - 1 &&\n        /^\\. ?$/.test(change.insert.toString()) && view.contentDOM.getAttribute(\"autocorrect\") == \"off\") {\n        // Detect insert-period-on-double-space Mac and Android behavior,\n        // and transform it into a regular space insert.\n        if (newSel && change.insert.length == 2)\n            newSel = state.EditorSelection.single(newSel.main.anchor - 1, newSel.main.head - 1);\n        change = { from: sel.from, to: sel.to, insert: state.Text.of([\" \"]) };\n    }\n    else if (browser.chrome && change && change.from == change.to && change.from == sel.head &&\n        change.insert.toString() == \"\\n \" && view.lineWrapping) {\n        // In Chrome, if you insert a space at the start of a wrapped\n        // line, it will actually insert a newline and a space, causing a\n        // bogus new line to be created in CodeMirror (#968)\n        if (newSel)\n            newSel = state.EditorSelection.single(newSel.main.anchor - 1, newSel.main.head - 1);\n        change = { from: sel.from, to: sel.to, insert: state.Text.of([\" \"]) };\n    }\n    if (change) {\n        return applyDOMChangeInner(view, change, newSel, lastKey);\n    }\n    else if (newSel && !newSel.main.eq(sel)) {\n        let scrollIntoView = false, userEvent = \"select\";\n        if (view.inputState.lastSelectionTime > Date.now() - 50) {\n            if (view.inputState.lastSelectionOrigin == \"select\")\n                scrollIntoView = true;\n            userEvent = view.inputState.lastSelectionOrigin;\n        }\n        view.dispatch({ selection: newSel, scrollIntoView, userEvent });\n        return true;\n    }\n    else {\n        return false;\n    }\n}\nfunction applyDOMChangeInner(view, change, newSel, lastKey = -1) {\n    if (browser.ios && view.inputState.flushIOSKey(change))\n        return true;\n    let sel = view.state.selection.main;\n    // Android browsers don't fire reasonable key events for enter,\n    // backspace, or delete. So this detects changes that look like\n    // they're caused by those keys, and reinterprets them as key\n    // events. (Some of these keys are also handled by beforeinput\n    // events and the pendingAndroidKey mechanism, but that's not\n    // reliable in all situations.)\n    if (browser.android &&\n        ((change.to == sel.to &&\n            // GBoard will sometimes remove a space it just inserted\n            // after a completion when you press enter\n            (change.from == sel.from || change.from == sel.from - 1 && view.state.sliceDoc(change.from, sel.from) == \" \") &&\n            change.insert.length == 1 && change.insert.lines == 2 &&\n            dispatchKey(view.contentDOM, \"Enter\", 13)) ||\n            ((change.from == sel.from - 1 && change.to == sel.to && change.insert.length == 0 ||\n                lastKey == 8 && change.insert.length < change.to - change.from && change.to > sel.head) &&\n                dispatchKey(view.contentDOM, \"Backspace\", 8)) ||\n            (change.from == sel.from && change.to == sel.to + 1 && change.insert.length == 0 &&\n                dispatchKey(view.contentDOM, \"Delete\", 46))))\n        return true;\n    let text = change.insert.toString();\n    if (view.inputState.composing >= 0)\n        view.inputState.composing++;\n    let defaultTr;\n    let defaultInsert = () => defaultTr || (defaultTr = applyDefaultInsert(view, change, newSel));\n    if (!view.state.facet(inputHandler).some(h => h(view, change.from, change.to, text, defaultInsert)))\n        view.dispatch(defaultInsert());\n    return true;\n}\nfunction applyDefaultInsert(view, change, newSel) {\n    let tr, startState = view.state, sel = startState.selection.main;\n    if (change.from >= sel.from && change.to <= sel.to && change.to - change.from >= (sel.to - sel.from) / 3 &&\n        (!newSel || newSel.main.empty && newSel.main.from == change.from + change.insert.length) &&\n        view.inputState.composing < 0) {\n        let before = sel.from < change.from ? startState.sliceDoc(sel.from, change.from) : \"\";\n        let after = sel.to > change.to ? startState.sliceDoc(change.to, sel.to) : \"\";\n        tr = startState.replaceSelection(view.state.toText(before + change.insert.sliceString(0, undefined, view.state.lineBreak) + after));\n    }\n    else {\n        let changes = startState.changes(change);\n        let mainSel = newSel && newSel.main.to <= changes.newLength ? newSel.main : undefined;\n        // Try to apply a composition change to all cursors\n        if (startState.selection.ranges.length > 1 && view.inputState.composing >= 0 &&\n            change.to <= sel.to && change.to >= sel.to - 10) {\n            let replaced = view.state.sliceDoc(change.from, change.to);\n            let compositionRange, composition = newSel && findCompositionNode(view, newSel.main.head);\n            if (composition) {\n                let dLen = change.insert.length - (change.to - change.from);\n                compositionRange = { from: composition.from, to: composition.to - dLen };\n            }\n            else {\n                compositionRange = view.state.doc.lineAt(sel.head);\n            }\n            let offset = sel.to - change.to, size = sel.to - sel.from;\n            tr = startState.changeByRange(range => {\n                if (range.from == sel.from && range.to == sel.to)\n                    return { changes, range: mainSel || range.map(changes) };\n                let to = range.to - offset, from = to - replaced.length;\n                if (range.to - range.from != size || view.state.sliceDoc(from, to) != replaced ||\n                    // Unfortunately, there's no way to make multiple\n                    // changes in the same node work without aborting\n                    // composition, so cursors in the composition range are\n                    // ignored.\n                    range.to >= compositionRange.from && range.from <= compositionRange.to)\n                    return { range };\n                let rangeChanges = startState.changes({ from, to, insert: change.insert }), selOff = range.to - sel.to;\n                return {\n                    changes: rangeChanges,\n                    range: !mainSel ? range.map(rangeChanges) :\n                        state.EditorSelection.range(Math.max(0, mainSel.anchor + selOff), Math.max(0, mainSel.head + selOff))\n                };\n            });\n        }\n        else {\n            tr = {\n                changes,\n                selection: mainSel && startState.selection.replaceRange(mainSel)\n            };\n        }\n    }\n    let userEvent = \"input.type\";\n    if (view.composing ||\n        view.inputState.compositionPendingChange && view.inputState.compositionEndedAt > Date.now() - 50) {\n        view.inputState.compositionPendingChange = false;\n        userEvent += \".compose\";\n        if (view.inputState.compositionFirstChange) {\n            userEvent += \".start\";\n            view.inputState.compositionFirstChange = false;\n        }\n    }\n    return startState.update(tr, { userEvent, scrollIntoView: true });\n}\nfunction findDiff(a, b, preferredPos, preferredSide) {\n    let minLen = Math.min(a.length, b.length);\n    let from = 0;\n    while (from < minLen && a.charCodeAt(from) == b.charCodeAt(from))\n        from++;\n    if (from == minLen && a.length == b.length)\n        return null;\n    let toA = a.length, toB = b.length;\n    while (toA > 0 && toB > 0 && a.charCodeAt(toA - 1) == b.charCodeAt(toB - 1)) {\n        toA--;\n        toB--;\n    }\n    if (preferredSide == \"end\") {\n        let adjust = Math.max(0, from - Math.min(toA, toB));\n        preferredPos -= toA + adjust - from;\n    }\n    if (toA < from && a.length < b.length) {\n        let move = preferredPos <= from && preferredPos >= toA ? from - preferredPos : 0;\n        from -= move;\n        toB = from + (toB - toA);\n        toA = from;\n    }\n    else if (toB < from) {\n        let move = preferredPos <= from && preferredPos >= toB ? from - preferredPos : 0;\n        from -= move;\n        toA = from + (toA - toB);\n        toB = from;\n    }\n    return { from, toA, toB };\n}\nfunction selectionPoints(view) {\n    let result = [];\n    if (view.root.activeElement != view.contentDOM)\n        return result;\n    let { anchorNode, anchorOffset, focusNode, focusOffset } = view.observer.selectionRange;\n    if (anchorNode) {\n        result.push(new DOMPoint(anchorNode, anchorOffset));\n        if (focusNode != anchorNode || focusOffset != anchorOffset)\n            result.push(new DOMPoint(focusNode, focusOffset));\n    }\n    return result;\n}\nfunction selectionFromPoints(points, base) {\n    if (points.length == 0)\n        return null;\n    let anchor = points[0].pos, head = points.length == 2 ? points[1].pos : anchor;\n    return anchor > -1 && head > -1 ? state.EditorSelection.single(anchor + base, head + base) : null;\n}\n\nclass InputState {\n    setSelectionOrigin(origin) {\n        this.lastSelectionOrigin = origin;\n        this.lastSelectionTime = Date.now();\n    }\n    constructor(view) {\n        this.view = view;\n        this.lastKeyCode = 0;\n        this.lastKeyTime = 0;\n        this.lastTouchTime = 0;\n        this.lastFocusTime = 0;\n        this.lastScrollTop = 0;\n        this.lastScrollLeft = 0;\n        // On iOS, some keys need to have their default behavior happen\n        // (after which we retroactively handle them and reset the DOM) to\n        // avoid messing up the virtual keyboard state.\n        this.pendingIOSKey = undefined;\n        /**\n        When enabled (>-1), tab presses are not given to key handlers,\n        leaving the browser's default behavior. If >0, the mode expires\n        at that timestamp, and any other keypress clears it.\n        Esc enables temporary tab focus mode for two seconds when not\n        otherwise handled.\n        */\n        this.tabFocusMode = -1;\n        this.lastSelectionOrigin = null;\n        this.lastSelectionTime = 0;\n        this.lastContextMenu = 0;\n        this.scrollHandlers = [];\n        this.handlers = Object.create(null);\n        // -1 means not in a composition. Otherwise, this counts the number\n        // of changes made during the composition. The count is used to\n        // avoid treating the start state of the composition, before any\n        // changes have been made, as part of the composition.\n        this.composing = -1;\n        // Tracks whether the next change should be marked as starting the\n        // composition (null means no composition, true means next is the\n        // first, false means first has already been marked for this\n        // composition)\n        this.compositionFirstChange = null;\n        // End time of the previous composition\n        this.compositionEndedAt = 0;\n        // Used in a kludge to detect when an Enter keypress should be\n        // considered part of the composition on Safari, which fires events\n        // in the wrong order\n        this.compositionPendingKey = false;\n        // Used to categorize changes as part of a composition, even when\n        // the mutation events fire shortly after the compositionend event\n        this.compositionPendingChange = false;\n        this.mouseSelection = null;\n        // When a drag from the editor is active, this points at the range\n        // being dragged.\n        this.draggedContent = null;\n        this.handleEvent = this.handleEvent.bind(this);\n        this.notifiedFocused = view.hasFocus;\n        // On Safari adding an input event handler somehow prevents an\n        // issue where the composition vanishes when you press enter.\n        if (browser.safari)\n            view.contentDOM.addEventListener(\"input\", () => null);\n        if (browser.gecko)\n            firefoxCopyCutHack(view.contentDOM.ownerDocument);\n    }\n    handleEvent(event) {\n        if (!eventBelongsToEditor(this.view, event) || this.ignoreDuringComposition(event))\n            return;\n        if (event.type == \"keydown\" && this.keydown(event))\n            return;\n        this.runHandlers(event.type, event);\n    }\n    runHandlers(type, event) {\n        let handlers = this.handlers[type];\n        if (handlers) {\n            for (let observer of handlers.observers)\n                observer(this.view, event);\n            for (let handler of handlers.handlers) {\n                if (event.defaultPrevented)\n                    break;\n                if (handler(this.view, event)) {\n                    event.preventDefault();\n                    break;\n                }\n            }\n        }\n    }\n    ensureHandlers(plugins) {\n        let handlers = computeHandlers(plugins), prev = this.handlers, dom = this.view.contentDOM;\n        for (let type in handlers)\n            if (type != \"scroll\") {\n                let passive = !handlers[type].handlers.length;\n                let exists = prev[type];\n                if (exists && passive != !exists.handlers.length) {\n                    dom.removeEventListener(type, this.handleEvent);\n                    exists = null;\n                }\n                if (!exists)\n                    dom.addEventListener(type, this.handleEvent, { passive });\n            }\n        for (let type in prev)\n            if (type != \"scroll\" && !handlers[type])\n                dom.removeEventListener(type, this.handleEvent);\n        this.handlers = handlers;\n    }\n    keydown(event) {\n        // Must always run, even if a custom handler handled the event\n        this.lastKeyCode = event.keyCode;\n        this.lastKeyTime = Date.now();\n        if (event.keyCode == 9 && this.tabFocusMode > -1 && (!this.tabFocusMode || Date.now() <= this.tabFocusMode))\n            return true;\n        if (this.tabFocusMode > 0 && event.keyCode != 27 && modifierCodes.indexOf(event.keyCode) < 0)\n            this.tabFocusMode = -1;\n        // Chrome for Android usually doesn't fire proper key events, but\n        // occasionally does, usually surrounded by a bunch of complicated\n        // composition changes. When an enter or backspace key event is\n        // seen, hold off on handling DOM events for a bit, and then\n        // dispatch it.\n        if (browser.android && browser.chrome && !event.synthetic &&\n            (event.keyCode == 13 || event.keyCode == 8)) {\n            this.view.observer.delayAndroidKey(event.key, event.keyCode);\n            return true;\n        }\n        // Preventing the default behavior of Enter on iOS makes the\n        // virtual keyboard get stuck in the wrong (lowercase)\n        // state. So we let it go through, and then, in\n        // applyDOMChange, notify key handlers of it and reset to\n        // the state they produce.\n        let pending;\n        if (browser.ios && !event.synthetic && !event.altKey && !event.metaKey &&\n            ((pending = PendingKeys.find(key => key.keyCode == event.keyCode)) && !event.ctrlKey ||\n                EmacsyPendingKeys.indexOf(event.key) > -1 && event.ctrlKey && !event.shiftKey)) {\n            this.pendingIOSKey = pending || event;\n            setTimeout(() => this.flushIOSKey(), 250);\n            return true;\n        }\n        if (event.keyCode != 229)\n            this.view.observer.forceFlush();\n        return false;\n    }\n    flushIOSKey(change) {\n        let key = this.pendingIOSKey;\n        if (!key)\n            return false;\n        // This looks like an autocorrection before Enter\n        if (key.key == \"Enter\" && change && change.from < change.to && /^\\S+$/.test(change.insert.toString()))\n            return false;\n        this.pendingIOSKey = undefined;\n        return dispatchKey(this.view.contentDOM, key.key, key.keyCode, key instanceof KeyboardEvent ? key : undefined);\n    }\n    ignoreDuringComposition(event) {\n        if (!/^key/.test(event.type))\n            return false;\n        if (this.composing > 0)\n            return true;\n        // See https://www.stum.de/2016/06/24/handling-ime-events-in-javascript/.\n        // On some input method editors (IMEs), the Enter key is used to\n        // confirm character selection. On Safari, when Enter is pressed,\n        // compositionend and keydown events are sometimes emitted in the\n        // wrong order. The key event should still be ignored, even when\n        // it happens after the compositionend event.\n        if (browser.safari && !browser.ios && this.compositionPendingKey && Date.now() - this.compositionEndedAt < 100) {\n            this.compositionPendingKey = false;\n            return true;\n        }\n        return false;\n    }\n    startMouseSelection(mouseSelection) {\n        if (this.mouseSelection)\n            this.mouseSelection.destroy();\n        this.mouseSelection = mouseSelection;\n    }\n    update(update) {\n        this.view.observer.update(update);\n        if (this.mouseSelection)\n            this.mouseSelection.update(update);\n        if (this.draggedContent && update.docChanged)\n            this.draggedContent = this.draggedContent.map(update.changes);\n        if (update.transactions.length)\n            this.lastKeyCode = this.lastSelectionTime = 0;\n    }\n    destroy() {\n        if (this.mouseSelection)\n            this.mouseSelection.destroy();\n    }\n}\nfunction bindHandler(plugin, handler) {\n    return (view, event) => {\n        try {\n            return handler.call(plugin, event, view);\n        }\n        catch (e) {\n            logException(view.state, e);\n        }\n    };\n}\nfunction computeHandlers(plugins) {\n    let result = Object.create(null);\n    function record(type) {\n        return result[type] || (result[type] = { observers: [], handlers: [] });\n    }\n    for (let plugin of plugins) {\n        let spec = plugin.spec;\n        if (spec && spec.domEventHandlers)\n            for (let type in spec.domEventHandlers) {\n                let f = spec.domEventHandlers[type];\n                if (f)\n                    record(type).handlers.push(bindHandler(plugin.value, f));\n            }\n        if (spec && spec.domEventObservers)\n            for (let type in spec.domEventObservers) {\n                let f = spec.domEventObservers[type];\n                if (f)\n                    record(type).observers.push(bindHandler(plugin.value, f));\n            }\n    }\n    for (let type in handlers)\n        record(type).handlers.push(handlers[type]);\n    for (let type in observers)\n        record(type).observers.push(observers[type]);\n    return result;\n}\nconst PendingKeys = [\n    { key: \"Backspace\", keyCode: 8, inputType: \"deleteContentBackward\" },\n    { key: \"Enter\", keyCode: 13, inputType: \"insertParagraph\" },\n    { key: \"Enter\", keyCode: 13, inputType: \"insertLineBreak\" },\n    { key: \"Delete\", keyCode: 46, inputType: \"deleteContentForward\" }\n];\nconst EmacsyPendingKeys = \"dthko\";\n// Key codes for modifier keys\nconst modifierCodes = [16, 17, 18, 20, 91, 92, 224, 225];\nconst dragScrollMargin = 6;\nfunction dragScrollSpeed(dist) {\n    return Math.max(0, dist) * 0.7 + 8;\n}\nfunction dist(a, b) {\n    return Math.max(Math.abs(a.clientX - b.clientX), Math.abs(a.clientY - b.clientY));\n}\nclass MouseSelection {\n    constructor(view, startEvent, style, mustSelect) {\n        this.view = view;\n        this.startEvent = startEvent;\n        this.style = style;\n        this.mustSelect = mustSelect;\n        this.scrollSpeed = { x: 0, y: 0 };\n        this.scrolling = -1;\n        this.lastEvent = startEvent;\n        this.scrollParents = scrollableParents(view.contentDOM);\n        this.atoms = view.state.facet(atomicRanges).map(f => f(view));\n        let doc = view.contentDOM.ownerDocument;\n        doc.addEventListener(\"mousemove\", this.move = this.move.bind(this));\n        doc.addEventListener(\"mouseup\", this.up = this.up.bind(this));\n        this.extend = startEvent.shiftKey;\n        this.multiple = view.state.facet(state.EditorState.allowMultipleSelections) && addsSelectionRange(view, startEvent);\n        this.dragging = isInPrimarySelection(view, startEvent) && getClickType(startEvent) == 1 ? null : false;\n    }\n    start(event) {\n        // When clicking outside of the selection, immediately apply the\n        // effect of starting the selection\n        if (this.dragging === false)\n            this.select(event);\n    }\n    move(event) {\n        if (event.buttons == 0)\n            return this.destroy();\n        if (this.dragging || this.dragging == null && dist(this.startEvent, event) < 10)\n            return;\n        this.select(this.lastEvent = event);\n        let sx = 0, sy = 0;\n        let left = 0, top = 0, right = this.view.win.innerWidth, bottom = this.view.win.innerHeight;\n        if (this.scrollParents.x)\n            ({ left, right } = this.scrollParents.x.getBoundingClientRect());\n        if (this.scrollParents.y)\n            ({ top, bottom } = this.scrollParents.y.getBoundingClientRect());\n        let margins = getScrollMargins(this.view);\n        if (event.clientX - margins.left <= left + dragScrollMargin)\n            sx = -dragScrollSpeed(left - event.clientX);\n        else if (event.clientX + margins.right >= right - dragScrollMargin)\n            sx = dragScrollSpeed(event.clientX - right);\n        if (event.clientY - margins.top <= top + dragScrollMargin)\n            sy = -dragScrollSpeed(top - event.clientY);\n        else if (event.clientY + margins.bottom >= bottom - dragScrollMargin)\n            sy = dragScrollSpeed(event.clientY - bottom);\n        this.setScrollSpeed(sx, sy);\n    }\n    up(event) {\n        if (this.dragging == null)\n            this.select(this.lastEvent);\n        if (!this.dragging)\n            event.preventDefault();\n        this.destroy();\n    }\n    destroy() {\n        this.setScrollSpeed(0, 0);\n        let doc = this.view.contentDOM.ownerDocument;\n        doc.removeEventListener(\"mousemove\", this.move);\n        doc.removeEventListener(\"mouseup\", this.up);\n        this.view.inputState.mouseSelection = this.view.inputState.draggedContent = null;\n    }\n    setScrollSpeed(sx, sy) {\n        this.scrollSpeed = { x: sx, y: sy };\n        if (sx || sy) {\n            if (this.scrolling < 0)\n                this.scrolling = setInterval(() => this.scroll(), 50);\n        }\n        else if (this.scrolling > -1) {\n            clearInterval(this.scrolling);\n            this.scrolling = -1;\n        }\n    }\n    scroll() {\n        let { x, y } = this.scrollSpeed;\n        if (x && this.scrollParents.x) {\n            this.scrollParents.x.scrollLeft += x;\n            x = 0;\n        }\n        if (y && this.scrollParents.y) {\n            this.scrollParents.y.scrollTop += y;\n            y = 0;\n        }\n        if (x || y)\n            this.view.win.scrollBy(x, y);\n        if (this.dragging === false)\n            this.select(this.lastEvent);\n    }\n    skipAtoms(sel) {\n        let ranges = null;\n        for (let i = 0; i < sel.ranges.length; i++) {\n            let range = sel.ranges[i], updated = null;\n            if (range.empty) {\n                let pos = skipAtomicRanges(this.atoms, range.from, 0);\n                if (pos != range.from)\n                    updated = state.EditorSelection.cursor(pos, -1);\n            }\n            else {\n                let from = skipAtomicRanges(this.atoms, range.from, -1);\n                let to = skipAtomicRanges(this.atoms, range.to, 1);\n                if (from != range.from || to != range.to)\n                    updated = state.EditorSelection.range(range.from == range.anchor ? from : to, range.from == range.head ? from : to);\n            }\n            if (updated) {\n                if (!ranges)\n                    ranges = sel.ranges.slice();\n                ranges[i] = updated;\n            }\n        }\n        return ranges ? state.EditorSelection.create(ranges, sel.mainIndex) : sel;\n    }\n    select(event) {\n        let { view } = this, selection = this.skipAtoms(this.style.get(event, this.extend, this.multiple));\n        if (this.mustSelect || !selection.eq(view.state.selection, this.dragging === false))\n            this.view.dispatch({\n                selection,\n                userEvent: \"select.pointer\"\n            });\n        this.mustSelect = false;\n    }\n    update(update) {\n        if (update.transactions.some(tr => tr.isUserEvent(\"input.type\")))\n            this.destroy();\n        else if (this.style.update(update))\n            setTimeout(() => this.select(this.lastEvent), 20);\n    }\n}\nfunction addsSelectionRange(view, event) {\n    let facet = view.state.facet(clickAddsSelectionRange);\n    return facet.length ? facet[0](event) : browser.mac ? event.metaKey : event.ctrlKey;\n}\nfunction dragMovesSelection(view, event) {\n    let facet = view.state.facet(dragMovesSelection$1);\n    return facet.length ? facet[0](event) : browser.mac ? !event.altKey : !event.ctrlKey;\n}\nfunction isInPrimarySelection(view, event) {\n    let { main } = view.state.selection;\n    if (main.empty)\n        return false;\n    // On boundary clicks, check whether the coordinates are inside the\n    // selection's client rectangles\n    let sel = getSelection(view.root);\n    if (!sel || sel.rangeCount == 0)\n        return true;\n    let rects = sel.getRangeAt(0).getClientRects();\n    for (let i = 0; i < rects.length; i++) {\n        let rect = rects[i];\n        if (rect.left <= event.clientX && rect.right >= event.clientX &&\n            rect.top <= event.clientY && rect.bottom >= event.clientY)\n            return true;\n    }\n    return false;\n}\nfunction eventBelongsToEditor(view, event) {\n    if (!event.bubbles)\n        return true;\n    if (event.defaultPrevented)\n        return false;\n    for (let node = event.target, cView; node != view.contentDOM; node = node.parentNode)\n        if (!node || node.nodeType == 11 || ((cView = ContentView.get(node)) && cView.ignoreEvent(event)))\n            return false;\n    return true;\n}\nconst handlers = Object.create(null);\nconst observers = Object.create(null);\n// This is very crude, but unfortunately both these browsers _pretend_\n// that they have a clipboard API—all the objects and methods are\n// there, they just don't work, and they are hard to test.\nconst brokenClipboardAPI = (browser.ie && browser.ie_version < 15) ||\n    (browser.ios && browser.webkit_version < 604);\nfunction capturePaste(view) {\n    let parent = view.dom.parentNode;\n    if (!parent)\n        return;\n    let target = parent.appendChild(document.createElement(\"textarea\"));\n    target.style.cssText = \"position: fixed; left: -10000px; top: 10px\";\n    target.focus();\n    setTimeout(() => {\n        view.focus();\n        target.remove();\n        doPaste(view, target.value);\n    }, 50);\n}\nfunction textFilter(state, facet, text) {\n    for (let filter of state.facet(facet))\n        text = filter(text, state);\n    return text;\n}\nfunction doPaste(view, input) {\n    input = textFilter(view.state, clipboardInputFilter, input);\n    let { state: state$1 } = view, changes, i = 1, text = state$1.toText(input);\n    let byLine = text.lines == state$1.selection.ranges.length;\n    let linewise = lastLinewiseCopy != null && state$1.selection.ranges.every(r => r.empty) && lastLinewiseCopy == text.toString();\n    if (linewise) {\n        let lastLine = -1;\n        changes = state$1.changeByRange(range => {\n            let line = state$1.doc.lineAt(range.from);\n            if (line.from == lastLine)\n                return { range };\n            lastLine = line.from;\n            let insert = state$1.toText((byLine ? text.line(i++).text : input) + state$1.lineBreak);\n            return { changes: { from: line.from, insert },\n                range: state.EditorSelection.cursor(range.from + insert.length) };\n        });\n    }\n    else if (byLine) {\n        changes = state$1.changeByRange(range => {\n            let line = text.line(i++);\n            return { changes: { from: range.from, to: range.to, insert: line.text },\n                range: state.EditorSelection.cursor(range.from + line.length) };\n        });\n    }\n    else {\n        changes = state$1.replaceSelection(text);\n    }\n    view.dispatch(changes, {\n        userEvent: \"input.paste\",\n        scrollIntoView: true\n    });\n}\nobservers.scroll = view => {\n    view.inputState.lastScrollTop = view.scrollDOM.scrollTop;\n    view.inputState.lastScrollLeft = view.scrollDOM.scrollLeft;\n};\nhandlers.keydown = (view, event) => {\n    view.inputState.setSelectionOrigin(\"select\");\n    if (event.keyCode == 27 && view.inputState.tabFocusMode != 0)\n        view.inputState.tabFocusMode = Date.now() + 2000;\n    return false;\n};\nobservers.touchstart = (view, e) => {\n    view.inputState.lastTouchTime = Date.now();\n    view.inputState.setSelectionOrigin(\"select.pointer\");\n};\nobservers.touchmove = view => {\n    view.inputState.setSelectionOrigin(\"select.pointer\");\n};\nhandlers.mousedown = (view, event) => {\n    view.observer.flush();\n    if (view.inputState.lastTouchTime > Date.now() - 2000)\n        return false; // Ignore touch interaction\n    let style = null;\n    for (let makeStyle of view.state.facet(mouseSelectionStyle)) {\n        style = makeStyle(view, event);\n        if (style)\n            break;\n    }\n    if (!style && event.button == 0)\n        style = basicMouseSelection(view, event);\n    if (style) {\n        let mustFocus = !view.hasFocus;\n        view.inputState.startMouseSelection(new MouseSelection(view, event, style, mustFocus));\n        if (mustFocus)\n            view.observer.ignore(() => {\n                focusPreventScroll(view.contentDOM);\n                let active = view.root.activeElement;\n                if (active && !active.contains(view.contentDOM))\n                    active.blur();\n            });\n        let mouseSel = view.inputState.mouseSelection;\n        if (mouseSel) {\n            mouseSel.start(event);\n            return mouseSel.dragging === false;\n        }\n    }\n    return false;\n};\nfunction rangeForClick(view, pos, bias, type) {\n    if (type == 1) { // Single click\n        return state.EditorSelection.cursor(pos, bias);\n    }\n    else if (type == 2) { // Double click\n        return groupAt(view.state, pos, bias);\n    }\n    else { // Triple click\n        let visual = LineView.find(view.docView, pos), line = view.state.doc.lineAt(visual ? visual.posAtEnd : pos);\n        let from = visual ? visual.posAtStart : line.from, to = visual ? visual.posAtEnd : line.to;\n        if (to < view.state.doc.length && to == line.to)\n            to++;\n        return state.EditorSelection.range(from, to);\n    }\n}\nlet inside = (x, y, rect) => y >= rect.top && y <= rect.bottom && x >= rect.left && x <= rect.right;\n// Try to determine, for the given coordinates, associated with the\n// given position, whether they are related to the element before or\n// the element after the position.\nfunction findPositionSide(view, pos, x, y) {\n    let line = LineView.find(view.docView, pos);\n    if (!line)\n        return 1;\n    let off = pos - line.posAtStart;\n    // Line boundaries point into the line\n    if (off == 0)\n        return 1;\n    if (off == line.length)\n        return -1;\n    // Positions on top of an element point at that element\n    let before = line.coordsAt(off, -1);\n    if (before && inside(x, y, before))\n        return -1;\n    let after = line.coordsAt(off, 1);\n    if (after && inside(x, y, after))\n        return 1;\n    // This is probably a line wrap point. Pick before if the point is\n    // above its bottom.\n    return before && before.bottom >= y ? -1 : 1;\n}\nfunction queryPos(view, event) {\n    let pos = view.posAtCoords({ x: event.clientX, y: event.clientY }, false);\n    return { pos, bias: findPositionSide(view, pos, event.clientX, event.clientY) };\n}\nconst BadMouseDetail = browser.ie && browser.ie_version <= 11;\nlet lastMouseDown = null, lastMouseDownCount = 0, lastMouseDownTime = 0;\nfunction getClickType(event) {\n    if (!BadMouseDetail)\n        return event.detail;\n    let last = lastMouseDown, lastTime = lastMouseDownTime;\n    lastMouseDown = event;\n    lastMouseDownTime = Date.now();\n    return lastMouseDownCount = !last || (lastTime > Date.now() - 400 && Math.abs(last.clientX - event.clientX) < 2 &&\n        Math.abs(last.clientY - event.clientY) < 2) ? (lastMouseDownCount + 1) % 3 : 1;\n}\nfunction basicMouseSelection(view, event) {\n    let start = queryPos(view, event), type = getClickType(event);\n    let startSel = view.state.selection;\n    return {\n        update(update) {\n            if (update.docChanged) {\n                start.pos = update.changes.mapPos(start.pos);\n                startSel = startSel.map(update.changes);\n            }\n        },\n        get(event, extend, multiple) {\n            let cur = queryPos(view, event), removed;\n            let range = rangeForClick(view, cur.pos, cur.bias, type);\n            if (start.pos != cur.pos && !extend) {\n                let startRange = rangeForClick(view, start.pos, start.bias, type);\n                let from = Math.min(startRange.from, range.from), to = Math.max(startRange.to, range.to);\n                range = from < range.from ? state.EditorSelection.range(from, to) : state.EditorSelection.range(to, from);\n            }\n            if (extend)\n                return startSel.replaceRange(startSel.main.extend(range.from, range.to));\n            else if (multiple && type == 1 && startSel.ranges.length > 1 && (removed = removeRangeAround(startSel, cur.pos)))\n                return removed;\n            else if (multiple)\n                return startSel.addRange(range);\n            else\n                return state.EditorSelection.create([range]);\n        }\n    };\n}\nfunction removeRangeAround(sel, pos) {\n    for (let i = 0; i < sel.ranges.length; i++) {\n        let { from, to } = sel.ranges[i];\n        if (from <= pos && to >= pos)\n            return state.EditorSelection.create(sel.ranges.slice(0, i).concat(sel.ranges.slice(i + 1)), sel.mainIndex == i ? 0 : sel.mainIndex - (sel.mainIndex > i ? 1 : 0));\n    }\n    return null;\n}\nhandlers.dragstart = (view, event) => {\n    let { selection: { main: range } } = view.state;\n    if (event.target.draggable) {\n        let cView = view.docView.nearest(event.target);\n        if (cView && cView.isWidget) {\n            let from = cView.posAtStart, to = from + cView.length;\n            if (from >= range.to || to <= range.from)\n                range = state.EditorSelection.range(from, to);\n        }\n    }\n    let { inputState } = view;\n    if (inputState.mouseSelection)\n        inputState.mouseSelection.dragging = true;\n    inputState.draggedContent = range;\n    if (event.dataTransfer) {\n        event.dataTransfer.setData(\"Text\", textFilter(view.state, clipboardOutputFilter, view.state.sliceDoc(range.from, range.to)));\n        event.dataTransfer.effectAllowed = \"copyMove\";\n    }\n    return false;\n};\nhandlers.dragend = view => {\n    view.inputState.draggedContent = null;\n    return false;\n};\nfunction dropText(view, event, text, direct) {\n    text = textFilter(view.state, clipboardInputFilter, text);\n    if (!text)\n        return;\n    let dropPos = view.posAtCoords({ x: event.clientX, y: event.clientY }, false);\n    let { draggedContent } = view.inputState;\n    let del = direct && draggedContent && dragMovesSelection(view, event)\n        ? { from: draggedContent.from, to: draggedContent.to } : null;\n    let ins = { from: dropPos, insert: text };\n    let changes = view.state.changes(del ? [del, ins] : ins);\n    view.focus();\n    view.dispatch({\n        changes,\n        selection: { anchor: changes.mapPos(dropPos, -1), head: changes.mapPos(dropPos, 1) },\n        userEvent: del ? \"move.drop\" : \"input.drop\"\n    });\n    view.inputState.draggedContent = null;\n}\nhandlers.drop = (view, event) => {\n    if (!event.dataTransfer)\n        return false;\n    if (view.state.readOnly)\n        return true;\n    let files = event.dataTransfer.files;\n    if (files && files.length) { // For a file drop, read the file's text.\n        let text = Array(files.length), read = 0;\n        let finishFile = () => {\n            if (++read == files.length)\n                dropText(view, event, text.filter(s => s != null).join(view.state.lineBreak), false);\n        };\n        for (let i = 0; i < files.length; i++) {\n            let reader = new FileReader;\n            reader.onerror = finishFile;\n            reader.onload = () => {\n                if (!/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(reader.result))\n                    text[i] = reader.result;\n                finishFile();\n            };\n            reader.readAsText(files[i]);\n        }\n        return true;\n    }\n    else {\n        let text = event.dataTransfer.getData(\"Text\");\n        if (text) {\n            dropText(view, event, text, true);\n            return true;\n        }\n    }\n    return false;\n};\nhandlers.paste = (view, event) => {\n    if (view.state.readOnly)\n        return true;\n    view.observer.flush();\n    let data = brokenClipboardAPI ? null : event.clipboardData;\n    if (data) {\n        doPaste(view, data.getData(\"text/plain\") || data.getData(\"text/uri-list\"));\n        return true;\n    }\n    else {\n        capturePaste(view);\n        return false;\n    }\n};\nfunction captureCopy(view, text) {\n    // The extra wrapper is somehow necessary on IE/Edge to prevent the\n    // content from being mangled when it is put onto the clipboard\n    let parent = view.dom.parentNode;\n    if (!parent)\n        return;\n    let target = parent.appendChild(document.createElement(\"textarea\"));\n    target.style.cssText = \"position: fixed; left: -10000px; top: 10px\";\n    target.value = text;\n    target.focus();\n    target.selectionEnd = text.length;\n    target.selectionStart = 0;\n    setTimeout(() => {\n        target.remove();\n        view.focus();\n    }, 50);\n}\nfunction copiedRange(state) {\n    let content = [], ranges = [], linewise = false;\n    for (let range of state.selection.ranges)\n        if (!range.empty) {\n            content.push(state.sliceDoc(range.from, range.to));\n            ranges.push(range);\n        }\n    if (!content.length) {\n        // Nothing selected, do a line-wise copy\n        let upto = -1;\n        for (let { from } of state.selection.ranges) {\n            let line = state.doc.lineAt(from);\n            if (line.number > upto) {\n                content.push(line.text);\n                ranges.push({ from: line.from, to: Math.min(state.doc.length, line.to + 1) });\n            }\n            upto = line.number;\n        }\n        linewise = true;\n    }\n    return { text: textFilter(state, clipboardOutputFilter, content.join(state.lineBreak)), ranges, linewise };\n}\nlet lastLinewiseCopy = null;\nhandlers.copy = handlers.cut = (view, event) => {\n    let { text, ranges, linewise } = copiedRange(view.state);\n    if (!text && !linewise)\n        return false;\n    lastLinewiseCopy = linewise ? text : null;\n    if (event.type == \"cut\" && !view.state.readOnly)\n        view.dispatch({\n            changes: ranges,\n            scrollIntoView: true,\n            userEvent: \"delete.cut\"\n        });\n    let data = brokenClipboardAPI ? null : event.clipboardData;\n    if (data) {\n        data.clearData();\n        data.setData(\"text/plain\", text);\n        return true;\n    }\n    else {\n        captureCopy(view, text);\n        return false;\n    }\n};\nconst isFocusChange = state.Annotation.define();\nfunction focusChangeTransaction(state, focus) {\n    let effects = [];\n    for (let getEffect of state.facet(focusChangeEffect)) {\n        let effect = getEffect(state, focus);\n        if (effect)\n            effects.push(effect);\n    }\n    return effects ? state.update({ effects, annotations: isFocusChange.of(true) }) : null;\n}\nfunction updateForFocusChange(view) {\n    setTimeout(() => {\n        let focus = view.hasFocus;\n        if (focus != view.inputState.notifiedFocused) {\n            let tr = focusChangeTransaction(view.state, focus);\n            if (tr)\n                view.dispatch(tr);\n            else\n                view.update([]);\n        }\n    }, 10);\n}\nobservers.focus = view => {\n    view.inputState.lastFocusTime = Date.now();\n    // When focusing reset the scroll position, move it back to where it was\n    if (!view.scrollDOM.scrollTop && (view.inputState.lastScrollTop || view.inputState.lastScrollLeft)) {\n        view.scrollDOM.scrollTop = view.inputState.lastScrollTop;\n        view.scrollDOM.scrollLeft = view.inputState.lastScrollLeft;\n    }\n    updateForFocusChange(view);\n};\nobservers.blur = view => {\n    view.observer.clearSelectionRange();\n    updateForFocusChange(view);\n};\nobservers.compositionstart = observers.compositionupdate = view => {\n    if (view.observer.editContext)\n        return; // Composition handled by edit context\n    if (view.inputState.compositionFirstChange == null)\n        view.inputState.compositionFirstChange = true;\n    if (view.inputState.composing < 0) {\n        // FIXME possibly set a timeout to clear it again on Android\n        view.inputState.composing = 0;\n    }\n};\nobservers.compositionend = view => {\n    if (view.observer.editContext)\n        return; // Composition handled by edit context\n    view.inputState.composing = -1;\n    view.inputState.compositionEndedAt = Date.now();\n    view.inputState.compositionPendingKey = true;\n    view.inputState.compositionPendingChange = view.observer.pendingRecords().length > 0;\n    view.inputState.compositionFirstChange = null;\n    if (browser.chrome && browser.android) {\n        // Delay flushing for a bit on Android because it'll often fire a\n        // bunch of contradictory changes in a row at end of compositon\n        view.observer.flushSoon();\n    }\n    else if (view.inputState.compositionPendingChange) {\n        // If we found pending records, schedule a flush.\n        Promise.resolve().then(() => view.observer.flush());\n    }\n    else {\n        // Otherwise, make sure that, if no changes come in soon, the\n        // composition view is cleared.\n        setTimeout(() => {\n            if (view.inputState.composing < 0 && view.docView.hasComposition)\n                view.update([]);\n        }, 50);\n    }\n};\nobservers.contextmenu = view => {\n    view.inputState.lastContextMenu = Date.now();\n};\nhandlers.beforeinput = (view, event) => {\n    var _a, _b;\n    // In EditContext mode, we must handle insertReplacementText events\n    // directly, to make spell checking corrections work\n    if (event.inputType == \"insertReplacementText\" && view.observer.editContext) {\n        let text = (_a = event.dataTransfer) === null || _a === void 0 ? void 0 : _a.getData(\"text/plain\"), ranges = event.getTargetRanges();\n        if (text && ranges.length) {\n            let r = ranges[0];\n            let from = view.posAtDOM(r.startContainer, r.startOffset), to = view.posAtDOM(r.endContainer, r.endOffset);\n            applyDOMChangeInner(view, { from, to, insert: view.state.toText(text) }, null);\n            return true;\n        }\n    }\n    // Because Chrome Android doesn't fire useful key events, use\n    // beforeinput to detect backspace (and possibly enter and delete,\n    // but those usually don't even seem to fire beforeinput events at\n    // the moment) and fake a key event for it.\n    //\n    // (preventDefault on beforeinput, though supported in the spec,\n    // seems to do nothing at all on Chrome).\n    let pending;\n    if (browser.chrome && browser.android && (pending = PendingKeys.find(key => key.inputType == event.inputType))) {\n        view.observer.delayAndroidKey(pending.key, pending.keyCode);\n        if (pending.key == \"Backspace\" || pending.key == \"Delete\") {\n            let startViewHeight = ((_b = window.visualViewport) === null || _b === void 0 ? void 0 : _b.height) || 0;\n            setTimeout(() => {\n                var _a;\n                // Backspacing near uneditable nodes on Chrome Android sometimes\n                // closes the virtual keyboard. This tries to crudely detect\n                // that and refocus to get it back.\n                if ((((_a = window.visualViewport) === null || _a === void 0 ? void 0 : _a.height) || 0) > startViewHeight + 10 && view.hasFocus) {\n                    view.contentDOM.blur();\n                    view.focus();\n                }\n            }, 100);\n        }\n    }\n    if (browser.ios && event.inputType == \"deleteContentForward\") {\n        // For some reason, DOM changes (and beforeinput) happen _before_\n        // the key event for ctrl-d on iOS when using an external\n        // keyboard.\n        view.observer.flushSoon();\n    }\n    // Safari will occasionally forget to fire compositionend at the end of a dead-key composition\n    if (browser.safari && event.inputType == \"insertText\" && view.inputState.composing >= 0) {\n        setTimeout(() => observers.compositionend(view, event), 20);\n    }\n    return false;\n};\nconst appliedFirefoxHack = new Set;\n// In Firefox, when cut/copy handlers are added to the document, that\n// somehow avoids a bug where those events aren't fired when the\n// selection is empty. See https://github.com/codemirror/dev/issues/1082\n// and https://bugzilla.mozilla.org/show_bug.cgi?id=995961\nfunction firefoxCopyCutHack(doc) {\n    if (!appliedFirefoxHack.has(doc)) {\n        appliedFirefoxHack.add(doc);\n        doc.addEventListener(\"copy\", () => { });\n        doc.addEventListener(\"cut\", () => { });\n    }\n}\n\nconst wrappingWhiteSpace = [\"pre-wrap\", \"normal\", \"pre-line\", \"break-spaces\"];\n// Used to track, during updateHeight, if any actual heights changed\nlet heightChangeFlag = false;\nfunction clearHeightChangeFlag() { heightChangeFlag = false; }\nclass HeightOracle {\n    constructor(lineWrapping) {\n        this.lineWrapping = lineWrapping;\n        this.doc = state.Text.empty;\n        this.heightSamples = {};\n        this.lineHeight = 14; // The height of an entire line (line-height)\n        this.charWidth = 7;\n        this.textHeight = 14; // The height of the actual font (font-size)\n        this.lineLength = 30;\n    }\n    heightForGap(from, to) {\n        let lines = this.doc.lineAt(to).number - this.doc.lineAt(from).number + 1;\n        if (this.lineWrapping)\n            lines += Math.max(0, Math.ceil(((to - from) - (lines * this.lineLength * 0.5)) / this.lineLength));\n        return this.lineHeight * lines;\n    }\n    heightForLine(length) {\n        if (!this.lineWrapping)\n            return this.lineHeight;\n        let lines = 1 + Math.max(0, Math.ceil((length - this.lineLength) / (this.lineLength - 5)));\n        return lines * this.lineHeight;\n    }\n    setDoc(doc) { this.doc = doc; return this; }\n    mustRefreshForWrapping(whiteSpace) {\n        return (wrappingWhiteSpace.indexOf(whiteSpace) > -1) != this.lineWrapping;\n    }\n    mustRefreshForHeights(lineHeights) {\n        let newHeight = false;\n        for (let i = 0; i < lineHeights.length; i++) {\n            let h = lineHeights[i];\n            if (h < 0) {\n                i++;\n            }\n            else if (!this.heightSamples[Math.floor(h * 10)]) { // Round to .1 pixels\n                newHeight = true;\n                this.heightSamples[Math.floor(h * 10)] = true;\n            }\n        }\n        return newHeight;\n    }\n    refresh(whiteSpace, lineHeight, charWidth, textHeight, lineLength, knownHeights) {\n        let lineWrapping = wrappingWhiteSpace.indexOf(whiteSpace) > -1;\n        let changed = Math.round(lineHeight) != Math.round(this.lineHeight) || this.lineWrapping != lineWrapping;\n        this.lineWrapping = lineWrapping;\n        this.lineHeight = lineHeight;\n        this.charWidth = charWidth;\n        this.textHeight = textHeight;\n        this.lineLength = lineLength;\n        if (changed) {\n            this.heightSamples = {};\n            for (let i = 0; i < knownHeights.length; i++) {\n                let h = knownHeights[i];\n                if (h < 0)\n                    i++;\n                else\n                    this.heightSamples[Math.floor(h * 10)] = true;\n            }\n        }\n        return changed;\n    }\n}\n// This object is used by `updateHeight` to make DOM measurements\n// arrive at the right nides. The `heights` array is a sequence of\n// block heights, starting from position `from`.\nclass MeasuredHeights {\n    constructor(from, heights) {\n        this.from = from;\n        this.heights = heights;\n        this.index = 0;\n    }\n    get more() { return this.index < this.heights.length; }\n}\n/**\nRecord used to represent information about a block-level element\nin the editor view.\n*/\nclass BlockInfo {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The start of the element in the document.\n    */\n    from, \n    /**\n    The length of the element.\n    */\n    length, \n    /**\n    The top position of the element (relative to the top of the\n    document).\n    */\n    top, \n    /**\n    Its height.\n    */\n    height, \n    /**\n    @internal Weird packed field that holds an array of children\n    for composite blocks, a decoration for block widgets, and a\n    number indicating the amount of widget-create line breaks for\n    text blocks.\n    */\n    _content) {\n        this.from = from;\n        this.length = length;\n        this.top = top;\n        this.height = height;\n        this._content = _content;\n    }\n    /**\n    The type of element this is. When querying lines, this may be\n    an array of all the blocks that make up the line.\n    */\n    get type() {\n        return typeof this._content == \"number\" ? exports.BlockType.Text :\n            Array.isArray(this._content) ? this._content : this._content.type;\n    }\n    /**\n    The end of the element as a document position.\n    */\n    get to() { return this.from + this.length; }\n    /**\n    The bottom position of the element.\n    */\n    get bottom() { return this.top + this.height; }\n    /**\n    If this is a widget block, this will return the widget\n    associated with it.\n    */\n    get widget() {\n        return this._content instanceof PointDecoration ? this._content.widget : null;\n    }\n    /**\n    If this is a textblock, this holds the number of line breaks\n    that appear in widgets inside the block.\n    */\n    get widgetLineBreaks() {\n        return typeof this._content == \"number\" ? this._content : 0;\n    }\n    /**\n    @internal\n    */\n    join(other) {\n        let content = (Array.isArray(this._content) ? this._content : [this])\n            .concat(Array.isArray(other._content) ? other._content : [other]);\n        return new BlockInfo(this.from, this.length + other.length, this.top, this.height + other.height, content);\n    }\n}\nvar QueryType;\n(function (QueryType) {\n    QueryType[QueryType[\"ByPos\"] = 0] = \"ByPos\";\n    QueryType[QueryType[\"ByHeight\"] = 1] = \"ByHeight\";\n    QueryType[QueryType[\"ByPosNoHeight\"] = 2] = \"ByPosNoHeight\";\n})(QueryType || (QueryType = {}));\nconst Epsilon = 1e-3;\nclass HeightMap {\n    constructor(length, // The number of characters covered\n    height, // Height of this part of the document\n    flags = 2 /* Flag.Outdated */) {\n        this.length = length;\n        this.height = height;\n        this.flags = flags;\n    }\n    get outdated() { return (this.flags & 2 /* Flag.Outdated */) > 0; }\n    set outdated(value) { this.flags = (value ? 2 /* Flag.Outdated */ : 0) | (this.flags & ~2 /* Flag.Outdated */); }\n    setHeight(height) {\n        if (this.height != height) {\n            if (Math.abs(this.height - height) > Epsilon)\n                heightChangeFlag = true;\n            this.height = height;\n        }\n    }\n    // Base case is to replace a leaf node, which simply builds a tree\n    // from the new nodes and returns that (HeightMapBranch and\n    // HeightMapGap override this to actually use from/to)\n    replace(_from, _to, nodes) {\n        return HeightMap.of(nodes);\n    }\n    // Again, these are base cases, and are overridden for branch and gap nodes.\n    decomposeLeft(_to, result) { result.push(this); }\n    decomposeRight(_from, result) { result.push(this); }\n    applyChanges(decorations, oldDoc, oracle, changes) {\n        let me = this, doc = oracle.doc;\n        for (let i = changes.length - 1; i >= 0; i--) {\n            let { fromA, toA, fromB, toB } = changes[i];\n            let start = me.lineAt(fromA, QueryType.ByPosNoHeight, oracle.setDoc(oldDoc), 0, 0);\n            let end = start.to >= toA ? start : me.lineAt(toA, QueryType.ByPosNoHeight, oracle, 0, 0);\n            toB += end.to - toA;\n            toA = end.to;\n            while (i > 0 && start.from <= changes[i - 1].toA) {\n                fromA = changes[i - 1].fromA;\n                fromB = changes[i - 1].fromB;\n                i--;\n                if (fromA < start.from)\n                    start = me.lineAt(fromA, QueryType.ByPosNoHeight, oracle, 0, 0);\n            }\n            fromB += start.from - fromA;\n            fromA = start.from;\n            let nodes = NodeBuilder.build(oracle.setDoc(doc), decorations, fromB, toB);\n            me = replace(me, me.replace(fromA, toA, nodes));\n        }\n        return me.updateHeight(oracle, 0);\n    }\n    static empty() { return new HeightMapText(0, 0); }\n    // nodes uses null values to indicate the position of line breaks.\n    // There are never line breaks at the start or end of the array, or\n    // two line breaks next to each other, and the array isn't allowed\n    // to be empty (same restrictions as return value from the builder).\n    static of(nodes) {\n        if (nodes.length == 1)\n            return nodes[0];\n        let i = 0, j = nodes.length, before = 0, after = 0;\n        for (;;) {\n            if (i == j) {\n                if (before > after * 2) {\n                    let split = nodes[i - 1];\n                    if (split.break)\n                        nodes.splice(--i, 1, split.left, null, split.right);\n                    else\n                        nodes.splice(--i, 1, split.left, split.right);\n                    j += 1 + split.break;\n                    before -= split.size;\n                }\n                else if (after > before * 2) {\n                    let split = nodes[j];\n                    if (split.break)\n                        nodes.splice(j, 1, split.left, null, split.right);\n                    else\n                        nodes.splice(j, 1, split.left, split.right);\n                    j += 2 + split.break;\n                    after -= split.size;\n                }\n                else {\n                    break;\n                }\n            }\n            else if (before < after) {\n                let next = nodes[i++];\n                if (next)\n                    before += next.size;\n            }\n            else {\n                let next = nodes[--j];\n                if (next)\n                    after += next.size;\n            }\n        }\n        let brk = 0;\n        if (nodes[i - 1] == null) {\n            brk = 1;\n            i--;\n        }\n        else if (nodes[i] == null) {\n            brk = 1;\n            j++;\n        }\n        return new HeightMapBranch(HeightMap.of(nodes.slice(0, i)), brk, HeightMap.of(nodes.slice(j)));\n    }\n}\nfunction replace(old, val) {\n    if (old == val)\n        return old;\n    if (old.constructor != val.constructor)\n        heightChangeFlag = true;\n    return val;\n}\nHeightMap.prototype.size = 1;\nclass HeightMapBlock extends HeightMap {\n    constructor(length, height, deco) {\n        super(length, height);\n        this.deco = deco;\n    }\n    blockAt(_height, _oracle, top, offset) {\n        return new BlockInfo(offset, this.length, top, this.height, this.deco || 0);\n    }\n    lineAt(_value, _type, oracle, top, offset) {\n        return this.blockAt(0, oracle, top, offset);\n    }\n    forEachLine(from, to, oracle, top, offset, f) {\n        if (from <= offset + this.length && to >= offset)\n            f(this.blockAt(0, oracle, top, offset));\n    }\n    updateHeight(oracle, offset = 0, _force = false, measured) {\n        if (measured && measured.from <= offset && measured.more)\n            this.setHeight(measured.heights[measured.index++]);\n        this.outdated = false;\n        return this;\n    }\n    toString() { return `block(${this.length})`; }\n}\nclass HeightMapText extends HeightMapBlock {\n    constructor(length, height) {\n        super(length, height, null);\n        this.collapsed = 0; // Amount of collapsed content in the line\n        this.widgetHeight = 0; // Maximum inline widget height\n        this.breaks = 0; // Number of widget-introduced line breaks on the line\n    }\n    blockAt(_height, _oracle, top, offset) {\n        return new BlockInfo(offset, this.length, top, this.height, this.breaks);\n    }\n    replace(_from, _to, nodes) {\n        let node = nodes[0];\n        if (nodes.length == 1 && (node instanceof HeightMapText || node instanceof HeightMapGap && (node.flags & 4 /* Flag.SingleLine */)) &&\n            Math.abs(this.length - node.length) < 10) {\n            if (node instanceof HeightMapGap)\n                node = new HeightMapText(node.length, this.height);\n            else\n                node.height = this.height;\n            if (!this.outdated)\n                node.outdated = false;\n            return node;\n        }\n        else {\n            return HeightMap.of(nodes);\n        }\n    }\n    updateHeight(oracle, offset = 0, force = false, measured) {\n        if (measured && measured.from <= offset && measured.more)\n            this.setHeight(measured.heights[measured.index++]);\n        else if (force || this.outdated)\n            this.setHeight(Math.max(this.widgetHeight, oracle.heightForLine(this.length - this.collapsed)) +\n                this.breaks * oracle.lineHeight);\n        this.outdated = false;\n        return this;\n    }\n    toString() {\n        return `line(${this.length}${this.collapsed ? -this.collapsed : \"\"}${this.widgetHeight ? \":\" + this.widgetHeight : \"\"})`;\n    }\n}\nclass HeightMapGap extends HeightMap {\n    constructor(length) { super(length, 0); }\n    heightMetrics(oracle, offset) {\n        let firstLine = oracle.doc.lineAt(offset).number, lastLine = oracle.doc.lineAt(offset + this.length).number;\n        let lines = lastLine - firstLine + 1;\n        let perLine, perChar = 0;\n        if (oracle.lineWrapping) {\n            let totalPerLine = Math.min(this.height, oracle.lineHeight * lines);\n            perLine = totalPerLine / lines;\n            if (this.length > lines + 1)\n                perChar = (this.height - totalPerLine) / (this.length - lines - 1);\n        }\n        else {\n            perLine = this.height / lines;\n        }\n        return { firstLine, lastLine, perLine, perChar };\n    }\n    blockAt(height, oracle, top, offset) {\n        let { firstLine, lastLine, perLine, perChar } = this.heightMetrics(oracle, offset);\n        if (oracle.lineWrapping) {\n            let guess = offset + (height < oracle.lineHeight ? 0\n                : Math.round(Math.max(0, Math.min(1, (height - top) / this.height)) * this.length));\n            let line = oracle.doc.lineAt(guess), lineHeight = perLine + line.length * perChar;\n            let lineTop = Math.max(top, height - lineHeight / 2);\n            return new BlockInfo(line.from, line.length, lineTop, lineHeight, 0);\n        }\n        else {\n            let line = Math.max(0, Math.min(lastLine - firstLine, Math.floor((height - top) / perLine)));\n            let { from, length } = oracle.doc.line(firstLine + line);\n            return new BlockInfo(from, length, top + perLine * line, perLine, 0);\n        }\n    }\n    lineAt(value, type, oracle, top, offset) {\n        if (type == QueryType.ByHeight)\n            return this.blockAt(value, oracle, top, offset);\n        if (type == QueryType.ByPosNoHeight) {\n            let { from, to } = oracle.doc.lineAt(value);\n            return new BlockInfo(from, to - from, 0, 0, 0);\n        }\n        let { firstLine, perLine, perChar } = this.heightMetrics(oracle, offset);\n        let line = oracle.doc.lineAt(value), lineHeight = perLine + line.length * perChar;\n        let linesAbove = line.number - firstLine;\n        let lineTop = top + perLine * linesAbove + perChar * (line.from - offset - linesAbove);\n        return new BlockInfo(line.from, line.length, Math.max(top, Math.min(lineTop, top + this.height - lineHeight)), lineHeight, 0);\n    }\n    forEachLine(from, to, oracle, top, offset, f) {\n        from = Math.max(from, offset);\n        to = Math.min(to, offset + this.length);\n        let { firstLine, perLine, perChar } = this.heightMetrics(oracle, offset);\n        for (let pos = from, lineTop = top; pos <= to;) {\n            let line = oracle.doc.lineAt(pos);\n            if (pos == from) {\n                let linesAbove = line.number - firstLine;\n                lineTop += perLine * linesAbove + perChar * (from - offset - linesAbove);\n            }\n            let lineHeight = perLine + perChar * line.length;\n            f(new BlockInfo(line.from, line.length, lineTop, lineHeight, 0));\n            lineTop += lineHeight;\n            pos = line.to + 1;\n        }\n    }\n    replace(from, to, nodes) {\n        let after = this.length - to;\n        if (after > 0) {\n            let last = nodes[nodes.length - 1];\n            if (last instanceof HeightMapGap)\n                nodes[nodes.length - 1] = new HeightMapGap(last.length + after);\n            else\n                nodes.push(null, new HeightMapGap(after - 1));\n        }\n        if (from > 0) {\n            let first = nodes[0];\n            if (first instanceof HeightMapGap)\n                nodes[0] = new HeightMapGap(from + first.length);\n            else\n                nodes.unshift(new HeightMapGap(from - 1), null);\n        }\n        return HeightMap.of(nodes);\n    }\n    decomposeLeft(to, result) {\n        result.push(new HeightMapGap(to - 1), null);\n    }\n    decomposeRight(from, result) {\n        result.push(null, new HeightMapGap(this.length - from - 1));\n    }\n    updateHeight(oracle, offset = 0, force = false, measured) {\n        let end = offset + this.length;\n        if (measured && measured.from <= offset + this.length && measured.more) {\n            // Fill in part of this gap with measured lines. We know there\n            // can't be widgets or collapsed ranges in those lines, because\n            // they would already have been added to the heightmap (gaps\n            // only contain plain text).\n            let nodes = [], pos = Math.max(offset, measured.from), singleHeight = -1;\n            if (measured.from > offset)\n                nodes.push(new HeightMapGap(measured.from - offset - 1).updateHeight(oracle, offset));\n            while (pos <= end && measured.more) {\n                let len = oracle.doc.lineAt(pos).length;\n                if (nodes.length)\n                    nodes.push(null);\n                let height = measured.heights[measured.index++];\n                if (singleHeight == -1)\n                    singleHeight = height;\n                else if (Math.abs(height - singleHeight) >= Epsilon)\n                    singleHeight = -2;\n                let line = new HeightMapText(len, height);\n                line.outdated = false;\n                nodes.push(line);\n                pos += len + 1;\n            }\n            if (pos <= end)\n                nodes.push(null, new HeightMapGap(end - pos).updateHeight(oracle, pos));\n            let result = HeightMap.of(nodes);\n            if (singleHeight < 0 || Math.abs(result.height - this.height) >= Epsilon ||\n                Math.abs(singleHeight - this.heightMetrics(oracle, offset).perLine) >= Epsilon)\n                heightChangeFlag = true;\n            return replace(this, result);\n        }\n        else if (force || this.outdated) {\n            this.setHeight(oracle.heightForGap(offset, offset + this.length));\n            this.outdated = false;\n        }\n        return this;\n    }\n    toString() { return `gap(${this.length})`; }\n}\nclass HeightMapBranch extends HeightMap {\n    constructor(left, brk, right) {\n        super(left.length + brk + right.length, left.height + right.height, brk | (left.outdated || right.outdated ? 2 /* Flag.Outdated */ : 0));\n        this.left = left;\n        this.right = right;\n        this.size = left.size + right.size;\n    }\n    get break() { return this.flags & 1 /* Flag.Break */; }\n    blockAt(height, oracle, top, offset) {\n        let mid = top + this.left.height;\n        return height < mid ? this.left.blockAt(height, oracle, top, offset)\n            : this.right.blockAt(height, oracle, mid, offset + this.left.length + this.break);\n    }\n    lineAt(value, type, oracle, top, offset) {\n        let rightTop = top + this.left.height, rightOffset = offset + this.left.length + this.break;\n        let left = type == QueryType.ByHeight ? value < rightTop : value < rightOffset;\n        let base = left ? this.left.lineAt(value, type, oracle, top, offset)\n            : this.right.lineAt(value, type, oracle, rightTop, rightOffset);\n        if (this.break || (left ? base.to < rightOffset : base.from > rightOffset))\n            return base;\n        let subQuery = type == QueryType.ByPosNoHeight ? QueryType.ByPosNoHeight : QueryType.ByPos;\n        if (left)\n            return base.join(this.right.lineAt(rightOffset, subQuery, oracle, rightTop, rightOffset));\n        else\n            return this.left.lineAt(rightOffset, subQuery, oracle, top, offset).join(base);\n    }\n    forEachLine(from, to, oracle, top, offset, f) {\n        let rightTop = top + this.left.height, rightOffset = offset + this.left.length + this.break;\n        if (this.break) {\n            if (from < rightOffset)\n                this.left.forEachLine(from, to, oracle, top, offset, f);\n            if (to >= rightOffset)\n                this.right.forEachLine(from, to, oracle, rightTop, rightOffset, f);\n        }\n        else {\n            let mid = this.lineAt(rightOffset, QueryType.ByPos, oracle, top, offset);\n            if (from < mid.from)\n                this.left.forEachLine(from, mid.from - 1, oracle, top, offset, f);\n            if (mid.to >= from && mid.from <= to)\n                f(mid);\n            if (to > mid.to)\n                this.right.forEachLine(mid.to + 1, to, oracle, rightTop, rightOffset, f);\n        }\n    }\n    replace(from, to, nodes) {\n        let rightStart = this.left.length + this.break;\n        if (to < rightStart)\n            return this.balanced(this.left.replace(from, to, nodes), this.right);\n        if (from > this.left.length)\n            return this.balanced(this.left, this.right.replace(from - rightStart, to - rightStart, nodes));\n        let result = [];\n        if (from > 0)\n            this.decomposeLeft(from, result);\n        let left = result.length;\n        for (let node of nodes)\n            result.push(node);\n        if (from > 0)\n            mergeGaps(result, left - 1);\n        if (to < this.length) {\n            let right = result.length;\n            this.decomposeRight(to, result);\n            mergeGaps(result, right);\n        }\n        return HeightMap.of(result);\n    }\n    decomposeLeft(to, result) {\n        let left = this.left.length;\n        if (to <= left)\n            return this.left.decomposeLeft(to, result);\n        result.push(this.left);\n        if (this.break) {\n            left++;\n            if (to >= left)\n                result.push(null);\n        }\n        if (to > left)\n            this.right.decomposeLeft(to - left, result);\n    }\n    decomposeRight(from, result) {\n        let left = this.left.length, right = left + this.break;\n        if (from >= right)\n            return this.right.decomposeRight(from - right, result);\n        if (from < left)\n            this.left.decomposeRight(from, result);\n        if (this.break && from < right)\n            result.push(null);\n        result.push(this.right);\n    }\n    balanced(left, right) {\n        if (left.size > 2 * right.size || right.size > 2 * left.size)\n            return HeightMap.of(this.break ? [left, null, right] : [left, right]);\n        this.left = replace(this.left, left);\n        this.right = replace(this.right, right);\n        this.setHeight(left.height + right.height);\n        this.outdated = left.outdated || right.outdated;\n        this.size = left.size + right.size;\n        this.length = left.length + this.break + right.length;\n        return this;\n    }\n    updateHeight(oracle, offset = 0, force = false, measured) {\n        let { left, right } = this, rightStart = offset + left.length + this.break, rebalance = null;\n        if (measured && measured.from <= offset + left.length && measured.more)\n            rebalance = left = left.updateHeight(oracle, offset, force, measured);\n        else\n            left.updateHeight(oracle, offset, force);\n        if (measured && measured.from <= rightStart + right.length && measured.more)\n            rebalance = right = right.updateHeight(oracle, rightStart, force, measured);\n        else\n            right.updateHeight(oracle, rightStart, force);\n        if (rebalance)\n            return this.balanced(left, right);\n        this.height = this.left.height + this.right.height;\n        this.outdated = false;\n        return this;\n    }\n    toString() { return this.left + (this.break ? \" \" : \"-\") + this.right; }\n}\nfunction mergeGaps(nodes, around) {\n    let before, after;\n    if (nodes[around] == null &&\n        (before = nodes[around - 1]) instanceof HeightMapGap &&\n        (after = nodes[around + 1]) instanceof HeightMapGap)\n        nodes.splice(around - 1, 3, new HeightMapGap(before.length + 1 + after.length));\n}\nconst relevantWidgetHeight = 5;\nclass NodeBuilder {\n    constructor(pos, oracle) {\n        this.pos = pos;\n        this.oracle = oracle;\n        this.nodes = [];\n        this.lineStart = -1;\n        this.lineEnd = -1;\n        this.covering = null;\n        this.writtenTo = pos;\n    }\n    get isCovered() {\n        return this.covering && this.nodes[this.nodes.length - 1] == this.covering;\n    }\n    span(_from, to) {\n        if (this.lineStart > -1) {\n            let end = Math.min(to, this.lineEnd), last = this.nodes[this.nodes.length - 1];\n            if (last instanceof HeightMapText)\n                last.length += end - this.pos;\n            else if (end > this.pos || !this.isCovered)\n                this.nodes.push(new HeightMapText(end - this.pos, -1));\n            this.writtenTo = end;\n            if (to > end) {\n                this.nodes.push(null);\n                this.writtenTo++;\n                this.lineStart = -1;\n            }\n        }\n        this.pos = to;\n    }\n    point(from, to, deco) {\n        if (from < to || deco.heightRelevant) {\n            let height = deco.widget ? deco.widget.estimatedHeight : 0;\n            let breaks = deco.widget ? deco.widget.lineBreaks : 0;\n            if (height < 0)\n                height = this.oracle.lineHeight;\n            let len = to - from;\n            if (deco.block) {\n                this.addBlock(new HeightMapBlock(len, height, deco));\n            }\n            else if (len || breaks || height >= relevantWidgetHeight) {\n                this.addLineDeco(height, breaks, len);\n            }\n        }\n        else if (to > from) {\n            this.span(from, to);\n        }\n        if (this.lineEnd > -1 && this.lineEnd < this.pos)\n            this.lineEnd = this.oracle.doc.lineAt(this.pos).to;\n    }\n    enterLine() {\n        if (this.lineStart > -1)\n            return;\n        let { from, to } = this.oracle.doc.lineAt(this.pos);\n        this.lineStart = from;\n        this.lineEnd = to;\n        if (this.writtenTo < from) {\n            if (this.writtenTo < from - 1 || this.nodes[this.nodes.length - 1] == null)\n                this.nodes.push(this.blankContent(this.writtenTo, from - 1));\n            this.nodes.push(null);\n        }\n        if (this.pos > from)\n            this.nodes.push(new HeightMapText(this.pos - from, -1));\n        this.writtenTo = this.pos;\n    }\n    blankContent(from, to) {\n        let gap = new HeightMapGap(to - from);\n        if (this.oracle.doc.lineAt(from).to == to)\n            gap.flags |= 4 /* Flag.SingleLine */;\n        return gap;\n    }\n    ensureLine() {\n        this.enterLine();\n        let last = this.nodes.length ? this.nodes[this.nodes.length - 1] : null;\n        if (last instanceof HeightMapText)\n            return last;\n        let line = new HeightMapText(0, -1);\n        this.nodes.push(line);\n        return line;\n    }\n    addBlock(block) {\n        this.enterLine();\n        let deco = block.deco;\n        if (deco && deco.startSide > 0 && !this.isCovered)\n            this.ensureLine();\n        this.nodes.push(block);\n        this.writtenTo = this.pos = this.pos + block.length;\n        if (deco && deco.endSide > 0)\n            this.covering = block;\n    }\n    addLineDeco(height, breaks, length) {\n        let line = this.ensureLine();\n        line.length += length;\n        line.collapsed += length;\n        line.widgetHeight = Math.max(line.widgetHeight, height);\n        line.breaks += breaks;\n        this.writtenTo = this.pos = this.pos + length;\n    }\n    finish(from) {\n        let last = this.nodes.length == 0 ? null : this.nodes[this.nodes.length - 1];\n        if (this.lineStart > -1 && !(last instanceof HeightMapText) && !this.isCovered)\n            this.nodes.push(new HeightMapText(0, -1));\n        else if (this.writtenTo < this.pos || last == null)\n            this.nodes.push(this.blankContent(this.writtenTo, this.pos));\n        let pos = from;\n        for (let node of this.nodes) {\n            if (node instanceof HeightMapText)\n                node.updateHeight(this.oracle, pos);\n            pos += node ? node.length : 1;\n        }\n        return this.nodes;\n    }\n    // Always called with a region that on both sides either stretches\n    // to a line break or the end of the document.\n    // The returned array uses null to indicate line breaks, but never\n    // starts or ends in a line break, or has multiple line breaks next\n    // to each other.\n    static build(oracle, decorations, from, to) {\n        let builder = new NodeBuilder(from, oracle);\n        state.RangeSet.spans(decorations, from, to, builder, 0);\n        return builder.finish(from);\n    }\n}\nfunction heightRelevantDecoChanges(a, b, diff) {\n    let comp = new DecorationComparator;\n    state.RangeSet.compare(a, b, diff, comp, 0);\n    return comp.changes;\n}\nclass DecorationComparator {\n    constructor() {\n        this.changes = [];\n    }\n    compareRange() { }\n    comparePoint(from, to, a, b) {\n        if (from < to || a && a.heightRelevant || b && b.heightRelevant)\n            addRange(from, to, this.changes, 5);\n    }\n}\n\nfunction visiblePixelRange(dom, paddingTop) {\n    let rect = dom.getBoundingClientRect();\n    let doc = dom.ownerDocument, win = doc.defaultView || window;\n    let left = Math.max(0, rect.left), right = Math.min(win.innerWidth, rect.right);\n    let top = Math.max(0, rect.top), bottom = Math.min(win.innerHeight, rect.bottom);\n    for (let parent = dom.parentNode; parent && parent != doc.body;) {\n        if (parent.nodeType == 1) {\n            let elt = parent;\n            let style = window.getComputedStyle(elt);\n            if ((elt.scrollHeight > elt.clientHeight || elt.scrollWidth > elt.clientWidth) &&\n                style.overflow != \"visible\") {\n                let parentRect = elt.getBoundingClientRect();\n                left = Math.max(left, parentRect.left);\n                right = Math.min(right, parentRect.right);\n                top = Math.max(top, parentRect.top);\n                bottom = Math.min(parent == dom.parentNode ? win.innerHeight : bottom, parentRect.bottom);\n            }\n            parent = style.position == \"absolute\" || style.position == \"fixed\" ? elt.offsetParent : elt.parentNode;\n        }\n        else if (parent.nodeType == 11) { // Shadow root\n            parent = parent.host;\n        }\n        else {\n            break;\n        }\n    }\n    return { left: left - rect.left, right: Math.max(left, right) - rect.left,\n        top: top - (rect.top + paddingTop), bottom: Math.max(top, bottom) - (rect.top + paddingTop) };\n}\nfunction fullPixelRange(dom, paddingTop) {\n    let rect = dom.getBoundingClientRect();\n    return { left: 0, right: rect.right - rect.left,\n        top: paddingTop, bottom: rect.bottom - (rect.top + paddingTop) };\n}\n// Line gaps are placeholder widgets used to hide pieces of overlong\n// lines within the viewport, as a kludge to keep the editor\n// responsive when a ridiculously long line is loaded into it.\nclass LineGap {\n    constructor(from, to, size, displaySize) {\n        this.from = from;\n        this.to = to;\n        this.size = size;\n        this.displaySize = displaySize;\n    }\n    static same(a, b) {\n        if (a.length != b.length)\n            return false;\n        for (let i = 0; i < a.length; i++) {\n            let gA = a[i], gB = b[i];\n            if (gA.from != gB.from || gA.to != gB.to || gA.size != gB.size)\n                return false;\n        }\n        return true;\n    }\n    draw(viewState, wrapping) {\n        return Decoration.replace({\n            widget: new LineGapWidget(this.displaySize * (wrapping ? viewState.scaleY : viewState.scaleX), wrapping)\n        }).range(this.from, this.to);\n    }\n}\nclass LineGapWidget extends WidgetType {\n    constructor(size, vertical) {\n        super();\n        this.size = size;\n        this.vertical = vertical;\n    }\n    eq(other) { return other.size == this.size && other.vertical == this.vertical; }\n    toDOM() {\n        let elt = document.createElement(\"div\");\n        if (this.vertical) {\n            elt.style.height = this.size + \"px\";\n        }\n        else {\n            elt.style.width = this.size + \"px\";\n            elt.style.height = \"2px\";\n            elt.style.display = \"inline-block\";\n        }\n        return elt;\n    }\n    get estimatedHeight() { return this.vertical ? this.size : -1; }\n}\nclass ViewState {\n    constructor(state$1) {\n        this.state = state$1;\n        // These are contentDOM-local coordinates\n        this.pixelViewport = { left: 0, right: window.innerWidth, top: 0, bottom: 0 };\n        this.inView = true;\n        this.paddingTop = 0; // Padding above the document, scaled\n        this.paddingBottom = 0; // Padding below the document, scaled\n        this.contentDOMWidth = 0; // contentDOM.getBoundingClientRect().width\n        this.contentDOMHeight = 0; // contentDOM.getBoundingClientRect().height\n        this.editorHeight = 0; // scrollDOM.clientHeight, unscaled\n        this.editorWidth = 0; // scrollDOM.clientWidth, unscaled\n        this.scrollTop = 0; // Last seen scrollDOM.scrollTop, scaled\n        this.scrolledToBottom = false;\n        // The CSS-transformation scale of the editor (transformed size /\n        // concrete size)\n        this.scaleX = 1;\n        this.scaleY = 1;\n        // The vertical position (document-relative) to which to anchor the\n        // scroll position. -1 means anchor to the end of the document.\n        this.scrollAnchorPos = 0;\n        // The height at the anchor position. Set by the DOM update phase.\n        // -1 means no height available.\n        this.scrollAnchorHeight = -1;\n        // See VP.MaxDOMHeight\n        this.scaler = IdScaler;\n        this.scrollTarget = null;\n        // Briefly set to true when printing, to disable viewport limiting\n        this.printing = false;\n        // Flag set when editor content was redrawn, so that the next\n        // measure stage knows it must read DOM layout\n        this.mustMeasureContent = true;\n        this.defaultTextDirection = exports.Direction.LTR;\n        this.visibleRanges = [];\n        // Cursor 'assoc' is only significant when the cursor is on a line\n        // wrap point, where it must stick to the character that it is\n        // associated with. Since browsers don't provide a reasonable\n        // interface to set or query this, when a selection is set that\n        // might cause this to be significant, this flag is set. The next\n        // measure phase will check whether the cursor is on a line-wrapping\n        // boundary and, if so, reset it to make sure it is positioned in\n        // the right place.\n        this.mustEnforceCursorAssoc = false;\n        let guessWrapping = state$1.facet(contentAttributes).some(v => typeof v != \"function\" && v.class == \"cm-lineWrapping\");\n        this.heightOracle = new HeightOracle(guessWrapping);\n        this.stateDeco = state$1.facet(decorations).filter(d => typeof d != \"function\");\n        this.heightMap = HeightMap.empty().applyChanges(this.stateDeco, state.Text.empty, this.heightOracle.setDoc(state$1.doc), [new ChangedRange(0, 0, 0, state$1.doc.length)]);\n        for (let i = 0; i < 2; i++) {\n            this.viewport = this.getViewport(0, null);\n            if (!this.updateForViewport())\n                break;\n        }\n        this.updateViewportLines();\n        this.lineGaps = this.ensureLineGaps([]);\n        this.lineGapDeco = Decoration.set(this.lineGaps.map(gap => gap.draw(this, false)));\n        this.computeVisibleRanges();\n    }\n    updateForViewport() {\n        let viewports = [this.viewport], { main } = this.state.selection;\n        for (let i = 0; i <= 1; i++) {\n            let pos = i ? main.head : main.anchor;\n            if (!viewports.some(({ from, to }) => pos >= from && pos <= to)) {\n                let { from, to } = this.lineBlockAt(pos);\n                viewports.push(new Viewport(from, to));\n            }\n        }\n        this.viewports = viewports.sort((a, b) => a.from - b.from);\n        return this.updateScaler();\n    }\n    updateScaler() {\n        let scaler = this.scaler;\n        this.scaler = this.heightMap.height <= 7000000 /* VP.MaxDOMHeight */ ? IdScaler :\n            new BigScaler(this.heightOracle, this.heightMap, this.viewports);\n        return scaler.eq(this.scaler) ? 0 : 2 /* UpdateFlag.Height */;\n    }\n    updateViewportLines() {\n        this.viewportLines = [];\n        this.heightMap.forEachLine(this.viewport.from, this.viewport.to, this.heightOracle.setDoc(this.state.doc), 0, 0, block => {\n            this.viewportLines.push(scaleBlock(block, this.scaler));\n        });\n    }\n    update(update, scrollTarget = null) {\n        this.state = update.state;\n        let prevDeco = this.stateDeco;\n        this.stateDeco = this.state.facet(decorations).filter(d => typeof d != \"function\");\n        let contentChanges = update.changedRanges;\n        let heightChanges = ChangedRange.extendWithRanges(contentChanges, heightRelevantDecoChanges(prevDeco, this.stateDeco, update ? update.changes : state.ChangeSet.empty(this.state.doc.length)));\n        let prevHeight = this.heightMap.height;\n        let scrollAnchor = this.scrolledToBottom ? null : this.scrollAnchorAt(this.scrollTop);\n        clearHeightChangeFlag();\n        this.heightMap = this.heightMap.applyChanges(this.stateDeco, update.startState.doc, this.heightOracle.setDoc(this.state.doc), heightChanges);\n        if (this.heightMap.height != prevHeight || heightChangeFlag)\n            update.flags |= 2 /* UpdateFlag.Height */;\n        if (scrollAnchor) {\n            this.scrollAnchorPos = update.changes.mapPos(scrollAnchor.from, -1);\n            this.scrollAnchorHeight = scrollAnchor.top;\n        }\n        else {\n            this.scrollAnchorPos = -1;\n            this.scrollAnchorHeight = this.heightMap.height;\n        }\n        let viewport = heightChanges.length ? this.mapViewport(this.viewport, update.changes) : this.viewport;\n        if (scrollTarget && (scrollTarget.range.head < viewport.from || scrollTarget.range.head > viewport.to) ||\n            !this.viewportIsAppropriate(viewport))\n            viewport = this.getViewport(0, scrollTarget);\n        let viewportChange = viewport.from != this.viewport.from || viewport.to != this.viewport.to;\n        this.viewport = viewport;\n        update.flags |= this.updateForViewport();\n        if (viewportChange || !update.changes.empty || (update.flags & 2 /* UpdateFlag.Height */))\n            this.updateViewportLines();\n        if (this.lineGaps.length || this.viewport.to - this.viewport.from > (2000 /* LG.Margin */ << 1))\n            this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps, update.changes)));\n        update.flags |= this.computeVisibleRanges();\n        if (scrollTarget)\n            this.scrollTarget = scrollTarget;\n        if (!this.mustEnforceCursorAssoc && update.selectionSet && update.view.lineWrapping &&\n            update.state.selection.main.empty && update.state.selection.main.assoc &&\n            !update.state.facet(nativeSelectionHidden))\n            this.mustEnforceCursorAssoc = true;\n    }\n    measure(view) {\n        let dom = view.contentDOM, style = window.getComputedStyle(dom);\n        let oracle = this.heightOracle;\n        let whiteSpace = style.whiteSpace;\n        this.defaultTextDirection = style.direction == \"rtl\" ? exports.Direction.RTL : exports.Direction.LTR;\n        let refresh = this.heightOracle.mustRefreshForWrapping(whiteSpace);\n        let domRect = dom.getBoundingClientRect();\n        let measureContent = refresh || this.mustMeasureContent || this.contentDOMHeight != domRect.height;\n        this.contentDOMHeight = domRect.height;\n        this.mustMeasureContent = false;\n        let result = 0, bias = 0;\n        if (domRect.width && domRect.height) {\n            let { scaleX, scaleY } = getScale(dom, domRect);\n            if (scaleX > .005 && Math.abs(this.scaleX - scaleX) > .005 ||\n                scaleY > .005 && Math.abs(this.scaleY - scaleY) > .005) {\n                this.scaleX = scaleX;\n                this.scaleY = scaleY;\n                result |= 8 /* UpdateFlag.Geometry */;\n                refresh = measureContent = true;\n            }\n        }\n        // Vertical padding\n        let paddingTop = (parseInt(style.paddingTop) || 0) * this.scaleY;\n        let paddingBottom = (parseInt(style.paddingBottom) || 0) * this.scaleY;\n        if (this.paddingTop != paddingTop || this.paddingBottom != paddingBottom) {\n            this.paddingTop = paddingTop;\n            this.paddingBottom = paddingBottom;\n            result |= 8 /* UpdateFlag.Geometry */ | 2 /* UpdateFlag.Height */;\n        }\n        if (this.editorWidth != view.scrollDOM.clientWidth) {\n            if (oracle.lineWrapping)\n                measureContent = true;\n            this.editorWidth = view.scrollDOM.clientWidth;\n            result |= 8 /* UpdateFlag.Geometry */;\n        }\n        let scrollTop = view.scrollDOM.scrollTop * this.scaleY;\n        if (this.scrollTop != scrollTop) {\n            this.scrollAnchorHeight = -1;\n            this.scrollTop = scrollTop;\n        }\n        this.scrolledToBottom = isScrolledToBottom(view.scrollDOM);\n        // Pixel viewport\n        let pixelViewport = (this.printing ? fullPixelRange : visiblePixelRange)(dom, this.paddingTop);\n        let dTop = pixelViewport.top - this.pixelViewport.top, dBottom = pixelViewport.bottom - this.pixelViewport.bottom;\n        this.pixelViewport = pixelViewport;\n        let inView = this.pixelViewport.bottom > this.pixelViewport.top && this.pixelViewport.right > this.pixelViewport.left;\n        if (inView != this.inView) {\n            this.inView = inView;\n            if (inView)\n                measureContent = true;\n        }\n        if (!this.inView && !this.scrollTarget)\n            return 0;\n        let contentWidth = domRect.width;\n        if (this.contentDOMWidth != contentWidth || this.editorHeight != view.scrollDOM.clientHeight) {\n            this.contentDOMWidth = domRect.width;\n            this.editorHeight = view.scrollDOM.clientHeight;\n            result |= 8 /* UpdateFlag.Geometry */;\n        }\n        if (measureContent) {\n            let lineHeights = view.docView.measureVisibleLineHeights(this.viewport);\n            if (oracle.mustRefreshForHeights(lineHeights))\n                refresh = true;\n            if (refresh || oracle.lineWrapping && Math.abs(contentWidth - this.contentDOMWidth) > oracle.charWidth) {\n                let { lineHeight, charWidth, textHeight } = view.docView.measureTextSize();\n                refresh = lineHeight > 0 && oracle.refresh(whiteSpace, lineHeight, charWidth, textHeight, contentWidth / charWidth, lineHeights);\n                if (refresh) {\n                    view.docView.minWidth = 0;\n                    result |= 8 /* UpdateFlag.Geometry */;\n                }\n            }\n            if (dTop > 0 && dBottom > 0)\n                bias = Math.max(dTop, dBottom);\n            else if (dTop < 0 && dBottom < 0)\n                bias = Math.min(dTop, dBottom);\n            clearHeightChangeFlag();\n            for (let vp of this.viewports) {\n                let heights = vp.from == this.viewport.from ? lineHeights : view.docView.measureVisibleLineHeights(vp);\n                this.heightMap = (refresh ? HeightMap.empty().applyChanges(this.stateDeco, state.Text.empty, this.heightOracle, [new ChangedRange(0, 0, 0, view.state.doc.length)]) : this.heightMap).updateHeight(oracle, 0, refresh, new MeasuredHeights(vp.from, heights));\n            }\n            if (heightChangeFlag)\n                result |= 2 /* UpdateFlag.Height */;\n        }\n        let viewportChange = !this.viewportIsAppropriate(this.viewport, bias) ||\n            this.scrollTarget && (this.scrollTarget.range.head < this.viewport.from ||\n                this.scrollTarget.range.head > this.viewport.to);\n        if (viewportChange) {\n            if (result & 2 /* UpdateFlag.Height */)\n                result |= this.updateScaler();\n            this.viewport = this.getViewport(bias, this.scrollTarget);\n            result |= this.updateForViewport();\n        }\n        if ((result & 2 /* UpdateFlag.Height */) || viewportChange)\n            this.updateViewportLines();\n        if (this.lineGaps.length || this.viewport.to - this.viewport.from > (2000 /* LG.Margin */ << 1))\n            this.updateLineGaps(this.ensureLineGaps(refresh ? [] : this.lineGaps, view));\n        result |= this.computeVisibleRanges();\n        if (this.mustEnforceCursorAssoc) {\n            this.mustEnforceCursorAssoc = false;\n            // This is done in the read stage, because moving the selection\n            // to a line end is going to trigger a layout anyway, so it\n            // can't be a pure write. It should be rare that it does any\n            // writing.\n            view.docView.enforceCursorAssoc();\n        }\n        return result;\n    }\n    get visibleTop() { return this.scaler.fromDOM(this.pixelViewport.top); }\n    get visibleBottom() { return this.scaler.fromDOM(this.pixelViewport.bottom); }\n    getViewport(bias, scrollTarget) {\n        // This will divide VP.Margin between the top and the\n        // bottom, depending on the bias (the change in viewport position\n        // since the last update). It'll hold a number between 0 and 1\n        let marginTop = 0.5 - Math.max(-0.5, Math.min(0.5, bias / 1000 /* VP.Margin */ / 2));\n        let map = this.heightMap, oracle = this.heightOracle;\n        let { visibleTop, visibleBottom } = this;\n        let viewport = new Viewport(map.lineAt(visibleTop - marginTop * 1000 /* VP.Margin */, QueryType.ByHeight, oracle, 0, 0).from, map.lineAt(visibleBottom + (1 - marginTop) * 1000 /* VP.Margin */, QueryType.ByHeight, oracle, 0, 0).to);\n        // If scrollTarget is given, make sure the viewport includes that position\n        if (scrollTarget) {\n            let { head } = scrollTarget.range;\n            if (head < viewport.from || head > viewport.to) {\n                let viewHeight = Math.min(this.editorHeight, this.pixelViewport.bottom - this.pixelViewport.top);\n                let block = map.lineAt(head, QueryType.ByPos, oracle, 0, 0), topPos;\n                if (scrollTarget.y == \"center\")\n                    topPos = (block.top + block.bottom) / 2 - viewHeight / 2;\n                else if (scrollTarget.y == \"start\" || scrollTarget.y == \"nearest\" && head < viewport.from)\n                    topPos = block.top;\n                else\n                    topPos = block.bottom - viewHeight;\n                viewport = new Viewport(map.lineAt(topPos - 1000 /* VP.Margin */ / 2, QueryType.ByHeight, oracle, 0, 0).from, map.lineAt(topPos + viewHeight + 1000 /* VP.Margin */ / 2, QueryType.ByHeight, oracle, 0, 0).to);\n            }\n        }\n        return viewport;\n    }\n    mapViewport(viewport, changes) {\n        let from = changes.mapPos(viewport.from, -1), to = changes.mapPos(viewport.to, 1);\n        return new Viewport(this.heightMap.lineAt(from, QueryType.ByPos, this.heightOracle, 0, 0).from, this.heightMap.lineAt(to, QueryType.ByPos, this.heightOracle, 0, 0).to);\n    }\n    // Checks if a given viewport covers the visible part of the\n    // document and not too much beyond that.\n    viewportIsAppropriate({ from, to }, bias = 0) {\n        if (!this.inView)\n            return true;\n        let { top } = this.heightMap.lineAt(from, QueryType.ByPos, this.heightOracle, 0, 0);\n        let { bottom } = this.heightMap.lineAt(to, QueryType.ByPos, this.heightOracle, 0, 0);\n        let { visibleTop, visibleBottom } = this;\n        return (from == 0 || top <= visibleTop - Math.max(10 /* VP.MinCoverMargin */, Math.min(-bias, 250 /* VP.MaxCoverMargin */))) &&\n            (to == this.state.doc.length ||\n                bottom >= visibleBottom + Math.max(10 /* VP.MinCoverMargin */, Math.min(bias, 250 /* VP.MaxCoverMargin */))) &&\n            (top > visibleTop - 2 * 1000 /* VP.Margin */ && bottom < visibleBottom + 2 * 1000 /* VP.Margin */);\n    }\n    mapLineGaps(gaps, changes) {\n        if (!gaps.length || changes.empty)\n            return gaps;\n        let mapped = [];\n        for (let gap of gaps)\n            if (!changes.touchesRange(gap.from, gap.to))\n                mapped.push(new LineGap(changes.mapPos(gap.from), changes.mapPos(gap.to), gap.size, gap.displaySize));\n        return mapped;\n    }\n    // Computes positions in the viewport where the start or end of a\n    // line should be hidden, trying to reuse existing line gaps when\n    // appropriate to avoid unneccesary redraws.\n    // Uses crude character-counting for the positioning and sizing,\n    // since actual DOM coordinates aren't always available and\n    // predictable. Relies on generous margins (see LG.Margin) to hide\n    // the artifacts this might produce from the user.\n    ensureLineGaps(current, mayMeasure) {\n        let wrapping = this.heightOracle.lineWrapping;\n        let margin = wrapping ? 10000 /* LG.MarginWrap */ : 2000 /* LG.Margin */, halfMargin = margin >> 1, doubleMargin = margin << 1;\n        // The non-wrapping logic won't work at all in predominantly right-to-left text.\n        if (this.defaultTextDirection != exports.Direction.LTR && !wrapping)\n            return [];\n        let gaps = [];\n        let addGap = (from, to, line, structure) => {\n            if (to - from < halfMargin)\n                return;\n            let sel = this.state.selection.main, avoid = [sel.from];\n            if (!sel.empty)\n                avoid.push(sel.to);\n            for (let pos of avoid) {\n                if (pos > from && pos < to) {\n                    addGap(from, pos - 10 /* LG.SelectionMargin */, line, structure);\n                    addGap(pos + 10 /* LG.SelectionMargin */, to, line, structure);\n                    return;\n                }\n            }\n            let gap = find(current, gap => gap.from >= line.from && gap.to <= line.to &&\n                Math.abs(gap.from - from) < halfMargin && Math.abs(gap.to - to) < halfMargin &&\n                !avoid.some(pos => gap.from < pos && gap.to > pos));\n            if (!gap) {\n                // When scrolling down, snap gap ends to line starts to avoid shifts in wrapping\n                if (to < line.to && mayMeasure && wrapping &&\n                    mayMeasure.visibleRanges.some(r => r.from <= to && r.to >= to)) {\n                    let lineStart = mayMeasure.moveToLineBoundary(state.EditorSelection.cursor(to), false, true).head;\n                    if (lineStart > from)\n                        to = lineStart;\n                }\n                let size = this.gapSize(line, from, to, structure);\n                let displaySize = wrapping || size < 2000000 /* VP.MaxHorizGap */ ? size : 2000000 /* VP.MaxHorizGap */;\n                gap = new LineGap(from, to, size, displaySize);\n            }\n            gaps.push(gap);\n        };\n        let checkLine = (line) => {\n            if (line.length < doubleMargin || line.type != exports.BlockType.Text)\n                return;\n            let structure = lineStructure(line.from, line.to, this.stateDeco);\n            if (structure.total < doubleMargin)\n                return;\n            let target = this.scrollTarget ? this.scrollTarget.range.head : null;\n            let viewFrom, viewTo;\n            if (wrapping) {\n                let marginHeight = (margin / this.heightOracle.lineLength) * this.heightOracle.lineHeight;\n                let top, bot;\n                if (target != null) {\n                    let targetFrac = findFraction(structure, target);\n                    let spaceFrac = ((this.visibleBottom - this.visibleTop) / 2 + marginHeight) / line.height;\n                    top = targetFrac - spaceFrac;\n                    bot = targetFrac + spaceFrac;\n                }\n                else {\n                    top = (this.visibleTop - line.top - marginHeight) / line.height;\n                    bot = (this.visibleBottom - line.top + marginHeight) / line.height;\n                }\n                viewFrom = findPosition(structure, top);\n                viewTo = findPosition(structure, bot);\n            }\n            else {\n                let totalWidth = structure.total * this.heightOracle.charWidth;\n                let marginWidth = margin * this.heightOracle.charWidth;\n                let horizOffset = 0;\n                if (totalWidth > 2000000 /* VP.MaxHorizGap */)\n                    for (let old of current) {\n                        if (old.from >= line.from && old.from < line.to && old.size != old.displaySize &&\n                            old.from * this.heightOracle.charWidth + horizOffset < this.pixelViewport.left)\n                            horizOffset = old.size - old.displaySize;\n                    }\n                let pxLeft = this.pixelViewport.left + horizOffset, pxRight = this.pixelViewport.right + horizOffset;\n                let left, right;\n                if (target != null) {\n                    let targetFrac = findFraction(structure, target);\n                    let spaceFrac = ((pxRight - pxLeft) / 2 + marginWidth) / totalWidth;\n                    left = targetFrac - spaceFrac;\n                    right = targetFrac + spaceFrac;\n                }\n                else {\n                    left = (pxLeft - marginWidth) / totalWidth;\n                    right = (pxRight + marginWidth) / totalWidth;\n                }\n                viewFrom = findPosition(structure, left);\n                viewTo = findPosition(structure, right);\n            }\n            if (viewFrom > line.from)\n                addGap(line.from, viewFrom, line, structure);\n            if (viewTo < line.to)\n                addGap(viewTo, line.to, line, structure);\n        };\n        for (let line of this.viewportLines) {\n            if (Array.isArray(line.type))\n                line.type.forEach(checkLine);\n            else\n                checkLine(line);\n        }\n        return gaps;\n    }\n    gapSize(line, from, to, structure) {\n        let fraction = findFraction(structure, to) - findFraction(structure, from);\n        if (this.heightOracle.lineWrapping) {\n            return line.height * fraction;\n        }\n        else {\n            return structure.total * this.heightOracle.charWidth * fraction;\n        }\n    }\n    updateLineGaps(gaps) {\n        if (!LineGap.same(gaps, this.lineGaps)) {\n            this.lineGaps = gaps;\n            this.lineGapDeco = Decoration.set(gaps.map(gap => gap.draw(this, this.heightOracle.lineWrapping)));\n        }\n    }\n    computeVisibleRanges() {\n        let deco = this.stateDeco;\n        if (this.lineGaps.length)\n            deco = deco.concat(this.lineGapDeco);\n        let ranges = [];\n        state.RangeSet.spans(deco, this.viewport.from, this.viewport.to, {\n            span(from, to) { ranges.push({ from, to }); },\n            point() { }\n        }, 20);\n        let changed = ranges.length != this.visibleRanges.length ||\n            this.visibleRanges.some((r, i) => r.from != ranges[i].from || r.to != ranges[i].to);\n        this.visibleRanges = ranges;\n        return changed ? 4 /* UpdateFlag.Viewport */ : 0;\n    }\n    lineBlockAt(pos) {\n        return (pos >= this.viewport.from && pos <= this.viewport.to &&\n            this.viewportLines.find(b => b.from <= pos && b.to >= pos)) ||\n            scaleBlock(this.heightMap.lineAt(pos, QueryType.ByPos, this.heightOracle, 0, 0), this.scaler);\n    }\n    lineBlockAtHeight(height) {\n        return (height >= this.viewportLines[0].top && height <= this.viewportLines[this.viewportLines.length - 1].bottom &&\n            this.viewportLines.find(l => l.top <= height && l.bottom >= height)) ||\n            scaleBlock(this.heightMap.lineAt(this.scaler.fromDOM(height), QueryType.ByHeight, this.heightOracle, 0, 0), this.scaler);\n    }\n    scrollAnchorAt(scrollTop) {\n        let block = this.lineBlockAtHeight(scrollTop + 8);\n        return block.from >= this.viewport.from || this.viewportLines[0].top - scrollTop > 200 ? block : this.viewportLines[0];\n    }\n    elementAtHeight(height) {\n        return scaleBlock(this.heightMap.blockAt(this.scaler.fromDOM(height), this.heightOracle, 0, 0), this.scaler);\n    }\n    get docHeight() {\n        return this.scaler.toDOM(this.heightMap.height);\n    }\n    get contentHeight() {\n        return this.docHeight + this.paddingTop + this.paddingBottom;\n    }\n}\nclass Viewport {\n    constructor(from, to) {\n        this.from = from;\n        this.to = to;\n    }\n}\nfunction lineStructure(from, to, stateDeco) {\n    let ranges = [], pos = from, total = 0;\n    state.RangeSet.spans(stateDeco, from, to, {\n        span() { },\n        point(from, to) {\n            if (from > pos) {\n                ranges.push({ from: pos, to: from });\n                total += from - pos;\n            }\n            pos = to;\n        }\n    }, 20); // We're only interested in collapsed ranges of a significant size\n    if (pos < to) {\n        ranges.push({ from: pos, to });\n        total += to - pos;\n    }\n    return { total, ranges };\n}\nfunction findPosition({ total, ranges }, ratio) {\n    if (ratio <= 0)\n        return ranges[0].from;\n    if (ratio >= 1)\n        return ranges[ranges.length - 1].to;\n    let dist = Math.floor(total * ratio);\n    for (let i = 0;; i++) {\n        let { from, to } = ranges[i], size = to - from;\n        if (dist <= size)\n            return from + dist;\n        dist -= size;\n    }\n}\nfunction findFraction(structure, pos) {\n    let counted = 0;\n    for (let { from, to } of structure.ranges) {\n        if (pos <= to) {\n            counted += pos - from;\n            break;\n        }\n        counted += to - from;\n    }\n    return counted / structure.total;\n}\nfunction find(array, f) {\n    for (let val of array)\n        if (f(val))\n            return val;\n    return undefined;\n}\n// Don't scale when the document height is within the range of what\n// the DOM can handle.\nconst IdScaler = {\n    toDOM(n) { return n; },\n    fromDOM(n) { return n; },\n    scale: 1,\n    eq(other) { return other == this; }\n};\n// When the height is too big (> VP.MaxDOMHeight), scale down the\n// regions outside the viewports so that the total height is\n// VP.MaxDOMHeight.\nclass BigScaler {\n    constructor(oracle, heightMap, viewports) {\n        let vpHeight = 0, base = 0, domBase = 0;\n        this.viewports = viewports.map(({ from, to }) => {\n            let top = heightMap.lineAt(from, QueryType.ByPos, oracle, 0, 0).top;\n            let bottom = heightMap.lineAt(to, QueryType.ByPos, oracle, 0, 0).bottom;\n            vpHeight += bottom - top;\n            return { from, to, top, bottom, domTop: 0, domBottom: 0 };\n        });\n        this.scale = (7000000 /* VP.MaxDOMHeight */ - vpHeight) / (heightMap.height - vpHeight);\n        for (let obj of this.viewports) {\n            obj.domTop = domBase + (obj.top - base) * this.scale;\n            domBase = obj.domBottom = obj.domTop + (obj.bottom - obj.top);\n            base = obj.bottom;\n        }\n    }\n    toDOM(n) {\n        for (let i = 0, base = 0, domBase = 0;; i++) {\n            let vp = i < this.viewports.length ? this.viewports[i] : null;\n            if (!vp || n < vp.top)\n                return domBase + (n - base) * this.scale;\n            if (n <= vp.bottom)\n                return vp.domTop + (n - vp.top);\n            base = vp.bottom;\n            domBase = vp.domBottom;\n        }\n    }\n    fromDOM(n) {\n        for (let i = 0, base = 0, domBase = 0;; i++) {\n            let vp = i < this.viewports.length ? this.viewports[i] : null;\n            if (!vp || n < vp.domTop)\n                return base + (n - domBase) / this.scale;\n            if (n <= vp.domBottom)\n                return vp.top + (n - vp.domTop);\n            base = vp.bottom;\n            domBase = vp.domBottom;\n        }\n    }\n    eq(other) {\n        if (!(other instanceof BigScaler))\n            return false;\n        return this.scale == other.scale && this.viewports.length == other.viewports.length &&\n            this.viewports.every((vp, i) => vp.from == other.viewports[i].from && vp.to == other.viewports[i].to);\n    }\n}\nfunction scaleBlock(block, scaler) {\n    if (scaler.scale == 1)\n        return block;\n    let bTop = scaler.toDOM(block.top), bBottom = scaler.toDOM(block.bottom);\n    return new BlockInfo(block.from, block.length, bTop, bBottom - bTop, Array.isArray(block._content) ? block._content.map(b => scaleBlock(b, scaler)) : block._content);\n}\n\nconst theme = state.Facet.define({ combine: strs => strs.join(\" \") });\nconst darkTheme = state.Facet.define({ combine: values => values.indexOf(true) > -1 });\nconst baseThemeID = styleMod.StyleModule.newName(), baseLightID = styleMod.StyleModule.newName(), baseDarkID = styleMod.StyleModule.newName();\nconst lightDarkIDs = { \"&light\": \".\" + baseLightID, \"&dark\": \".\" + baseDarkID };\nfunction buildTheme(main, spec, scopes) {\n    return new styleMod.StyleModule(spec, {\n        finish(sel) {\n            return /&/.test(sel) ? sel.replace(/&\\w*/, m => {\n                if (m == \"&\")\n                    return main;\n                if (!scopes || !scopes[m])\n                    throw new RangeError(`Unsupported selector: ${m}`);\n                return scopes[m];\n            }) : main + \" \" + sel;\n        }\n    });\n}\nconst baseTheme$1 = buildTheme(\".\" + baseThemeID, {\n    \"&\": {\n        position: \"relative !important\",\n        boxSizing: \"border-box\",\n        \"&.cm-focused\": {\n            // Provide a simple default outline to make sure a focused\n            // editor is visually distinct. Can't leave the default behavior\n            // because that will apply to the content element, which is\n            // inside the scrollable container and doesn't include the\n            // gutters. We also can't use an 'auto' outline, since those\n            // are, for some reason, drawn behind the element content, which\n            // will cause things like the active line background to cover\n            // the outline (#297).\n            outline: \"1px dotted #212121\"\n        },\n        display: \"flex !important\",\n        flexDirection: \"column\"\n    },\n    \".cm-scroller\": {\n        display: \"flex !important\",\n        alignItems: \"flex-start !important\",\n        fontFamily: \"monospace\",\n        lineHeight: 1.4,\n        height: \"100%\",\n        overflowX: \"auto\",\n        position: \"relative\",\n        zIndex: 0,\n        overflowAnchor: \"none\",\n    },\n    \".cm-content\": {\n        margin: 0,\n        flexGrow: 2,\n        flexShrink: 0,\n        display: \"block\",\n        whiteSpace: \"pre\",\n        wordWrap: \"normal\", // https://github.com/codemirror/dev/issues/456\n        boxSizing: \"border-box\",\n        minHeight: \"100%\",\n        padding: \"4px 0\",\n        outline: \"none\",\n        \"&[contenteditable=true]\": {\n            WebkitUserModify: \"read-write-plaintext-only\",\n        }\n    },\n    \".cm-lineWrapping\": {\n        whiteSpace_fallback: \"pre-wrap\", // For IE\n        whiteSpace: \"break-spaces\",\n        wordBreak: \"break-word\", // For Safari, which doesn't support overflow-wrap: anywhere\n        overflowWrap: \"anywhere\",\n        flexShrink: 1\n    },\n    \"&light .cm-content\": { caretColor: \"black\" },\n    \"&dark .cm-content\": { caretColor: \"white\" },\n    \".cm-line\": {\n        display: \"block\",\n        padding: \"0 2px 0 6px\"\n    },\n    \".cm-layer\": {\n        position: \"absolute\",\n        left: 0,\n        top: 0,\n        contain: \"size style\",\n        \"& > *\": {\n            position: \"absolute\"\n        }\n    },\n    \"&light .cm-selectionBackground\": {\n        background: \"#d9d9d9\"\n    },\n    \"&dark .cm-selectionBackground\": {\n        background: \"#222\"\n    },\n    \"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground\": {\n        background: \"#d7d4f0\"\n    },\n    \"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground\": {\n        background: \"#233\"\n    },\n    \".cm-cursorLayer\": {\n        pointerEvents: \"none\"\n    },\n    \"&.cm-focused > .cm-scroller > .cm-cursorLayer\": {\n        animation: \"steps(1) cm-blink 1.2s infinite\"\n    },\n    // Two animations defined so that we can switch between them to\n    // restart the animation without forcing another style\n    // recomputation.\n    \"@keyframes cm-blink\": { \"0%\": {}, \"50%\": { opacity: 0 }, \"100%\": {} },\n    \"@keyframes cm-blink2\": { \"0%\": {}, \"50%\": { opacity: 0 }, \"100%\": {} },\n    \".cm-cursor, .cm-dropCursor\": {\n        borderLeft: \"1.2px solid black\",\n        marginLeft: \"-0.6px\",\n        pointerEvents: \"none\",\n    },\n    \".cm-cursor\": {\n        display: \"none\"\n    },\n    \"&dark .cm-cursor\": {\n        borderLeftColor: \"#ddd\"\n    },\n    \".cm-dropCursor\": {\n        position: \"absolute\"\n    },\n    \"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor\": {\n        display: \"block\"\n    },\n    \".cm-iso\": {\n        unicodeBidi: \"isolate\"\n    },\n    \".cm-announced\": {\n        position: \"fixed\",\n        top: \"-10000px\"\n    },\n    \"@media print\": {\n        \".cm-announced\": { display: \"none\" }\n    },\n    \"&light .cm-activeLine\": { backgroundColor: \"#cceeff44\" },\n    \"&dark .cm-activeLine\": { backgroundColor: \"#99eeff33\" },\n    \"&light .cm-specialChar\": { color: \"red\" },\n    \"&dark .cm-specialChar\": { color: \"#f78\" },\n    \".cm-gutters\": {\n        flexShrink: 0,\n        display: \"flex\",\n        height: \"100%\",\n        boxSizing: \"border-box\",\n        insetInlineStart: 0,\n        zIndex: 200\n    },\n    \"&light .cm-gutters\": {\n        backgroundColor: \"#f5f5f5\",\n        color: \"#6c6c6c\",\n        borderRight: \"1px solid #ddd\"\n    },\n    \"&dark .cm-gutters\": {\n        backgroundColor: \"#333338\",\n        color: \"#ccc\"\n    },\n    \".cm-gutter\": {\n        display: \"flex !important\", // Necessary -- prevents margin collapsing\n        flexDirection: \"column\",\n        flexShrink: 0,\n        boxSizing: \"border-box\",\n        minHeight: \"100%\",\n        overflow: \"hidden\"\n    },\n    \".cm-gutterElement\": {\n        boxSizing: \"border-box\"\n    },\n    \".cm-lineNumbers .cm-gutterElement\": {\n        padding: \"0 3px 0 5px\",\n        minWidth: \"20px\",\n        textAlign: \"right\",\n        whiteSpace: \"nowrap\"\n    },\n    \"&light .cm-activeLineGutter\": {\n        backgroundColor: \"#e2f2ff\"\n    },\n    \"&dark .cm-activeLineGutter\": {\n        backgroundColor: \"#222227\"\n    },\n    \".cm-panels\": {\n        boxSizing: \"border-box\",\n        position: \"sticky\",\n        left: 0,\n        right: 0,\n        zIndex: 300\n    },\n    \"&light .cm-panels\": {\n        backgroundColor: \"#f5f5f5\",\n        color: \"black\"\n    },\n    \"&light .cm-panels-top\": {\n        borderBottom: \"1px solid #ddd\"\n    },\n    \"&light .cm-panels-bottom\": {\n        borderTop: \"1px solid #ddd\"\n    },\n    \"&dark .cm-panels\": {\n        backgroundColor: \"#333338\",\n        color: \"white\"\n    },\n    \".cm-tab\": {\n        display: \"inline-block\",\n        overflow: \"hidden\",\n        verticalAlign: \"bottom\"\n    },\n    \".cm-widgetBuffer\": {\n        verticalAlign: \"text-top\",\n        height: \"1em\",\n        width: 0,\n        display: \"inline\"\n    },\n    \".cm-placeholder\": {\n        color: \"#888\",\n        display: \"inline-block\",\n        verticalAlign: \"top\",\n    },\n    \".cm-highlightSpace\": {\n        backgroundImage: \"radial-gradient(circle at 50% 55%, #aaa 20%, transparent 5%)\",\n        backgroundPosition: \"center\",\n    },\n    \".cm-highlightTab\": {\n        backgroundImage: `url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"200\" height=\"20\"><path stroke=\"%23888\" stroke-width=\"1\" fill=\"none\" d=\"M1 10H196L190 5M190 15L196 10M197 4L197 16\"/></svg>')`,\n        backgroundSize: \"auto 100%\",\n        backgroundPosition: \"right 90%\",\n        backgroundRepeat: \"no-repeat\"\n    },\n    \".cm-trailingSpace\": {\n        backgroundColor: \"#ff332255\"\n    },\n    \".cm-button\": {\n        verticalAlign: \"middle\",\n        color: \"inherit\",\n        fontSize: \"70%\",\n        padding: \".2em 1em\",\n        borderRadius: \"1px\"\n    },\n    \"&light .cm-button\": {\n        backgroundImage: \"linear-gradient(#eff1f5, #d9d9df)\",\n        border: \"1px solid #888\",\n        \"&:active\": {\n            backgroundImage: \"linear-gradient(#b4b4b4, #d0d3d6)\"\n        }\n    },\n    \"&dark .cm-button\": {\n        backgroundImage: \"linear-gradient(#393939, #111)\",\n        border: \"1px solid #888\",\n        \"&:active\": {\n            backgroundImage: \"linear-gradient(#111, #333)\"\n        }\n    },\n    \".cm-textfield\": {\n        verticalAlign: \"middle\",\n        color: \"inherit\",\n        fontSize: \"70%\",\n        border: \"1px solid silver\",\n        padding: \".2em .5em\"\n    },\n    \"&light .cm-textfield\": {\n        backgroundColor: \"white\"\n    },\n    \"&dark .cm-textfield\": {\n        border: \"1px solid #555\",\n        backgroundColor: \"inherit\"\n    }\n}, lightDarkIDs);\n\nconst observeOptions = {\n    childList: true,\n    characterData: true,\n    subtree: true,\n    attributes: true,\n    characterDataOldValue: true\n};\n// IE11 has very broken mutation observers, so we also listen to\n// DOMCharacterDataModified there\nconst useCharData = browser.ie && browser.ie_version <= 11;\nclass DOMObserver {\n    constructor(view) {\n        this.view = view;\n        this.active = false;\n        this.editContext = null;\n        // The known selection. Kept in our own object, as opposed to just\n        // directly accessing the selection because:\n        //  - Safari doesn't report the right selection in shadow DOM\n        //  - Reading from the selection forces a DOM layout\n        //  - This way, we can ignore selectionchange events if we have\n        //    already seen the 'new' selection\n        this.selectionRange = new DOMSelectionState;\n        // Set when a selection change is detected, cleared on flush\n        this.selectionChanged = false;\n        this.delayedFlush = -1;\n        this.resizeTimeout = -1;\n        this.queue = [];\n        this.delayedAndroidKey = null;\n        this.flushingAndroidKey = -1;\n        this.lastChange = 0;\n        this.scrollTargets = [];\n        this.intersection = null;\n        this.resizeScroll = null;\n        this.intersecting = false;\n        this.gapIntersection = null;\n        this.gaps = [];\n        this.printQuery = null;\n        // Timeout for scheduling check of the parents that need scroll handlers\n        this.parentCheck = -1;\n        this.dom = view.contentDOM;\n        this.observer = new MutationObserver(mutations => {\n            for (let mut of mutations)\n                this.queue.push(mut);\n            // IE11 will sometimes (on typing over a selection or\n            // backspacing out a single character text node) call the\n            // observer callback before actually updating the DOM.\n            //\n            // Unrelatedly, iOS Safari will, when ending a composition,\n            // sometimes first clear it, deliver the mutations, and then\n            // reinsert the finished text. CodeMirror's handling of the\n            // deletion will prevent the reinsertion from happening,\n            // breaking composition.\n            if ((browser.ie && browser.ie_version <= 11 || browser.ios && view.composing) &&\n                mutations.some(m => m.type == \"childList\" && m.removedNodes.length ||\n                    m.type == \"characterData\" && m.oldValue.length > m.target.nodeValue.length))\n                this.flushSoon();\n            else\n                this.flush();\n        });\n        if (window.EditContext && view.constructor.EDIT_CONTEXT !== false &&\n            // Chrome <126 doesn't support inverted selections in edit context (#1392)\n            !(browser.chrome && browser.chrome_version < 126)) {\n            this.editContext = new EditContextManager(view);\n            if (view.state.facet(editable))\n                view.contentDOM.editContext = this.editContext.editContext;\n        }\n        if (useCharData)\n            this.onCharData = (event) => {\n                this.queue.push({ target: event.target,\n                    type: \"characterData\",\n                    oldValue: event.prevValue });\n                this.flushSoon();\n            };\n        this.onSelectionChange = this.onSelectionChange.bind(this);\n        this.onResize = this.onResize.bind(this);\n        this.onPrint = this.onPrint.bind(this);\n        this.onScroll = this.onScroll.bind(this);\n        if (window.matchMedia)\n            this.printQuery = window.matchMedia(\"print\");\n        if (typeof ResizeObserver == \"function\") {\n            this.resizeScroll = new ResizeObserver(() => {\n                var _a;\n                if (((_a = this.view.docView) === null || _a === void 0 ? void 0 : _a.lastUpdate) < Date.now() - 75)\n                    this.onResize();\n            });\n            this.resizeScroll.observe(view.scrollDOM);\n        }\n        this.addWindowListeners(this.win = view.win);\n        this.start();\n        if (typeof IntersectionObserver == \"function\") {\n            this.intersection = new IntersectionObserver(entries => {\n                if (this.parentCheck < 0)\n                    this.parentCheck = setTimeout(this.listenForScroll.bind(this), 1000);\n                if (entries.length > 0 && (entries[entries.length - 1].intersectionRatio > 0) != this.intersecting) {\n                    this.intersecting = !this.intersecting;\n                    if (this.intersecting != this.view.inView)\n                        this.onScrollChanged(document.createEvent(\"Event\"));\n                }\n            }, { threshold: [0, .001] });\n            this.intersection.observe(this.dom);\n            this.gapIntersection = new IntersectionObserver(entries => {\n                if (entries.length > 0 && entries[entries.length - 1].intersectionRatio > 0)\n                    this.onScrollChanged(document.createEvent(\"Event\"));\n            }, {});\n        }\n        this.listenForScroll();\n        this.readSelectionRange();\n    }\n    onScrollChanged(e) {\n        this.view.inputState.runHandlers(\"scroll\", e);\n        if (this.intersecting)\n            this.view.measure();\n    }\n    onScroll(e) {\n        if (this.intersecting)\n            this.flush(false);\n        if (this.editContext)\n            this.view.requestMeasure(this.editContext.measureReq);\n        this.onScrollChanged(e);\n    }\n    onResize() {\n        if (this.resizeTimeout < 0)\n            this.resizeTimeout = setTimeout(() => {\n                this.resizeTimeout = -1;\n                this.view.requestMeasure();\n            }, 50);\n    }\n    onPrint(event) {\n        if ((event.type == \"change\" || !event.type) && !event.matches)\n            return;\n        this.view.viewState.printing = true;\n        this.view.measure();\n        setTimeout(() => {\n            this.view.viewState.printing = false;\n            this.view.requestMeasure();\n        }, 500);\n    }\n    updateGaps(gaps) {\n        if (this.gapIntersection && (gaps.length != this.gaps.length || this.gaps.some((g, i) => g != gaps[i]))) {\n            this.gapIntersection.disconnect();\n            for (let gap of gaps)\n                this.gapIntersection.observe(gap);\n            this.gaps = gaps;\n        }\n    }\n    onSelectionChange(event) {\n        let wasChanged = this.selectionChanged;\n        if (!this.readSelectionRange() || this.delayedAndroidKey)\n            return;\n        let { view } = this, sel = this.selectionRange;\n        if (view.state.facet(editable) ? view.root.activeElement != this.dom : !hasSelection(this.dom, sel))\n            return;\n        let context = sel.anchorNode && view.docView.nearest(sel.anchorNode);\n        if (context && context.ignoreEvent(event)) {\n            if (!wasChanged)\n                this.selectionChanged = false;\n            return;\n        }\n        // Deletions on IE11 fire their events in the wrong order, giving\n        // us a selection change event before the DOM changes are\n        // reported.\n        // Chrome Android has a similar issue when backspacing out a\n        // selection (#645).\n        if ((browser.ie && browser.ie_version <= 11 || browser.android && browser.chrome) && !view.state.selection.main.empty &&\n            // (Selection.isCollapsed isn't reliable on IE)\n            sel.focusNode && isEquivalentPosition(sel.focusNode, sel.focusOffset, sel.anchorNode, sel.anchorOffset))\n            this.flushSoon();\n        else\n            this.flush(false);\n    }\n    readSelectionRange() {\n        let { view } = this;\n        // The Selection object is broken in shadow roots in Safari. See\n        // https://github.com/codemirror/dev/issues/414\n        let selection = getSelection(view.root);\n        if (!selection)\n            return false;\n        let range = browser.safari && view.root.nodeType == 11 &&\n            view.root.activeElement == this.dom &&\n            safariSelectionRangeHack(this.view, selection) || selection;\n        if (!range || this.selectionRange.eq(range))\n            return false;\n        let local = hasSelection(this.dom, range);\n        // Detect the situation where the browser has, on focus, moved the\n        // selection to the start of the content element. Reset it to the\n        // position from the editor state.\n        if (local && !this.selectionChanged &&\n            view.inputState.lastFocusTime > Date.now() - 200 &&\n            view.inputState.lastTouchTime < Date.now() - 300 &&\n            atElementStart(this.dom, range)) {\n            this.view.inputState.lastFocusTime = 0;\n            view.docView.updateSelection();\n            return false;\n        }\n        this.selectionRange.setRange(range);\n        if (local)\n            this.selectionChanged = true;\n        return true;\n    }\n    setSelectionRange(anchor, head) {\n        this.selectionRange.set(anchor.node, anchor.offset, head.node, head.offset);\n        this.selectionChanged = false;\n    }\n    clearSelectionRange() {\n        this.selectionRange.set(null, 0, null, 0);\n    }\n    listenForScroll() {\n        this.parentCheck = -1;\n        let i = 0, changed = null;\n        for (let dom = this.dom; dom;) {\n            if (dom.nodeType == 1) {\n                if (!changed && i < this.scrollTargets.length && this.scrollTargets[i] == dom)\n                    i++;\n                else if (!changed)\n                    changed = this.scrollTargets.slice(0, i);\n                if (changed)\n                    changed.push(dom);\n                dom = dom.assignedSlot || dom.parentNode;\n            }\n            else if (dom.nodeType == 11) { // Shadow root\n                dom = dom.host;\n            }\n            else {\n                break;\n            }\n        }\n        if (i < this.scrollTargets.length && !changed)\n            changed = this.scrollTargets.slice(0, i);\n        if (changed) {\n            for (let dom of this.scrollTargets)\n                dom.removeEventListener(\"scroll\", this.onScroll);\n            for (let dom of this.scrollTargets = changed)\n                dom.addEventListener(\"scroll\", this.onScroll);\n        }\n    }\n    ignore(f) {\n        if (!this.active)\n            return f();\n        try {\n            this.stop();\n            return f();\n        }\n        finally {\n            this.start();\n            this.clear();\n        }\n    }\n    start() {\n        if (this.active)\n            return;\n        this.observer.observe(this.dom, observeOptions);\n        if (useCharData)\n            this.dom.addEventListener(\"DOMCharacterDataModified\", this.onCharData);\n        this.active = true;\n    }\n    stop() {\n        if (!this.active)\n            return;\n        this.active = false;\n        this.observer.disconnect();\n        if (useCharData)\n            this.dom.removeEventListener(\"DOMCharacterDataModified\", this.onCharData);\n    }\n    // Throw away any pending changes\n    clear() {\n        this.processRecords();\n        this.queue.length = 0;\n        this.selectionChanged = false;\n    }\n    // Chrome Android, especially in combination with GBoard, not only\n    // doesn't reliably fire regular key events, but also often\n    // surrounds the effect of enter or backspace with a bunch of\n    // composition events that, when interrupted, cause text duplication\n    // or other kinds of corruption. This hack makes the editor back off\n    // from handling DOM changes for a moment when such a key is\n    // detected (via beforeinput or keydown), and then tries to flush\n    // them or, if that has no effect, dispatches the given key.\n    delayAndroidKey(key, keyCode) {\n        var _a;\n        if (!this.delayedAndroidKey) {\n            let flush = () => {\n                let key = this.delayedAndroidKey;\n                if (key) {\n                    this.clearDelayedAndroidKey();\n                    this.view.inputState.lastKeyCode = key.keyCode;\n                    this.view.inputState.lastKeyTime = Date.now();\n                    let flushed = this.flush();\n                    if (!flushed && key.force)\n                        dispatchKey(this.dom, key.key, key.keyCode);\n                }\n            };\n            this.flushingAndroidKey = this.view.win.requestAnimationFrame(flush);\n        }\n        // Since backspace beforeinput is sometimes signalled spuriously,\n        // Enter always takes precedence.\n        if (!this.delayedAndroidKey || key == \"Enter\")\n            this.delayedAndroidKey = {\n                key, keyCode,\n                // Only run the key handler when no changes are detected if\n                // this isn't coming right after another change, in which case\n                // it is probably part of a weird chain of updates, and should\n                // be ignored if it returns the DOM to its previous state.\n                force: this.lastChange < Date.now() - 50 || !!((_a = this.delayedAndroidKey) === null || _a === void 0 ? void 0 : _a.force)\n            };\n    }\n    clearDelayedAndroidKey() {\n        this.win.cancelAnimationFrame(this.flushingAndroidKey);\n        this.delayedAndroidKey = null;\n        this.flushingAndroidKey = -1;\n    }\n    flushSoon() {\n        if (this.delayedFlush < 0)\n            this.delayedFlush = this.view.win.requestAnimationFrame(() => { this.delayedFlush = -1; this.flush(); });\n    }\n    forceFlush() {\n        if (this.delayedFlush >= 0) {\n            this.view.win.cancelAnimationFrame(this.delayedFlush);\n            this.delayedFlush = -1;\n        }\n        this.flush();\n    }\n    pendingRecords() {\n        for (let mut of this.observer.takeRecords())\n            this.queue.push(mut);\n        return this.queue;\n    }\n    processRecords() {\n        let records = this.pendingRecords();\n        if (records.length)\n            this.queue = [];\n        let from = -1, to = -1, typeOver = false;\n        for (let record of records) {\n            let range = this.readMutation(record);\n            if (!range)\n                continue;\n            if (range.typeOver)\n                typeOver = true;\n            if (from == -1) {\n                ({ from, to } = range);\n            }\n            else {\n                from = Math.min(range.from, from);\n                to = Math.max(range.to, to);\n            }\n        }\n        return { from, to, typeOver };\n    }\n    readChange() {\n        let { from, to, typeOver } = this.processRecords();\n        let newSel = this.selectionChanged && hasSelection(this.dom, this.selectionRange);\n        if (from < 0 && !newSel)\n            return null;\n        if (from > -1)\n            this.lastChange = Date.now();\n        this.view.inputState.lastFocusTime = 0;\n        this.selectionChanged = false;\n        let change = new DOMChange(this.view, from, to, typeOver);\n        this.view.docView.domChanged = { newSel: change.newSel ? change.newSel.main : null };\n        return change;\n    }\n    // Apply pending changes, if any\n    flush(readSelection = true) {\n        // Completely hold off flushing when pending keys are set—the code\n        // managing those will make sure processRecords is called and the\n        // view is resynchronized after\n        if (this.delayedFlush >= 0 || this.delayedAndroidKey)\n            return false;\n        if (readSelection)\n            this.readSelectionRange();\n        let domChange = this.readChange();\n        if (!domChange) {\n            this.view.requestMeasure();\n            return false;\n        }\n        let startState = this.view.state;\n        let handled = applyDOMChange(this.view, domChange);\n        // The view wasn't updated but DOM/selection changes were seen. Reset the view.\n        if (this.view.state == startState &&\n            (domChange.domChanged || domChange.newSel && !domChange.newSel.main.eq(this.view.state.selection.main)))\n            this.view.update([]);\n        return handled;\n    }\n    readMutation(rec) {\n        let cView = this.view.docView.nearest(rec.target);\n        if (!cView || cView.ignoreMutation(rec))\n            return null;\n        cView.markDirty(rec.type == \"attributes\");\n        if (rec.type == \"attributes\")\n            cView.flags |= 4 /* ViewFlag.AttrsDirty */;\n        if (rec.type == \"childList\") {\n            let childBefore = findChild(cView, rec.previousSibling || rec.target.previousSibling, -1);\n            let childAfter = findChild(cView, rec.nextSibling || rec.target.nextSibling, 1);\n            return { from: childBefore ? cView.posAfter(childBefore) : cView.posAtStart,\n                to: childAfter ? cView.posBefore(childAfter) : cView.posAtEnd, typeOver: false };\n        }\n        else if (rec.type == \"characterData\") {\n            return { from: cView.posAtStart, to: cView.posAtEnd, typeOver: rec.target.nodeValue == rec.oldValue };\n        }\n        else {\n            return null;\n        }\n    }\n    setWindow(win) {\n        if (win != this.win) {\n            this.removeWindowListeners(this.win);\n            this.win = win;\n            this.addWindowListeners(this.win);\n        }\n    }\n    addWindowListeners(win) {\n        win.addEventListener(\"resize\", this.onResize);\n        if (this.printQuery) {\n            if (this.printQuery.addEventListener)\n                this.printQuery.addEventListener(\"change\", this.onPrint);\n            else\n                this.printQuery.addListener(this.onPrint);\n        }\n        else\n            win.addEventListener(\"beforeprint\", this.onPrint);\n        win.addEventListener(\"scroll\", this.onScroll);\n        win.document.addEventListener(\"selectionchange\", this.onSelectionChange);\n    }\n    removeWindowListeners(win) {\n        win.removeEventListener(\"scroll\", this.onScroll);\n        win.removeEventListener(\"resize\", this.onResize);\n        if (this.printQuery) {\n            if (this.printQuery.removeEventListener)\n                this.printQuery.removeEventListener(\"change\", this.onPrint);\n            else\n                this.printQuery.removeListener(this.onPrint);\n        }\n        else\n            win.removeEventListener(\"beforeprint\", this.onPrint);\n        win.document.removeEventListener(\"selectionchange\", this.onSelectionChange);\n    }\n    update(update) {\n        if (this.editContext) {\n            this.editContext.update(update);\n            if (update.startState.facet(editable) != update.state.facet(editable))\n                update.view.contentDOM.editContext = update.state.facet(editable) ? this.editContext.editContext : null;\n        }\n    }\n    destroy() {\n        var _a, _b, _c;\n        this.stop();\n        (_a = this.intersection) === null || _a === void 0 ? void 0 : _a.disconnect();\n        (_b = this.gapIntersection) === null || _b === void 0 ? void 0 : _b.disconnect();\n        (_c = this.resizeScroll) === null || _c === void 0 ? void 0 : _c.disconnect();\n        for (let dom of this.scrollTargets)\n            dom.removeEventListener(\"scroll\", this.onScroll);\n        this.removeWindowListeners(this.win);\n        clearTimeout(this.parentCheck);\n        clearTimeout(this.resizeTimeout);\n        this.win.cancelAnimationFrame(this.delayedFlush);\n        this.win.cancelAnimationFrame(this.flushingAndroidKey);\n        if (this.editContext) {\n            this.view.contentDOM.editContext = null;\n            this.editContext.destroy();\n        }\n    }\n}\nfunction findChild(cView, dom, dir) {\n    while (dom) {\n        let curView = ContentView.get(dom);\n        if (curView && curView.parent == cView)\n            return curView;\n        let parent = dom.parentNode;\n        dom = parent != cView.dom ? parent : dir > 0 ? dom.nextSibling : dom.previousSibling;\n    }\n    return null;\n}\nfunction buildSelectionRangeFromRange(view, range) {\n    let anchorNode = range.startContainer, anchorOffset = range.startOffset;\n    let focusNode = range.endContainer, focusOffset = range.endOffset;\n    let curAnchor = view.docView.domAtPos(view.state.selection.main.anchor);\n    // Since such a range doesn't distinguish between anchor and head,\n    // use a heuristic that flips it around if its end matches the\n    // current anchor.\n    if (isEquivalentPosition(curAnchor.node, curAnchor.offset, focusNode, focusOffset))\n        [anchorNode, anchorOffset, focusNode, focusOffset] = [focusNode, focusOffset, anchorNode, anchorOffset];\n    return { anchorNode, anchorOffset, focusNode, focusOffset };\n}\n// Used to work around a Safari Selection/shadow DOM bug (#414)\nfunction safariSelectionRangeHack(view, selection) {\n    if (selection.getComposedRanges) {\n        let range = selection.getComposedRanges(view.root)[0];\n        if (range)\n            return buildSelectionRangeFromRange(view, range);\n    }\n    let found = null;\n    // Because Safari (at least in 2018-2021) doesn't provide regular\n    // access to the selection inside a shadowroot, we have to perform a\n    // ridiculous hack to get at it—using `execCommand` to trigger a\n    // `beforeInput` event so that we can read the target range from the\n    // event.\n    function read(event) {\n        event.preventDefault();\n        event.stopImmediatePropagation();\n        found = event.getTargetRanges()[0];\n    }\n    view.contentDOM.addEventListener(\"beforeinput\", read, true);\n    view.dom.ownerDocument.execCommand(\"indent\");\n    view.contentDOM.removeEventListener(\"beforeinput\", read, true);\n    return found ? buildSelectionRangeFromRange(view, found) : null;\n}\nclass EditContextManager {\n    constructor(view) {\n        // The document window for which the text in the context is\n        // maintained. For large documents, this may be smaller than the\n        // editor document. This window always includes the selection head.\n        this.from = 0;\n        this.to = 0;\n        // When applying a transaction, this is used to compare the change\n        // made to the context content to the change in the transaction in\n        // order to make the minimal changes to the context (since touching\n        // that sometimes breaks series of multiple edits made for a single\n        // user action on some Android keyboards)\n        this.pendingContextChange = null;\n        this.handlers = Object.create(null);\n        // Kludge to work around the fact that EditContext does not respond\n        // well to having its content updated during a composition (see #1472)\n        this.composing = null;\n        this.resetRange(view.state);\n        let context = this.editContext = new window.EditContext({\n            text: view.state.doc.sliceString(this.from, this.to),\n            selectionStart: this.toContextPos(Math.max(this.from, Math.min(this.to, view.state.selection.main.anchor))),\n            selectionEnd: this.toContextPos(view.state.selection.main.head)\n        });\n        this.handlers.textupdate = e => {\n            let { anchor } = view.state.selection.main;\n            let from = this.toEditorPos(e.updateRangeStart), to = this.toEditorPos(e.updateRangeEnd);\n            if (view.inputState.composing >= 0 && !this.composing)\n                this.composing = { contextBase: e.updateRangeStart, editorBase: from, drifted: false };\n            let change = { from, to, insert: state.Text.of(e.text.split(\"\\n\")) };\n            // If the window doesn't include the anchor, assume changes\n            // adjacent to a side go up to the anchor.\n            if (change.from == this.from && anchor < this.from)\n                change.from = anchor;\n            else if (change.to == this.to && anchor > this.to)\n                change.to = anchor;\n            // Edit contexts sometimes fire empty changes\n            if (change.from == change.to && !change.insert.length)\n                return;\n            this.pendingContextChange = change;\n            if (!view.state.readOnly) {\n                let newLen = this.to - this.from + (change.to - change.from + change.insert.length);\n                applyDOMChangeInner(view, change, state.EditorSelection.single(this.toEditorPos(e.selectionStart, newLen), this.toEditorPos(e.selectionEnd, newLen)));\n            }\n            // If the transaction didn't flush our change, revert it so\n            // that the context is in sync with the editor state again.\n            if (this.pendingContextChange) {\n                this.revertPending(view.state);\n                this.setSelection(view.state);\n            }\n        };\n        this.handlers.characterboundsupdate = e => {\n            let rects = [], prev = null;\n            for (let i = this.toEditorPos(e.rangeStart), end = this.toEditorPos(e.rangeEnd); i < end; i++) {\n                let rect = view.coordsForChar(i);\n                prev = (rect && new DOMRect(rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top))\n                    || prev || new DOMRect;\n                rects.push(prev);\n            }\n            context.updateCharacterBounds(e.rangeStart, rects);\n        };\n        this.handlers.textformatupdate = e => {\n            let deco = [];\n            for (let format of e.getTextFormats()) {\n                let lineStyle = format.underlineStyle, thickness = format.underlineThickness;\n                if (lineStyle != \"None\" && thickness != \"None\") {\n                    let from = this.toEditorPos(format.rangeStart), to = this.toEditorPos(format.rangeEnd);\n                    if (from < to) {\n                        let style = `text-decoration: underline ${lineStyle == \"Dashed\" ? \"dashed \" : lineStyle == \"Squiggle\" ? \"wavy \" : \"\"}${thickness == \"Thin\" ? 1 : 2}px`;\n                        deco.push(Decoration.mark({ attributes: { style } }).range(from, to));\n                    }\n                }\n            }\n            view.dispatch({ effects: setEditContextFormatting.of(Decoration.set(deco)) });\n        };\n        this.handlers.compositionstart = () => {\n            if (view.inputState.composing < 0) {\n                view.inputState.composing = 0;\n                view.inputState.compositionFirstChange = true;\n            }\n        };\n        this.handlers.compositionend = () => {\n            view.inputState.composing = -1;\n            view.inputState.compositionFirstChange = null;\n            if (this.composing) {\n                let { drifted } = this.composing;\n                this.composing = null;\n                if (drifted)\n                    this.reset(view.state);\n            }\n        };\n        for (let event in this.handlers)\n            context.addEventListener(event, this.handlers[event]);\n        this.measureReq = { read: view => {\n                this.editContext.updateControlBounds(view.contentDOM.getBoundingClientRect());\n                let sel = getSelection(view.root);\n                if (sel && sel.rangeCount)\n                    this.editContext.updateSelectionBounds(sel.getRangeAt(0).getBoundingClientRect());\n            } };\n    }\n    applyEdits(update) {\n        let off = 0, abort = false, pending = this.pendingContextChange;\n        update.changes.iterChanges((fromA, toA, _fromB, _toB, insert) => {\n            if (abort)\n                return;\n            let dLen = insert.length - (toA - fromA);\n            if (pending && toA >= pending.to) {\n                if (pending.from == fromA && pending.to == toA && pending.insert.eq(insert)) {\n                    pending = this.pendingContextChange = null; // Match\n                    off += dLen;\n                    this.to += dLen;\n                    return;\n                }\n                else { // Mismatch, revert\n                    pending = null;\n                    this.revertPending(update.state);\n                }\n            }\n            fromA += off;\n            toA += off;\n            if (toA <= this.from) { // Before the window\n                this.from += dLen;\n                this.to += dLen;\n            }\n            else if (fromA < this.to) { // Overlaps with window\n                if (fromA < this.from || toA > this.to || (this.to - this.from) + insert.length > 30000 /* CxVp.MaxSize */) {\n                    abort = true;\n                    return;\n                }\n                this.editContext.updateText(this.toContextPos(fromA), this.toContextPos(toA), insert.toString());\n                this.to += dLen;\n            }\n            off += dLen;\n        });\n        if (pending && !abort)\n            this.revertPending(update.state);\n        return !abort;\n    }\n    update(update) {\n        let reverted = this.pendingContextChange;\n        if (this.composing && (this.composing.drifted || update.transactions.some(tr => !tr.isUserEvent(\"input.type\") && tr.changes.touchesRange(this.from, this.to)))) {\n            this.composing.drifted = true;\n            this.composing.editorBase = update.changes.mapPos(this.composing.editorBase);\n        }\n        else if (!this.applyEdits(update) || !this.rangeIsValid(update.state)) {\n            this.pendingContextChange = null;\n            this.reset(update.state);\n        }\n        else if (update.docChanged || update.selectionSet || reverted) {\n            this.setSelection(update.state);\n        }\n        if (update.geometryChanged || update.docChanged || update.selectionSet)\n            update.view.requestMeasure(this.measureReq);\n    }\n    resetRange(state) {\n        let { head } = state.selection.main;\n        this.from = Math.max(0, head - 10000 /* CxVp.Margin */);\n        this.to = Math.min(state.doc.length, head + 10000 /* CxVp.Margin */);\n    }\n    reset(state) {\n        this.resetRange(state);\n        this.editContext.updateText(0, this.editContext.text.length, state.doc.sliceString(this.from, this.to));\n        this.setSelection(state);\n    }\n    revertPending(state) {\n        let pending = this.pendingContextChange;\n        this.pendingContextChange = null;\n        this.editContext.updateText(this.toContextPos(pending.from), this.toContextPos(pending.from + pending.insert.length), state.doc.sliceString(pending.from, pending.to));\n    }\n    setSelection(state) {\n        let { main } = state.selection;\n        let start = this.toContextPos(Math.max(this.from, Math.min(this.to, main.anchor)));\n        let end = this.toContextPos(main.head);\n        if (this.editContext.selectionStart != start || this.editContext.selectionEnd != end)\n            this.editContext.updateSelection(start, end);\n    }\n    rangeIsValid(state) {\n        let { head } = state.selection.main;\n        return !(this.from > 0 && head - this.from < 500 /* CxVp.MinMargin */ ||\n            this.to < state.doc.length && this.to - head < 500 /* CxVp.MinMargin */ ||\n            this.to - this.from > 10000 /* CxVp.Margin */ * 3);\n    }\n    toEditorPos(contextPos, clipLen = this.to - this.from) {\n        contextPos = Math.min(contextPos, clipLen);\n        let c = this.composing;\n        return c && c.drifted ? c.editorBase + (contextPos - c.contextBase) : contextPos + this.from;\n    }\n    toContextPos(editorPos) {\n        let c = this.composing;\n        return c && c.drifted ? c.contextBase + (editorPos - c.editorBase) : editorPos - this.from;\n    }\n    destroy() {\n        for (let event in this.handlers)\n            this.editContext.removeEventListener(event, this.handlers[event]);\n    }\n}\n\n// The editor's update state machine looks something like this:\n//\n//     Idle → Updating ⇆ Idle (unchecked) → Measuring → Idle\n//                                         ↑      ↓\n//                                         Updating (measure)\n//\n// The difference between 'Idle' and 'Idle (unchecked)' lies in\n// whether a layout check has been scheduled. A regular update through\n// the `update` method updates the DOM in a write-only fashion, and\n// relies on a check (scheduled with `requestAnimationFrame`) to make\n// sure everything is where it should be and the viewport covers the\n// visible code. That check continues to measure and then optionally\n// update until it reaches a coherent state.\n/**\nAn editor view represents the editor's user interface. It holds\nthe editable DOM surface, and possibly other elements such as the\nline number gutter. It handles events and dispatches state\ntransactions for editing actions.\n*/\nclass EditorView {\n    /**\n    The current editor state.\n    */\n    get state() { return this.viewState.state; }\n    /**\n    To be able to display large documents without consuming too much\n    memory or overloading the browser, CodeMirror only draws the\n    code that is visible (plus a margin around it) to the DOM. This\n    property tells you the extent of the current drawn viewport, in\n    document positions.\n    */\n    get viewport() { return this.viewState.viewport; }\n    /**\n    When there are, for example, large collapsed ranges in the\n    viewport, its size can be a lot bigger than the actual visible\n    content. Thus, if you are doing something like styling the\n    content in the viewport, it is preferable to only do so for\n    these ranges, which are the subset of the viewport that is\n    actually drawn.\n    */\n    get visibleRanges() { return this.viewState.visibleRanges; }\n    /**\n    Returns false when the editor is entirely scrolled out of view\n    or otherwise hidden.\n    */\n    get inView() { return this.viewState.inView; }\n    /**\n    Indicates whether the user is currently composing text via\n    [IME](https://en.wikipedia.org/wiki/Input_method), and at least\n    one change has been made in the current composition.\n    */\n    get composing() { return this.inputState.composing > 0; }\n    /**\n    Indicates whether the user is currently in composing state. Note\n    that on some platforms, like Android, this will be the case a\n    lot, since just putting the cursor on a word starts a\n    composition there.\n    */\n    get compositionStarted() { return this.inputState.composing >= 0; }\n    /**\n    The document or shadow root that the view lives in.\n    */\n    get root() { return this._root; }\n    /**\n    @internal\n    */\n    get win() { return this.dom.ownerDocument.defaultView || window; }\n    /**\n    Construct a new view. You'll want to either provide a `parent`\n    option, or put `view.dom` into your document after creating a\n    view, so that the user can see the editor.\n    */\n    constructor(config = {}) {\n        var _a;\n        this.plugins = [];\n        this.pluginMap = new Map;\n        this.editorAttrs = {};\n        this.contentAttrs = {};\n        this.bidiCache = [];\n        this.destroyed = false;\n        /**\n        @internal\n        */\n        this.updateState = 2 /* UpdateState.Updating */;\n        /**\n        @internal\n        */\n        this.measureScheduled = -1;\n        /**\n        @internal\n        */\n        this.measureRequests = [];\n        this.contentDOM = document.createElement(\"div\");\n        this.scrollDOM = document.createElement(\"div\");\n        this.scrollDOM.tabIndex = -1;\n        this.scrollDOM.className = \"cm-scroller\";\n        this.scrollDOM.appendChild(this.contentDOM);\n        this.announceDOM = document.createElement(\"div\");\n        this.announceDOM.className = \"cm-announced\";\n        this.announceDOM.setAttribute(\"aria-live\", \"polite\");\n        this.dom = document.createElement(\"div\");\n        this.dom.appendChild(this.announceDOM);\n        this.dom.appendChild(this.scrollDOM);\n        if (config.parent)\n            config.parent.appendChild(this.dom);\n        let { dispatch } = config;\n        this.dispatchTransactions = config.dispatchTransactions ||\n            (dispatch && ((trs) => trs.forEach(tr => dispatch(tr, this)))) ||\n            ((trs) => this.update(trs));\n        this.dispatch = this.dispatch.bind(this);\n        this._root = (config.root || getRoot(config.parent) || document);\n        this.viewState = new ViewState(config.state || state.EditorState.create(config));\n        if (config.scrollTo && config.scrollTo.is(scrollIntoView))\n            this.viewState.scrollTarget = config.scrollTo.value.clip(this.viewState.state);\n        this.plugins = this.state.facet(viewPlugin).map(spec => new PluginInstance(spec));\n        for (let plugin of this.plugins)\n            plugin.update(this);\n        this.observer = new DOMObserver(this);\n        this.inputState = new InputState(this);\n        this.inputState.ensureHandlers(this.plugins);\n        this.docView = new DocView(this);\n        this.mountStyles();\n        this.updateAttrs();\n        this.updateState = 0 /* UpdateState.Idle */;\n        this.requestMeasure();\n        if ((_a = document.fonts) === null || _a === void 0 ? void 0 : _a.ready)\n            document.fonts.ready.then(() => this.requestMeasure());\n    }\n    dispatch(...input) {\n        let trs = input.length == 1 && input[0] instanceof state.Transaction ? input\n            : input.length == 1 && Array.isArray(input[0]) ? input[0]\n                : [this.state.update(...input)];\n        this.dispatchTransactions(trs, this);\n    }\n    /**\n    Update the view for the given array of transactions. This will\n    update the visible document and selection to match the state\n    produced by the transactions, and notify view plugins of the\n    change. You should usually call\n    [`dispatch`](https://codemirror.net/6/docs/ref/#view.EditorView.dispatch) instead, which uses this\n    as a primitive.\n    */\n    update(transactions) {\n        if (this.updateState != 0 /* UpdateState.Idle */)\n            throw new Error(\"Calls to EditorView.update are not allowed while an update is in progress\");\n        let redrawn = false, attrsChanged = false, update;\n        let state$1 = this.state;\n        for (let tr of transactions) {\n            if (tr.startState != state$1)\n                throw new RangeError(\"Trying to update state with a transaction that doesn't start from the previous state.\");\n            state$1 = tr.state;\n        }\n        if (this.destroyed) {\n            this.viewState.state = state$1;\n            return;\n        }\n        let focus = this.hasFocus, focusFlag = 0, dispatchFocus = null;\n        if (transactions.some(tr => tr.annotation(isFocusChange))) {\n            this.inputState.notifiedFocused = focus;\n            // If a focus-change transaction is being dispatched, set this update flag.\n            focusFlag = 1 /* UpdateFlag.Focus */;\n        }\n        else if (focus != this.inputState.notifiedFocused) {\n            this.inputState.notifiedFocused = focus;\n            // Schedule a separate focus transaction if necessary, otherwise\n            // add a flag to this update\n            dispatchFocus = focusChangeTransaction(state$1, focus);\n            if (!dispatchFocus)\n                focusFlag = 1 /* UpdateFlag.Focus */;\n        }\n        // If there was a pending DOM change, eagerly read it and try to\n        // apply it after the given transactions.\n        let pendingKey = this.observer.delayedAndroidKey, domChange = null;\n        if (pendingKey) {\n            this.observer.clearDelayedAndroidKey();\n            domChange = this.observer.readChange();\n            // Only try to apply DOM changes if the transactions didn't\n            // change the doc or selection.\n            if (domChange && !this.state.doc.eq(state$1.doc) || !this.state.selection.eq(state$1.selection))\n                domChange = null;\n        }\n        else {\n            this.observer.clear();\n        }\n        // When the phrases change, redraw the editor\n        if (state$1.facet(state.EditorState.phrases) != this.state.facet(state.EditorState.phrases))\n            return this.setState(state$1);\n        update = ViewUpdate.create(this, state$1, transactions);\n        update.flags |= focusFlag;\n        let scrollTarget = this.viewState.scrollTarget;\n        try {\n            this.updateState = 2 /* UpdateState.Updating */;\n            for (let tr of transactions) {\n                if (scrollTarget)\n                    scrollTarget = scrollTarget.map(tr.changes);\n                if (tr.scrollIntoView) {\n                    let { main } = tr.state.selection;\n                    scrollTarget = new ScrollTarget(main.empty ? main : state.EditorSelection.cursor(main.head, main.head > main.anchor ? -1 : 1));\n                }\n                for (let e of tr.effects)\n                    if (e.is(scrollIntoView))\n                        scrollTarget = e.value.clip(this.state);\n            }\n            this.viewState.update(update, scrollTarget);\n            this.bidiCache = CachedOrder.update(this.bidiCache, update.changes);\n            if (!update.empty) {\n                this.updatePlugins(update);\n                this.inputState.update(update);\n            }\n            redrawn = this.docView.update(update);\n            if (this.state.facet(styleModule) != this.styleModules)\n                this.mountStyles();\n            attrsChanged = this.updateAttrs();\n            this.showAnnouncements(transactions);\n            this.docView.updateSelection(redrawn, transactions.some(tr => tr.isUserEvent(\"select.pointer\")));\n        }\n        finally {\n            this.updateState = 0 /* UpdateState.Idle */;\n        }\n        if (update.startState.facet(theme) != update.state.facet(theme))\n            this.viewState.mustMeasureContent = true;\n        if (redrawn || attrsChanged || scrollTarget || this.viewState.mustEnforceCursorAssoc || this.viewState.mustMeasureContent)\n            this.requestMeasure();\n        if (redrawn)\n            this.docViewUpdate();\n        if (!update.empty)\n            for (let listener of this.state.facet(updateListener)) {\n                try {\n                    listener(update);\n                }\n                catch (e) {\n                    logException(this.state, e, \"update listener\");\n                }\n            }\n        if (dispatchFocus || domChange)\n            Promise.resolve().then(() => {\n                if (dispatchFocus && this.state == dispatchFocus.startState)\n                    this.dispatch(dispatchFocus);\n                if (domChange) {\n                    if (!applyDOMChange(this, domChange) && pendingKey.force)\n                        dispatchKey(this.contentDOM, pendingKey.key, pendingKey.keyCode);\n                }\n            });\n    }\n    /**\n    Reset the view to the given state. (This will cause the entire\n    document to be redrawn and all view plugins to be reinitialized,\n    so you should probably only use it when the new state isn't\n    derived from the old state. Otherwise, use\n    [`dispatch`](https://codemirror.net/6/docs/ref/#view.EditorView.dispatch) instead.)\n    */\n    setState(newState) {\n        if (this.updateState != 0 /* UpdateState.Idle */)\n            throw new Error(\"Calls to EditorView.setState are not allowed while an update is in progress\");\n        if (this.destroyed) {\n            this.viewState.state = newState;\n            return;\n        }\n        this.updateState = 2 /* UpdateState.Updating */;\n        let hadFocus = this.hasFocus;\n        try {\n            for (let plugin of this.plugins)\n                plugin.destroy(this);\n            this.viewState = new ViewState(newState);\n            this.plugins = newState.facet(viewPlugin).map(spec => new PluginInstance(spec));\n            this.pluginMap.clear();\n            for (let plugin of this.plugins)\n                plugin.update(this);\n            this.docView.destroy();\n            this.docView = new DocView(this);\n            this.inputState.ensureHandlers(this.plugins);\n            this.mountStyles();\n            this.updateAttrs();\n            this.bidiCache = [];\n        }\n        finally {\n            this.updateState = 0 /* UpdateState.Idle */;\n        }\n        if (hadFocus)\n            this.focus();\n        this.requestMeasure();\n    }\n    updatePlugins(update) {\n        let prevSpecs = update.startState.facet(viewPlugin), specs = update.state.facet(viewPlugin);\n        if (prevSpecs != specs) {\n            let newPlugins = [];\n            for (let spec of specs) {\n                let found = prevSpecs.indexOf(spec);\n                if (found < 0) {\n                    newPlugins.push(new PluginInstance(spec));\n                }\n                else {\n                    let plugin = this.plugins[found];\n                    plugin.mustUpdate = update;\n                    newPlugins.push(plugin);\n                }\n            }\n            for (let plugin of this.plugins)\n                if (plugin.mustUpdate != update)\n                    plugin.destroy(this);\n            this.plugins = newPlugins;\n            this.pluginMap.clear();\n        }\n        else {\n            for (let p of this.plugins)\n                p.mustUpdate = update;\n        }\n        for (let i = 0; i < this.plugins.length; i++)\n            this.plugins[i].update(this);\n        if (prevSpecs != specs)\n            this.inputState.ensureHandlers(this.plugins);\n    }\n    docViewUpdate() {\n        for (let plugin of this.plugins) {\n            let val = plugin.value;\n            if (val && val.docViewUpdate) {\n                try {\n                    val.docViewUpdate(this);\n                }\n                catch (e) {\n                    logException(this.state, e, \"doc view update listener\");\n                }\n            }\n        }\n    }\n    /**\n    @internal\n    */\n    measure(flush = true) {\n        if (this.destroyed)\n            return;\n        if (this.measureScheduled > -1)\n            this.win.cancelAnimationFrame(this.measureScheduled);\n        if (this.observer.delayedAndroidKey) {\n            this.measureScheduled = -1;\n            this.requestMeasure();\n            return;\n        }\n        this.measureScheduled = 0; // Prevent requestMeasure calls from scheduling another animation frame\n        if (flush)\n            this.observer.forceFlush();\n        let updated = null;\n        let sDOM = this.scrollDOM, scrollTop = sDOM.scrollTop * this.scaleY;\n        let { scrollAnchorPos, scrollAnchorHeight } = this.viewState;\n        if (Math.abs(scrollTop - this.viewState.scrollTop) > 1)\n            scrollAnchorHeight = -1;\n        this.viewState.scrollAnchorHeight = -1;\n        try {\n            for (let i = 0;; i++) {\n                if (scrollAnchorHeight < 0) {\n                    if (isScrolledToBottom(sDOM)) {\n                        scrollAnchorPos = -1;\n                        scrollAnchorHeight = this.viewState.heightMap.height;\n                    }\n                    else {\n                        let block = this.viewState.scrollAnchorAt(scrollTop);\n                        scrollAnchorPos = block.from;\n                        scrollAnchorHeight = block.top;\n                    }\n                }\n                this.updateState = 1 /* UpdateState.Measuring */;\n                let changed = this.viewState.measure(this);\n                if (!changed && !this.measureRequests.length && this.viewState.scrollTarget == null)\n                    break;\n                if (i > 5) {\n                    console.warn(this.measureRequests.length\n                        ? \"Measure loop restarted more than 5 times\"\n                        : \"Viewport failed to stabilize\");\n                    break;\n                }\n                let measuring = [];\n                // Only run measure requests in this cycle when the viewport didn't change\n                if (!(changed & 4 /* UpdateFlag.Viewport */))\n                    [this.measureRequests, measuring] = [measuring, this.measureRequests];\n                let measured = measuring.map(m => {\n                    try {\n                        return m.read(this);\n                    }\n                    catch (e) {\n                        logException(this.state, e);\n                        return BadMeasure;\n                    }\n                });\n                let update = ViewUpdate.create(this, this.state, []), redrawn = false;\n                update.flags |= changed;\n                if (!updated)\n                    updated = update;\n                else\n                    updated.flags |= changed;\n                this.updateState = 2 /* UpdateState.Updating */;\n                if (!update.empty) {\n                    this.updatePlugins(update);\n                    this.inputState.update(update);\n                    this.updateAttrs();\n                    redrawn = this.docView.update(update);\n                    if (redrawn)\n                        this.docViewUpdate();\n                }\n                for (let i = 0; i < measuring.length; i++)\n                    if (measured[i] != BadMeasure) {\n                        try {\n                            let m = measuring[i];\n                            if (m.write)\n                                m.write(measured[i], this);\n                        }\n                        catch (e) {\n                            logException(this.state, e);\n                        }\n                    }\n                if (redrawn)\n                    this.docView.updateSelection(true);\n                if (!update.viewportChanged && this.measureRequests.length == 0) {\n                    if (this.viewState.editorHeight) {\n                        if (this.viewState.scrollTarget) {\n                            this.docView.scrollIntoView(this.viewState.scrollTarget);\n                            this.viewState.scrollTarget = null;\n                            scrollAnchorHeight = -1;\n                            continue;\n                        }\n                        else {\n                            let newAnchorHeight = scrollAnchorPos < 0 ? this.viewState.heightMap.height :\n                                this.viewState.lineBlockAt(scrollAnchorPos).top;\n                            let diff = newAnchorHeight - scrollAnchorHeight;\n                            if (diff > 1 || diff < -1) {\n                                scrollTop = scrollTop + diff;\n                                sDOM.scrollTop = scrollTop / this.scaleY;\n                                scrollAnchorHeight = -1;\n                                continue;\n                            }\n                        }\n                    }\n                    break;\n                }\n            }\n        }\n        finally {\n            this.updateState = 0 /* UpdateState.Idle */;\n            this.measureScheduled = -1;\n        }\n        if (updated && !updated.empty)\n            for (let listener of this.state.facet(updateListener))\n                listener(updated);\n    }\n    /**\n    Get the CSS classes for the currently active editor themes.\n    */\n    get themeClasses() {\n        return baseThemeID + \" \" +\n            (this.state.facet(darkTheme) ? baseDarkID : baseLightID) + \" \" +\n            this.state.facet(theme);\n    }\n    updateAttrs() {\n        let editorAttrs = attrsFromFacet(this, editorAttributes, {\n            class: \"cm-editor\" + (this.hasFocus ? \" cm-focused \" : \" \") + this.themeClasses\n        });\n        let contentAttrs = {\n            spellcheck: \"false\",\n            autocorrect: \"off\",\n            autocapitalize: \"off\",\n            writingsuggestions: \"false\",\n            translate: \"no\",\n            contenteditable: !this.state.facet(editable) ? \"false\" : \"true\",\n            class: \"cm-content\",\n            style: `${browser.tabSize}: ${this.state.tabSize}`,\n            role: \"textbox\",\n            \"aria-multiline\": \"true\"\n        };\n        if (this.state.readOnly)\n            contentAttrs[\"aria-readonly\"] = \"true\";\n        attrsFromFacet(this, contentAttributes, contentAttrs);\n        let changed = this.observer.ignore(() => {\n            let changedContent = updateAttrs(this.contentDOM, this.contentAttrs, contentAttrs);\n            let changedEditor = updateAttrs(this.dom, this.editorAttrs, editorAttrs);\n            return changedContent || changedEditor;\n        });\n        this.editorAttrs = editorAttrs;\n        this.contentAttrs = contentAttrs;\n        return changed;\n    }\n    showAnnouncements(trs) {\n        let first = true;\n        for (let tr of trs)\n            for (let effect of tr.effects)\n                if (effect.is(EditorView.announce)) {\n                    if (first)\n                        this.announceDOM.textContent = \"\";\n                    first = false;\n                    let div = this.announceDOM.appendChild(document.createElement(\"div\"));\n                    div.textContent = effect.value;\n                }\n    }\n    mountStyles() {\n        this.styleModules = this.state.facet(styleModule);\n        let nonce = this.state.facet(EditorView.cspNonce);\n        styleMod.StyleModule.mount(this.root, this.styleModules.concat(baseTheme$1).reverse(), nonce ? { nonce } : undefined);\n    }\n    readMeasured() {\n        if (this.updateState == 2 /* UpdateState.Updating */)\n            throw new Error(\"Reading the editor layout isn't allowed during an update\");\n        if (this.updateState == 0 /* UpdateState.Idle */ && this.measureScheduled > -1)\n            this.measure(false);\n    }\n    /**\n    Schedule a layout measurement, optionally providing callbacks to\n    do custom DOM measuring followed by a DOM write phase. Using\n    this is preferable reading DOM layout directly from, for\n    example, an event handler, because it'll make sure measuring and\n    drawing done by other components is synchronized, avoiding\n    unnecessary DOM layout computations.\n    */\n    requestMeasure(request) {\n        if (this.measureScheduled < 0)\n            this.measureScheduled = this.win.requestAnimationFrame(() => this.measure());\n        if (request) {\n            if (this.measureRequests.indexOf(request) > -1)\n                return;\n            if (request.key != null)\n                for (let i = 0; i < this.measureRequests.length; i++) {\n                    if (this.measureRequests[i].key === request.key) {\n                        this.measureRequests[i] = request;\n                        return;\n                    }\n                }\n            this.measureRequests.push(request);\n        }\n    }\n    /**\n    Get the value of a specific plugin, if present. Note that\n    plugins that crash can be dropped from a view, so even when you\n    know you registered a given plugin, it is recommended to check\n    the return value of this method.\n    */\n    plugin(plugin) {\n        let known = this.pluginMap.get(plugin);\n        if (known === undefined || known && known.spec != plugin)\n            this.pluginMap.set(plugin, known = this.plugins.find(p => p.spec == plugin) || null);\n        return known && known.update(this).value;\n    }\n    /**\n    The top position of the document, in screen coordinates. This\n    may be negative when the editor is scrolled down. Points\n    directly to the top of the first line, not above the padding.\n    */\n    get documentTop() {\n        return this.contentDOM.getBoundingClientRect().top + this.viewState.paddingTop;\n    }\n    /**\n    Reports the padding above and below the document.\n    */\n    get documentPadding() {\n        return { top: this.viewState.paddingTop, bottom: this.viewState.paddingBottom };\n    }\n    /**\n    If the editor is transformed with CSS, this provides the scale\n    along the X axis. Otherwise, it will just be 1. Note that\n    transforms other than translation and scaling are not supported.\n    */\n    get scaleX() { return this.viewState.scaleX; }\n    /**\n    Provide the CSS transformed scale along the Y axis.\n    */\n    get scaleY() { return this.viewState.scaleY; }\n    /**\n    Find the text line or block widget at the given vertical\n    position (which is interpreted as relative to the [top of the\n    document](https://codemirror.net/6/docs/ref/#view.EditorView.documentTop)).\n    */\n    elementAtHeight(height) {\n        this.readMeasured();\n        return this.viewState.elementAtHeight(height);\n    }\n    /**\n    Find the line block (see\n    [`lineBlockAt`](https://codemirror.net/6/docs/ref/#view.EditorView.lineBlockAt) at the given\n    height, again interpreted relative to the [top of the\n    document](https://codemirror.net/6/docs/ref/#view.EditorView.documentTop).\n    */\n    lineBlockAtHeight(height) {\n        this.readMeasured();\n        return this.viewState.lineBlockAtHeight(height);\n    }\n    /**\n    Get the extent and vertical position of all [line\n    blocks](https://codemirror.net/6/docs/ref/#view.EditorView.lineBlockAt) in the viewport. Positions\n    are relative to the [top of the\n    document](https://codemirror.net/6/docs/ref/#view.EditorView.documentTop);\n    */\n    get viewportLineBlocks() {\n        return this.viewState.viewportLines;\n    }\n    /**\n    Find the line block around the given document position. A line\n    block is a range delimited on both sides by either a\n    non-[hidden](https://codemirror.net/6/docs/ref/#view.Decoration^replace) line break, or the\n    start/end of the document. It will usually just hold a line of\n    text, but may be broken into multiple textblocks by block\n    widgets.\n    */\n    lineBlockAt(pos) {\n        return this.viewState.lineBlockAt(pos);\n    }\n    /**\n    The editor's total content height.\n    */\n    get contentHeight() {\n        return this.viewState.contentHeight;\n    }\n    /**\n    Move a cursor position by [grapheme\n    cluster](https://codemirror.net/6/docs/ref/#state.findClusterBreak). `forward` determines whether\n    the motion is away from the line start, or towards it. In\n    bidirectional text, the line is traversed in visual order, using\n    the editor's [text direction](https://codemirror.net/6/docs/ref/#view.EditorView.textDirection).\n    When the start position was the last one on the line, the\n    returned position will be across the line break. If there is no\n    further line, the original position is returned.\n    \n    By default, this method moves over a single cluster. The\n    optional `by` argument can be used to move across more. It will\n    be called with the first cluster as argument, and should return\n    a predicate that determines, for each subsequent cluster,\n    whether it should also be moved over.\n    */\n    moveByChar(start, forward, by) {\n        return skipAtoms(this, start, moveByChar(this, start, forward, by));\n    }\n    /**\n    Move a cursor position across the next group of either\n    [letters](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer) or non-letter\n    non-whitespace characters.\n    */\n    moveByGroup(start, forward) {\n        return skipAtoms(this, start, moveByChar(this, start, forward, initial => byGroup(this, start.head, initial)));\n    }\n    /**\n    Get the cursor position visually at the start or end of a line.\n    Note that this may differ from the _logical_ position at its\n    start or end (which is simply at `line.from`/`line.to`) if text\n    at the start or end goes against the line's base text direction.\n    */\n    visualLineSide(line, end) {\n        let order = this.bidiSpans(line), dir = this.textDirectionAt(line.from);\n        let span = order[end ? order.length - 1 : 0];\n        return state.EditorSelection.cursor(span.side(end, dir) + line.from, span.forward(!end, dir) ? 1 : -1);\n    }\n    /**\n    Move to the next line boundary in the given direction. If\n    `includeWrap` is true, line wrapping is on, and there is a\n    further wrap point on the current line, the wrap point will be\n    returned. Otherwise this function will return the start or end\n    of the line.\n    */\n    moveToLineBoundary(start, forward, includeWrap = true) {\n        return moveToLineBoundary(this, start, forward, includeWrap);\n    }\n    /**\n    Move a cursor position vertically. When `distance` isn't given,\n    it defaults to moving to the next line (including wrapped\n    lines). Otherwise, `distance` should provide a positive distance\n    in pixels.\n    \n    When `start` has a\n    [`goalColumn`](https://codemirror.net/6/docs/ref/#state.SelectionRange.goalColumn), the vertical\n    motion will use that as a target horizontal position. Otherwise,\n    the cursor's own horizontal position is used. The returned\n    cursor will have its goal column set to whichever column was\n    used.\n    */\n    moveVertically(start, forward, distance) {\n        return skipAtoms(this, start, moveVertically(this, start, forward, distance));\n    }\n    /**\n    Find the DOM parent node and offset (child offset if `node` is\n    an element, character offset when it is a text node) at the\n    given document position.\n    \n    Note that for positions that aren't currently in\n    `visibleRanges`, the resulting DOM position isn't necessarily\n    meaningful (it may just point before or after a placeholder\n    element).\n    */\n    domAtPos(pos) {\n        return this.docView.domAtPos(pos);\n    }\n    /**\n    Find the document position at the given DOM node. Can be useful\n    for associating positions with DOM events. Will raise an error\n    when `node` isn't part of the editor content.\n    */\n    posAtDOM(node, offset = 0) {\n        return this.docView.posFromDOM(node, offset);\n    }\n    posAtCoords(coords, precise = true) {\n        this.readMeasured();\n        return posAtCoords(this, coords, precise);\n    }\n    /**\n    Get the screen coordinates at the given document position.\n    `side` determines whether the coordinates are based on the\n    element before (-1) or after (1) the position (if no element is\n    available on the given side, the method will transparently use\n    another strategy to get reasonable coordinates).\n    */\n    coordsAtPos(pos, side = 1) {\n        this.readMeasured();\n        let rect = this.docView.coordsAt(pos, side);\n        if (!rect || rect.left == rect.right)\n            return rect;\n        let line = this.state.doc.lineAt(pos), order = this.bidiSpans(line);\n        let span = order[BidiSpan.find(order, pos - line.from, -1, side)];\n        return flattenRect(rect, (span.dir == exports.Direction.LTR) == (side > 0));\n    }\n    /**\n    Return the rectangle around a given character. If `pos` does not\n    point in front of a character that is in the viewport and\n    rendered (i.e. not replaced, not a line break), this will return\n    null. For space characters that are a line wrap point, this will\n    return the position before the line break.\n    */\n    coordsForChar(pos) {\n        this.readMeasured();\n        return this.docView.coordsForChar(pos);\n    }\n    /**\n    The default width of a character in the editor. May not\n    accurately reflect the width of all characters (given variable\n    width fonts or styling of invididual ranges).\n    */\n    get defaultCharacterWidth() { return this.viewState.heightOracle.charWidth; }\n    /**\n    The default height of a line in the editor. May not be accurate\n    for all lines.\n    */\n    get defaultLineHeight() { return this.viewState.heightOracle.lineHeight; }\n    /**\n    The text direction\n    ([`direction`](https://developer.mozilla.org/en-US/docs/Web/CSS/direction)\n    CSS property) of the editor's content element.\n    */\n    get textDirection() { return this.viewState.defaultTextDirection; }\n    /**\n    Find the text direction of the block at the given position, as\n    assigned by CSS. If\n    [`perLineTextDirection`](https://codemirror.net/6/docs/ref/#view.EditorView^perLineTextDirection)\n    isn't enabled, or the given position is outside of the viewport,\n    this will always return the same as\n    [`textDirection`](https://codemirror.net/6/docs/ref/#view.EditorView.textDirection). Note that\n    this may trigger a DOM layout.\n    */\n    textDirectionAt(pos) {\n        let perLine = this.state.facet(perLineTextDirection);\n        if (!perLine || pos < this.viewport.from || pos > this.viewport.to)\n            return this.textDirection;\n        this.readMeasured();\n        return this.docView.textDirectionAt(pos);\n    }\n    /**\n    Whether this editor [wraps lines](https://codemirror.net/6/docs/ref/#view.EditorView.lineWrapping)\n    (as determined by the\n    [`white-space`](https://developer.mozilla.org/en-US/docs/Web/CSS/white-space)\n    CSS property of its content element).\n    */\n    get lineWrapping() { return this.viewState.heightOracle.lineWrapping; }\n    /**\n    Returns the bidirectional text structure of the given line\n    (which should be in the current document) as an array of span\n    objects. The order of these spans matches the [text\n    direction](https://codemirror.net/6/docs/ref/#view.EditorView.textDirection)—if that is\n    left-to-right, the leftmost spans come first, otherwise the\n    rightmost spans come first.\n    */\n    bidiSpans(line) {\n        if (line.length > MaxBidiLine)\n            return trivialOrder(line.length);\n        let dir = this.textDirectionAt(line.from), isolates;\n        for (let entry of this.bidiCache) {\n            if (entry.from == line.from && entry.dir == dir &&\n                (entry.fresh || isolatesEq(entry.isolates, isolates = getIsolatedRanges(this, line))))\n                return entry.order;\n        }\n        if (!isolates)\n            isolates = getIsolatedRanges(this, line);\n        let order = computeOrder(line.text, dir, isolates);\n        this.bidiCache.push(new CachedOrder(line.from, line.to, dir, isolates, true, order));\n        return order;\n    }\n    /**\n    Check whether the editor has focus.\n    */\n    get hasFocus() {\n        var _a;\n        // Safari return false for hasFocus when the context menu is open\n        // or closing, which leads us to ignore selection changes from the\n        // context menu because it looks like the editor isn't focused.\n        // This kludges around that.\n        return (this.dom.ownerDocument.hasFocus() || browser.safari && ((_a = this.inputState) === null || _a === void 0 ? void 0 : _a.lastContextMenu) > Date.now() - 3e4) &&\n            this.root.activeElement == this.contentDOM;\n    }\n    /**\n    Put focus on the editor.\n    */\n    focus() {\n        this.observer.ignore(() => {\n            focusPreventScroll(this.contentDOM);\n            this.docView.updateSelection();\n        });\n    }\n    /**\n    Update the [root](https://codemirror.net/6/docs/ref/##view.EditorViewConfig.root) in which the editor lives. This is only\n    necessary when moving the editor's existing DOM to a new window or shadow root.\n    */\n    setRoot(root) {\n        if (this._root != root) {\n            this._root = root;\n            this.observer.setWindow((root.nodeType == 9 ? root : root.ownerDocument).defaultView || window);\n            this.mountStyles();\n        }\n    }\n    /**\n    Clean up this editor view, removing its element from the\n    document, unregistering event handlers, and notifying\n    plugins. The view instance can no longer be used after\n    calling this.\n    */\n    destroy() {\n        if (this.root.activeElement == this.contentDOM)\n            this.contentDOM.blur();\n        for (let plugin of this.plugins)\n            plugin.destroy(this);\n        this.plugins = [];\n        this.inputState.destroy();\n        this.docView.destroy();\n        this.dom.remove();\n        this.observer.destroy();\n        if (this.measureScheduled > -1)\n            this.win.cancelAnimationFrame(this.measureScheduled);\n        this.destroyed = true;\n    }\n    /**\n    Returns an effect that can be\n    [added](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects) to a transaction to\n    cause it to scroll the given position or range into view.\n    */\n    static scrollIntoView(pos, options = {}) {\n        return scrollIntoView.of(new ScrollTarget(typeof pos == \"number\" ? state.EditorSelection.cursor(pos) : pos, options.y, options.x, options.yMargin, options.xMargin));\n    }\n    /**\n    Return an effect that resets the editor to its current (at the\n    time this method was called) scroll position. Note that this\n    only affects the editor's own scrollable element, not parents.\n    See also\n    [`EditorViewConfig.scrollTo`](https://codemirror.net/6/docs/ref/#view.EditorViewConfig.scrollTo).\n    \n    The effect should be used with a document identical to the one\n    it was created for. Failing to do so is not an error, but may\n    not scroll to the expected position. You can\n    [map](https://codemirror.net/6/docs/ref/#state.StateEffect.map) the effect to account for changes.\n    */\n    scrollSnapshot() {\n        let { scrollTop, scrollLeft } = this.scrollDOM;\n        let ref = this.viewState.scrollAnchorAt(scrollTop);\n        return scrollIntoView.of(new ScrollTarget(state.EditorSelection.cursor(ref.from), \"start\", \"start\", ref.top - scrollTop, scrollLeft, true));\n    }\n    /**\n    Enable or disable tab-focus mode, which disables key bindings\n    for Tab and Shift-Tab, letting the browser's default\n    focus-changing behavior go through instead. This is useful to\n    prevent trapping keyboard users in your editor.\n    \n    Without argument, this toggles the mode. With a boolean, it\n    enables (true) or disables it (false). Given a number, it\n    temporarily enables the mode until that number of milliseconds\n    have passed or another non-Tab key is pressed.\n    */\n    setTabFocusMode(to) {\n        if (to == null)\n            this.inputState.tabFocusMode = this.inputState.tabFocusMode < 0 ? 0 : -1;\n        else if (typeof to == \"boolean\")\n            this.inputState.tabFocusMode = to ? 0 : -1;\n        else if (this.inputState.tabFocusMode != 0)\n            this.inputState.tabFocusMode = Date.now() + to;\n    }\n    /**\n    Returns an extension that can be used to add DOM event handlers.\n    The value should be an object mapping event names to handler\n    functions. For any given event, such functions are ordered by\n    extension precedence, and the first handler to return true will\n    be assumed to have handled that event, and no other handlers or\n    built-in behavior will be activated for it. These are registered\n    on the [content element](https://codemirror.net/6/docs/ref/#view.EditorView.contentDOM), except\n    for `scroll` handlers, which will be called any time the\n    editor's [scroll element](https://codemirror.net/6/docs/ref/#view.EditorView.scrollDOM) or one of\n    its parent nodes is scrolled.\n    */\n    static domEventHandlers(handlers) {\n        return ViewPlugin.define(() => ({}), { eventHandlers: handlers });\n    }\n    /**\n    Create an extension that registers DOM event observers. Contrary\n    to event [handlers](https://codemirror.net/6/docs/ref/#view.EditorView^domEventHandlers),\n    observers can't be prevented from running by a higher-precedence\n    handler returning true. They also don't prevent other handlers\n    and observers from running when they return true, and should not\n    call `preventDefault`.\n    */\n    static domEventObservers(observers) {\n        return ViewPlugin.define(() => ({}), { eventObservers: observers });\n    }\n    /**\n    Create a theme extension. The first argument can be a\n    [`style-mod`](https://github.com/marijnh/style-mod#documentation)\n    style spec providing the styles for the theme. These will be\n    prefixed with a generated class for the style.\n    \n    Because the selectors will be prefixed with a scope class, rule\n    that directly match the editor's [wrapper\n    element](https://codemirror.net/6/docs/ref/#view.EditorView.dom)—to which the scope class will be\n    added—need to be explicitly differentiated by adding an `&` to\n    the selector for that element—for example\n    `&.cm-focused`.\n    \n    When `dark` is set to true, the theme will be marked as dark,\n    which will cause the `&dark` rules from [base\n    themes](https://codemirror.net/6/docs/ref/#view.EditorView^baseTheme) to be used (as opposed to\n    `&light` when a light theme is active).\n    */\n    static theme(spec, options) {\n        let prefix = styleMod.StyleModule.newName();\n        let result = [theme.of(prefix), styleModule.of(buildTheme(`.${prefix}`, spec))];\n        if (options && options.dark)\n            result.push(darkTheme.of(true));\n        return result;\n    }\n    /**\n    Create an extension that adds styles to the base theme. Like\n    with [`theme`](https://codemirror.net/6/docs/ref/#view.EditorView^theme), use `&` to indicate the\n    place of the editor wrapper element when directly targeting\n    that. You can also use `&dark` or `&light` instead to only\n    target editors with a dark or light theme.\n    */\n    static baseTheme(spec) {\n        return state.Prec.lowest(styleModule.of(buildTheme(\".\" + baseThemeID, spec, lightDarkIDs)));\n    }\n    /**\n    Retrieve an editor view instance from the view's DOM\n    representation.\n    */\n    static findFromDOM(dom) {\n        var _a;\n        let content = dom.querySelector(\".cm-content\");\n        let cView = content && ContentView.get(content) || ContentView.get(dom);\n        return ((_a = cView === null || cView === void 0 ? void 0 : cView.rootView) === null || _a === void 0 ? void 0 : _a.view) || null;\n    }\n}\n/**\nFacet to add a [style\nmodule](https://github.com/marijnh/style-mod#documentation) to\nan editor view. The view will ensure that the module is\nmounted in its [document\nroot](https://codemirror.net/6/docs/ref/#view.EditorView.constructor^config.root).\n*/\nEditorView.styleModule = styleModule;\n/**\nAn input handler can override the way changes to the editable\nDOM content are handled. Handlers are passed the document\npositions between which the change was found, and the new\ncontent. When one returns true, no further input handlers are\ncalled and the default behavior is prevented.\n\nThe `insert` argument can be used to get the default transaction\nthat would be applied for this input. This can be useful when\ndispatching the custom behavior as a separate transaction.\n*/\nEditorView.inputHandler = inputHandler;\n/**\nFunctions provided in this facet will be used to transform text\npasted or dropped into the editor.\n*/\nEditorView.clipboardInputFilter = clipboardInputFilter;\n/**\nTransform text copied or dragged from the editor.\n*/\nEditorView.clipboardOutputFilter = clipboardOutputFilter;\n/**\nScroll handlers can override how things are scrolled into view.\nIf they return `true`, no further handling happens for the\nscrolling. If they return false, the default scroll behavior is\napplied. Scroll handlers should never initiate editor updates.\n*/\nEditorView.scrollHandler = scrollHandler;\n/**\nThis facet can be used to provide functions that create effects\nto be dispatched when the editor's focus state changes.\n*/\nEditorView.focusChangeEffect = focusChangeEffect;\n/**\nBy default, the editor assumes all its content has the same\n[text direction](https://codemirror.net/6/docs/ref/#view.Direction). Configure this with a `true`\nvalue to make it read the text direction of every (rendered)\nline separately.\n*/\nEditorView.perLineTextDirection = perLineTextDirection;\n/**\nAllows you to provide a function that should be called when the\nlibrary catches an exception from an extension (mostly from view\nplugins, but may be used by other extensions to route exceptions\nfrom user-code-provided callbacks). This is mostly useful for\ndebugging and logging. See [`logException`](https://codemirror.net/6/docs/ref/#view.logException).\n*/\nEditorView.exceptionSink = exceptionSink;\n/**\nA facet that can be used to register a function to be called\nevery time the view updates.\n*/\nEditorView.updateListener = updateListener;\n/**\nFacet that controls whether the editor content DOM is editable.\nWhen its highest-precedence value is `false`, the element will\nnot have its `contenteditable` attribute set. (Note that this\ndoesn't affect API calls that change the editor content, even\nwhen those are bound to keys or buttons. See the\n[`readOnly`](https://codemirror.net/6/docs/ref/#state.EditorState.readOnly) facet for that.)\n*/\nEditorView.editable = editable;\n/**\nAllows you to influence the way mouse selection happens. The\nfunctions in this facet will be called for a `mousedown` event\non the editor, and can return an object that overrides the way a\nselection is computed from that mouse click or drag.\n*/\nEditorView.mouseSelectionStyle = mouseSelectionStyle;\n/**\nFacet used to configure whether a given selection drag event\nshould move or copy the selection. The given predicate will be\ncalled with the `mousedown` event, and can return `true` when\nthe drag should move the content.\n*/\nEditorView.dragMovesSelection = dragMovesSelection$1;\n/**\nFacet used to configure whether a given selecting click adds a\nnew range to the existing selection or replaces it entirely. The\ndefault behavior is to check `event.metaKey` on macOS, and\n`event.ctrlKey` elsewhere.\n*/\nEditorView.clickAddsSelectionRange = clickAddsSelectionRange;\n/**\nA facet that determines which [decorations](https://codemirror.net/6/docs/ref/#view.Decoration)\nare shown in the view. Decorations can be provided in two\nways—directly, or via a function that takes an editor view.\n\nOnly decoration sets provided directly are allowed to influence\nthe editor's vertical layout structure. The ones provided as\nfunctions are called _after_ the new viewport has been computed,\nand thus **must not** introduce block widgets or replacing\ndecorations that cover line breaks.\n\nIf you want decorated ranges to behave like atomic units for\ncursor motion and deletion purposes, also provide the range set\ncontaining the decorations to\n[`EditorView.atomicRanges`](https://codemirror.net/6/docs/ref/#view.EditorView^atomicRanges).\n*/\nEditorView.decorations = decorations;\n/**\nFacet that works much like\n[`decorations`](https://codemirror.net/6/docs/ref/#view.EditorView^decorations), but puts its\ninputs at the very bottom of the precedence stack, meaning mark\ndecorations provided here will only be split by other, partially\noverlapping \\`outerDecorations\\` ranges, and wrap around all\nregular decorations. Use this for mark elements that should, as\nmuch as possible, remain in one piece.\n*/\nEditorView.outerDecorations = outerDecorations;\n/**\nUsed to provide ranges that should be treated as atoms as far as\ncursor motion is concerned. This causes methods like\n[`moveByChar`](https://codemirror.net/6/docs/ref/#view.EditorView.moveByChar) and\n[`moveVertically`](https://codemirror.net/6/docs/ref/#view.EditorView.moveVertically) (and the\ncommands built on top of them) to skip across such regions when\na selection endpoint would enter them. This does _not_ prevent\ndirect programmatic [selection\nupdates](https://codemirror.net/6/docs/ref/#state.TransactionSpec.selection) from moving into such\nregions.\n*/\nEditorView.atomicRanges = atomicRanges;\n/**\nWhen range decorations add a `unicode-bidi: isolate` style, they\nshould also include a\n[`bidiIsolate`](https://codemirror.net/6/docs/ref/#view.MarkDecorationSpec.bidiIsolate) property\nin their decoration spec, and be exposed through this facet, so\nthat the editor can compute the proper text order. (Other values\nfor `unicode-bidi`, except of course `normal`, are not\nsupported.)\n*/\nEditorView.bidiIsolatedRanges = bidiIsolatedRanges;\n/**\nFacet that allows extensions to provide additional scroll\nmargins (space around the sides of the scrolling element that\nshould be considered invisible). This can be useful when the\nplugin introduces elements that cover part of that element (for\nexample a horizontally fixed gutter).\n*/\nEditorView.scrollMargins = scrollMargins;\n/**\nThis facet records whether a dark theme is active. The extension\nreturned by [`theme`](https://codemirror.net/6/docs/ref/#view.EditorView^theme) automatically\nincludes an instance of this when the `dark` option is set to\ntrue.\n*/\nEditorView.darkTheme = darkTheme;\n/**\nProvides a Content Security Policy nonce to use when creating\nthe style sheets for the editor. Holds the empty string when no\nnonce has been provided.\n*/\nEditorView.cspNonce = state.Facet.define({ combine: values => values.length ? values[0] : \"\" });\n/**\nFacet that provides additional DOM attributes for the editor's\neditable DOM element.\n*/\nEditorView.contentAttributes = contentAttributes;\n/**\nFacet that provides DOM attributes for the editor's outer\nelement.\n*/\nEditorView.editorAttributes = editorAttributes;\n/**\nAn extension that enables line wrapping in the editor (by\nsetting CSS `white-space` to `pre-wrap` in the content).\n*/\nEditorView.lineWrapping = EditorView.contentAttributes.of({ \"class\": \"cm-lineWrapping\" });\n/**\nState effect used to include screen reader announcements in a\ntransaction. These will be added to the DOM in a visually hidden\nelement with `aria-live=\"polite\"` set, and should be used to\ndescribe effects that are visually obvious but may not be\nnoticed by screen reader users (such as moving to the next\nsearch match).\n*/\nEditorView.announce = state.StateEffect.define();\n// Maximum line length for which we compute accurate bidi info\nconst MaxBidiLine = 4096;\nconst BadMeasure = {};\nclass CachedOrder {\n    constructor(from, to, dir, isolates, fresh, order) {\n        this.from = from;\n        this.to = to;\n        this.dir = dir;\n        this.isolates = isolates;\n        this.fresh = fresh;\n        this.order = order;\n    }\n    static update(cache, changes) {\n        if (changes.empty && !cache.some(c => c.fresh))\n            return cache;\n        let result = [], lastDir = cache.length ? cache[cache.length - 1].dir : exports.Direction.LTR;\n        for (let i = Math.max(0, cache.length - 10); i < cache.length; i++) {\n            let entry = cache[i];\n            if (entry.dir == lastDir && !changes.touchesRange(entry.from, entry.to))\n                result.push(new CachedOrder(changes.mapPos(entry.from, 1), changes.mapPos(entry.to, -1), entry.dir, entry.isolates, false, entry.order));\n        }\n        return result;\n    }\n}\nfunction attrsFromFacet(view, facet, base) {\n    for (let sources = view.state.facet(facet), i = sources.length - 1; i >= 0; i--) {\n        let source = sources[i], value = typeof source == \"function\" ? source(view) : source;\n        if (value)\n            combineAttrs(value, base);\n    }\n    return base;\n}\n\nconst currentPlatform = browser.mac ? \"mac\" : browser.windows ? \"win\" : browser.linux ? \"linux\" : \"key\";\nfunction normalizeKeyName(name, platform) {\n    const parts = name.split(/-(?!$)/);\n    let result = parts[parts.length - 1];\n    if (result == \"Space\")\n        result = \" \";\n    let alt, ctrl, shift, meta;\n    for (let i = 0; i < parts.length - 1; ++i) {\n        const mod = parts[i];\n        if (/^(cmd|meta|m)$/i.test(mod))\n            meta = true;\n        else if (/^a(lt)?$/i.test(mod))\n            alt = true;\n        else if (/^(c|ctrl|control)$/i.test(mod))\n            ctrl = true;\n        else if (/^s(hift)?$/i.test(mod))\n            shift = true;\n        else if (/^mod$/i.test(mod)) {\n            if (platform == \"mac\")\n                meta = true;\n            else\n                ctrl = true;\n        }\n        else\n            throw new Error(\"Unrecognized modifier name: \" + mod);\n    }\n    if (alt)\n        result = \"Alt-\" + result;\n    if (ctrl)\n        result = \"Ctrl-\" + result;\n    if (meta)\n        result = \"Meta-\" + result;\n    if (shift)\n        result = \"Shift-\" + result;\n    return result;\n}\nfunction modifiers(name, event, shift) {\n    if (event.altKey)\n        name = \"Alt-\" + name;\n    if (event.ctrlKey)\n        name = \"Ctrl-\" + name;\n    if (event.metaKey)\n        name = \"Meta-\" + name;\n    if (shift !== false && event.shiftKey)\n        name = \"Shift-\" + name;\n    return name;\n}\nconst handleKeyEvents = state.Prec.default(EditorView.domEventHandlers({\n    keydown(event, view) {\n        return runHandlers(getKeymap(view.state), event, view, \"editor\");\n    }\n}));\n/**\nFacet used for registering keymaps.\n\nYou can add multiple keymaps to an editor. Their priorities\ndetermine their precedence (the ones specified early or with high\npriority get checked first). When a handler has returned `true`\nfor a given key, no further handlers are called.\n*/\nconst keymap = state.Facet.define({ enables: handleKeyEvents });\nconst Keymaps = new WeakMap();\n// This is hidden behind an indirection, rather than directly computed\n// by the facet, to keep internal types out of the facet's type.\nfunction getKeymap(state) {\n    let bindings = state.facet(keymap);\n    let map = Keymaps.get(bindings);\n    if (!map)\n        Keymaps.set(bindings, map = buildKeymap(bindings.reduce((a, b) => a.concat(b), [])));\n    return map;\n}\n/**\nRun the key handlers registered for a given scope. The event\nobject should be a `\"keydown\"` event. Returns true if any of the\nhandlers handled it.\n*/\nfunction runScopeHandlers(view, event, scope) {\n    return runHandlers(getKeymap(view.state), event, view, scope);\n}\nlet storedPrefix = null;\nconst PrefixTimeout = 4000;\nfunction buildKeymap(bindings, platform = currentPlatform) {\n    let bound = Object.create(null);\n    let isPrefix = Object.create(null);\n    let checkPrefix = (name, is) => {\n        let current = isPrefix[name];\n        if (current == null)\n            isPrefix[name] = is;\n        else if (current != is)\n            throw new Error(\"Key binding \" + name + \" is used both as a regular binding and as a multi-stroke prefix\");\n    };\n    let add = (scope, key, command, preventDefault, stopPropagation) => {\n        var _a, _b;\n        let scopeObj = bound[scope] || (bound[scope] = Object.create(null));\n        let parts = key.split(/ (?!$)/).map(k => normalizeKeyName(k, platform));\n        for (let i = 1; i < parts.length; i++) {\n            let prefix = parts.slice(0, i).join(\" \");\n            checkPrefix(prefix, true);\n            if (!scopeObj[prefix])\n                scopeObj[prefix] = {\n                    preventDefault: true,\n                    stopPropagation: false,\n                    run: [(view) => {\n                            let ourObj = storedPrefix = { view, prefix, scope };\n                            setTimeout(() => { if (storedPrefix == ourObj)\n                                storedPrefix = null; }, PrefixTimeout);\n                            return true;\n                        }]\n                };\n        }\n        let full = parts.join(\" \");\n        checkPrefix(full, false);\n        let binding = scopeObj[full] || (scopeObj[full] = {\n            preventDefault: false,\n            stopPropagation: false,\n            run: ((_b = (_a = scopeObj._any) === null || _a === void 0 ? void 0 : _a.run) === null || _b === void 0 ? void 0 : _b.slice()) || []\n        });\n        if (command)\n            binding.run.push(command);\n        if (preventDefault)\n            binding.preventDefault = true;\n        if (stopPropagation)\n            binding.stopPropagation = true;\n    };\n    for (let b of bindings) {\n        let scopes = b.scope ? b.scope.split(\" \") : [\"editor\"];\n        if (b.any)\n            for (let scope of scopes) {\n                let scopeObj = bound[scope] || (bound[scope] = Object.create(null));\n                if (!scopeObj._any)\n                    scopeObj._any = { preventDefault: false, stopPropagation: false, run: [] };\n                let { any } = b;\n                for (let key in scopeObj)\n                    scopeObj[key].run.push(view => any(view, currentKeyEvent));\n            }\n        let name = b[platform] || b.key;\n        if (!name)\n            continue;\n        for (let scope of scopes) {\n            add(scope, name, b.run, b.preventDefault, b.stopPropagation);\n            if (b.shift)\n                add(scope, \"Shift-\" + name, b.shift, b.preventDefault, b.stopPropagation);\n        }\n    }\n    return bound;\n}\nlet currentKeyEvent = null;\nfunction runHandlers(map, event, view, scope) {\n    currentKeyEvent = event;\n    let name = w3cKeyname.keyName(event);\n    let charCode = state.codePointAt(name, 0), isChar = state.codePointSize(charCode) == name.length && name != \" \";\n    let prefix = \"\", handled = false, prevented = false, stopPropagation = false;\n    if (storedPrefix && storedPrefix.view == view && storedPrefix.scope == scope) {\n        prefix = storedPrefix.prefix + \" \";\n        if (modifierCodes.indexOf(event.keyCode) < 0) {\n            prevented = true;\n            storedPrefix = null;\n        }\n    }\n    let ran = new Set;\n    let runFor = (binding) => {\n        if (binding) {\n            for (let cmd of binding.run)\n                if (!ran.has(cmd)) {\n                    ran.add(cmd);\n                    if (cmd(view)) {\n                        if (binding.stopPropagation)\n                            stopPropagation = true;\n                        return true;\n                    }\n                }\n            if (binding.preventDefault) {\n                if (binding.stopPropagation)\n                    stopPropagation = true;\n                prevented = true;\n            }\n        }\n        return false;\n    };\n    let scopeObj = map[scope], baseName, shiftName;\n    if (scopeObj) {\n        if (runFor(scopeObj[prefix + modifiers(name, event, !isChar)])) {\n            handled = true;\n        }\n        else if (isChar && (event.altKey || event.metaKey || event.ctrlKey) &&\n            // Ctrl-Alt may be used for AltGr on Windows\n            !(browser.windows && event.ctrlKey && event.altKey) &&\n            (baseName = w3cKeyname.base[event.keyCode]) && baseName != name) {\n            if (runFor(scopeObj[prefix + modifiers(baseName, event, true)])) {\n                handled = true;\n            }\n            else if (event.shiftKey && (shiftName = w3cKeyname.shift[event.keyCode]) != name && shiftName != baseName &&\n                runFor(scopeObj[prefix + modifiers(shiftName, event, false)])) {\n                handled = true;\n            }\n        }\n        else if (isChar && event.shiftKey &&\n            runFor(scopeObj[prefix + modifiers(name, event, true)])) {\n            handled = true;\n        }\n        if (!handled && runFor(scopeObj._any))\n            handled = true;\n    }\n    if (prevented)\n        handled = true;\n    if (handled && stopPropagation)\n        event.stopPropagation();\n    currentKeyEvent = null;\n    return handled;\n}\n\n/**\nImplementation of [`LayerMarker`](https://codemirror.net/6/docs/ref/#view.LayerMarker) that creates\na rectangle at a given set of coordinates.\n*/\nclass RectangleMarker {\n    /**\n    Create a marker with the given class and dimensions. If `width`\n    is null, the DOM element will get no width style.\n    */\n    constructor(className, \n    /**\n    The left position of the marker (in pixels, document-relative).\n    */\n    left, \n    /**\n    The top position of the marker.\n    */\n    top, \n    /**\n    The width of the marker, or null if it shouldn't get a width assigned.\n    */\n    width, \n    /**\n    The height of the marker.\n    */\n    height) {\n        this.className = className;\n        this.left = left;\n        this.top = top;\n        this.width = width;\n        this.height = height;\n    }\n    draw() {\n        let elt = document.createElement(\"div\");\n        elt.className = this.className;\n        this.adjust(elt);\n        return elt;\n    }\n    update(elt, prev) {\n        if (prev.className != this.className)\n            return false;\n        this.adjust(elt);\n        return true;\n    }\n    adjust(elt) {\n        elt.style.left = this.left + \"px\";\n        elt.style.top = this.top + \"px\";\n        if (this.width != null)\n            elt.style.width = this.width + \"px\";\n        elt.style.height = this.height + \"px\";\n    }\n    eq(p) {\n        return this.left == p.left && this.top == p.top && this.width == p.width && this.height == p.height &&\n            this.className == p.className;\n    }\n    /**\n    Create a set of rectangles for the given selection range,\n    assigning them theclass`className`. Will create a single\n    rectangle for empty ranges, and a set of selection-style\n    rectangles covering the range's content (in a bidi-aware\n    way) for non-empty ones.\n    */\n    static forRange(view, className, range) {\n        if (range.empty) {\n            let pos = view.coordsAtPos(range.head, range.assoc || 1);\n            if (!pos)\n                return [];\n            let base = getBase(view);\n            return [new RectangleMarker(className, pos.left - base.left, pos.top - base.top, null, pos.bottom - pos.top)];\n        }\n        else {\n            return rectanglesForRange(view, className, range);\n        }\n    }\n}\nfunction getBase(view) {\n    let rect = view.scrollDOM.getBoundingClientRect();\n    let left = view.textDirection == exports.Direction.LTR ? rect.left : rect.right - view.scrollDOM.clientWidth * view.scaleX;\n    return { left: left - view.scrollDOM.scrollLeft * view.scaleX, top: rect.top - view.scrollDOM.scrollTop * view.scaleY };\n}\nfunction wrappedLine(view, pos, side, inside) {\n    let coords = view.coordsAtPos(pos, side * 2);\n    if (!coords)\n        return inside;\n    let editorRect = view.dom.getBoundingClientRect();\n    let y = (coords.top + coords.bottom) / 2;\n    let left = view.posAtCoords({ x: editorRect.left + 1, y });\n    let right = view.posAtCoords({ x: editorRect.right - 1, y });\n    if (left == null || right == null)\n        return inside;\n    return { from: Math.max(inside.from, Math.min(left, right)), to: Math.min(inside.to, Math.max(left, right)) };\n}\nfunction rectanglesForRange(view, className, range) {\n    if (range.to <= view.viewport.from || range.from >= view.viewport.to)\n        return [];\n    let from = Math.max(range.from, view.viewport.from), to = Math.min(range.to, view.viewport.to);\n    let ltr = view.textDirection == exports.Direction.LTR;\n    let content = view.contentDOM, contentRect = content.getBoundingClientRect(), base = getBase(view);\n    let lineElt = content.querySelector(\".cm-line\"), lineStyle = lineElt && window.getComputedStyle(lineElt);\n    let leftSide = contentRect.left +\n        (lineStyle ? parseInt(lineStyle.paddingLeft) + Math.min(0, parseInt(lineStyle.textIndent)) : 0);\n    let rightSide = contentRect.right - (lineStyle ? parseInt(lineStyle.paddingRight) : 0);\n    let startBlock = blockAt(view, from), endBlock = blockAt(view, to);\n    let visualStart = startBlock.type == exports.BlockType.Text ? startBlock : null;\n    let visualEnd = endBlock.type == exports.BlockType.Text ? endBlock : null;\n    if (visualStart && (view.lineWrapping || startBlock.widgetLineBreaks))\n        visualStart = wrappedLine(view, from, 1, visualStart);\n    if (visualEnd && (view.lineWrapping || endBlock.widgetLineBreaks))\n        visualEnd = wrappedLine(view, to, -1, visualEnd);\n    if (visualStart && visualEnd && visualStart.from == visualEnd.from && visualStart.to == visualEnd.to) {\n        return pieces(drawForLine(range.from, range.to, visualStart));\n    }\n    else {\n        let top = visualStart ? drawForLine(range.from, null, visualStart) : drawForWidget(startBlock, false);\n        let bottom = visualEnd ? drawForLine(null, range.to, visualEnd) : drawForWidget(endBlock, true);\n        let between = [];\n        if ((visualStart || startBlock).to < (visualEnd || endBlock).from - (visualStart && visualEnd ? 1 : 0) ||\n            startBlock.widgetLineBreaks > 1 && top.bottom + view.defaultLineHeight / 2 < bottom.top)\n            between.push(piece(leftSide, top.bottom, rightSide, bottom.top));\n        else if (top.bottom < bottom.top && view.elementAtHeight((top.bottom + bottom.top) / 2).type == exports.BlockType.Text)\n            top.bottom = bottom.top = (top.bottom + bottom.top) / 2;\n        return pieces(top).concat(between).concat(pieces(bottom));\n    }\n    function piece(left, top, right, bottom) {\n        return new RectangleMarker(className, left - base.left, top - base.top - 0.01 /* C.Epsilon */, right - left, bottom - top + 0.01 /* C.Epsilon */);\n    }\n    function pieces({ top, bottom, horizontal }) {\n        let pieces = [];\n        for (let i = 0; i < horizontal.length; i += 2)\n            pieces.push(piece(horizontal[i], top, horizontal[i + 1], bottom));\n        return pieces;\n    }\n    // Gets passed from/to in line-local positions\n    function drawForLine(from, to, line) {\n        let top = 1e9, bottom = -1e9, horizontal = [];\n        function addSpan(from, fromOpen, to, toOpen, dir) {\n            // Passing 2/-2 is a kludge to force the view to return\n            // coordinates on the proper side of block widgets, since\n            // normalizing the side there, though appropriate for most\n            // coordsAtPos queries, would break selection drawing.\n            let fromCoords = view.coordsAtPos(from, (from == line.to ? -2 : 2));\n            let toCoords = view.coordsAtPos(to, (to == line.from ? 2 : -2));\n            if (!fromCoords || !toCoords)\n                return;\n            top = Math.min(fromCoords.top, toCoords.top, top);\n            bottom = Math.max(fromCoords.bottom, toCoords.bottom, bottom);\n            if (dir == exports.Direction.LTR)\n                horizontal.push(ltr && fromOpen ? leftSide : fromCoords.left, ltr && toOpen ? rightSide : toCoords.right);\n            else\n                horizontal.push(!ltr && toOpen ? leftSide : toCoords.left, !ltr && fromOpen ? rightSide : fromCoords.right);\n        }\n        let start = from !== null && from !== void 0 ? from : line.from, end = to !== null && to !== void 0 ? to : line.to;\n        // Split the range by visible range and document line\n        for (let r of view.visibleRanges)\n            if (r.to > start && r.from < end) {\n                for (let pos = Math.max(r.from, start), endPos = Math.min(r.to, end);;) {\n                    let docLine = view.state.doc.lineAt(pos);\n                    for (let span of view.bidiSpans(docLine)) {\n                        let spanFrom = span.from + docLine.from, spanTo = span.to + docLine.from;\n                        if (spanFrom >= endPos)\n                            break;\n                        if (spanTo > pos)\n                            addSpan(Math.max(spanFrom, pos), from == null && spanFrom <= start, Math.min(spanTo, endPos), to == null && spanTo >= end, span.dir);\n                    }\n                    pos = docLine.to + 1;\n                    if (pos >= endPos)\n                        break;\n                }\n            }\n        if (horizontal.length == 0)\n            addSpan(start, from == null, end, to == null, view.textDirection);\n        return { top, bottom, horizontal };\n    }\n    function drawForWidget(block, top) {\n        let y = contentRect.top + (top ? block.top : block.bottom);\n        return { top: y, bottom: y, horizontal: [] };\n    }\n}\nfunction sameMarker(a, b) {\n    return a.constructor == b.constructor && a.eq(b);\n}\nclass LayerView {\n    constructor(view, layer) {\n        this.view = view;\n        this.layer = layer;\n        this.drawn = [];\n        this.scaleX = 1;\n        this.scaleY = 1;\n        this.measureReq = { read: this.measure.bind(this), write: this.draw.bind(this) };\n        this.dom = view.scrollDOM.appendChild(document.createElement(\"div\"));\n        this.dom.classList.add(\"cm-layer\");\n        if (layer.above)\n            this.dom.classList.add(\"cm-layer-above\");\n        if (layer.class)\n            this.dom.classList.add(layer.class);\n        this.scale();\n        this.dom.setAttribute(\"aria-hidden\", \"true\");\n        this.setOrder(view.state);\n        view.requestMeasure(this.measureReq);\n        if (layer.mount)\n            layer.mount(this.dom, view);\n    }\n    update(update) {\n        if (update.startState.facet(layerOrder) != update.state.facet(layerOrder))\n            this.setOrder(update.state);\n        if (this.layer.update(update, this.dom) || update.geometryChanged) {\n            this.scale();\n            update.view.requestMeasure(this.measureReq);\n        }\n    }\n    docViewUpdate(view) {\n        if (this.layer.updateOnDocViewUpdate !== false)\n            view.requestMeasure(this.measureReq);\n    }\n    setOrder(state) {\n        let pos = 0, order = state.facet(layerOrder);\n        while (pos < order.length && order[pos] != this.layer)\n            pos++;\n        this.dom.style.zIndex = String((this.layer.above ? 150 : -1) - pos);\n    }\n    measure() {\n        return this.layer.markers(this.view);\n    }\n    scale() {\n        let { scaleX, scaleY } = this.view;\n        if (scaleX != this.scaleX || scaleY != this.scaleY) {\n            this.scaleX = scaleX;\n            this.scaleY = scaleY;\n            this.dom.style.transform = `scale(${1 / scaleX}, ${1 / scaleY})`;\n        }\n    }\n    draw(markers) {\n        if (markers.length != this.drawn.length || markers.some((p, i) => !sameMarker(p, this.drawn[i]))) {\n            let old = this.dom.firstChild, oldI = 0;\n            for (let marker of markers) {\n                if (marker.update && old && marker.constructor && this.drawn[oldI].constructor &&\n                    marker.update(old, this.drawn[oldI])) {\n                    old = old.nextSibling;\n                    oldI++;\n                }\n                else {\n                    this.dom.insertBefore(marker.draw(), old);\n                }\n            }\n            while (old) {\n                let next = old.nextSibling;\n                old.remove();\n                old = next;\n            }\n            this.drawn = markers;\n        }\n    }\n    destroy() {\n        if (this.layer.destroy)\n            this.layer.destroy(this.dom, this.view);\n        this.dom.remove();\n    }\n}\nconst layerOrder = state.Facet.define();\n/**\nDefine a layer.\n*/\nfunction layer(config) {\n    return [\n        ViewPlugin.define(v => new LayerView(v, config)),\n        layerOrder.of(config)\n    ];\n}\n\nconst CanHidePrimary = !(browser.ios && browser.webkit && browser.webkit_version < 534);\nconst selectionConfig = state.Facet.define({\n    combine(configs) {\n        return state.combineConfig(configs, {\n            cursorBlinkRate: 1200,\n            drawRangeCursor: true\n        }, {\n            cursorBlinkRate: (a, b) => Math.min(a, b),\n            drawRangeCursor: (a, b) => a || b\n        });\n    }\n});\n/**\nReturns an extension that hides the browser's native selection and\ncursor, replacing the selection with a background behind the text\n(with the `cm-selectionBackground` class), and the\ncursors with elements overlaid over the code (using\n`cm-cursor-primary` and `cm-cursor-secondary`).\n\nThis allows the editor to display secondary selection ranges, and\ntends to produce a type of selection more in line with that users\nexpect in a text editor (the native selection styling will often\nleave gaps between lines and won't fill the horizontal space after\na line when the selection continues past it).\n\nIt does have a performance cost, in that it requires an extra DOM\nlayout cycle for many updates (the selection is drawn based on DOM\nlayout information that's only available after laying out the\ncontent).\n*/\nfunction drawSelection(config = {}) {\n    return [\n        selectionConfig.of(config),\n        cursorLayer,\n        selectionLayer,\n        hideNativeSelection,\n        nativeSelectionHidden.of(true)\n    ];\n}\n/**\nRetrieve the [`drawSelection`](https://codemirror.net/6/docs/ref/#view.drawSelection) configuration\nfor this state. (Note that this will return a set of defaults even\nif `drawSelection` isn't enabled.)\n*/\nfunction getDrawSelectionConfig(state) {\n    return state.facet(selectionConfig);\n}\nfunction configChanged(update) {\n    return update.startState.facet(selectionConfig) != update.state.facet(selectionConfig);\n}\nconst cursorLayer = layer({\n    above: true,\n    markers(view) {\n        let { state: state$1 } = view, conf = state$1.facet(selectionConfig);\n        let cursors = [];\n        for (let r of state$1.selection.ranges) {\n            let prim = r == state$1.selection.main;\n            if (r.empty ? !prim || CanHidePrimary : conf.drawRangeCursor) {\n                let className = prim ? \"cm-cursor cm-cursor-primary\" : \"cm-cursor cm-cursor-secondary\";\n                let cursor = r.empty ? r : state.EditorSelection.cursor(r.head, r.head > r.anchor ? -1 : 1);\n                for (let piece of RectangleMarker.forRange(view, className, cursor))\n                    cursors.push(piece);\n            }\n        }\n        return cursors;\n    },\n    update(update, dom) {\n        if (update.transactions.some(tr => tr.selection))\n            dom.style.animationName = dom.style.animationName == \"cm-blink\" ? \"cm-blink2\" : \"cm-blink\";\n        let confChange = configChanged(update);\n        if (confChange)\n            setBlinkRate(update.state, dom);\n        return update.docChanged || update.selectionSet || confChange;\n    },\n    mount(dom, view) {\n        setBlinkRate(view.state, dom);\n    },\n    class: \"cm-cursorLayer\"\n});\nfunction setBlinkRate(state, dom) {\n    dom.style.animationDuration = state.facet(selectionConfig).cursorBlinkRate + \"ms\";\n}\nconst selectionLayer = layer({\n    above: false,\n    markers(view) {\n        return view.state.selection.ranges.map(r => r.empty ? [] : RectangleMarker.forRange(view, \"cm-selectionBackground\", r))\n            .reduce((a, b) => a.concat(b));\n    },\n    update(update, dom) {\n        return update.docChanged || update.selectionSet || update.viewportChanged || configChanged(update);\n    },\n    class: \"cm-selectionLayer\"\n});\nconst themeSpec = {\n    \".cm-line\": {\n        \"& ::selection, &::selection\": { backgroundColor: \"transparent !important\" },\n    },\n    \".cm-content\": {\n        \"& :focus\": {\n            caretColor: \"initial !important\",\n            \"&::selection, & ::selection\": {\n                backgroundColor: \"Highlight !important\"\n            }\n        }\n    }\n};\nif (CanHidePrimary)\n    themeSpec[\".cm-line\"].caretColor = themeSpec[\".cm-content\"].caretColor = \"transparent !important\";\nconst hideNativeSelection = state.Prec.highest(EditorView.theme(themeSpec));\n\nconst setDropCursorPos = state.StateEffect.define({\n    map(pos, mapping) { return pos == null ? null : mapping.mapPos(pos); }\n});\nconst dropCursorPos = state.StateField.define({\n    create() { return null; },\n    update(pos, tr) {\n        if (pos != null)\n            pos = tr.changes.mapPos(pos);\n        return tr.effects.reduce((pos, e) => e.is(setDropCursorPos) ? e.value : pos, pos);\n    }\n});\nconst drawDropCursor = ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.view = view;\n        this.cursor = null;\n        this.measureReq = { read: this.readPos.bind(this), write: this.drawCursor.bind(this) };\n    }\n    update(update) {\n        var _a;\n        let cursorPos = update.state.field(dropCursorPos);\n        if (cursorPos == null) {\n            if (this.cursor != null) {\n                (_a = this.cursor) === null || _a === void 0 ? void 0 : _a.remove();\n                this.cursor = null;\n            }\n        }\n        else {\n            if (!this.cursor) {\n                this.cursor = this.view.scrollDOM.appendChild(document.createElement(\"div\"));\n                this.cursor.className = \"cm-dropCursor\";\n            }\n            if (update.startState.field(dropCursorPos) != cursorPos || update.docChanged || update.geometryChanged)\n                this.view.requestMeasure(this.measureReq);\n        }\n    }\n    readPos() {\n        let { view } = this;\n        let pos = view.state.field(dropCursorPos);\n        let rect = pos != null && view.coordsAtPos(pos);\n        if (!rect)\n            return null;\n        let outer = view.scrollDOM.getBoundingClientRect();\n        return {\n            left: rect.left - outer.left + view.scrollDOM.scrollLeft * view.scaleX,\n            top: rect.top - outer.top + view.scrollDOM.scrollTop * view.scaleY,\n            height: rect.bottom - rect.top\n        };\n    }\n    drawCursor(pos) {\n        if (this.cursor) {\n            let { scaleX, scaleY } = this.view;\n            if (pos) {\n                this.cursor.style.left = pos.left / scaleX + \"px\";\n                this.cursor.style.top = pos.top / scaleY + \"px\";\n                this.cursor.style.height = pos.height / scaleY + \"px\";\n            }\n            else {\n                this.cursor.style.left = \"-100000px\";\n            }\n        }\n    }\n    destroy() {\n        if (this.cursor)\n            this.cursor.remove();\n    }\n    setDropPos(pos) {\n        if (this.view.state.field(dropCursorPos) != pos)\n            this.view.dispatch({ effects: setDropCursorPos.of(pos) });\n    }\n}, {\n    eventObservers: {\n        dragover(event) {\n            this.setDropPos(this.view.posAtCoords({ x: event.clientX, y: event.clientY }));\n        },\n        dragleave(event) {\n            if (event.target == this.view.contentDOM || !this.view.contentDOM.contains(event.relatedTarget))\n                this.setDropPos(null);\n        },\n        dragend() {\n            this.setDropPos(null);\n        },\n        drop() {\n            this.setDropPos(null);\n        }\n    }\n});\n/**\nDraws a cursor at the current drop position when something is\ndragged over the editor.\n*/\nfunction dropCursor() {\n    return [dropCursorPos, drawDropCursor];\n}\n\nfunction iterMatches(doc, re, from, to, f) {\n    re.lastIndex = 0;\n    for (let cursor = doc.iterRange(from, to), pos = from, m; !cursor.next().done; pos += cursor.value.length) {\n        if (!cursor.lineBreak)\n            while (m = re.exec(cursor.value))\n                f(pos + m.index, m);\n    }\n}\nfunction matchRanges(view, maxLength) {\n    let visible = view.visibleRanges;\n    if (visible.length == 1 && visible[0].from == view.viewport.from &&\n        visible[0].to == view.viewport.to)\n        return visible;\n    let result = [];\n    for (let { from, to } of visible) {\n        from = Math.max(view.state.doc.lineAt(from).from, from - maxLength);\n        to = Math.min(view.state.doc.lineAt(to).to, to + maxLength);\n        if (result.length && result[result.length - 1].to >= from)\n            result[result.length - 1].to = to;\n        else\n            result.push({ from, to });\n    }\n    return result;\n}\n/**\nHelper class used to make it easier to maintain decorations on\nvisible code that matches a given regular expression. To be used\nin a [view plugin](https://codemirror.net/6/docs/ref/#view.ViewPlugin). Instances of this object\nrepresent a matching configuration.\n*/\nclass MatchDecorator {\n    /**\n    Create a decorator.\n    */\n    constructor(config) {\n        const { regexp, decoration, decorate, boundary, maxLength = 1000 } = config;\n        if (!regexp.global)\n            throw new RangeError(\"The regular expression given to MatchDecorator should have its 'g' flag set\");\n        this.regexp = regexp;\n        if (decorate) {\n            this.addMatch = (match, view, from, add) => decorate(add, from, from + match[0].length, match, view);\n        }\n        else if (typeof decoration == \"function\") {\n            this.addMatch = (match, view, from, add) => {\n                let deco = decoration(match, view, from);\n                if (deco)\n                    add(from, from + match[0].length, deco);\n            };\n        }\n        else if (decoration) {\n            this.addMatch = (match, _view, from, add) => add(from, from + match[0].length, decoration);\n        }\n        else {\n            throw new RangeError(\"Either 'decorate' or 'decoration' should be provided to MatchDecorator\");\n        }\n        this.boundary = boundary;\n        this.maxLength = maxLength;\n    }\n    /**\n    Compute the full set of decorations for matches in the given\n    view's viewport. You'll want to call this when initializing your\n    plugin.\n    */\n    createDeco(view) {\n        let build = new state.RangeSetBuilder(), add = build.add.bind(build);\n        for (let { from, to } of matchRanges(view, this.maxLength))\n            iterMatches(view.state.doc, this.regexp, from, to, (from, m) => this.addMatch(m, view, from, add));\n        return build.finish();\n    }\n    /**\n    Update a set of decorations for a view update. `deco` _must_ be\n    the set of decorations produced by _this_ `MatchDecorator` for\n    the view state before the update.\n    */\n    updateDeco(update, deco) {\n        let changeFrom = 1e9, changeTo = -1;\n        if (update.docChanged)\n            update.changes.iterChanges((_f, _t, from, to) => {\n                if (to > update.view.viewport.from && from < update.view.viewport.to) {\n                    changeFrom = Math.min(from, changeFrom);\n                    changeTo = Math.max(to, changeTo);\n                }\n            });\n        if (update.viewportChanged || changeTo - changeFrom > 1000)\n            return this.createDeco(update.view);\n        if (changeTo > -1)\n            return this.updateRange(update.view, deco.map(update.changes), changeFrom, changeTo);\n        return deco;\n    }\n    updateRange(view, deco, updateFrom, updateTo) {\n        for (let r of view.visibleRanges) {\n            let from = Math.max(r.from, updateFrom), to = Math.min(r.to, updateTo);\n            if (to > from) {\n                let fromLine = view.state.doc.lineAt(from), toLine = fromLine.to < to ? view.state.doc.lineAt(to) : fromLine;\n                let start = Math.max(r.from, fromLine.from), end = Math.min(r.to, toLine.to);\n                if (this.boundary) {\n                    for (; from > fromLine.from; from--)\n                        if (this.boundary.test(fromLine.text[from - 1 - fromLine.from])) {\n                            start = from;\n                            break;\n                        }\n                    for (; to < toLine.to; to++)\n                        if (this.boundary.test(toLine.text[to - toLine.from])) {\n                            end = to;\n                            break;\n                        }\n                }\n                let ranges = [], m;\n                let add = (from, to, deco) => ranges.push(deco.range(from, to));\n                if (fromLine == toLine) {\n                    this.regexp.lastIndex = start - fromLine.from;\n                    while ((m = this.regexp.exec(fromLine.text)) && m.index < end - fromLine.from)\n                        this.addMatch(m, view, m.index + fromLine.from, add);\n                }\n                else {\n                    iterMatches(view.state.doc, this.regexp, start, end, (from, m) => this.addMatch(m, view, from, add));\n                }\n                deco = deco.update({ filterFrom: start, filterTo: end, filter: (from, to) => from < start || to > end, add: ranges });\n            }\n        }\n        return deco;\n    }\n}\n\nconst UnicodeRegexpSupport = /x/.unicode != null ? \"gu\" : \"g\";\nconst Specials = new RegExp(\"[\\u0000-\\u0008\\u000a-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b\\u200e\\u200f\\u2028\\u2029\\u202d\\u202e\\u2066\\u2067\\u2069\\ufeff\\ufff9-\\ufffc]\", UnicodeRegexpSupport);\nconst Names = {\n    0: \"null\",\n    7: \"bell\",\n    8: \"backspace\",\n    10: \"newline\",\n    11: \"vertical tab\",\n    13: \"carriage return\",\n    27: \"escape\",\n    8203: \"zero width space\",\n    8204: \"zero width non-joiner\",\n    8205: \"zero width joiner\",\n    8206: \"left-to-right mark\",\n    8207: \"right-to-left mark\",\n    8232: \"line separator\",\n    8237: \"left-to-right override\",\n    8238: \"right-to-left override\",\n    8294: \"left-to-right isolate\",\n    8295: \"right-to-left isolate\",\n    8297: \"pop directional isolate\",\n    8233: \"paragraph separator\",\n    65279: \"zero width no-break space\",\n    65532: \"object replacement\"\n};\nlet _supportsTabSize = null;\nfunction supportsTabSize() {\n    var _a;\n    if (_supportsTabSize == null && typeof document != \"undefined\" && document.body) {\n        let styles = document.body.style;\n        _supportsTabSize = ((_a = styles.tabSize) !== null && _a !== void 0 ? _a : styles.MozTabSize) != null;\n    }\n    return _supportsTabSize || false;\n}\nconst specialCharConfig = state.Facet.define({\n    combine(configs) {\n        let config = state.combineConfig(configs, {\n            render: null,\n            specialChars: Specials,\n            addSpecialChars: null\n        });\n        if (config.replaceTabs = !supportsTabSize())\n            config.specialChars = new RegExp(\"\\t|\" + config.specialChars.source, UnicodeRegexpSupport);\n        if (config.addSpecialChars)\n            config.specialChars = new RegExp(config.specialChars.source + \"|\" + config.addSpecialChars.source, UnicodeRegexpSupport);\n        return config;\n    }\n});\n/**\nReturns an extension that installs highlighting of special\ncharacters.\n*/\nfunction highlightSpecialChars(\n/**\nConfiguration options.\n*/\nconfig = {}) {\n    return [specialCharConfig.of(config), specialCharPlugin()];\n}\nlet _plugin = null;\nfunction specialCharPlugin() {\n    return _plugin || (_plugin = ViewPlugin.fromClass(class {\n        constructor(view) {\n            this.view = view;\n            this.decorations = Decoration.none;\n            this.decorationCache = Object.create(null);\n            this.decorator = this.makeDecorator(view.state.facet(specialCharConfig));\n            this.decorations = this.decorator.createDeco(view);\n        }\n        makeDecorator(conf) {\n            return new MatchDecorator({\n                regexp: conf.specialChars,\n                decoration: (m, view, pos) => {\n                    let { doc } = view.state;\n                    let code = state.codePointAt(m[0], 0);\n                    if (code == 9) {\n                        let line = doc.lineAt(pos);\n                        let size = view.state.tabSize, col = state.countColumn(line.text, size, pos - line.from);\n                        return Decoration.replace({\n                            widget: new TabWidget((size - (col % size)) * this.view.defaultCharacterWidth / this.view.scaleX)\n                        });\n                    }\n                    return this.decorationCache[code] ||\n                        (this.decorationCache[code] = Decoration.replace({ widget: new SpecialCharWidget(conf, code) }));\n                },\n                boundary: conf.replaceTabs ? undefined : /[^]/\n            });\n        }\n        update(update) {\n            let conf = update.state.facet(specialCharConfig);\n            if (update.startState.facet(specialCharConfig) != conf) {\n                this.decorator = this.makeDecorator(conf);\n                this.decorations = this.decorator.createDeco(update.view);\n            }\n            else {\n                this.decorations = this.decorator.updateDeco(update, this.decorations);\n            }\n        }\n    }, {\n        decorations: v => v.decorations\n    }));\n}\nconst DefaultPlaceholder = \"\\u2022\";\n// Assigns placeholder characters from the Control Pictures block to\n// ASCII control characters\nfunction placeholder$1(code) {\n    if (code >= 32)\n        return DefaultPlaceholder;\n    if (code == 10)\n        return \"\\u2424\";\n    return String.fromCharCode(9216 + code);\n}\nclass SpecialCharWidget extends WidgetType {\n    constructor(options, code) {\n        super();\n        this.options = options;\n        this.code = code;\n    }\n    eq(other) { return other.code == this.code; }\n    toDOM(view) {\n        let ph = placeholder$1(this.code);\n        let desc = view.state.phrase(\"Control character\") + \" \" + (Names[this.code] || \"0x\" + this.code.toString(16));\n        let custom = this.options.render && this.options.render(this.code, desc, ph);\n        if (custom)\n            return custom;\n        let span = document.createElement(\"span\");\n        span.textContent = ph;\n        span.title = desc;\n        span.setAttribute(\"aria-label\", desc);\n        span.className = \"cm-specialChar\";\n        return span;\n    }\n    ignoreEvent() { return false; }\n}\nclass TabWidget extends WidgetType {\n    constructor(width) {\n        super();\n        this.width = width;\n    }\n    eq(other) { return other.width == this.width; }\n    toDOM() {\n        let span = document.createElement(\"span\");\n        span.textContent = \"\\t\";\n        span.className = \"cm-tab\";\n        span.style.width = this.width + \"px\";\n        return span;\n    }\n    ignoreEvent() { return false; }\n}\n\nconst plugin = ViewPlugin.fromClass(class {\n    constructor() {\n        this.height = 1000;\n        this.attrs = { style: \"padding-bottom: 1000px\" };\n    }\n    update(update) {\n        let { view } = update;\n        let height = view.viewState.editorHeight -\n            view.defaultLineHeight - view.documentPadding.top - 0.5;\n        if (height >= 0 && height != this.height) {\n            this.height = height;\n            this.attrs = { style: `padding-bottom: ${height}px` };\n        }\n    }\n});\n/**\nReturns an extension that makes sure the content has a bottom\nmargin equivalent to the height of the editor, minus one line\nheight, so that every line in the document can be scrolled to the\ntop of the editor.\n\nThis is only meaningful when the editor is scrollable, and should\nnot be enabled in editors that take the size of their content.\n*/\nfunction scrollPastEnd() {\n    return [plugin, contentAttributes.of(view => { var _a; return ((_a = view.plugin(plugin)) === null || _a === void 0 ? void 0 : _a.attrs) || null; })];\n}\n\n/**\nMark lines that have a cursor on them with the `\"cm-activeLine\"`\nDOM class.\n*/\nfunction highlightActiveLine() {\n    return activeLineHighlighter;\n}\nconst lineDeco = Decoration.line({ class: \"cm-activeLine\" });\nconst activeLineHighlighter = ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.decorations = this.getDeco(view);\n    }\n    update(update) {\n        if (update.docChanged || update.selectionSet)\n            this.decorations = this.getDeco(update.view);\n    }\n    getDeco(view) {\n        let lastLineStart = -1, deco = [];\n        for (let r of view.state.selection.ranges) {\n            let line = view.lineBlockAt(r.head);\n            if (line.from > lastLineStart) {\n                deco.push(lineDeco.range(line.from));\n                lastLineStart = line.from;\n            }\n        }\n        return Decoration.set(deco);\n    }\n}, {\n    decorations: v => v.decorations\n});\n\nclass Placeholder extends WidgetType {\n    constructor(content) {\n        super();\n        this.content = content;\n    }\n    toDOM(view) {\n        let wrap = document.createElement(\"span\");\n        wrap.className = \"cm-placeholder\";\n        wrap.style.pointerEvents = \"none\";\n        wrap.appendChild(typeof this.content == \"string\" ? document.createTextNode(this.content) :\n            typeof this.content == \"function\" ? this.content(view) :\n                this.content.cloneNode(true));\n        if (typeof this.content == \"string\")\n            wrap.setAttribute(\"aria-label\", \"placeholder \" + this.content);\n        else\n            wrap.setAttribute(\"aria-hidden\", \"true\");\n        return wrap;\n    }\n    coordsAt(dom) {\n        let rects = dom.firstChild ? clientRectsFor(dom.firstChild) : [];\n        if (!rects.length)\n            return null;\n        let style = window.getComputedStyle(dom.parentNode);\n        let rect = flattenRect(rects[0], style.direction != \"rtl\");\n        let lineHeight = parseInt(style.lineHeight);\n        if (rect.bottom - rect.top > lineHeight * 1.5)\n            return { left: rect.left, right: rect.right, top: rect.top, bottom: rect.top + lineHeight };\n        return rect;\n    }\n    ignoreEvent() { return false; }\n}\n/**\nExtension that enables a placeholder—a piece of example content\nto show when the editor is empty.\n*/\nfunction placeholder(content) {\n    return ViewPlugin.fromClass(class {\n        constructor(view) {\n            this.view = view;\n            this.placeholder = content\n                ? Decoration.set([Decoration.widget({ widget: new Placeholder(content), side: 1 }).range(0)])\n                : Decoration.none;\n        }\n        get decorations() { return this.view.state.doc.length ? Decoration.none : this.placeholder; }\n    }, { decorations: v => v.decorations });\n}\n\n// Don't compute precise column positions for line offsets above this\n// (since it could get expensive). Assume offset==column for them.\nconst MaxOff = 2000;\nfunction rectangleFor(state$1, a, b) {\n    let startLine = Math.min(a.line, b.line), endLine = Math.max(a.line, b.line);\n    let ranges = [];\n    if (a.off > MaxOff || b.off > MaxOff || a.col < 0 || b.col < 0) {\n        let startOff = Math.min(a.off, b.off), endOff = Math.max(a.off, b.off);\n        for (let i = startLine; i <= endLine; i++) {\n            let line = state$1.doc.line(i);\n            if (line.length <= endOff)\n                ranges.push(state.EditorSelection.range(line.from + startOff, line.to + endOff));\n        }\n    }\n    else {\n        let startCol = Math.min(a.col, b.col), endCol = Math.max(a.col, b.col);\n        for (let i = startLine; i <= endLine; i++) {\n            let line = state$1.doc.line(i);\n            let start = state.findColumn(line.text, startCol, state$1.tabSize, true);\n            if (start < 0) {\n                ranges.push(state.EditorSelection.cursor(line.to));\n            }\n            else {\n                let end = state.findColumn(line.text, endCol, state$1.tabSize);\n                ranges.push(state.EditorSelection.range(line.from + start, line.from + end));\n            }\n        }\n    }\n    return ranges;\n}\nfunction absoluteColumn(view, x) {\n    let ref = view.coordsAtPos(view.viewport.from);\n    return ref ? Math.round(Math.abs((ref.left - x) / view.defaultCharacterWidth)) : -1;\n}\nfunction getPos(view, event) {\n    let offset = view.posAtCoords({ x: event.clientX, y: event.clientY }, false);\n    let line = view.state.doc.lineAt(offset), off = offset - line.from;\n    let col = off > MaxOff ? -1\n        : off == line.length ? absoluteColumn(view, event.clientX)\n            : state.countColumn(line.text, view.state.tabSize, offset - line.from);\n    return { line: line.number, col, off };\n}\nfunction rectangleSelectionStyle(view, event) {\n    let start = getPos(view, event), startSel = view.state.selection;\n    if (!start)\n        return null;\n    return {\n        update(update) {\n            if (update.docChanged) {\n                let newStart = update.changes.mapPos(update.startState.doc.line(start.line).from);\n                let newLine = update.state.doc.lineAt(newStart);\n                start = { line: newLine.number, col: start.col, off: Math.min(start.off, newLine.length) };\n                startSel = startSel.map(update.changes);\n            }\n        },\n        get(event, _extend, multiple) {\n            let cur = getPos(view, event);\n            if (!cur)\n                return startSel;\n            let ranges = rectangleFor(view.state, start, cur);\n            if (!ranges.length)\n                return startSel;\n            if (multiple)\n                return state.EditorSelection.create(ranges.concat(startSel.ranges));\n            else\n                return state.EditorSelection.create(ranges);\n        }\n    };\n}\n/**\nCreate an extension that enables rectangular selections. By\ndefault, it will react to left mouse drag with the Alt key held\ndown. When such a selection occurs, the text within the rectangle\nthat was dragged over will be selected, as one selection\n[range](https://codemirror.net/6/docs/ref/#state.SelectionRange) per line.\n*/\nfunction rectangularSelection(options) {\n    let filter = (options === null || options === void 0 ? void 0 : options.eventFilter) || (e => e.altKey && e.button == 0);\n    return EditorView.mouseSelectionStyle.of((view, event) => filter(event) ? rectangleSelectionStyle(view, event) : null);\n}\nconst keys = {\n    Alt: [18, e => !!e.altKey],\n    Control: [17, e => !!e.ctrlKey],\n    Shift: [16, e => !!e.shiftKey],\n    Meta: [91, e => !!e.metaKey]\n};\nconst showCrosshair = { style: \"cursor: crosshair\" };\n/**\nReturns an extension that turns the pointer cursor into a\ncrosshair when a given modifier key, defaulting to Alt, is held\ndown. Can serve as a visual hint that rectangular selection is\ngoing to happen when paired with\n[`rectangularSelection`](https://codemirror.net/6/docs/ref/#view.rectangularSelection).\n*/\nfunction crosshairCursor(options = {}) {\n    let [code, getter] = keys[options.key || \"Alt\"];\n    let plugin = ViewPlugin.fromClass(class {\n        constructor(view) {\n            this.view = view;\n            this.isDown = false;\n        }\n        set(isDown) {\n            if (this.isDown != isDown) {\n                this.isDown = isDown;\n                this.view.update([]);\n            }\n        }\n    }, {\n        eventObservers: {\n            keydown(e) {\n                this.set(e.keyCode == code || getter(e));\n            },\n            keyup(e) {\n                if (e.keyCode == code || !getter(e))\n                    this.set(false);\n            },\n            mousemove(e) {\n                this.set(getter(e));\n            }\n        }\n    });\n    return [\n        plugin,\n        EditorView.contentAttributes.of(view => { var _a; return ((_a = view.plugin(plugin)) === null || _a === void 0 ? void 0 : _a.isDown) ? showCrosshair : null; })\n    ];\n}\n\nconst Outside = \"-10000px\";\nclass TooltipViewManager {\n    constructor(view, facet, createTooltipView, removeTooltipView) {\n        this.facet = facet;\n        this.createTooltipView = createTooltipView;\n        this.removeTooltipView = removeTooltipView;\n        this.input = view.state.facet(facet);\n        this.tooltips = this.input.filter(t => t);\n        let prev = null;\n        this.tooltipViews = this.tooltips.map(t => prev = createTooltipView(t, prev));\n    }\n    update(update, above) {\n        var _a;\n        let input = update.state.facet(this.facet);\n        let tooltips = input.filter(x => x);\n        if (input === this.input) {\n            for (let t of this.tooltipViews)\n                if (t.update)\n                    t.update(update);\n            return false;\n        }\n        let tooltipViews = [], newAbove = above ? [] : null;\n        for (let i = 0; i < tooltips.length; i++) {\n            let tip = tooltips[i], known = -1;\n            if (!tip)\n                continue;\n            for (let i = 0; i < this.tooltips.length; i++) {\n                let other = this.tooltips[i];\n                if (other && other.create == tip.create)\n                    known = i;\n            }\n            if (known < 0) {\n                tooltipViews[i] = this.createTooltipView(tip, i ? tooltipViews[i - 1] : null);\n                if (newAbove)\n                    newAbove[i] = !!tip.above;\n            }\n            else {\n                let tooltipView = tooltipViews[i] = this.tooltipViews[known];\n                if (newAbove)\n                    newAbove[i] = above[known];\n                if (tooltipView.update)\n                    tooltipView.update(update);\n            }\n        }\n        for (let t of this.tooltipViews)\n            if (tooltipViews.indexOf(t) < 0) {\n                this.removeTooltipView(t);\n                (_a = t.destroy) === null || _a === void 0 ? void 0 : _a.call(t);\n            }\n        if (above) {\n            newAbove.forEach((val, i) => above[i] = val);\n            above.length = newAbove.length;\n        }\n        this.input = input;\n        this.tooltips = tooltips;\n        this.tooltipViews = tooltipViews;\n        return true;\n    }\n}\n/**\nCreates an extension that configures tooltip behavior.\n*/\nfunction tooltips(config = {}) {\n    return tooltipConfig.of(config);\n}\nfunction windowSpace(view) {\n    let { win } = view;\n    return { top: 0, left: 0, bottom: win.innerHeight, right: win.innerWidth };\n}\nconst tooltipConfig = state.Facet.define({\n    combine: values => {\n        var _a, _b, _c;\n        return ({\n            position: browser.ios ? \"absolute\" : ((_a = values.find(conf => conf.position)) === null || _a === void 0 ? void 0 : _a.position) || \"fixed\",\n            parent: ((_b = values.find(conf => conf.parent)) === null || _b === void 0 ? void 0 : _b.parent) || null,\n            tooltipSpace: ((_c = values.find(conf => conf.tooltipSpace)) === null || _c === void 0 ? void 0 : _c.tooltipSpace) || windowSpace,\n        });\n    }\n});\nconst knownHeight = new WeakMap();\nconst tooltipPlugin = ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.view = view;\n        this.above = [];\n        this.inView = true;\n        this.madeAbsolute = false;\n        this.lastTransaction = 0;\n        this.measureTimeout = -1;\n        let config = view.state.facet(tooltipConfig);\n        this.position = config.position;\n        this.parent = config.parent;\n        this.classes = view.themeClasses;\n        this.createContainer();\n        this.measureReq = { read: this.readMeasure.bind(this), write: this.writeMeasure.bind(this), key: this };\n        this.resizeObserver = typeof ResizeObserver == \"function\" ? new ResizeObserver(() => this.measureSoon()) : null;\n        this.manager = new TooltipViewManager(view, showTooltip, (t, p) => this.createTooltip(t, p), t => {\n            if (this.resizeObserver)\n                this.resizeObserver.unobserve(t.dom);\n            t.dom.remove();\n        });\n        this.above = this.manager.tooltips.map(t => !!t.above);\n        this.intersectionObserver = typeof IntersectionObserver == \"function\" ? new IntersectionObserver(entries => {\n            if (Date.now() > this.lastTransaction - 50 &&\n                entries.length > 0 && entries[entries.length - 1].intersectionRatio < 1)\n                this.measureSoon();\n        }, { threshold: [1] }) : null;\n        this.observeIntersection();\n        view.win.addEventListener(\"resize\", this.measureSoon = this.measureSoon.bind(this));\n        this.maybeMeasure();\n    }\n    createContainer() {\n        if (this.parent) {\n            this.container = document.createElement(\"div\");\n            this.container.style.position = \"relative\";\n            this.container.className = this.view.themeClasses;\n            this.parent.appendChild(this.container);\n        }\n        else {\n            this.container = this.view.dom;\n        }\n    }\n    observeIntersection() {\n        if (this.intersectionObserver) {\n            this.intersectionObserver.disconnect();\n            for (let tooltip of this.manager.tooltipViews)\n                this.intersectionObserver.observe(tooltip.dom);\n        }\n    }\n    measureSoon() {\n        if (this.measureTimeout < 0)\n            this.measureTimeout = setTimeout(() => {\n                this.measureTimeout = -1;\n                this.maybeMeasure();\n            }, 50);\n    }\n    update(update) {\n        if (update.transactions.length)\n            this.lastTransaction = Date.now();\n        let updated = this.manager.update(update, this.above);\n        if (updated)\n            this.observeIntersection();\n        let shouldMeasure = updated || update.geometryChanged;\n        let newConfig = update.state.facet(tooltipConfig);\n        if (newConfig.position != this.position && !this.madeAbsolute) {\n            this.position = newConfig.position;\n            for (let t of this.manager.tooltipViews)\n                t.dom.style.position = this.position;\n            shouldMeasure = true;\n        }\n        if (newConfig.parent != this.parent) {\n            if (this.parent)\n                this.container.remove();\n            this.parent = newConfig.parent;\n            this.createContainer();\n            for (let t of this.manager.tooltipViews)\n                this.container.appendChild(t.dom);\n            shouldMeasure = true;\n        }\n        else if (this.parent && this.view.themeClasses != this.classes) {\n            this.classes = this.container.className = this.view.themeClasses;\n        }\n        if (shouldMeasure)\n            this.maybeMeasure();\n    }\n    createTooltip(tooltip, prev) {\n        let tooltipView = tooltip.create(this.view);\n        let before = prev ? prev.dom : null;\n        tooltipView.dom.classList.add(\"cm-tooltip\");\n        if (tooltip.arrow && !tooltipView.dom.querySelector(\".cm-tooltip > .cm-tooltip-arrow\")) {\n            let arrow = document.createElement(\"div\");\n            arrow.className = \"cm-tooltip-arrow\";\n            tooltipView.dom.appendChild(arrow);\n        }\n        tooltipView.dom.style.position = this.position;\n        tooltipView.dom.style.top = Outside;\n        tooltipView.dom.style.left = \"0px\";\n        this.container.insertBefore(tooltipView.dom, before);\n        if (tooltipView.mount)\n            tooltipView.mount(this.view);\n        if (this.resizeObserver)\n            this.resizeObserver.observe(tooltipView.dom);\n        return tooltipView;\n    }\n    destroy() {\n        var _a, _b, _c;\n        this.view.win.removeEventListener(\"resize\", this.measureSoon);\n        for (let tooltipView of this.manager.tooltipViews) {\n            tooltipView.dom.remove();\n            (_a = tooltipView.destroy) === null || _a === void 0 ? void 0 : _a.call(tooltipView);\n        }\n        if (this.parent)\n            this.container.remove();\n        (_b = this.resizeObserver) === null || _b === void 0 ? void 0 : _b.disconnect();\n        (_c = this.intersectionObserver) === null || _c === void 0 ? void 0 : _c.disconnect();\n        clearTimeout(this.measureTimeout);\n    }\n    readMeasure() {\n        let scaleX = 1, scaleY = 1, makeAbsolute = false;\n        if (this.position == \"fixed\" && this.manager.tooltipViews.length) {\n            let { dom } = this.manager.tooltipViews[0];\n            if (browser.gecko) {\n                // Firefox sets the element's `offsetParent` to the\n                // transformed element when a transform interferes with fixed\n                // positioning.\n                makeAbsolute = dom.offsetParent != this.container.ownerDocument.body;\n            }\n            else if (dom.style.top == Outside && dom.style.left == \"0px\") {\n                // On other browsers, we have to awkwardly try and use other\n                // information to detect a transform.\n                let rect = dom.getBoundingClientRect();\n                makeAbsolute = Math.abs(rect.top + 10000) > 1 || Math.abs(rect.left) > 1;\n            }\n        }\n        if (makeAbsolute || this.position == \"absolute\") {\n            if (this.parent) {\n                let rect = this.parent.getBoundingClientRect();\n                if (rect.width && rect.height) {\n                    scaleX = rect.width / this.parent.offsetWidth;\n                    scaleY = rect.height / this.parent.offsetHeight;\n                }\n            }\n            else {\n                ({ scaleX, scaleY } = this.view.viewState);\n            }\n        }\n        let visible = this.view.scrollDOM.getBoundingClientRect(), margins = getScrollMargins(this.view);\n        return {\n            visible: {\n                left: visible.left + margins.left, top: visible.top + margins.top,\n                right: visible.right - margins.right, bottom: visible.bottom - margins.bottom\n            },\n            parent: this.parent ? this.container.getBoundingClientRect() : this.view.dom.getBoundingClientRect(),\n            pos: this.manager.tooltips.map((t, i) => {\n                let tv = this.manager.tooltipViews[i];\n                return tv.getCoords ? tv.getCoords(t.pos) : this.view.coordsAtPos(t.pos);\n            }),\n            size: this.manager.tooltipViews.map(({ dom }) => dom.getBoundingClientRect()),\n            space: this.view.state.facet(tooltipConfig).tooltipSpace(this.view),\n            scaleX, scaleY, makeAbsolute\n        };\n    }\n    writeMeasure(measured) {\n        var _a;\n        if (measured.makeAbsolute) {\n            this.madeAbsolute = true;\n            this.position = \"absolute\";\n            for (let t of this.manager.tooltipViews)\n                t.dom.style.position = \"absolute\";\n        }\n        let { visible, space, scaleX, scaleY } = measured;\n        let others = [];\n        for (let i = 0; i < this.manager.tooltips.length; i++) {\n            let tooltip = this.manager.tooltips[i], tView = this.manager.tooltipViews[i], { dom } = tView;\n            let pos = measured.pos[i], size = measured.size[i];\n            // Hide tooltips that are outside of the editor.\n            if (!pos || tooltip.clip !== false && (pos.bottom <= Math.max(visible.top, space.top) ||\n                pos.top >= Math.min(visible.bottom, space.bottom) ||\n                pos.right < Math.max(visible.left, space.left) - .1 ||\n                pos.left > Math.min(visible.right, space.right) + .1)) {\n                dom.style.top = Outside;\n                continue;\n            }\n            let arrow = tooltip.arrow ? tView.dom.querySelector(\".cm-tooltip-arrow\") : null;\n            let arrowHeight = arrow ? 7 /* Arrow.Size */ : 0;\n            let width = size.right - size.left, height = (_a = knownHeight.get(tView)) !== null && _a !== void 0 ? _a : size.bottom - size.top;\n            let offset = tView.offset || noOffset, ltr = this.view.textDirection == exports.Direction.LTR;\n            let left = size.width > space.right - space.left\n                ? (ltr ? space.left : space.right - size.width)\n                : ltr ? Math.max(space.left, Math.min(pos.left - (arrow ? 14 /* Arrow.Offset */ : 0) + offset.x, space.right - width))\n                    : Math.min(Math.max(space.left, pos.left - width + (arrow ? 14 /* Arrow.Offset */ : 0) - offset.x), space.right - width);\n            let above = this.above[i];\n            if (!tooltip.strictSide && (above\n                ? pos.top - height - arrowHeight - offset.y < space.top\n                : pos.bottom + height + arrowHeight + offset.y > space.bottom) &&\n                above == (space.bottom - pos.bottom > pos.top - space.top))\n                above = this.above[i] = !above;\n            let spaceVert = (above ? pos.top - space.top : space.bottom - pos.bottom) - arrowHeight;\n            if (spaceVert < height && tView.resize !== false) {\n                if (spaceVert < this.view.defaultLineHeight) {\n                    dom.style.top = Outside;\n                    continue;\n                }\n                knownHeight.set(tView, height);\n                dom.style.height = (height = spaceVert) / scaleY + \"px\";\n            }\n            else if (dom.style.height) {\n                dom.style.height = \"\";\n            }\n            let top = above ? pos.top - height - arrowHeight - offset.y : pos.bottom + arrowHeight + offset.y;\n            let right = left + width;\n            if (tView.overlap !== true)\n                for (let r of others)\n                    if (r.left < right && r.right > left && r.top < top + height && r.bottom > top)\n                        top = above ? r.top - height - 2 - arrowHeight : r.bottom + arrowHeight + 2;\n            if (this.position == \"absolute\") {\n                dom.style.top = (top - measured.parent.top) / scaleY + \"px\";\n                setLeftStyle(dom, (left - measured.parent.left) / scaleX);\n            }\n            else {\n                dom.style.top = top / scaleY + \"px\";\n                setLeftStyle(dom, left / scaleX);\n            }\n            if (arrow) {\n                let arrowLeft = pos.left + (ltr ? offset.x : -offset.x) - (left + 14 /* Arrow.Offset */ - 7 /* Arrow.Size */);\n                arrow.style.left = arrowLeft / scaleX + \"px\";\n            }\n            if (tView.overlap !== true)\n                others.push({ left, top, right, bottom: top + height });\n            dom.classList.toggle(\"cm-tooltip-above\", above);\n            dom.classList.toggle(\"cm-tooltip-below\", !above);\n            if (tView.positioned)\n                tView.positioned(measured.space);\n        }\n    }\n    maybeMeasure() {\n        if (this.manager.tooltips.length) {\n            if (this.view.inView)\n                this.view.requestMeasure(this.measureReq);\n            if (this.inView != this.view.inView) {\n                this.inView = this.view.inView;\n                if (!this.inView)\n                    for (let tv of this.manager.tooltipViews)\n                        tv.dom.style.top = Outside;\n            }\n        }\n    }\n}, {\n    eventObservers: {\n        scroll() { this.maybeMeasure(); }\n    }\n});\nfunction setLeftStyle(elt, value) {\n    let current = parseInt(elt.style.left, 10);\n    if (isNaN(current) || Math.abs(value - current) > 1)\n        elt.style.left = value + \"px\";\n}\nconst baseTheme = EditorView.baseTheme({\n    \".cm-tooltip\": {\n        zIndex: 500,\n        boxSizing: \"border-box\"\n    },\n    \"&light .cm-tooltip\": {\n        border: \"1px solid #bbb\",\n        backgroundColor: \"#f5f5f5\"\n    },\n    \"&light .cm-tooltip-section:not(:first-child)\": {\n        borderTop: \"1px solid #bbb\",\n    },\n    \"&dark .cm-tooltip\": {\n        backgroundColor: \"#333338\",\n        color: \"white\"\n    },\n    \".cm-tooltip-arrow\": {\n        height: `${7 /* Arrow.Size */}px`,\n        width: `${7 /* Arrow.Size */ * 2}px`,\n        position: \"absolute\",\n        zIndex: -1,\n        overflow: \"hidden\",\n        \"&:before, &:after\": {\n            content: \"''\",\n            position: \"absolute\",\n            width: 0,\n            height: 0,\n            borderLeft: `${7 /* Arrow.Size */}px solid transparent`,\n            borderRight: `${7 /* Arrow.Size */}px solid transparent`,\n        },\n        \".cm-tooltip-above &\": {\n            bottom: `-${7 /* Arrow.Size */}px`,\n            \"&:before\": {\n                borderTop: `${7 /* Arrow.Size */}px solid #bbb`,\n            },\n            \"&:after\": {\n                borderTop: `${7 /* Arrow.Size */}px solid #f5f5f5`,\n                bottom: \"1px\"\n            }\n        },\n        \".cm-tooltip-below &\": {\n            top: `-${7 /* Arrow.Size */}px`,\n            \"&:before\": {\n                borderBottom: `${7 /* Arrow.Size */}px solid #bbb`,\n            },\n            \"&:after\": {\n                borderBottom: `${7 /* Arrow.Size */}px solid #f5f5f5`,\n                top: \"1px\"\n            }\n        },\n    },\n    \"&dark .cm-tooltip .cm-tooltip-arrow\": {\n        \"&:before\": {\n            borderTopColor: \"#333338\",\n            borderBottomColor: \"#333338\"\n        },\n        \"&:after\": {\n            borderTopColor: \"transparent\",\n            borderBottomColor: \"transparent\"\n        }\n    }\n});\nconst noOffset = { x: 0, y: 0 };\n/**\nFacet to which an extension can add a value to show a tooltip.\n*/\nconst showTooltip = state.Facet.define({\n    enables: [tooltipPlugin, baseTheme]\n});\nconst showHoverTooltip = state.Facet.define({\n    combine: inputs => inputs.reduce((a, i) => a.concat(i), [])\n});\nclass HoverTooltipHost {\n    // Needs to be static so that host tooltip instances always match\n    static create(view) {\n        return new HoverTooltipHost(view);\n    }\n    constructor(view) {\n        this.view = view;\n        this.mounted = false;\n        this.dom = document.createElement(\"div\");\n        this.dom.classList.add(\"cm-tooltip-hover\");\n        this.manager = new TooltipViewManager(view, showHoverTooltip, (t, p) => this.createHostedView(t, p), t => t.dom.remove());\n    }\n    createHostedView(tooltip, prev) {\n        let hostedView = tooltip.create(this.view);\n        hostedView.dom.classList.add(\"cm-tooltip-section\");\n        this.dom.insertBefore(hostedView.dom, prev ? prev.dom.nextSibling : this.dom.firstChild);\n        if (this.mounted && hostedView.mount)\n            hostedView.mount(this.view);\n        return hostedView;\n    }\n    mount(view) {\n        for (let hostedView of this.manager.tooltipViews) {\n            if (hostedView.mount)\n                hostedView.mount(view);\n        }\n        this.mounted = true;\n    }\n    positioned(space) {\n        for (let hostedView of this.manager.tooltipViews) {\n            if (hostedView.positioned)\n                hostedView.positioned(space);\n        }\n    }\n    update(update) {\n        this.manager.update(update);\n    }\n    destroy() {\n        var _a;\n        for (let t of this.manager.tooltipViews)\n            (_a = t.destroy) === null || _a === void 0 ? void 0 : _a.call(t);\n    }\n    passProp(name) {\n        let value = undefined;\n        for (let view of this.manager.tooltipViews) {\n            let given = view[name];\n            if (given !== undefined) {\n                if (value === undefined)\n                    value = given;\n                else if (value !== given)\n                    return undefined;\n            }\n        }\n        return value;\n    }\n    get offset() { return this.passProp(\"offset\"); }\n    get getCoords() { return this.passProp(\"getCoords\"); }\n    get overlap() { return this.passProp(\"overlap\"); }\n    get resize() { return this.passProp(\"resize\"); }\n}\nconst showHoverTooltipHost = showTooltip.compute([showHoverTooltip], state => {\n    let tooltips = state.facet(showHoverTooltip);\n    if (tooltips.length === 0)\n        return null;\n    return {\n        pos: Math.min(...tooltips.map(t => t.pos)),\n        end: Math.max(...tooltips.map(t => { var _a; return (_a = t.end) !== null && _a !== void 0 ? _a : t.pos; })),\n        create: HoverTooltipHost.create,\n        above: tooltips[0].above,\n        arrow: tooltips.some(t => t.arrow),\n    };\n});\nclass HoverPlugin {\n    constructor(view, source, field, setHover, hoverTime) {\n        this.view = view;\n        this.source = source;\n        this.field = field;\n        this.setHover = setHover;\n        this.hoverTime = hoverTime;\n        this.hoverTimeout = -1;\n        this.restartTimeout = -1;\n        this.pending = null;\n        this.lastMove = { x: 0, y: 0, target: view.dom, time: 0 };\n        this.checkHover = this.checkHover.bind(this);\n        view.dom.addEventListener(\"mouseleave\", this.mouseleave = this.mouseleave.bind(this));\n        view.dom.addEventListener(\"mousemove\", this.mousemove = this.mousemove.bind(this));\n    }\n    update() {\n        if (this.pending) {\n            this.pending = null;\n            clearTimeout(this.restartTimeout);\n            this.restartTimeout = setTimeout(() => this.startHover(), 20);\n        }\n    }\n    get active() {\n        return this.view.state.field(this.field);\n    }\n    checkHover() {\n        this.hoverTimeout = -1;\n        if (this.active.length)\n            return;\n        let hovered = Date.now() - this.lastMove.time;\n        if (hovered < this.hoverTime)\n            this.hoverTimeout = setTimeout(this.checkHover, this.hoverTime - hovered);\n        else\n            this.startHover();\n    }\n    startHover() {\n        clearTimeout(this.restartTimeout);\n        let { view, lastMove } = this;\n        let desc = view.docView.nearest(lastMove.target);\n        if (!desc)\n            return;\n        let pos, side = 1;\n        if (desc instanceof WidgetView) {\n            pos = desc.posAtStart;\n        }\n        else {\n            pos = view.posAtCoords(lastMove);\n            if (pos == null)\n                return;\n            let posCoords = view.coordsAtPos(pos);\n            if (!posCoords ||\n                lastMove.y < posCoords.top || lastMove.y > posCoords.bottom ||\n                lastMove.x < posCoords.left - view.defaultCharacterWidth ||\n                lastMove.x > posCoords.right + view.defaultCharacterWidth)\n                return;\n            let bidi = view.bidiSpans(view.state.doc.lineAt(pos)).find(s => s.from <= pos && s.to >= pos);\n            let rtl = bidi && bidi.dir == exports.Direction.RTL ? -1 : 1;\n            side = (lastMove.x < posCoords.left ? -rtl : rtl);\n        }\n        let open = this.source(view, pos, side);\n        if (open === null || open === void 0 ? void 0 : open.then) {\n            let pending = this.pending = { pos };\n            open.then(result => {\n                if (this.pending == pending) {\n                    this.pending = null;\n                    if (result && !(Array.isArray(result) && !result.length))\n                        view.dispatch({ effects: this.setHover.of(Array.isArray(result) ? result : [result]) });\n                }\n            }, e => logException(view.state, e, \"hover tooltip\"));\n        }\n        else if (open && !(Array.isArray(open) && !open.length)) {\n            view.dispatch({ effects: this.setHover.of(Array.isArray(open) ? open : [open]) });\n        }\n    }\n    get tooltip() {\n        let plugin = this.view.plugin(tooltipPlugin);\n        let index = plugin ? plugin.manager.tooltips.findIndex(t => t.create == HoverTooltipHost.create) : -1;\n        return index > -1 ? plugin.manager.tooltipViews[index] : null;\n    }\n    mousemove(event) {\n        var _a, _b;\n        this.lastMove = { x: event.clientX, y: event.clientY, target: event.target, time: Date.now() };\n        if (this.hoverTimeout < 0)\n            this.hoverTimeout = setTimeout(this.checkHover, this.hoverTime);\n        let { active, tooltip } = this;\n        if (active.length && tooltip && !isInTooltip(tooltip.dom, event) || this.pending) {\n            let { pos } = active[0] || this.pending, end = (_b = (_a = active[0]) === null || _a === void 0 ? void 0 : _a.end) !== null && _b !== void 0 ? _b : pos;\n            if ((pos == end ? this.view.posAtCoords(this.lastMove) != pos\n                : !isOverRange(this.view, pos, end, event.clientX, event.clientY))) {\n                this.view.dispatch({ effects: this.setHover.of([]) });\n                this.pending = null;\n            }\n        }\n    }\n    mouseleave(event) {\n        clearTimeout(this.hoverTimeout);\n        this.hoverTimeout = -1;\n        let { active } = this;\n        if (active.length) {\n            let { tooltip } = this;\n            let inTooltip = tooltip && tooltip.dom.contains(event.relatedTarget);\n            if (!inTooltip)\n                this.view.dispatch({ effects: this.setHover.of([]) });\n            else\n                this.watchTooltipLeave(tooltip.dom);\n        }\n    }\n    watchTooltipLeave(tooltip) {\n        let watch = (event) => {\n            tooltip.removeEventListener(\"mouseleave\", watch);\n            if (this.active.length && !this.view.dom.contains(event.relatedTarget))\n                this.view.dispatch({ effects: this.setHover.of([]) });\n        };\n        tooltip.addEventListener(\"mouseleave\", watch);\n    }\n    destroy() {\n        clearTimeout(this.hoverTimeout);\n        this.view.dom.removeEventListener(\"mouseleave\", this.mouseleave);\n        this.view.dom.removeEventListener(\"mousemove\", this.mousemove);\n    }\n}\nconst tooltipMargin = 4;\nfunction isInTooltip(tooltip, event) {\n    let { left, right, top, bottom } = tooltip.getBoundingClientRect(), arrow;\n    if (arrow = tooltip.querySelector(\".cm-tooltip-arrow\")) {\n        let arrowRect = arrow.getBoundingClientRect();\n        top = Math.min(arrowRect.top, top);\n        bottom = Math.max(arrowRect.bottom, bottom);\n    }\n    return event.clientX >= left - tooltipMargin && event.clientX <= right + tooltipMargin &&\n        event.clientY >= top - tooltipMargin && event.clientY <= bottom + tooltipMargin;\n}\nfunction isOverRange(view, from, to, x, y, margin) {\n    let rect = view.scrollDOM.getBoundingClientRect();\n    let docBottom = view.documentTop + view.documentPadding.top + view.contentHeight;\n    if (rect.left > x || rect.right < x || rect.top > y || Math.min(rect.bottom, docBottom) < y)\n        return false;\n    let pos = view.posAtCoords({ x, y }, false);\n    return pos >= from && pos <= to;\n}\n/**\nSet up a hover tooltip, which shows up when the pointer hovers\nover ranges of text. The callback is called when the mouse hovers\nover the document text. It should, if there is a tooltip\nassociated with position `pos`, return the tooltip description\n(either directly or in a promise). The `side` argument indicates\non which side of the position the pointer is—it will be -1 if the\npointer is before the position, 1 if after the position.\n\nNote that all hover tooltips are hosted within a single tooltip\ncontainer element. This allows multiple tooltips over the same\nrange to be \"merged\" together without overlapping.\n\nThe return value is a valid [editor extension](https://codemirror.net/6/docs/ref/#state.Extension)\nbut also provides an `active` property holding a state field that\ncan be used to read the currently active tooltips produced by this\nextension.\n*/\nfunction hoverTooltip(source, options = {}) {\n    let setHover = state.StateEffect.define();\n    let hoverState = state.StateField.define({\n        create() { return []; },\n        update(value, tr) {\n            if (value.length) {\n                if (options.hideOnChange && (tr.docChanged || tr.selection))\n                    value = [];\n                else if (options.hideOn)\n                    value = value.filter(v => !options.hideOn(tr, v));\n                if (tr.docChanged) {\n                    let mapped = [];\n                    for (let tooltip of value) {\n                        let newPos = tr.changes.mapPos(tooltip.pos, -1, state.MapMode.TrackDel);\n                        if (newPos != null) {\n                            let copy = Object.assign(Object.create(null), tooltip);\n                            copy.pos = newPos;\n                            if (copy.end != null)\n                                copy.end = tr.changes.mapPos(copy.end);\n                            mapped.push(copy);\n                        }\n                    }\n                    value = mapped;\n                }\n            }\n            for (let effect of tr.effects) {\n                if (effect.is(setHover))\n                    value = effect.value;\n                if (effect.is(closeHoverTooltipEffect))\n                    value = [];\n            }\n            return value;\n        },\n        provide: f => showHoverTooltip.from(f)\n    });\n    return {\n        active: hoverState,\n        extension: [\n            hoverState,\n            ViewPlugin.define(view => new HoverPlugin(view, source, hoverState, setHover, options.hoverTime || 300 /* Hover.Time */)),\n            showHoverTooltipHost\n        ]\n    };\n}\n/**\nGet the active tooltip view for a given tooltip, if available.\n*/\nfunction getTooltip(view, tooltip) {\n    let plugin = view.plugin(tooltipPlugin);\n    if (!plugin)\n        return null;\n    let found = plugin.manager.tooltips.indexOf(tooltip);\n    return found < 0 ? null : plugin.manager.tooltipViews[found];\n}\n/**\nReturns true if any hover tooltips are currently active.\n*/\nfunction hasHoverTooltips(state) {\n    return state.facet(showHoverTooltip).some(x => x);\n}\nconst closeHoverTooltipEffect = state.StateEffect.define();\n/**\nTransaction effect that closes all hover tooltips.\n*/\nconst closeHoverTooltips = closeHoverTooltipEffect.of(null);\n/**\nTell the tooltip extension to recompute the position of the active\ntooltips. This can be useful when something happens (such as a\nre-positioning or CSS change affecting the editor) that could\ninvalidate the existing tooltip positions.\n*/\nfunction repositionTooltips(view) {\n    let plugin = view.plugin(tooltipPlugin);\n    if (plugin)\n        plugin.maybeMeasure();\n}\n\nconst panelConfig = state.Facet.define({\n    combine(configs) {\n        let topContainer, bottomContainer;\n        for (let c of configs) {\n            topContainer = topContainer || c.topContainer;\n            bottomContainer = bottomContainer || c.bottomContainer;\n        }\n        return { topContainer, bottomContainer };\n    }\n});\n/**\nConfigures the panel-managing extension.\n*/\nfunction panels(config) {\n    return config ? [panelConfig.of(config)] : [];\n}\n/**\nGet the active panel created by the given constructor, if any.\nThis can be useful when you need access to your panels' DOM\nstructure.\n*/\nfunction getPanel(view, panel) {\n    let plugin = view.plugin(panelPlugin);\n    let index = plugin ? plugin.specs.indexOf(panel) : -1;\n    return index > -1 ? plugin.panels[index] : null;\n}\nconst panelPlugin = ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.input = view.state.facet(showPanel);\n        this.specs = this.input.filter(s => s);\n        this.panels = this.specs.map(spec => spec(view));\n        let conf = view.state.facet(panelConfig);\n        this.top = new PanelGroup(view, true, conf.topContainer);\n        this.bottom = new PanelGroup(view, false, conf.bottomContainer);\n        this.top.sync(this.panels.filter(p => p.top));\n        this.bottom.sync(this.panels.filter(p => !p.top));\n        for (let p of this.panels) {\n            p.dom.classList.add(\"cm-panel\");\n            if (p.mount)\n                p.mount();\n        }\n    }\n    update(update) {\n        let conf = update.state.facet(panelConfig);\n        if (this.top.container != conf.topContainer) {\n            this.top.sync([]);\n            this.top = new PanelGroup(update.view, true, conf.topContainer);\n        }\n        if (this.bottom.container != conf.bottomContainer) {\n            this.bottom.sync([]);\n            this.bottom = new PanelGroup(update.view, false, conf.bottomContainer);\n        }\n        this.top.syncClasses();\n        this.bottom.syncClasses();\n        let input = update.state.facet(showPanel);\n        if (input != this.input) {\n            let specs = input.filter(x => x);\n            let panels = [], top = [], bottom = [], mount = [];\n            for (let spec of specs) {\n                let known = this.specs.indexOf(spec), panel;\n                if (known < 0) {\n                    panel = spec(update.view);\n                    mount.push(panel);\n                }\n                else {\n                    panel = this.panels[known];\n                    if (panel.update)\n                        panel.update(update);\n                }\n                panels.push(panel);\n                (panel.top ? top : bottom).push(panel);\n            }\n            this.specs = specs;\n            this.panels = panels;\n            this.top.sync(top);\n            this.bottom.sync(bottom);\n            for (let p of mount) {\n                p.dom.classList.add(\"cm-panel\");\n                if (p.mount)\n                    p.mount();\n            }\n        }\n        else {\n            for (let p of this.panels)\n                if (p.update)\n                    p.update(update);\n        }\n    }\n    destroy() {\n        this.top.sync([]);\n        this.bottom.sync([]);\n    }\n}, {\n    provide: plugin => EditorView.scrollMargins.of(view => {\n        let value = view.plugin(plugin);\n        return value && { top: value.top.scrollMargin(), bottom: value.bottom.scrollMargin() };\n    })\n});\nclass PanelGroup {\n    constructor(view, top, container) {\n        this.view = view;\n        this.top = top;\n        this.container = container;\n        this.dom = undefined;\n        this.classes = \"\";\n        this.panels = [];\n        this.syncClasses();\n    }\n    sync(panels) {\n        for (let p of this.panels)\n            if (p.destroy && panels.indexOf(p) < 0)\n                p.destroy();\n        this.panels = panels;\n        this.syncDOM();\n    }\n    syncDOM() {\n        if (this.panels.length == 0) {\n            if (this.dom) {\n                this.dom.remove();\n                this.dom = undefined;\n            }\n            return;\n        }\n        if (!this.dom) {\n            this.dom = document.createElement(\"div\");\n            this.dom.className = this.top ? \"cm-panels cm-panels-top\" : \"cm-panels cm-panels-bottom\";\n            this.dom.style[this.top ? \"top\" : \"bottom\"] = \"0\";\n            let parent = this.container || this.view.dom;\n            parent.insertBefore(this.dom, this.top ? parent.firstChild : null);\n        }\n        let curDOM = this.dom.firstChild;\n        for (let panel of this.panels) {\n            if (panel.dom.parentNode == this.dom) {\n                while (curDOM != panel.dom)\n                    curDOM = rm(curDOM);\n                curDOM = curDOM.nextSibling;\n            }\n            else {\n                this.dom.insertBefore(panel.dom, curDOM);\n            }\n        }\n        while (curDOM)\n            curDOM = rm(curDOM);\n    }\n    scrollMargin() {\n        return !this.dom || this.container ? 0\n            : Math.max(0, this.top ?\n                this.dom.getBoundingClientRect().bottom - Math.max(0, this.view.scrollDOM.getBoundingClientRect().top) :\n                Math.min(innerHeight, this.view.scrollDOM.getBoundingClientRect().bottom) - this.dom.getBoundingClientRect().top);\n    }\n    syncClasses() {\n        if (!this.container || this.classes == this.view.themeClasses)\n            return;\n        for (let cls of this.classes.split(\" \"))\n            if (cls)\n                this.container.classList.remove(cls);\n        for (let cls of (this.classes = this.view.themeClasses).split(\" \"))\n            if (cls)\n                this.container.classList.add(cls);\n    }\n}\nfunction rm(node) {\n    let next = node.nextSibling;\n    node.remove();\n    return next;\n}\n/**\nOpening a panel is done by providing a constructor function for\nthe panel through this facet. (The panel is closed again when its\nconstructor is no longer provided.) Values of `null` are ignored.\n*/\nconst showPanel = state.Facet.define({\n    enables: panelPlugin\n});\n\n/**\nA gutter marker represents a bit of information attached to a line\nin a specific gutter. Your own custom markers have to extend this\nclass.\n*/\nclass GutterMarker extends state.RangeValue {\n    /**\n    @internal\n    */\n    compare(other) {\n        return this == other || this.constructor == other.constructor && this.eq(other);\n    }\n    /**\n    Compare this marker to another marker of the same type.\n    */\n    eq(other) { return false; }\n    /**\n    Called if the marker has a `toDOM` method and its representation\n    was removed from a gutter.\n    */\n    destroy(dom) { }\n}\nGutterMarker.prototype.elementClass = \"\";\nGutterMarker.prototype.toDOM = undefined;\nGutterMarker.prototype.mapMode = state.MapMode.TrackBefore;\nGutterMarker.prototype.startSide = GutterMarker.prototype.endSide = -1;\nGutterMarker.prototype.point = true;\n/**\nFacet used to add a class to all gutter elements for a given line.\nMarkers given to this facet should _only_ define an\n[`elementclass`](https://codemirror.net/6/docs/ref/#view.GutterMarker.elementClass), not a\n[`toDOM`](https://codemirror.net/6/docs/ref/#view.GutterMarker.toDOM) (or the marker will appear\nin all gutters for the line).\n*/\nconst gutterLineClass = state.Facet.define();\n/**\nFacet used to add a class to all gutter elements next to a widget.\nShould not provide widgets with a `toDOM` method.\n*/\nconst gutterWidgetClass = state.Facet.define();\nconst defaults = {\n    class: \"\",\n    renderEmptyElements: false,\n    elementStyle: \"\",\n    markers: () => state.RangeSet.empty,\n    lineMarker: () => null,\n    widgetMarker: () => null,\n    lineMarkerChange: null,\n    initialSpacer: null,\n    updateSpacer: null,\n    domEventHandlers: {}\n};\nconst activeGutters = state.Facet.define();\n/**\nDefine an editor gutter. The order in which the gutters appear is\ndetermined by their extension priority.\n*/\nfunction gutter(config) {\n    return [gutters(), activeGutters.of(Object.assign(Object.assign({}, defaults), config))];\n}\nconst unfixGutters = state.Facet.define({\n    combine: values => values.some(x => x)\n});\n/**\nThe gutter-drawing plugin is automatically enabled when you add a\ngutter, but you can use this function to explicitly configure it.\n\nUnless `fixed` is explicitly set to `false`, the gutters are\nfixed, meaning they don't scroll along with the content\nhorizontally (except on Internet Explorer, which doesn't support\nCSS [`position:\nsticky`](https://developer.mozilla.org/en-US/docs/Web/CSS/position#sticky)).\n*/\nfunction gutters(config) {\n    let result = [\n        gutterView,\n    ];\n    if (config && config.fixed === false)\n        result.push(unfixGutters.of(true));\n    return result;\n}\nconst gutterView = ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.view = view;\n        this.prevViewport = view.viewport;\n        this.dom = document.createElement(\"div\");\n        this.dom.className = \"cm-gutters\";\n        this.dom.setAttribute(\"aria-hidden\", \"true\");\n        this.dom.style.minHeight = (this.view.contentHeight / this.view.scaleY) + \"px\";\n        this.gutters = view.state.facet(activeGutters).map(conf => new SingleGutterView(view, conf));\n        for (let gutter of this.gutters)\n            this.dom.appendChild(gutter.dom);\n        this.fixed = !view.state.facet(unfixGutters);\n        if (this.fixed) {\n            // FIXME IE11 fallback, which doesn't support position: sticky,\n            // by using position: relative + event handlers that realign the\n            // gutter (or just force fixed=false on IE11?)\n            this.dom.style.position = \"sticky\";\n        }\n        this.syncGutters(false);\n        view.scrollDOM.insertBefore(this.dom, view.contentDOM);\n    }\n    update(update) {\n        if (this.updateGutters(update)) {\n            // Detach during sync when the viewport changed significantly\n            // (such as during scrolling), since for large updates that is\n            // faster.\n            let vpA = this.prevViewport, vpB = update.view.viewport;\n            let vpOverlap = Math.min(vpA.to, vpB.to) - Math.max(vpA.from, vpB.from);\n            this.syncGutters(vpOverlap < (vpB.to - vpB.from) * 0.8);\n        }\n        if (update.geometryChanged) {\n            this.dom.style.minHeight = (this.view.contentHeight / this.view.scaleY) + \"px\";\n        }\n        if (this.view.state.facet(unfixGutters) != !this.fixed) {\n            this.fixed = !this.fixed;\n            this.dom.style.position = this.fixed ? \"sticky\" : \"\";\n        }\n        this.prevViewport = update.view.viewport;\n    }\n    syncGutters(detach) {\n        let after = this.dom.nextSibling;\n        if (detach)\n            this.dom.remove();\n        let lineClasses = state.RangeSet.iter(this.view.state.facet(gutterLineClass), this.view.viewport.from);\n        let classSet = [];\n        let contexts = this.gutters.map(gutter => new UpdateContext(gutter, this.view.viewport, -this.view.documentPadding.top));\n        for (let line of this.view.viewportLineBlocks) {\n            if (classSet.length)\n                classSet = [];\n            if (Array.isArray(line.type)) {\n                let first = true;\n                for (let b of line.type) {\n                    if (b.type == exports.BlockType.Text && first) {\n                        advanceCursor(lineClasses, classSet, b.from);\n                        for (let cx of contexts)\n                            cx.line(this.view, b, classSet);\n                        first = false;\n                    }\n                    else if (b.widget) {\n                        for (let cx of contexts)\n                            cx.widget(this.view, b);\n                    }\n                }\n            }\n            else if (line.type == exports.BlockType.Text) {\n                advanceCursor(lineClasses, classSet, line.from);\n                for (let cx of contexts)\n                    cx.line(this.view, line, classSet);\n            }\n            else if (line.widget) {\n                for (let cx of contexts)\n                    cx.widget(this.view, line);\n            }\n        }\n        for (let cx of contexts)\n            cx.finish();\n        if (detach)\n            this.view.scrollDOM.insertBefore(this.dom, after);\n    }\n    updateGutters(update) {\n        let prev = update.startState.facet(activeGutters), cur = update.state.facet(activeGutters);\n        let change = update.docChanged || update.heightChanged || update.viewportChanged ||\n            !state.RangeSet.eq(update.startState.facet(gutterLineClass), update.state.facet(gutterLineClass), update.view.viewport.from, update.view.viewport.to);\n        if (prev == cur) {\n            for (let gutter of this.gutters)\n                if (gutter.update(update))\n                    change = true;\n        }\n        else {\n            change = true;\n            let gutters = [];\n            for (let conf of cur) {\n                let known = prev.indexOf(conf);\n                if (known < 0) {\n                    gutters.push(new SingleGutterView(this.view, conf));\n                }\n                else {\n                    this.gutters[known].update(update);\n                    gutters.push(this.gutters[known]);\n                }\n            }\n            for (let g of this.gutters) {\n                g.dom.remove();\n                if (gutters.indexOf(g) < 0)\n                    g.destroy();\n            }\n            for (let g of gutters)\n                this.dom.appendChild(g.dom);\n            this.gutters = gutters;\n        }\n        return change;\n    }\n    destroy() {\n        for (let view of this.gutters)\n            view.destroy();\n        this.dom.remove();\n    }\n}, {\n    provide: plugin => EditorView.scrollMargins.of(view => {\n        let value = view.plugin(plugin);\n        if (!value || value.gutters.length == 0 || !value.fixed)\n            return null;\n        return view.textDirection == exports.Direction.LTR\n            ? { left: value.dom.offsetWidth * view.scaleX }\n            : { right: value.dom.offsetWidth * view.scaleX };\n    })\n});\nfunction asArray(val) { return (Array.isArray(val) ? val : [val]); }\nfunction advanceCursor(cursor, collect, pos) {\n    while (cursor.value && cursor.from <= pos) {\n        if (cursor.from == pos)\n            collect.push(cursor.value);\n        cursor.next();\n    }\n}\nclass UpdateContext {\n    constructor(gutter, viewport, height) {\n        this.gutter = gutter;\n        this.height = height;\n        this.i = 0;\n        this.cursor = state.RangeSet.iter(gutter.markers, viewport.from);\n    }\n    addElement(view, block, markers) {\n        let { gutter } = this, above = (block.top - this.height) / view.scaleY, height = block.height / view.scaleY;\n        if (this.i == gutter.elements.length) {\n            let newElt = new GutterElement(view, height, above, markers);\n            gutter.elements.push(newElt);\n            gutter.dom.appendChild(newElt.dom);\n        }\n        else {\n            gutter.elements[this.i].update(view, height, above, markers);\n        }\n        this.height = block.bottom;\n        this.i++;\n    }\n    line(view, line, extraMarkers) {\n        let localMarkers = [];\n        advanceCursor(this.cursor, localMarkers, line.from);\n        if (extraMarkers.length)\n            localMarkers = localMarkers.concat(extraMarkers);\n        let forLine = this.gutter.config.lineMarker(view, line, localMarkers);\n        if (forLine)\n            localMarkers.unshift(forLine);\n        let gutter = this.gutter;\n        if (localMarkers.length == 0 && !gutter.config.renderEmptyElements)\n            return;\n        this.addElement(view, line, localMarkers);\n    }\n    widget(view, block) {\n        let marker = this.gutter.config.widgetMarker(view, block.widget, block), markers = marker ? [marker] : null;\n        for (let cls of view.state.facet(gutterWidgetClass)) {\n            let marker = cls(view, block.widget, block);\n            if (marker)\n                (markers || (markers = [])).push(marker);\n        }\n        if (markers)\n            this.addElement(view, block, markers);\n    }\n    finish() {\n        let gutter = this.gutter;\n        while (gutter.elements.length > this.i) {\n            let last = gutter.elements.pop();\n            gutter.dom.removeChild(last.dom);\n            last.destroy();\n        }\n    }\n}\nclass SingleGutterView {\n    constructor(view, config) {\n        this.view = view;\n        this.config = config;\n        this.elements = [];\n        this.spacer = null;\n        this.dom = document.createElement(\"div\");\n        this.dom.className = \"cm-gutter\" + (this.config.class ? \" \" + this.config.class : \"\");\n        for (let prop in config.domEventHandlers) {\n            this.dom.addEventListener(prop, (event) => {\n                let target = event.target, y;\n                if (target != this.dom && this.dom.contains(target)) {\n                    while (target.parentNode != this.dom)\n                        target = target.parentNode;\n                    let rect = target.getBoundingClientRect();\n                    y = (rect.top + rect.bottom) / 2;\n                }\n                else {\n                    y = event.clientY;\n                }\n                let line = view.lineBlockAtHeight(y - view.documentTop);\n                if (config.domEventHandlers[prop](view, line, event))\n                    event.preventDefault();\n            });\n        }\n        this.markers = asArray(config.markers(view));\n        if (config.initialSpacer) {\n            this.spacer = new GutterElement(view, 0, 0, [config.initialSpacer(view)]);\n            this.dom.appendChild(this.spacer.dom);\n            this.spacer.dom.style.cssText += \"visibility: hidden; pointer-events: none\";\n        }\n    }\n    update(update) {\n        let prevMarkers = this.markers;\n        this.markers = asArray(this.config.markers(update.view));\n        if (this.spacer && this.config.updateSpacer) {\n            let updated = this.config.updateSpacer(this.spacer.markers[0], update);\n            if (updated != this.spacer.markers[0])\n                this.spacer.update(update.view, 0, 0, [updated]);\n        }\n        let vp = update.view.viewport;\n        return !state.RangeSet.eq(this.markers, prevMarkers, vp.from, vp.to) ||\n            (this.config.lineMarkerChange ? this.config.lineMarkerChange(update) : false);\n    }\n    destroy() {\n        for (let elt of this.elements)\n            elt.destroy();\n    }\n}\nclass GutterElement {\n    constructor(view, height, above, markers) {\n        this.height = -1;\n        this.above = 0;\n        this.markers = [];\n        this.dom = document.createElement(\"div\");\n        this.dom.className = \"cm-gutterElement\";\n        this.update(view, height, above, markers);\n    }\n    update(view, height, above, markers) {\n        if (this.height != height) {\n            this.height = height;\n            this.dom.style.height = height + \"px\";\n        }\n        if (this.above != above)\n            this.dom.style.marginTop = (this.above = above) ? above + \"px\" : \"\";\n        if (!sameMarkers(this.markers, markers))\n            this.setMarkers(view, markers);\n    }\n    setMarkers(view, markers) {\n        let cls = \"cm-gutterElement\", domPos = this.dom.firstChild;\n        for (let iNew = 0, iOld = 0;;) {\n            let skipTo = iOld, marker = iNew < markers.length ? markers[iNew++] : null, matched = false;\n            if (marker) {\n                let c = marker.elementClass;\n                if (c)\n                    cls += \" \" + c;\n                for (let i = iOld; i < this.markers.length; i++)\n                    if (this.markers[i].compare(marker)) {\n                        skipTo = i;\n                        matched = true;\n                        break;\n                    }\n            }\n            else {\n                skipTo = this.markers.length;\n            }\n            while (iOld < skipTo) {\n                let next = this.markers[iOld++];\n                if (next.toDOM) {\n                    next.destroy(domPos);\n                    let after = domPos.nextSibling;\n                    domPos.remove();\n                    domPos = after;\n                }\n            }\n            if (!marker)\n                break;\n            if (marker.toDOM) {\n                if (matched)\n                    domPos = domPos.nextSibling;\n                else\n                    this.dom.insertBefore(marker.toDOM(view), domPos);\n            }\n            if (matched)\n                iOld++;\n        }\n        this.dom.className = cls;\n        this.markers = markers;\n    }\n    destroy() {\n        this.setMarkers(null, []); // First argument not used unless creating markers\n    }\n}\nfunction sameMarkers(a, b) {\n    if (a.length != b.length)\n        return false;\n    for (let i = 0; i < a.length; i++)\n        if (!a[i].compare(b[i]))\n            return false;\n    return true;\n}\n/**\nFacet used to provide markers to the line number gutter.\n*/\nconst lineNumberMarkers = state.Facet.define();\n/**\nFacet used to create markers in the line number gutter next to widgets.\n*/\nconst lineNumberWidgetMarker = state.Facet.define();\nconst lineNumberConfig = state.Facet.define({\n    combine(values) {\n        return state.combineConfig(values, { formatNumber: String, domEventHandlers: {} }, {\n            domEventHandlers(a, b) {\n                let result = Object.assign({}, a);\n                for (let event in b) {\n                    let exists = result[event], add = b[event];\n                    result[event] = exists ? (view, line, event) => exists(view, line, event) || add(view, line, event) : add;\n                }\n                return result;\n            }\n        });\n    }\n});\nclass NumberMarker extends GutterMarker {\n    constructor(number) {\n        super();\n        this.number = number;\n    }\n    eq(other) { return this.number == other.number; }\n    toDOM() { return document.createTextNode(this.number); }\n}\nfunction formatNumber(view, number) {\n    return view.state.facet(lineNumberConfig).formatNumber(number, view.state);\n}\nconst lineNumberGutter = activeGutters.compute([lineNumberConfig], state => ({\n    class: \"cm-lineNumbers\",\n    renderEmptyElements: false,\n    markers(view) { return view.state.facet(lineNumberMarkers); },\n    lineMarker(view, line, others) {\n        if (others.some(m => m.toDOM))\n            return null;\n        return new NumberMarker(formatNumber(view, view.state.doc.lineAt(line.from).number));\n    },\n    widgetMarker: (view, widget, block) => {\n        for (let m of view.state.facet(lineNumberWidgetMarker)) {\n            let result = m(view, widget, block);\n            if (result)\n                return result;\n        }\n        return null;\n    },\n    lineMarkerChange: update => update.startState.facet(lineNumberConfig) != update.state.facet(lineNumberConfig),\n    initialSpacer(view) {\n        return new NumberMarker(formatNumber(view, maxLineNumber(view.state.doc.lines)));\n    },\n    updateSpacer(spacer, update) {\n        let max = formatNumber(update.view, maxLineNumber(update.view.state.doc.lines));\n        return max == spacer.number ? spacer : new NumberMarker(max);\n    },\n    domEventHandlers: state.facet(lineNumberConfig).domEventHandlers\n}));\n/**\nCreate a line number gutter extension.\n*/\nfunction lineNumbers(config = {}) {\n    return [\n        lineNumberConfig.of(config),\n        gutters(),\n        lineNumberGutter\n    ];\n}\nfunction maxLineNumber(lines) {\n    let last = 9;\n    while (last < lines)\n        last = last * 10 + 9;\n    return last;\n}\nconst activeLineGutterMarker = new class extends GutterMarker {\n    constructor() {\n        super(...arguments);\n        this.elementClass = \"cm-activeLineGutter\";\n    }\n};\nconst activeLineGutterHighlighter = gutterLineClass.compute([\"selection\"], state$1 => {\n    let marks = [], last = -1;\n    for (let range of state$1.selection.ranges) {\n        let linePos = state$1.doc.lineAt(range.head).from;\n        if (linePos > last) {\n            last = linePos;\n            marks.push(activeLineGutterMarker.range(linePos));\n        }\n    }\n    return state.RangeSet.of(marks);\n});\n/**\nReturns an extension that adds a `cm-activeLineGutter` class to\nall gutter elements on the [active\nline](https://codemirror.net/6/docs/ref/#view.highlightActiveLine).\n*/\nfunction highlightActiveLineGutter() {\n    return activeLineGutterHighlighter;\n}\n\nfunction matcher(decorator) {\n    return ViewPlugin.define(view => ({\n        decorations: decorator.createDeco(view),\n        update(u) {\n            this.decorations = decorator.updateDeco(u, this.decorations);\n        },\n    }), {\n        decorations: v => v.decorations\n    });\n}\nconst tabDeco = Decoration.mark({ class: \"cm-highlightTab\" });\nconst spaceDeco = Decoration.mark({ class: \"cm-highlightSpace\" });\nconst whitespaceHighlighter = matcher(new MatchDecorator({\n    regexp: /\\t| /g,\n    decoration: match => match[0] == \"\\t\" ? tabDeco : spaceDeco,\n    boundary: /\\S/,\n}));\n/**\nReturns an extension that highlights whitespace, adding a\n`cm-highlightSpace` class to stretches of spaces, and a\n`cm-highlightTab` class to individual tab characters. By default,\nthe former are shown as faint dots, and the latter as arrows.\n*/\nfunction highlightWhitespace() {\n    return whitespaceHighlighter;\n}\nconst trailingHighlighter = matcher(new MatchDecorator({\n    regexp: /\\s+$/g,\n    decoration: Decoration.mark({ class: \"cm-trailingSpace\" }),\n    boundary: /\\S/,\n}));\n/**\nReturns an extension that adds a `cm-trailingSpace` class to all\ntrailing whitespace.\n*/\nfunction highlightTrailingWhitespace() {\n    return trailingHighlighter;\n}\n\n/**\n@internal\n*/\nconst __test = { HeightMap, HeightOracle, MeasuredHeights, QueryType, ChangedRange, computeOrder,\n    moveVisually, clearHeightChangeFlag, getHeightChangeFlag: () => heightChangeFlag };\n\nexports.BidiSpan = BidiSpan;\nexports.BlockInfo = BlockInfo;\nexports.Decoration = Decoration;\nexports.EditorView = EditorView;\nexports.GutterMarker = GutterMarker;\nexports.MatchDecorator = MatchDecorator;\nexports.RectangleMarker = RectangleMarker;\nexports.ViewPlugin = ViewPlugin;\nexports.ViewUpdate = ViewUpdate;\nexports.WidgetType = WidgetType;\nexports.__test = __test;\nexports.closeHoverTooltips = closeHoverTooltips;\nexports.crosshairCursor = crosshairCursor;\nexports.drawSelection = drawSelection;\nexports.dropCursor = dropCursor;\nexports.getDrawSelectionConfig = getDrawSelectionConfig;\nexports.getPanel = getPanel;\nexports.getTooltip = getTooltip;\nexports.gutter = gutter;\nexports.gutterLineClass = gutterLineClass;\nexports.gutterWidgetClass = gutterWidgetClass;\nexports.gutters = gutters;\nexports.hasHoverTooltips = hasHoverTooltips;\nexports.highlightActiveLine = highlightActiveLine;\nexports.highlightActiveLineGutter = highlightActiveLineGutter;\nexports.highlightSpecialChars = highlightSpecialChars;\nexports.highlightTrailingWhitespace = highlightTrailingWhitespace;\nexports.highlightWhitespace = highlightWhitespace;\nexports.hoverTooltip = hoverTooltip;\nexports.keymap = keymap;\nexports.layer = layer;\nexports.lineNumberMarkers = lineNumberMarkers;\nexports.lineNumberWidgetMarker = lineNumberWidgetMarker;\nexports.lineNumbers = lineNumbers;\nexports.logException = logException;\nexports.panels = panels;\nexports.placeholder = placeholder;\nexports.rectangularSelection = rectangularSelection;\nexports.repositionTooltips = repositionTooltips;\nexports.runScopeHandlers = runScopeHandlers;\nexports.scrollPastEnd = scrollPastEnd;\nexports.showPanel = showPanel;\nexports.showTooltip = showTooltip;\nexports.tooltips = tooltips;\n","'use strict';\n\n/**\nThe default maximum length of a `TreeBuffer` node.\n*/\nconst DefaultBufferLength = 1024;\nlet nextPropID = 0;\nclass Range {\n    constructor(from, to) {\n        this.from = from;\n        this.to = to;\n    }\n}\n/**\nEach [node type](#common.NodeType) or [individual tree](#common.Tree)\ncan have metadata associated with it in props. Instances of this\nclass represent prop names.\n*/\nclass NodeProp {\n    /**\n    Create a new node prop type.\n    */\n    constructor(config = {}) {\n        this.id = nextPropID++;\n        this.perNode = !!config.perNode;\n        this.deserialize = config.deserialize || (() => {\n            throw new Error(\"This node type doesn't define a deserialize function\");\n        });\n    }\n    /**\n    This is meant to be used with\n    [`NodeSet.extend`](#common.NodeSet.extend) or\n    [`LRParser.configure`](#lr.ParserConfig.props) to compute\n    prop values for each node type in the set. Takes a [match\n    object](#common.NodeType^match) or function that returns undefined\n    if the node type doesn't get this prop, and the prop's value if\n    it does.\n    */\n    add(match) {\n        if (this.perNode)\n            throw new RangeError(\"Can't add per-node props to node types\");\n        if (typeof match != \"function\")\n            match = NodeType.match(match);\n        return (type) => {\n            let result = match(type);\n            return result === undefined ? null : [this, result];\n        };\n    }\n}\n/**\nProp that is used to describe matching delimiters. For opening\ndelimiters, this holds an array of node names (written as a\nspace-separated string when declaring this prop in a grammar)\nfor the node types of closing delimiters that match it.\n*/\nNodeProp.closedBy = new NodeProp({ deserialize: str => str.split(\" \") });\n/**\nThe inverse of [`closedBy`](#common.NodeProp^closedBy). This is\nattached to closing delimiters, holding an array of node names\nof types of matching opening delimiters.\n*/\nNodeProp.openedBy = new NodeProp({ deserialize: str => str.split(\" \") });\n/**\nUsed to assign node types to groups (for example, all node\ntypes that represent an expression could be tagged with an\n`\"Expression\"` group).\n*/\nNodeProp.group = new NodeProp({ deserialize: str => str.split(\" \") });\n/**\nAttached to nodes to indicate these should be\n[displayed](https://codemirror.net/docs/ref/#language.syntaxTree)\nin a bidirectional text isolate, so that direction-neutral\ncharacters on their sides don't incorrectly get associated with\nsurrounding text. You'll generally want to set this for nodes\nthat contain arbitrary text, like strings and comments, and for\nnodes that appear _inside_ arbitrary text, like HTML tags. When\nnot given a value, in a grammar declaration, defaults to\n`\"auto\"`.\n*/\nNodeProp.isolate = new NodeProp({ deserialize: value => {\n        if (value && value != \"rtl\" && value != \"ltr\" && value != \"auto\")\n            throw new RangeError(\"Invalid value for isolate: \" + value);\n        return value || \"auto\";\n    } });\n/**\nThe hash of the [context](#lr.ContextTracker.constructor)\nthat the node was parsed in, if any. Used to limit reuse of\ncontextual nodes.\n*/\nNodeProp.contextHash = new NodeProp({ perNode: true });\n/**\nThe distance beyond the end of the node that the tokenizer\nlooked ahead for any of the tokens inside the node. (The LR\nparser only stores this when it is larger than 25, for\nefficiency reasons.)\n*/\nNodeProp.lookAhead = new NodeProp({ perNode: true });\n/**\nThis per-node prop is used to replace a given node, or part of a\nnode, with another tree. This is useful to include trees from\ndifferent languages in mixed-language parsers.\n*/\nNodeProp.mounted = new NodeProp({ perNode: true });\n/**\nA mounted tree, which can be [stored](#common.NodeProp^mounted) on\na tree node to indicate that parts of its content are\nrepresented by another tree.\n*/\nclass MountedTree {\n    constructor(\n    /**\n    The inner tree.\n    */\n    tree, \n    /**\n    If this is null, this tree replaces the entire node (it will\n    be included in the regular iteration instead of its host\n    node). If not, only the given ranges are considered to be\n    covered by this tree. This is used for trees that are mixed in\n    a way that isn't strictly hierarchical. Such mounted trees are\n    only entered by [`resolveInner`](#common.Tree.resolveInner)\n    and [`enter`](#common.SyntaxNode.enter).\n    */\n    overlay, \n    /**\n    The parser used to create this subtree.\n    */\n    parser) {\n        this.tree = tree;\n        this.overlay = overlay;\n        this.parser = parser;\n    }\n    /**\n    @internal\n    */\n    static get(tree) {\n        return tree && tree.props && tree.props[NodeProp.mounted.id];\n    }\n}\nconst noProps = Object.create(null);\n/**\nEach node in a syntax tree has a node type associated with it.\n*/\nclass NodeType {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The name of the node type. Not necessarily unique, but if the\n    grammar was written properly, different node types with the\n    same name within a node set should play the same semantic\n    role.\n    */\n    name, \n    /**\n    @internal\n    */\n    props, \n    /**\n    The id of this node in its set. Corresponds to the term ids\n    used in the parser.\n    */\n    id, \n    /**\n    @internal\n    */\n    flags = 0) {\n        this.name = name;\n        this.props = props;\n        this.id = id;\n        this.flags = flags;\n    }\n    /**\n    Define a node type.\n    */\n    static define(spec) {\n        let props = spec.props && spec.props.length ? Object.create(null) : noProps;\n        let flags = (spec.top ? 1 /* NodeFlag.Top */ : 0) | (spec.skipped ? 2 /* NodeFlag.Skipped */ : 0) |\n            (spec.error ? 4 /* NodeFlag.Error */ : 0) | (spec.name == null ? 8 /* NodeFlag.Anonymous */ : 0);\n        let type = new NodeType(spec.name || \"\", props, spec.id, flags);\n        if (spec.props)\n            for (let src of spec.props) {\n                if (!Array.isArray(src))\n                    src = src(type);\n                if (src) {\n                    if (src[0].perNode)\n                        throw new RangeError(\"Can't store a per-node prop on a node type\");\n                    props[src[0].id] = src[1];\n                }\n            }\n        return type;\n    }\n    /**\n    Retrieves a node prop for this type. Will return `undefined` if\n    the prop isn't present on this node.\n    */\n    prop(prop) { return this.props[prop.id]; }\n    /**\n    True when this is the top node of a grammar.\n    */\n    get isTop() { return (this.flags & 1 /* NodeFlag.Top */) > 0; }\n    /**\n    True when this node is produced by a skip rule.\n    */\n    get isSkipped() { return (this.flags & 2 /* NodeFlag.Skipped */) > 0; }\n    /**\n    Indicates whether this is an error node.\n    */\n    get isError() { return (this.flags & 4 /* NodeFlag.Error */) > 0; }\n    /**\n    When true, this node type doesn't correspond to a user-declared\n    named node, for example because it is used to cache repetition.\n    */\n    get isAnonymous() { return (this.flags & 8 /* NodeFlag.Anonymous */) > 0; }\n    /**\n    Returns true when this node's name or one of its\n    [groups](#common.NodeProp^group) matches the given string.\n    */\n    is(name) {\n        if (typeof name == 'string') {\n            if (this.name == name)\n                return true;\n            let group = this.prop(NodeProp.group);\n            return group ? group.indexOf(name) > -1 : false;\n        }\n        return this.id == name;\n    }\n    /**\n    Create a function from node types to arbitrary values by\n    specifying an object whose property names are node or\n    [group](#common.NodeProp^group) names. Often useful with\n    [`NodeProp.add`](#common.NodeProp.add). You can put multiple\n    names, separated by spaces, in a single property name to map\n    multiple node names to a single value.\n    */\n    static match(map) {\n        let direct = Object.create(null);\n        for (let prop in map)\n            for (let name of prop.split(\" \"))\n                direct[name] = map[prop];\n        return (node) => {\n            for (let groups = node.prop(NodeProp.group), i = -1; i < (groups ? groups.length : 0); i++) {\n                let found = direct[i < 0 ? node.name : groups[i]];\n                if (found)\n                    return found;\n            }\n        };\n    }\n}\n/**\nAn empty dummy node type to use when no actual type is available.\n*/\nNodeType.none = new NodeType(\"\", Object.create(null), 0, 8 /* NodeFlag.Anonymous */);\n/**\nA node set holds a collection of node types. It is used to\ncompactly represent trees by storing their type ids, rather than a\nfull pointer to the type object, in a numeric array. Each parser\n[has](#lr.LRParser.nodeSet) a node set, and [tree\nbuffers](#common.TreeBuffer) can only store collections of nodes\nfrom the same set. A set can have a maximum of 2**16 (65536) node\ntypes in it, so that the ids fit into 16-bit typed array slots.\n*/\nclass NodeSet {\n    /**\n    Create a set with the given types. The `id` property of each\n    type should correspond to its position within the array.\n    */\n    constructor(\n    /**\n    The node types in this set, by id.\n    */\n    types) {\n        this.types = types;\n        for (let i = 0; i < types.length; i++)\n            if (types[i].id != i)\n                throw new RangeError(\"Node type ids should correspond to array positions when creating a node set\");\n    }\n    /**\n    Create a copy of this set with some node properties added. The\n    arguments to this method can be created with\n    [`NodeProp.add`](#common.NodeProp.add).\n    */\n    extend(...props) {\n        let newTypes = [];\n        for (let type of this.types) {\n            let newProps = null;\n            for (let source of props) {\n                let add = source(type);\n                if (add) {\n                    if (!newProps)\n                        newProps = Object.assign({}, type.props);\n                    newProps[add[0].id] = add[1];\n                }\n            }\n            newTypes.push(newProps ? new NodeType(type.name, newProps, type.id, type.flags) : type);\n        }\n        return new NodeSet(newTypes);\n    }\n}\nconst CachedNode = new WeakMap(), CachedInnerNode = new WeakMap();\n/**\nOptions that control iteration. Can be combined with the `|`\noperator to enable multiple ones.\n*/\nexports.IterMode = void 0;\n(function (IterMode) {\n    /**\n    When enabled, iteration will only visit [`Tree`](#common.Tree)\n    objects, not nodes packed into\n    [`TreeBuffer`](#common.TreeBuffer)s.\n    */\n    IterMode[IterMode[\"ExcludeBuffers\"] = 1] = \"ExcludeBuffers\";\n    /**\n    Enable this to make iteration include anonymous nodes (such as\n    the nodes that wrap repeated grammar constructs into a balanced\n    tree).\n    */\n    IterMode[IterMode[\"IncludeAnonymous\"] = 2] = \"IncludeAnonymous\";\n    /**\n    By default, regular [mounted](#common.NodeProp^mounted) nodes\n    replace their base node in iteration. Enable this to ignore them\n    instead.\n    */\n    IterMode[IterMode[\"IgnoreMounts\"] = 4] = \"IgnoreMounts\";\n    /**\n    This option only applies in\n    [`enter`](#common.SyntaxNode.enter)-style methods. It tells the\n    library to not enter mounted overlays if one covers the given\n    position.\n    */\n    IterMode[IterMode[\"IgnoreOverlays\"] = 8] = \"IgnoreOverlays\";\n})(exports.IterMode || (exports.IterMode = {}));\n/**\nA piece of syntax tree. There are two ways to approach these\ntrees: the way they are actually stored in memory, and the\nconvenient way.\n\nSyntax trees are stored as a tree of `Tree` and `TreeBuffer`\nobjects. By packing detail information into `TreeBuffer` leaf\nnodes, the representation is made a lot more memory-efficient.\n\nHowever, when you want to actually work with tree nodes, this\nrepresentation is very awkward, so most client code will want to\nuse the [`TreeCursor`](#common.TreeCursor) or\n[`SyntaxNode`](#common.SyntaxNode) interface instead, which provides\na view on some part of this data structure, and can be used to\nmove around to adjacent nodes.\n*/\nclass Tree {\n    /**\n    Construct a new tree. See also [`Tree.build`](#common.Tree^build).\n    */\n    constructor(\n    /**\n    The type of the top node.\n    */\n    type, \n    /**\n    This node's child nodes.\n    */\n    children, \n    /**\n    The positions (offsets relative to the start of this tree) of\n    the children.\n    */\n    positions, \n    /**\n    The total length of this tree\n    */\n    length, \n    /**\n    Per-node [node props](#common.NodeProp) to associate with this node.\n    */\n    props) {\n        this.type = type;\n        this.children = children;\n        this.positions = positions;\n        this.length = length;\n        /**\n        @internal\n        */\n        this.props = null;\n        if (props && props.length) {\n            this.props = Object.create(null);\n            for (let [prop, value] of props)\n                this.props[typeof prop == \"number\" ? prop : prop.id] = value;\n        }\n    }\n    /**\n    @internal\n    */\n    toString() {\n        let mounted = MountedTree.get(this);\n        if (mounted && !mounted.overlay)\n            return mounted.tree.toString();\n        let children = \"\";\n        for (let ch of this.children) {\n            let str = ch.toString();\n            if (str) {\n                if (children)\n                    children += \",\";\n                children += str;\n            }\n        }\n        return !this.type.name ? children :\n            (/\\W/.test(this.type.name) && !this.type.isError ? JSON.stringify(this.type.name) : this.type.name) +\n                (children.length ? \"(\" + children + \")\" : \"\");\n    }\n    /**\n    Get a [tree cursor](#common.TreeCursor) positioned at the top of\n    the tree. Mode can be used to [control](#common.IterMode) which\n    nodes the cursor visits.\n    */\n    cursor(mode = 0) {\n        return new TreeCursor(this.topNode, mode);\n    }\n    /**\n    Get a [tree cursor](#common.TreeCursor) pointing into this tree\n    at the given position and side (see\n    [`moveTo`](#common.TreeCursor.moveTo).\n    */\n    cursorAt(pos, side = 0, mode = 0) {\n        let scope = CachedNode.get(this) || this.topNode;\n        let cursor = new TreeCursor(scope);\n        cursor.moveTo(pos, side);\n        CachedNode.set(this, cursor._tree);\n        return cursor;\n    }\n    /**\n    Get a [syntax node](#common.SyntaxNode) object for the top of the\n    tree.\n    */\n    get topNode() {\n        return new TreeNode(this, 0, 0, null);\n    }\n    /**\n    Get the [syntax node](#common.SyntaxNode) at the given position.\n    If `side` is -1, this will move into nodes that end at the\n    position. If 1, it'll move into nodes that start at the\n    position. With 0, it'll only enter nodes that cover the position\n    from both sides.\n    \n    Note that this will not enter\n    [overlays](#common.MountedTree.overlay), and you often want\n    [`resolveInner`](#common.Tree.resolveInner) instead.\n    */\n    resolve(pos, side = 0) {\n        let node = resolveNode(CachedNode.get(this) || this.topNode, pos, side, false);\n        CachedNode.set(this, node);\n        return node;\n    }\n    /**\n    Like [`resolve`](#common.Tree.resolve), but will enter\n    [overlaid](#common.MountedTree.overlay) nodes, producing a syntax node\n    pointing into the innermost overlaid tree at the given position\n    (with parent links going through all parent structure, including\n    the host trees).\n    */\n    resolveInner(pos, side = 0) {\n        let node = resolveNode(CachedInnerNode.get(this) || this.topNode, pos, side, true);\n        CachedInnerNode.set(this, node);\n        return node;\n    }\n    /**\n    In some situations, it can be useful to iterate through all\n    nodes around a position, including those in overlays that don't\n    directly cover the position. This method gives you an iterator\n    that will produce all nodes, from small to big, around the given\n    position.\n    */\n    resolveStack(pos, side = 0) {\n        return stackIterator(this, pos, side);\n    }\n    /**\n    Iterate over the tree and its children, calling `enter` for any\n    node that touches the `from`/`to` region (if given) before\n    running over such a node's children, and `leave` (if given) when\n    leaving the node. When `enter` returns `false`, that node will\n    not have its children iterated over (or `leave` called).\n    */\n    iterate(spec) {\n        let { enter, leave, from = 0, to = this.length } = spec;\n        let mode = spec.mode || 0, anon = (mode & exports.IterMode.IncludeAnonymous) > 0;\n        for (let c = this.cursor(mode | exports.IterMode.IncludeAnonymous);;) {\n            let entered = false;\n            if (c.from <= to && c.to >= from && (!anon && c.type.isAnonymous || enter(c) !== false)) {\n                if (c.firstChild())\n                    continue;\n                entered = true;\n            }\n            for (;;) {\n                if (entered && leave && (anon || !c.type.isAnonymous))\n                    leave(c);\n                if (c.nextSibling())\n                    break;\n                if (!c.parent())\n                    return;\n                entered = true;\n            }\n        }\n    }\n    /**\n    Get the value of the given [node prop](#common.NodeProp) for this\n    node. Works with both per-node and per-type props.\n    */\n    prop(prop) {\n        return !prop.perNode ? this.type.prop(prop) : this.props ? this.props[prop.id] : undefined;\n    }\n    /**\n    Returns the node's [per-node props](#common.NodeProp.perNode) in a\n    format that can be passed to the [`Tree`](#common.Tree)\n    constructor.\n    */\n    get propValues() {\n        let result = [];\n        if (this.props)\n            for (let id in this.props)\n                result.push([+id, this.props[id]]);\n        return result;\n    }\n    /**\n    Balance the direct children of this tree, producing a copy of\n    which may have children grouped into subtrees with type\n    [`NodeType.none`](#common.NodeType^none).\n    */\n    balance(config = {}) {\n        return this.children.length <= 8 /* Balance.BranchFactor */ ? this :\n            balanceRange(NodeType.none, this.children, this.positions, 0, this.children.length, 0, this.length, (children, positions, length) => new Tree(this.type, children, positions, length, this.propValues), config.makeTree || ((children, positions, length) => new Tree(NodeType.none, children, positions, length)));\n    }\n    /**\n    Build a tree from a postfix-ordered buffer of node information,\n    or a cursor over such a buffer.\n    */\n    static build(data) { return buildTree(data); }\n}\n/**\nThe empty tree\n*/\nTree.empty = new Tree(NodeType.none, [], [], 0);\nclass FlatBufferCursor {\n    constructor(buffer, index) {\n        this.buffer = buffer;\n        this.index = index;\n    }\n    get id() { return this.buffer[this.index - 4]; }\n    get start() { return this.buffer[this.index - 3]; }\n    get end() { return this.buffer[this.index - 2]; }\n    get size() { return this.buffer[this.index - 1]; }\n    get pos() { return this.index; }\n    next() { this.index -= 4; }\n    fork() { return new FlatBufferCursor(this.buffer, this.index); }\n}\n/**\nTree buffers contain (type, start, end, endIndex) quads for each\nnode. In such a buffer, nodes are stored in prefix order (parents\nbefore children, with the endIndex of the parent indicating which\nchildren belong to it).\n*/\nclass TreeBuffer {\n    /**\n    Create a tree buffer.\n    */\n    constructor(\n    /**\n    The buffer's content.\n    */\n    buffer, \n    /**\n    The total length of the group of nodes in the buffer.\n    */\n    length, \n    /**\n    The node set used in this buffer.\n    */\n    set) {\n        this.buffer = buffer;\n        this.length = length;\n        this.set = set;\n    }\n    /**\n    @internal\n    */\n    get type() { return NodeType.none; }\n    /**\n    @internal\n    */\n    toString() {\n        let result = [];\n        for (let index = 0; index < this.buffer.length;) {\n            result.push(this.childString(index));\n            index = this.buffer[index + 3];\n        }\n        return result.join(\",\");\n    }\n    /**\n    @internal\n    */\n    childString(index) {\n        let id = this.buffer[index], endIndex = this.buffer[index + 3];\n        let type = this.set.types[id], result = type.name;\n        if (/\\W/.test(result) && !type.isError)\n            result = JSON.stringify(result);\n        index += 4;\n        if (endIndex == index)\n            return result;\n        let children = [];\n        while (index < endIndex) {\n            children.push(this.childString(index));\n            index = this.buffer[index + 3];\n        }\n        return result + \"(\" + children.join(\",\") + \")\";\n    }\n    /**\n    @internal\n    */\n    findChild(startIndex, endIndex, dir, pos, side) {\n        let { buffer } = this, pick = -1;\n        for (let i = startIndex; i != endIndex; i = buffer[i + 3]) {\n            if (checkSide(side, pos, buffer[i + 1], buffer[i + 2])) {\n                pick = i;\n                if (dir > 0)\n                    break;\n            }\n        }\n        return pick;\n    }\n    /**\n    @internal\n    */\n    slice(startI, endI, from) {\n        let b = this.buffer;\n        let copy = new Uint16Array(endI - startI), len = 0;\n        for (let i = startI, j = 0; i < endI;) {\n            copy[j++] = b[i++];\n            copy[j++] = b[i++] - from;\n            let to = copy[j++] = b[i++] - from;\n            copy[j++] = b[i++] - startI;\n            len = Math.max(len, to);\n        }\n        return new TreeBuffer(copy, len, this.set);\n    }\n}\nfunction checkSide(side, pos, from, to) {\n    switch (side) {\n        case -2 /* Side.Before */: return from < pos;\n        case -1 /* Side.AtOrBefore */: return to >= pos && from < pos;\n        case 0 /* Side.Around */: return from < pos && to > pos;\n        case 1 /* Side.AtOrAfter */: return from <= pos && to > pos;\n        case 2 /* Side.After */: return to > pos;\n        case 4 /* Side.DontCare */: return true;\n    }\n}\nfunction resolveNode(node, pos, side, overlays) {\n    var _a;\n    // Move up to a node that actually holds the position, if possible\n    while (node.from == node.to ||\n        (side < 1 ? node.from >= pos : node.from > pos) ||\n        (side > -1 ? node.to <= pos : node.to < pos)) {\n        let parent = !overlays && node instanceof TreeNode && node.index < 0 ? null : node.parent;\n        if (!parent)\n            return node;\n        node = parent;\n    }\n    let mode = overlays ? 0 : exports.IterMode.IgnoreOverlays;\n    // Must go up out of overlays when those do not overlap with pos\n    if (overlays)\n        for (let scan = node, parent = scan.parent; parent; scan = parent, parent = scan.parent) {\n            if (scan instanceof TreeNode && scan.index < 0 && ((_a = parent.enter(pos, side, mode)) === null || _a === void 0 ? void 0 : _a.from) != scan.from)\n                node = parent;\n        }\n    for (;;) {\n        let inner = node.enter(pos, side, mode);\n        if (!inner)\n            return node;\n        node = inner;\n    }\n}\nclass BaseNode {\n    cursor(mode = 0) { return new TreeCursor(this, mode); }\n    getChild(type, before = null, after = null) {\n        let r = getChildren(this, type, before, after);\n        return r.length ? r[0] : null;\n    }\n    getChildren(type, before = null, after = null) {\n        return getChildren(this, type, before, after);\n    }\n    resolve(pos, side = 0) {\n        return resolveNode(this, pos, side, false);\n    }\n    resolveInner(pos, side = 0) {\n        return resolveNode(this, pos, side, true);\n    }\n    matchContext(context) {\n        return matchNodeContext(this.parent, context);\n    }\n    enterUnfinishedNodesBefore(pos) {\n        let scan = this.childBefore(pos), node = this;\n        while (scan) {\n            let last = scan.lastChild;\n            if (!last || last.to != scan.to)\n                break;\n            if (last.type.isError && last.from == last.to) {\n                node = scan;\n                scan = last.prevSibling;\n            }\n            else {\n                scan = last;\n            }\n        }\n        return node;\n    }\n    get node() { return this; }\n    get next() { return this.parent; }\n}\nclass TreeNode extends BaseNode {\n    constructor(_tree, from, \n    // Index in parent node, set to -1 if the node is not a direct child of _parent.node (overlay)\n    index, _parent) {\n        super();\n        this._tree = _tree;\n        this.from = from;\n        this.index = index;\n        this._parent = _parent;\n    }\n    get type() { return this._tree.type; }\n    get name() { return this._tree.type.name; }\n    get to() { return this.from + this._tree.length; }\n    nextChild(i, dir, pos, side, mode = 0) {\n        for (let parent = this;;) {\n            for (let { children, positions } = parent._tree, e = dir > 0 ? children.length : -1; i != e; i += dir) {\n                let next = children[i], start = positions[i] + parent.from;\n                if (!checkSide(side, pos, start, start + next.length))\n                    continue;\n                if (next instanceof TreeBuffer) {\n                    if (mode & exports.IterMode.ExcludeBuffers)\n                        continue;\n                    let index = next.findChild(0, next.buffer.length, dir, pos - start, side);\n                    if (index > -1)\n                        return new BufferNode(new BufferContext(parent, next, i, start), null, index);\n                }\n                else if ((mode & exports.IterMode.IncludeAnonymous) || (!next.type.isAnonymous || hasChild(next))) {\n                    let mounted;\n                    if (!(mode & exports.IterMode.IgnoreMounts) && (mounted = MountedTree.get(next)) && !mounted.overlay)\n                        return new TreeNode(mounted.tree, start, i, parent);\n                    let inner = new TreeNode(next, start, i, parent);\n                    return (mode & exports.IterMode.IncludeAnonymous) || !inner.type.isAnonymous ? inner\n                        : inner.nextChild(dir < 0 ? next.children.length - 1 : 0, dir, pos, side);\n                }\n            }\n            if ((mode & exports.IterMode.IncludeAnonymous) || !parent.type.isAnonymous)\n                return null;\n            if (parent.index >= 0)\n                i = parent.index + dir;\n            else\n                i = dir < 0 ? -1 : parent._parent._tree.children.length;\n            parent = parent._parent;\n            if (!parent)\n                return null;\n        }\n    }\n    get firstChild() { return this.nextChild(0, 1, 0, 4 /* Side.DontCare */); }\n    get lastChild() { return this.nextChild(this._tree.children.length - 1, -1, 0, 4 /* Side.DontCare */); }\n    childAfter(pos) { return this.nextChild(0, 1, pos, 2 /* Side.After */); }\n    childBefore(pos) { return this.nextChild(this._tree.children.length - 1, -1, pos, -2 /* Side.Before */); }\n    enter(pos, side, mode = 0) {\n        let mounted;\n        if (!(mode & exports.IterMode.IgnoreOverlays) && (mounted = MountedTree.get(this._tree)) && mounted.overlay) {\n            let rPos = pos - this.from;\n            for (let { from, to } of mounted.overlay) {\n                if ((side > 0 ? from <= rPos : from < rPos) &&\n                    (side < 0 ? to >= rPos : to > rPos))\n                    return new TreeNode(mounted.tree, mounted.overlay[0].from + this.from, -1, this);\n            }\n        }\n        return this.nextChild(0, 1, pos, side, mode);\n    }\n    nextSignificantParent() {\n        let val = this;\n        while (val.type.isAnonymous && val._parent)\n            val = val._parent;\n        return val;\n    }\n    get parent() {\n        return this._parent ? this._parent.nextSignificantParent() : null;\n    }\n    get nextSibling() {\n        return this._parent && this.index >= 0 ? this._parent.nextChild(this.index + 1, 1, 0, 4 /* Side.DontCare */) : null;\n    }\n    get prevSibling() {\n        return this._parent && this.index >= 0 ? this._parent.nextChild(this.index - 1, -1, 0, 4 /* Side.DontCare */) : null;\n    }\n    get tree() { return this._tree; }\n    toTree() { return this._tree; }\n    /**\n    @internal\n    */\n    toString() { return this._tree.toString(); }\n}\nfunction getChildren(node, type, before, after) {\n    let cur = node.cursor(), result = [];\n    if (!cur.firstChild())\n        return result;\n    if (before != null)\n        for (let found = false; !found;) {\n            found = cur.type.is(before);\n            if (!cur.nextSibling())\n                return result;\n        }\n    for (;;) {\n        if (after != null && cur.type.is(after))\n            return result;\n        if (cur.type.is(type))\n            result.push(cur.node);\n        if (!cur.nextSibling())\n            return after == null ? result : [];\n    }\n}\nfunction matchNodeContext(node, context, i = context.length - 1) {\n    for (let p = node; i >= 0; p = p.parent) {\n        if (!p)\n            return false;\n        if (!p.type.isAnonymous) {\n            if (context[i] && context[i] != p.name)\n                return false;\n            i--;\n        }\n    }\n    return true;\n}\nclass BufferContext {\n    constructor(parent, buffer, index, start) {\n        this.parent = parent;\n        this.buffer = buffer;\n        this.index = index;\n        this.start = start;\n    }\n}\nclass BufferNode extends BaseNode {\n    get name() { return this.type.name; }\n    get from() { return this.context.start + this.context.buffer.buffer[this.index + 1]; }\n    get to() { return this.context.start + this.context.buffer.buffer[this.index + 2]; }\n    constructor(context, _parent, index) {\n        super();\n        this.context = context;\n        this._parent = _parent;\n        this.index = index;\n        this.type = context.buffer.set.types[context.buffer.buffer[index]];\n    }\n    child(dir, pos, side) {\n        let { buffer } = this.context;\n        let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], dir, pos - this.context.start, side);\n        return index < 0 ? null : new BufferNode(this.context, this, index);\n    }\n    get firstChild() { return this.child(1, 0, 4 /* Side.DontCare */); }\n    get lastChild() { return this.child(-1, 0, 4 /* Side.DontCare */); }\n    childAfter(pos) { return this.child(1, pos, 2 /* Side.After */); }\n    childBefore(pos) { return this.child(-1, pos, -2 /* Side.Before */); }\n    enter(pos, side, mode = 0) {\n        if (mode & exports.IterMode.ExcludeBuffers)\n            return null;\n        let { buffer } = this.context;\n        let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], side > 0 ? 1 : -1, pos - this.context.start, side);\n        return index < 0 ? null : new BufferNode(this.context, this, index);\n    }\n    get parent() {\n        return this._parent || this.context.parent.nextSignificantParent();\n    }\n    externalSibling(dir) {\n        return this._parent ? null : this.context.parent.nextChild(this.context.index + dir, dir, 0, 4 /* Side.DontCare */);\n    }\n    get nextSibling() {\n        let { buffer } = this.context;\n        let after = buffer.buffer[this.index + 3];\n        if (after < (this._parent ? buffer.buffer[this._parent.index + 3] : buffer.buffer.length))\n            return new BufferNode(this.context, this._parent, after);\n        return this.externalSibling(1);\n    }\n    get prevSibling() {\n        let { buffer } = this.context;\n        let parentStart = this._parent ? this._parent.index + 4 : 0;\n        if (this.index == parentStart)\n            return this.externalSibling(-1);\n        return new BufferNode(this.context, this._parent, buffer.findChild(parentStart, this.index, -1, 0, 4 /* Side.DontCare */));\n    }\n    get tree() { return null; }\n    toTree() {\n        let children = [], positions = [];\n        let { buffer } = this.context;\n        let startI = this.index + 4, endI = buffer.buffer[this.index + 3];\n        if (endI > startI) {\n            let from = buffer.buffer[this.index + 1];\n            children.push(buffer.slice(startI, endI, from));\n            positions.push(0);\n        }\n        return new Tree(this.type, children, positions, this.to - this.from);\n    }\n    /**\n    @internal\n    */\n    toString() { return this.context.buffer.childString(this.index); }\n}\nfunction iterStack(heads) {\n    if (!heads.length)\n        return null;\n    let pick = 0, picked = heads[0];\n    for (let i = 1; i < heads.length; i++) {\n        let node = heads[i];\n        if (node.from > picked.from || node.to < picked.to) {\n            picked = node;\n            pick = i;\n        }\n    }\n    let next = picked instanceof TreeNode && picked.index < 0 ? null : picked.parent;\n    let newHeads = heads.slice();\n    if (next)\n        newHeads[pick] = next;\n    else\n        newHeads.splice(pick, 1);\n    return new StackIterator(newHeads, picked);\n}\nclass StackIterator {\n    constructor(heads, node) {\n        this.heads = heads;\n        this.node = node;\n    }\n    get next() { return iterStack(this.heads); }\n}\nfunction stackIterator(tree, pos, side) {\n    let inner = tree.resolveInner(pos, side), layers = null;\n    for (let scan = inner instanceof TreeNode ? inner : inner.context.parent; scan; scan = scan.parent) {\n        if (scan.index < 0) { // This is an overlay root\n            let parent = scan.parent;\n            (layers || (layers = [inner])).push(parent.resolve(pos, side));\n            scan = parent;\n        }\n        else {\n            let mount = MountedTree.get(scan.tree);\n            // Relevant overlay branching off\n            if (mount && mount.overlay && mount.overlay[0].from <= pos && mount.overlay[mount.overlay.length - 1].to >= pos) {\n                let root = new TreeNode(mount.tree, mount.overlay[0].from + scan.from, -1, scan);\n                (layers || (layers = [inner])).push(resolveNode(root, pos, side, false));\n            }\n        }\n    }\n    return layers ? iterStack(layers) : inner;\n}\n/**\nA tree cursor object focuses on a given node in a syntax tree, and\nallows you to move to adjacent nodes.\n*/\nclass TreeCursor {\n    /**\n    Shorthand for `.type.name`.\n    */\n    get name() { return this.type.name; }\n    /**\n    @internal\n    */\n    constructor(node, \n    /**\n    @internal\n    */\n    mode = 0) {\n        this.mode = mode;\n        /**\n        @internal\n        */\n        this.buffer = null;\n        this.stack = [];\n        /**\n        @internal\n        */\n        this.index = 0;\n        this.bufferNode = null;\n        if (node instanceof TreeNode) {\n            this.yieldNode(node);\n        }\n        else {\n            this._tree = node.context.parent;\n            this.buffer = node.context;\n            for (let n = node._parent; n; n = n._parent)\n                this.stack.unshift(n.index);\n            this.bufferNode = node;\n            this.yieldBuf(node.index);\n        }\n    }\n    yieldNode(node) {\n        if (!node)\n            return false;\n        this._tree = node;\n        this.type = node.type;\n        this.from = node.from;\n        this.to = node.to;\n        return true;\n    }\n    yieldBuf(index, type) {\n        this.index = index;\n        let { start, buffer } = this.buffer;\n        this.type = type || buffer.set.types[buffer.buffer[index]];\n        this.from = start + buffer.buffer[index + 1];\n        this.to = start + buffer.buffer[index + 2];\n        return true;\n    }\n    /**\n    @internal\n    */\n    yield(node) {\n        if (!node)\n            return false;\n        if (node instanceof TreeNode) {\n            this.buffer = null;\n            return this.yieldNode(node);\n        }\n        this.buffer = node.context;\n        return this.yieldBuf(node.index, node.type);\n    }\n    /**\n    @internal\n    */\n    toString() {\n        return this.buffer ? this.buffer.buffer.childString(this.index) : this._tree.toString();\n    }\n    /**\n    @internal\n    */\n    enterChild(dir, pos, side) {\n        if (!this.buffer)\n            return this.yield(this._tree.nextChild(dir < 0 ? this._tree._tree.children.length - 1 : 0, dir, pos, side, this.mode));\n        let { buffer } = this.buffer;\n        let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], dir, pos - this.buffer.start, side);\n        if (index < 0)\n            return false;\n        this.stack.push(this.index);\n        return this.yieldBuf(index);\n    }\n    /**\n    Move the cursor to this node's first child. When this returns\n    false, the node has no child, and the cursor has not been moved.\n    */\n    firstChild() { return this.enterChild(1, 0, 4 /* Side.DontCare */); }\n    /**\n    Move the cursor to this node's last child.\n    */\n    lastChild() { return this.enterChild(-1, 0, 4 /* Side.DontCare */); }\n    /**\n    Move the cursor to the first child that ends after `pos`.\n    */\n    childAfter(pos) { return this.enterChild(1, pos, 2 /* Side.After */); }\n    /**\n    Move to the last child that starts before `pos`.\n    */\n    childBefore(pos) { return this.enterChild(-1, pos, -2 /* Side.Before */); }\n    /**\n    Move the cursor to the child around `pos`. If side is -1 the\n    child may end at that position, when 1 it may start there. This\n    will also enter [overlaid](#common.MountedTree.overlay)\n    [mounted](#common.NodeProp^mounted) trees unless `overlays` is\n    set to false.\n    */\n    enter(pos, side, mode = this.mode) {\n        if (!this.buffer)\n            return this.yield(this._tree.enter(pos, side, mode));\n        return mode & exports.IterMode.ExcludeBuffers ? false : this.enterChild(1, pos, side);\n    }\n    /**\n    Move to the node's parent node, if this isn't the top node.\n    */\n    parent() {\n        if (!this.buffer)\n            return this.yieldNode((this.mode & exports.IterMode.IncludeAnonymous) ? this._tree._parent : this._tree.parent);\n        if (this.stack.length)\n            return this.yieldBuf(this.stack.pop());\n        let parent = (this.mode & exports.IterMode.IncludeAnonymous) ? this.buffer.parent : this.buffer.parent.nextSignificantParent();\n        this.buffer = null;\n        return this.yieldNode(parent);\n    }\n    /**\n    @internal\n    */\n    sibling(dir) {\n        if (!this.buffer)\n            return !this._tree._parent ? false\n                : this.yield(this._tree.index < 0 ? null\n                    : this._tree._parent.nextChild(this._tree.index + dir, dir, 0, 4 /* Side.DontCare */, this.mode));\n        let { buffer } = this.buffer, d = this.stack.length - 1;\n        if (dir < 0) {\n            let parentStart = d < 0 ? 0 : this.stack[d] + 4;\n            if (this.index != parentStart)\n                return this.yieldBuf(buffer.findChild(parentStart, this.index, -1, 0, 4 /* Side.DontCare */));\n        }\n        else {\n            let after = buffer.buffer[this.index + 3];\n            if (after < (d < 0 ? buffer.buffer.length : buffer.buffer[this.stack[d] + 3]))\n                return this.yieldBuf(after);\n        }\n        return d < 0 ? this.yield(this.buffer.parent.nextChild(this.buffer.index + dir, dir, 0, 4 /* Side.DontCare */, this.mode)) : false;\n    }\n    /**\n    Move to this node's next sibling, if any.\n    */\n    nextSibling() { return this.sibling(1); }\n    /**\n    Move to this node's previous sibling, if any.\n    */\n    prevSibling() { return this.sibling(-1); }\n    atLastNode(dir) {\n        let index, parent, { buffer } = this;\n        if (buffer) {\n            if (dir > 0) {\n                if (this.index < buffer.buffer.buffer.length)\n                    return false;\n            }\n            else {\n                for (let i = 0; i < this.index; i++)\n                    if (buffer.buffer.buffer[i + 3] < this.index)\n                        return false;\n            }\n            ({ index, parent } = buffer);\n        }\n        else {\n            ({ index, _parent: parent } = this._tree);\n        }\n        for (; parent; { index, _parent: parent } = parent) {\n            if (index > -1)\n                for (let i = index + dir, e = dir < 0 ? -1 : parent._tree.children.length; i != e; i += dir) {\n                    let child = parent._tree.children[i];\n                    if ((this.mode & exports.IterMode.IncludeAnonymous) ||\n                        child instanceof TreeBuffer ||\n                        !child.type.isAnonymous ||\n                        hasChild(child))\n                        return false;\n                }\n        }\n        return true;\n    }\n    move(dir, enter) {\n        if (enter && this.enterChild(dir, 0, 4 /* Side.DontCare */))\n            return true;\n        for (;;) {\n            if (this.sibling(dir))\n                return true;\n            if (this.atLastNode(dir) || !this.parent())\n                return false;\n        }\n    }\n    /**\n    Move to the next node in a\n    [pre-order](https://en.wikipedia.org/wiki/Tree_traversal#Pre-order,_NLR)\n    traversal, going from a node to its first child or, if the\n    current node is empty or `enter` is false, its next sibling or\n    the next sibling of the first parent node that has one.\n    */\n    next(enter = true) { return this.move(1, enter); }\n    /**\n    Move to the next node in a last-to-first pre-order traversal. A\n    node is followed by its last child or, if it has none, its\n    previous sibling or the previous sibling of the first parent\n    node that has one.\n    */\n    prev(enter = true) { return this.move(-1, enter); }\n    /**\n    Move the cursor to the innermost node that covers `pos`. If\n    `side` is -1, it will enter nodes that end at `pos`. If it is 1,\n    it will enter nodes that start at `pos`.\n    */\n    moveTo(pos, side = 0) {\n        // Move up to a node that actually holds the position, if possible\n        while (this.from == this.to ||\n            (side < 1 ? this.from >= pos : this.from > pos) ||\n            (side > -1 ? this.to <= pos : this.to < pos))\n            if (!this.parent())\n                break;\n        // Then scan down into child nodes as far as possible\n        while (this.enterChild(1, pos, side)) { }\n        return this;\n    }\n    /**\n    Get a [syntax node](#common.SyntaxNode) at the cursor's current\n    position.\n    */\n    get node() {\n        if (!this.buffer)\n            return this._tree;\n        let cache = this.bufferNode, result = null, depth = 0;\n        if (cache && cache.context == this.buffer) {\n            scan: for (let index = this.index, d = this.stack.length; d >= 0;) {\n                for (let c = cache; c; c = c._parent)\n                    if (c.index == index) {\n                        if (index == this.index)\n                            return c;\n                        result = c;\n                        depth = d + 1;\n                        break scan;\n                    }\n                index = this.stack[--d];\n            }\n        }\n        for (let i = depth; i < this.stack.length; i++)\n            result = new BufferNode(this.buffer, result, this.stack[i]);\n        return this.bufferNode = new BufferNode(this.buffer, result, this.index);\n    }\n    /**\n    Get the [tree](#common.Tree) that represents the current node, if\n    any. Will return null when the node is in a [tree\n    buffer](#common.TreeBuffer).\n    */\n    get tree() {\n        return this.buffer ? null : this._tree._tree;\n    }\n    /**\n    Iterate over the current node and all its descendants, calling\n    `enter` when entering a node and `leave`, if given, when leaving\n    one. When `enter` returns `false`, any children of that node are\n    skipped, and `leave` isn't called for it.\n    */\n    iterate(enter, leave) {\n        for (let depth = 0;;) {\n            let mustLeave = false;\n            if (this.type.isAnonymous || enter(this) !== false) {\n                if (this.firstChild()) {\n                    depth++;\n                    continue;\n                }\n                if (!this.type.isAnonymous)\n                    mustLeave = true;\n            }\n            for (;;) {\n                if (mustLeave && leave)\n                    leave(this);\n                mustLeave = this.type.isAnonymous;\n                if (!depth)\n                    return;\n                if (this.nextSibling())\n                    break;\n                this.parent();\n                depth--;\n                mustLeave = true;\n            }\n        }\n    }\n    /**\n    Test whether the current node matches a given context—a sequence\n    of direct parent node names. Empty strings in the context array\n    are treated as wildcards.\n    */\n    matchContext(context) {\n        if (!this.buffer)\n            return matchNodeContext(this.node.parent, context);\n        let { buffer } = this.buffer, { types } = buffer.set;\n        for (let i = context.length - 1, d = this.stack.length - 1; i >= 0; d--) {\n            if (d < 0)\n                return matchNodeContext(this._tree, context, i);\n            let type = types[buffer.buffer[this.stack[d]]];\n            if (!type.isAnonymous) {\n                if (context[i] && context[i] != type.name)\n                    return false;\n                i--;\n            }\n        }\n        return true;\n    }\n}\nfunction hasChild(tree) {\n    return tree.children.some(ch => ch instanceof TreeBuffer || !ch.type.isAnonymous || hasChild(ch));\n}\nfunction buildTree(data) {\n    var _a;\n    let { buffer, nodeSet, maxBufferLength = DefaultBufferLength, reused = [], minRepeatType = nodeSet.types.length } = data;\n    let cursor = Array.isArray(buffer) ? new FlatBufferCursor(buffer, buffer.length) : buffer;\n    let types = nodeSet.types;\n    let contextHash = 0, lookAhead = 0;\n    function takeNode(parentStart, minPos, children, positions, inRepeat, depth) {\n        let { id, start, end, size } = cursor;\n        let lookAheadAtStart = lookAhead, contextAtStart = contextHash;\n        while (size < 0) {\n            cursor.next();\n            if (size == -1 /* SpecialRecord.Reuse */) {\n                let node = reused[id];\n                children.push(node);\n                positions.push(start - parentStart);\n                return;\n            }\n            else if (size == -3 /* SpecialRecord.ContextChange */) { // Context change\n                contextHash = id;\n                return;\n            }\n            else if (size == -4 /* SpecialRecord.LookAhead */) {\n                lookAhead = id;\n                return;\n            }\n            else {\n                throw new RangeError(`Unrecognized record size: ${size}`);\n            }\n        }\n        let type = types[id], node, buffer;\n        let startPos = start - parentStart;\n        if (end - start <= maxBufferLength && (buffer = findBufferSize(cursor.pos - minPos, inRepeat))) {\n            // Small enough for a buffer, and no reused nodes inside\n            let data = new Uint16Array(buffer.size - buffer.skip);\n            let endPos = cursor.pos - buffer.size, index = data.length;\n            while (cursor.pos > endPos)\n                index = copyToBuffer(buffer.start, data, index);\n            node = new TreeBuffer(data, end - buffer.start, nodeSet);\n            startPos = buffer.start - parentStart;\n        }\n        else { // Make it a node\n            let endPos = cursor.pos - size;\n            cursor.next();\n            let localChildren = [], localPositions = [];\n            let localInRepeat = id >= minRepeatType ? id : -1;\n            let lastGroup = 0, lastEnd = end;\n            while (cursor.pos > endPos) {\n                if (localInRepeat >= 0 && cursor.id == localInRepeat && cursor.size >= 0) {\n                    if (cursor.end <= lastEnd - maxBufferLength) {\n                        makeRepeatLeaf(localChildren, localPositions, start, lastGroup, cursor.end, lastEnd, localInRepeat, lookAheadAtStart, contextAtStart);\n                        lastGroup = localChildren.length;\n                        lastEnd = cursor.end;\n                    }\n                    cursor.next();\n                }\n                else if (depth > 2500 /* CutOff.Depth */) {\n                    takeFlatNode(start, endPos, localChildren, localPositions);\n                }\n                else {\n                    takeNode(start, endPos, localChildren, localPositions, localInRepeat, depth + 1);\n                }\n            }\n            if (localInRepeat >= 0 && lastGroup > 0 && lastGroup < localChildren.length)\n                makeRepeatLeaf(localChildren, localPositions, start, lastGroup, start, lastEnd, localInRepeat, lookAheadAtStart, contextAtStart);\n            localChildren.reverse();\n            localPositions.reverse();\n            if (localInRepeat > -1 && lastGroup > 0) {\n                let make = makeBalanced(type, contextAtStart);\n                node = balanceRange(type, localChildren, localPositions, 0, localChildren.length, 0, end - start, make, make);\n            }\n            else {\n                node = makeTree(type, localChildren, localPositions, end - start, lookAheadAtStart - end, contextAtStart);\n            }\n        }\n        children.push(node);\n        positions.push(startPos);\n    }\n    function takeFlatNode(parentStart, minPos, children, positions) {\n        let nodes = []; // Temporary, inverted array of leaf nodes found, with absolute positions\n        let nodeCount = 0, stopAt = -1;\n        while (cursor.pos > minPos) {\n            let { id, start, end, size } = cursor;\n            if (size > 4) { // Not a leaf\n                cursor.next();\n            }\n            else if (stopAt > -1 && start < stopAt) {\n                break;\n            }\n            else {\n                if (stopAt < 0)\n                    stopAt = end - maxBufferLength;\n                nodes.push(id, start, end);\n                nodeCount++;\n                cursor.next();\n            }\n        }\n        if (nodeCount) {\n            let buffer = new Uint16Array(nodeCount * 4);\n            let start = nodes[nodes.length - 2];\n            for (let i = nodes.length - 3, j = 0; i >= 0; i -= 3) {\n                buffer[j++] = nodes[i];\n                buffer[j++] = nodes[i + 1] - start;\n                buffer[j++] = nodes[i + 2] - start;\n                buffer[j++] = j;\n            }\n            children.push(new TreeBuffer(buffer, nodes[2] - start, nodeSet));\n            positions.push(start - parentStart);\n        }\n    }\n    function makeBalanced(type, contextHash) {\n        return (children, positions, length) => {\n            let lookAhead = 0, lastI = children.length - 1, last, lookAheadProp;\n            if (lastI >= 0 && (last = children[lastI]) instanceof Tree) {\n                if (!lastI && last.type == type && last.length == length)\n                    return last;\n                if (lookAheadProp = last.prop(NodeProp.lookAhead))\n                    lookAhead = positions[lastI] + last.length + lookAheadProp;\n            }\n            return makeTree(type, children, positions, length, lookAhead, contextHash);\n        };\n    }\n    function makeRepeatLeaf(children, positions, base, i, from, to, type, lookAhead, contextHash) {\n        let localChildren = [], localPositions = [];\n        while (children.length > i) {\n            localChildren.push(children.pop());\n            localPositions.push(positions.pop() + base - from);\n        }\n        children.push(makeTree(nodeSet.types[type], localChildren, localPositions, to - from, lookAhead - to, contextHash));\n        positions.push(from - base);\n    }\n    function makeTree(type, children, positions, length, lookAhead, contextHash, props) {\n        if (contextHash) {\n            let pair = [NodeProp.contextHash, contextHash];\n            props = props ? [pair].concat(props) : [pair];\n        }\n        if (lookAhead > 25) {\n            let pair = [NodeProp.lookAhead, lookAhead];\n            props = props ? [pair].concat(props) : [pair];\n        }\n        return new Tree(type, children, positions, length, props);\n    }\n    function findBufferSize(maxSize, inRepeat) {\n        // Scan through the buffer to find previous siblings that fit\n        // together in a TreeBuffer, and don't contain any reused nodes\n        // (which can't be stored in a buffer).\n        // If `inRepeat` is > -1, ignore node boundaries of that type for\n        // nesting, but make sure the end falls either at the start\n        // (`maxSize`) or before such a node.\n        let fork = cursor.fork();\n        let size = 0, start = 0, skip = 0, minStart = fork.end - maxBufferLength;\n        let result = { size: 0, start: 0, skip: 0 };\n        scan: for (let minPos = fork.pos - maxSize; fork.pos > minPos;) {\n            let nodeSize = fork.size;\n            // Pretend nested repeat nodes of the same type don't exist\n            if (fork.id == inRepeat && nodeSize >= 0) {\n                // Except that we store the current state as a valid return\n                // value.\n                result.size = size;\n                result.start = start;\n                result.skip = skip;\n                skip += 4;\n                size += 4;\n                fork.next();\n                continue;\n            }\n            let startPos = fork.pos - nodeSize;\n            if (nodeSize < 0 || startPos < minPos || fork.start < minStart)\n                break;\n            let localSkipped = fork.id >= minRepeatType ? 4 : 0;\n            let nodeStart = fork.start;\n            fork.next();\n            while (fork.pos > startPos) {\n                if (fork.size < 0) {\n                    if (fork.size == -3 /* SpecialRecord.ContextChange */)\n                        localSkipped += 4;\n                    else\n                        break scan;\n                }\n                else if (fork.id >= minRepeatType) {\n                    localSkipped += 4;\n                }\n                fork.next();\n            }\n            start = nodeStart;\n            size += nodeSize;\n            skip += localSkipped;\n        }\n        if (inRepeat < 0 || size == maxSize) {\n            result.size = size;\n            result.start = start;\n            result.skip = skip;\n        }\n        return result.size > 4 ? result : undefined;\n    }\n    function copyToBuffer(bufferStart, buffer, index) {\n        let { id, start, end, size } = cursor;\n        cursor.next();\n        if (size >= 0 && id < minRepeatType) {\n            let startIndex = index;\n            if (size > 4) {\n                let endPos = cursor.pos - (size - 4);\n                while (cursor.pos > endPos)\n                    index = copyToBuffer(bufferStart, buffer, index);\n            }\n            buffer[--index] = startIndex;\n            buffer[--index] = end - bufferStart;\n            buffer[--index] = start - bufferStart;\n            buffer[--index] = id;\n        }\n        else if (size == -3 /* SpecialRecord.ContextChange */) {\n            contextHash = id;\n        }\n        else if (size == -4 /* SpecialRecord.LookAhead */) {\n            lookAhead = id;\n        }\n        return index;\n    }\n    let children = [], positions = [];\n    while (cursor.pos > 0)\n        takeNode(data.start || 0, data.bufferStart || 0, children, positions, -1, 0);\n    let length = (_a = data.length) !== null && _a !== void 0 ? _a : (children.length ? positions[0] + children[0].length : 0);\n    return new Tree(types[data.topID], children.reverse(), positions.reverse(), length);\n}\nconst nodeSizeCache = new WeakMap;\nfunction nodeSize(balanceType, node) {\n    if (!balanceType.isAnonymous || node instanceof TreeBuffer || node.type != balanceType)\n        return 1;\n    let size = nodeSizeCache.get(node);\n    if (size == null) {\n        size = 1;\n        for (let child of node.children) {\n            if (child.type != balanceType || !(child instanceof Tree)) {\n                size = 1;\n                break;\n            }\n            size += nodeSize(balanceType, child);\n        }\n        nodeSizeCache.set(node, size);\n    }\n    return size;\n}\nfunction balanceRange(\n// The type the balanced tree's inner nodes.\nbalanceType, \n// The direct children and their positions\nchildren, positions, \n// The index range in children/positions to use\nfrom, to, \n// The start position of the nodes, relative to their parent.\nstart, \n// Length of the outer node\nlength, \n// Function to build the top node of the balanced tree\nmkTop, \n// Function to build internal nodes for the balanced tree\nmkTree) {\n    let total = 0;\n    for (let i = from; i < to; i++)\n        total += nodeSize(balanceType, children[i]);\n    let maxChild = Math.ceil((total * 1.5) / 8 /* Balance.BranchFactor */);\n    let localChildren = [], localPositions = [];\n    function divide(children, positions, from, to, offset) {\n        for (let i = from; i < to;) {\n            let groupFrom = i, groupStart = positions[i], groupSize = nodeSize(balanceType, children[i]);\n            i++;\n            for (; i < to; i++) {\n                let nextSize = nodeSize(balanceType, children[i]);\n                if (groupSize + nextSize >= maxChild)\n                    break;\n                groupSize += nextSize;\n            }\n            if (i == groupFrom + 1) {\n                if (groupSize > maxChild) {\n                    let only = children[groupFrom]; // Only trees can have a size > 1\n                    divide(only.children, only.positions, 0, only.children.length, positions[groupFrom] + offset);\n                    continue;\n                }\n                localChildren.push(children[groupFrom]);\n            }\n            else {\n                let length = positions[i - 1] + children[i - 1].length - groupStart;\n                localChildren.push(balanceRange(balanceType, children, positions, groupFrom, i, groupStart, length, null, mkTree));\n            }\n            localPositions.push(groupStart + offset - start);\n        }\n    }\n    divide(children, positions, from, to, 0);\n    return (mkTop || mkTree)(localChildren, localPositions, length);\n}\n/**\nProvides a way to associate values with pieces of trees. As long\nas that part of the tree is reused, the associated values can be\nretrieved from an updated tree.\n*/\nclass NodeWeakMap {\n    constructor() {\n        this.map = new WeakMap();\n    }\n    setBuffer(buffer, index, value) {\n        let inner = this.map.get(buffer);\n        if (!inner)\n            this.map.set(buffer, inner = new Map);\n        inner.set(index, value);\n    }\n    getBuffer(buffer, index) {\n        let inner = this.map.get(buffer);\n        return inner && inner.get(index);\n    }\n    /**\n    Set the value for this syntax node.\n    */\n    set(node, value) {\n        if (node instanceof BufferNode)\n            this.setBuffer(node.context.buffer, node.index, value);\n        else if (node instanceof TreeNode)\n            this.map.set(node.tree, value);\n    }\n    /**\n    Retrieve value for this syntax node, if it exists in the map.\n    */\n    get(node) {\n        return node instanceof BufferNode ? this.getBuffer(node.context.buffer, node.index)\n            : node instanceof TreeNode ? this.map.get(node.tree) : undefined;\n    }\n    /**\n    Set the value for the node that a cursor currently points to.\n    */\n    cursorSet(cursor, value) {\n        if (cursor.buffer)\n            this.setBuffer(cursor.buffer.buffer, cursor.index, value);\n        else\n            this.map.set(cursor.tree, value);\n    }\n    /**\n    Retrieve the value for the node that a cursor currently points\n    to.\n    */\n    cursorGet(cursor) {\n        return cursor.buffer ? this.getBuffer(cursor.buffer.buffer, cursor.index) : this.map.get(cursor.tree);\n    }\n}\n\n/**\nTree fragments are used during [incremental\nparsing](#common.Parser.startParse) to track parts of old trees\nthat can be reused in a new parse. An array of fragments is used\nto track regions of an old tree whose nodes might be reused in new\nparses. Use the static\n[`applyChanges`](#common.TreeFragment^applyChanges) method to\nupdate fragments for document changes.\n*/\nclass TreeFragment {\n    /**\n    Construct a tree fragment. You'll usually want to use\n    [`addTree`](#common.TreeFragment^addTree) and\n    [`applyChanges`](#common.TreeFragment^applyChanges) instead of\n    calling this directly.\n    */\n    constructor(\n    /**\n    The start of the unchanged range pointed to by this fragment.\n    This refers to an offset in the _updated_ document (as opposed\n    to the original tree).\n    */\n    from, \n    /**\n    The end of the unchanged range.\n    */\n    to, \n    /**\n    The tree that this fragment is based on.\n    */\n    tree, \n    /**\n    The offset between the fragment's tree and the document that\n    this fragment can be used against. Add this when going from\n    document to tree positions, subtract it to go from tree to\n    document positions.\n    */\n    offset, openStart = false, openEnd = false) {\n        this.from = from;\n        this.to = to;\n        this.tree = tree;\n        this.offset = offset;\n        this.open = (openStart ? 1 /* Open.Start */ : 0) | (openEnd ? 2 /* Open.End */ : 0);\n    }\n    /**\n    Whether the start of the fragment represents the start of a\n    parse, or the end of a change. (In the second case, it may not\n    be safe to reuse some nodes at the start, depending on the\n    parsing algorithm.)\n    */\n    get openStart() { return (this.open & 1 /* Open.Start */) > 0; }\n    /**\n    Whether the end of the fragment represents the end of a\n    full-document parse, or the start of a change.\n    */\n    get openEnd() { return (this.open & 2 /* Open.End */) > 0; }\n    /**\n    Create a set of fragments from a freshly parsed tree, or update\n    an existing set of fragments by replacing the ones that overlap\n    with a tree with content from the new tree. When `partial` is\n    true, the parse is treated as incomplete, and the resulting\n    fragment has [`openEnd`](#common.TreeFragment.openEnd) set to\n    true.\n    */\n    static addTree(tree, fragments = [], partial = false) {\n        let result = [new TreeFragment(0, tree.length, tree, 0, false, partial)];\n        for (let f of fragments)\n            if (f.to > tree.length)\n                result.push(f);\n        return result;\n    }\n    /**\n    Apply a set of edits to an array of fragments, removing or\n    splitting fragments as necessary to remove edited ranges, and\n    adjusting offsets for fragments that moved.\n    */\n    static applyChanges(fragments, changes, minGap = 128) {\n        if (!changes.length)\n            return fragments;\n        let result = [];\n        let fI = 1, nextF = fragments.length ? fragments[0] : null;\n        for (let cI = 0, pos = 0, off = 0;; cI++) {\n            let nextC = cI < changes.length ? changes[cI] : null;\n            let nextPos = nextC ? nextC.fromA : 1e9;\n            if (nextPos - pos >= minGap)\n                while (nextF && nextF.from < nextPos) {\n                    let cut = nextF;\n                    if (pos >= cut.from || nextPos <= cut.to || off) {\n                        let fFrom = Math.max(cut.from, pos) - off, fTo = Math.min(cut.to, nextPos) - off;\n                        cut = fFrom >= fTo ? null : new TreeFragment(fFrom, fTo, cut.tree, cut.offset + off, cI > 0, !!nextC);\n                    }\n                    if (cut)\n                        result.push(cut);\n                    if (nextF.to > nextPos)\n                        break;\n                    nextF = fI < fragments.length ? fragments[fI++] : null;\n                }\n            if (!nextC)\n                break;\n            pos = nextC.toA;\n            off = nextC.toA - nextC.toB;\n        }\n        return result;\n    }\n}\n/**\nA superclass that parsers should extend.\n*/\nclass Parser {\n    /**\n    Start a parse, returning a [partial parse](#common.PartialParse)\n    object. [`fragments`](#common.TreeFragment) can be passed in to\n    make the parse incremental.\n    \n    By default, the entire input is parsed. You can pass `ranges`,\n    which should be a sorted array of non-empty, non-overlapping\n    ranges, to parse only those ranges. The tree returned in that\n    case will start at `ranges[0].from`.\n    */\n    startParse(input, fragments, ranges) {\n        if (typeof input == \"string\")\n            input = new StringInput(input);\n        ranges = !ranges ? [new Range(0, input.length)] : ranges.length ? ranges.map(r => new Range(r.from, r.to)) : [new Range(0, 0)];\n        return this.createParse(input, fragments || [], ranges);\n    }\n    /**\n    Run a full parse, returning the resulting tree.\n    */\n    parse(input, fragments, ranges) {\n        let parse = this.startParse(input, fragments, ranges);\n        for (;;) {\n            let done = parse.advance();\n            if (done)\n                return done;\n        }\n    }\n}\nclass StringInput {\n    constructor(string) {\n        this.string = string;\n    }\n    get length() { return this.string.length; }\n    chunk(from) { return this.string.slice(from); }\n    get lineChunks() { return false; }\n    read(from, to) { return this.string.slice(from, to); }\n}\n\n/**\nCreate a parse wrapper that, after the inner parse completes,\nscans its tree for mixed language regions with the `nest`\nfunction, runs the resulting [inner parses](#common.NestedParse),\nand then [mounts](#common.NodeProp^mounted) their results onto the\ntree.\n*/\nfunction parseMixed(nest) {\n    return (parse, input, fragments, ranges) => new MixedParse(parse, nest, input, fragments, ranges);\n}\nclass InnerParse {\n    constructor(parser, parse, overlay, target, from) {\n        this.parser = parser;\n        this.parse = parse;\n        this.overlay = overlay;\n        this.target = target;\n        this.from = from;\n    }\n}\nfunction checkRanges(ranges) {\n    if (!ranges.length || ranges.some(r => r.from >= r.to))\n        throw new RangeError(\"Invalid inner parse ranges given: \" + JSON.stringify(ranges));\n}\nclass ActiveOverlay {\n    constructor(parser, predicate, mounts, index, start, target, prev) {\n        this.parser = parser;\n        this.predicate = predicate;\n        this.mounts = mounts;\n        this.index = index;\n        this.start = start;\n        this.target = target;\n        this.prev = prev;\n        this.depth = 0;\n        this.ranges = [];\n    }\n}\nconst stoppedInner = new NodeProp({ perNode: true });\nclass MixedParse {\n    constructor(base, nest, input, fragments, ranges) {\n        this.nest = nest;\n        this.input = input;\n        this.fragments = fragments;\n        this.ranges = ranges;\n        this.inner = [];\n        this.innerDone = 0;\n        this.baseTree = null;\n        this.stoppedAt = null;\n        this.baseParse = base;\n    }\n    advance() {\n        if (this.baseParse) {\n            let done = this.baseParse.advance();\n            if (!done)\n                return null;\n            this.baseParse = null;\n            this.baseTree = done;\n            this.startInner();\n            if (this.stoppedAt != null)\n                for (let inner of this.inner)\n                    inner.parse.stopAt(this.stoppedAt);\n        }\n        if (this.innerDone == this.inner.length) {\n            let result = this.baseTree;\n            if (this.stoppedAt != null)\n                result = new Tree(result.type, result.children, result.positions, result.length, result.propValues.concat([[stoppedInner, this.stoppedAt]]));\n            return result;\n        }\n        let inner = this.inner[this.innerDone], done = inner.parse.advance();\n        if (done) {\n            this.innerDone++;\n            // This is a somewhat dodgy but super helpful hack where we\n            // patch up nodes created by the inner parse (and thus\n            // presumably not aliased anywhere else) to hold the information\n            // about the inner parse.\n            let props = Object.assign(Object.create(null), inner.target.props);\n            props[NodeProp.mounted.id] = new MountedTree(done, inner.overlay, inner.parser);\n            inner.target.props = props;\n        }\n        return null;\n    }\n    get parsedPos() {\n        if (this.baseParse)\n            return 0;\n        let pos = this.input.length;\n        for (let i = this.innerDone; i < this.inner.length; i++) {\n            if (this.inner[i].from < pos)\n                pos = Math.min(pos, this.inner[i].parse.parsedPos);\n        }\n        return pos;\n    }\n    stopAt(pos) {\n        this.stoppedAt = pos;\n        if (this.baseParse)\n            this.baseParse.stopAt(pos);\n        else\n            for (let i = this.innerDone; i < this.inner.length; i++)\n                this.inner[i].parse.stopAt(pos);\n    }\n    startInner() {\n        let fragmentCursor = new FragmentCursor(this.fragments);\n        let overlay = null;\n        let covered = null;\n        let cursor = new TreeCursor(new TreeNode(this.baseTree, this.ranges[0].from, 0, null), exports.IterMode.IncludeAnonymous | exports.IterMode.IgnoreMounts);\n        scan: for (let nest, isCovered;;) {\n            let enter = true, range;\n            if (this.stoppedAt != null && cursor.from >= this.stoppedAt) {\n                enter = false;\n            }\n            else if (fragmentCursor.hasNode(cursor)) {\n                if (overlay) {\n                    let match = overlay.mounts.find(m => m.frag.from <= cursor.from && m.frag.to >= cursor.to && m.mount.overlay);\n                    if (match)\n                        for (let r of match.mount.overlay) {\n                            let from = r.from + match.pos, to = r.to + match.pos;\n                            if (from >= cursor.from && to <= cursor.to && !overlay.ranges.some(r => r.from < to && r.to > from))\n                                overlay.ranges.push({ from, to });\n                        }\n                }\n                enter = false;\n            }\n            else if (covered && (isCovered = checkCover(covered.ranges, cursor.from, cursor.to))) {\n                enter = isCovered != 2 /* Cover.Full */;\n            }\n            else if (!cursor.type.isAnonymous && (nest = this.nest(cursor, this.input)) &&\n                (cursor.from < cursor.to || !nest.overlay)) {\n                if (!cursor.tree)\n                    materialize(cursor);\n                let oldMounts = fragmentCursor.findMounts(cursor.from, nest.parser);\n                if (typeof nest.overlay == \"function\") {\n                    overlay = new ActiveOverlay(nest.parser, nest.overlay, oldMounts, this.inner.length, cursor.from, cursor.tree, overlay);\n                }\n                else {\n                    let ranges = punchRanges(this.ranges, nest.overlay ||\n                        (cursor.from < cursor.to ? [new Range(cursor.from, cursor.to)] : []));\n                    if (ranges.length)\n                        checkRanges(ranges);\n                    if (ranges.length || !nest.overlay)\n                        this.inner.push(new InnerParse(nest.parser, ranges.length ? nest.parser.startParse(this.input, enterFragments(oldMounts, ranges), ranges)\n                            : nest.parser.startParse(\"\"), nest.overlay ? nest.overlay.map(r => new Range(r.from - cursor.from, r.to - cursor.from)) : null, cursor.tree, ranges.length ? ranges[0].from : cursor.from));\n                    if (!nest.overlay)\n                        enter = false;\n                    else if (ranges.length)\n                        covered = { ranges, depth: 0, prev: covered };\n                }\n            }\n            else if (overlay && (range = overlay.predicate(cursor))) {\n                if (range === true)\n                    range = new Range(cursor.from, cursor.to);\n                if (range.from < range.to) {\n                    let last = overlay.ranges.length - 1;\n                    if (last >= 0 && overlay.ranges[last].to == range.from)\n                        overlay.ranges[last] = { from: overlay.ranges[last].from, to: range.to };\n                    else\n                        overlay.ranges.push(range);\n                }\n            }\n            if (enter && cursor.firstChild()) {\n                if (overlay)\n                    overlay.depth++;\n                if (covered)\n                    covered.depth++;\n            }\n            else {\n                for (;;) {\n                    if (cursor.nextSibling())\n                        break;\n                    if (!cursor.parent())\n                        break scan;\n                    if (overlay && !--overlay.depth) {\n                        let ranges = punchRanges(this.ranges, overlay.ranges);\n                        if (ranges.length) {\n                            checkRanges(ranges);\n                            this.inner.splice(overlay.index, 0, new InnerParse(overlay.parser, overlay.parser.startParse(this.input, enterFragments(overlay.mounts, ranges), ranges), overlay.ranges.map(r => new Range(r.from - overlay.start, r.to - overlay.start)), overlay.target, ranges[0].from));\n                        }\n                        overlay = overlay.prev;\n                    }\n                    if (covered && !--covered.depth)\n                        covered = covered.prev;\n                }\n            }\n        }\n    }\n}\nfunction checkCover(covered, from, to) {\n    for (let range of covered) {\n        if (range.from >= to)\n            break;\n        if (range.to > from)\n            return range.from <= from && range.to >= to ? 2 /* Cover.Full */ : 1 /* Cover.Partial */;\n    }\n    return 0 /* Cover.None */;\n}\n// Take a piece of buffer and convert it into a stand-alone\n// TreeBuffer.\nfunction sliceBuf(buf, startI, endI, nodes, positions, off) {\n    if (startI < endI) {\n        let from = buf.buffer[startI + 1];\n        nodes.push(buf.slice(startI, endI, from));\n        positions.push(from - off);\n    }\n}\n// This function takes a node that's in a buffer, and converts it, and\n// its parent buffer nodes, into a Tree. This is again acting on the\n// assumption that the trees and buffers have been constructed by the\n// parse that was ran via the mix parser, and thus aren't shared with\n// any other code, making violations of the immutability safe.\nfunction materialize(cursor) {\n    let { node } = cursor, stack = [];\n    let buffer = node.context.buffer;\n    // Scan up to the nearest tree\n    do {\n        stack.push(cursor.index);\n        cursor.parent();\n    } while (!cursor.tree);\n    // Find the index of the buffer in that tree\n    let base = cursor.tree, i = base.children.indexOf(buffer);\n    let buf = base.children[i], b = buf.buffer, newStack = [i];\n    // Split a level in the buffer, putting the nodes before and after\n    // the child that contains `node` into new buffers.\n    function split(startI, endI, type, innerOffset, length, stackPos) {\n        let targetI = stack[stackPos];\n        let children = [], positions = [];\n        sliceBuf(buf, startI, targetI, children, positions, innerOffset);\n        let from = b[targetI + 1], to = b[targetI + 2];\n        newStack.push(children.length);\n        let child = stackPos\n            ? split(targetI + 4, b[targetI + 3], buf.set.types[b[targetI]], from, to - from, stackPos - 1)\n            : node.toTree();\n        children.push(child);\n        positions.push(from - innerOffset);\n        sliceBuf(buf, b[targetI + 3], endI, children, positions, innerOffset);\n        return new Tree(type, children, positions, length);\n    }\n    base.children[i] = split(0, b.length, NodeType.none, 0, buf.length, stack.length - 1);\n    // Move the cursor back to the target node\n    for (let index of newStack) {\n        let tree = cursor.tree.children[index], pos = cursor.tree.positions[index];\n        cursor.yield(new TreeNode(tree, pos + cursor.from, index, cursor._tree));\n    }\n}\nclass StructureCursor {\n    constructor(root, offset) {\n        this.offset = offset;\n        this.done = false;\n        this.cursor = root.cursor(exports.IterMode.IncludeAnonymous | exports.IterMode.IgnoreMounts);\n    }\n    // Move to the first node (in pre-order) that starts at or after `pos`.\n    moveTo(pos) {\n        let { cursor } = this, p = pos - this.offset;\n        while (!this.done && cursor.from < p) {\n            if (cursor.to >= pos && cursor.enter(p, 1, exports.IterMode.IgnoreOverlays | exports.IterMode.ExcludeBuffers)) ;\n            else if (!cursor.next(false))\n                this.done = true;\n        }\n    }\n    hasNode(cursor) {\n        this.moveTo(cursor.from);\n        if (!this.done && this.cursor.from + this.offset == cursor.from && this.cursor.tree) {\n            for (let tree = this.cursor.tree;;) {\n                if (tree == cursor.tree)\n                    return true;\n                if (tree.children.length && tree.positions[0] == 0 && tree.children[0] instanceof Tree)\n                    tree = tree.children[0];\n                else\n                    break;\n            }\n        }\n        return false;\n    }\n}\nclass FragmentCursor {\n    constructor(fragments) {\n        var _a;\n        this.fragments = fragments;\n        this.curTo = 0;\n        this.fragI = 0;\n        if (fragments.length) {\n            let first = this.curFrag = fragments[0];\n            this.curTo = (_a = first.tree.prop(stoppedInner)) !== null && _a !== void 0 ? _a : first.to;\n            this.inner = new StructureCursor(first.tree, -first.offset);\n        }\n        else {\n            this.curFrag = this.inner = null;\n        }\n    }\n    hasNode(node) {\n        while (this.curFrag && node.from >= this.curTo)\n            this.nextFrag();\n        return this.curFrag && this.curFrag.from <= node.from && this.curTo >= node.to && this.inner.hasNode(node);\n    }\n    nextFrag() {\n        var _a;\n        this.fragI++;\n        if (this.fragI == this.fragments.length) {\n            this.curFrag = this.inner = null;\n        }\n        else {\n            let frag = this.curFrag = this.fragments[this.fragI];\n            this.curTo = (_a = frag.tree.prop(stoppedInner)) !== null && _a !== void 0 ? _a : frag.to;\n            this.inner = new StructureCursor(frag.tree, -frag.offset);\n        }\n    }\n    findMounts(pos, parser) {\n        var _a;\n        let result = [];\n        if (this.inner) {\n            this.inner.cursor.moveTo(pos, 1);\n            for (let pos = this.inner.cursor.node; pos; pos = pos.parent) {\n                let mount = (_a = pos.tree) === null || _a === void 0 ? void 0 : _a.prop(NodeProp.mounted);\n                if (mount && mount.parser == parser) {\n                    for (let i = this.fragI; i < this.fragments.length; i++) {\n                        let frag = this.fragments[i];\n                        if (frag.from >= pos.to)\n                            break;\n                        if (frag.tree == this.curFrag.tree)\n                            result.push({\n                                frag,\n                                pos: pos.from - frag.offset,\n                                mount\n                            });\n                    }\n                }\n            }\n        }\n        return result;\n    }\n}\nfunction punchRanges(outer, ranges) {\n    let copy = null, current = ranges;\n    for (let i = 1, j = 0; i < outer.length; i++) {\n        let gapFrom = outer[i - 1].to, gapTo = outer[i].from;\n        for (; j < current.length; j++) {\n            let r = current[j];\n            if (r.from >= gapTo)\n                break;\n            if (r.to <= gapFrom)\n                continue;\n            if (!copy)\n                current = copy = ranges.slice();\n            if (r.from < gapFrom) {\n                copy[j] = new Range(r.from, gapFrom);\n                if (r.to > gapTo)\n                    copy.splice(j + 1, 0, new Range(gapTo, r.to));\n            }\n            else if (r.to > gapTo) {\n                copy[j--] = new Range(gapTo, r.to);\n            }\n            else {\n                copy.splice(j--, 1);\n            }\n        }\n    }\n    return current;\n}\nfunction findCoverChanges(a, b, from, to) {\n    let iA = 0, iB = 0, inA = false, inB = false, pos = -1e9;\n    let result = [];\n    for (;;) {\n        let nextA = iA == a.length ? 1e9 : inA ? a[iA].to : a[iA].from;\n        let nextB = iB == b.length ? 1e9 : inB ? b[iB].to : b[iB].from;\n        if (inA != inB) {\n            let start = Math.max(pos, from), end = Math.min(nextA, nextB, to);\n            if (start < end)\n                result.push(new Range(start, end));\n        }\n        pos = Math.min(nextA, nextB);\n        if (pos == 1e9)\n            break;\n        if (nextA == pos) {\n            if (!inA)\n                inA = true;\n            else {\n                inA = false;\n                iA++;\n            }\n        }\n        if (nextB == pos) {\n            if (!inB)\n                inB = true;\n            else {\n                inB = false;\n                iB++;\n            }\n        }\n    }\n    return result;\n}\n// Given a number of fragments for the outer tree, and a set of ranges\n// to parse, find fragments for inner trees mounted around those\n// ranges, if any.\nfunction enterFragments(mounts, ranges) {\n    let result = [];\n    for (let { pos, mount, frag } of mounts) {\n        let startPos = pos + (mount.overlay ? mount.overlay[0].from : 0), endPos = startPos + mount.tree.length;\n        let from = Math.max(frag.from, startPos), to = Math.min(frag.to, endPos);\n        if (mount.overlay) {\n            let overlay = mount.overlay.map(r => new Range(r.from + pos, r.to + pos));\n            let changes = findCoverChanges(ranges, overlay, from, to);\n            for (let i = 0, pos = from;; i++) {\n                let last = i == changes.length, end = last ? to : changes[i].from;\n                if (end > pos)\n                    result.push(new TreeFragment(pos, end, mount.tree, -startPos, frag.from >= pos || frag.openStart, frag.to <= end || frag.openEnd));\n                if (last)\n                    break;\n                pos = changes[i].to;\n            }\n        }\n        else {\n            result.push(new TreeFragment(from, to, mount.tree, -startPos, frag.from >= startPos || frag.openStart, frag.to <= endPos || frag.openEnd));\n        }\n    }\n    return result;\n}\n\nexports.DefaultBufferLength = DefaultBufferLength;\nexports.MountedTree = MountedTree;\nexports.NodeProp = NodeProp;\nexports.NodeSet = NodeSet;\nexports.NodeType = NodeType;\nexports.NodeWeakMap = NodeWeakMap;\nexports.Parser = Parser;\nexports.Tree = Tree;\nexports.TreeBuffer = TreeBuffer;\nexports.TreeCursor = TreeCursor;\nexports.TreeFragment = TreeFragment;\nexports.parseMixed = parseMixed;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar common = require('@lezer/common');\n\nlet nextTagID = 0;\n/**\nHighlighting tags are markers that denote a highlighting category.\nThey are [associated](#highlight.styleTags) with parts of a syntax\ntree by a language mode, and then mapped to an actual CSS style by\na [highlighter](#highlight.Highlighter).\n\nBecause syntax tree node types and highlight styles have to be\nable to talk the same language, CodeMirror uses a mostly _closed_\n[vocabulary](#highlight.tags) of syntax tags (as opposed to\ntraditional open string-based systems, which make it hard for\nhighlighting themes to cover all the tokens produced by the\nvarious languages).\n\nIt _is_ possible to [define](#highlight.Tag^define) your own\nhighlighting tags for system-internal use (where you control both\nthe language package and the highlighter), but such tags will not\nbe picked up by regular highlighters (though you can derive them\nfrom standard tags to allow highlighters to fall back to those).\n*/\nclass Tag {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The set of this tag and all its parent tags, starting with\n    this one itself and sorted in order of decreasing specificity.\n    */\n    set, \n    /**\n    The base unmodified tag that this one is based on, if it's\n    modified @internal\n    */\n    base, \n    /**\n    The modifiers applied to this.base @internal\n    */\n    modified) {\n        this.set = set;\n        this.base = base;\n        this.modified = modified;\n        /**\n        @internal\n        */\n        this.id = nextTagID++;\n    }\n    /**\n    Define a new tag. If `parent` is given, the tag is treated as a\n    sub-tag of that parent, and\n    [highlighters](#highlight.tagHighlighter) that don't mention\n    this tag will try to fall back to the parent tag (or grandparent\n    tag, etc).\n    */\n    static define(parent) {\n        if (parent === null || parent === void 0 ? void 0 : parent.base)\n            throw new Error(\"Can not derive from a modified tag\");\n        let tag = new Tag([], null, []);\n        tag.set.push(tag);\n        if (parent)\n            for (let t of parent.set)\n                tag.set.push(t);\n        return tag;\n    }\n    /**\n    Define a tag _modifier_, which is a function that, given a tag,\n    will return a tag that is a subtag of the original. Applying the\n    same modifier to a twice tag will return the same value (`m1(t1)\n    == m1(t1)`) and applying multiple modifiers will, regardless or\n    order, produce the same tag (`m1(m2(t1)) == m2(m1(t1))`).\n    \n    When multiple modifiers are applied to a given base tag, each\n    smaller set of modifiers is registered as a parent, so that for\n    example `m1(m2(m3(t1)))` is a subtype of `m1(m2(t1))`,\n    `m1(m3(t1)`, and so on.\n    */\n    static defineModifier() {\n        let mod = new Modifier;\n        return (tag) => {\n            if (tag.modified.indexOf(mod) > -1)\n                return tag;\n            return Modifier.get(tag.base || tag, tag.modified.concat(mod).sort((a, b) => a.id - b.id));\n        };\n    }\n}\nlet nextModifierID = 0;\nclass Modifier {\n    constructor() {\n        this.instances = [];\n        this.id = nextModifierID++;\n    }\n    static get(base, mods) {\n        if (!mods.length)\n            return base;\n        let exists = mods[0].instances.find(t => t.base == base && sameArray(mods, t.modified));\n        if (exists)\n            return exists;\n        let set = [], tag = new Tag(set, base, mods);\n        for (let m of mods)\n            m.instances.push(tag);\n        let configs = powerSet(mods);\n        for (let parent of base.set)\n            if (!parent.modified.length)\n                for (let config of configs)\n                    set.push(Modifier.get(parent, config));\n        return tag;\n    }\n}\nfunction sameArray(a, b) {\n    return a.length == b.length && a.every((x, i) => x == b[i]);\n}\nfunction powerSet(array) {\n    let sets = [[]];\n    for (let i = 0; i < array.length; i++) {\n        for (let j = 0, e = sets.length; j < e; j++) {\n            sets.push(sets[j].concat(array[i]));\n        }\n    }\n    return sets.sort((a, b) => b.length - a.length);\n}\n/**\nThis function is used to add a set of tags to a language syntax\nvia [`NodeSet.extend`](#common.NodeSet.extend) or\n[`LRParser.configure`](#lr.LRParser.configure).\n\nThe argument object maps node selectors to [highlighting\ntags](#highlight.Tag) or arrays of tags.\n\nNode selectors may hold one or more (space-separated) node paths.\nSuch a path can be a [node name](#common.NodeType.name), or\nmultiple node names (or `*` wildcards) separated by slash\ncharacters, as in `\"Block/Declaration/VariableName\"`. Such a path\nmatches the final node but only if its direct parent nodes are the\nother nodes mentioned. A `*` in such a path matches any parent,\nbut only a single level—wildcards that match multiple parents\naren't supported, both for efficiency reasons and because Lezer\ntrees make it rather hard to reason about what they would match.)\n\nA path can be ended with `/...` to indicate that the tag assigned\nto the node should also apply to all child nodes, even if they\nmatch their own style (by default, only the innermost style is\nused).\n\nWhen a path ends in `!`, as in `Attribute!`, no further matching\nhappens for the node's child nodes, and the entire node gets the\ngiven style.\n\nIn this notation, node names that contain `/`, `!`, `*`, or `...`\nmust be quoted as JSON strings.\n\nFor example:\n\n```javascript\nparser.withProps(\n  styleTags({\n    // Style Number and BigNumber nodes\n    \"Number BigNumber\": tags.number,\n    // Style Escape nodes whose parent is String\n    \"String/Escape\": tags.escape,\n    // Style anything inside Attributes nodes\n    \"Attributes!\": tags.meta,\n    // Add a style to all content inside Italic nodes\n    \"Italic/...\": tags.emphasis,\n    // Style InvalidString nodes as both `string` and `invalid`\n    \"InvalidString\": [tags.string, tags.invalid],\n    // Style the node named \"/\" as punctuation\n    '\"/\"': tags.punctuation\n  })\n)\n```\n*/\nfunction styleTags(spec) {\n    let byName = Object.create(null);\n    for (let prop in spec) {\n        let tags = spec[prop];\n        if (!Array.isArray(tags))\n            tags = [tags];\n        for (let part of prop.split(\" \"))\n            if (part) {\n                let pieces = [], mode = 2 /* Normal */, rest = part;\n                for (let pos = 0;;) {\n                    if (rest == \"...\" && pos > 0 && pos + 3 == part.length) {\n                        mode = 1 /* Inherit */;\n                        break;\n                    }\n                    let m = /^\"(?:[^\"\\\\]|\\\\.)*?\"|[^\\/!]+/.exec(rest);\n                    if (!m)\n                        throw new RangeError(\"Invalid path: \" + part);\n                    pieces.push(m[0] == \"*\" ? \"\" : m[0][0] == '\"' ? JSON.parse(m[0]) : m[0]);\n                    pos += m[0].length;\n                    if (pos == part.length)\n                        break;\n                    let next = part[pos++];\n                    if (pos == part.length && next == \"!\") {\n                        mode = 0 /* Opaque */;\n                        break;\n                    }\n                    if (next != \"/\")\n                        throw new RangeError(\"Invalid path: \" + part);\n                    rest = part.slice(pos);\n                }\n                let last = pieces.length - 1, inner = pieces[last];\n                if (!inner)\n                    throw new RangeError(\"Invalid path: \" + part);\n                let rule = new Rule(tags, mode, last > 0 ? pieces.slice(0, last) : null);\n                byName[inner] = rule.sort(byName[inner]);\n            }\n    }\n    return ruleNodeProp.add(byName);\n}\nconst ruleNodeProp = new common.NodeProp();\nclass Rule {\n    constructor(tags, mode, context, next) {\n        this.tags = tags;\n        this.mode = mode;\n        this.context = context;\n        this.next = next;\n    }\n    get opaque() { return this.mode == 0 /* Opaque */; }\n    get inherit() { return this.mode == 1 /* Inherit */; }\n    sort(other) {\n        if (!other || other.depth < this.depth) {\n            this.next = other;\n            return this;\n        }\n        other.next = this.sort(other.next);\n        return other;\n    }\n    get depth() { return this.context ? this.context.length : 0; }\n}\nRule.empty = new Rule([], 2 /* Normal */, null);\n/**\nDefine a [highlighter](#highlight.Highlighter) from an array of\ntag/class pairs. Classes associated with more specific tags will\ntake precedence.\n*/\nfunction tagHighlighter(tags, options) {\n    let map = Object.create(null);\n    for (let style of tags) {\n        if (!Array.isArray(style.tag))\n            map[style.tag.id] = style.class;\n        else\n            for (let tag of style.tag)\n                map[tag.id] = style.class;\n    }\n    let { scope, all = null } = options || {};\n    return {\n        style: (tags) => {\n            let cls = all;\n            for (let tag of tags) {\n                for (let sub of tag.set) {\n                    let tagClass = map[sub.id];\n                    if (tagClass) {\n                        cls = cls ? cls + \" \" + tagClass : tagClass;\n                        break;\n                    }\n                }\n            }\n            return cls;\n        },\n        scope\n    };\n}\nfunction highlightTags(highlighters, tags) {\n    let result = null;\n    for (let highlighter of highlighters) {\n        let value = highlighter.style(tags);\n        if (value)\n            result = result ? result + \" \" + value : value;\n    }\n    return result;\n}\n/**\nHighlight the given [tree](#common.Tree) with the given\n[highlighter](#highlight.Highlighter).\n*/\nfunction highlightTree(tree, highlighter, \n/**\nAssign styling to a region of the text. Will be called, in order\nof position, for any ranges where more than zero classes apply.\n`classes` is a space separated string of CSS classes.\n*/\nputStyle, \n/**\nThe start of the range to highlight.\n*/\nfrom = 0, \n/**\nThe end of the range.\n*/\nto = tree.length) {\n    let builder = new HighlightBuilder(from, Array.isArray(highlighter) ? highlighter : [highlighter], putStyle);\n    builder.highlightRange(tree.cursor(), from, to, \"\", builder.highlighters);\n    builder.flush(to);\n}\nclass HighlightBuilder {\n    constructor(at, highlighters, span) {\n        this.at = at;\n        this.highlighters = highlighters;\n        this.span = span;\n        this.class = \"\";\n    }\n    startSpan(at, cls) {\n        if (cls != this.class) {\n            this.flush(at);\n            if (at > this.at)\n                this.at = at;\n            this.class = cls;\n        }\n    }\n    flush(to) {\n        if (to > this.at && this.class)\n            this.span(this.at, to, this.class);\n    }\n    highlightRange(cursor, from, to, inheritedClass, highlighters) {\n        let { type, from: start, to: end } = cursor;\n        if (start >= to || end <= from)\n            return;\n        if (type.isTop)\n            highlighters = this.highlighters.filter(h => !h.scope || h.scope(type));\n        let cls = inheritedClass;\n        let rule = getStyleTags(cursor) || Rule.empty;\n        let tagCls = highlightTags(highlighters, rule.tags);\n        if (tagCls) {\n            if (cls)\n                cls += \" \";\n            cls += tagCls;\n            if (rule.mode == 1 /* Inherit */)\n                inheritedClass += (inheritedClass ? \" \" : \"\") + tagCls;\n        }\n        this.startSpan(Math.max(from, start), cls);\n        if (rule.opaque)\n            return;\n        let mounted = cursor.tree && cursor.tree.prop(common.NodeProp.mounted);\n        if (mounted && mounted.overlay) {\n            let inner = cursor.node.enter(mounted.overlay[0].from + start, 1);\n            let innerHighlighters = this.highlighters.filter(h => !h.scope || h.scope(mounted.tree.type));\n            let hasChild = cursor.firstChild();\n            for (let i = 0, pos = start;; i++) {\n                let next = i < mounted.overlay.length ? mounted.overlay[i] : null;\n                let nextPos = next ? next.from + start : end;\n                let rangeFrom = Math.max(from, pos), rangeTo = Math.min(to, nextPos);\n                if (rangeFrom < rangeTo && hasChild) {\n                    while (cursor.from < rangeTo) {\n                        this.highlightRange(cursor, rangeFrom, rangeTo, inheritedClass, highlighters);\n                        this.startSpan(Math.min(rangeTo, cursor.to), cls);\n                        if (cursor.to >= nextPos || !cursor.nextSibling())\n                            break;\n                    }\n                }\n                if (!next || nextPos > to)\n                    break;\n                pos = next.to + start;\n                if (pos > from) {\n                    this.highlightRange(inner.cursor(), Math.max(from, next.from + start), Math.min(to, pos), \"\", innerHighlighters);\n                    this.startSpan(Math.min(to, pos), cls);\n                }\n            }\n            if (hasChild)\n                cursor.parent();\n        }\n        else if (cursor.firstChild()) {\n            if (mounted)\n                inheritedClass = \"\";\n            do {\n                if (cursor.to <= from)\n                    continue;\n                if (cursor.from >= to)\n                    break;\n                this.highlightRange(cursor, from, to, inheritedClass, highlighters);\n                this.startSpan(Math.min(to, cursor.to), cls);\n            } while (cursor.nextSibling());\n            cursor.parent();\n        }\n    }\n}\n/**\nMatch a syntax node's [highlight rules](#highlight.styleTags). If\nthere's a match, return its set of tags, and whether it is\nopaque (uses a `!`) or applies to all child nodes (`/...`).\n*/\nfunction getStyleTags(node) {\n    let rule = node.type.prop(ruleNodeProp);\n    while (rule && rule.context && !node.matchContext(rule.context))\n        rule = rule.next;\n    return rule || null;\n}\nconst t = Tag.define;\nconst comment = t(), name = t(), typeName = t(name), propertyName = t(name), literal = t(), string = t(literal), number = t(literal), content = t(), heading = t(content), keyword = t(), operator = t(), punctuation = t(), bracket = t(punctuation), meta = t();\n/**\nThe default set of highlighting [tags](#highlight.Tag).\n\nThis collection is heavily biased towards programming languages,\nand necessarily incomplete. A full ontology of syntactic\nconstructs would fill a stack of books, and be impractical to\nwrite themes for. So try to make do with this set. If all else\nfails, [open an\nissue](https://github.com/codemirror/codemirror.next) to propose a\nnew tag, or [define](#highlight.Tag^define) a local custom tag for\nyour use case.\n\nNote that it is not obligatory to always attach the most specific\ntag possible to an element—if your grammar can't easily\ndistinguish a certain type of element (such as a local variable),\nit is okay to style it as its more general variant (a variable).\n\nFor tags that extend some parent tag, the documentation links to\nthe parent.\n*/\nconst tags = {\n    /**\n    A comment.\n    */\n    comment,\n    /**\n    A line [comment](#highlight.tags.comment).\n    */\n    lineComment: t(comment),\n    /**\n    A block [comment](#highlight.tags.comment).\n    */\n    blockComment: t(comment),\n    /**\n    A documentation [comment](#highlight.tags.comment).\n    */\n    docComment: t(comment),\n    /**\n    Any kind of identifier.\n    */\n    name,\n    /**\n    The [name](#highlight.tags.name) of a variable.\n    */\n    variableName: t(name),\n    /**\n    A type [name](#highlight.tags.name).\n    */\n    typeName: typeName,\n    /**\n    A tag name (subtag of [`typeName`](#highlight.tags.typeName)).\n    */\n    tagName: t(typeName),\n    /**\n    A property or field [name](#highlight.tags.name).\n    */\n    propertyName: propertyName,\n    /**\n    An attribute name (subtag of [`propertyName`](#highlight.tags.propertyName)).\n    */\n    attributeName: t(propertyName),\n    /**\n    The [name](#highlight.tags.name) of a class.\n    */\n    className: t(name),\n    /**\n    A label [name](#highlight.tags.name).\n    */\n    labelName: t(name),\n    /**\n    A namespace [name](#highlight.tags.name).\n    */\n    namespace: t(name),\n    /**\n    The [name](#highlight.tags.name) of a macro.\n    */\n    macroName: t(name),\n    /**\n    A literal value.\n    */\n    literal,\n    /**\n    A string [literal](#highlight.tags.literal).\n    */\n    string,\n    /**\n    A documentation [string](#highlight.tags.string).\n    */\n    docString: t(string),\n    /**\n    A character literal (subtag of [string](#highlight.tags.string)).\n    */\n    character: t(string),\n    /**\n    An attribute value (subtag of [string](#highlight.tags.string)).\n    */\n    attributeValue: t(string),\n    /**\n    A number [literal](#highlight.tags.literal).\n    */\n    number,\n    /**\n    An integer [number](#highlight.tags.number) literal.\n    */\n    integer: t(number),\n    /**\n    A floating-point [number](#highlight.tags.number) literal.\n    */\n    float: t(number),\n    /**\n    A boolean [literal](#highlight.tags.literal).\n    */\n    bool: t(literal),\n    /**\n    Regular expression [literal](#highlight.tags.literal).\n    */\n    regexp: t(literal),\n    /**\n    An escape [literal](#highlight.tags.literal), for example a\n    backslash escape in a string.\n    */\n    escape: t(literal),\n    /**\n    A color [literal](#highlight.tags.literal).\n    */\n    color: t(literal),\n    /**\n    A URL [literal](#highlight.tags.literal).\n    */\n    url: t(literal),\n    /**\n    A language keyword.\n    */\n    keyword,\n    /**\n    The [keyword](#highlight.tags.keyword) for the self or this\n    object.\n    */\n    self: t(keyword),\n    /**\n    The [keyword](#highlight.tags.keyword) for null.\n    */\n    null: t(keyword),\n    /**\n    A [keyword](#highlight.tags.keyword) denoting some atomic value.\n    */\n    atom: t(keyword),\n    /**\n    A [keyword](#highlight.tags.keyword) that represents a unit.\n    */\n    unit: t(keyword),\n    /**\n    A modifier [keyword](#highlight.tags.keyword).\n    */\n    modifier: t(keyword),\n    /**\n    A [keyword](#highlight.tags.keyword) that acts as an operator.\n    */\n    operatorKeyword: t(keyword),\n    /**\n    A control-flow related [keyword](#highlight.tags.keyword).\n    */\n    controlKeyword: t(keyword),\n    /**\n    A [keyword](#highlight.tags.keyword) that defines something.\n    */\n    definitionKeyword: t(keyword),\n    /**\n    A [keyword](#highlight.tags.keyword) related to defining or\n    interfacing with modules.\n    */\n    moduleKeyword: t(keyword),\n    /**\n    An operator.\n    */\n    operator,\n    /**\n    An [operator](#highlight.tags.operator) that dereferences something.\n    */\n    derefOperator: t(operator),\n    /**\n    Arithmetic-related [operator](#highlight.tags.operator).\n    */\n    arithmeticOperator: t(operator),\n    /**\n    Logical [operator](#highlight.tags.operator).\n    */\n    logicOperator: t(operator),\n    /**\n    Bit [operator](#highlight.tags.operator).\n    */\n    bitwiseOperator: t(operator),\n    /**\n    Comparison [operator](#highlight.tags.operator).\n    */\n    compareOperator: t(operator),\n    /**\n    [Operator](#highlight.tags.operator) that updates its operand.\n    */\n    updateOperator: t(operator),\n    /**\n    [Operator](#highlight.tags.operator) that defines something.\n    */\n    definitionOperator: t(operator),\n    /**\n    Type-related [operator](#highlight.tags.operator).\n    */\n    typeOperator: t(operator),\n    /**\n    Control-flow [operator](#highlight.tags.operator).\n    */\n    controlOperator: t(operator),\n    /**\n    Program or markup punctuation.\n    */\n    punctuation,\n    /**\n    [Punctuation](#highlight.tags.punctuation) that separates\n    things.\n    */\n    separator: t(punctuation),\n    /**\n    Bracket-style [punctuation](#highlight.tags.punctuation).\n    */\n    bracket,\n    /**\n    Angle [brackets](#highlight.tags.bracket) (usually `<` and `>`\n    tokens).\n    */\n    angleBracket: t(bracket),\n    /**\n    Square [brackets](#highlight.tags.bracket) (usually `[` and `]`\n    tokens).\n    */\n    squareBracket: t(bracket),\n    /**\n    Parentheses (usually `(` and `)` tokens). Subtag of\n    [bracket](#highlight.tags.bracket).\n    */\n    paren: t(bracket),\n    /**\n    Braces (usually `{` and `}` tokens). Subtag of\n    [bracket](#highlight.tags.bracket).\n    */\n    brace: t(bracket),\n    /**\n    Content, for example plain text in XML or markup documents.\n    */\n    content,\n    /**\n    [Content](#highlight.tags.content) that represents a heading.\n    */\n    heading,\n    /**\n    A level 1 [heading](#highlight.tags.heading).\n    */\n    heading1: t(heading),\n    /**\n    A level 2 [heading](#highlight.tags.heading).\n    */\n    heading2: t(heading),\n    /**\n    A level 3 [heading](#highlight.tags.heading).\n    */\n    heading3: t(heading),\n    /**\n    A level 4 [heading](#highlight.tags.heading).\n    */\n    heading4: t(heading),\n    /**\n    A level 5 [heading](#highlight.tags.heading).\n    */\n    heading5: t(heading),\n    /**\n    A level 6 [heading](#highlight.tags.heading).\n    */\n    heading6: t(heading),\n    /**\n    A prose separator (such as a horizontal rule).\n    */\n    contentSeparator: t(content),\n    /**\n    [Content](#highlight.tags.content) that represents a list.\n    */\n    list: t(content),\n    /**\n    [Content](#highlight.tags.content) that represents a quote.\n    */\n    quote: t(content),\n    /**\n    [Content](#highlight.tags.content) that is emphasized.\n    */\n    emphasis: t(content),\n    /**\n    [Content](#highlight.tags.content) that is styled strong.\n    */\n    strong: t(content),\n    /**\n    [Content](#highlight.tags.content) that is part of a link.\n    */\n    link: t(content),\n    /**\n    [Content](#highlight.tags.content) that is styled as code or\n    monospace.\n    */\n    monospace: t(content),\n    /**\n    [Content](#highlight.tags.content) that has a strike-through\n    style.\n    */\n    strikethrough: t(content),\n    /**\n    Inserted text in a change-tracking format.\n    */\n    inserted: t(),\n    /**\n    Deleted text.\n    */\n    deleted: t(),\n    /**\n    Changed text.\n    */\n    changed: t(),\n    /**\n    An invalid or unsyntactic element.\n    */\n    invalid: t(),\n    /**\n    Metadata or meta-instruction.\n    */\n    meta,\n    /**\n    [Metadata](#highlight.tags.meta) that applies to the entire\n    document.\n    */\n    documentMeta: t(meta),\n    /**\n    [Metadata](#highlight.tags.meta) that annotates or adds\n    attributes to a given syntactic element.\n    */\n    annotation: t(meta),\n    /**\n    Processing instruction or preprocessor directive. Subtag of\n    [meta](#highlight.tags.meta).\n    */\n    processingInstruction: t(meta),\n    /**\n    [Modifier](#highlight.Tag^defineModifier) that indicates that a\n    given element is being defined. Expected to be used with the\n    various [name](#highlight.tags.name) tags.\n    */\n    definition: Tag.defineModifier(),\n    /**\n    [Modifier](#highlight.Tag^defineModifier) that indicates that\n    something is constant. Mostly expected to be used with\n    [variable names](#highlight.tags.variableName).\n    */\n    constant: Tag.defineModifier(),\n    /**\n    [Modifier](#highlight.Tag^defineModifier) used to indicate that\n    a [variable](#highlight.tags.variableName) or [property\n    name](#highlight.tags.propertyName) is being called or defined\n    as a function.\n    */\n    function: Tag.defineModifier(),\n    /**\n    [Modifier](#highlight.Tag^defineModifier) that can be applied to\n    [names](#highlight.tags.name) to indicate that they belong to\n    the language's standard environment.\n    */\n    standard: Tag.defineModifier(),\n    /**\n    [Modifier](#highlight.Tag^defineModifier) that indicates a given\n    [names](#highlight.tags.name) is local to some scope.\n    */\n    local: Tag.defineModifier(),\n    /**\n    A generic variant [modifier](#highlight.Tag^defineModifier) that\n    can be used to tag language-specific alternative variants of\n    some common tag. It is recommended for themes to define special\n    forms of at least the [string](#highlight.tags.string) and\n    [variable name](#highlight.tags.variableName) tags, since those\n    come up a lot.\n    */\n    special: Tag.defineModifier()\n};\n/**\nThis is a highlighter that adds stable, predictable classes to\ntokens, for styling with external CSS.\n\nThe following tags are mapped to their name prefixed with `\"tok-\"`\n(for example `\"tok-comment\"`):\n\n* [`link`](#highlight.tags.link)\n* [`heading`](#highlight.tags.heading)\n* [`emphasis`](#highlight.tags.emphasis)\n* [`strong`](#highlight.tags.strong)\n* [`keyword`](#highlight.tags.keyword)\n* [`atom`](#highlight.tags.atom)\n* [`bool`](#highlight.tags.bool)\n* [`url`](#highlight.tags.url)\n* [`labelName`](#highlight.tags.labelName)\n* [`inserted`](#highlight.tags.inserted)\n* [`deleted`](#highlight.tags.deleted)\n* [`literal`](#highlight.tags.literal)\n* [`string`](#highlight.tags.string)\n* [`number`](#highlight.tags.number)\n* [`variableName`](#highlight.tags.variableName)\n* [`typeName`](#highlight.tags.typeName)\n* [`namespace`](#highlight.tags.namespace)\n* [`className`](#highlight.tags.className)\n* [`macroName`](#highlight.tags.macroName)\n* [`propertyName`](#highlight.tags.propertyName)\n* [`operator`](#highlight.tags.operator)\n* [`comment`](#highlight.tags.comment)\n* [`meta`](#highlight.tags.meta)\n* [`punctuation`](#highlight.tags.punctuation)\n* [`invalid`](#highlight.tags.invalid)\n\nIn addition, these mappings are provided:\n\n* [`regexp`](#highlight.tags.regexp),\n  [`escape`](#highlight.tags.escape), and\n  [`special`](#highlight.tags.special)[`(string)`](#highlight.tags.string)\n  are mapped to `\"tok-string2\"`\n* [`special`](#highlight.tags.special)[`(variableName)`](#highlight.tags.variableName)\n  to `\"tok-variableName2\"`\n* [`local`](#highlight.tags.local)[`(variableName)`](#highlight.tags.variableName)\n  to `\"tok-variableName tok-local\"`\n* [`definition`](#highlight.tags.definition)[`(variableName)`](#highlight.tags.variableName)\n  to `\"tok-variableName tok-definition\"`\n* [`definition`](#highlight.tags.definition)[`(propertyName)`](#highlight.tags.propertyName)\n  to `\"tok-propertyName tok-definition\"`\n*/\nconst classHighlighter = tagHighlighter([\n    { tag: tags.link, class: \"tok-link\" },\n    { tag: tags.heading, class: \"tok-heading\" },\n    { tag: tags.emphasis, class: \"tok-emphasis\" },\n    { tag: tags.strong, class: \"tok-strong\" },\n    { tag: tags.keyword, class: \"tok-keyword\" },\n    { tag: tags.atom, class: \"tok-atom\" },\n    { tag: tags.bool, class: \"tok-bool\" },\n    { tag: tags.url, class: \"tok-url\" },\n    { tag: tags.labelName, class: \"tok-labelName\" },\n    { tag: tags.inserted, class: \"tok-inserted\" },\n    { tag: tags.deleted, class: \"tok-deleted\" },\n    { tag: tags.literal, class: \"tok-literal\" },\n    { tag: tags.string, class: \"tok-string\" },\n    { tag: tags.number, class: \"tok-number\" },\n    { tag: [tags.regexp, tags.escape, tags.special(tags.string)], class: \"tok-string2\" },\n    { tag: tags.variableName, class: \"tok-variableName\" },\n    { tag: tags.local(tags.variableName), class: \"tok-variableName tok-local\" },\n    { tag: tags.definition(tags.variableName), class: \"tok-variableName tok-definition\" },\n    { tag: tags.special(tags.variableName), class: \"tok-variableName2\" },\n    { tag: tags.definition(tags.propertyName), class: \"tok-propertyName tok-definition\" },\n    { tag: tags.typeName, class: \"tok-typeName\" },\n    { tag: tags.namespace, class: \"tok-namespace\" },\n    { tag: tags.className, class: \"tok-className\" },\n    { tag: tags.macroName, class: \"tok-macroName\" },\n    { tag: tags.propertyName, class: \"tok-propertyName\" },\n    { tag: tags.operator, class: \"tok-operator\" },\n    { tag: tags.comment, class: \"tok-comment\" },\n    { tag: tags.meta, class: \"tok-meta\" },\n    { tag: tags.invalid, class: \"tok-invalid\" },\n    { tag: tags.punctuation, class: \"tok-punctuation\" }\n]);\n\nexports.Tag = Tag;\nexports.classHighlighter = classHighlighter;\nexports.getStyleTags = getStyleTags;\nexports.highlightTree = highlightTree;\nexports.styleTags = styleTags;\nexports.tagHighlighter = tagHighlighter;\nexports.tags = tags;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar common = require('@lezer/common');\n\n/// A parse stack. These are used internally by the parser to track\n/// parsing progress. They also provide some properties and methods\n/// that external code such as a tokenizer can use to get information\n/// about the parse state.\nclass Stack {\n    /// @internal\n    constructor(\n    /// The parse that this stack is part of @internal\n    p, \n    /// Holds state, input pos, buffer index triplets for all but the\n    /// top state @internal\n    stack, \n    /// The current parse state @internal\n    state, \n    // The position at which the next reduce should take place. This\n    // can be less than `this.pos` when skipped expressions have been\n    // added to the stack (which should be moved outside of the next\n    // reduction)\n    /// @internal\n    reducePos, \n    /// The input position up to which this stack has parsed.\n    pos, \n    /// The dynamic score of the stack, including dynamic precedence\n    /// and error-recovery penalties\n    /// @internal\n    score, \n    // The output buffer. Holds (type, start, end, size) quads\n    // representing nodes created by the parser, where `size` is\n    // amount of buffer array entries covered by this node.\n    /// @internal\n    buffer, \n    // The base offset of the buffer. When stacks are split, the split\n    // instance shared the buffer history with its parent up to\n    // `bufferBase`, which is the absolute offset (including the\n    // offset of previous splits) into the buffer at which this stack\n    // starts writing.\n    /// @internal\n    bufferBase, \n    /// @internal\n    curContext, \n    /// @internal\n    lookAhead = 0, \n    // A parent stack from which this was split off, if any. This is\n    // set up so that it always points to a stack that has some\n    // additional buffer content, never to a stack with an equal\n    // `bufferBase`.\n    /// @internal\n    parent) {\n        this.p = p;\n        this.stack = stack;\n        this.state = state;\n        this.reducePos = reducePos;\n        this.pos = pos;\n        this.score = score;\n        this.buffer = buffer;\n        this.bufferBase = bufferBase;\n        this.curContext = curContext;\n        this.lookAhead = lookAhead;\n        this.parent = parent;\n    }\n    /// @internal\n    toString() {\n        return `[${this.stack.filter((_, i) => i % 3 == 0).concat(this.state)}]@${this.pos}${this.score ? \"!\" + this.score : \"\"}`;\n    }\n    // Start an empty stack\n    /// @internal\n    static start(p, state, pos = 0) {\n        let cx = p.parser.context;\n        return new Stack(p, [], state, pos, pos, 0, [], 0, cx ? new StackContext(cx, cx.start) : null, 0, null);\n    }\n    /// The stack's current [context](#lr.ContextTracker) value, if\n    /// any. Its type will depend on the context tracker's type\n    /// parameter, or it will be `null` if there is no context\n    /// tracker.\n    get context() { return this.curContext ? this.curContext.context : null; }\n    // Push a state onto the stack, tracking its start position as well\n    // as the buffer base at that point.\n    /// @internal\n    pushState(state, start) {\n        this.stack.push(this.state, start, this.bufferBase + this.buffer.length);\n        this.state = state;\n    }\n    // Apply a reduce action\n    /// @internal\n    reduce(action) {\n        var _a;\n        let depth = action >> 19 /* Action.ReduceDepthShift */, type = action & 65535 /* Action.ValueMask */;\n        let { parser } = this.p;\n        let dPrec = parser.dynamicPrecedence(type);\n        if (dPrec)\n            this.score += dPrec;\n        if (depth == 0) {\n            this.pushState(parser.getGoto(this.state, type, true), this.reducePos);\n            // Zero-depth reductions are a special case—they add stuff to\n            // the stack without popping anything off.\n            if (type < parser.minRepeatTerm)\n                this.storeNode(type, this.reducePos, this.reducePos, 4, true);\n            this.reduceContext(type, this.reducePos);\n            return;\n        }\n        // Find the base index into `this.stack`, content after which will\n        // be dropped. Note that with `StayFlag` reductions we need to\n        // consume two extra frames (the dummy parent node for the skipped\n        // expression and the state that we'll be staying in, which should\n        // be moved to `this.state`).\n        let base = this.stack.length - ((depth - 1) * 3) - (action & 262144 /* Action.StayFlag */ ? 6 : 0);\n        let start = base ? this.stack[base - 2] : this.p.ranges[0].from, size = this.reducePos - start;\n        // This is a kludge to try and detect overly deep left-associative\n        // trees, which will not increase the parse stack depth and thus\n        // won't be caught by the regular stack-depth limit check.\n        if (size >= 2000 /* Recover.MinBigReduction */ && !((_a = this.p.parser.nodeSet.types[type]) === null || _a === void 0 ? void 0 : _a.isAnonymous)) {\n            if (start == this.p.lastBigReductionStart) {\n                this.p.bigReductionCount++;\n                this.p.lastBigReductionSize = size;\n            }\n            else if (this.p.lastBigReductionSize < size) {\n                this.p.bigReductionCount = 1;\n                this.p.lastBigReductionStart = start;\n                this.p.lastBigReductionSize = size;\n            }\n        }\n        let bufferBase = base ? this.stack[base - 1] : 0, count = this.bufferBase + this.buffer.length - bufferBase;\n        // Store normal terms or `R -> R R` repeat reductions\n        if (type < parser.minRepeatTerm || (action & 131072 /* Action.RepeatFlag */)) {\n            let pos = parser.stateFlag(this.state, 1 /* StateFlag.Skipped */) ? this.pos : this.reducePos;\n            this.storeNode(type, start, pos, count + 4, true);\n        }\n        if (action & 262144 /* Action.StayFlag */) {\n            this.state = this.stack[base];\n        }\n        else {\n            let baseStateID = this.stack[base - 3];\n            this.state = parser.getGoto(baseStateID, type, true);\n        }\n        while (this.stack.length > base)\n            this.stack.pop();\n        this.reduceContext(type, start);\n    }\n    // Shift a value into the buffer\n    /// @internal\n    storeNode(term, start, end, size = 4, isReduce = false) {\n        if (term == 0 /* Term.Err */ &&\n            (!this.stack.length || this.stack[this.stack.length - 1] < this.buffer.length + this.bufferBase)) {\n            // Try to omit/merge adjacent error nodes\n            let cur = this, top = this.buffer.length;\n            if (top == 0 && cur.parent) {\n                top = cur.bufferBase - cur.parent.bufferBase;\n                cur = cur.parent;\n            }\n            if (top > 0 && cur.buffer[top - 4] == 0 /* Term.Err */ && cur.buffer[top - 1] > -1) {\n                if (start == end)\n                    return;\n                if (cur.buffer[top - 2] >= start) {\n                    cur.buffer[top - 2] = end;\n                    return;\n                }\n            }\n        }\n        if (!isReduce || this.pos == end) { // Simple case, just append\n            this.buffer.push(term, start, end, size);\n        }\n        else { // There may be skipped nodes that have to be moved forward\n            let index = this.buffer.length;\n            if (index > 0 && this.buffer[index - 4] != 0 /* Term.Err */)\n                while (index > 0 && this.buffer[index - 2] > end) {\n                    // Move this record forward\n                    this.buffer[index] = this.buffer[index - 4];\n                    this.buffer[index + 1] = this.buffer[index - 3];\n                    this.buffer[index + 2] = this.buffer[index - 2];\n                    this.buffer[index + 3] = this.buffer[index - 1];\n                    index -= 4;\n                    if (size > 4)\n                        size -= 4;\n                }\n            this.buffer[index] = term;\n            this.buffer[index + 1] = start;\n            this.buffer[index + 2] = end;\n            this.buffer[index + 3] = size;\n        }\n    }\n    // Apply a shift action\n    /// @internal\n    shift(action, next, nextEnd) {\n        let start = this.pos;\n        if (action & 131072 /* Action.GotoFlag */) {\n            this.pushState(action & 65535 /* Action.ValueMask */, this.pos);\n        }\n        else if ((action & 262144 /* Action.StayFlag */) == 0) { // Regular shift\n            let nextState = action, { parser } = this.p;\n            if (nextEnd > this.pos || next <= parser.maxNode) {\n                this.pos = nextEnd;\n                if (!parser.stateFlag(nextState, 1 /* StateFlag.Skipped */))\n                    this.reducePos = nextEnd;\n            }\n            this.pushState(nextState, start);\n            this.shiftContext(next, start);\n            if (next <= parser.maxNode)\n                this.buffer.push(next, start, nextEnd, 4);\n        }\n        else { // Shift-and-stay, which means this is a skipped token\n            this.pos = nextEnd;\n            this.shiftContext(next, start);\n            if (next <= this.p.parser.maxNode)\n                this.buffer.push(next, start, nextEnd, 4);\n        }\n    }\n    // Apply an action\n    /// @internal\n    apply(action, next, nextEnd) {\n        if (action & 65536 /* Action.ReduceFlag */)\n            this.reduce(action);\n        else\n            this.shift(action, next, nextEnd);\n    }\n    // Add a prebuilt (reused) node into the buffer.\n    /// @internal\n    useNode(value, next) {\n        let index = this.p.reused.length - 1;\n        if (index < 0 || this.p.reused[index] != value) {\n            this.p.reused.push(value);\n            index++;\n        }\n        let start = this.pos;\n        this.reducePos = this.pos = start + value.length;\n        this.pushState(next, start);\n        this.buffer.push(index, start, this.reducePos, -1 /* size == -1 means this is a reused value */);\n        if (this.curContext)\n            this.updateContext(this.curContext.tracker.reuse(this.curContext.context, value, this, this.p.stream.reset(this.pos - value.length)));\n    }\n    // Split the stack. Due to the buffer sharing and the fact\n    // that `this.stack` tends to stay quite shallow, this isn't very\n    // expensive.\n    /// @internal\n    split() {\n        let parent = this;\n        let off = parent.buffer.length;\n        // Because the top of the buffer (after this.pos) may be mutated\n        // to reorder reductions and skipped tokens, and shared buffers\n        // should be immutable, this copies any outstanding skipped tokens\n        // to the new buffer, and puts the base pointer before them.\n        while (off > 0 && parent.buffer[off - 2] > parent.reducePos)\n            off -= 4;\n        let buffer = parent.buffer.slice(off), base = parent.bufferBase + off;\n        // Make sure parent points to an actual parent with content, if there is such a parent.\n        while (parent && base == parent.bufferBase)\n            parent = parent.parent;\n        return new Stack(this.p, this.stack.slice(), this.state, this.reducePos, this.pos, this.score, buffer, base, this.curContext, this.lookAhead, parent);\n    }\n    // Try to recover from an error by 'deleting' (ignoring) one token.\n    /// @internal\n    recoverByDelete(next, nextEnd) {\n        let isNode = next <= this.p.parser.maxNode;\n        if (isNode)\n            this.storeNode(next, this.pos, nextEnd, 4);\n        this.storeNode(0 /* Term.Err */, this.pos, nextEnd, isNode ? 8 : 4);\n        this.pos = this.reducePos = nextEnd;\n        this.score -= 190 /* Recover.Delete */;\n    }\n    /// Check if the given term would be able to be shifted (optionally\n    /// after some reductions) on this stack. This can be useful for\n    /// external tokenizers that want to make sure they only provide a\n    /// given token when it applies.\n    canShift(term) {\n        for (let sim = new SimulatedStack(this);;) {\n            let action = this.p.parser.stateSlot(sim.state, 4 /* ParseState.DefaultReduce */) || this.p.parser.hasAction(sim.state, term);\n            if (action == 0)\n                return false;\n            if ((action & 65536 /* Action.ReduceFlag */) == 0)\n                return true;\n            sim.reduce(action);\n        }\n    }\n    // Apply up to Recover.MaxNext recovery actions that conceptually\n    // inserts some missing token or rule.\n    /// @internal\n    recoverByInsert(next) {\n        if (this.stack.length >= 300 /* Recover.MaxInsertStackDepth */)\n            return [];\n        let nextStates = this.p.parser.nextStates(this.state);\n        if (nextStates.length > 4 /* Recover.MaxNext */ << 1 || this.stack.length >= 120 /* Recover.DampenInsertStackDepth */) {\n            let best = [];\n            for (let i = 0, s; i < nextStates.length; i += 2) {\n                if ((s = nextStates[i + 1]) != this.state && this.p.parser.hasAction(s, next))\n                    best.push(nextStates[i], s);\n            }\n            if (this.stack.length < 120 /* Recover.DampenInsertStackDepth */)\n                for (let i = 0; best.length < 4 /* Recover.MaxNext */ << 1 && i < nextStates.length; i += 2) {\n                    let s = nextStates[i + 1];\n                    if (!best.some((v, i) => (i & 1) && v == s))\n                        best.push(nextStates[i], s);\n                }\n            nextStates = best;\n        }\n        let result = [];\n        for (let i = 0; i < nextStates.length && result.length < 4 /* Recover.MaxNext */; i += 2) {\n            let s = nextStates[i + 1];\n            if (s == this.state)\n                continue;\n            let stack = this.split();\n            stack.pushState(s, this.pos);\n            stack.storeNode(0 /* Term.Err */, stack.pos, stack.pos, 4, true);\n            stack.shiftContext(nextStates[i], this.pos);\n            stack.score -= 200 /* Recover.Insert */;\n            result.push(stack);\n        }\n        return result;\n    }\n    // Force a reduce, if possible. Return false if that can't\n    // be done.\n    /// @internal\n    forceReduce() {\n        let { parser } = this.p;\n        let reduce = parser.stateSlot(this.state, 5 /* ParseState.ForcedReduce */);\n        if ((reduce & 65536 /* Action.ReduceFlag */) == 0)\n            return false;\n        if (!parser.validAction(this.state, reduce)) {\n            let depth = reduce >> 19 /* Action.ReduceDepthShift */, term = reduce & 65535 /* Action.ValueMask */;\n            let target = this.stack.length - depth * 3;\n            if (target < 0 || parser.getGoto(this.stack[target], term, false) < 0) {\n                let backup = this.findForcedReduction();\n                if (backup == null)\n                    return false;\n                reduce = backup;\n            }\n            this.storeNode(0 /* Term.Err */, this.reducePos, this.reducePos, 4, true);\n            this.score -= 100 /* Recover.Reduce */;\n        }\n        this.reducePos = this.pos;\n        this.reduce(reduce);\n        return true;\n    }\n    /// Try to scan through the automaton to find some kind of reduction\n    /// that can be applied. Used when the regular ForcedReduce field\n    /// isn't a valid action. @internal\n    findForcedReduction() {\n        let { parser } = this.p, seen = [];\n        let explore = (state, depth) => {\n            if (seen.includes(state))\n                return;\n            seen.push(state);\n            return parser.allActions(state, (action) => {\n                if (action & (262144 /* Action.StayFlag */ | 131072 /* Action.GotoFlag */)) ;\n                else if (action & 65536 /* Action.ReduceFlag */) {\n                    let rDepth = (action >> 19 /* Action.ReduceDepthShift */) - depth;\n                    if (rDepth > 1) {\n                        let term = action & 65535 /* Action.ValueMask */, target = this.stack.length - rDepth * 3;\n                        if (target >= 0 && parser.getGoto(this.stack[target], term, false) >= 0)\n                            return (rDepth << 19 /* Action.ReduceDepthShift */) | 65536 /* Action.ReduceFlag */ | term;\n                    }\n                }\n                else {\n                    let found = explore(action, depth + 1);\n                    if (found != null)\n                        return found;\n                }\n            });\n        };\n        return explore(this.state, 0);\n    }\n    /// @internal\n    forceAll() {\n        while (!this.p.parser.stateFlag(this.state, 2 /* StateFlag.Accepting */)) {\n            if (!this.forceReduce()) {\n                this.storeNode(0 /* Term.Err */, this.pos, this.pos, 4, true);\n                break;\n            }\n        }\n        return this;\n    }\n    /// Check whether this state has no further actions (assumed to be a direct descendant of the\n    /// top state, since any other states must be able to continue\n    /// somehow). @internal\n    get deadEnd() {\n        if (this.stack.length != 3)\n            return false;\n        let { parser } = this.p;\n        return parser.data[parser.stateSlot(this.state, 1 /* ParseState.Actions */)] == 65535 /* Seq.End */ &&\n            !parser.stateSlot(this.state, 4 /* ParseState.DefaultReduce */);\n    }\n    /// Restart the stack (put it back in its start state). Only safe\n    /// when this.stack.length == 3 (state is directly below the top\n    /// state). @internal\n    restart() {\n        this.state = this.stack[0];\n        this.stack.length = 0;\n    }\n    /// @internal\n    sameState(other) {\n        if (this.state != other.state || this.stack.length != other.stack.length)\n            return false;\n        for (let i = 0; i < this.stack.length; i += 3)\n            if (this.stack[i] != other.stack[i])\n                return false;\n        return true;\n    }\n    /// Get the parser used by this stack.\n    get parser() { return this.p.parser; }\n    /// Test whether a given dialect (by numeric ID, as exported from\n    /// the terms file) is enabled.\n    dialectEnabled(dialectID) { return this.p.parser.dialect.flags[dialectID]; }\n    shiftContext(term, start) {\n        if (this.curContext)\n            this.updateContext(this.curContext.tracker.shift(this.curContext.context, term, this, this.p.stream.reset(start)));\n    }\n    reduceContext(term, start) {\n        if (this.curContext)\n            this.updateContext(this.curContext.tracker.reduce(this.curContext.context, term, this, this.p.stream.reset(start)));\n    }\n    /// @internal\n    emitContext() {\n        let last = this.buffer.length - 1;\n        if (last < 0 || this.buffer[last] != -3)\n            this.buffer.push(this.curContext.hash, this.pos, this.pos, -3);\n    }\n    /// @internal\n    emitLookAhead() {\n        let last = this.buffer.length - 1;\n        if (last < 0 || this.buffer[last] != -4)\n            this.buffer.push(this.lookAhead, this.pos, this.pos, -4);\n    }\n    updateContext(context) {\n        if (context != this.curContext.context) {\n            let newCx = new StackContext(this.curContext.tracker, context);\n            if (newCx.hash != this.curContext.hash)\n                this.emitContext();\n            this.curContext = newCx;\n        }\n    }\n    /// @internal\n    setLookAhead(lookAhead) {\n        if (lookAhead > this.lookAhead) {\n            this.emitLookAhead();\n            this.lookAhead = lookAhead;\n        }\n    }\n    /// @internal\n    close() {\n        if (this.curContext && this.curContext.tracker.strict)\n            this.emitContext();\n        if (this.lookAhead > 0)\n            this.emitLookAhead();\n    }\n}\nclass StackContext {\n    constructor(tracker, context) {\n        this.tracker = tracker;\n        this.context = context;\n        this.hash = tracker.strict ? tracker.hash(context) : 0;\n    }\n}\nvar Recover;\n(function (Recover) {\n    Recover[Recover[\"Insert\"] = 200] = \"Insert\";\n    Recover[Recover[\"Delete\"] = 190] = \"Delete\";\n    Recover[Recover[\"Reduce\"] = 100] = \"Reduce\";\n    Recover[Recover[\"MaxNext\"] = 4] = \"MaxNext\";\n    Recover[Recover[\"MaxInsertStackDepth\"] = 300] = \"MaxInsertStackDepth\";\n    Recover[Recover[\"DampenInsertStackDepth\"] = 120] = \"DampenInsertStackDepth\";\n    Recover[Recover[\"MinBigReduction\"] = 2000] = \"MinBigReduction\";\n})(Recover || (Recover = {}));\n// Used to cheaply run some reductions to scan ahead without mutating\n// an entire stack\nclass SimulatedStack {\n    constructor(start) {\n        this.start = start;\n        this.state = start.state;\n        this.stack = start.stack;\n        this.base = this.stack.length;\n    }\n    reduce(action) {\n        let term = action & 65535 /* Action.ValueMask */, depth = action >> 19 /* Action.ReduceDepthShift */;\n        if (depth == 0) {\n            if (this.stack == this.start.stack)\n                this.stack = this.stack.slice();\n            this.stack.push(this.state, 0, 0);\n            this.base += 3;\n        }\n        else {\n            this.base -= (depth - 1) * 3;\n        }\n        let goto = this.start.p.parser.getGoto(this.stack[this.base - 3], term, true);\n        this.state = goto;\n    }\n}\n// This is given to `Tree.build` to build a buffer, and encapsulates\n// the parent-stack-walking necessary to read the nodes.\nclass StackBufferCursor {\n    constructor(stack, pos, index) {\n        this.stack = stack;\n        this.pos = pos;\n        this.index = index;\n        this.buffer = stack.buffer;\n        if (this.index == 0)\n            this.maybeNext();\n    }\n    static create(stack, pos = stack.bufferBase + stack.buffer.length) {\n        return new StackBufferCursor(stack, pos, pos - stack.bufferBase);\n    }\n    maybeNext() {\n        let next = this.stack.parent;\n        if (next != null) {\n            this.index = this.stack.bufferBase - next.bufferBase;\n            this.stack = next;\n            this.buffer = next.buffer;\n        }\n    }\n    get id() { return this.buffer[this.index - 4]; }\n    get start() { return this.buffer[this.index - 3]; }\n    get end() { return this.buffer[this.index - 2]; }\n    get size() { return this.buffer[this.index - 1]; }\n    next() {\n        this.index -= 4;\n        this.pos -= 4;\n        if (this.index == 0)\n            this.maybeNext();\n    }\n    fork() {\n        return new StackBufferCursor(this.stack, this.pos, this.index);\n    }\n}\n\n// See lezer-generator/src/encode.ts for comments about the encoding\n// used here\nfunction decodeArray(input, Type = Uint16Array) {\n    if (typeof input != \"string\")\n        return input;\n    let array = null;\n    for (let pos = 0, out = 0; pos < input.length;) {\n        let value = 0;\n        for (;;) {\n            let next = input.charCodeAt(pos++), stop = false;\n            if (next == 126 /* Encode.BigValCode */) {\n                value = 65535 /* Encode.BigVal */;\n                break;\n            }\n            if (next >= 92 /* Encode.Gap2 */)\n                next--;\n            if (next >= 34 /* Encode.Gap1 */)\n                next--;\n            let digit = next - 32 /* Encode.Start */;\n            if (digit >= 46 /* Encode.Base */) {\n                digit -= 46 /* Encode.Base */;\n                stop = true;\n            }\n            value += digit;\n            if (stop)\n                break;\n            value *= 46 /* Encode.Base */;\n        }\n        if (array)\n            array[out++] = value;\n        else\n            array = new Type(value);\n    }\n    return array;\n}\n\nclass CachedToken {\n    constructor() {\n        this.start = -1;\n        this.value = -1;\n        this.end = -1;\n        this.extended = -1;\n        this.lookAhead = 0;\n        this.mask = 0;\n        this.context = 0;\n    }\n}\nconst nullToken = new CachedToken;\n/// [Tokenizers](#lr.ExternalTokenizer) interact with the input\n/// through this interface. It presents the input as a stream of\n/// characters, tracking lookahead and hiding the complexity of\n/// [ranges](#common.Parser.parse^ranges) from tokenizer code.\nclass InputStream {\n    /// @internal\n    constructor(\n    /// @internal\n    input, \n    /// @internal\n    ranges) {\n        this.input = input;\n        this.ranges = ranges;\n        /// @internal\n        this.chunk = \"\";\n        /// @internal\n        this.chunkOff = 0;\n        /// Backup chunk\n        this.chunk2 = \"\";\n        this.chunk2Pos = 0;\n        /// The character code of the next code unit in the input, or -1\n        /// when the stream is at the end of the input.\n        this.next = -1;\n        /// @internal\n        this.token = nullToken;\n        this.rangeIndex = 0;\n        this.pos = this.chunkPos = ranges[0].from;\n        this.range = ranges[0];\n        this.end = ranges[ranges.length - 1].to;\n        this.readNext();\n    }\n    /// @internal\n    resolveOffset(offset, assoc) {\n        let range = this.range, index = this.rangeIndex;\n        let pos = this.pos + offset;\n        while (pos < range.from) {\n            if (!index)\n                return null;\n            let next = this.ranges[--index];\n            pos -= range.from - next.to;\n            range = next;\n        }\n        while (assoc < 0 ? pos > range.to : pos >= range.to) {\n            if (index == this.ranges.length - 1)\n                return null;\n            let next = this.ranges[++index];\n            pos += next.from - range.to;\n            range = next;\n        }\n        return pos;\n    }\n    /// @internal\n    clipPos(pos) {\n        if (pos >= this.range.from && pos < this.range.to)\n            return pos;\n        for (let range of this.ranges)\n            if (range.to > pos)\n                return Math.max(pos, range.from);\n        return this.end;\n    }\n    /// Look at a code unit near the stream position. `.peek(0)` equals\n    /// `.next`, `.peek(-1)` gives you the previous character, and so\n    /// on.\n    ///\n    /// Note that looking around during tokenizing creates dependencies\n    /// on potentially far-away content, which may reduce the\n    /// effectiveness incremental parsing—when looking forward—or even\n    /// cause invalid reparses when looking backward more than 25 code\n    /// units, since the library does not track lookbehind.\n    peek(offset) {\n        let idx = this.chunkOff + offset, pos, result;\n        if (idx >= 0 && idx < this.chunk.length) {\n            pos = this.pos + offset;\n            result = this.chunk.charCodeAt(idx);\n        }\n        else {\n            let resolved = this.resolveOffset(offset, 1);\n            if (resolved == null)\n                return -1;\n            pos = resolved;\n            if (pos >= this.chunk2Pos && pos < this.chunk2Pos + this.chunk2.length) {\n                result = this.chunk2.charCodeAt(pos - this.chunk2Pos);\n            }\n            else {\n                let i = this.rangeIndex, range = this.range;\n                while (range.to <= pos)\n                    range = this.ranges[++i];\n                this.chunk2 = this.input.chunk(this.chunk2Pos = pos);\n                if (pos + this.chunk2.length > range.to)\n                    this.chunk2 = this.chunk2.slice(0, range.to - pos);\n                result = this.chunk2.charCodeAt(0);\n            }\n        }\n        if (pos >= this.token.lookAhead)\n            this.token.lookAhead = pos + 1;\n        return result;\n    }\n    /// Accept a token. By default, the end of the token is set to the\n    /// current stream position, but you can pass an offset (relative to\n    /// the stream position) to change that.\n    acceptToken(token, endOffset = 0) {\n        let end = endOffset ? this.resolveOffset(endOffset, -1) : this.pos;\n        if (end == null || end < this.token.start)\n            throw new RangeError(\"Token end out of bounds\");\n        this.token.value = token;\n        this.token.end = end;\n    }\n    getChunk() {\n        if (this.pos >= this.chunk2Pos && this.pos < this.chunk2Pos + this.chunk2.length) {\n            let { chunk, chunkPos } = this;\n            this.chunk = this.chunk2;\n            this.chunkPos = this.chunk2Pos;\n            this.chunk2 = chunk;\n            this.chunk2Pos = chunkPos;\n            this.chunkOff = this.pos - this.chunkPos;\n        }\n        else {\n            this.chunk2 = this.chunk;\n            this.chunk2Pos = this.chunkPos;\n            let nextChunk = this.input.chunk(this.pos);\n            let end = this.pos + nextChunk.length;\n            this.chunk = end > this.range.to ? nextChunk.slice(0, this.range.to - this.pos) : nextChunk;\n            this.chunkPos = this.pos;\n            this.chunkOff = 0;\n        }\n    }\n    readNext() {\n        if (this.chunkOff >= this.chunk.length) {\n            this.getChunk();\n            if (this.chunkOff == this.chunk.length)\n                return this.next = -1;\n        }\n        return this.next = this.chunk.charCodeAt(this.chunkOff);\n    }\n    /// Move the stream forward N (defaults to 1) code units. Returns\n    /// the new value of [`next`](#lr.InputStream.next).\n    advance(n = 1) {\n        this.chunkOff += n;\n        while (this.pos + n >= this.range.to) {\n            if (this.rangeIndex == this.ranges.length - 1)\n                return this.setDone();\n            n -= this.range.to - this.pos;\n            this.range = this.ranges[++this.rangeIndex];\n            this.pos = this.range.from;\n        }\n        this.pos += n;\n        if (this.pos >= this.token.lookAhead)\n            this.token.lookAhead = this.pos + 1;\n        return this.readNext();\n    }\n    setDone() {\n        this.pos = this.chunkPos = this.end;\n        this.range = this.ranges[this.rangeIndex = this.ranges.length - 1];\n        this.chunk = \"\";\n        return this.next = -1;\n    }\n    /// @internal\n    reset(pos, token) {\n        if (token) {\n            this.token = token;\n            token.start = pos;\n            token.lookAhead = pos + 1;\n            token.value = token.extended = -1;\n        }\n        else {\n            this.token = nullToken;\n        }\n        if (this.pos != pos) {\n            this.pos = pos;\n            if (pos == this.end) {\n                this.setDone();\n                return this;\n            }\n            while (pos < this.range.from)\n                this.range = this.ranges[--this.rangeIndex];\n            while (pos >= this.range.to)\n                this.range = this.ranges[++this.rangeIndex];\n            if (pos >= this.chunkPos && pos < this.chunkPos + this.chunk.length) {\n                this.chunkOff = pos - this.chunkPos;\n            }\n            else {\n                this.chunk = \"\";\n                this.chunkOff = 0;\n            }\n            this.readNext();\n        }\n        return this;\n    }\n    /// @internal\n    read(from, to) {\n        if (from >= this.chunkPos && to <= this.chunkPos + this.chunk.length)\n            return this.chunk.slice(from - this.chunkPos, to - this.chunkPos);\n        if (from >= this.chunk2Pos && to <= this.chunk2Pos + this.chunk2.length)\n            return this.chunk2.slice(from - this.chunk2Pos, to - this.chunk2Pos);\n        if (from >= this.range.from && to <= this.range.to)\n            return this.input.read(from, to);\n        let result = \"\";\n        for (let r of this.ranges) {\n            if (r.from >= to)\n                break;\n            if (r.to > from)\n                result += this.input.read(Math.max(r.from, from), Math.min(r.to, to));\n        }\n        return result;\n    }\n}\n/// @internal\nclass TokenGroup {\n    constructor(data, id) {\n        this.data = data;\n        this.id = id;\n    }\n    token(input, stack) {\n        let { parser } = stack.p;\n        readToken(this.data, input, stack, this.id, parser.data, parser.tokenPrecTable);\n    }\n}\nTokenGroup.prototype.contextual = TokenGroup.prototype.fallback = TokenGroup.prototype.extend = false;\n/// @hide\nclass LocalTokenGroup {\n    constructor(data, precTable, elseToken) {\n        this.precTable = precTable;\n        this.elseToken = elseToken;\n        this.data = typeof data == \"string\" ? decodeArray(data) : data;\n    }\n    token(input, stack) {\n        let start = input.pos, skipped = 0;\n        for (;;) {\n            let nextPos = input.resolveOffset(1, -1);\n            readToken(this.data, input, stack, 0, this.data, this.precTable);\n            if (input.token.value > -1)\n                break;\n            if (this.elseToken == null)\n                return;\n            if (nextPos == null)\n                break;\n            input.reset(nextPos, input.token);\n            skipped++;\n        }\n        if (skipped) {\n            input.reset(start, input.token);\n            input.acceptToken(this.elseToken, skipped);\n        }\n    }\n}\nLocalTokenGroup.prototype.contextual = TokenGroup.prototype.fallback = TokenGroup.prototype.extend = false;\n/// `@external tokens` declarations in the grammar should resolve to\n/// an instance of this class.\nclass ExternalTokenizer {\n    /// Create a tokenizer. The first argument is the function that,\n    /// given an input stream, scans for the types of tokens it\n    /// recognizes at the stream's position, and calls\n    /// [`acceptToken`](#lr.InputStream.acceptToken) when it finds\n    /// one.\n    constructor(\n    /// @internal\n    token, options = {}) {\n        this.token = token;\n        this.contextual = !!options.contextual;\n        this.fallback = !!options.fallback;\n        this.extend = !!options.extend;\n    }\n}\n// Tokenizer data is stored a big uint16 array containing, for each\n// state:\n//\n//  - A group bitmask, indicating what token groups are reachable from\n//    this state, so that paths that can only lead to tokens not in\n//    any of the current groups can be cut off early.\n//\n//  - The position of the end of the state's sequence of accepting\n//    tokens\n//\n//  - The number of outgoing edges for the state\n//\n//  - The accepting tokens, as (token id, group mask) pairs\n//\n//  - The outgoing edges, as (start character, end character, state\n//    index) triples, with end character being exclusive\n//\n// This function interprets that data, running through a stream as\n// long as new states with the a matching group mask can be reached,\n// and updating `input.token` when it matches a token.\nfunction readToken(data, input, stack, group, precTable, precOffset) {\n    let state = 0, groupMask = 1 << group, { dialect } = stack.p.parser;\n    scan: for (;;) {\n        if ((groupMask & data[state]) == 0)\n            break;\n        let accEnd = data[state + 1];\n        // Check whether this state can lead to a token in the current group\n        // Accept tokens in this state, possibly overwriting\n        // lower-precedence / shorter tokens\n        for (let i = state + 3; i < accEnd; i += 2)\n            if ((data[i + 1] & groupMask) > 0) {\n                let term = data[i];\n                if (dialect.allows(term) &&\n                    (input.token.value == -1 || input.token.value == term ||\n                        overrides(term, input.token.value, precTable, precOffset))) {\n                    input.acceptToken(term);\n                    break;\n                }\n            }\n        let next = input.next, low = 0, high = data[state + 2];\n        // Special case for EOF\n        if (input.next < 0 && high > low && data[accEnd + high * 3 - 3] == 65535 /* Seq.End */ && data[accEnd + high * 3 - 3] == 65535 /* Seq.End */) {\n            state = data[accEnd + high * 3 - 1];\n            continue scan;\n        }\n        // Do a binary search on the state's edges\n        for (; low < high;) {\n            let mid = (low + high) >> 1;\n            let index = accEnd + mid + (mid << 1);\n            let from = data[index], to = data[index + 1] || 0x10000;\n            if (next < from)\n                high = mid;\n            else if (next >= to)\n                low = mid + 1;\n            else {\n                state = data[index + 2];\n                input.advance();\n                continue scan;\n            }\n        }\n        break;\n    }\n}\nfunction findOffset(data, start, term) {\n    for (let i = start, next; (next = data[i]) != 65535 /* Seq.End */; i++)\n        if (next == term)\n            return i - start;\n    return -1;\n}\nfunction overrides(token, prev, tableData, tableOffset) {\n    let iPrev = findOffset(tableData, tableOffset, prev);\n    return iPrev < 0 || findOffset(tableData, tableOffset, token) < iPrev;\n}\n\n// Environment variable used to control console output\nconst verbose = typeof process != \"undefined\" && process.env && /\\bparse\\b/.test(process.env.LOG);\nlet stackIDs = null;\nvar Safety;\n(function (Safety) {\n    Safety[Safety[\"Margin\"] = 25] = \"Margin\";\n})(Safety || (Safety = {}));\nfunction cutAt(tree, pos, side) {\n    let cursor = tree.cursor(common.IterMode.IncludeAnonymous);\n    cursor.moveTo(pos);\n    for (;;) {\n        if (!(side < 0 ? cursor.childBefore(pos) : cursor.childAfter(pos)))\n            for (;;) {\n                if ((side < 0 ? cursor.to < pos : cursor.from > pos) && !cursor.type.isError)\n                    return side < 0 ? Math.max(0, Math.min(cursor.to - 1, pos - 25 /* Safety.Margin */))\n                        : Math.min(tree.length, Math.max(cursor.from + 1, pos + 25 /* Safety.Margin */));\n                if (side < 0 ? cursor.prevSibling() : cursor.nextSibling())\n                    break;\n                if (!cursor.parent())\n                    return side < 0 ? 0 : tree.length;\n            }\n    }\n}\nclass FragmentCursor {\n    constructor(fragments, nodeSet) {\n        this.fragments = fragments;\n        this.nodeSet = nodeSet;\n        this.i = 0;\n        this.fragment = null;\n        this.safeFrom = -1;\n        this.safeTo = -1;\n        this.trees = [];\n        this.start = [];\n        this.index = [];\n        this.nextFragment();\n    }\n    nextFragment() {\n        let fr = this.fragment = this.i == this.fragments.length ? null : this.fragments[this.i++];\n        if (fr) {\n            this.safeFrom = fr.openStart ? cutAt(fr.tree, fr.from + fr.offset, 1) - fr.offset : fr.from;\n            this.safeTo = fr.openEnd ? cutAt(fr.tree, fr.to + fr.offset, -1) - fr.offset : fr.to;\n            while (this.trees.length) {\n                this.trees.pop();\n                this.start.pop();\n                this.index.pop();\n            }\n            this.trees.push(fr.tree);\n            this.start.push(-fr.offset);\n            this.index.push(0);\n            this.nextStart = this.safeFrom;\n        }\n        else {\n            this.nextStart = 1e9;\n        }\n    }\n    // `pos` must be >= any previously given `pos` for this cursor\n    nodeAt(pos) {\n        if (pos < this.nextStart)\n            return null;\n        while (this.fragment && this.safeTo <= pos)\n            this.nextFragment();\n        if (!this.fragment)\n            return null;\n        for (;;) {\n            let last = this.trees.length - 1;\n            if (last < 0) { // End of tree\n                this.nextFragment();\n                return null;\n            }\n            let top = this.trees[last], index = this.index[last];\n            if (index == top.children.length) {\n                this.trees.pop();\n                this.start.pop();\n                this.index.pop();\n                continue;\n            }\n            let next = top.children[index];\n            let start = this.start[last] + top.positions[index];\n            if (start > pos) {\n                this.nextStart = start;\n                return null;\n            }\n            if (next instanceof common.Tree) {\n                if (start == pos) {\n                    if (start < this.safeFrom)\n                        return null;\n                    let end = start + next.length;\n                    if (end <= this.safeTo) {\n                        let lookAhead = next.prop(common.NodeProp.lookAhead);\n                        if (!lookAhead || end + lookAhead < this.fragment.to)\n                            return next;\n                    }\n                }\n                this.index[last]++;\n                if (start + next.length >= Math.max(this.safeFrom, pos)) { // Enter this node\n                    this.trees.push(next);\n                    this.start.push(start);\n                    this.index.push(0);\n                }\n            }\n            else {\n                this.index[last]++;\n                this.nextStart = start + next.length;\n            }\n        }\n    }\n}\nclass TokenCache {\n    constructor(parser, stream) {\n        this.stream = stream;\n        this.tokens = [];\n        this.mainToken = null;\n        this.actions = [];\n        this.tokens = parser.tokenizers.map(_ => new CachedToken);\n    }\n    getActions(stack) {\n        let actionIndex = 0;\n        let main = null;\n        let { parser } = stack.p, { tokenizers } = parser;\n        let mask = parser.stateSlot(stack.state, 3 /* ParseState.TokenizerMask */);\n        let context = stack.curContext ? stack.curContext.hash : 0;\n        let lookAhead = 0;\n        for (let i = 0; i < tokenizers.length; i++) {\n            if (((1 << i) & mask) == 0)\n                continue;\n            let tokenizer = tokenizers[i], token = this.tokens[i];\n            if (main && !tokenizer.fallback)\n                continue;\n            if (tokenizer.contextual || token.start != stack.pos || token.mask != mask || token.context != context) {\n                this.updateCachedToken(token, tokenizer, stack);\n                token.mask = mask;\n                token.context = context;\n            }\n            if (token.lookAhead > token.end + 25 /* Safety.Margin */)\n                lookAhead = Math.max(token.lookAhead, lookAhead);\n            if (token.value != 0 /* Term.Err */) {\n                let startIndex = actionIndex;\n                if (token.extended > -1)\n                    actionIndex = this.addActions(stack, token.extended, token.end, actionIndex);\n                actionIndex = this.addActions(stack, token.value, token.end, actionIndex);\n                if (!tokenizer.extend) {\n                    main = token;\n                    if (actionIndex > startIndex)\n                        break;\n                }\n            }\n        }\n        while (this.actions.length > actionIndex)\n            this.actions.pop();\n        if (lookAhead)\n            stack.setLookAhead(lookAhead);\n        if (!main && stack.pos == this.stream.end) {\n            main = new CachedToken;\n            main.value = stack.p.parser.eofTerm;\n            main.start = main.end = stack.pos;\n            actionIndex = this.addActions(stack, main.value, main.end, actionIndex);\n        }\n        this.mainToken = main;\n        return this.actions;\n    }\n    getMainToken(stack) {\n        if (this.mainToken)\n            return this.mainToken;\n        let main = new CachedToken, { pos, p } = stack;\n        main.start = pos;\n        main.end = Math.min(pos + 1, p.stream.end);\n        main.value = pos == p.stream.end ? p.parser.eofTerm : 0 /* Term.Err */;\n        return main;\n    }\n    updateCachedToken(token, tokenizer, stack) {\n        let start = this.stream.clipPos(stack.pos);\n        tokenizer.token(this.stream.reset(start, token), stack);\n        if (token.value > -1) {\n            let { parser } = stack.p;\n            for (let i = 0; i < parser.specialized.length; i++)\n                if (parser.specialized[i] == token.value) {\n                    let result = parser.specializers[i](this.stream.read(token.start, token.end), stack);\n                    if (result >= 0 && stack.p.parser.dialect.allows(result >> 1)) {\n                        if ((result & 1) == 0 /* Specialize.Specialize */)\n                            token.value = result >> 1;\n                        else\n                            token.extended = result >> 1;\n                        break;\n                    }\n                }\n        }\n        else {\n            token.value = 0 /* Term.Err */;\n            token.end = this.stream.clipPos(start + 1);\n        }\n    }\n    putAction(action, token, end, index) {\n        // Don't add duplicate actions\n        for (let i = 0; i < index; i += 3)\n            if (this.actions[i] == action)\n                return index;\n        this.actions[index++] = action;\n        this.actions[index++] = token;\n        this.actions[index++] = end;\n        return index;\n    }\n    addActions(stack, token, end, index) {\n        let { state } = stack, { parser } = stack.p, { data } = parser;\n        for (let set = 0; set < 2; set++) {\n            for (let i = parser.stateSlot(state, set ? 2 /* ParseState.Skip */ : 1 /* ParseState.Actions */);; i += 3) {\n                if (data[i] == 65535 /* Seq.End */) {\n                    if (data[i + 1] == 1 /* Seq.Next */) {\n                        i = pair(data, i + 2);\n                    }\n                    else {\n                        if (index == 0 && data[i + 1] == 2 /* Seq.Other */)\n                            index = this.putAction(pair(data, i + 2), token, end, index);\n                        break;\n                    }\n                }\n                if (data[i] == token)\n                    index = this.putAction(pair(data, i + 1), token, end, index);\n            }\n        }\n        return index;\n    }\n}\nvar Rec;\n(function (Rec) {\n    Rec[Rec[\"Distance\"] = 5] = \"Distance\";\n    Rec[Rec[\"MaxRemainingPerStep\"] = 3] = \"MaxRemainingPerStep\";\n    // When two stacks have been running independently long enough to\n    // add this many elements to their buffers, prune one.\n    Rec[Rec[\"MinBufferLengthPrune\"] = 500] = \"MinBufferLengthPrune\";\n    Rec[Rec[\"ForceReduceLimit\"] = 10] = \"ForceReduceLimit\";\n    // Once a stack reaches this depth (in .stack.length) force-reduce\n    // it back to CutTo to avoid creating trees that overflow the stack\n    // on recursive traversal.\n    Rec[Rec[\"CutDepth\"] = 15000] = \"CutDepth\";\n    Rec[Rec[\"CutTo\"] = 9000] = \"CutTo\";\n    Rec[Rec[\"MaxLeftAssociativeReductionCount\"] = 300] = \"MaxLeftAssociativeReductionCount\";\n    // The maximum number of non-recovering stacks to explore (to avoid\n    // getting bogged down with exponentially multiplying stacks in\n    // ambiguous content)\n    Rec[Rec[\"MaxStackCount\"] = 12] = \"MaxStackCount\";\n})(Rec || (Rec = {}));\nclass Parse {\n    constructor(parser, input, fragments, ranges) {\n        this.parser = parser;\n        this.input = input;\n        this.ranges = ranges;\n        this.recovering = 0;\n        this.nextStackID = 0x2654; // ♔, ♕, ♖, ♗, ♘, ♙, ♠, ♡, ♢, ♣, ♤, ♥, ♦, ♧\n        this.minStackPos = 0;\n        this.reused = [];\n        this.stoppedAt = null;\n        this.lastBigReductionStart = -1;\n        this.lastBigReductionSize = 0;\n        this.bigReductionCount = 0;\n        this.stream = new InputStream(input, ranges);\n        this.tokens = new TokenCache(parser, this.stream);\n        this.topTerm = parser.top[1];\n        let { from } = ranges[0];\n        this.stacks = [Stack.start(this, parser.top[0], from)];\n        this.fragments = fragments.length && this.stream.end - from > parser.bufferLength * 4\n            ? new FragmentCursor(fragments, parser.nodeSet) : null;\n    }\n    get parsedPos() {\n        return this.minStackPos;\n    }\n    // Move the parser forward. This will process all parse stacks at\n    // `this.pos` and try to advance them to a further position. If no\n    // stack for such a position is found, it'll start error-recovery.\n    //\n    // When the parse is finished, this will return a syntax tree. When\n    // not, it returns `null`.\n    advance() {\n        let stacks = this.stacks, pos = this.minStackPos;\n        // This will hold stacks beyond `pos`.\n        let newStacks = this.stacks = [];\n        let stopped, stoppedTokens;\n        // If a large amount of reductions happened with the same start\n        // position, force the stack out of that production in order to\n        // avoid creating a tree too deep to recurse through.\n        // (This is an ugly kludge, because unfortunately there is no\n        // straightforward, cheap way to check for this happening, due to\n        // the history of reductions only being available in an\n        // expensive-to-access format in the stack buffers.)\n        if (this.bigReductionCount > 300 /* Rec.MaxLeftAssociativeReductionCount */ && stacks.length == 1) {\n            let [s] = stacks;\n            while (s.forceReduce() && s.stack.length && s.stack[s.stack.length - 2] >= this.lastBigReductionStart) { }\n            this.bigReductionCount = this.lastBigReductionSize = 0;\n        }\n        // Keep advancing any stacks at `pos` until they either move\n        // forward or can't be advanced. Gather stacks that can't be\n        // advanced further in `stopped`.\n        for (let i = 0; i < stacks.length; i++) {\n            let stack = stacks[i];\n            for (;;) {\n                this.tokens.mainToken = null;\n                if (stack.pos > pos) {\n                    newStacks.push(stack);\n                }\n                else if (this.advanceStack(stack, newStacks, stacks)) {\n                    continue;\n                }\n                else {\n                    if (!stopped) {\n                        stopped = [];\n                        stoppedTokens = [];\n                    }\n                    stopped.push(stack);\n                    let tok = this.tokens.getMainToken(stack);\n                    stoppedTokens.push(tok.value, tok.end);\n                }\n                break;\n            }\n        }\n        if (!newStacks.length) {\n            let finished = stopped && findFinished(stopped);\n            if (finished)\n                return this.stackToTree(finished);\n            if (this.parser.strict) {\n                if (verbose && stopped)\n                    console.log(\"Stuck with token \" + (this.tokens.mainToken ? this.parser.getName(this.tokens.mainToken.value) : \"none\"));\n                throw new SyntaxError(\"No parse at \" + pos);\n            }\n            if (!this.recovering)\n                this.recovering = 5 /* Rec.Distance */;\n        }\n        if (this.recovering && stopped) {\n            let finished = this.stoppedAt != null && stopped[0].pos > this.stoppedAt ? stopped[0]\n                : this.runRecovery(stopped, stoppedTokens, newStacks);\n            if (finished)\n                return this.stackToTree(finished.forceAll());\n        }\n        if (this.recovering) {\n            let maxRemaining = this.recovering == 1 ? 1 : this.recovering * 3 /* Rec.MaxRemainingPerStep */;\n            if (newStacks.length > maxRemaining) {\n                newStacks.sort((a, b) => b.score - a.score);\n                while (newStacks.length > maxRemaining)\n                    newStacks.pop();\n            }\n            if (newStacks.some(s => s.reducePos > pos))\n                this.recovering--;\n        }\n        else if (newStacks.length > 1) {\n            // Prune stacks that are in the same state, or that have been\n            // running without splitting for a while, to avoid getting stuck\n            // with multiple successful stacks running endlessly on.\n            outer: for (let i = 0; i < newStacks.length - 1; i++) {\n                let stack = newStacks[i];\n                for (let j = i + 1; j < newStacks.length; j++) {\n                    let other = newStacks[j];\n                    if (stack.sameState(other) ||\n                        stack.buffer.length > 500 /* Rec.MinBufferLengthPrune */ && other.buffer.length > 500 /* Rec.MinBufferLengthPrune */) {\n                        if (((stack.score - other.score) || (stack.buffer.length - other.buffer.length)) > 0) {\n                            newStacks.splice(j--, 1);\n                        }\n                        else {\n                            newStacks.splice(i--, 1);\n                            continue outer;\n                        }\n                    }\n                }\n            }\n            if (newStacks.length > 12 /* Rec.MaxStackCount */)\n                newStacks.splice(12 /* Rec.MaxStackCount */, newStacks.length - 12 /* Rec.MaxStackCount */);\n        }\n        this.minStackPos = newStacks[0].pos;\n        for (let i = 1; i < newStacks.length; i++)\n            if (newStacks[i].pos < this.minStackPos)\n                this.minStackPos = newStacks[i].pos;\n        return null;\n    }\n    stopAt(pos) {\n        if (this.stoppedAt != null && this.stoppedAt < pos)\n            throw new RangeError(\"Can't move stoppedAt forward\");\n        this.stoppedAt = pos;\n    }\n    // Returns an updated version of the given stack, or null if the\n    // stack can't advance normally. When `split` and `stacks` are\n    // given, stacks split off by ambiguous operations will be pushed to\n    // `split`, or added to `stacks` if they move `pos` forward.\n    advanceStack(stack, stacks, split) {\n        let start = stack.pos, { parser } = this;\n        let base = verbose ? this.stackID(stack) + \" -> \" : \"\";\n        if (this.stoppedAt != null && start > this.stoppedAt)\n            return stack.forceReduce() ? stack : null;\n        if (this.fragments) {\n            let strictCx = stack.curContext && stack.curContext.tracker.strict, cxHash = strictCx ? stack.curContext.hash : 0;\n            for (let cached = this.fragments.nodeAt(start); cached;) {\n                let match = this.parser.nodeSet.types[cached.type.id] == cached.type ? parser.getGoto(stack.state, cached.type.id) : -1;\n                if (match > -1 && cached.length && (!strictCx || (cached.prop(common.NodeProp.contextHash) || 0) == cxHash)) {\n                    stack.useNode(cached, match);\n                    if (verbose)\n                        console.log(base + this.stackID(stack) + ` (via reuse of ${parser.getName(cached.type.id)})`);\n                    return true;\n                }\n                if (!(cached instanceof common.Tree) || cached.children.length == 0 || cached.positions[0] > 0)\n                    break;\n                let inner = cached.children[0];\n                if (inner instanceof common.Tree && cached.positions[0] == 0)\n                    cached = inner;\n                else\n                    break;\n            }\n        }\n        let defaultReduce = parser.stateSlot(stack.state, 4 /* ParseState.DefaultReduce */);\n        if (defaultReduce > 0) {\n            stack.reduce(defaultReduce);\n            if (verbose)\n                console.log(base + this.stackID(stack) + ` (via always-reduce ${parser.getName(defaultReduce & 65535 /* Action.ValueMask */)})`);\n            return true;\n        }\n        if (stack.stack.length >= 15000 /* Rec.CutDepth */) {\n            while (stack.stack.length > 9000 /* Rec.CutTo */ && stack.forceReduce()) { }\n        }\n        let actions = this.tokens.getActions(stack);\n        for (let i = 0; i < actions.length;) {\n            let action = actions[i++], term = actions[i++], end = actions[i++];\n            let last = i == actions.length || !split;\n            let localStack = last ? stack : stack.split();\n            localStack.apply(action, term, end);\n            if (verbose)\n                console.log(base + this.stackID(localStack) + ` (via ${(action & 65536 /* Action.ReduceFlag */) == 0 ? \"shift\"\n                    : `reduce of ${parser.getName(action & 65535 /* Action.ValueMask */)}`} for ${parser.getName(term)} @ ${start}${localStack == stack ? \"\" : \", split\"})`);\n            if (last)\n                return true;\n            else if (localStack.pos > start)\n                stacks.push(localStack);\n            else\n                split.push(localStack);\n        }\n        return false;\n    }\n    // Advance a given stack forward as far as it will go. Returns the\n    // (possibly updated) stack if it got stuck, or null if it moved\n    // forward and was given to `pushStackDedup`.\n    advanceFully(stack, newStacks) {\n        let pos = stack.pos;\n        for (;;) {\n            if (!this.advanceStack(stack, null, null))\n                return false;\n            if (stack.pos > pos) {\n                pushStackDedup(stack, newStacks);\n                return true;\n            }\n        }\n    }\n    runRecovery(stacks, tokens, newStacks) {\n        let finished = null, restarted = false;\n        for (let i = 0; i < stacks.length; i++) {\n            let stack = stacks[i], token = tokens[i << 1], tokenEnd = tokens[(i << 1) + 1];\n            let base = verbose ? this.stackID(stack) + \" -> \" : \"\";\n            if (stack.deadEnd) {\n                if (restarted)\n                    continue;\n                restarted = true;\n                stack.restart();\n                if (verbose)\n                    console.log(base + this.stackID(stack) + \" (restarted)\");\n                let done = this.advanceFully(stack, newStacks);\n                if (done)\n                    continue;\n            }\n            let force = stack.split(), forceBase = base;\n            for (let j = 0; force.forceReduce() && j < 10 /* Rec.ForceReduceLimit */; j++) {\n                if (verbose)\n                    console.log(forceBase + this.stackID(force) + \" (via force-reduce)\");\n                let done = this.advanceFully(force, newStacks);\n                if (done)\n                    break;\n                if (verbose)\n                    forceBase = this.stackID(force) + \" -> \";\n            }\n            for (let insert of stack.recoverByInsert(token)) {\n                if (verbose)\n                    console.log(base + this.stackID(insert) + \" (via recover-insert)\");\n                this.advanceFully(insert, newStacks);\n            }\n            if (this.stream.end > stack.pos) {\n                if (tokenEnd == stack.pos) {\n                    tokenEnd++;\n                    token = 0 /* Term.Err */;\n                }\n                stack.recoverByDelete(token, tokenEnd);\n                if (verbose)\n                    console.log(base + this.stackID(stack) + ` (via recover-delete ${this.parser.getName(token)})`);\n                pushStackDedup(stack, newStacks);\n            }\n            else if (!finished || finished.score < stack.score) {\n                finished = stack;\n            }\n        }\n        return finished;\n    }\n    // Convert the stack's buffer to a syntax tree.\n    stackToTree(stack) {\n        stack.close();\n        return common.Tree.build({ buffer: StackBufferCursor.create(stack),\n            nodeSet: this.parser.nodeSet,\n            topID: this.topTerm,\n            maxBufferLength: this.parser.bufferLength,\n            reused: this.reused,\n            start: this.ranges[0].from,\n            length: stack.pos - this.ranges[0].from,\n            minRepeatType: this.parser.minRepeatTerm });\n    }\n    stackID(stack) {\n        let id = (stackIDs || (stackIDs = new WeakMap)).get(stack);\n        if (!id)\n            stackIDs.set(stack, id = String.fromCodePoint(this.nextStackID++));\n        return id + stack;\n    }\n}\nfunction pushStackDedup(stack, newStacks) {\n    for (let i = 0; i < newStacks.length; i++) {\n        let other = newStacks[i];\n        if (other.pos == stack.pos && other.sameState(stack)) {\n            if (newStacks[i].score < stack.score)\n                newStacks[i] = stack;\n            return;\n        }\n    }\n    newStacks.push(stack);\n}\nclass Dialect {\n    constructor(source, flags, disabled) {\n        this.source = source;\n        this.flags = flags;\n        this.disabled = disabled;\n    }\n    allows(term) { return !this.disabled || this.disabled[term] == 0; }\n}\nconst id = x => x;\n/// Context trackers are used to track stateful context (such as\n/// indentation in the Python grammar, or parent elements in the XML\n/// grammar) needed by external tokenizers. You declare them in a\n/// grammar file as `@context exportName from \"module\"`.\n///\n/// Context values should be immutable, and can be updated (replaced)\n/// on shift or reduce actions.\n///\n/// The export used in a `@context` declaration should be of this\n/// type.\nclass ContextTracker {\n    /// Define a context tracker.\n    constructor(spec) {\n        this.start = spec.start;\n        this.shift = spec.shift || id;\n        this.reduce = spec.reduce || id;\n        this.reuse = spec.reuse || id;\n        this.hash = spec.hash || (() => 0);\n        this.strict = spec.strict !== false;\n    }\n}\n/// Holds the parse tables for a given grammar, as generated by\n/// `lezer-generator`, and provides [methods](#common.Parser) to parse\n/// content with.\nclass LRParser extends common.Parser {\n    /// @internal\n    constructor(spec) {\n        super();\n        /// @internal\n        this.wrappers = [];\n        if (spec.version != 14 /* File.Version */)\n            throw new RangeError(`Parser version (${spec.version}) doesn't match runtime version (${14 /* File.Version */})`);\n        let nodeNames = spec.nodeNames.split(\" \");\n        this.minRepeatTerm = nodeNames.length;\n        for (let i = 0; i < spec.repeatNodeCount; i++)\n            nodeNames.push(\"\");\n        let topTerms = Object.keys(spec.topRules).map(r => spec.topRules[r][1]);\n        let nodeProps = [];\n        for (let i = 0; i < nodeNames.length; i++)\n            nodeProps.push([]);\n        function setProp(nodeID, prop, value) {\n            nodeProps[nodeID].push([prop, prop.deserialize(String(value))]);\n        }\n        if (spec.nodeProps)\n            for (let propSpec of spec.nodeProps) {\n                let prop = propSpec[0];\n                if (typeof prop == \"string\")\n                    prop = common.NodeProp[prop];\n                for (let i = 1; i < propSpec.length;) {\n                    let next = propSpec[i++];\n                    if (next >= 0) {\n                        setProp(next, prop, propSpec[i++]);\n                    }\n                    else {\n                        let value = propSpec[i + -next];\n                        for (let j = -next; j > 0; j--)\n                            setProp(propSpec[i++], prop, value);\n                        i++;\n                    }\n                }\n            }\n        this.nodeSet = new common.NodeSet(nodeNames.map((name, i) => common.NodeType.define({\n            name: i >= this.minRepeatTerm ? undefined : name,\n            id: i,\n            props: nodeProps[i],\n            top: topTerms.indexOf(i) > -1,\n            error: i == 0,\n            skipped: spec.skippedNodes && spec.skippedNodes.indexOf(i) > -1\n        })));\n        if (spec.propSources)\n            this.nodeSet = this.nodeSet.extend(...spec.propSources);\n        this.strict = false;\n        this.bufferLength = common.DefaultBufferLength;\n        let tokenArray = decodeArray(spec.tokenData);\n        this.context = spec.context;\n        this.specializerSpecs = spec.specialized || [];\n        this.specialized = new Uint16Array(this.specializerSpecs.length);\n        for (let i = 0; i < this.specializerSpecs.length; i++)\n            this.specialized[i] = this.specializerSpecs[i].term;\n        this.specializers = this.specializerSpecs.map(getSpecializer);\n        this.states = decodeArray(spec.states, Uint32Array);\n        this.data = decodeArray(spec.stateData);\n        this.goto = decodeArray(spec.goto);\n        this.maxTerm = spec.maxTerm;\n        this.tokenizers = spec.tokenizers.map(value => typeof value == \"number\" ? new TokenGroup(tokenArray, value) : value);\n        this.topRules = spec.topRules;\n        this.dialects = spec.dialects || {};\n        this.dynamicPrecedences = spec.dynamicPrecedences || null;\n        this.tokenPrecTable = spec.tokenPrec;\n        this.termNames = spec.termNames || null;\n        this.maxNode = this.nodeSet.types.length - 1;\n        this.dialect = this.parseDialect();\n        this.top = this.topRules[Object.keys(this.topRules)[0]];\n    }\n    createParse(input, fragments, ranges) {\n        let parse = new Parse(this, input, fragments, ranges);\n        for (let w of this.wrappers)\n            parse = w(parse, input, fragments, ranges);\n        return parse;\n    }\n    /// Get a goto table entry @internal\n    getGoto(state, term, loose = false) {\n        let table = this.goto;\n        if (term >= table[0])\n            return -1;\n        for (let pos = table[term + 1];;) {\n            let groupTag = table[pos++], last = groupTag & 1;\n            let target = table[pos++];\n            if (last && loose)\n                return target;\n            for (let end = pos + (groupTag >> 1); pos < end; pos++)\n                if (table[pos] == state)\n                    return target;\n            if (last)\n                return -1;\n        }\n    }\n    /// Check if this state has an action for a given terminal @internal\n    hasAction(state, terminal) {\n        let data = this.data;\n        for (let set = 0; set < 2; set++) {\n            for (let i = this.stateSlot(state, set ? 2 /* ParseState.Skip */ : 1 /* ParseState.Actions */), next;; i += 3) {\n                if ((next = data[i]) == 65535 /* Seq.End */) {\n                    if (data[i + 1] == 1 /* Seq.Next */)\n                        next = data[i = pair(data, i + 2)];\n                    else if (data[i + 1] == 2 /* Seq.Other */)\n                        return pair(data, i + 2);\n                    else\n                        break;\n                }\n                if (next == terminal || next == 0 /* Term.Err */)\n                    return pair(data, i + 1);\n            }\n        }\n        return 0;\n    }\n    /// @internal\n    stateSlot(state, slot) {\n        return this.states[(state * 6 /* ParseState.Size */) + slot];\n    }\n    /// @internal\n    stateFlag(state, flag) {\n        return (this.stateSlot(state, 0 /* ParseState.Flags */) & flag) > 0;\n    }\n    /// @internal\n    validAction(state, action) {\n        return !!this.allActions(state, a => a == action ? true : null);\n    }\n    /// @internal\n    allActions(state, action) {\n        let deflt = this.stateSlot(state, 4 /* ParseState.DefaultReduce */);\n        let result = deflt ? action(deflt) : undefined;\n        for (let i = this.stateSlot(state, 1 /* ParseState.Actions */); result == null; i += 3) {\n            if (this.data[i] == 65535 /* Seq.End */) {\n                if (this.data[i + 1] == 1 /* Seq.Next */)\n                    i = pair(this.data, i + 2);\n                else\n                    break;\n            }\n            result = action(pair(this.data, i + 1));\n        }\n        return result;\n    }\n    /// Get the states that can follow this one through shift actions or\n    /// goto jumps. @internal\n    nextStates(state) {\n        let result = [];\n        for (let i = this.stateSlot(state, 1 /* ParseState.Actions */);; i += 3) {\n            if (this.data[i] == 65535 /* Seq.End */) {\n                if (this.data[i + 1] == 1 /* Seq.Next */)\n                    i = pair(this.data, i + 2);\n                else\n                    break;\n            }\n            if ((this.data[i + 2] & (65536 /* Action.ReduceFlag */ >> 16)) == 0) {\n                let value = this.data[i + 1];\n                if (!result.some((v, i) => (i & 1) && v == value))\n                    result.push(this.data[i], value);\n            }\n        }\n        return result;\n    }\n    /// Configure the parser. Returns a new parser instance that has the\n    /// given settings modified. Settings not provided in `config` are\n    /// kept from the original parser.\n    configure(config) {\n        // Hideous reflection-based kludge to make it easy to create a\n        // slightly modified copy of a parser.\n        let copy = Object.assign(Object.create(LRParser.prototype), this);\n        if (config.props)\n            copy.nodeSet = this.nodeSet.extend(...config.props);\n        if (config.top) {\n            let info = this.topRules[config.top];\n            if (!info)\n                throw new RangeError(`Invalid top rule name ${config.top}`);\n            copy.top = info;\n        }\n        if (config.tokenizers)\n            copy.tokenizers = this.tokenizers.map(t => {\n                let found = config.tokenizers.find(r => r.from == t);\n                return found ? found.to : t;\n            });\n        if (config.specializers) {\n            copy.specializers = this.specializers.slice();\n            copy.specializerSpecs = this.specializerSpecs.map((s, i) => {\n                let found = config.specializers.find(r => r.from == s.external);\n                if (!found)\n                    return s;\n                let spec = Object.assign(Object.assign({}, s), { external: found.to });\n                copy.specializers[i] = getSpecializer(spec);\n                return spec;\n            });\n        }\n        if (config.contextTracker)\n            copy.context = config.contextTracker;\n        if (config.dialect)\n            copy.dialect = this.parseDialect(config.dialect);\n        if (config.strict != null)\n            copy.strict = config.strict;\n        if (config.wrap)\n            copy.wrappers = copy.wrappers.concat(config.wrap);\n        if (config.bufferLength != null)\n            copy.bufferLength = config.bufferLength;\n        return copy;\n    }\n    /// Tells you whether any [parse wrappers](#lr.ParserConfig.wrap)\n    /// are registered for this parser.\n    hasWrappers() {\n        return this.wrappers.length > 0;\n    }\n    /// Returns the name associated with a given term. This will only\n    /// work for all terms when the parser was generated with the\n    /// `--names` option. By default, only the names of tagged terms are\n    /// stored.\n    getName(term) {\n        return this.termNames ? this.termNames[term] : String(term <= this.maxNode && this.nodeSet.types[term].name || term);\n    }\n    /// The eof term id is always allocated directly after the node\n    /// types. @internal\n    get eofTerm() { return this.maxNode + 1; }\n    /// The type of top node produced by the parser.\n    get topNode() { return this.nodeSet.types[this.top[1]]; }\n    /// @internal\n    dynamicPrecedence(term) {\n        let prec = this.dynamicPrecedences;\n        return prec == null ? 0 : prec[term] || 0;\n    }\n    /// @internal\n    parseDialect(dialect) {\n        let values = Object.keys(this.dialects), flags = values.map(() => false);\n        if (dialect)\n            for (let part of dialect.split(\" \")) {\n                let id = values.indexOf(part);\n                if (id >= 0)\n                    flags[id] = true;\n            }\n        let disabled = null;\n        for (let i = 0; i < values.length; i++)\n            if (!flags[i]) {\n                for (let j = this.dialects[values[i]], id; (id = this.data[j++]) != 65535 /* Seq.End */;)\n                    (disabled || (disabled = new Uint8Array(this.maxTerm + 1)))[id] = 1;\n            }\n        return new Dialect(dialect, flags, disabled);\n    }\n    /// Used by the output of the parser generator. Not available to\n    /// user code. @hide\n    static deserialize(spec) {\n        return new LRParser(spec);\n    }\n}\nfunction pair(data, off) { return data[off] | (data[off + 1] << 16); }\nfunction findFinished(stacks) {\n    let best = null;\n    for (let stack of stacks) {\n        let stopped = stack.p.stoppedAt;\n        if ((stack.pos == stack.p.stream.end || stopped != null && stack.pos > stopped) &&\n            stack.p.parser.stateFlag(stack.state, 2 /* StateFlag.Accepting */) &&\n            (!best || best.score < stack.score))\n            best = stack;\n    }\n    return best;\n}\nfunction getSpecializer(spec) {\n    if (spec.external) {\n        let mask = spec.extend ? 1 /* Specialize.Extend */ : 0 /* Specialize.Specialize */;\n        return (value, stack) => (spec.external(value, stack) << 1) | mask;\n    }\n    return spec.get;\n}\n\nexports.ContextTracker = ContextTracker;\nexports.ExternalTokenizer = ExternalTokenizer;\nexports.InputStream = InputStream;\nexports.LRParser = LRParser;\nexports.LocalTokenGroup = LocalTokenGroup;\nexports.Stack = Stack;\n","'use strict';\n\n// These are filled with ranges (rangeFrom[i] up to but not including\n// rangeTo[i]) of code points that count as extending characters.\nlet rangeFrom = [], rangeTo = []\n\n;(() => {\n  // Compressed representation of the Grapheme_Cluster_Break=Extend\n  // information from\n  // http://www.unicode.org/Public/16.0.0/ucd/auxiliary/GraphemeBreakProperty.txt.\n  // Each pair of elements represents a range, as an offet from the\n  // previous range and a length. Numbers are in base-36, with the empty\n  // string being a shorthand for 1.\n  let numbers = \"lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o\".split(\",\").map(s => s ? parseInt(s, 36) : 1);\n  for (let i = 0, n = 0; i < numbers.length; i++)\n    (i % 2 ? rangeTo : rangeFrom).push(n = n + numbers[i]);\n})();\n\nfunction isExtendingChar(code) {\n  if (code < 768) return false\n  for (let from = 0, to = rangeFrom.length;;) {\n    let mid = (from + to) >> 1;\n    if (code < rangeFrom[mid]) to = mid;\n    else if (code >= rangeTo[mid]) from = mid + 1;\n    else return true\n    if (from == to) return false\n  }\n}\n\nfunction isRegionalIndicator(code) {\n  return code >= 0x1F1E6 && code <= 0x1F1FF\n}\n\nconst ZWJ = 0x200d;\n\nfunction findClusterBreak(str, pos, forward = true, includeExtending = true) {\n  return (forward ? nextClusterBreak : prevClusterBreak)(str, pos, includeExtending)\n}\n\nfunction nextClusterBreak(str, pos, includeExtending) {\n  if (pos == str.length) return pos\n  // If pos is in the middle of a surrogate pair, move to its start\n  if (pos && surrogateLow(str.charCodeAt(pos)) && surrogateHigh(str.charCodeAt(pos - 1))) pos--;\n  let prev = codePointAt(str, pos);\n  pos += codePointSize(prev);\n  while (pos < str.length) {\n    let next = codePointAt(str, pos);\n    if (prev == ZWJ || next == ZWJ || includeExtending && isExtendingChar(next)) {\n      pos += codePointSize(next);\n      prev = next;\n    } else if (isRegionalIndicator(next)) {\n      let countBefore = 0, i = pos - 2;\n      while (i >= 0 && isRegionalIndicator(codePointAt(str, i))) { countBefore++; i -= 2; }\n      if (countBefore % 2 == 0) break\n      else pos += 2;\n    } else {\n      break\n    }\n  }\n  return pos\n}\n\nfunction prevClusterBreak(str, pos, includeExtending) {\n  while (pos > 0) {\n    let found = nextClusterBreak(str, pos - 2, includeExtending);\n    if (found < pos) return found\n    pos--;\n  }\n  return 0\n}\n\nfunction codePointAt(str, pos) {\n  let code0 = str.charCodeAt(pos);\n  if (!surrogateHigh(code0) || pos + 1 == str.length) return code0\n  let code1 = str.charCodeAt(pos + 1);\n  if (!surrogateLow(code1)) return code0\n  return ((code0 - 0xd800) << 10) + (code1 - 0xdc00) + 0x10000\n}\n\nfunction surrogateLow(ch) { return ch >= 0xDC00 && ch < 0xE000 }\nfunction surrogateHigh(ch) { return ch >= 0xD800 && ch < 0xDC00 }\nfunction codePointSize(code) { return code < 0x10000 ? 1 : 2 }\n\nexports.findClusterBreak = findClusterBreak;\nexports.isExtendingChar = isExtendingChar;\n","\"use strict\";\n// DEFLATE is a complex format; to read this code, you should probably check the RFC first:\n// https://tools.ietf.org/html/rfc1951\n// You may also wish to take a look at the guide I made about this program:\n// https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad\n// Some of the following code is similar to that of UZIP.js:\n// https://github.com/photopea/UZIP.js\n// However, the vast majority of the codebase has diverged from UZIP.js to increase performance and reduce bundle size.\n// Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint\n// is better for memory in most engines (I *think*).\nvar node_worker_1 = require(\"./node-worker.cjs\");\n// aliases for shorter compressed code (most minifers don't do this)\nvar u8 = Uint8Array, u16 = Uint16Array, u32 = Uint32Array;\n// fixed length extra bits\nvar fleb = new u8([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, /* unused */ 0, 0, /* impossible */ 0]);\n// fixed distance extra bits\n// see fleb note\nvar fdeb = new u8([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, /* unused */ 0, 0]);\n// code length index map\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n// get base, reverse index map from extra bits\nvar freb = function (eb, start) {\n    var b = new u16(31);\n    for (var i = 0; i < 31; ++i) {\n        b[i] = start += 1 << eb[i - 1];\n    }\n    // numbers here are at max 18 bits\n    var r = new u32(b[30]);\n    for (var i = 1; i < 30; ++i) {\n        for (var j = b[i]; j < b[i + 1]; ++j) {\n            r[j] = ((j - b[i]) << 5) | i;\n        }\n    }\n    return [b, r];\n};\nvar _a = freb(fleb, 2), fl = _a[0], revfl = _a[1];\n// we can ignore the fact that the other numbers are wrong; they never happen anyway\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0), fd = _b[0], revfd = _b[1];\n// map of value to reverse (assuming 16 bits)\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n    // reverse table algorithm from SO\n    var x = ((i & 0xAAAA) >>> 1) | ((i & 0x5555) << 1);\n    x = ((x & 0xCCCC) >>> 2) | ((x & 0x3333) << 2);\n    x = ((x & 0xF0F0) >>> 4) | ((x & 0x0F0F) << 4);\n    rev[i] = (((x & 0xFF00) >>> 8) | ((x & 0x00FF) << 8)) >>> 1;\n}\n// create huffman tree from u8 \"map\": index -> code length for code index\n// mb (max bits) must be at most 15\n// TODO: optimize/split up?\nvar hMap = (function (cd, mb, r) {\n    var s = cd.length;\n    // index\n    var i = 0;\n    // u16 \"map\": index -> # of codes with bit length = index\n    var l = new u16(mb);\n    // length of cd must be 288 (total # of codes)\n    for (; i < s; ++i) {\n        if (cd[i])\n            ++l[cd[i] - 1];\n    }\n    // u16 \"map\": index -> minimum code for bit length = index\n    var le = new u16(mb);\n    for (i = 0; i < mb; ++i) {\n        le[i] = (le[i - 1] + l[i - 1]) << 1;\n    }\n    var co;\n    if (r) {\n        // u16 \"map\": index -> number of actual bits, symbol for code\n        co = new u16(1 << mb);\n        // bits to remove for reverser\n        var rvb = 15 - mb;\n        for (i = 0; i < s; ++i) {\n            // ignore 0 lengths\n            if (cd[i]) {\n                // num encoding both symbol and bits read\n                var sv = (i << 4) | cd[i];\n                // free bits\n                var r_1 = mb - cd[i];\n                // start value\n                var v = le[cd[i] - 1]++ << r_1;\n                // m is end value\n                for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {\n                    // every 16 bit value starting with the code yields the same result\n                    co[rev[v] >>> rvb] = sv;\n                }\n            }\n        }\n    }\n    else {\n        co = new u16(s);\n        for (i = 0; i < s; ++i) {\n            if (cd[i]) {\n                co[i] = rev[le[cd[i] - 1]++] >>> (15 - cd[i]);\n            }\n        }\n    }\n    return co;\n});\n// fixed length tree\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n    flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n    flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n    flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n    flt[i] = 8;\n// fixed distance tree\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n    fdt[i] = 5;\n// fixed length map\nvar flm = /*#__PURE__*/ hMap(flt, 9, 0), flrm = /*#__PURE__*/ hMap(flt, 9, 1);\n// fixed distance map\nvar fdm = /*#__PURE__*/ hMap(fdt, 5, 0), fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);\n// find max of array\nvar max = function (a) {\n    var m = a[0];\n    for (var i = 1; i < a.length; ++i) {\n        if (a[i] > m)\n            m = a[i];\n    }\n    return m;\n};\n// read d, starting at bit p and mask with m\nvar bits = function (d, p, m) {\n    var o = (p / 8) | 0;\n    return ((d[o] | (d[o + 1] << 8)) >> (p & 7)) & m;\n};\n// read d, starting at bit p continuing for at least 16 bits\nvar bits16 = function (d, p) {\n    var o = (p / 8) | 0;\n    return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >> (p & 7));\n};\n// get end of byte\nvar shft = function (p) { return ((p + 7) / 8) | 0; };\n// typed array slice - allows garbage collector to free original reference,\n// while being more compatible than .slice\nvar slc = function (v, s, e) {\n    if (s == null || s < 0)\n        s = 0;\n    if (e == null || e > v.length)\n        e = v.length;\n    // can't use .constructor in case user-supplied\n    var n = new (v.BYTES_PER_ELEMENT == 2 ? u16 : v.BYTES_PER_ELEMENT == 4 ? u32 : u8)(e - s);\n    n.set(v.subarray(s, e));\n    return n;\n};\n/**\n * Codes for errors generated within this library\n */\nexports.FlateErrorCode = {\n    UnexpectedEOF: 0,\n    InvalidBlockType: 1,\n    InvalidLengthLiteral: 2,\n    InvalidDistance: 3,\n    StreamFinished: 4,\n    NoStreamHandler: 5,\n    InvalidHeader: 6,\n    NoCallback: 7,\n    InvalidUTF8: 8,\n    ExtraFieldTooLong: 9,\n    InvalidDate: 10,\n    FilenameTooLong: 11,\n    StreamFinishing: 12,\n    InvalidZipData: 13,\n    UnknownCompressionMethod: 14\n};\n// error codes\nvar ec = [\n    'unexpected EOF',\n    'invalid block type',\n    'invalid length/literal',\n    'invalid distance',\n    'stream finished',\n    'no stream handler',\n    ,\n    'no callback',\n    'invalid UTF-8 data',\n    'extra field too long',\n    'date not in range 1980-2099',\n    'filename too long',\n    'stream finishing',\n    'invalid zip data'\n    // determined by unknown compression method\n];\n;\nvar err = function (ind, msg, nt) {\n    var e = new Error(msg || ec[ind]);\n    e.code = ind;\n    if (Error.captureStackTrace)\n        Error.captureStackTrace(e, err);\n    if (!nt)\n        throw e;\n    return e;\n};\n// expands raw DEFLATE data\nvar inflt = function (dat, buf, st) {\n    // source length\n    var sl = dat.length;\n    if (!sl || (st && st.f && !st.l))\n        return buf || new u8(0);\n    // have to estimate size\n    var noBuf = !buf || st;\n    // no state\n    var noSt = !st || st.i;\n    if (!st)\n        st = {};\n    // Assumes roughly 33% compression ratio average\n    if (!buf)\n        buf = new u8(sl * 3);\n    // ensure buffer can fit at least l elements\n    var cbuf = function (l) {\n        var bl = buf.length;\n        // need to increase size to fit\n        if (l > bl) {\n            // Double or set to necessary, whichever is greater\n            var nbuf = new u8(Math.max(bl * 2, l));\n            nbuf.set(buf);\n            buf = nbuf;\n        }\n    };\n    //  last chunk         bitpos           bytes\n    var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n    // total bits\n    var tbts = sl * 8;\n    do {\n        if (!lm) {\n            // BFINAL - this is only 1 when last chunk is next\n            final = bits(dat, pos, 1);\n            // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman\n            var type = bits(dat, pos + 1, 3);\n            pos += 3;\n            if (!type) {\n                // go to end of byte boundary\n                var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;\n                if (t > sl) {\n                    if (noSt)\n                        err(0);\n                    break;\n                }\n                // ensure size\n                if (noBuf)\n                    cbuf(bt + l);\n                // Copy over uncompressed data\n                buf.set(dat.subarray(s, t), bt);\n                // Get new bitpos, update byte count\n                st.b = bt += l, st.p = pos = t * 8, st.f = final;\n                continue;\n            }\n            else if (type == 1)\n                lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n            else if (type == 2) {\n                //  literal                            lengths\n                var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n                var tl = hLit + bits(dat, pos + 5, 31) + 1;\n                pos += 14;\n                // length+distance tree\n                var ldt = new u8(tl);\n                // code length tree\n                var clt = new u8(19);\n                for (var i = 0; i < hcLen; ++i) {\n                    // use index map to get real code\n                    clt[clim[i]] = bits(dat, pos + i * 3, 7);\n                }\n                pos += hcLen * 3;\n                // code lengths bits\n                var clb = max(clt), clbmsk = (1 << clb) - 1;\n                // code lengths map\n                var clm = hMap(clt, clb, 1);\n                for (var i = 0; i < tl;) {\n                    var r = clm[bits(dat, pos, clbmsk)];\n                    // bits read\n                    pos += r & 15;\n                    // symbol\n                    var s = r >>> 4;\n                    // code length to copy\n                    if (s < 16) {\n                        ldt[i++] = s;\n                    }\n                    else {\n                        //  copy   count\n                        var c = 0, n = 0;\n                        if (s == 16)\n                            n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n                        else if (s == 17)\n                            n = 3 + bits(dat, pos, 7), pos += 3;\n                        else if (s == 18)\n                            n = 11 + bits(dat, pos, 127), pos += 7;\n                        while (n--)\n                            ldt[i++] = c;\n                    }\n                }\n                //    length tree                 distance tree\n                var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n                // max length bits\n                lbt = max(lt);\n                // max dist bits\n                dbt = max(dt);\n                lm = hMap(lt, lbt, 1);\n                dm = hMap(dt, dbt, 1);\n            }\n            else\n                err(1);\n            if (pos > tbts) {\n                if (noSt)\n                    err(0);\n                break;\n            }\n        }\n        // Make sure the buffer can hold this + the largest possible addition\n        // Maximum chunk size (practically, theoretically infinite) is 2^17;\n        if (noBuf)\n            cbuf(bt + 131072);\n        var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n        var lpos = pos;\n        for (;; lpos = pos) {\n            // bits read, code\n            var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n            pos += c & 15;\n            if (pos > tbts) {\n                if (noSt)\n                    err(0);\n                break;\n            }\n            if (!c)\n                err(2);\n            if (sym < 256)\n                buf[bt++] = sym;\n            else if (sym == 256) {\n                lpos = pos, lm = null;\n                break;\n            }\n            else {\n                var add = sym - 254;\n                // no extra bits needed if less\n                if (sym > 264) {\n                    // index\n                    var i = sym - 257, b = fleb[i];\n                    add = bits(dat, pos, (1 << b) - 1) + fl[i];\n                    pos += b;\n                }\n                // dist\n                var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n                if (!d)\n                    err(3);\n                pos += d & 15;\n                var dt = fd[dsym];\n                if (dsym > 3) {\n                    var b = fdeb[dsym];\n                    dt += bits16(dat, pos) & ((1 << b) - 1), pos += b;\n                }\n                if (pos > tbts) {\n                    if (noSt)\n                        err(0);\n                    break;\n                }\n                if (noBuf)\n                    cbuf(bt + 131072);\n                var end = bt + add;\n                for (; bt < end; bt += 4) {\n                    buf[bt] = buf[bt - dt];\n                    buf[bt + 1] = buf[bt + 1 - dt];\n                    buf[bt + 2] = buf[bt + 2 - dt];\n                    buf[bt + 3] = buf[bt + 3 - dt];\n                }\n                bt = end;\n            }\n        }\n        st.l = lm, st.p = lpos, st.b = bt, st.f = final;\n        if (lm)\n            final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n    } while (!final);\n    return bt == buf.length ? buf : slc(buf, 0, bt);\n};\n// starting at p, write the minimum number of bits that can hold v to d\nvar wbits = function (d, p, v) {\n    v <<= p & 7;\n    var o = (p / 8) | 0;\n    d[o] |= v;\n    d[o + 1] |= v >>> 8;\n};\n// starting at p, write the minimum number of bits (>8) that can hold v to d\nvar wbits16 = function (d, p, v) {\n    v <<= p & 7;\n    var o = (p / 8) | 0;\n    d[o] |= v;\n    d[o + 1] |= v >>> 8;\n    d[o + 2] |= v >>> 16;\n};\n// creates code lengths from a frequency table\nvar hTree = function (d, mb) {\n    // Need extra info to make a tree\n    var t = [];\n    for (var i = 0; i < d.length; ++i) {\n        if (d[i])\n            t.push({ s: i, f: d[i] });\n    }\n    var s = t.length;\n    var t2 = t.slice();\n    if (!s)\n        return [et, 0];\n    if (s == 1) {\n        var v = new u8(t[0].s + 1);\n        v[t[0].s] = 1;\n        return [v, 1];\n    }\n    t.sort(function (a, b) { return a.f - b.f; });\n    // after i2 reaches last ind, will be stopped\n    // freq must be greater than largest possible number of symbols\n    t.push({ s: -1, f: 25001 });\n    var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n    t[0] = { s: -1, f: l.f + r.f, l: l, r: r };\n    // efficient algorithm from UZIP.js\n    // i0 is lookbehind, i2 is lookahead - after processing two low-freq\n    // symbols that combined have high freq, will start processing i2 (high-freq,\n    // non-composite) symbols instead\n    // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/\n    while (i1 != s - 1) {\n        l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n        r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n        t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };\n    }\n    var maxSym = t2[0].s;\n    for (var i = 1; i < s; ++i) {\n        if (t2[i].s > maxSym)\n            maxSym = t2[i].s;\n    }\n    // code lengths\n    var tr = new u16(maxSym + 1);\n    // max bits in tree\n    var mbt = ln(t[i1 - 1], tr, 0);\n    if (mbt > mb) {\n        // more algorithms from UZIP.js\n        // TODO: find out how this code works (debt)\n        //  ind    debt\n        var i = 0, dt = 0;\n        //    left            cost\n        var lft = mbt - mb, cst = 1 << lft;\n        t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });\n        for (; i < s; ++i) {\n            var i2_1 = t2[i].s;\n            if (tr[i2_1] > mb) {\n                dt += cst - (1 << (mbt - tr[i2_1]));\n                tr[i2_1] = mb;\n            }\n            else\n                break;\n        }\n        dt >>>= lft;\n        while (dt > 0) {\n            var i2_2 = t2[i].s;\n            if (tr[i2_2] < mb)\n                dt -= 1 << (mb - tr[i2_2]++ - 1);\n            else\n                ++i;\n        }\n        for (; i >= 0 && dt; --i) {\n            var i2_3 = t2[i].s;\n            if (tr[i2_3] == mb) {\n                --tr[i2_3];\n                ++dt;\n            }\n        }\n        mbt = mb;\n    }\n    return [new u8(tr), mbt];\n};\n// get the max length and assign length codes\nvar ln = function (n, l, d) {\n    return n.s == -1\n        ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))\n        : (l[n.s] = d);\n};\n// length codes generation\nvar lc = function (c) {\n    var s = c.length;\n    // Note that the semicolon was intentional\n    while (s && !c[--s])\n        ;\n    var cl = new u16(++s);\n    //  ind      num         streak\n    var cli = 0, cln = c[0], cls = 1;\n    var w = function (v) { cl[cli++] = v; };\n    for (var i = 1; i <= s; ++i) {\n        if (c[i] == cln && i != s)\n            ++cls;\n        else {\n            if (!cln && cls > 2) {\n                for (; cls > 138; cls -= 138)\n                    w(32754);\n                if (cls > 2) {\n                    w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);\n                    cls = 0;\n                }\n            }\n            else if (cls > 3) {\n                w(cln), --cls;\n                for (; cls > 6; cls -= 6)\n                    w(8304);\n                if (cls > 2)\n                    w(((cls - 3) << 5) | 8208), cls = 0;\n            }\n            while (cls--)\n                w(cln);\n            cls = 1;\n            cln = c[i];\n        }\n    }\n    return [cl.subarray(0, cli), s];\n};\n// calculate the length of output from tree, code lengths\nvar clen = function (cf, cl) {\n    var l = 0;\n    for (var i = 0; i < cl.length; ++i)\n        l += cf[i] * cl[i];\n    return l;\n};\n// writes a fixed block\n// returns the new bit pos\nvar wfblk = function (out, pos, dat) {\n    // no need to write 00 as type: TypedArray defaults to 0\n    var s = dat.length;\n    var o = shft(pos + 2);\n    out[o] = s & 255;\n    out[o + 1] = s >>> 8;\n    out[o + 2] = out[o] ^ 255;\n    out[o + 3] = out[o + 1] ^ 255;\n    for (var i = 0; i < s; ++i)\n        out[o + i + 4] = dat[i];\n    return (o + 4 + s) * 8;\n};\n// writes a block\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n    wbits(out, p++, final);\n    ++lf[256];\n    var _a = hTree(lf, 15), dlt = _a[0], mlb = _a[1];\n    var _b = hTree(df, 15), ddt = _b[0], mdb = _b[1];\n    var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n    var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n    var lcfreq = new u16(19);\n    for (var i = 0; i < lclt.length; ++i)\n        lcfreq[lclt[i] & 31]++;\n    for (var i = 0; i < lcdt.length; ++i)\n        lcfreq[lcdt[i] & 31]++;\n    var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n    var nlcc = 19;\n    for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n        ;\n    var flen = (bl + 5) << 3;\n    var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n    var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n    if (flen <= ftlen && flen <= dtlen)\n        return wfblk(out, p, dat.subarray(bs, bs + bl));\n    var lm, ll, dm, dl;\n    wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n    if (dtlen < ftlen) {\n        lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n        var llm = hMap(lct, mlcb, 0);\n        wbits(out, p, nlc - 257);\n        wbits(out, p + 5, ndc - 1);\n        wbits(out, p + 10, nlcc - 4);\n        p += 14;\n        for (var i = 0; i < nlcc; ++i)\n            wbits(out, p + 3 * i, lct[clim[i]]);\n        p += 3 * nlcc;\n        var lcts = [lclt, lcdt];\n        for (var it = 0; it < 2; ++it) {\n            var clct = lcts[it];\n            for (var i = 0; i < clct.length; ++i) {\n                var len = clct[i] & 31;\n                wbits(out, p, llm[len]), p += lct[len];\n                if (len > 15)\n                    wbits(out, p, (clct[i] >>> 5) & 127), p += clct[i] >>> 12;\n            }\n        }\n    }\n    else {\n        lm = flm, ll = flt, dm = fdm, dl = fdt;\n    }\n    for (var i = 0; i < li; ++i) {\n        if (syms[i] > 255) {\n            var len = (syms[i] >>> 18) & 31;\n            wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n            if (len > 7)\n                wbits(out, p, (syms[i] >>> 23) & 31), p += fleb[len];\n            var dst = syms[i] & 31;\n            wbits16(out, p, dm[dst]), p += dl[dst];\n            if (dst > 3)\n                wbits16(out, p, (syms[i] >>> 5) & 8191), p += fdeb[dst];\n        }\n        else {\n            wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n        }\n    }\n    wbits16(out, p, lm[256]);\n    return p + ll[256];\n};\n// deflate options (nice << 13) | chain\nvar deo = /*#__PURE__*/ new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\n// empty\nvar et = /*#__PURE__*/ new u8(0);\n// compresses data into a raw DEFLATE buffer\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n    var s = dat.length;\n    var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7000)) + post);\n    // writing to this writes to the output buffer\n    var w = o.subarray(pre, o.length - post);\n    var pos = 0;\n    if (!lvl || s < 8) {\n        for (var i = 0; i <= s; i += 65535) {\n            // end\n            var e = i + 65535;\n            if (e >= s) {\n                // write final block\n                w[pos >> 3] = lst;\n            }\n            pos = wfblk(w, pos + 1, dat.subarray(i, e));\n        }\n    }\n    else {\n        var opt = deo[lvl - 1];\n        var n = opt >>> 13, c = opt & 8191;\n        var msk_1 = (1 << plvl) - 1;\n        //    prev 2-byte val map    curr 2-byte val map\n        var prev = new u16(32768), head = new u16(msk_1 + 1);\n        var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n        var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };\n        // 24576 is an arbitrary number of maximum symbols per block\n        // 424 buffer for last block\n        var syms = new u32(25000);\n        // length/literal freq   distance freq\n        var lf = new u16(288), df = new u16(32);\n        //  l/lcnt  exbits  index  l/lind  waitdx  bitpos\n        var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n        for (; i < s; ++i) {\n            // hash value\n            // deopt when i > s - 3 - at end, deopt acceptable\n            var hv = hsh(i);\n            // index mod 32768    previous index mod\n            var imod = i & 32767, pimod = head[hv];\n            prev[imod] = pimod;\n            head[hv] = imod;\n            // We always should modify head and prev, but only add symbols if\n            // this data is not yet processed (\"wait\" for wait index)\n            if (wi <= i) {\n                // bytes remaining\n                var rem = s - i;\n                if ((lc_1 > 7000 || li > 24576) && rem > 423) {\n                    pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n                    li = lc_1 = eb = 0, bs = i;\n                    for (var j = 0; j < 286; ++j)\n                        lf[j] = 0;\n                    for (var j = 0; j < 30; ++j)\n                        df[j] = 0;\n                }\n                //  len    dist   chain\n                var l = 2, d = 0, ch_1 = c, dif = (imod - pimod) & 32767;\n                if (rem > 2 && hv == hsh(i - dif)) {\n                    var maxn = Math.min(n, rem) - 1;\n                    var maxd = Math.min(32767, i);\n                    // max possible length\n                    // not capped at dif because decompressors implement \"rolling\" index population\n                    var ml = Math.min(258, rem);\n                    while (dif <= maxd && --ch_1 && imod != pimod) {\n                        if (dat[i + l] == dat[i + l - dif]) {\n                            var nl = 0;\n                            for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n                                ;\n                            if (nl > l) {\n                                l = nl, d = dif;\n                                // break out early when we reach \"nice\" (we are satisfied enough)\n                                if (nl > maxn)\n                                    break;\n                                // now, find the rarest 2-byte sequence within this\n                                // length of literals and search for that instead.\n                                // Much faster than just using the start\n                                var mmd = Math.min(dif, nl - 2);\n                                var md = 0;\n                                for (var j = 0; j < mmd; ++j) {\n                                    var ti = (i - dif + j + 32768) & 32767;\n                                    var pti = prev[ti];\n                                    var cd = (ti - pti + 32768) & 32767;\n                                    if (cd > md)\n                                        md = cd, pimod = ti;\n                                }\n                            }\n                        }\n                        // check the previous match\n                        imod = pimod, pimod = prev[imod];\n                        dif += (imod - pimod + 32768) & 32767;\n                    }\n                }\n                // d will be nonzero only when a match was found\n                if (d) {\n                    // store both dist and len data in one Uint32\n                    // Make sure this is recognized as a len/dist with 28th bit (2^28)\n                    syms[li++] = 268435456 | (revfl[l] << 18) | revfd[d];\n                    var lin = revfl[l] & 31, din = revfd[d] & 31;\n                    eb += fleb[lin] + fdeb[din];\n                    ++lf[257 + lin];\n                    ++df[din];\n                    wi = i + l;\n                    ++lc_1;\n                }\n                else {\n                    syms[li++] = dat[i];\n                    ++lf[dat[i]];\n                }\n            }\n        }\n        pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n        // this is the easiest way to avoid needing to maintain state\n        if (!lst && pos & 7)\n            pos = wfblk(w, pos + 1, et);\n    }\n    return slc(o, 0, pre + shft(pos) + post);\n};\n// CRC32 table\nvar crct = /*#__PURE__*/ (function () {\n    var t = new Int32Array(256);\n    for (var i = 0; i < 256; ++i) {\n        var c = i, k = 9;\n        while (--k)\n            c = ((c & 1) && -306674912) ^ (c >>> 1);\n        t[i] = c;\n    }\n    return t;\n})();\n// CRC32\nvar crc = function () {\n    var c = -1;\n    return {\n        p: function (d) {\n            // closures have awful performance\n            var cr = c;\n            for (var i = 0; i < d.length; ++i)\n                cr = crct[(cr & 255) ^ d[i]] ^ (cr >>> 8);\n            c = cr;\n        },\n        d: function () { return ~c; }\n    };\n};\n// Alder32\nvar adler = function () {\n    var a = 1, b = 0;\n    return {\n        p: function (d) {\n            // closures have awful performance\n            var n = a, m = b;\n            var l = d.length | 0;\n            for (var i = 0; i != l;) {\n                var e = Math.min(i + 2655, l);\n                for (; i < e; ++i)\n                    m += n += d[i];\n                n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n            }\n            a = n, b = m;\n        },\n        d: function () {\n            a %= 65521, b %= 65521;\n            return (a & 255) << 24 | (a >>> 8) << 16 | (b & 255) << 8 | (b >>> 8);\n        }\n    };\n};\n;\n// deflate with opts\nvar dopt = function (dat, opt, pre, post, st) {\n    return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : (12 + opt.mem), pre, post, !st);\n};\n// Walmart object spread\nvar mrg = function (a, b) {\n    var o = {};\n    for (var k in a)\n        o[k] = a[k];\n    for (var k in b)\n        o[k] = b[k];\n    return o;\n};\n// worker clone\n// This is possibly the craziest part of the entire codebase, despite how simple it may seem.\n// The only parameter to this function is a closure that returns an array of variables outside of the function scope.\n// We're going to try to figure out the variable names used in the closure as strings because that is crucial for workerization.\n// We will return an object mapping of true variable name to value (basically, the current scope as a JS object).\n// The reason we can't just use the original variable names is minifiers mangling the toplevel scope.\n// This took me three weeks to figure out how to do.\nvar wcln = function (fn, fnStr, td) {\n    var dt = fn();\n    var st = fn.toString();\n    var ks = st.slice(st.indexOf('[') + 1, st.lastIndexOf(']')).replace(/\\s+/g, '').split(',');\n    for (var i = 0; i < dt.length; ++i) {\n        var v = dt[i], k = ks[i];\n        if (typeof v == 'function') {\n            fnStr += ';' + k + '=';\n            var st_1 = v.toString();\n            if (v.prototype) {\n                // for global objects\n                if (st_1.indexOf('[native code]') != -1) {\n                    var spInd = st_1.indexOf(' ', 8) + 1;\n                    fnStr += st_1.slice(spInd, st_1.indexOf('(', spInd));\n                }\n                else {\n                    fnStr += st_1;\n                    for (var t in v.prototype)\n                        fnStr += ';' + k + '.prototype.' + t + '=' + v.prototype[t].toString();\n                }\n            }\n            else\n                fnStr += st_1;\n        }\n        else\n            td[k] = v;\n    }\n    return [fnStr, td];\n};\nvar ch = [];\n// clone bufs\nvar cbfs = function (v) {\n    var tl = [];\n    for (var k in v) {\n        if (v[k].buffer) {\n            tl.push((v[k] = new v[k].constructor(v[k])).buffer);\n        }\n    }\n    return tl;\n};\n// use a worker to execute code\nvar wrkr = function (fns, init, id, cb) {\n    var _a;\n    if (!ch[id]) {\n        var fnStr = '', td_1 = {}, m = fns.length - 1;\n        for (var i = 0; i < m; ++i)\n            _a = wcln(fns[i], fnStr, td_1), fnStr = _a[0], td_1 = _a[1];\n        ch[id] = wcln(fns[m], fnStr, td_1);\n    }\n    var td = mrg({}, ch[id][1]);\n    return node_worker_1[\"default\"](ch[id][0] + ';onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=' + init.toString() + '}', id, td, cbfs(td), cb);\n};\n// base async inflate fn\nvar bInflt = function () { return [u8, u16, u32, fleb, fdeb, clim, fl, fd, flrm, fdrm, rev, ec, hMap, max, bits, bits16, shft, slc, err, inflt, inflateSync, pbf, gu8]; };\nvar bDflt = function () { return [u8, u16, u32, fleb, fdeb, clim, revfl, revfd, flm, flt, fdm, fdt, rev, deo, et, hMap, wbits, wbits16, hTree, ln, lc, clen, wfblk, wblk, shft, slc, dflt, dopt, deflateSync, pbf]; };\n// gzip extra\nvar gze = function () { return [gzh, gzhl, wbytes, crc, crct]; };\n// gunzip extra\nvar guze = function () { return [gzs, gzl]; };\n// zlib extra\nvar zle = function () { return [zlh, wbytes, adler]; };\n// unzlib extra\nvar zule = function () { return [zlv]; };\n// post buf\nvar pbf = function (msg) { return postMessage(msg, [msg.buffer]); };\n// get u8\nvar gu8 = function (o) { return o && o.size && new u8(o.size); };\n// async helper\nvar cbify = function (dat, opts, fns, init, id, cb) {\n    var w = wrkr(fns, init, id, function (err, dat) {\n        w.terminate();\n        cb(err, dat);\n    });\n    w.postMessage([dat, opts], opts.consume ? [dat.buffer] : []);\n    return function () { w.terminate(); };\n};\n// auto stream\nvar astrm = function (strm) {\n    strm.ondata = function (dat, final) { return postMessage([dat, final], [dat.buffer]); };\n    return function (ev) { return strm.push(ev.data[0], ev.data[1]); };\n};\n// async stream attach\nvar astrmify = function (fns, strm, opts, init, id) {\n    var t;\n    var w = wrkr(fns, init, id, function (err, dat) {\n        if (err)\n            w.terminate(), strm.ondata.call(strm, err);\n        else {\n            if (dat[1])\n                w.terminate();\n            strm.ondata.call(strm, err, dat[0], dat[1]);\n        }\n    });\n    w.postMessage(opts);\n    strm.push = function (d, f) {\n        if (!strm.ondata)\n            err(5);\n        if (t)\n            strm.ondata(err(4, 0, 1), null, !!f);\n        w.postMessage([d, t = f], [d.buffer]);\n    };\n    strm.terminate = function () { w.terminate(); };\n};\n// read 2 bytes\nvar b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };\n// read 4 bytes\nvar b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };\nvar b8 = function (d, b) { return b4(d, b) + (b4(d, b + 4) * 4294967296); };\n// write bytes\nvar wbytes = function (d, b, v) {\n    for (; v; ++b)\n        d[b] = v, v >>>= 8;\n};\n// gzip header\nvar gzh = function (c, o) {\n    var fn = o.filename;\n    c[0] = 31, c[1] = 139, c[2] = 8, c[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c[9] = 3; // assume Unix\n    if (o.mtime != 0)\n        wbytes(c, 4, Math.floor(new Date(o.mtime || Date.now()) / 1000));\n    if (fn) {\n        c[3] = 8;\n        for (var i = 0; i <= fn.length; ++i)\n            c[i + 10] = fn.charCodeAt(i);\n    }\n};\n// gzip footer: -8 to -4 = CRC, -4 to -0 is length\n// gzip start\nvar gzs = function (d) {\n    if (d[0] != 31 || d[1] != 139 || d[2] != 8)\n        err(6, 'invalid gzip data');\n    var flg = d[3];\n    var st = 10;\n    if (flg & 4)\n        st += d[10] | (d[11] << 8) + 2;\n    for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])\n        ;\n    return st + (flg & 2);\n};\n// gzip length\nvar gzl = function (d) {\n    var l = d.length;\n    return ((d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16) | (d[l - 1] << 24)) >>> 0;\n};\n// gzip header length\nvar gzhl = function (o) { return 10 + ((o.filename && (o.filename.length + 1)) || 0); };\n// zlib header\nvar zlh = function (c, o) {\n    var lv = o.level, fl = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;\n    c[0] = 120, c[1] = (fl << 6) | (fl ? (32 - 2 * fl) : 1);\n};\n// zlib valid\nvar zlv = function (d) {\n    if ((d[0] & 15) != 8 || (d[0] >>> 4) > 7 || ((d[0] << 8 | d[1]) % 31))\n        err(6, 'invalid zlib data');\n    if (d[1] & 32)\n        err(6, 'invalid zlib data: preset dictionaries not supported');\n};\nfunction AsyncCmpStrm(opts, cb) {\n    if (!cb && typeof opts == 'function')\n        cb = opts, opts = {};\n    this.ondata = cb;\n    return opts;\n}\n// zlib footer: -4 to -0 is Adler32\n/**\n * Streaming DEFLATE compression\n */\nvar Deflate = /*#__PURE__*/ (function () {\n    function Deflate(opts, cb) {\n        if (!cb && typeof opts == 'function')\n            cb = opts, opts = {};\n        this.ondata = cb;\n        this.o = opts || {};\n    }\n    Deflate.prototype.p = function (c, f) {\n        this.ondata(dopt(c, this.o, 0, 0, !f), f);\n    };\n    /**\n     * Pushes a chunk to be deflated\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Deflate.prototype.push = function (chunk, final) {\n        if (!this.ondata)\n            err(5);\n        if (this.d)\n            err(4);\n        this.d = final;\n        this.p(chunk, final || false);\n    };\n    return Deflate;\n}());\nexports.Deflate = Deflate;\n/**\n * Asynchronous streaming DEFLATE compression\n */\nvar AsyncDeflate = /*#__PURE__*/ (function () {\n    function AsyncDeflate(opts, cb) {\n        astrmify([\n            bDflt,\n            function () { return [astrm, Deflate]; }\n        ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {\n            var strm = new Deflate(ev.data);\n            onmessage = astrm(strm);\n        }, 6);\n    }\n    return AsyncDeflate;\n}());\nexports.AsyncDeflate = AsyncDeflate;\nfunction deflate(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    return cbify(data, opts, [\n        bDflt,\n    ], function (ev) { return pbf(deflateSync(ev.data[0], ev.data[1])); }, 0, cb);\n}\nexports.deflate = deflate;\n/**\n * Compresses data with DEFLATE without any wrapper\n * @param data The data to compress\n * @param opts The compression options\n * @returns The deflated version of the data\n */\nfunction deflateSync(data, opts) {\n    return dopt(data, opts || {}, 0, 0);\n}\nexports.deflateSync = deflateSync;\n/**\n * Streaming DEFLATE decompression\n */\nvar Inflate = /*#__PURE__*/ (function () {\n    /**\n     * Creates an inflation stream\n     * @param cb The callback to call whenever data is inflated\n     */\n    function Inflate(cb) {\n        this.s = {};\n        this.p = new u8(0);\n        this.ondata = cb;\n    }\n    Inflate.prototype.e = function (c) {\n        if (!this.ondata)\n            err(5);\n        if (this.d)\n            err(4);\n        var l = this.p.length;\n        var n = new u8(l + c.length);\n        n.set(this.p), n.set(c, l), this.p = n;\n    };\n    Inflate.prototype.c = function (final) {\n        this.d = this.s.i = final || false;\n        var bts = this.s.b;\n        var dt = inflt(this.p, this.o, this.s);\n        this.ondata(slc(dt, bts, this.s.b), this.d);\n        this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length;\n        this.p = slc(this.p, (this.s.p / 8) | 0), this.s.p &= 7;\n    };\n    /**\n     * Pushes a chunk to be inflated\n     * @param chunk The chunk to push\n     * @param final Whether this is the final chunk\n     */\n    Inflate.prototype.push = function (chunk, final) {\n        this.e(chunk), this.c(final);\n    };\n    return Inflate;\n}());\nexports.Inflate = Inflate;\n/**\n * Asynchronous streaming DEFLATE decompression\n */\nvar AsyncInflate = /*#__PURE__*/ (function () {\n    /**\n     * Creates an asynchronous inflation stream\n     * @param cb The callback to call whenever data is deflated\n     */\n    function AsyncInflate(cb) {\n        this.ondata = cb;\n        astrmify([\n            bInflt,\n            function () { return [astrm, Inflate]; }\n        ], this, 0, function () {\n            var strm = new Inflate();\n            onmessage = astrm(strm);\n        }, 7);\n    }\n    return AsyncInflate;\n}());\nexports.AsyncInflate = AsyncInflate;\nfunction inflate(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    return cbify(data, opts, [\n        bInflt\n    ], function (ev) { return pbf(inflateSync(ev.data[0], gu8(ev.data[1]))); }, 1, cb);\n}\nexports.inflate = inflate;\n/**\n * Expands DEFLATE data with no wrapper\n * @param data The data to decompress\n * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.\n * @returns The decompressed version of the data\n */\nfunction inflateSync(data, out) {\n    return inflt(data, out);\n}\nexports.inflateSync = inflateSync;\n// before you yell at me for not just using extends, my reason is that TS inheritance is hard to workerize.\n/**\n * Streaming GZIP compression\n */\nvar Gzip = /*#__PURE__*/ (function () {\n    function Gzip(opts, cb) {\n        this.c = crc();\n        this.l = 0;\n        this.v = 1;\n        Deflate.call(this, opts, cb);\n    }\n    /**\n     * Pushes a chunk to be GZIPped\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Gzip.prototype.push = function (chunk, final) {\n        Deflate.prototype.push.call(this, chunk, final);\n    };\n    Gzip.prototype.p = function (c, f) {\n        this.c.p(c);\n        this.l += c.length;\n        var raw = dopt(c, this.o, this.v && gzhl(this.o), f && 8, !f);\n        if (this.v)\n            gzh(raw, this.o), this.v = 0;\n        if (f)\n            wbytes(raw, raw.length - 8, this.c.d()), wbytes(raw, raw.length - 4, this.l);\n        this.ondata(raw, f);\n    };\n    return Gzip;\n}());\nexports.Gzip = Gzip;\nexports.Compress = Gzip;\n/**\n * Asynchronous streaming GZIP compression\n */\nvar AsyncGzip = /*#__PURE__*/ (function () {\n    function AsyncGzip(opts, cb) {\n        astrmify([\n            bDflt,\n            gze,\n            function () { return [astrm, Deflate, Gzip]; }\n        ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {\n            var strm = new Gzip(ev.data);\n            onmessage = astrm(strm);\n        }, 8);\n    }\n    return AsyncGzip;\n}());\nexports.AsyncGzip = AsyncGzip;\nexports.AsyncCompress = AsyncGzip;\nfunction gzip(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    return cbify(data, opts, [\n        bDflt,\n        gze,\n        function () { return [gzipSync]; }\n    ], function (ev) { return pbf(gzipSync(ev.data[0], ev.data[1])); }, 2, cb);\n}\nexports.gzip = gzip;\nexports.compress = gzip;\n/**\n * Compresses data with GZIP\n * @param data The data to compress\n * @param opts The compression options\n * @returns The gzipped version of the data\n */\nfunction gzipSync(data, opts) {\n    if (!opts)\n        opts = {};\n    var c = crc(), l = data.length;\n    c.p(data);\n    var d = dopt(data, opts, gzhl(opts), 8), s = d.length;\n    return gzh(d, opts), wbytes(d, s - 8, c.d()), wbytes(d, s - 4, l), d;\n}\nexports.gzipSync = gzipSync;\nexports.compressSync = gzipSync;\n/**\n * Streaming GZIP decompression\n */\nvar Gunzip = /*#__PURE__*/ (function () {\n    /**\n     * Creates a GUNZIP stream\n     * @param cb The callback to call whenever data is inflated\n     */\n    function Gunzip(cb) {\n        this.v = 1;\n        Inflate.call(this, cb);\n    }\n    /**\n     * Pushes a chunk to be GUNZIPped\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Gunzip.prototype.push = function (chunk, final) {\n        Inflate.prototype.e.call(this, chunk);\n        if (this.v) {\n            var s = this.p.length > 3 ? gzs(this.p) : 4;\n            if (s >= this.p.length && !final)\n                return;\n            this.p = this.p.subarray(s), this.v = 0;\n        }\n        if (final) {\n            if (this.p.length < 8)\n                err(6, 'invalid gzip data');\n            this.p = this.p.subarray(0, -8);\n        }\n        // necessary to prevent TS from using the closure value\n        // This allows for workerization to function correctly\n        Inflate.prototype.c.call(this, final);\n    };\n    return Gunzip;\n}());\nexports.Gunzip = Gunzip;\n/**\n * Asynchronous streaming GZIP decompression\n */\nvar AsyncGunzip = /*#__PURE__*/ (function () {\n    /**\n     * Creates an asynchronous GUNZIP stream\n     * @param cb The callback to call whenever data is deflated\n     */\n    function AsyncGunzip(cb) {\n        this.ondata = cb;\n        astrmify([\n            bInflt,\n            guze,\n            function () { return [astrm, Inflate, Gunzip]; }\n        ], this, 0, function () {\n            var strm = new Gunzip();\n            onmessage = astrm(strm);\n        }, 9);\n    }\n    return AsyncGunzip;\n}());\nexports.AsyncGunzip = AsyncGunzip;\nfunction gunzip(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    return cbify(data, opts, [\n        bInflt,\n        guze,\n        function () { return [gunzipSync]; }\n    ], function (ev) { return pbf(gunzipSync(ev.data[0])); }, 3, cb);\n}\nexports.gunzip = gunzip;\n/**\n * Expands GZIP data\n * @param data The data to decompress\n * @param out Where to write the data. GZIP already encodes the output size, so providing this doesn't save memory.\n * @returns The decompressed version of the data\n */\nfunction gunzipSync(data, out) {\n    return inflt(data.subarray(gzs(data), -8), out || new u8(gzl(data)));\n}\nexports.gunzipSync = gunzipSync;\n/**\n * Streaming Zlib compression\n */\nvar Zlib = /*#__PURE__*/ (function () {\n    function Zlib(opts, cb) {\n        this.c = adler();\n        this.v = 1;\n        Deflate.call(this, opts, cb);\n    }\n    /**\n     * Pushes a chunk to be zlibbed\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Zlib.prototype.push = function (chunk, final) {\n        Deflate.prototype.push.call(this, chunk, final);\n    };\n    Zlib.prototype.p = function (c, f) {\n        this.c.p(c);\n        var raw = dopt(c, this.o, this.v && 2, f && 4, !f);\n        if (this.v)\n            zlh(raw, this.o), this.v = 0;\n        if (f)\n            wbytes(raw, raw.length - 4, this.c.d());\n        this.ondata(raw, f);\n    };\n    return Zlib;\n}());\nexports.Zlib = Zlib;\n/**\n * Asynchronous streaming Zlib compression\n */\nvar AsyncZlib = /*#__PURE__*/ (function () {\n    function AsyncZlib(opts, cb) {\n        astrmify([\n            bDflt,\n            zle,\n            function () { return [astrm, Deflate, Zlib]; }\n        ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {\n            var strm = new Zlib(ev.data);\n            onmessage = astrm(strm);\n        }, 10);\n    }\n    return AsyncZlib;\n}());\nexports.AsyncZlib = AsyncZlib;\nfunction zlib(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    return cbify(data, opts, [\n        bDflt,\n        zle,\n        function () { return [zlibSync]; }\n    ], function (ev) { return pbf(zlibSync(ev.data[0], ev.data[1])); }, 4, cb);\n}\nexports.zlib = zlib;\n/**\n * Compress data with Zlib\n * @param data The data to compress\n * @param opts The compression options\n * @returns The zlib-compressed version of the data\n */\nfunction zlibSync(data, opts) {\n    if (!opts)\n        opts = {};\n    var a = adler();\n    a.p(data);\n    var d = dopt(data, opts, 2, 4);\n    return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nexports.zlibSync = zlibSync;\n/**\n * Streaming Zlib decompression\n */\nvar Unzlib = /*#__PURE__*/ (function () {\n    /**\n     * Creates a Zlib decompression stream\n     * @param cb The callback to call whenever data is inflated\n     */\n    function Unzlib(cb) {\n        this.v = 1;\n        Inflate.call(this, cb);\n    }\n    /**\n     * Pushes a chunk to be unzlibbed\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Unzlib.prototype.push = function (chunk, final) {\n        Inflate.prototype.e.call(this, chunk);\n        if (this.v) {\n            if (this.p.length < 2 && !final)\n                return;\n            this.p = this.p.subarray(2), this.v = 0;\n        }\n        if (final) {\n            if (this.p.length < 4)\n                err(6, 'invalid zlib data');\n            this.p = this.p.subarray(0, -4);\n        }\n        // necessary to prevent TS from using the closure value\n        // This allows for workerization to function correctly\n        Inflate.prototype.c.call(this, final);\n    };\n    return Unzlib;\n}());\nexports.Unzlib = Unzlib;\n/**\n * Asynchronous streaming Zlib decompression\n */\nvar AsyncUnzlib = /*#__PURE__*/ (function () {\n    /**\n     * Creates an asynchronous Zlib decompression stream\n     * @param cb The callback to call whenever data is deflated\n     */\n    function AsyncUnzlib(cb) {\n        this.ondata = cb;\n        astrmify([\n            bInflt,\n            zule,\n            function () { return [astrm, Inflate, Unzlib]; }\n        ], this, 0, function () {\n            var strm = new Unzlib();\n            onmessage = astrm(strm);\n        }, 11);\n    }\n    return AsyncUnzlib;\n}());\nexports.AsyncUnzlib = AsyncUnzlib;\nfunction unzlib(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    return cbify(data, opts, [\n        bInflt,\n        zule,\n        function () { return [unzlibSync]; }\n    ], function (ev) { return pbf(unzlibSync(ev.data[0], gu8(ev.data[1]))); }, 5, cb);\n}\nexports.unzlib = unzlib;\n/**\n * Expands Zlib data\n * @param data The data to decompress\n * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.\n * @returns The decompressed version of the data\n */\nfunction unzlibSync(data, out) {\n    return inflt((zlv(data), data.subarray(2, -4)), out);\n}\nexports.unzlibSync = unzlibSync;\n/**\n * Streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar Decompress = /*#__PURE__*/ (function () {\n    /**\n     * Creates a decompression stream\n     * @param cb The callback to call whenever data is decompressed\n     */\n    function Decompress(cb) {\n        this.G = Gunzip;\n        this.I = Inflate;\n        this.Z = Unzlib;\n        this.ondata = cb;\n    }\n    /**\n     * Pushes a chunk to be decompressed\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Decompress.prototype.push = function (chunk, final) {\n        if (!this.ondata)\n            err(5);\n        if (!this.s) {\n            if (this.p && this.p.length) {\n                var n = new u8(this.p.length + chunk.length);\n                n.set(this.p), n.set(chunk, this.p.length);\n            }\n            else\n                this.p = chunk;\n            if (this.p.length > 2) {\n                var _this_1 = this;\n                var cb = function () { _this_1.ondata.apply(_this_1, arguments); };\n                this.s = (this.p[0] == 31 && this.p[1] == 139 && this.p[2] == 8)\n                    ? new this.G(cb)\n                    : ((this.p[0] & 15) != 8 || (this.p[0] >> 4) > 7 || ((this.p[0] << 8 | this.p[1]) % 31))\n                        ? new this.I(cb)\n                        : new this.Z(cb);\n                this.s.push(this.p, final);\n                this.p = null;\n            }\n        }\n        else\n            this.s.push(chunk, final);\n    };\n    return Decompress;\n}());\nexports.Decompress = Decompress;\n/**\n * Asynchronous streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar AsyncDecompress = /*#__PURE__*/ (function () {\n    /**\n   * Creates an asynchronous decompression stream\n   * @param cb The callback to call whenever data is decompressed\n   */\n    function AsyncDecompress(cb) {\n        this.G = AsyncGunzip;\n        this.I = AsyncInflate;\n        this.Z = AsyncUnzlib;\n        this.ondata = cb;\n    }\n    /**\n     * Pushes a chunk to be decompressed\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    AsyncDecompress.prototype.push = function (chunk, final) {\n        Decompress.prototype.push.call(this, chunk, final);\n    };\n    return AsyncDecompress;\n}());\nexports.AsyncDecompress = AsyncDecompress;\nfunction decompress(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n        ? gunzip(data, opts, cb)\n        : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n            ? inflate(data, opts, cb)\n            : unzlib(data, opts, cb);\n}\nexports.decompress = decompress;\n/**\n * Expands compressed GZIP, Zlib, or raw DEFLATE data, automatically detecting the format\n * @param data The data to decompress\n * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.\n * @returns The decompressed version of the data\n */\nfunction decompressSync(data, out) {\n    return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n        ? gunzipSync(data, out)\n        : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n            ? inflateSync(data, out)\n            : unzlibSync(data, out);\n}\nexports.decompressSync = decompressSync;\n// flatten a directory structure\nvar fltn = function (d, p, t, o) {\n    for (var k in d) {\n        var val = d[k], n = p + k, op = o;\n        if (Array.isArray(val))\n            op = mrg(o, val[1]), val = val[0];\n        if (val instanceof u8)\n            t[n] = [val, op];\n        else {\n            t[n += '/'] = [new u8(0), op];\n            fltn(val, n, t, o);\n        }\n    }\n};\n// text encoder\nvar te = typeof TextEncoder != 'undefined' && /*#__PURE__*/ new TextEncoder();\n// text decoder\nvar td = typeof TextDecoder != 'undefined' && /*#__PURE__*/ new TextDecoder();\n// text decoder stream\nvar tds = 0;\ntry {\n    td.decode(et, { stream: true });\n    tds = 1;\n}\ncatch (e) { }\n// decode UTF8\nvar dutf8 = function (d) {\n    for (var r = '', i = 0;;) {\n        var c = d[i++];\n        var eb = (c > 127) + (c > 223) + (c > 239);\n        if (i + eb > d.length)\n            return [r, slc(d, i - 1)];\n        if (!eb)\n            r += String.fromCharCode(c);\n        else if (eb == 3) {\n            c = ((c & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63)) - 65536,\n                r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));\n        }\n        else if (eb & 1)\n            r += String.fromCharCode((c & 31) << 6 | (d[i++] & 63));\n        else\n            r += String.fromCharCode((c & 15) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63));\n    }\n};\n/**\n * Streaming UTF-8 decoding\n */\nvar DecodeUTF8 = /*#__PURE__*/ (function () {\n    /**\n     * Creates a UTF-8 decoding stream\n     * @param cb The callback to call whenever data is decoded\n     */\n    function DecodeUTF8(cb) {\n        this.ondata = cb;\n        if (tds)\n            this.t = new TextDecoder();\n        else\n            this.p = et;\n    }\n    /**\n     * Pushes a chunk to be decoded from UTF-8 binary\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    DecodeUTF8.prototype.push = function (chunk, final) {\n        if (!this.ondata)\n            err(5);\n        final = !!final;\n        if (this.t) {\n            this.ondata(this.t.decode(chunk, { stream: true }), final);\n            if (final) {\n                if (this.t.decode().length)\n                    err(8);\n                this.t = null;\n            }\n            return;\n        }\n        if (!this.p)\n            err(4);\n        var dat = new u8(this.p.length + chunk.length);\n        dat.set(this.p);\n        dat.set(chunk, this.p.length);\n        var _a = dutf8(dat), ch = _a[0], np = _a[1];\n        if (final) {\n            if (np.length)\n                err(8);\n            this.p = null;\n        }\n        else\n            this.p = np;\n        this.ondata(ch, final);\n    };\n    return DecodeUTF8;\n}());\nexports.DecodeUTF8 = DecodeUTF8;\n/**\n * Streaming UTF-8 encoding\n */\nvar EncodeUTF8 = /*#__PURE__*/ (function () {\n    /**\n     * Creates a UTF-8 decoding stream\n     * @param cb The callback to call whenever data is encoded\n     */\n    function EncodeUTF8(cb) {\n        this.ondata = cb;\n    }\n    /**\n     * Pushes a chunk to be encoded to UTF-8\n     * @param chunk The string data to push\n     * @param final Whether this is the last chunk\n     */\n    EncodeUTF8.prototype.push = function (chunk, final) {\n        if (!this.ondata)\n            err(5);\n        if (this.d)\n            err(4);\n        this.ondata(strToU8(chunk), this.d = final || false);\n    };\n    return EncodeUTF8;\n}());\nexports.EncodeUTF8 = EncodeUTF8;\n/**\n * Converts a string into a Uint8Array for use with compression/decompression methods\n * @param str The string to encode\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n *               not need to be true unless decoding a binary string.\n * @returns The string encoded in UTF-8/Latin-1 binary\n */\nfunction strToU8(str, latin1) {\n    if (latin1) {\n        var ar_1 = new u8(str.length);\n        for (var i = 0; i < str.length; ++i)\n            ar_1[i] = str.charCodeAt(i);\n        return ar_1;\n    }\n    if (te)\n        return te.encode(str);\n    var l = str.length;\n    var ar = new u8(str.length + (str.length >> 1));\n    var ai = 0;\n    var w = function (v) { ar[ai++] = v; };\n    for (var i = 0; i < l; ++i) {\n        if (ai + 5 > ar.length) {\n            var n = new u8(ai + 8 + ((l - i) << 1));\n            n.set(ar);\n            ar = n;\n        }\n        var c = str.charCodeAt(i);\n        if (c < 128 || latin1)\n            w(c);\n        else if (c < 2048)\n            w(192 | (c >> 6)), w(128 | (c & 63));\n        else if (c > 55295 && c < 57344)\n            c = 65536 + (c & 1023 << 10) | (str.charCodeAt(++i) & 1023),\n                w(240 | (c >> 18)), w(128 | ((c >> 12) & 63)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n        else\n            w(224 | (c >> 12)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n    }\n    return slc(ar, 0, ai);\n}\nexports.strToU8 = strToU8;\n/**\n * Converts a Uint8Array to a string\n * @param dat The data to decode to string\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n *               not need to be true unless encoding to binary string.\n * @returns The original UTF-8/Latin-1 string\n */\nfunction strFromU8(dat, latin1) {\n    if (latin1) {\n        var r = '';\n        for (var i = 0; i < dat.length; i += 16384)\n            r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384));\n        return r;\n    }\n    else if (td)\n        return td.decode(dat);\n    else {\n        var _a = dutf8(dat), out = _a[0], ext = _a[1];\n        if (ext.length)\n            err(8);\n        return out;\n    }\n}\nexports.strFromU8 = strFromU8;\n;\n// deflate bit flag\nvar dbf = function (l) { return l == 1 ? 3 : l < 6 ? 2 : l == 9 ? 1 : 0; };\n// skip local zip header\nvar slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };\n// read zip header\nvar zh = function (d, b, z) {\n    var fnl = b2(d, b + 28), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl, bs = b4(d, b + 20);\n    var _a = z && bs == 4294967295 ? z64e(d, es) : [bs, b4(d, b + 24), b4(d, b + 42)], sc = _a[0], su = _a[1], off = _a[2];\n    return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];\n};\n// read zip64 extra field\nvar z64e = function (d, b) {\n    for (; b2(d, b) != 1; b += 4 + b2(d, b + 2))\n        ;\n    return [b8(d, b + 12), b8(d, b + 4), b8(d, b + 20)];\n};\n// extra field length\nvar exfl = function (ex) {\n    var le = 0;\n    if (ex) {\n        for (var k in ex) {\n            var l = ex[k].length;\n            if (l > 65535)\n                err(9);\n            le += l + 4;\n        }\n    }\n    return le;\n};\n// write zip header\nvar wzh = function (d, b, f, fn, u, c, ce, co) {\n    var fl = fn.length, ex = f.extra, col = co && co.length;\n    var exl = exfl(ex);\n    wbytes(d, b, ce != null ? 0x2014B50 : 0x4034B50), b += 4;\n    if (ce != null)\n        d[b++] = 20, d[b++] = f.os;\n    d[b] = 20, b += 2; // spec compliance? what's that?\n    d[b++] = (f.flag << 1) | (c < 0 && 8), d[b++] = u && 8;\n    d[b++] = f.compression & 255, d[b++] = f.compression >> 8;\n    var dt = new Date(f.mtime == null ? Date.now() : f.mtime), y = dt.getFullYear() - 1980;\n    if (y < 0 || y > 119)\n        err(10);\n    wbytes(d, b, (y << 25) | ((dt.getMonth() + 1) << 21) | (dt.getDate() << 16) | (dt.getHours() << 11) | (dt.getMinutes() << 5) | (dt.getSeconds() >>> 1)), b += 4;\n    if (c != -1) {\n        wbytes(d, b, f.crc);\n        wbytes(d, b + 4, c < 0 ? -c - 2 : c);\n        wbytes(d, b + 8, f.size);\n    }\n    wbytes(d, b + 12, fl);\n    wbytes(d, b + 14, exl), b += 16;\n    if (ce != null) {\n        wbytes(d, b, col);\n        wbytes(d, b + 6, f.attrs);\n        wbytes(d, b + 10, ce), b += 14;\n    }\n    d.set(fn, b);\n    b += fl;\n    if (exl) {\n        for (var k in ex) {\n            var exf = ex[k], l = exf.length;\n            wbytes(d, b, +k);\n            wbytes(d, b + 2, l);\n            d.set(exf, b + 4), b += 4 + l;\n        }\n    }\n    if (col)\n        d.set(co, b), b += col;\n    return b;\n};\n// write zip footer (end of central directory)\nvar wzf = function (o, b, c, d, e) {\n    wbytes(o, b, 0x6054B50); // skip disk\n    wbytes(o, b + 8, c);\n    wbytes(o, b + 10, c);\n    wbytes(o, b + 12, d);\n    wbytes(o, b + 16, e);\n};\n/**\n * A pass-through stream to keep data uncompressed in a ZIP archive.\n */\nvar ZipPassThrough = /*#__PURE__*/ (function () {\n    /**\n     * Creates a pass-through stream that can be added to ZIP archives\n     * @param filename The filename to associate with this data stream\n     */\n    function ZipPassThrough(filename) {\n        this.filename = filename;\n        this.c = crc();\n        this.size = 0;\n        this.compression = 0;\n    }\n    /**\n     * Processes a chunk and pushes to the output stream. You can override this\n     * method in a subclass for custom behavior, but by default this passes\n     * the data through. You must call this.ondata(err, chunk, final) at some\n     * point in this method.\n     * @param chunk The chunk to process\n     * @param final Whether this is the last chunk\n     */\n    ZipPassThrough.prototype.process = function (chunk, final) {\n        this.ondata(null, chunk, final);\n    };\n    /**\n     * Pushes a chunk to be added. If you are subclassing this with a custom\n     * compression algorithm, note that you must push data from the source\n     * file only, pre-compression.\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    ZipPassThrough.prototype.push = function (chunk, final) {\n        if (!this.ondata)\n            err(5);\n        this.c.p(chunk);\n        this.size += chunk.length;\n        if (final)\n            this.crc = this.c.d();\n        this.process(chunk, final || false);\n    };\n    return ZipPassThrough;\n}());\nexports.ZipPassThrough = ZipPassThrough;\n// I don't extend because TypeScript extension adds 1kB of runtime bloat\n/**\n * Streaming DEFLATE compression for ZIP archives. Prefer using AsyncZipDeflate\n * for better performance\n */\nvar ZipDeflate = /*#__PURE__*/ (function () {\n    /**\n     * Creates a DEFLATE stream that can be added to ZIP archives\n     * @param filename The filename to associate with this data stream\n     * @param opts The compression options\n     */\n    function ZipDeflate(filename, opts) {\n        var _this_1 = this;\n        if (!opts)\n            opts = {};\n        ZipPassThrough.call(this, filename);\n        this.d = new Deflate(opts, function (dat, final) {\n            _this_1.ondata(null, dat, final);\n        });\n        this.compression = 8;\n        this.flag = dbf(opts.level);\n    }\n    ZipDeflate.prototype.process = function (chunk, final) {\n        try {\n            this.d.push(chunk, final);\n        }\n        catch (e) {\n            this.ondata(e, null, final);\n        }\n    };\n    /**\n     * Pushes a chunk to be deflated\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    ZipDeflate.prototype.push = function (chunk, final) {\n        ZipPassThrough.prototype.push.call(this, chunk, final);\n    };\n    return ZipDeflate;\n}());\nexports.ZipDeflate = ZipDeflate;\n/**\n * Asynchronous streaming DEFLATE compression for ZIP archives\n */\nvar AsyncZipDeflate = /*#__PURE__*/ (function () {\n    /**\n     * Creates a DEFLATE stream that can be added to ZIP archives\n     * @param filename The filename to associate with this data stream\n     * @param opts The compression options\n     */\n    function AsyncZipDeflate(filename, opts) {\n        var _this_1 = this;\n        if (!opts)\n            opts = {};\n        ZipPassThrough.call(this, filename);\n        this.d = new AsyncDeflate(opts, function (err, dat, final) {\n            _this_1.ondata(err, dat, final);\n        });\n        this.compression = 8;\n        this.flag = dbf(opts.level);\n        this.terminate = this.d.terminate;\n    }\n    AsyncZipDeflate.prototype.process = function (chunk, final) {\n        this.d.push(chunk, final);\n    };\n    /**\n     * Pushes a chunk to be deflated\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    AsyncZipDeflate.prototype.push = function (chunk, final) {\n        ZipPassThrough.prototype.push.call(this, chunk, final);\n    };\n    return AsyncZipDeflate;\n}());\nexports.AsyncZipDeflate = AsyncZipDeflate;\n// TODO: Better tree shaking\n/**\n * A zippable archive to which files can incrementally be added\n */\nvar Zip = /*#__PURE__*/ (function () {\n    /**\n     * Creates an empty ZIP archive to which files can be added\n     * @param cb The callback to call whenever data for the generated ZIP archive\n     *           is available\n     */\n    function Zip(cb) {\n        this.ondata = cb;\n        this.u = [];\n        this.d = 1;\n    }\n    /**\n     * Adds a file to the ZIP archive\n     * @param file The file stream to add\n     */\n    Zip.prototype.add = function (file) {\n        var _this_1 = this;\n        if (!this.ondata)\n            err(5);\n        // finishing or finished\n        if (this.d & 2)\n            this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, false);\n        else {\n            var f = strToU8(file.filename), fl_1 = f.length;\n            var com = file.comment, o = com && strToU8(com);\n            var u = fl_1 != file.filename.length || (o && (com.length != o.length));\n            var hl_1 = fl_1 + exfl(file.extra) + 30;\n            if (fl_1 > 65535)\n                this.ondata(err(11, 0, 1), null, false);\n            var header = new u8(hl_1);\n            wzh(header, 0, file, f, u, -1);\n            var chks_1 = [header];\n            var pAll_1 = function () {\n                for (var _i = 0, chks_2 = chks_1; _i < chks_2.length; _i++) {\n                    var chk = chks_2[_i];\n                    _this_1.ondata(null, chk, false);\n                }\n                chks_1 = [];\n            };\n            var tr_1 = this.d;\n            this.d = 0;\n            var ind_1 = this.u.length;\n            var uf_1 = mrg(file, {\n                f: f,\n                u: u,\n                o: o,\n                t: function () {\n                    if (file.terminate)\n                        file.terminate();\n                },\n                r: function () {\n                    pAll_1();\n                    if (tr_1) {\n                        var nxt = _this_1.u[ind_1 + 1];\n                        if (nxt)\n                            nxt.r();\n                        else\n                            _this_1.d = 1;\n                    }\n                    tr_1 = 1;\n                }\n            });\n            var cl_1 = 0;\n            file.ondata = function (err, dat, final) {\n                if (err) {\n                    _this_1.ondata(err, dat, final);\n                    _this_1.terminate();\n                }\n                else {\n                    cl_1 += dat.length;\n                    chks_1.push(dat);\n                    if (final) {\n                        var dd = new u8(16);\n                        wbytes(dd, 0, 0x8074B50);\n                        wbytes(dd, 4, file.crc);\n                        wbytes(dd, 8, cl_1);\n                        wbytes(dd, 12, file.size);\n                        chks_1.push(dd);\n                        uf_1.c = cl_1, uf_1.b = hl_1 + cl_1 + 16, uf_1.crc = file.crc, uf_1.size = file.size;\n                        if (tr_1)\n                            uf_1.r();\n                        tr_1 = 1;\n                    }\n                    else if (tr_1)\n                        pAll_1();\n                }\n            };\n            this.u.push(uf_1);\n        }\n    };\n    /**\n     * Ends the process of adding files and prepares to emit the final chunks.\n     * This *must* be called after adding all desired files for the resulting\n     * ZIP file to work properly.\n     */\n    Zip.prototype.end = function () {\n        var _this_1 = this;\n        if (this.d & 2) {\n            this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, true);\n            return;\n        }\n        if (this.d)\n            this.e();\n        else\n            this.u.push({\n                r: function () {\n                    if (!(_this_1.d & 1))\n                        return;\n                    _this_1.u.splice(-1, 1);\n                    _this_1.e();\n                },\n                t: function () { }\n            });\n        this.d = 3;\n    };\n    Zip.prototype.e = function () {\n        var bt = 0, l = 0, tl = 0;\n        for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n            var f = _a[_i];\n            tl += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0);\n        }\n        var out = new u8(tl + 22);\n        for (var _b = 0, _c = this.u; _b < _c.length; _b++) {\n            var f = _c[_b];\n            wzh(out, bt, f, f.f, f.u, -f.c - 2, l, f.o);\n            bt += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0), l += f.b;\n        }\n        wzf(out, bt, this.u.length, tl, l);\n        this.ondata(null, out, true);\n        this.d = 2;\n    };\n    /**\n     * A method to terminate any internal workers used by the stream. Subsequent\n     * calls to add() will fail.\n     */\n    Zip.prototype.terminate = function () {\n        for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n            var f = _a[_i];\n            f.t();\n        }\n        this.d = 2;\n    };\n    return Zip;\n}());\nexports.Zip = Zip;\nfunction zip(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    var r = {};\n    fltn(data, '', r, opts);\n    var k = Object.keys(r);\n    var lft = k.length, o = 0, tot = 0;\n    var slft = lft, files = new Array(lft);\n    var term = [];\n    var tAll = function () {\n        for (var i = 0; i < term.length; ++i)\n            term[i]();\n    };\n    var cbd = function (a, b) {\n        mt(function () { cb(a, b); });\n    };\n    mt(function () { cbd = cb; });\n    var cbf = function () {\n        var out = new u8(tot + 22), oe = o, cdl = tot - o;\n        tot = 0;\n        for (var i = 0; i < slft; ++i) {\n            var f = files[i];\n            try {\n                var l = f.c.length;\n                wzh(out, tot, f, f.f, f.u, l);\n                var badd = 30 + f.f.length + exfl(f.extra);\n                var loc = tot + badd;\n                out.set(f.c, loc);\n                wzh(out, o, f, f.f, f.u, l, tot, f.m), o += 16 + badd + (f.m ? f.m.length : 0), tot = loc + l;\n            }\n            catch (e) {\n                return cbd(e, null);\n            }\n        }\n        wzf(out, o, files.length, cdl, oe);\n        cbd(null, out);\n    };\n    if (!lft)\n        cbf();\n    var _loop_1 = function (i) {\n        var fn = k[i];\n        var _a = r[fn], file = _a[0], p = _a[1];\n        var c = crc(), size = file.length;\n        c.p(file);\n        var f = strToU8(fn), s = f.length;\n        var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n        var exl = exfl(p.extra);\n        var compression = p.level == 0 ? 0 : 8;\n        var cbl = function (e, d) {\n            if (e) {\n                tAll();\n                cbd(e, null);\n            }\n            else {\n                var l = d.length;\n                files[i] = mrg(p, {\n                    size: size,\n                    crc: c.d(),\n                    c: d,\n                    f: f,\n                    m: m,\n                    u: s != fn.length || (m && (com.length != ms)),\n                    compression: compression\n                });\n                o += 30 + s + exl + l;\n                tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n                if (!--lft)\n                    cbf();\n            }\n        };\n        if (s > 65535)\n            cbl(err(11, 0, 1), null);\n        if (!compression)\n            cbl(null, file);\n        else if (size < 160000) {\n            try {\n                cbl(null, deflateSync(file, p));\n            }\n            catch (e) {\n                cbl(e, null);\n            }\n        }\n        else\n            term.push(deflate(file, p, cbl));\n    };\n    // Cannot use lft because it can decrease\n    for (var i = 0; i < slft; ++i) {\n        _loop_1(i);\n    }\n    return tAll;\n}\nexports.zip = zip;\n/**\n * Synchronously creates a ZIP file. Prefer using `zip` for better performance\n * with more than one file.\n * @param data The directory structure for the ZIP archive\n * @param opts The main options, merged with per-file options\n * @returns The generated ZIP archive\n */\nfunction zipSync(data, opts) {\n    if (!opts)\n        opts = {};\n    var r = {};\n    var files = [];\n    fltn(data, '', r, opts);\n    var o = 0;\n    var tot = 0;\n    for (var fn in r) {\n        var _a = r[fn], file = _a[0], p = _a[1];\n        var compression = p.level == 0 ? 0 : 8;\n        var f = strToU8(fn), s = f.length;\n        var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n        var exl = exfl(p.extra);\n        if (s > 65535)\n            err(11);\n        var d = compression ? deflateSync(file, p) : file, l = d.length;\n        var c = crc();\n        c.p(file);\n        files.push(mrg(p, {\n            size: file.length,\n            crc: c.d(),\n            c: d,\n            f: f,\n            m: m,\n            u: s != fn.length || (m && (com.length != ms)),\n            o: o,\n            compression: compression\n        }));\n        o += 30 + s + exl + l;\n        tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n    }\n    var out = new u8(tot + 22), oe = o, cdl = tot - o;\n    for (var i = 0; i < files.length; ++i) {\n        var f = files[i];\n        wzh(out, f.o, f, f.f, f.u, f.c.length);\n        var badd = 30 + f.f.length + exfl(f.extra);\n        out.set(f.c, f.o + badd);\n        wzh(out, o, f, f.f, f.u, f.c.length, f.o, f.m), o += 16 + badd + (f.m ? f.m.length : 0);\n    }\n    wzf(out, o, files.length, cdl, oe);\n    return out;\n}\nexports.zipSync = zipSync;\n/**\n * Streaming pass-through decompression for ZIP archives\n */\nvar UnzipPassThrough = /*#__PURE__*/ (function () {\n    function UnzipPassThrough() {\n    }\n    UnzipPassThrough.prototype.push = function (data, final) {\n        this.ondata(null, data, final);\n    };\n    UnzipPassThrough.compression = 0;\n    return UnzipPassThrough;\n}());\nexports.UnzipPassThrough = UnzipPassThrough;\n/**\n * Streaming DEFLATE decompression for ZIP archives. Prefer AsyncZipInflate for\n * better performance.\n */\nvar UnzipInflate = /*#__PURE__*/ (function () {\n    /**\n     * Creates a DEFLATE decompression that can be used in ZIP archives\n     */\n    function UnzipInflate() {\n        var _this_1 = this;\n        this.i = new Inflate(function (dat, final) {\n            _this_1.ondata(null, dat, final);\n        });\n    }\n    UnzipInflate.prototype.push = function (data, final) {\n        try {\n            this.i.push(data, final);\n        }\n        catch (e) {\n            this.ondata(e, null, final);\n        }\n    };\n    UnzipInflate.compression = 8;\n    return UnzipInflate;\n}());\nexports.UnzipInflate = UnzipInflate;\n/**\n * Asynchronous streaming DEFLATE decompression for ZIP archives\n */\nvar AsyncUnzipInflate = /*#__PURE__*/ (function () {\n    /**\n     * Creates a DEFLATE decompression that can be used in ZIP archives\n     */\n    function AsyncUnzipInflate(_, sz) {\n        var _this_1 = this;\n        if (sz < 320000) {\n            this.i = new Inflate(function (dat, final) {\n                _this_1.ondata(null, dat, final);\n            });\n        }\n        else {\n            this.i = new AsyncInflate(function (err, dat, final) {\n                _this_1.ondata(err, dat, final);\n            });\n            this.terminate = this.i.terminate;\n        }\n    }\n    AsyncUnzipInflate.prototype.push = function (data, final) {\n        if (this.i.terminate)\n            data = slc(data, 0);\n        this.i.push(data, final);\n    };\n    AsyncUnzipInflate.compression = 8;\n    return AsyncUnzipInflate;\n}());\nexports.AsyncUnzipInflate = AsyncUnzipInflate;\n/**\n * A ZIP archive decompression stream that emits files as they are discovered\n */\nvar Unzip = /*#__PURE__*/ (function () {\n    /**\n     * Creates a ZIP decompression stream\n     * @param cb The callback to call whenever a file in the ZIP archive is found\n     */\n    function Unzip(cb) {\n        this.onfile = cb;\n        this.k = [];\n        this.o = {\n            0: UnzipPassThrough\n        };\n        this.p = et;\n    }\n    /**\n     * Pushes a chunk to be unzipped\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Unzip.prototype.push = function (chunk, final) {\n        var _this_1 = this;\n        if (!this.onfile)\n            err(5);\n        if (!this.p)\n            err(4);\n        if (this.c > 0) {\n            var len = Math.min(this.c, chunk.length);\n            var toAdd = chunk.subarray(0, len);\n            this.c -= len;\n            if (this.d)\n                this.d.push(toAdd, !this.c);\n            else\n                this.k[0].push(toAdd);\n            chunk = chunk.subarray(len);\n            if (chunk.length)\n                return this.push(chunk, final);\n        }\n        else {\n            var f = 0, i = 0, is = void 0, buf = void 0;\n            if (!this.p.length)\n                buf = chunk;\n            else if (!chunk.length)\n                buf = this.p;\n            else {\n                buf = new u8(this.p.length + chunk.length);\n                buf.set(this.p), buf.set(chunk, this.p.length);\n            }\n            var l = buf.length, oc = this.c, add = oc && this.d;\n            var _loop_2 = function () {\n                var _a;\n                var sig = b4(buf, i);\n                if (sig == 0x4034B50) {\n                    f = 1, is = i;\n                    this_1.d = null;\n                    this_1.c = 0;\n                    var bf = b2(buf, i + 6), cmp_1 = b2(buf, i + 8), u = bf & 2048, dd = bf & 8, fnl = b2(buf, i + 26), es = b2(buf, i + 28);\n                    if (l > i + 30 + fnl + es) {\n                        var chks_3 = [];\n                        this_1.k.unshift(chks_3);\n                        f = 2;\n                        var sc_1 = b4(buf, i + 18), su_1 = b4(buf, i + 22);\n                        var fn_1 = strFromU8(buf.subarray(i + 30, i += 30 + fnl), !u);\n                        if (sc_1 == 4294967295) {\n                            _a = dd ? [-2] : z64e(buf, i), sc_1 = _a[0], su_1 = _a[1];\n                        }\n                        else if (dd)\n                            sc_1 = -1;\n                        i += es;\n                        this_1.c = sc_1;\n                        var d_1;\n                        var file_1 = {\n                            name: fn_1,\n                            compression: cmp_1,\n                            start: function () {\n                                if (!file_1.ondata)\n                                    err(5);\n                                if (!sc_1)\n                                    file_1.ondata(null, et, true);\n                                else {\n                                    var ctr = _this_1.o[cmp_1];\n                                    if (!ctr)\n                                        file_1.ondata(err(14, 'unknown compression type ' + cmp_1, 1), null, false);\n                                    d_1 = sc_1 < 0 ? new ctr(fn_1) : new ctr(fn_1, sc_1, su_1);\n                                    d_1.ondata = function (err, dat, final) { file_1.ondata(err, dat, final); };\n                                    for (var _i = 0, chks_4 = chks_3; _i < chks_4.length; _i++) {\n                                        var dat = chks_4[_i];\n                                        d_1.push(dat, false);\n                                    }\n                                    if (_this_1.k[0] == chks_3 && _this_1.c)\n                                        _this_1.d = d_1;\n                                    else\n                                        d_1.push(et, true);\n                                }\n                            },\n                            terminate: function () {\n                                if (d_1 && d_1.terminate)\n                                    d_1.terminate();\n                            }\n                        };\n                        if (sc_1 >= 0)\n                            file_1.size = sc_1, file_1.originalSize = su_1;\n                        this_1.onfile(file_1);\n                    }\n                    return \"break\";\n                }\n                else if (oc) {\n                    if (sig == 0x8074B50) {\n                        is = i += 12 + (oc == -2 && 8), f = 3, this_1.c = 0;\n                        return \"break\";\n                    }\n                    else if (sig == 0x2014B50) {\n                        is = i -= 4, f = 3, this_1.c = 0;\n                        return \"break\";\n                    }\n                }\n            };\n            var this_1 = this;\n            for (; i < l - 4; ++i) {\n                var state_1 = _loop_2();\n                if (state_1 === \"break\")\n                    break;\n            }\n            this.p = et;\n            if (oc < 0) {\n                var dat = f ? buf.subarray(0, is - 12 - (oc == -2 && 8) - (b4(buf, is - 16) == 0x8074B50 && 4)) : buf.subarray(0, i);\n                if (add)\n                    add.push(dat, !!f);\n                else\n                    this.k[+(f == 2)].push(dat);\n            }\n            if (f & 2)\n                return this.push(buf.subarray(i), final);\n            this.p = buf.subarray(i);\n        }\n        if (final) {\n            if (this.c)\n                err(13);\n            this.p = null;\n        }\n    };\n    /**\n     * Registers a decoder with the stream, allowing for files compressed with\n     * the compression type provided to be expanded correctly\n     * @param decoder The decoder constructor\n     */\n    Unzip.prototype.register = function (decoder) {\n        this.o[decoder.compression] = decoder;\n    };\n    return Unzip;\n}());\nexports.Unzip = Unzip;\nvar mt = typeof queueMicrotask == 'function' ? queueMicrotask : typeof setTimeout == 'function' ? setTimeout : function (fn) { fn(); };\nfunction unzip(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    var term = [];\n    var tAll = function () {\n        for (var i = 0; i < term.length; ++i)\n            term[i]();\n    };\n    var files = {};\n    var cbd = function (a, b) {\n        mt(function () { cb(a, b); });\n    };\n    mt(function () { cbd = cb; });\n    var e = data.length - 22;\n    for (; b4(data, e) != 0x6054B50; --e) {\n        if (!e || data.length - e > 65558) {\n            cbd(err(13, 0, 1), null);\n            return tAll;\n        }\n    }\n    ;\n    var lft = b2(data, e + 8);\n    if (lft) {\n        var c = lft;\n        var o = b4(data, e + 16);\n        var z = o == 4294967295 || c == 65535;\n        if (z) {\n            var ze = b4(data, e - 12);\n            z = b4(data, ze) == 0x6064B50;\n            if (z) {\n                c = lft = b4(data, ze + 32);\n                o = b4(data, ze + 48);\n            }\n        }\n        var fltr = opts && opts.filter;\n        var _loop_3 = function (i) {\n            var _a = zh(data, o, z), c_1 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n            o = no;\n            var cbl = function (e, d) {\n                if (e) {\n                    tAll();\n                    cbd(e, null);\n                }\n                else {\n                    if (d)\n                        files[fn] = d;\n                    if (!--lft)\n                        cbd(null, files);\n                }\n            };\n            if (!fltr || fltr({\n                name: fn,\n                size: sc,\n                originalSize: su,\n                compression: c_1\n            })) {\n                if (!c_1)\n                    cbl(null, slc(data, b, b + sc));\n                else if (c_1 == 8) {\n                    var infl = data.subarray(b, b + sc);\n                    if (sc < 320000) {\n                        try {\n                            cbl(null, inflateSync(infl, new u8(su)));\n                        }\n                        catch (e) {\n                            cbl(e, null);\n                        }\n                    }\n                    else\n                        term.push(inflate(infl, { size: su }, cbl));\n                }\n                else\n                    cbl(err(14, 'unknown compression type ' + c_1, 1), null);\n            }\n            else\n                cbl(null, null);\n        };\n        for (var i = 0; i < c; ++i) {\n            _loop_3(i);\n        }\n    }\n    else\n        cbd(null, {});\n    return tAll;\n}\nexports.unzip = unzip;\n/**\n * Synchronously decompresses a ZIP archive. Prefer using `unzip` for better\n * performance with more than one file.\n * @param data The raw compressed ZIP file\n * @param opts The ZIP extraction options\n * @returns The decompressed files\n */\nfunction unzipSync(data, opts) {\n    var files = {};\n    var e = data.length - 22;\n    for (; b4(data, e) != 0x6054B50; --e) {\n        if (!e || data.length - e > 65558)\n            err(13);\n    }\n    ;\n    var c = b2(data, e + 8);\n    if (!c)\n        return {};\n    var o = b4(data, e + 16);\n    var z = o == 4294967295 || c == 65535;\n    if (z) {\n        var ze = b4(data, e - 12);\n        z = b4(data, ze) == 0x6064B50;\n        if (z) {\n            c = b4(data, ze + 32);\n            o = b4(data, ze + 48);\n        }\n    }\n    var fltr = opts && opts.filter;\n    for (var i = 0; i < c; ++i) {\n        var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n        o = no;\n        if (!fltr || fltr({\n            name: fn,\n            size: sc,\n            originalSize: su,\n            compression: c_2\n        })) {\n            if (!c_2)\n                files[fn] = slc(data, b, b + sc);\n            else if (c_2 == 8)\n                files[fn] = inflateSync(data.subarray(b, b + sc), new u8(su));\n            else\n                err(14, 'unknown compression type ' + c_2);\n        }\n    }\n    return files;\n}\nexports.unzipSync = unzipSync;\n","\"use strict\";\nvar ch2 = {};\nexports[\"default\"] = (function (c, id, msg, transfer, cb) {\n    var w = new Worker(ch2[id] || (ch2[id] = URL.createObjectURL(new Blob([\n        c + ';addEventListener(\"error\",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})'\n    ], { type: 'text/javascript' }))));\n    w.onmessage = function (e) {\n        var d = e.data, ed = d.$e$;\n        if (ed) {\n            var err = new Error(ed[0]);\n            err['code'] = ed[1];\n            err.stack = ed[2];\n            cb(err, null);\n        }\n        else\n            cb(null, d);\n    };\n    w.postMessage(msg, transfer);\n    return w;\n});\n","var C = \"\\u037c\"\nvar COUNT = typeof Symbol == \"undefined\" ? \"__\" + C : Symbol.for(C)\nvar SET = typeof Symbol == \"undefined\" ? \"__styleSet\" + Math.floor(Math.random() * 1e8) : Symbol(\"styleSet\")\nvar top = typeof globalThis != \"undefined\" ? globalThis : typeof window != \"undefined\" ? window : {}\n\n// :: - Style modules encapsulate a set of CSS rules defined from\n// JavaScript. Their definitions are only available in a given DOM\n// root after it has been _mounted_ there with `StyleModule.mount`.\n//\n// Style modules should be created once and stored somewhere, as\n// opposed to re-creating them every time you need them. The amount of\n// CSS rules generated for a given DOM root is bounded by the amount\n// of style modules that were used. So to avoid leaking rules, don't\n// create these dynamically, but treat them as one-time allocations.\nvar StyleModule = exports.StyleModule = function StyleModule(spec, options) {\n  this.rules = []\n  var ref = options || {};\n  var finish = ref.finish;\n\n  function splitSelector(selector) {\n    return /^@/.test(selector) ? [selector] : selector.split(/,\\s*/)\n  }\n\n  function render(selectors, spec, target, isKeyframes) {\n    var local = [], isAt = /^@(\\w+)\\b/.exec(selectors[0]), keyframes = isAt && isAt[1] == \"keyframes\"\n    if (isAt && spec == null) { return target.push(selectors[0] + \";\") }\n    for (var prop in spec) {\n      var value = spec[prop]\n      if (/&/.test(prop)) {\n        render(prop.split(/,\\s*/).map(function (part) { return selectors.map(function (sel) { return part.replace(/&/, sel); }); }).reduce(function (a, b) { return a.concat(b); }),\n               value, target)\n      } else if (value && typeof value == \"object\") {\n        if (!isAt) { throw new RangeError(\"The value of a property (\" + prop + \") should be a primitive value.\") }\n        render(splitSelector(prop), value, local, keyframes)\n      } else if (value != null) {\n        local.push(prop.replace(/_.*/, \"\").replace(/[A-Z]/g, function (l) { return \"-\" + l.toLowerCase(); }) + \": \" + value + \";\")\n      }\n    }\n    if (local.length || keyframes) {\n      target.push((finish && !isAt && !isKeyframes ? selectors.map(finish) : selectors).join(\", \") +\n                  \" {\" + local.join(\" \") + \"}\")\n    }\n  }\n\n  for (var prop in spec) { render(splitSelector(prop), spec[prop], this.rules) }\n};\n\n// :: () → string\n// Returns a string containing the module's CSS rules.\nStyleModule.prototype.getRules = function getRules () { return this.rules.join(\"\\n\") };\n\n// :: () → string\n// Generate a new unique CSS class name.\nStyleModule.newName = function newName () {\n  var id = top[COUNT] || 1\n  top[COUNT] = id + 1\n  return C + id.toString(36)\n};\n\n// :: (union<Document, ShadowRoot>, union<[StyleModule], StyleModule>, ?{nonce: ?string})\n//\n// Mount the given set of modules in the given DOM root, which ensures\n// that the CSS rules defined by the module are available in that\n// context.\n//\n// Rules are only added to the document once per root.\n//\n// Rule order will follow the order of the modules, so that rules from\n// modules later in the array take precedence of those from earlier\n// modules. If you call this function multiple times for the same root\n// in a way that changes the order of already mounted modules, the old\n// order will be changed.\n//\n// If a Content Security Policy nonce is provided, it is added to\n// the `<style>` tag generated by the library.\nStyleModule.mount = function mount (root, modules, options) {\n  var set = root[SET], nonce = options && options.nonce\n  if (!set) { set = new StyleSet(root, nonce) }\n  else if (nonce) { set.setNonce(nonce) }\n  set.mount(Array.isArray(modules) ? modules : [modules], root)\n};\n\nvar adoptedSet = new Map //<Document, StyleSet>\n\nvar StyleSet = function StyleSet(root, nonce) {\n  var doc = root.ownerDocument || root, win = doc.defaultView\n  if (!root.head && root.adoptedStyleSheets && win.CSSStyleSheet) {\n    var adopted = adoptedSet.get(doc)\n    if (adopted) { return root[SET] = adopted }\n    this.sheet = new win.CSSStyleSheet\n    adoptedSet.set(doc, this)\n  } else {\n    this.styleTag = doc.createElement(\"style\")\n    if (nonce) { this.styleTag.setAttribute(\"nonce\", nonce) }\n  }\n  this.modules = []\n  root[SET] = this\n};\n\nStyleSet.prototype.mount = function mount (modules, root) {\n  var sheet = this.sheet\n  var pos = 0 /* Current rule offset */, j = 0 /* Index into this.modules */\n  for (var i = 0; i < modules.length; i++) {\n    var mod = modules[i], index = this.modules.indexOf(mod)\n    if (index < j && index > -1) { // Ordering conflict\n      this.modules.splice(index, 1)\n      j--\n      index = -1\n    }\n    if (index == -1) {\n      this.modules.splice(j++, 0, mod)\n      if (sheet) { for (var k = 0; k < mod.rules.length; k++)\n        { sheet.insertRule(mod.rules[k], pos++) } }\n    } else {\n      while (j < index) { pos += this.modules[j++].rules.length }\n      pos += mod.rules.length\n      j++\n    }\n  }\n\n  if (sheet) {\n    if (root.adoptedStyleSheets.indexOf(this.sheet) < 0)\n      { root.adoptedStyleSheets = [this.sheet ].concat( root.adoptedStyleSheets) }\n  } else {\n    var text = \"\"\n    for (var i$1 = 0; i$1 < this.modules.length; i$1++)\n      { text += this.modules[i$1].getRules() + \"\\n\" }\n    this.styleTag.textContent = text\n    var target = root.head || root\n    if (this.styleTag.parentNode != target)\n      { target.insertBefore(this.styleTag, target.firstChild) }\n  }\n};\n\nStyleSet.prototype.setNonce = function setNonce (nonce) {\n  if (this.styleTag && this.styleTag.getAttribute(\"nonce\") != nonce)\n    { this.styleTag.setAttribute(\"nonce\", nonce) }\n};\n\n// Style::Object<union<Style,string>>\n//\n// A style is an object that, in the simple case, maps CSS property\n// names to strings holding their values, as in `{color: \"red\",\n// fontWeight: \"bold\"}`. The property names can be given in\n// camel-case—the library will insert a dash before capital letters\n// when converting them to CSS.\n//\n// If you include an underscore in a property name, it and everything\n// after it will be removed from the output, which can be useful when\n// providing a property multiple times, for browser compatibility\n// reasons.\n//\n// A property in a style object can also be a sub-selector, which\n// extends the current context to add a pseudo-selector or a child\n// selector. Such a property should contain a `&` character, which\n// will be replaced by the current selector. For example `{\"&:before\":\n// {content: '\"hi\"'}}`. Sub-selectors and regular properties can\n// freely be mixed in a given object. Any property containing a `&` is\n// assumed to be a sub-selector.\n//\n// Finally, a property can specify an @-block to be wrapped around the\n// styles defined inside the object that's the property's value. For\n// example to create a media query you can do `{\"@media screen and\n// (min-width: 400px)\": {...}}`.\n\n","\n//#region src/storages/globalConfig/globalConfig.ts\nlet store$4;\nconst DEFAULT_CONFIG = {\n\tlang: void 0,\n\tmessage: void 0,\n\tabortEarly: void 0,\n\tabortPipeEarly: void 0\n};\n/**\n* Sets the global configuration.\n*\n* @param config The configuration.\n*/\nfunction setGlobalConfig(config$1) {\n\tstore$4 = {\n\t\t...store$4,\n\t\t...config$1\n\t};\n}\n/**\n* Returns the global configuration.\n*\n* @param config The config to merge.\n*\n* @returns The configuration.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getGlobalConfig(config$1) {\n\tif (!config$1 && !store$4) return DEFAULT_CONFIG;\n\treturn {\n\t\tlang: config$1?.lang ?? store$4?.lang,\n\t\tmessage: config$1?.message,\n\t\tabortEarly: config$1?.abortEarly ?? store$4?.abortEarly,\n\t\tabortPipeEarly: config$1?.abortPipeEarly ?? store$4?.abortPipeEarly\n\t};\n}\n/**\n* Deletes the global configuration.\n*/\nfunction deleteGlobalConfig() {\n\tstore$4 = void 0;\n}\n\n//#endregion\n//#region src/storages/globalMessage/globalMessage.ts\nlet store$3;\n/**\n* Sets a global error message.\n*\n* @param message The error message.\n* @param lang The language of the message.\n*/\nfunction setGlobalMessage(message$1, lang) {\n\tif (!store$3) store$3 = /* @__PURE__ */ new Map();\n\tstore$3.set(lang, message$1);\n}\n/**\n* Returns a global error message.\n*\n* @param lang The language of the message.\n*\n* @returns The error message.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getGlobalMessage(lang) {\n\treturn store$3?.get(lang);\n}\n/**\n* Deletes a global error message.\n*\n* @param lang The language of the message.\n*/\nfunction deleteGlobalMessage(lang) {\n\tstore$3?.delete(lang);\n}\n\n//#endregion\n//#region src/storages/schemaMessage/schemaMessage.ts\nlet store$2;\n/**\n* Sets a schema error message.\n*\n* @param message The error message.\n* @param lang The language of the message.\n*/\nfunction setSchemaMessage(message$1, lang) {\n\tif (!store$2) store$2 = /* @__PURE__ */ new Map();\n\tstore$2.set(lang, message$1);\n}\n/**\n* Returns a schema error message.\n*\n* @param lang The language of the message.\n*\n* @returns The error message.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getSchemaMessage(lang) {\n\treturn store$2?.get(lang);\n}\n/**\n* Deletes a schema error message.\n*\n* @param lang The language of the message.\n*/\nfunction deleteSchemaMessage(lang) {\n\tstore$2?.delete(lang);\n}\n\n//#endregion\n//#region src/storages/specificMessage/specificMessage.ts\nlet store$1;\n/**\n* Sets a specific error message.\n*\n* @param reference The identifier reference.\n* @param message The error message.\n* @param lang The language of the message.\n*/\nfunction setSpecificMessage(reference, message$1, lang) {\n\tif (!store$1) store$1 = /* @__PURE__ */ new Map();\n\tif (!store$1.get(reference)) store$1.set(reference, /* @__PURE__ */ new Map());\n\tstore$1.get(reference).set(lang, message$1);\n}\n/**\n* Returns a specific error message.\n*\n* @param reference The identifier reference.\n* @param lang The language of the message.\n*\n* @returns The error message.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getSpecificMessage(reference, lang) {\n\treturn store$1?.get(reference)?.get(lang);\n}\n/**\n* Deletes a specific error message.\n*\n* @param reference The identifier reference.\n* @param lang The language of the message.\n*/\nfunction deleteSpecificMessage(reference, lang) {\n\tstore$1?.get(reference)?.delete(lang);\n}\n\n//#endregion\n//#region src/utils/_stringify/_stringify.ts\n/**\n* Stringifies an unknown input to a literal or type string.\n*\n* @param input The unknown input.\n*\n* @returns A literal or type string.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _stringify(input) {\n\tconst type = typeof input;\n\tif (type === \"string\") return `\"${input}\"`;\n\tif (type === \"number\" || type === \"bigint\" || type === \"boolean\") return `${input}`;\n\tif (type === \"object\" || type === \"function\") return (input && Object.getPrototypeOf(input)?.constructor?.name) ?? \"null\";\n\treturn type;\n}\n\n//#endregion\n//#region src/utils/_addIssue/_addIssue.ts\n/**\n* Adds an issue to the dataset.\n*\n* @param context The issue context.\n* @param label The issue label.\n* @param dataset The input dataset.\n* @param config The configuration.\n* @param other The optional props.\n*\n* @internal\n*/\nfunction _addIssue(context, label, dataset, config$1, other) {\n\tconst input = other && \"input\" in other ? other.input : dataset.value;\n\tconst expected = other?.expected ?? context.expects ?? null;\n\tconst received = other?.received ?? /* @__PURE__ */ _stringify(input);\n\tconst issue = {\n\t\tkind: context.kind,\n\t\ttype: context.type,\n\t\tinput,\n\t\texpected,\n\t\treceived,\n\t\tmessage: `Invalid ${label}: ${expected ? `Expected ${expected} but r` : \"R\"}eceived ${received}`,\n\t\trequirement: context.requirement,\n\t\tpath: other?.path,\n\t\tissues: other?.issues,\n\t\tlang: config$1.lang,\n\t\tabortEarly: config$1.abortEarly,\n\t\tabortPipeEarly: config$1.abortPipeEarly\n\t};\n\tconst isSchema = context.kind === \"schema\";\n\tconst message$1 = other?.message ?? context.message ?? /* @__PURE__ */ getSpecificMessage(context.reference, issue.lang) ?? (isSchema ? /* @__PURE__ */ getSchemaMessage(issue.lang) : null) ?? config$1.message ?? /* @__PURE__ */ getGlobalMessage(issue.lang);\n\tif (message$1 !== void 0) issue.message = typeof message$1 === \"function\" ? message$1(issue) : message$1;\n\tif (isSchema) dataset.typed = false;\n\tif (dataset.issues) dataset.issues.push(issue);\n\telse dataset.issues = [issue];\n}\n\n//#endregion\n//#region src/utils/_cloneDataset/_cloneDataset.ts\n/**\n* Creates a shallow copy of a dataset.\n*\n* Hint: The `value` is copied by reference, but the `issues` array is cloned\n* to avoid reusing mutable dataset state across multiple runs. Mutating a\n* returned object or array value can therefore affect later cache hits that\n* reuse the same cached output.\n*\n* @param dataset The output dataset.\n*\n* @returns The copied output dataset.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _cloneDataset(dataset) {\n\treturn {\n\t\ttyped: dataset.typed,\n\t\tvalue: dataset.value,\n\t\tissues: dataset.issues && [...dataset.issues]\n\t};\n}\n\n//#endregion\n//#region src/utils/_formatCase/_formatCase.ts\n/**\n* Splits a string into lowercase words and rejoins them with the given\n* separator and capitalization rules.\n*\n* Words are separated by `_`, `-` and ASCII whitespace, as well as by case\n* and acronym boundaries. Whether the first or subsequent words are\n* capitalized is controlled by `capFirst` and `capRest`.\n*\n* Hint: Implemented in a single pass that emits directly to the result\n* string to avoid an intermediate `string[]` allocation. ASCII chars are\n* classified via char codes to skip `.toLowerCase()` and `.toUpperCase()`\n* method calls in the common case.\n*\n* Hint: Digits are treated as a separate character class, so `item2Name`\n* yields `item2` and `name` rather than `item`, `2` and `name`.\n*\n* @param input The input string.\n* @param separator The string inserted between words.\n* @param capFirst Whether to capitalize the first word.\n* @param capRest Whether to capitalize subsequent words.\n*\n* @returns The formatted string.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _formatCase(input, separator, capFirst, capRest) {\n\tlet result = \"\";\n\tlet firstWord = true;\n\tlet start = 0;\n\tlet prev = 0;\n\tlet prevPrev = 0;\n\tconst flush = (end) => {\n\t\tif (end > start) {\n\t\t\tlet word = input.slice(start, end).toLowerCase();\n\t\t\tif (firstWord ? capFirst : capRest) {\n\t\t\t\tconst firstCode = word.charCodeAt(0);\n\t\t\t\tif (firstCode >= 97 && firstCode <= 122) word = String.fromCharCode(firstCode - 32) + word.slice(1);\n\t\t\t\telse {\n\t\t\t\t\tconst charLen = firstCode >= 55296 && firstCode <= 56319 ? 2 : 1;\n\t\t\t\t\tword = word.slice(0, charLen).toUpperCase() + word.slice(charLen);\n\t\t\t\t}\n\t\t\t}\n\t\t\tresult += firstWord ? word : separator + word;\n\t\t\tfirstWord = false;\n\t\t}\n\t};\n\tfor (let index = 0; index < input.length; index++) {\n\t\tconst code = input.charCodeAt(index);\n\t\tlet type;\n\t\tif (code === 32 || code === 9 || code === 10 || code === 11 || code === 12 || code === 13 || code === 45 || code === 95) {\n\t\t\tflush(index);\n\t\t\tstart = index + 1;\n\t\t\ttype = 0;\n\t\t} else if (code < 128) type = code >= 65 && code <= 90 ? 1 : code >= 97 && code <= 122 ? 2 : 3;\n\t\telse {\n\t\t\tconst char = input[index];\n\t\t\tconst charLower = char.toLowerCase();\n\t\t\ttype = charLower === char.toUpperCase() ? 3 : char === charLower ? 2 : 1;\n\t\t}\n\t\tif (type === 1 && (prev === 2 || prev === 3) && index > start) {\n\t\t\tflush(index);\n\t\t\tstart = index;\n\t\t} else if (type === 2 && prev === 1 && prevPrev === 1 && index - 1 > start) {\n\t\t\tflush(index - 1);\n\t\t\tstart = index - 1;\n\t\t}\n\t\tprevPrev = prev;\n\t\tprev = type;\n\t}\n\tflush(input.length);\n\treturn result;\n}\n\n//#endregion\n//#region src/utils/_getByteCount/_getByteCount.ts\nlet textEncoder;\n/**\n* Returns the byte count of the input.\n*\n* @param input The input to be measured.\n*\n* @returns The byte count.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _getByteCount(input) {\n\tif (!textEncoder) textEncoder = new TextEncoder();\n\treturn textEncoder.encode(input).length;\n}\n\n//#endregion\n//#region src/utils/_getGraphemeCount/_getGraphemeCount.ts\nlet segmenter;\n/**\n* Returns the grapheme count of the input.\n*\n* @param input The input to be measured.\n*\n* @returns The grapheme count.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _getGraphemeCount(input) {\n\tif (!segmenter) segmenter = new Intl.Segmenter();\n\tconst segments = segmenter.segment(input);\n\tlet count = 0;\n\tfor (const _ of segments) count++;\n\treturn count;\n}\n\n//#endregion\n//#region src/utils/_getLastMetadata/_getLastMetadata.ts\n/**\n* Returns the last top-level value of a given metadata type from a schema\n* using a breadth-first search that starts with the last item in the pipeline.\n*\n* @param schema The schema to search.\n* @param type The metadata type.\n*\n* @returns The value, if any.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _getLastMetadata(schema, type) {\n\tif (\"pipe\" in schema) {\n\t\tconst nestedSchemas = [];\n\t\tfor (let index = schema.pipe.length - 1; index >= 0; index--) {\n\t\t\tconst item = schema.pipe[index];\n\t\t\tif (item.kind === \"schema\" && \"pipe\" in item) nestedSchemas.push(item);\n\t\t\telse if (item.kind === \"metadata\" && item.type === type) return item[type];\n\t\t}\n\t\tfor (const nestedSchema of nestedSchemas) {\n\t\t\tconst result = /* @__PURE__ */ _getLastMetadata(nestedSchema, type);\n\t\t\tif (result !== void 0) return result;\n\t\t}\n\t}\n}\n\n//#endregion\n//#region src/utils/_getStandardProps/_getStandardProps.ts\nconst _standardCache = /* @__PURE__ */ new WeakMap();\n/**\n* Returns the Standard Schema properties.\n*\n* @param context The schema context.\n*\n* @returns The Standard Schema properties.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _getStandardProps(context) {\n\tlet cached = _standardCache.get(context);\n\tif (!cached) {\n\t\tcached = {\n\t\t\tversion: 1,\n\t\t\tvendor: \"valibot\",\n\t\t\tvalidate(value$1) {\n\t\t\t\treturn context[\"~run\"]({ value: value$1 }, /* @__PURE__ */ getGlobalConfig());\n\t\t\t}\n\t\t};\n\t\t_standardCache.set(context, cached);\n\t}\n\treturn cached;\n}\n\n//#endregion\n//#region src/utils/_getWordCount/_getWordCount.ts\nlet store;\n/**\n* Returns the word count of the input.\n*\n* @param locales The locales to be used.\n* @param input The input to be measured.\n*\n* @returns The word count.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _getWordCount(locales, input) {\n\tif (!store) store = /* @__PURE__ */ new Map();\n\tif (!store.get(locales)) store.set(locales, new Intl.Segmenter(locales, { granularity: \"word\" }));\n\tconst segments = store.get(locales).segment(input);\n\tlet count = 0;\n\tfor (const segment of segments) if (segment.isWordLike) count++;\n\treturn count;\n}\n\n//#endregion\n//#region src/utils/_isLuhnAlgo/_isLuhnAlgo.ts\n/**\n* Non-digit regex.\n*/\nconst NON_DIGIT_REGEX = /\\D/gu;\n/**\n* Checks whether a string with numbers corresponds to the luhn algorithm.\n*\n* @param input The input to be checked.\n*\n* @returns Whether input is valid.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _isLuhnAlgo(input) {\n\tconst number$1 = input.replace(NON_DIGIT_REGEX, \"\");\n\tlet length$1 = number$1.length;\n\tlet bit = 1;\n\tlet sum = 0;\n\twhile (length$1) {\n\t\tconst value$1 = +number$1[--length$1];\n\t\tbit ^= 1;\n\t\tsum += bit ? [\n\t\t\t0,\n\t\t\t2,\n\t\t\t4,\n\t\t\t6,\n\t\t\t8,\n\t\t\t1,\n\t\t\t3,\n\t\t\t5,\n\t\t\t7,\n\t\t\t9\n\t\t][value$1] : value$1;\n\t}\n\treturn sum % 10 === 0;\n}\n\n//#endregion\n//#region src/utils/_isValidObjectKey/_isValidObjectKey.ts\n/**\n* Disallows inherited object properties and prevents object prototype\n* pollution by disallowing certain keys.\n*\n* @param object The object to check.\n* @param key The key to check.\n*\n* @returns Whether the key is allowed.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _isValidObjectKey(object$1, key) {\n\treturn Object.prototype.hasOwnProperty.call(object$1, key) && key !== \"__proto__\" && key !== \"prototype\" && key !== \"constructor\";\n}\n\n//#endregion\n//#region src/utils/_joinExpects/_joinExpects.ts\n/**\n* Joins multiple `expects` values with the given separator.\n*\n* @param values The `expects` values.\n* @param separator The separator.\n*\n* @returns The joined `expects` property.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _joinExpects(values$1, separator) {\n\tconst list = [...new Set(values$1)];\n\tif (list.length > 1) return `(${list.join(` ${separator} `)})`;\n\treturn list[0] ?? \"never\";\n}\n\n//#endregion\n//#region src/utils/entriesFromList/entriesFromList.ts\n/**\n* Creates an object entries definition from a list of keys and a schema.\n*\n* @param list A list of keys.\n* @param schema The schema of the keys.\n*\n* @returns The object entries.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction entriesFromList(list, schema) {\n\tconst entries$1 = {};\n\tfor (const key of list) entries$1[key] = schema;\n\treturn entries$1;\n}\n\n//#endregion\n//#region src/utils/entriesFromObjects/entriesFromObjects.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction entriesFromObjects(schemas) {\n\tconst entries$1 = {};\n\tfor (const schema of schemas) Object.assign(entries$1, schema.entries);\n\treturn entries$1;\n}\n\n//#endregion\n//#region src/utils/getDotPath/getDotPath.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction getDotPath(issue) {\n\tif (issue.path) {\n\t\tlet key = \"\";\n\t\tfor (const item of issue.path) if (typeof item.key === \"string\" || typeof item.key === \"number\") if (key) key += `.${item.key}`;\n\t\telse key += item.key;\n\t\telse return null;\n\t\treturn key;\n\t}\n\treturn null;\n}\n\n//#endregion\n//#region src/utils/isOfKind/isOfKind.ts\n/**\n* A generic type guard to check the kind of an object.\n*\n* @param kind The kind to check for.\n* @param object The object to check.\n*\n* @returns Whether it matches.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction isOfKind(kind, object$1) {\n\treturn object$1.kind === kind;\n}\n\n//#endregion\n//#region src/utils/isOfType/isOfType.ts\n/**\n* A generic type guard to check the type of an object.\n*\n* @param type The type to check for.\n* @param object The object to check.\n*\n* @returns Whether it matches.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction isOfType(type, object$1) {\n\treturn object$1.type === type;\n}\n\n//#endregion\n//#region src/utils/isValiError/isValiError.ts\n/**\n* A type guard to check if an error is a ValiError.\n*\n* @param error The error to check.\n*\n* @returns Whether its a ValiError.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction isValiError(error) {\n\treturn error instanceof ValiError;\n}\n\n//#endregion\n//#region src/utils/ValiError/ValiError.ts\n/**\n* A Valibot error with useful information.\n*/\nvar ValiError = class extends Error {\n\t/**\n\t* Creates a Valibot error with useful information.\n\t*\n\t* @param issues The error issues.\n\t*/\n\tconstructor(issues) {\n\t\tsuper(issues[0].message);\n\t\tthis.name = \"ValiError\";\n\t\tthis.issues = issues;\n\t}\n};\n\n//#endregion\n//#region src/actions/args/args.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction args(schema) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"args\",\n\t\treference: args,\n\t\tasync: false,\n\t\tschema,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst func = dataset.value;\n\t\t\tdataset.value = (...args_) => {\n\t\t\t\tconst argsDataset = this.schema[\"~run\"]({ value: args_ }, config$1);\n\t\t\t\tif (argsDataset.issues) throw new ValiError(argsDataset.issues);\n\t\t\t\treturn func(...argsDataset.value);\n\t\t\t};\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/args/argsAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction argsAsync(schema) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"args\",\n\t\treference: argsAsync,\n\t\tasync: false,\n\t\tschema,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst func = dataset.value;\n\t\t\tdataset.value = async (...args$1) => {\n\t\t\t\tconst argsDataset = await schema[\"~run\"]({ value: args$1 }, config$1);\n\t\t\t\tif (argsDataset.issues) throw new ValiError(argsDataset.issues);\n\t\t\t\treturn func(...argsDataset.value);\n\t\t\t};\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/await/awaitAsync.ts\n/**\n* Creates an await transformation action.\n*\n* @returns An await action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction awaitAsync() {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"await\",\n\t\treference: awaitAsync,\n\t\tasync: true,\n\t\tasync \"~run\"(dataset) {\n\t\t\tdataset.value = await dataset.value;\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/regex.ts\n/**\n* [Base64](https://en.wikipedia.org/wiki/Base64) regex.\n*/\nconst BASE64_REGEX = /^(?:[\\da-z+/]{4})*(?:[\\da-z+/]{2}==|[\\da-z+/]{3}=)?$/iu;\n/**\n* [BIC](https://en.wikipedia.org/wiki/ISO_9362) regex.\n*/\nconst BIC_REGEX = /^[A-Z]{6}(?!00)[\\dA-Z]{2}(?:[\\dA-Z]{3})?$/u;\n/**\n* [Cuid2](https://github.com/paralleldrive/cuid2) regex.\n*/\nconst CUID2_REGEX = /^[a-z][\\da-z]*$/u;\n/**\n* [Decimal](https://en.wikipedia.org/wiki/Decimal) regex.\n*/\nconst DECIMAL_REGEX = /^[+-]?(?:\\d*\\.)?\\d+$/u;\n/**\n* [Digits](https://en.wikipedia.org/wiki/Numerical_digit) regex.\n*/\nconst DIGITS_REGEX = /^\\d+$/u;\n/**\n* [Domain name](https://en.wikipedia.org/wiki/Domain_name) regex.\n*\n* Hint: We decided against the `i` flag for better JSON Schema compatibility.\n* ASCII-only validation. Internationalized domain names (IDNs) are not\n* supported, including Punycode-encoded labels.\n*/\nconst DOMAIN_REGEX = /^(?=.{1,253}$)(?:(?![Xx][Nn]--)[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\\.)+[A-Za-z]{2,63}$/u;\n/**\n* [Email address](https://en.wikipedia.org/wiki/Email_address) regex.\n*/\nconst EMAIL_REGEX = /^[\\w+-]+(?:\\.[\\w+-]+)*@[\\da-z]+(?:[.-][\\da-z]+)*\\.[a-z]{2,}$/iu;\n/**\n* Emoji regex from [emoji-regex-xs](https://github.com/slevithan/emoji-regex-xs) v1.0.0 (MIT license).\n*\n* Hint: We decided against the newer `/^\\p{RGI_Emoji}+$/v` regex because it is\n* not supported in older runtimes and does not match all emoji.\n*/\nconst EMOJI_REGEX = /^(?:[\\u{1F1E6}-\\u{1F1FF}]{2}|\\u{1F3F4}[\\u{E0061}-\\u{E007A}]{2}[\\u{E0030}-\\u{E0039}\\u{E0061}-\\u{E007A}]{1,3}\\u{E007F}|(?:\\p{Emoji}\\uFE0F\\u20E3?|\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|(?![\\p{Emoji_Modifier_Base}\\u{1F1E6}-\\u{1F1FF}])\\p{Emoji_Presentation})(?:\\u200D(?:\\p{Emoji}\\uFE0F\\u20E3?|\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|(?![\\p{Emoji_Modifier_Base}\\u{1F1E6}-\\u{1F1FF}])\\p{Emoji_Presentation}))*)+$/u;\n/**\n* [Hexadecimal](https://en.wikipedia.org/wiki/Hexadecimal) regex.\n*\n* Hint: We decided against the `i` flag for better JSON Schema compatibility.\n*/\nconst HEXADECIMAL_REGEX = /^(?:0[hx])?[\\da-fA-F]+$/u;\n/**\n* [Hex color](https://en.wikipedia.org/wiki/Web_colors#Hex_triplet) regex.\n*\n* Hint: We decided against the `i` flag for better JSON Schema compatibility.\n*/\nconst HEX_COLOR_REGEX = /^#(?:[\\da-fA-F]{3,4}|[\\da-fA-F]{6}|[\\da-fA-F]{8})$/u;\n/**\n* [IMEI](https://en.wikipedia.org/wiki/International_Mobile_Equipment_Identity) regex.\n*/\nconst IMEI_REGEX = /^\\d{15}$|^\\d{2}-\\d{6}-\\d{6}-\\d$/u;\n/**\n* [IPv4](https://en.wikipedia.org/wiki/IPv4) regex.\n*/\nconst IPV4_REGEX = /^(?:(?:[1-9]|1\\d|2[0-4])?\\d|25[0-5])(?:\\.(?:(?:[1-9]|1\\d|2[0-4])?\\d|25[0-5])){3}$/u;\n/**\n* [IPv6](https://en.wikipedia.org/wiki/IPv6) regex.\n*/\nconst IPV6_REGEX = /^(?:(?:[\\da-f]{1,4}:){7}[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){1,7}:|(?:[\\da-f]{1,4}:){1,6}:[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){1,5}(?::[\\da-f]{1,4}){1,2}|(?:[\\da-f]{1,4}:){1,4}(?::[\\da-f]{1,4}){1,3}|(?:[\\da-f]{1,4}:){1,3}(?::[\\da-f]{1,4}){1,4}|(?:[\\da-f]{1,4}:){1,2}(?::[\\da-f]{1,4}){1,5}|[\\da-f]{1,4}:(?::[\\da-f]{1,4}){1,6}|:(?:(?::[\\da-f]{1,4}){1,7}|:)|fe80:(?::[\\da-f]{0,4}){0,4}%[\\da-z]+|::(?:f{4}(?::0{1,4})?:)?(?:(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)\\.){3}(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)|(?:[\\da-f]{1,4}:){1,4}:(?:(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)\\.){3}(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d))$/iu;\n/**\n* [IP](https://en.wikipedia.org/wiki/IP_address) regex.\n*/\nconst IP_REGEX = /^(?:(?:[1-9]|1\\d|2[0-4])?\\d|25[0-5])(?:\\.(?:(?:[1-9]|1\\d|2[0-4])?\\d|25[0-5])){3}$|^(?:(?:[\\da-f]{1,4}:){7}[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){1,7}:|(?:[\\da-f]{1,4}:){1,6}:[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){1,5}(?::[\\da-f]{1,4}){1,2}|(?:[\\da-f]{1,4}:){1,4}(?::[\\da-f]{1,4}){1,3}|(?:[\\da-f]{1,4}:){1,3}(?::[\\da-f]{1,4}){1,4}|(?:[\\da-f]{1,4}:){1,2}(?::[\\da-f]{1,4}){1,5}|[\\da-f]{1,4}:(?::[\\da-f]{1,4}){1,6}|:(?:(?::[\\da-f]{1,4}){1,7}|:)|fe80:(?::[\\da-f]{0,4}){0,4}%[\\da-z]+|::(?:f{4}(?::0{1,4})?:)?(?:(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)\\.){3}(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)|(?:[\\da-f]{1,4}:){1,4}:(?:(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)\\.){3}(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d))$/iu;\n/**\n* [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date regex.\n*/\nconst ISO_DATE_REGEX = /^\\d{4}-(?:0[1-9]|1[0-2])-(?:[12]\\d|0[1-9]|3[01])$/u;\n/**\n* [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time regex.\n*/\nconst ISO_DATE_TIME_REGEX = /^\\d{4}-(?:0[1-9]|1[0-2])-(?:[12]\\d|0[1-9]|3[01])[T ](?:0\\d|1\\d|2[0-3]):[0-5]\\d$/u;\n/**\n* [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time with seconds regex.\n*/\nconst ISO_DATE_TIME_SECOND_REGEX = /^\\d{4}-(?:0[1-9]|1[0-2])-(?:[12]\\d|0[1-9]|3[01])[T ](?:0\\d|1\\d|2[0-3])(?::[0-5]\\d){2}$/u;\n/**\n* [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) time regex.\n*/\nconst ISO_TIME_REGEX = /^(?:0\\d|1\\d|2[0-3]):[0-5]\\d$/u;\n/**\n* [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) time with seconds regex.\n*/\nconst ISO_TIME_SECOND_REGEX = /^(?:0\\d|1\\d|2[0-3])(?::[0-5]\\d){2}$/u;\n/**\n* [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) timestamp regex. Allows a\n* space as a date/time separator and an optional space before the UTC offset.\n*/\nconst ISO_TIMESTAMP_REGEX = /^\\d{4}-(?:0[1-9]|1[0-2])-(?:[12]\\d|0[1-9]|3[01])[T ](?:0\\d|1\\d|2[0-3])(?::[0-5]\\d){2}(?:\\.\\d{1,9})?(?:Z| ?[+-](?:0\\d|1\\d|2[0-3])(?::?[0-5]\\d)?)$/u;\n/**\n* [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) week regex.\n*/\nconst ISO_WEEK_REGEX = /^\\d{4}-W(?:0[1-9]|[1-4]\\d|5[0-3])$/u;\n/**\n* [JWS compact serialization](https://datatracker.ietf.org/doc/html/rfc7515#section-3.1)\n* regex.\n*\n* Hint: Empty payload and signature segments are allowed because the\n* Base64URL-encoded representation of an empty octet sequence is an empty\n* string.\n*/\nconst JWS_COMPACT_REGEX = /^(?:[\\w-]{2,3}|(?:[\\w-]{4})+(?:[\\w-]{2,3})?)\\.(?:[\\w-]{2,3}|(?:[\\w-]{4})+(?:[\\w-]{2,3})?)?\\.(?:[\\w-]{2,3}|(?:[\\w-]{4})+(?:[\\w-]{2,3})?)?$/u;\n/**\n* [ISRC](https://en.wikipedia.org/wiki/International_Standard_Recording_Code) regex.\n*/\nconst ISRC_REGEX = /^(?:[A-Z]{2}[A-Z\\d]{3}\\d{7}|[A-Z]{2}-[A-Z\\d]{3}-\\d{2}-\\d{5})$/u;\n/**\n* [MAC](https://en.wikipedia.org/wiki/MAC_address) 48 bit regex.\n*\n* Hint: We decided against the `i` flag for better JSON Schema compatibility.\n*/\nconst MAC48_REGEX = /^(?:[\\da-fA-F]{2}:){5}[\\da-fA-F]{2}$|^(?:[\\da-fA-F]{2}-){5}[\\da-fA-F]{2}$|^(?:[\\da-fA-F]{4}\\.){2}[\\da-fA-F]{4}$/u;\n/**\n* [MAC](https://en.wikipedia.org/wiki/MAC_address) 64 bit regex.\n*\n* Hint: We decided against the `i` flag for better JSON Schema compatibility.\n*/\nconst MAC64_REGEX = /^(?:[\\da-fA-F]{2}:){7}[\\da-fA-F]{2}$|^(?:[\\da-fA-F]{2}-){7}[\\da-fA-F]{2}$|^(?:[\\da-fA-F]{4}\\.){3}[\\da-fA-F]{4}$|^(?:[\\da-fA-F]{4}:){3}[\\da-fA-F]{4}$/u;\n/**\n* [MAC](https://en.wikipedia.org/wiki/MAC_address) regex.\n*\n* Hint: We decided against the `i` flag for better JSON Schema compatibility.\n*/\nconst MAC_REGEX = /^(?:[\\da-fA-F]{2}:){5}[\\da-fA-F]{2}$|^(?:[\\da-fA-F]{2}-){5}[\\da-fA-F]{2}$|^(?:[\\da-fA-F]{4}\\.){2}[\\da-fA-F]{4}$|^(?:[\\da-fA-F]{2}:){7}[\\da-fA-F]{2}$|^(?:[\\da-fA-F]{2}-){7}[\\da-fA-F]{2}$|^(?:[\\da-fA-F]{4}\\.){3}[\\da-fA-F]{4}$|^(?:[\\da-fA-F]{4}:){3}[\\da-fA-F]{4}$/u;\n/**\n* [Nano ID](https://github.com/ai/nanoid) regex.\n*/\nconst NANO_ID_REGEX = /^[\\w-]+$/u;\n/**\n* [Octal](https://en.wikipedia.org/wiki/Octal) regex.\n*/\nconst OCTAL_REGEX = /^(?:0o)?[0-7]+$/u;\n/**\n* [RFC 5322 email address](https://datatracker.ietf.org/doc/html/rfc5322#section-3.4.1) regex.\n*\n* Hint: This regex was taken from the [HTML Living Standard Specification](https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address) and does not perfectly represent RFC 5322.\n*/\nconst RFC_EMAIL_REGEX = /^[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/**\n* [Slug](https://en.wikipedia.org/wiki/Clean_URL#Slug) regex.\n*/\nconst SLUG_REGEX = /^[\\da-z]+(?:[-_][\\da-z]+)*$/u;\n/**\n* [ULID](https://github.com/ulid/spec) regex.\n*\n* Hint: We decided against the `i` flag for better JSON Schema compatibility.\n*/\nconst ULID_REGEX = /^[\\da-hjkmnp-tv-zA-HJKMNP-TV-Z]{26}$/u;\n/**\n* [UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier) regex.\n*/\nconst UUID_REGEX = /^[\\da-f]{8}(?:-[\\da-f]{4}){3}-[\\da-f]{12}$/iu;\n\n//#endregion\n//#region src/actions/base64/base64.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction base64(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"base64\",\n\t\treference: base64,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: BASE64_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"Base64\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/bic/bic.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction bic(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"bic\",\n\t\treference: bic,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: BIC_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"BIC\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/brand/brand.ts\n/**\n* Creates a brand transformation action.\n*\n* @param name The brand name.\n*\n* @returns A brand action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction brand(name) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"brand\",\n\t\treference: brand,\n\t\tasync: false,\n\t\tname,\n\t\t\"~run\"(dataset) {\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/bytes/bytes.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction bytes(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"bytes\",\n\t\treference: bytes,\n\t\tasync: false,\n\t\texpects: `${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst length$1 = /* @__PURE__ */ _getByteCount(dataset.value);\n\t\t\t\tif (length$1 !== this.requirement) _addIssue(this, \"bytes\", dataset, config$1, { received: `${length$1}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/check/check.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction check(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"check\",\n\t\treference: check,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement(dataset.value)) _addIssue(this, \"input\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/check/checkAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction checkAsync(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"check\",\n\t\treference: checkAsync,\n\t\tasync: true,\n\t\texpects: null,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !await this.requirement(dataset.value)) _addIssue(this, \"input\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/checkItems/checkItems.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction checkItems(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"check_items\",\n\t\treference: checkItems,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) for (let index = 0; index < dataset.value.length; index++) {\n\t\t\t\tconst item = dataset.value[index];\n\t\t\t\tif (!this.requirement(item, index, dataset.value)) _addIssue(this, \"item\", dataset, config$1, {\n\t\t\t\t\tinput: item,\n\t\t\t\t\tpath: [{\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\tinput: dataset.value,\n\t\t\t\t\t\tkey: index,\n\t\t\t\t\t\tvalue: item\n\t\t\t\t\t}]\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/checkItems/checkItemsAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction checkItemsAsync(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"check_items\",\n\t\treference: checkItemsAsync,\n\t\tasync: true,\n\t\texpects: null,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst requirementResults = await Promise.all(dataset.value.map(this.requirement));\n\t\t\t\tfor (let index = 0; index < dataset.value.length; index++) if (!requirementResults[index]) {\n\t\t\t\t\tconst item = dataset.value[index];\n\t\t\t\t\t_addIssue(this, \"item\", dataset, config$1, {\n\t\t\t\t\t\tinput: item,\n\t\t\t\t\t\tpath: [{\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput: dataset.value,\n\t\t\t\t\t\t\tkey: index,\n\t\t\t\t\t\t\tvalue: item\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/creditCard/creditCard.ts\n/**\n* Credit card regex.\n*/\nconst CREDIT_CARD_REGEX = /^(?:\\d{13,19}|\\d{4}(?: \\d{3,6}){2,4}|\\d{4}(?:-\\d{3,6}){2,4})$/u;\n/**\n* Sanitize regex.\n*/\nconst SANITIZE_REGEX = /[- ]/gu;\n/**\n* Provider regex list.\n*/\nconst PROVIDER_REGEX_LIST = [\n\t/^3[47]\\d{13}$/u,\n\t/^3(?:0[0-5]|[68]\\d)\\d{11,13}$/u,\n\t/^6(?:011|5\\d{2})\\d{12,15}$/u,\n\t/^(?:2131|1800|35\\d{3})\\d{11}$/u,\n\t/^(?:5[1-5]\\d{2}|222\\d|22[3-9]\\d|2[3-6]\\d{2}|27[01]\\d|2720)\\d{12}$/u,\n\t/^(?:6[27]\\d{14,17}|81\\d{14,17})$/u,\n\t/^4\\d{12}(?:\\d{3,6})?$/u\n];\n/* @__NO_SIDE_EFFECTS__ */\nfunction creditCard(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"credit_card\",\n\t\treference: creditCard,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement(input) {\n\t\t\tlet sanitized;\n\t\t\treturn CREDIT_CARD_REGEX.test(input) && (sanitized = input.replace(SANITIZE_REGEX, \"\")) && PROVIDER_REGEX_LIST.some((regex$1) => regex$1.test(sanitized)) && /* @__PURE__ */ _isLuhnAlgo(sanitized);\n\t\t},\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement(dataset.value)) _addIssue(this, \"credit card\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/cuid2/cuid2.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction cuid2(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"cuid2\",\n\t\treference: cuid2,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: CUID2_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"Cuid2\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/decimal/decimal.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction decimal(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"decimal\",\n\t\treference: decimal,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: DECIMAL_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"decimal\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/description/description.ts\n/**\n* Creates a description metadata action.\n*\n* @param description_ The description text.\n*\n* @returns A description action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction description(description_) {\n\treturn {\n\t\tkind: \"metadata\",\n\t\ttype: \"description\",\n\t\treference: description,\n\t\tdescription: description_\n\t};\n}\n\n//#endregion\n//#region src/actions/digits/digits.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction digits(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"digits\",\n\t\treference: digits,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: DIGITS_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"digits\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/domain/domain.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction domain(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"domain\",\n\t\treference: domain,\n\t\texpects: null,\n\t\tasync: false,\n\t\trequirement: DOMAIN_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"domain\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/email/email.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction email(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"email\",\n\t\treference: email,\n\t\texpects: null,\n\t\tasync: false,\n\t\trequirement: EMAIL_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"email\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/emoji/emoji.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction emoji(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"emoji\",\n\t\treference: emoji,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: EMOJI_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"emoji\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/empty/empty.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction empty(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"empty\",\n\t\treference: empty,\n\t\tasync: false,\n\t\texpects: \"0\",\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value.length > 0) _addIssue(this, \"length\", dataset, config$1, { received: `${dataset.value.length}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/endsWith/endsWith.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction endsWith(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"ends_with\",\n\t\treference: endsWith,\n\t\tasync: false,\n\t\texpects: `\"${requirement}\"`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !dataset.value.endsWith(this.requirement)) _addIssue(this, \"end\", dataset, config$1, { received: `\"${dataset.value.slice(-this.requirement.length)}\"` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/entries/entries.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction entries(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"entries\",\n\t\treference: entries,\n\t\tasync: false,\n\t\texpects: `${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (!dataset.typed) return dataset;\n\t\t\tconst count = Object.keys(dataset.value).length;\n\t\t\tif (dataset.typed && count !== this.requirement) _addIssue(this, \"entries\", dataset, config$1, { received: `${count}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/everyItem/everyItem.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction everyItem(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"every_item\",\n\t\treference: everyItem,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !dataset.value.every(this.requirement)) _addIssue(this, \"item\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/examples/examples.ts\n/**\n* Creates an examples metadata action.\n*\n* @param examples_ The examples.\n*\n* @returns An examples action.\n*\n* @beta\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction examples(examples_) {\n\treturn {\n\t\tkind: \"metadata\",\n\t\ttype: \"examples\",\n\t\treference: examples,\n\t\texamples: examples_\n\t};\n}\n\n//#endregion\n//#region src/actions/excludes/excludes.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction excludes(requirement, message$1) {\n\tconst received = /* @__PURE__ */ _stringify(requirement);\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"excludes\",\n\t\treference: excludes,\n\t\tasync: false,\n\t\texpects: `!${received}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value.includes(this.requirement)) _addIssue(this, \"content\", dataset, config$1, { received });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/filterItems/filterItems.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction filterItems(operation) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"filter_items\",\n\t\treference: filterItems,\n\t\tasync: false,\n\t\toperation,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value.filter(this.operation);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/findItem/findItem.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction findItem(operation) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"find_item\",\n\t\treference: findItem,\n\t\tasync: false,\n\t\toperation,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value.find(this.operation);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/finite/finite.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction finite(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"finite\",\n\t\treference: finite,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: Number.isFinite,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement(dataset.value)) _addIssue(this, \"finite\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/flavor/flavor.ts\n/**\n* Creates a flavor transformation action.\n*\n* @param name The flavor name.\n*\n* @returns A flavor action.\n*\n* @beta\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction flavor(name) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"flavor\",\n\t\treference: flavor,\n\t\tasync: false,\n\t\tname,\n\t\t\"~run\"(dataset) {\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/graphemes/graphemes.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction graphemes(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"graphemes\",\n\t\treference: graphemes,\n\t\tasync: false,\n\t\texpects: `${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst count = /* @__PURE__ */ _getGraphemeCount(dataset.value);\n\t\t\t\tif (count !== this.requirement) _addIssue(this, \"graphemes\", dataset, config$1, { received: `${count}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/gtValue/gtValue.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction gtValue(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"gt_value\",\n\t\treference: gtValue,\n\t\tasync: false,\n\t\texpects: `>${requirement instanceof Date ? requirement.toJSON() : /* @__PURE__ */ _stringify(requirement)}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !(dataset.value > this.requirement)) _addIssue(this, \"value\", dataset, config$1, { received: dataset.value instanceof Date ? dataset.value.toJSON() : /* @__PURE__ */ _stringify(dataset.value) });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/guard/guard.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction guard(requirement, message$1) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"guard\",\n\t\treference: guard,\n\t\tasync: false,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement(dataset.value)) {\n\t\t\t\t_addIssue(this, \"input\", dataset, config$1);\n\t\t\t\tdataset.typed = false;\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/hash/hash.ts\n/**\n* Hash lengths object.\n*/\nconst HASH_LENGTHS = {\n\tmd4: 32,\n\tmd5: 32,\n\tsha1: 40,\n\tsha256: 64,\n\tsha384: 96,\n\tsha512: 128,\n\tripemd128: 32,\n\tripemd160: 40,\n\ttiger128: 32,\n\ttiger160: 40,\n\ttiger192: 48,\n\tcrc32: 8,\n\tcrc32b: 8,\n\tadler32: 8\n};\n/* @__NO_SIDE_EFFECTS__ */\nfunction hash(types, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"hash\",\n\t\treference: hash,\n\t\texpects: null,\n\t\tasync: false,\n\t\trequirement: RegExp(types.map((type) => `^[a-fA-F0-9]{${HASH_LENGTHS[type]}}$`).join(\"|\"), \"u\"),\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"hash\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/hexadecimal/hexadecimal.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction hexadecimal(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"hexadecimal\",\n\t\treference: hexadecimal,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: HEXADECIMAL_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"hexadecimal\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/hexColor/hexColor.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction hexColor(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"hex_color\",\n\t\treference: hexColor,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: HEX_COLOR_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"hex color\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/imei/imei.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction imei(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"imei\",\n\t\treference: imei,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement(input) {\n\t\t\treturn IMEI_REGEX.test(input) && /* @__PURE__ */ _isLuhnAlgo(input);\n\t\t},\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement(dataset.value)) _addIssue(this, \"IMEI\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/includes/includes.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction includes(requirement, message$1) {\n\tconst expects = /* @__PURE__ */ _stringify(requirement);\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"includes\",\n\t\treference: includes,\n\t\tasync: false,\n\t\texpects,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !dataset.value.includes(this.requirement)) _addIssue(this, \"content\", dataset, config$1, { received: `!${expects}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/integer/integer.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction integer(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"integer\",\n\t\treference: integer,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: Number.isInteger,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement(dataset.value)) _addIssue(this, \"integer\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/ip/ip.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction ip(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"ip\",\n\t\treference: ip,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: IP_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"IP\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/ipv4/ipv4.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction ipv4(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"ipv4\",\n\t\treference: ipv4,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: IPV4_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"IPv4\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/ipv6/ipv6.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction ipv6(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"ipv6\",\n\t\treference: ipv6,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: IPV6_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"IPv6\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/isbn/utils/_isIsbn10.ts\n/**\n* [Validates an ISBN-10](https://en.wikipedia.org/wiki/ISBN#ISBN-10_check_digits).\n*\n* @param input The input value.\n*\n* @returns `true` if the input is a valid ISBN-10, `false` otherwise.\n*\n* @internal\n*/\nfunction _isIsbn10(input) {\n\tconst digits$1 = input.split(\"\").map((c) => c === \"X\" ? 10 : parseInt(c));\n\tlet sum = 0;\n\tfor (let i = 0; i < 10; i++) sum += digits$1[i] * (10 - i);\n\treturn sum % 11 === 0;\n}\n\n//#endregion\n//#region src/actions/isbn/utils/_isIsbn13.ts\n/**\n* [Validates an ISBN-13](https://en.wikipedia.org/wiki/ISBN#ISBN-13_check_digit_calculation).\n*\n* @param input The input value.\n*\n* @returns `true` if the input is a valid ISBN-13, `false` otherwise.\n*\n* @internal\n*/\nfunction _isIsbn13(input) {\n\tconst digits$1 = input.split(\"\").map((c) => parseInt(c));\n\tlet sum = 0;\n\tfor (let i = 0; i < 13; i++) sum += digits$1[i] * (i % 2 === 0 ? 1 : 3);\n\treturn sum % 10 === 0;\n}\n\n//#endregion\n//#region src/actions/isbn/isbn.ts\n/**\n* ISBN separator regex.\n*/\nconst ISBN_SEPARATOR_REGEX = /[- ]/gu;\n/**\n* ISBN-10 detection regex.\n*/\nconst ISBN_10_DETECTION_REGEX = /^\\d{9}[\\dX]$/u;\n/**\n* ISBN-13 detection regex.\n*/\nconst ISBN_13_DETECTION_REGEX = /^\\d{13}$/u;\n/* @__NO_SIDE_EFFECTS__ */\nfunction isbn(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"isbn\",\n\t\treference: isbn,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement(input) {\n\t\t\tconst replacedInput = input.replace(ISBN_SEPARATOR_REGEX, \"\");\n\t\t\tif (ISBN_10_DETECTION_REGEX.test(replacedInput)) return _isIsbn10(replacedInput);\n\t\t\telse if (ISBN_13_DETECTION_REGEX.test(replacedInput)) return _isIsbn13(replacedInput);\n\t\t\treturn false;\n\t\t},\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement(dataset.value)) _addIssue(this, \"ISBN\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/isrc/isrc.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction isrc(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"isrc\",\n\t\treference: isrc,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: ISRC_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"ISRC\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/isoDate/isoDate.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction isoDate(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"iso_date\",\n\t\treference: isoDate,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: ISO_DATE_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"date\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/isoDateTime/isoDateTime.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction isoDateTime(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"iso_date_time\",\n\t\treference: isoDateTime,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: ISO_DATE_TIME_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"date-time\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/isoDateTimeSecond/isoDateTimeSecond.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction isoDateTimeSecond(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"iso_date_time_second\",\n\t\treference: isoDateTimeSecond,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: ISO_DATE_TIME_SECOND_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"date-time-second\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/isoTime/isoTime.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction isoTime(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"iso_time\",\n\t\treference: isoTime,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: ISO_TIME_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"time\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/isoTimeSecond/isoTimeSecond.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction isoTimeSecond(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"iso_time_second\",\n\t\treference: isoTimeSecond,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: ISO_TIME_SECOND_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"time-second\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/isoTimestamp/isoTimestamp.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction isoTimestamp(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"iso_timestamp\",\n\t\treference: isoTimestamp,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: ISO_TIMESTAMP_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"timestamp\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/isoWeek/isoWeek.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction isoWeek(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"iso_week\",\n\t\treference: isoWeek,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: ISO_WEEK_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"week\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/jwsCompact/jwsCompact.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction jwsCompact(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"jws_compact\",\n\t\treference: jwsCompact,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: JWS_COMPACT_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"JWS compact\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/length/length.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction length(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"length\",\n\t\treference: length,\n\t\tasync: false,\n\t\texpects: `${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value.length !== this.requirement) _addIssue(this, \"length\", dataset, config$1, { received: `${dataset.value.length}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/ltValue/ltValue.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction ltValue(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"lt_value\",\n\t\treference: ltValue,\n\t\tasync: false,\n\t\texpects: `<${requirement instanceof Date ? requirement.toJSON() : /* @__PURE__ */ _stringify(requirement)}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !(dataset.value < this.requirement)) _addIssue(this, \"value\", dataset, config$1, { received: dataset.value instanceof Date ? dataset.value.toJSON() : /* @__PURE__ */ _stringify(dataset.value) });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/mac/mac.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction mac(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"mac\",\n\t\treference: mac,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: MAC_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"MAC\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/mac48/mac48.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction mac48(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"mac48\",\n\t\treference: mac48,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: MAC48_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"48-bit MAC\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/mac64/mac64.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction mac64(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"mac64\",\n\t\treference: mac64,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: MAC64_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"64-bit MAC\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/mapItems/mapItems.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction mapItems(operation) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"map_items\",\n\t\treference: mapItems,\n\t\tasync: false,\n\t\toperation,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value.map(this.operation);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/maxBytes/maxBytes.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction maxBytes(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"max_bytes\",\n\t\treference: maxBytes,\n\t\tasync: false,\n\t\texpects: `<=${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst length$1 = /* @__PURE__ */ _getByteCount(dataset.value);\n\t\t\t\tif (length$1 > this.requirement) _addIssue(this, \"bytes\", dataset, config$1, { received: `${length$1}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/maxEntries/maxEntries.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction maxEntries(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"max_entries\",\n\t\treference: maxEntries,\n\t\tasync: false,\n\t\texpects: `<=${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (!dataset.typed) return dataset;\n\t\t\tconst count = Object.keys(dataset.value).length;\n\t\t\tif (dataset.typed && count > this.requirement) _addIssue(this, \"entries\", dataset, config$1, { received: `${count}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/maxGraphemes/maxGraphemes.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction maxGraphemes(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"max_graphemes\",\n\t\treference: maxGraphemes,\n\t\tasync: false,\n\t\texpects: `<=${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst count = /* @__PURE__ */ _getGraphemeCount(dataset.value);\n\t\t\t\tif (count > this.requirement) _addIssue(this, \"graphemes\", dataset, config$1, { received: `${count}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/maxLength/maxLength.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction maxLength(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"max_length\",\n\t\treference: maxLength,\n\t\tasync: false,\n\t\texpects: `<=${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value.length > this.requirement) _addIssue(this, \"length\", dataset, config$1, { received: `${dataset.value.length}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/maxSize/maxSize.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction maxSize(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"max_size\",\n\t\treference: maxSize,\n\t\tasync: false,\n\t\texpects: `<=${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value.size > this.requirement) _addIssue(this, \"size\", dataset, config$1, { received: `${dataset.value.size}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/maxValue/maxValue.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction maxValue(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"max_value\",\n\t\treference: maxValue,\n\t\tasync: false,\n\t\texpects: `<=${requirement instanceof Date ? requirement.toJSON() : /* @__PURE__ */ _stringify(requirement)}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !(dataset.value <= this.requirement)) _addIssue(this, \"value\", dataset, config$1, { received: dataset.value instanceof Date ? dataset.value.toJSON() : /* @__PURE__ */ _stringify(dataset.value) });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/maxWords/maxWords.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction maxWords(locales, requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"max_words\",\n\t\treference: maxWords,\n\t\tasync: false,\n\t\texpects: `<=${requirement}`,\n\t\tlocales,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst count = /* @__PURE__ */ _getWordCount(this.locales, dataset.value);\n\t\t\t\tif (count > this.requirement) _addIssue(this, \"words\", dataset, config$1, { received: `${count}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/metadata/metadata.ts\n/**\n* Creates a custom metadata action.\n*\n* @param metadata_ The metadata object.\n*\n* @returns A metadata action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction metadata(metadata_) {\n\treturn {\n\t\tkind: \"metadata\",\n\t\ttype: \"metadata\",\n\t\treference: metadata,\n\t\tmetadata: metadata_\n\t};\n}\n\n//#endregion\n//#region src/actions/mimeType/mimeType.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction mimeType(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"mime_type\",\n\t\treference: mimeType,\n\t\tasync: false,\n\t\texpects: /* @__PURE__ */ _joinExpects(requirement.map((option) => `\"${option}\"`), \"|\"),\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.includes(dataset.value.type)) _addIssue(this, \"MIME type\", dataset, config$1, { received: `\"${dataset.value.type}\"` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/minBytes/minBytes.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction minBytes(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"min_bytes\",\n\t\treference: minBytes,\n\t\tasync: false,\n\t\texpects: `>=${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst length$1 = /* @__PURE__ */ _getByteCount(dataset.value);\n\t\t\t\tif (length$1 < this.requirement) _addIssue(this, \"bytes\", dataset, config$1, { received: `${length$1}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/minEntries/minEntries.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction minEntries(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"min_entries\",\n\t\treference: minEntries,\n\t\tasync: false,\n\t\texpects: `>=${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (!dataset.typed) return dataset;\n\t\t\tconst count = Object.keys(dataset.value).length;\n\t\t\tif (dataset.typed && count < this.requirement) _addIssue(this, \"entries\", dataset, config$1, { received: `${count}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/minGraphemes/minGraphemes.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction minGraphemes(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"min_graphemes\",\n\t\treference: minGraphemes,\n\t\tasync: false,\n\t\texpects: `>=${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst count = /* @__PURE__ */ _getGraphemeCount(dataset.value);\n\t\t\t\tif (count < this.requirement) _addIssue(this, \"graphemes\", dataset, config$1, { received: `${count}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/minLength/minLength.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction minLength(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"min_length\",\n\t\treference: minLength,\n\t\tasync: false,\n\t\texpects: `>=${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value.length < this.requirement) _addIssue(this, \"length\", dataset, config$1, { received: `${dataset.value.length}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/minSize/minSize.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction minSize(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"min_size\",\n\t\treference: minSize,\n\t\tasync: false,\n\t\texpects: `>=${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value.size < this.requirement) _addIssue(this, \"size\", dataset, config$1, { received: `${dataset.value.size}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/minValue/minValue.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction minValue(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"min_value\",\n\t\treference: minValue,\n\t\tasync: false,\n\t\texpects: `>=${requirement instanceof Date ? requirement.toJSON() : /* @__PURE__ */ _stringify(requirement)}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !(dataset.value >= this.requirement)) _addIssue(this, \"value\", dataset, config$1, { received: dataset.value instanceof Date ? dataset.value.toJSON() : /* @__PURE__ */ _stringify(dataset.value) });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/minWords/minWords.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction minWords(locales, requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"min_words\",\n\t\treference: minWords,\n\t\tasync: false,\n\t\texpects: `>=${requirement}`,\n\t\tlocales,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst count = /* @__PURE__ */ _getWordCount(this.locales, dataset.value);\n\t\t\t\tif (count < this.requirement) _addIssue(this, \"words\", dataset, config$1, { received: `${count}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/multipleOf/multipleOf.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction multipleOf(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"multiple_of\",\n\t\treference: multipleOf,\n\t\tasync: false,\n\t\texpects: `%${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value % this.requirement != 0) _addIssue(this, \"multiple\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/nanoid/nanoid.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nanoid(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"nanoid\",\n\t\treference: nanoid,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: NANO_ID_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"Nano ID\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/nonEmpty/nonEmpty.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nonEmpty(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"non_empty\",\n\t\treference: nonEmpty,\n\t\tasync: false,\n\t\texpects: \"!0\",\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value.length === 0) _addIssue(this, \"length\", dataset, config$1, { received: \"0\" });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/normalize/normalize.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction normalize(form) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"normalize\",\n\t\treference: normalize,\n\t\tasync: false,\n\t\tform,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value.normalize(this.form);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/notBytes/notBytes.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction notBytes(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"not_bytes\",\n\t\treference: notBytes,\n\t\tasync: false,\n\t\texpects: `!${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst length$1 = /* @__PURE__ */ _getByteCount(dataset.value);\n\t\t\t\tif (length$1 === this.requirement) _addIssue(this, \"bytes\", dataset, config$1, { received: `${length$1}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/notEntries/notEntries.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction notEntries(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"not_entries\",\n\t\treference: notEntries,\n\t\tasync: false,\n\t\texpects: `!${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (!dataset.typed) return dataset;\n\t\t\tconst count = Object.keys(dataset.value).length;\n\t\t\tif (dataset.typed && count === this.requirement) _addIssue(this, \"entries\", dataset, config$1, { received: `${count}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/notGraphemes/notGraphemes.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction notGraphemes(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"not_graphemes\",\n\t\treference: notGraphemes,\n\t\tasync: false,\n\t\texpects: `!${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst count = /* @__PURE__ */ _getGraphemeCount(dataset.value);\n\t\t\t\tif (count === this.requirement) _addIssue(this, \"graphemes\", dataset, config$1, { received: `${count}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/notLength/notLength.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction notLength(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"not_length\",\n\t\treference: notLength,\n\t\tasync: false,\n\t\texpects: `!${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value.length === this.requirement) _addIssue(this, \"length\", dataset, config$1, { received: `${dataset.value.length}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/notSize/notSize.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction notSize(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"not_size\",\n\t\treference: notSize,\n\t\tasync: false,\n\t\texpects: `!${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value.size === this.requirement) _addIssue(this, \"size\", dataset, config$1, { received: `${dataset.value.size}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/notValue/notValue.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction notValue(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"not_value\",\n\t\treference: notValue,\n\t\tasync: false,\n\t\texpects: requirement instanceof Date ? `!${requirement.toJSON()}` : `!${/* @__PURE__ */ _stringify(requirement)}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && this.requirement <= dataset.value && this.requirement >= dataset.value) _addIssue(this, \"value\", dataset, config$1, { received: dataset.value instanceof Date ? dataset.value.toJSON() : /* @__PURE__ */ _stringify(dataset.value) });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/notValues/notValues.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction notValues(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"not_values\",\n\t\treference: notValues,\n\t\tasync: false,\n\t\texpects: `!${/* @__PURE__ */ _joinExpects(requirement.map((value$1) => value$1 instanceof Date ? value$1.toJSON() : /* @__PURE__ */ _stringify(value$1)), \"|\")}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && this.requirement.some((value$1) => value$1 <= dataset.value && value$1 >= dataset.value)) _addIssue(this, \"value\", dataset, config$1, { received: dataset.value instanceof Date ? dataset.value.toJSON() : /* @__PURE__ */ _stringify(dataset.value) });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/notWords/notWords.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction notWords(locales, requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"not_words\",\n\t\treference: notWords,\n\t\tasync: false,\n\t\texpects: `!${requirement}`,\n\t\tlocales,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst count = /* @__PURE__ */ _getWordCount(this.locales, dataset.value);\n\t\t\t\tif (count === this.requirement) _addIssue(this, \"words\", dataset, config$1, { received: `${count}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/octal/octal.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction octal(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"octal\",\n\t\treference: octal,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: OCTAL_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"octal\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/parseBoolean/parseBoolean.ts\nconst TRUTHY = [\n\ttrue,\n\t1,\n\t\"true\",\n\t\"1\",\n\t\"yes\",\n\t\"y\",\n\t\"on\",\n\t\"enabled\"\n];\nconst FALSY = [\n\tfalse,\n\t0,\n\t\"false\",\n\t\"0\",\n\t\"no\",\n\t\"n\",\n\t\"off\",\n\t\"disabled\"\n];\n/* @__NO_SIDE_EFFECTS__ */\nfunction parseBoolean(config$1, message$1) {\n\tconst normalize$1 = (v) => typeof v === \"string\" ? v.toLowerCase() : v;\n\tconst truthyRaw = config$1?.truthy ?? TRUTHY;\n\tconst falsyRaw = config$1?.falsy ?? FALSY;\n\tconst truthy = config$1?.truthy ? config$1.truthy.map(normalize$1) : TRUTHY;\n\tconst falsy = config$1?.falsy ? config$1.falsy.map(normalize$1) : FALSY;\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"parse_boolean\",\n\t\treference: parseBoolean,\n\t\texpects: /* @__PURE__ */ _joinExpects([...truthyRaw, ...falsyRaw].map(_stringify), \"|\"),\n\t\tconfig: config$1,\n\t\tmessage: message$1,\n\t\tasync: false,\n\t\t\"~run\"(dataset, config$2) {\n\t\t\tconst input = normalize$1(dataset.value);\n\t\t\tif (truthy.includes(input)) dataset.value = true;\n\t\t\telse if (falsy.includes(input)) dataset.value = false;\n\t\t\telse {\n\t\t\t\t_addIssue(this, \"boolean\", dataset, config$2);\n\t\t\t\tdataset.typed = false;\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/parseJson/parseJson.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction parseJson(config$1, message$1) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"parse_json\",\n\t\treference: parseJson,\n\t\tconfig: config$1,\n\t\tmessage: message$1,\n\t\tasync: false,\n\t\t\"~run\"(dataset, config$2) {\n\t\t\ttry {\n\t\t\t\tdataset.value = JSON.parse(dataset.value, this.config?.reviver);\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof Error) {\n\t\t\t\t\t_addIssue(this, \"JSON\", dataset, config$2, { received: `\"${error.message}\"` });\n\t\t\t\t\tdataset.typed = false;\n\t\t\t\t} else throw error;\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/partialCheck/utils/_isPartiallyTyped/_isPartiallyTyped.ts\n/**\n* Checks if a dataset is partially typed.\n*\n* @param dataset The dataset to check.\n* @param paths The paths to check.\n*\n* @returns Whether it is partially typed.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _isPartiallyTyped(dataset, paths) {\n\tif (dataset.issues) for (const path of paths) for (const issue of dataset.issues) {\n\t\tlet typed = false;\n\t\tconst bound = Math.min(path.length, issue.path?.length ?? 0);\n\t\tfor (let index = 0; index < bound; index++) if (path[index] !== issue.path[index].key && (path[index] !== \"$\" || issue.path[index].type !== \"array\")) {\n\t\t\ttyped = true;\n\t\t\tbreak;\n\t\t}\n\t\tif (!typed) return false;\n\t}\n\treturn true;\n}\n\n//#endregion\n//#region src/actions/partialCheck/partialCheck.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction partialCheck(paths, requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"partial_check\",\n\t\treference: partialCheck,\n\t\tasync: false,\n\t\texpects: null,\n\t\tpaths,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif ((dataset.typed || /* @__PURE__ */ _isPartiallyTyped(dataset, paths)) && !this.requirement(dataset.value)) _addIssue(this, \"input\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/partialCheck/partialCheckAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction partialCheckAsync(paths, requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"partial_check\",\n\t\treference: partialCheckAsync,\n\t\tasync: true,\n\t\texpects: null,\n\t\tpaths,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif ((dataset.typed || /* @__PURE__ */ _isPartiallyTyped(dataset, paths)) && !await this.requirement(dataset.value)) _addIssue(this, \"input\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/rawCheck/rawCheck.ts\n/**\n* Creates a raw check validation action.\n*\n* @param action The validation action.\n*\n* @returns A raw check action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction rawCheck(action) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"raw_check\",\n\t\treference: rawCheck,\n\t\tasync: false,\n\t\texpects: null,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\taction({\n\t\t\t\tdataset,\n\t\t\t\tconfig: config$1,\n\t\t\t\taddIssue: (info) => _addIssue(this, info?.label ?? \"input\", dataset, config$1, info)\n\t\t\t});\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/rawCheck/rawCheckAsync.ts\n/**\n* Creates a raw check validation action.\n*\n* @param action The validation action.\n*\n* @returns A raw check action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction rawCheckAsync(action) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"raw_check\",\n\t\treference: rawCheckAsync,\n\t\tasync: true,\n\t\texpects: null,\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tawait action({\n\t\t\t\tdataset,\n\t\t\t\tconfig: config$1,\n\t\t\t\taddIssue: (info) => _addIssue(this, info?.label ?? \"input\", dataset, config$1, info)\n\t\t\t});\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/rawTransform/rawTransform.ts\n/**\n* Creates a raw transformation action.\n*\n* @param action The transformation action.\n*\n* @returns A raw transform action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction rawTransform(action) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"raw_transform\",\n\t\treference: rawTransform,\n\t\tasync: false,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst output = action({\n\t\t\t\tdataset,\n\t\t\t\tconfig: config$1,\n\t\t\t\taddIssue: (info) => _addIssue(this, info?.label ?? \"input\", dataset, config$1, info),\n\t\t\t\tNEVER: null\n\t\t\t});\n\t\t\tif (dataset.issues) dataset.typed = false;\n\t\t\telse dataset.value = output;\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/rawTransform/rawTransformAsync.ts\n/**\n* Creates a raw transformation action.\n*\n* @param action The transformation action.\n*\n* @returns A raw transform action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction rawTransformAsync(action) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"raw_transform\",\n\t\treference: rawTransformAsync,\n\t\tasync: true,\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst output = await action({\n\t\t\t\tdataset,\n\t\t\t\tconfig: config$1,\n\t\t\t\taddIssue: (info) => _addIssue(this, info?.label ?? \"input\", dataset, config$1, info),\n\t\t\t\tNEVER: null\n\t\t\t});\n\t\t\tif (dataset.issues) dataset.typed = false;\n\t\t\telse dataset.value = output;\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/readonly/readonly.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction readonly() {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"readonly\",\n\t\treference: readonly,\n\t\tasync: false,\n\t\t\"~run\"(dataset) {\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/reduceItems/reduceItems.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction reduceItems(operation, initial) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"reduce_items\",\n\t\treference: reduceItems,\n\t\tasync: false,\n\t\toperation,\n\t\tinitial,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value.reduce(this.operation, this.initial);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/regex/regex.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction regex(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"regex\",\n\t\treference: regex,\n\t\tasync: false,\n\t\texpects: `${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"format\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/returns/returns.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction returns(schema) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"returns\",\n\t\treference: returns,\n\t\tasync: false,\n\t\tschema,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst func = dataset.value;\n\t\t\tdataset.value = (...args_) => {\n\t\t\t\tconst returnsDataset = this.schema[\"~run\"]({ value: func(...args_) }, config$1);\n\t\t\t\tif (returnsDataset.issues) throw new ValiError(returnsDataset.issues);\n\t\t\t\treturn returnsDataset.value;\n\t\t\t};\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/returns/returnsAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction returnsAsync(schema) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"returns\",\n\t\treference: returnsAsync,\n\t\tasync: false,\n\t\tschema,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst func = dataset.value;\n\t\t\tdataset.value = async (...args_) => {\n\t\t\t\tconst returnsDataset = await this.schema[\"~run\"]({ value: await func(...args_) }, config$1);\n\t\t\t\tif (returnsDataset.issues) throw new ValiError(returnsDataset.issues);\n\t\t\t\treturn returnsDataset.value;\n\t\t\t};\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/rfcEmail/rfcEmail.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction rfcEmail(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"rfc_email\",\n\t\treference: rfcEmail,\n\t\texpects: null,\n\t\tasync: false,\n\t\trequirement: RFC_EMAIL_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"email\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/safeInteger/safeInteger.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction safeInteger(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"safe_integer\",\n\t\treference: safeInteger,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: Number.isSafeInteger,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement(dataset.value)) _addIssue(this, \"safe integer\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/size/size.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction size(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"size\",\n\t\treference: size,\n\t\tasync: false,\n\t\texpects: `${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value.size !== this.requirement) _addIssue(this, \"size\", dataset, config$1, { received: `${dataset.value.size}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/slug/slug.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction slug(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"slug\",\n\t\treference: slug,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: SLUG_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"slug\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/someItem/someItem.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction someItem(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"some_item\",\n\t\treference: someItem,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !dataset.value.some(this.requirement)) _addIssue(this, \"item\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/sortItems/sortItems.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction sortItems(operation) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"sort_items\",\n\t\treference: sortItems,\n\t\tasync: false,\n\t\toperation,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value.sort(this.operation);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/startsWith/startsWith.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction startsWith(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"starts_with\",\n\t\treference: startsWith,\n\t\tasync: false,\n\t\texpects: `\"${requirement}\"`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !dataset.value.startsWith(this.requirement)) _addIssue(this, \"start\", dataset, config$1, { received: `\"${dataset.value.slice(0, this.requirement.length)}\"` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/stringifyJson/stringifyJson.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction stringifyJson(config$1, message$1) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"stringify_json\",\n\t\treference: stringifyJson,\n\t\tmessage: message$1,\n\t\tconfig: config$1,\n\t\tasync: false,\n\t\t\"~run\"(dataset, config$2) {\n\t\t\ttry {\n\t\t\t\tconst output = JSON.stringify(dataset.value, this.config?.replacer, this.config?.space);\n\t\t\t\tif (output === void 0) {\n\t\t\t\t\t_addIssue(this, \"JSON\", dataset, config$2);\n\t\t\t\t\tdataset.typed = false;\n\t\t\t\t}\n\t\t\t\tdataset.value = output;\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof Error) {\n\t\t\t\t\t_addIssue(this, \"JSON\", dataset, config$2, { received: `\"${error.message}\"` });\n\t\t\t\t\tdataset.typed = false;\n\t\t\t\t} else throw error;\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/title/title.ts\n/**\n* Creates a title metadata action.\n*\n* @param title_ The title text.\n*\n* @returns A title action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction title(title_) {\n\treturn {\n\t\tkind: \"metadata\",\n\t\ttype: \"title\",\n\t\treference: title,\n\t\ttitle: title_\n\t};\n}\n\n//#endregion\n//#region src/actions/toBigint/toBigint.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction toBigint(message$1) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"to_bigint\",\n\t\treference: toBigint,\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\ttry {\n\t\t\t\tdataset.value = BigInt(dataset.value);\n\t\t\t} catch {\n\t\t\t\t_addIssue(this, \"bigint\", dataset, config$1);\n\t\t\t\tdataset.typed = false;\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/toBoolean/toBoolean.ts\n/**\n* Creates a to boolean transformation action.\n*\n* @returns A to boolean action.\n*\n* @beta\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction toBoolean() {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"to_boolean\",\n\t\treference: toBoolean,\n\t\tasync: false,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = Boolean(dataset.value);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/toCamelCase/toCamelCase.ts\n/**\n* Creates a to camel case transformation action.\n*\n* Words are separated by `_`, `-` and ASCII whitespace, as well as by case\n* and acronym boundaries.\n*\n* Hint: Acronym runs are normalized to lowercase (e.g. `parseURLValue` →\n* `parseUrlValue`) and digits stay attached to the preceding token (e.g.\n* `item2Name` → `item2Name`).\n*\n* @returns A to camel case action.\n*\n* @beta\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction toCamelCase() {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"to_camel_case\",\n\t\treference: toCamelCase,\n\t\tasync: false,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = /* @__PURE__ */ _formatCase(dataset.value, \"\", false, true);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/toDate/toDate.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction toDate(message$1) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"to_date\",\n\t\treference: toDate,\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\ttry {\n\t\t\t\tdataset.value = new Date(dataset.value);\n\t\t\t\tif (isNaN(dataset.value)) {\n\t\t\t\t\t_addIssue(this, \"date\", dataset, config$1, { received: \"\\\"Invalid Date\\\"\" });\n\t\t\t\t\tdataset.typed = false;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t_addIssue(this, \"date\", dataset, config$1);\n\t\t\t\tdataset.typed = false;\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/toKebabCase/toKebabCase.ts\n/**\n* Creates a to kebab case transformation action.\n*\n* Words are separated by `_`, `-` and ASCII whitespace, as well as by case\n* and acronym boundaries.\n*\n* Hint: Acronym runs are normalized to lowercase (e.g. `parseURLValue` →\n* `parse-url-value`) and digits stay attached to the preceding token (e.g.\n* `item2Name` → `item2-name`).\n*\n* @returns A to kebab case action.\n*\n* @beta\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction toKebabCase() {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"to_kebab_case\",\n\t\treference: toKebabCase,\n\t\tasync: false,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = /* @__PURE__ */ _formatCase(dataset.value, \"-\", false, false);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/toLowerCase/toLowerCase.ts\n/**\n* Creates a to lower case transformation action.\n*\n* @returns A to lower case action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction toLowerCase() {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"to_lower_case\",\n\t\treference: toLowerCase,\n\t\tasync: false,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value.toLowerCase();\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/toMaxValue/toMaxValue.ts\n/**\n* Creates a to max value transformation action.\n*\n* @param requirement The maximum value.\n*\n* @returns A to max value action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction toMaxValue(requirement) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"to_max_value\",\n\t\treference: toMaxValue,\n\t\tasync: false,\n\t\trequirement,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value > this.requirement ? this.requirement : dataset.value;\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/toMinValue/toMinValue.ts\n/**\n* Creates a to min value transformation action.\n*\n* @param requirement The minimum value.\n*\n* @returns A to min value action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction toMinValue(requirement) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"to_min_value\",\n\t\treference: toMinValue,\n\t\tasync: false,\n\t\trequirement,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value < this.requirement ? this.requirement : dataset.value;\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/toNumber/toNumber.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction toNumber(message$1) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"to_number\",\n\t\treference: toNumber,\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\ttry {\n\t\t\t\tdataset.value = Number(dataset.value);\n\t\t\t\tif (isNaN(dataset.value)) {\n\t\t\t\t\t_addIssue(this, \"number\", dataset, config$1);\n\t\t\t\t\tdataset.typed = false;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t_addIssue(this, \"number\", dataset, config$1);\n\t\t\t\tdataset.typed = false;\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/toPascalCase/toPascalCase.ts\n/**\n* Creates a to pascal case transformation action.\n*\n* Words are separated by `_`, `-` and ASCII whitespace, as well as by case\n* and acronym boundaries.\n*\n* Hint: Acronym runs are normalized to lowercase (e.g. `parseURLValue` →\n* `ParseUrlValue`) and digits stay attached to the preceding token (e.g.\n* `item2Name` → `Item2Name`).\n*\n* @returns A to pascal case action.\n*\n* @beta\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction toPascalCase() {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"to_pascal_case\",\n\t\treference: toPascalCase,\n\t\tasync: false,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = /* @__PURE__ */ _formatCase(dataset.value, \"\", true, true);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/toSnakeCase/toSnakeCase.ts\n/**\n* Creates a to snake case transformation action.\n*\n* Words are separated by `_`, `-` and ASCII whitespace, as well as by case\n* and acronym boundaries.\n*\n* Hint: Acronym runs are normalized to lowercase (e.g. `parseURLValue` →\n* `parse_url_value`) and digits stay attached to the preceding token (e.g.\n* `item2Name` → `item2_name`).\n*\n* @returns A to snake case action.\n*\n* @beta\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction toSnakeCase() {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"to_snake_case\",\n\t\treference: toSnakeCase,\n\t\tasync: false,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = /* @__PURE__ */ _formatCase(dataset.value, \"_\", false, false);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/toString/toString.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction toString(message$1) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"to_string\",\n\t\treference: toString,\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\ttry {\n\t\t\t\tdataset.value = String(dataset.value);\n\t\t\t} catch {\n\t\t\t\t_addIssue(this, \"string\", dataset, config$1);\n\t\t\t\tdataset.typed = false;\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/toUpperCase/toUpperCase.ts\n/**\n* Creates a to upper case transformation action.\n*\n* @returns A to upper case action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction toUpperCase() {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"to_upper_case\",\n\t\treference: toUpperCase,\n\t\tasync: false,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value.toUpperCase();\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/transform/transform.ts\n/**\n* Creates a custom transformation action.\n*\n* @param operation The transformation operation.\n*\n* @returns A transform action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction transform(operation) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"transform\",\n\t\treference: transform,\n\t\tasync: false,\n\t\toperation,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = this.operation(dataset.value);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/transform/transformAsync.ts\n/**\n* Creates a custom transformation action.\n*\n* @param operation The transformation operation.\n*\n* @returns A transform action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction transformAsync(operation) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"transform\",\n\t\treference: transformAsync,\n\t\tasync: true,\n\t\toperation,\n\t\tasync \"~run\"(dataset) {\n\t\t\tdataset.value = await this.operation(dataset.value);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/trim/trim.ts\n/**\n* Creates a trim transformation action.\n*\n* @returns A trim action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction trim() {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"trim\",\n\t\treference: trim,\n\t\tasync: false,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value.trim();\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/trimEnd/trimEnd.ts\n/**\n* Creates a trim end transformation action.\n*\n* @returns A trim end action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction trimEnd() {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"trim_end\",\n\t\treference: trimEnd,\n\t\tasync: false,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value.trimEnd();\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/trimStart/trimStart.ts\n/**\n* Creates a trim start transformation action.\n*\n* @returns A trim start action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction trimStart() {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"trim_start\",\n\t\treference: trimStart,\n\t\tasync: false,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value.trimStart();\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/ulid/ulid.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction ulid(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"ulid\",\n\t\treference: ulid,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: ULID_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"ULID\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/url/url.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction url(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"url\",\n\t\treference: url,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement(input) {\n\t\t\ttry {\n\t\t\t\tnew URL(input);\n\t\t\t\treturn true;\n\t\t\t} catch {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement(dataset.value)) _addIssue(this, \"URL\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/uuid/uuid.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction uuid(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"uuid\",\n\t\treference: uuid,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: UUID_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"UUID\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/value/value.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction value(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"value\",\n\t\treference: value,\n\t\tasync: false,\n\t\texpects: requirement instanceof Date ? requirement.toJSON() : /* @__PURE__ */ _stringify(requirement),\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !(this.requirement <= dataset.value && this.requirement >= dataset.value)) _addIssue(this, \"value\", dataset, config$1, { received: dataset.value instanceof Date ? dataset.value.toJSON() : /* @__PURE__ */ _stringify(dataset.value) });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/values/values.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction values(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"values\",\n\t\treference: values,\n\t\tasync: false,\n\t\texpects: `${/* @__PURE__ */ _joinExpects(requirement.map((value$1) => value$1 instanceof Date ? value$1.toJSON() : /* @__PURE__ */ _stringify(value$1)), \"|\")}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.some((value$1) => value$1 <= dataset.value && value$1 >= dataset.value)) _addIssue(this, \"value\", dataset, config$1, { received: dataset.value instanceof Date ? dataset.value.toJSON() : /* @__PURE__ */ _stringify(dataset.value) });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/words/words.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction words(locales, requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"words\",\n\t\treference: words,\n\t\tasync: false,\n\t\texpects: `${requirement}`,\n\t\tlocales,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst count = /* @__PURE__ */ _getWordCount(this.locales, dataset.value);\n\t\t\t\tif (count !== this.requirement) _addIssue(this, \"words\", dataset, config$1, { received: `${count}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/const.ts\nconst ABORT_EARLY_CONFIG = { abortEarly: true };\n\n//#endregion\n//#region src/methods/assert/assert.ts\n/**\n* Checks if the input matches the schema. As this is an assertion function, it\n* can be used as a type guard.\n*\n* @param schema The schema to be used.\n* @param input The input to be tested.\n*/\nfunction assert(schema, input) {\n\tconst issues = schema[\"~run\"]({ value: input }, ABORT_EARLY_CONFIG).issues;\n\tif (issues) throw new ValiError(issues);\n}\n\n//#endregion\n//#region src/methods/cache/_LruCache.ts\n/**\n* Efficient LRU cache using Map iteration order.\n*/\nvar _LruCache = class {\n\tconstructor(config$1) {\n\t\tthis.refCount = 0;\n\t\tthis.maxSize = config$1?.maxSize ?? 1e3;\n\t\tthis.maxAge = config$1?.maxAge ?? Infinity;\n\t\tthis.hasMaxAge = isFinite(this.maxAge);\n\t}\n\t/**\n\t* Stringifies an unknown input to a cache key component.\n\t*\n\t* @param input The unknown input.\n\t*\n\t* @returns A cache key component.\n\t*/\n\tstringify(input) {\n\t\tconst type = typeof input;\n\t\tif (type === \"string\") return `\"${input}\"`;\n\t\tif (type === \"number\" || type === \"boolean\") return `${input}`;\n\t\tif (type === \"bigint\") return `${input}n`;\n\t\tif (type === \"object\" || type === \"function\") {\n\t\t\tif (input) {\n\t\t\t\tthis.refIds ?? (this.refIds = /* @__PURE__ */ new WeakMap());\n\t\t\t\tlet id = this.refIds.get(input);\n\t\t\t\tif (!id) {\n\t\t\t\t\tid = ++this.refCount;\n\t\t\t\t\tthis.refIds.set(input, id);\n\t\t\t\t}\n\t\t\t\treturn `#${id}`;\n\t\t\t}\n\t\t\treturn \"null\";\n\t\t}\n\t\treturn type;\n\t}\n\t/**\n\t* Creates a cache key from input and config.\n\t*\n\t* @param input The input value.\n\t* @param config The parse configuration.\n\t*\n\t* @returns The cache key.\n\t*/\n\tkey(input, config$1 = {}) {\n\t\treturn `${this.stringify(input)}|${this.stringify(config$1.lang)}|${this.stringify(config$1.message)}|${this.stringify(config$1.abortEarly)}|${this.stringify(config$1.abortPipeEarly)}`;\n\t}\n\t/**\n\t* Gets a value from the cache by key.\n\t*\n\t* @param key The cache key.\n\t*\n\t* @returns The cached value.\n\t*/\n\tget(key) {\n\t\tif (!this.store) return void 0;\n\t\tconst entry = this.store.get(key);\n\t\tif (!entry) return void 0;\n\t\tif (this.hasMaxAge && Date.now() - entry[1] > this.maxAge) {\n\t\t\tthis.store.delete(key);\n\t\t\treturn;\n\t\t}\n\t\tthis.store.delete(key);\n\t\tthis.store.set(key, entry);\n\t\treturn entry[0];\n\t}\n\t/**\n\t* Sets a value in the cache by key.\n\t*\n\t* @param key The cache key.\n\t* @param value The cached value.\n\t*/\n\tset(key, value$1) {\n\t\tthis.store ?? (this.store = /* @__PURE__ */ new Map());\n\t\tthis.store.delete(key);\n\t\tconst timestamp = this.hasMaxAge ? Date.now() : 0;\n\t\tthis.store.set(key, [value$1, timestamp]);\n\t\tif (this.store.size > this.maxSize) this.store.delete(this.store.keys().next().value);\n\t}\n\t/**\n\t* Clears all entries from the cache.\n\t*/\n\tclear() {\n\t\tthis.store?.clear();\n\t}\n};\n\n//#endregion\n//#region src/methods/cache/cache.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction cache(schema, config$1) {\n\treturn {\n\t\t...schema,\n\t\tcacheConfig: config$1,\n\t\tcache: new _LruCache(config$1),\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, runConfig) {\n\t\t\tconst key = this.cache.key(dataset.value, runConfig);\n\t\t\tlet outputDataset = this.cache.get(key);\n\t\t\tif (!outputDataset) this.cache.set(key, outputDataset = schema[\"~run\"](dataset, runConfig));\n\t\t\treturn /* @__PURE__ */ _cloneDataset(outputDataset);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/cache/cacheAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction cacheAsync(schema, config$1) {\n\tlet activeRuns;\n\treturn {\n\t\t...schema,\n\t\tasync: true,\n\t\tcacheConfig: config$1,\n\t\tcache: new _LruCache(config$1),\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, runConfig) {\n\t\t\tconst key = this.cache.key(dataset.value, runConfig);\n\t\t\tconst cached = this.cache.get(key);\n\t\t\tif (cached) return /* @__PURE__ */ _cloneDataset(cached);\n\t\t\tlet promise$1 = activeRuns?.get(key);\n\t\t\tif (!promise$1) {\n\t\t\t\tactiveRuns ?? (activeRuns = /* @__PURE__ */ new Map());\n\t\t\t\tpromise$1 = Promise.resolve(schema[\"~run\"](dataset, runConfig));\n\t\t\t\tactiveRuns.set(key, promise$1);\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst outputDataset = await promise$1;\n\t\t\t\tthis.cache.set(key, outputDataset);\n\t\t\t\treturn /* @__PURE__ */ _cloneDataset(outputDataset);\n\t\t\t} finally {\n\t\t\t\tactiveRuns?.delete(key);\n\t\t\t}\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/config/config.ts\n/**\n* Changes the local configuration of a schema.\n*\n* @param schema The schema to configure.\n* @param config The parse configuration.\n*\n* @returns The configured schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction config(schema, config$1) {\n\treturn {\n\t\t...schema,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config_) {\n\t\t\treturn schema[\"~run\"](dataset, {\n\t\t\t\t...config_,\n\t\t\t\t...config$1\n\t\t\t});\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/getFallback/getFallback.ts\n/**\n* Returns the fallback value of the schema.\n*\n* @param schema The schema to get it from.\n* @param dataset The output dataset if available.\n* @param config The config if available.\n*\n* @returns The fallback value.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getFallback(schema, dataset, config$1) {\n\treturn typeof schema.fallback === \"function\" ? schema.fallback(dataset, config$1) : schema.fallback;\n}\n\n//#endregion\n//#region src/methods/fallback/fallback.ts\n/**\n* Returns a fallback value as output if the input does not match the schema.\n*\n* @param schema The schema to catch.\n* @param fallback The fallback value.\n*\n* @returns The passed schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction fallback(schema, fallback$1) {\n\treturn {\n\t\t...schema,\n\t\tfallback: fallback$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst outputDataset = schema[\"~run\"](dataset, config$1);\n\t\t\treturn outputDataset.issues ? {\n\t\t\t\ttyped: true,\n\t\t\t\tvalue: /* @__PURE__ */ getFallback(this, outputDataset, config$1)\n\t\t\t} : outputDataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/fallback/fallbackAsync.ts\n/**\n* Returns a fallback value as output if the input does not match the schema.\n*\n* @param schema The schema to catch.\n* @param fallback The fallback value.\n*\n* @returns The passed schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction fallbackAsync(schema, fallback$1) {\n\treturn {\n\t\t...schema,\n\t\tfallback: fallback$1,\n\t\tasync: true,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst outputDataset = await schema[\"~run\"](dataset, config$1);\n\t\t\treturn outputDataset.issues ? {\n\t\t\t\ttyped: true,\n\t\t\t\tvalue: await /* @__PURE__ */ getFallback(this, outputDataset, config$1)\n\t\t\t} : outputDataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/flatten/flatten.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction flatten(issues) {\n\tconst flatErrors = {};\n\tfor (const issue of issues) if (issue.path) {\n\t\tconst dotPath = /* @__PURE__ */ getDotPath(issue);\n\t\tif (dotPath) {\n\t\t\tif (!flatErrors.nested) flatErrors.nested = {};\n\t\t\tif (flatErrors.nested[dotPath]) flatErrors.nested[dotPath].push(issue.message);\n\t\t\telse flatErrors.nested[dotPath] = [issue.message];\n\t\t} else if (flatErrors.other) flatErrors.other.push(issue.message);\n\t\telse flatErrors.other = [issue.message];\n\t} else if (flatErrors.root) flatErrors.root.push(issue.message);\n\telse flatErrors.root = [issue.message];\n\treturn flatErrors;\n}\n\n//#endregion\n//#region src/methods/forward/forward.ts\n/**\n* Forwards the issues of the passed validation action.\n*\n* @param action The validation action.\n* @param path The path to forward the issues to.\n*\n* @returns The modified action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction forward(action, path) {\n\treturn {\n\t\t...action,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst prevIssues = dataset.issues && [...dataset.issues];\n\t\t\tdataset = action[\"~run\"](dataset, config$1);\n\t\t\tif (dataset.issues) {\n\t\t\t\tfor (const issue of dataset.issues) if (!prevIssues?.includes(issue)) {\n\t\t\t\t\tlet pathInput = dataset.value;\n\t\t\t\t\tfor (const key of path) {\n\t\t\t\t\t\tconst pathValue = pathInput[key];\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"unknown\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput: pathInput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: pathValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (issue.path) issue.path.push(pathItem);\n\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\tif (!pathValue) break;\n\t\t\t\t\t\tpathInput = pathValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/forward/forwardAsync.ts\n/**\n* Forwards the issues of the passed validation action.\n*\n* @param action The validation action.\n* @param path The path to forward the issues to.\n*\n* @returns The modified action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction forwardAsync(action, path) {\n\treturn {\n\t\t...action,\n\t\tasync: true,\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst prevIssues = dataset.issues && [...dataset.issues];\n\t\t\tdataset = await action[\"~run\"](dataset, config$1);\n\t\t\tif (dataset.issues) {\n\t\t\t\tfor (const issue of dataset.issues) if (!prevIssues?.includes(issue)) {\n\t\t\t\t\tlet pathInput = dataset.value;\n\t\t\t\t\tfor (const key of path) {\n\t\t\t\t\t\tconst pathValue = pathInput[key];\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"unknown\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput: pathInput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: pathValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (issue.path) issue.path.push(pathItem);\n\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\tif (!pathValue) break;\n\t\t\t\t\t\tpathInput = pathValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/getDefault/getDefault.ts\n/**\n* Returns the default value of the schema.\n*\n* @param schema The schema to get it from.\n* @param dataset The input dataset if available.\n* @param config The config if available.\n*\n* @returns The default value.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getDefault(schema, dataset, config$1) {\n\treturn typeof schema.default === \"function\" ? schema.default(dataset, config$1) : schema.default;\n}\n\n//#endregion\n//#region src/methods/getDefaults/getDefaults.ts\n/**\n* Returns the default values of the schema.\n*\n* Hint: The difference to `getDefault` is that for object and tuple schemas\n* this function recursively returns the default values of the subschemas\n* instead of `undefined`.\n*\n* @param schema The schema to get them from.\n*\n* @returns The default values.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getDefaults(schema) {\n\tif (\"entries\" in schema) {\n\t\tconst object$1 = {};\n\t\tfor (const key in schema.entries) object$1[key] = /* @__PURE__ */ getDefaults(schema.entries[key]);\n\t\treturn object$1;\n\t}\n\tif (\"items\" in schema) return schema.items.map(getDefaults);\n\treturn /* @__PURE__ */ getDefault(schema);\n}\n\n//#endregion\n//#region src/methods/getDefaults/getDefaultsAsync.ts\n/**\n* Returns the default values of the schema.\n*\n* Hint: The difference to `getDefault` is that for object and tuple schemas\n* this function recursively returns the default values of the subschemas\n* instead of `undefined`.\n*\n* @param schema The schema to get them from.\n*\n* @returns The default values.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nasync function getDefaultsAsync(schema) {\n\tif (\"entries\" in schema) return Object.fromEntries(await Promise.all(Object.entries(schema.entries).map(async ([key, value$1]) => [key, await /* @__PURE__ */ getDefaultsAsync(value$1)])));\n\tif (\"items\" in schema) return Promise.all(schema.items.map(getDefaultsAsync));\n\treturn /* @__PURE__ */ getDefault(schema);\n}\n\n//#endregion\n//#region src/methods/getDescription/getDescription.ts\n/**\n* Returns the description of the schema.\n*\n* If multiple descriptions are defined, the last one of the highest level is\n* returned. If no description is defined, `undefined` is returned.\n*\n* @param schema The schema to get the description from.\n*\n* @returns The description, if any.\n*\n* @beta\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getDescription(schema) {\n\treturn /* @__PURE__ */ _getLastMetadata(schema, \"description\");\n}\n\n//#endregion\n//#region src/methods/getExamples/getExamples.ts\n/**\n* Returns the examples of a schema.\n*\n* If multiple examples are defined, it concatenates them using depth-first\n* search. If no examples are defined, an empty array is returned.\n*\n* @param schema The schema to get the examples from.\n*\n* @returns The examples, if any.\n*\n* @beta\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getExamples(schema) {\n\tconst examples$1 = [];\n\tfunction depthFirstCollect(schema$1) {\n\t\tif (\"pipe\" in schema$1) {\n\t\t\tfor (const item of schema$1.pipe) if (item.kind === \"schema\" && \"pipe\" in item) depthFirstCollect(item);\n\t\t\telse if (item.kind === \"metadata\" && item.type === \"examples\") for (const example of item.examples) examples$1.push(example);\n\t\t}\n\t}\n\tdepthFirstCollect(schema);\n\treturn examples$1;\n}\n\n//#endregion\n//#region src/methods/getFallbacks/getFallbacks.ts\n/**\n* Returns the fallback values of the schema.\n*\n* Hint: The difference to `getFallback` is that for object and tuple schemas\n* this function recursively returns the fallback values of the subschemas\n* instead of `undefined`.\n*\n* @param schema The schema to get them from.\n*\n* @returns The fallback values.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getFallbacks(schema) {\n\tif (\"entries\" in schema) {\n\t\tconst object$1 = {};\n\t\tfor (const key in schema.entries) object$1[key] = /* @__PURE__ */ getFallbacks(schema.entries[key]);\n\t\treturn object$1;\n\t}\n\tif (\"items\" in schema) return schema.items.map(getFallbacks);\n\treturn /* @__PURE__ */ getFallback(schema);\n}\n\n//#endregion\n//#region src/methods/getFallbacks/getFallbacksAsync.ts\n/**\n* Returns the fallback values of the schema.\n*\n* Hint: The difference to `getFallback` is that for object and tuple schemas\n* this function recursively returns the fallback values of the subschemas\n* instead of `undefined`.\n*\n* @param schema The schema to get them from.\n*\n* @returns The fallback values.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nasync function getFallbacksAsync(schema) {\n\tif (\"entries\" in schema) return Object.fromEntries(await Promise.all(Object.entries(schema.entries).map(async ([key, value$1]) => [key, await /* @__PURE__ */ getFallbacksAsync(value$1)])));\n\tif (\"items\" in schema) return Promise.all(schema.items.map(getFallbacksAsync));\n\treturn /* @__PURE__ */ getFallback(schema);\n}\n\n//#endregion\n//#region src/methods/getMetadata/getMetadata.ts\n/**\n* Returns the metadata of a schema.\n*\n* If multiple metadata are defined, it shallowly merges them using depth-first\n* search. If no metadata is defined, an empty object is returned.\n*\n* @param schema Schema to get the metadata from.\n*\n* @returns The metadata, if any.\n*\n* @beta\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getMetadata(schema) {\n\tconst result = {};\n\tfunction depthFirstMerge(schema$1) {\n\t\tif (\"pipe\" in schema$1) {\n\t\t\tfor (const item of schema$1.pipe) if (item.kind === \"schema\" && \"pipe\" in item) depthFirstMerge(item);\n\t\t\telse if (item.kind === \"metadata\" && item.type === \"metadata\") Object.assign(result, item.metadata);\n\t\t}\n\t}\n\tdepthFirstMerge(schema);\n\treturn result;\n}\n\n//#endregion\n//#region src/methods/getTitle/getTitle.ts\n/**\n* Returns the title of the schema.\n*\n* If multiple titles are defined, the last one of the highest level is\n* returned. If no title is defined, `undefined` is returned.\n*\n* @param schema The schema to get the title from.\n*\n* @returns The title, if any.\n*\n* @beta\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getTitle(schema) {\n\treturn /* @__PURE__ */ _getLastMetadata(schema, \"title\");\n}\n\n//#endregion\n//#region src/methods/is/is.ts\n/**\n* Checks if the input matches the schema. By using a type predicate, this\n* function can be used as a type guard.\n*\n* @param schema The schema to be used.\n* @param input The input to be tested.\n*\n* @returns Whether the input matches the schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction is(schema, input) {\n\treturn !schema[\"~run\"]({ value: input }, ABORT_EARLY_CONFIG).issues;\n}\n\n//#endregion\n//#region src/schemas/any/any.ts\n/**\n* Creates an any schema.\n*\n* Hint: This schema function exists only for completeness and is not\n* recommended in practice. Instead, `unknown` should be used to accept\n* unknown data.\n*\n* @returns An any schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction any() {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"any\",\n\t\treference: any,\n\t\texpects: \"any\",\n\t\tasync: false,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.typed = true;\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/array/array.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction array(item, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"array\",\n\t\treference: array,\n\t\texpects: \"Array\",\n\t\tasync: false,\n\t\titem,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (Array.isArray(input)) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = [];\n\t\t\t\tfor (let key = 0; key < input.length; key++) {\n\t\t\t\t\tconst value$1 = input[key];\n\t\t\t\t\tconst itemDataset = this.item[\"~run\"]({ value: value$1 }, config$1);\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/array/arrayAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction arrayAsync(item, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"array\",\n\t\treference: arrayAsync,\n\t\texpects: \"Array\",\n\t\tasync: true,\n\t\titem,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (Array.isArray(input)) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = [];\n\t\t\t\tconst itemDatasets = await Promise.all(input.map((value$1) => this.item[\"~run\"]({ value: value$1 }, config$1)));\n\t\t\t\tfor (let key = 0; key < itemDatasets.length; key++) {\n\t\t\t\t\tconst itemDataset = itemDatasets[key];\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: input[key]\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/bigint/bigint.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction bigint(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"bigint\",\n\t\treference: bigint,\n\t\texpects: \"bigint\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (typeof dataset.value === \"bigint\") dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/blob/blob.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction blob(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"blob\",\n\t\treference: blob,\n\t\texpects: \"Blob\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value instanceof Blob) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/boolean/boolean.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction boolean(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"boolean\",\n\t\treference: boolean,\n\t\texpects: \"boolean\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (typeof dataset.value === \"boolean\") dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/custom/custom.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction custom(check$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"custom\",\n\t\treference: custom,\n\t\texpects: \"unknown\",\n\t\tasync: false,\n\t\tcheck: check$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (this.check(dataset.value)) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/custom/customAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction customAsync(check$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"custom\",\n\t\treference: customAsync,\n\t\texpects: \"unknown\",\n\t\tasync: true,\n\t\tcheck: check$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif (await this.check(dataset.value)) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/date/date.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction date(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"date\",\n\t\treference: date,\n\t\texpects: \"Date\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value instanceof Date) if (!isNaN(dataset.value)) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1, { received: \"\\\"Invalid Date\\\"\" });\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/enum/enum.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction enum_(enum__, message$1) {\n\tconst options = [];\n\tfor (const key in enum__) if (`${+key}` !== key || typeof enum__[key] !== \"string\" || !Object.is(enum__[enum__[key]], +key)) options.push(enum__[key]);\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"enum\",\n\t\treference: enum_,\n\t\texpects: /* @__PURE__ */ _joinExpects(options.map(_stringify), \"|\"),\n\t\tasync: false,\n\t\tenum: enum__,\n\t\toptions,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (this.options.includes(dataset.value)) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/exactOptional/exactOptional.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction exactOptional(wrapped, default_) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"exact_optional\",\n\t\treference: exactOptional,\n\t\texpects: wrapped.expects,\n\t\tasync: false,\n\t\twrapped,\n\t\tdefault: default_,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\treturn this.wrapped[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/exactOptional/exactOptionalAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction exactOptionalAsync(wrapped, default_) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"exact_optional\",\n\t\treference: exactOptionalAsync,\n\t\texpects: wrapped.expects,\n\t\tasync: true,\n\t\twrapped,\n\t\tdefault: default_,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\treturn this.wrapped[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/file/file.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction file(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"file\",\n\t\treference: file,\n\t\texpects: \"File\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value instanceof File) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/function/function.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction function_(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"function\",\n\t\treference: function_,\n\t\texpects: \"Function\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (typeof dataset.value === \"function\") dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/instance/instance.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction instance(class_, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"instance\",\n\t\treference: instance,\n\t\texpects: class_.name,\n\t\tasync: false,\n\t\tclass: class_,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value instanceof this.class) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/intersect/utils/_merge/_merge.ts\n/**\n* Merges two values into one single output.\n*\n* @param value1 First value.\n* @param value2 Second value.\n*\n* @returns The merge dataset.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _merge(value1, value2) {\n\tif (typeof value1 === typeof value2) {\n\t\tif (value1 === value2 || value1 instanceof Date && value2 instanceof Date && +value1 === +value2) return { value: value1 };\n\t\tif (value1 && value2 && value1.constructor === Object && value2.constructor === Object) {\n\t\t\tconst nextValue = { ...value1 };\n\t\t\tfor (const key in value2) if (key in value1) {\n\t\t\t\tconst dataset = /* @__PURE__ */ _merge(value1[key], value2[key]);\n\t\t\t\tif (dataset.issue) return dataset;\n\t\t\t\tnextValue[key] = dataset.value;\n\t\t\t} else nextValue[key] = value2[key];\n\t\t\treturn { value: nextValue };\n\t\t}\n\t\tif (Array.isArray(value1) && Array.isArray(value2)) {\n\t\t\tif (value1.length === value2.length) {\n\t\t\t\tconst nextValue = [...value1];\n\t\t\t\tfor (let index = 0; index < value1.length; index++) {\n\t\t\t\t\tconst dataset = /* @__PURE__ */ _merge(value1[index], value2[index]);\n\t\t\t\t\tif (dataset.issue) return dataset;\n\t\t\t\t\tnextValue[index] = dataset.value;\n\t\t\t\t}\n\t\t\t\treturn { value: nextValue };\n\t\t\t}\n\t\t}\n\t}\n\treturn { issue: true };\n}\n\n//#endregion\n//#region src/schemas/intersect/intersect.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction intersect(options, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"intersect\",\n\t\treference: intersect,\n\t\texpects: /* @__PURE__ */ _joinExpects(options.map((option) => option.expects), \"&\"),\n\t\tasync: false,\n\t\toptions,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (this.options.length) {\n\t\t\t\tconst input = dataset.value;\n\t\t\t\tlet outputs;\n\t\t\t\tdataset.typed = true;\n\t\t\t\tfor (const schema of this.options) {\n\t\t\t\t\tconst optionDataset = schema[\"~run\"]({ value: input }, config$1);\n\t\t\t\t\tif (optionDataset.issues) {\n\t\t\t\t\t\tif (dataset.issues) for (const issue of optionDataset.issues) dataset.issues.push(issue);\n\t\t\t\t\t\telse dataset.issues = optionDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!optionDataset.typed) dataset.typed = false;\n\t\t\t\t\tif (dataset.typed) if (outputs) outputs.push(optionDataset.value);\n\t\t\t\t\telse outputs = [optionDataset.value];\n\t\t\t\t}\n\t\t\t\tif (dataset.typed) {\n\t\t\t\t\tdataset.value = outputs[0];\n\t\t\t\t\tfor (let index = 1; index < outputs.length; index++) {\n\t\t\t\t\t\tconst mergeDataset = /* @__PURE__ */ _merge(dataset.value, outputs[index]);\n\t\t\t\t\t\tif (mergeDataset.issue) {\n\t\t\t\t\t\t\t_addIssue(this, \"type\", dataset, config$1, { received: \"unknown\" });\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdataset.value = mergeDataset.value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/intersect/intersectAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction intersectAsync(options, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"intersect\",\n\t\treference: intersectAsync,\n\t\texpects: /* @__PURE__ */ _joinExpects(options.map((option) => option.expects), \"&\"),\n\t\tasync: true,\n\t\toptions,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif (this.options.length) {\n\t\t\t\tconst input = dataset.value;\n\t\t\t\tlet outputs;\n\t\t\t\tdataset.typed = true;\n\t\t\t\tconst optionDatasets = await Promise.all(this.options.map((schema) => schema[\"~run\"]({ value: input }, config$1)));\n\t\t\t\tfor (const optionDataset of optionDatasets) {\n\t\t\t\t\tif (optionDataset.issues) {\n\t\t\t\t\t\tif (dataset.issues) for (const issue of optionDataset.issues) dataset.issues.push(issue);\n\t\t\t\t\t\telse dataset.issues = optionDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!optionDataset.typed) dataset.typed = false;\n\t\t\t\t\tif (dataset.typed) if (outputs) outputs.push(optionDataset.value);\n\t\t\t\t\telse outputs = [optionDataset.value];\n\t\t\t\t}\n\t\t\t\tif (dataset.typed) {\n\t\t\t\t\tdataset.value = outputs[0];\n\t\t\t\t\tfor (let index = 1; index < outputs.length; index++) {\n\t\t\t\t\t\tconst mergeDataset = /* @__PURE__ */ _merge(dataset.value, outputs[index]);\n\t\t\t\t\t\tif (mergeDataset.issue) {\n\t\t\t\t\t\t\t_addIssue(this, \"type\", dataset, config$1, { received: \"unknown\" });\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdataset.value = mergeDataset.value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/lazy/lazy.ts\n/**\n* Creates a lazy schema.\n*\n* @param getter The schema getter.\n*\n* @returns A lazy schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction lazy(getter) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"lazy\",\n\t\treference: lazy,\n\t\texpects: \"unknown\",\n\t\tasync: false,\n\t\tgetter,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\treturn this.getter(dataset.value)[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/lazy/lazyAsync.ts\n/**\n* Creates a lazy schema.\n*\n* @param getter The schema getter.\n*\n* @returns A lazy schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction lazyAsync(getter) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"lazy\",\n\t\treference: lazyAsync,\n\t\texpects: \"unknown\",\n\t\tasync: true,\n\t\tgetter,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\treturn (await this.getter(dataset.value))[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/literal/literal.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction literal(literal_, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"literal\",\n\t\treference: literal,\n\t\texpects: /* @__PURE__ */ _stringify(literal_),\n\t\tasync: false,\n\t\tliteral: literal_,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === this.literal) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/looseObject/looseObject.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction looseObject(entries$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"loose_object\",\n\t\treference: looseObject,\n\t\texpects: \"Object\",\n\t\tasync: false,\n\t\tentries: entries$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = {};\n\t\t\t\tfor (const key in this.entries) {\n\t\t\t\t\tconst valueSchema = this.entries[key];\n\t\t\t\t\tif (key in input || (valueSchema.type === \"exact_optional\" || valueSchema.type === \"optional\" || valueSchema.type === \"nullish\") && valueSchema.default !== void 0) {\n\t\t\t\t\t\tconst value$1 = key in input ? input[key] : /* @__PURE__ */ getDefault(valueSchema);\n\t\t\t\t\t\tconst valueDataset = valueSchema[\"~run\"]({ value: value$1 }, config$1);\n\t\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\t\tdataset.value[key] = valueDataset.value;\n\t\t\t\t\t} else if (valueSchema.fallback !== void 0) dataset.value[key] = /* @__PURE__ */ getFallback(valueSchema);\n\t\t\t\t\telse if (valueSchema.type !== \"exact_optional\" && valueSchema.type !== \"optional\" && valueSchema.type !== \"nullish\") {\n\t\t\t\t\t\t_addIssue(this, \"key\", dataset, config$1, {\n\t\t\t\t\t\t\tinput: void 0,\n\t\t\t\t\t\t\texpected: `\"${key}\"`,\n\t\t\t\t\t\t\tpath: [{\n\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tvalue: input[key]\n\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (config$1.abortEarly) break;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly) {\n\t\t\t\t\tfor (const key in input) if (/* @__PURE__ */ _isValidObjectKey(input, key) && !(key in this.entries)) dataset.value[key] = input[key];\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/looseObject/looseObjectAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction looseObjectAsync(entries$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"loose_object\",\n\t\treference: looseObjectAsync,\n\t\texpects: \"Object\",\n\t\tasync: true,\n\t\tentries: entries$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = {};\n\t\t\t\tconst valueDatasets = await Promise.all(Object.entries(this.entries).map(async ([key, valueSchema]) => {\n\t\t\t\t\tif (key in input || (valueSchema.type === \"exact_optional\" || valueSchema.type === \"optional\" || valueSchema.type === \"nullish\") && valueSchema.default !== void 0) {\n\t\t\t\t\t\tconst value$1 = key in input ? input[key] : await /* @__PURE__ */ getDefault(valueSchema);\n\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue$1,\n\t\t\t\t\t\t\tvalueSchema,\n\t\t\t\t\t\t\tawait valueSchema[\"~run\"]({ value: value$1 }, config$1)\n\t\t\t\t\t\t];\n\t\t\t\t\t}\n\t\t\t\t\treturn [\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tinput[key],\n\t\t\t\t\t\tvalueSchema,\n\t\t\t\t\t\tnull\n\t\t\t\t\t];\n\t\t\t\t}));\n\t\t\t\tfor (const [key, value$1, valueSchema, valueDataset] of valueDatasets) if (valueDataset) {\n\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value[key] = valueDataset.value;\n\t\t\t\t} else if (valueSchema.fallback !== void 0) dataset.value[key] = await /* @__PURE__ */ getFallback(valueSchema);\n\t\t\t\telse if (valueSchema.type !== \"exact_optional\" && valueSchema.type !== \"optional\" && valueSchema.type !== \"nullish\") {\n\t\t\t\t\t_addIssue(this, \"key\", dataset, config$1, {\n\t\t\t\t\t\tinput: void 0,\n\t\t\t\t\t\texpected: `\"${key}\"`,\n\t\t\t\t\t\tpath: [{\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t\t\tif (config$1.abortEarly) break;\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly) {\n\t\t\t\t\tfor (const key in input) if (/* @__PURE__ */ _isValidObjectKey(input, key) && !(key in this.entries)) dataset.value[key] = input[key];\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/looseTuple/looseTuple.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction looseTuple(items, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"loose_tuple\",\n\t\treference: looseTuple,\n\t\texpects: \"Array\",\n\t\tasync: false,\n\t\titems,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (Array.isArray(input)) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = [];\n\t\t\t\tfor (let key = 0; key < this.items.length; key++) {\n\t\t\t\t\tconst value$1 = input[key];\n\t\t\t\t\tconst itemDataset = this.items[key][\"~run\"]({ value: value$1 }, config$1);\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly) for (let key = this.items.length; key < input.length; key++) dataset.value.push(input[key]);\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/looseTuple/looseTupleAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction looseTupleAsync(items, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"loose_tuple\",\n\t\treference: looseTupleAsync,\n\t\texpects: \"Array\",\n\t\tasync: true,\n\t\titems,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (Array.isArray(input)) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = [];\n\t\t\t\tconst itemDatasets = await Promise.all(this.items.map(async (item, key) => {\n\t\t\t\t\tconst value$1 = input[key];\n\t\t\t\t\treturn [\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tvalue$1,\n\t\t\t\t\t\tawait item[\"~run\"]({ value: value$1 }, config$1)\n\t\t\t\t\t];\n\t\t\t\t}));\n\t\t\t\tfor (const [key, value$1, itemDataset] of itemDatasets) {\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly) for (let key = this.items.length; key < input.length; key++) dataset.value.push(input[key]);\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/map/map.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction map(key, value$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"map\",\n\t\treference: map,\n\t\texpects: \"Map\",\n\t\tasync: false,\n\t\tkey,\n\t\tvalue: value$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input instanceof Map) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = /* @__PURE__ */ new Map();\n\t\t\t\tfor (const [inputKey, inputValue] of input) {\n\t\t\t\t\tconst keyDataset = this.key[\"~run\"]({ value: inputKey }, config$1);\n\t\t\t\t\tif (keyDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"map\",\n\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey: inputKey,\n\t\t\t\t\t\t\tvalue: inputValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of keyDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = keyDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst valueDataset = this.value[\"~run\"]({ value: inputValue }, config$1);\n\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"map\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey: inputKey,\n\t\t\t\t\t\t\tvalue: inputValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!keyDataset.typed || !valueDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.set(keyDataset.value, valueDataset.value);\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/map/mapAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction mapAsync(key, value$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"map\",\n\t\treference: mapAsync,\n\t\texpects: \"Map\",\n\t\tasync: true,\n\t\tkey,\n\t\tvalue: value$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input instanceof Map) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = /* @__PURE__ */ new Map();\n\t\t\t\tconst datasets = await Promise.all([...input].map(([inputKey, inputValue]) => Promise.all([\n\t\t\t\t\tinputKey,\n\t\t\t\t\tinputValue,\n\t\t\t\t\tthis.key[\"~run\"]({ value: inputKey }, config$1),\n\t\t\t\t\tthis.value[\"~run\"]({ value: inputValue }, config$1)\n\t\t\t\t])));\n\t\t\t\tfor (const [inputKey, inputValue, keyDataset, valueDataset] of datasets) {\n\t\t\t\t\tif (keyDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"map\",\n\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey: inputKey,\n\t\t\t\t\t\t\tvalue: inputValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of keyDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = keyDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"map\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey: inputKey,\n\t\t\t\t\t\t\tvalue: inputValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!keyDataset.typed || !valueDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.set(keyDataset.value, valueDataset.value);\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/nan/nan.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nan(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"nan\",\n\t\treference: nan,\n\t\texpects: \"NaN\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (Number.isNaN(dataset.value)) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/never/never.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction never(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"never\",\n\t\treference: never,\n\t\texpects: \"never\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\t_addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/nonNullable/nonNullable.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nonNullable(wrapped, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"non_nullable\",\n\t\treference: nonNullable,\n\t\texpects: \"!null\",\n\t\tasync: false,\n\t\twrapped,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value !== null) dataset = this.wrapped[\"~run\"](dataset, config$1);\n\t\t\tif (dataset.value === null) _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/nonNullable/nonNullableAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nonNullableAsync(wrapped, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"non_nullable\",\n\t\treference: nonNullableAsync,\n\t\texpects: \"!null\",\n\t\tasync: true,\n\t\twrapped,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value !== null) dataset = await this.wrapped[\"~run\"](dataset, config$1);\n\t\t\tif (dataset.value === null) _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/nonNullish/nonNullish.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nonNullish(wrapped, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"non_nullish\",\n\t\treference: nonNullish,\n\t\texpects: \"(!null & !undefined)\",\n\t\tasync: false,\n\t\twrapped,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (!(dataset.value === null || dataset.value === void 0)) dataset = this.wrapped[\"~run\"](dataset, config$1);\n\t\t\tif (dataset.value === null || dataset.value === void 0) _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/nonNullish/nonNullishAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nonNullishAsync(wrapped, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"non_nullish\",\n\t\treference: nonNullishAsync,\n\t\texpects: \"(!null & !undefined)\",\n\t\tasync: true,\n\t\twrapped,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif (!(dataset.value === null || dataset.value === void 0)) dataset = await this.wrapped[\"~run\"](dataset, config$1);\n\t\t\tif (dataset.value === null || dataset.value === void 0) _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/nonOptional/nonOptional.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nonOptional(wrapped, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"non_optional\",\n\t\treference: nonOptional,\n\t\texpects: \"!undefined\",\n\t\tasync: false,\n\t\twrapped,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value !== void 0) dataset = this.wrapped[\"~run\"](dataset, config$1);\n\t\t\tif (dataset.value === void 0) _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/nonOptional/nonOptionalAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nonOptionalAsync(wrapped, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"non_optional\",\n\t\treference: nonOptionalAsync,\n\t\texpects: \"!undefined\",\n\t\tasync: true,\n\t\twrapped,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value !== void 0) dataset = await this.wrapped[\"~run\"](dataset, config$1);\n\t\t\tif (dataset.value === void 0) _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/null/null.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction null_(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"null\",\n\t\treference: null_,\n\t\texpects: \"null\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === null) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/nullable/nullable.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nullable(wrapped, default_) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"nullable\",\n\t\treference: nullable,\n\t\texpects: `(${wrapped.expects} | null)`,\n\t\tasync: false,\n\t\twrapped,\n\t\tdefault: default_,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === null) {\n\t\t\t\tif (this.default !== void 0) dataset.value = /* @__PURE__ */ getDefault(this, dataset, config$1);\n\t\t\t\tif (dataset.value === null) {\n\t\t\t\t\tdataset.typed = true;\n\t\t\t\t\treturn dataset;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.wrapped[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/nullable/nullableAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nullableAsync(wrapped, default_) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"nullable\",\n\t\treference: nullableAsync,\n\t\texpects: `(${wrapped.expects} | null)`,\n\t\tasync: true,\n\t\twrapped,\n\t\tdefault: default_,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === null) {\n\t\t\t\tif (this.default !== void 0) dataset.value = await /* @__PURE__ */ getDefault(this, dataset, config$1);\n\t\t\t\tif (dataset.value === null) {\n\t\t\t\t\tdataset.typed = true;\n\t\t\t\t\treturn dataset;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.wrapped[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/nullish/nullish.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nullish(wrapped, default_) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"nullish\",\n\t\treference: nullish,\n\t\texpects: `(${wrapped.expects} | null | undefined)`,\n\t\tasync: false,\n\t\twrapped,\n\t\tdefault: default_,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === null || dataset.value === void 0) {\n\t\t\t\tif (this.default !== void 0) dataset.value = /* @__PURE__ */ getDefault(this, dataset, config$1);\n\t\t\t\tif (dataset.value === null || dataset.value === void 0) {\n\t\t\t\t\tdataset.typed = true;\n\t\t\t\t\treturn dataset;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.wrapped[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/nullish/nullishAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nullishAsync(wrapped, default_) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"nullish\",\n\t\treference: nullishAsync,\n\t\texpects: `(${wrapped.expects} | null | undefined)`,\n\t\tasync: true,\n\t\twrapped,\n\t\tdefault: default_,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === null || dataset.value === void 0) {\n\t\t\t\tif (this.default !== void 0) dataset.value = await /* @__PURE__ */ getDefault(this, dataset, config$1);\n\t\t\t\tif (dataset.value === null || dataset.value === void 0) {\n\t\t\t\t\tdataset.typed = true;\n\t\t\t\t\treturn dataset;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.wrapped[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/number/number.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction number(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"number\",\n\t\treference: number,\n\t\texpects: \"number\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (typeof dataset.value === \"number\" && !isNaN(dataset.value)) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/object/object.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction object(entries$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"object\",\n\t\treference: object,\n\t\texpects: \"Object\",\n\t\tasync: false,\n\t\tentries: entries$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = {};\n\t\t\t\tfor (const key in this.entries) {\n\t\t\t\t\tconst valueSchema = this.entries[key];\n\t\t\t\t\tif (key in input || (valueSchema.type === \"exact_optional\" || valueSchema.type === \"optional\" || valueSchema.type === \"nullish\") && valueSchema.default !== void 0) {\n\t\t\t\t\t\tconst value$1 = key in input ? input[key] : /* @__PURE__ */ getDefault(valueSchema);\n\t\t\t\t\t\tconst valueDataset = valueSchema[\"~run\"]({ value: value$1 }, config$1);\n\t\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\t\tdataset.value[key] = valueDataset.value;\n\t\t\t\t\t} else if (valueSchema.fallback !== void 0) dataset.value[key] = /* @__PURE__ */ getFallback(valueSchema);\n\t\t\t\t\telse if (valueSchema.type !== \"exact_optional\" && valueSchema.type !== \"optional\" && valueSchema.type !== \"nullish\") {\n\t\t\t\t\t\t_addIssue(this, \"key\", dataset, config$1, {\n\t\t\t\t\t\t\tinput: void 0,\n\t\t\t\t\t\t\texpected: `\"${key}\"`,\n\t\t\t\t\t\t\tpath: [{\n\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tvalue: input[key]\n\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (config$1.abortEarly) break;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/object/objectAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction objectAsync(entries$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"object\",\n\t\treference: objectAsync,\n\t\texpects: \"Object\",\n\t\tasync: true,\n\t\tentries: entries$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = {};\n\t\t\t\tconst valueDatasets = await Promise.all(Object.entries(this.entries).map(async ([key, valueSchema]) => {\n\t\t\t\t\tif (key in input || (valueSchema.type === \"exact_optional\" || valueSchema.type === \"optional\" || valueSchema.type === \"nullish\") && valueSchema.default !== void 0) {\n\t\t\t\t\t\tconst value$1 = key in input ? input[key] : await /* @__PURE__ */ getDefault(valueSchema);\n\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue$1,\n\t\t\t\t\t\t\tvalueSchema,\n\t\t\t\t\t\t\tawait valueSchema[\"~run\"]({ value: value$1 }, config$1)\n\t\t\t\t\t\t];\n\t\t\t\t\t}\n\t\t\t\t\treturn [\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tinput[key],\n\t\t\t\t\t\tvalueSchema,\n\t\t\t\t\t\tnull\n\t\t\t\t\t];\n\t\t\t\t}));\n\t\t\t\tfor (const [key, value$1, valueSchema, valueDataset] of valueDatasets) if (valueDataset) {\n\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value[key] = valueDataset.value;\n\t\t\t\t} else if (valueSchema.fallback !== void 0) dataset.value[key] = await /* @__PURE__ */ getFallback(valueSchema);\n\t\t\t\telse if (valueSchema.type !== \"exact_optional\" && valueSchema.type !== \"optional\" && valueSchema.type !== \"nullish\") {\n\t\t\t\t\t_addIssue(this, \"key\", dataset, config$1, {\n\t\t\t\t\t\tinput: void 0,\n\t\t\t\t\t\texpected: `\"${key}\"`,\n\t\t\t\t\t\tpath: [{\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t\t\tif (config$1.abortEarly) break;\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/objectWithRest/objectWithRest.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction objectWithRest(entries$1, rest, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"object_with_rest\",\n\t\treference: objectWithRest,\n\t\texpects: \"Object\",\n\t\tasync: false,\n\t\tentries: entries$1,\n\t\trest,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = {};\n\t\t\t\tfor (const key in this.entries) {\n\t\t\t\t\tconst valueSchema = this.entries[key];\n\t\t\t\t\tif (key in input || (valueSchema.type === \"exact_optional\" || valueSchema.type === \"optional\" || valueSchema.type === \"nullish\") && valueSchema.default !== void 0) {\n\t\t\t\t\t\tconst value$1 = key in input ? input[key] : /* @__PURE__ */ getDefault(valueSchema);\n\t\t\t\t\t\tconst valueDataset = valueSchema[\"~run\"]({ value: value$1 }, config$1);\n\t\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\t\tdataset.value[key] = valueDataset.value;\n\t\t\t\t\t} else if (valueSchema.fallback !== void 0) dataset.value[key] = /* @__PURE__ */ getFallback(valueSchema);\n\t\t\t\t\telse if (valueSchema.type !== \"exact_optional\" && valueSchema.type !== \"optional\" && valueSchema.type !== \"nullish\") {\n\t\t\t\t\t\t_addIssue(this, \"key\", dataset, config$1, {\n\t\t\t\t\t\t\tinput: void 0,\n\t\t\t\t\t\t\texpected: `\"${key}\"`,\n\t\t\t\t\t\t\tpath: [{\n\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tvalue: input[key]\n\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (config$1.abortEarly) break;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly) {\n\t\t\t\t\tfor (const key in input) if (/* @__PURE__ */ _isValidObjectKey(input, key) && !(key in this.entries)) {\n\t\t\t\t\t\tconst valueDataset = this.rest[\"~run\"]({ value: input[key] }, config$1);\n\t\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tvalue: input[key]\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\t\tdataset.value[key] = valueDataset.value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/objectWithRest/objectWithRestAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction objectWithRestAsync(entries$1, rest, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"object_with_rest\",\n\t\treference: objectWithRestAsync,\n\t\texpects: \"Object\",\n\t\tasync: true,\n\t\tentries: entries$1,\n\t\trest,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = {};\n\t\t\t\tconst [normalDatasets, restDatasets] = await Promise.all([Promise.all(Object.entries(this.entries).map(async ([key, valueSchema]) => {\n\t\t\t\t\tif (key in input || (valueSchema.type === \"exact_optional\" || valueSchema.type === \"optional\" || valueSchema.type === \"nullish\") && valueSchema.default !== void 0) {\n\t\t\t\t\t\tconst value$1 = key in input ? input[key] : await /* @__PURE__ */ getDefault(valueSchema);\n\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue$1,\n\t\t\t\t\t\t\tvalueSchema,\n\t\t\t\t\t\t\tawait valueSchema[\"~run\"]({ value: value$1 }, config$1)\n\t\t\t\t\t\t];\n\t\t\t\t\t}\n\t\t\t\t\treturn [\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tinput[key],\n\t\t\t\t\t\tvalueSchema,\n\t\t\t\t\t\tnull\n\t\t\t\t\t];\n\t\t\t\t})), Promise.all(Object.entries(input).filter(([key]) => /* @__PURE__ */ _isValidObjectKey(input, key) && !(key in this.entries)).map(async ([key, value$1]) => [\n\t\t\t\t\tkey,\n\t\t\t\t\tvalue$1,\n\t\t\t\t\tawait this.rest[\"~run\"]({ value: value$1 }, config$1)\n\t\t\t\t]))]);\n\t\t\t\tfor (const [key, value$1, valueSchema, valueDataset] of normalDatasets) if (valueDataset) {\n\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value[key] = valueDataset.value;\n\t\t\t\t} else if (valueSchema.fallback !== void 0) dataset.value[key] = await /* @__PURE__ */ getFallback(valueSchema);\n\t\t\t\telse if (valueSchema.type !== \"exact_optional\" && valueSchema.type !== \"optional\" && valueSchema.type !== \"nullish\") {\n\t\t\t\t\t_addIssue(this, \"key\", dataset, config$1, {\n\t\t\t\t\t\tinput: void 0,\n\t\t\t\t\t\texpected: `\"${key}\"`,\n\t\t\t\t\t\tpath: [{\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t\t\tif (config$1.abortEarly) break;\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly) for (const [key, value$1, valueDataset] of restDatasets) {\n\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value[key] = valueDataset.value;\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/optional/optional.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction optional(wrapped, default_) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"optional\",\n\t\treference: optional,\n\t\texpects: `(${wrapped.expects} | undefined)`,\n\t\tasync: false,\n\t\twrapped,\n\t\tdefault: default_,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === void 0) {\n\t\t\t\tif (this.default !== void 0) dataset.value = /* @__PURE__ */ getDefault(this, dataset, config$1);\n\t\t\t\tif (dataset.value === void 0) {\n\t\t\t\t\tdataset.typed = true;\n\t\t\t\t\treturn dataset;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.wrapped[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/optional/optionalAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction optionalAsync(wrapped, default_) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"optional\",\n\t\treference: optionalAsync,\n\t\texpects: `(${wrapped.expects} | undefined)`,\n\t\tasync: true,\n\t\twrapped,\n\t\tdefault: default_,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === void 0) {\n\t\t\t\tif (this.default !== void 0) dataset.value = await /* @__PURE__ */ getDefault(this, dataset, config$1);\n\t\t\t\tif (dataset.value === void 0) {\n\t\t\t\t\tdataset.typed = true;\n\t\t\t\t\treturn dataset;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.wrapped[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/picklist/picklist.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction picklist(options, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"picklist\",\n\t\treference: picklist,\n\t\texpects: /* @__PURE__ */ _joinExpects(options.map(_stringify), \"|\"),\n\t\tasync: false,\n\t\toptions,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (this.options.includes(dataset.value)) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/promise/promise.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction promise(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"promise\",\n\t\treference: promise,\n\t\texpects: \"Promise\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value instanceof Promise) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/record/record.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction record(key, value$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"record\",\n\t\treference: record,\n\t\texpects: \"Object\",\n\t\tasync: false,\n\t\tkey,\n\t\tvalue: value$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = {};\n\t\t\t\tfor (const entryKey in input) if (/* @__PURE__ */ _isValidObjectKey(input, entryKey)) {\n\t\t\t\t\tconst entryValue = input[entryKey];\n\t\t\t\t\tconst keyDataset = this.key[\"~run\"]({ value: entryKey }, config$1);\n\t\t\t\t\tif (keyDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey: entryKey,\n\t\t\t\t\t\t\tvalue: entryValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of keyDataset.issues) {\n\t\t\t\t\t\t\tissue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = keyDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst valueDataset = this.value[\"~run\"]({ value: entryValue }, config$1);\n\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey: entryKey,\n\t\t\t\t\t\t\tvalue: entryValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!keyDataset.typed || !valueDataset.typed) dataset.typed = false;\n\t\t\t\t\tif (keyDataset.typed) dataset.value[keyDataset.value] = valueDataset.value;\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/record/recordAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction recordAsync(key, value$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"record\",\n\t\treference: recordAsync,\n\t\texpects: \"Object\",\n\t\tasync: true,\n\t\tkey,\n\t\tvalue: value$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = {};\n\t\t\t\tconst datasets = await Promise.all(Object.entries(input).filter(([key$1]) => /* @__PURE__ */ _isValidObjectKey(input, key$1)).map(([entryKey, entryValue]) => Promise.all([\n\t\t\t\t\tentryKey,\n\t\t\t\t\tentryValue,\n\t\t\t\t\tthis.key[\"~run\"]({ value: entryKey }, config$1),\n\t\t\t\t\tthis.value[\"~run\"]({ value: entryValue }, config$1)\n\t\t\t\t])));\n\t\t\t\tfor (const [entryKey, entryValue, keyDataset, valueDataset] of datasets) {\n\t\t\t\t\tif (keyDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey: entryKey,\n\t\t\t\t\t\t\tvalue: entryValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of keyDataset.issues) {\n\t\t\t\t\t\t\tissue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = keyDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey: entryKey,\n\t\t\t\t\t\t\tvalue: entryValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!keyDataset.typed || !valueDataset.typed) dataset.typed = false;\n\t\t\t\t\tif (keyDataset.typed) dataset.value[keyDataset.value] = valueDataset.value;\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/set/set.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction set(value$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"set\",\n\t\treference: set,\n\t\texpects: \"Set\",\n\t\tasync: false,\n\t\tvalue: value$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input instanceof Set) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = /* @__PURE__ */ new Set();\n\t\t\t\tfor (const inputValue of input) {\n\t\t\t\t\tconst valueDataset = this.value[\"~run\"]({ value: inputValue }, config$1);\n\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"set\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey: null,\n\t\t\t\t\t\t\tvalue: inputValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.add(valueDataset.value);\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/set/setAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction setAsync(value$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"set\",\n\t\treference: setAsync,\n\t\texpects: \"Set\",\n\t\tasync: true,\n\t\tvalue: value$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input instanceof Set) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = /* @__PURE__ */ new Set();\n\t\t\t\tconst valueDatasets = await Promise.all([...input].map(async (inputValue) => [inputValue, await this.value[\"~run\"]({ value: inputValue }, config$1)]));\n\t\t\t\tfor (const [inputValue, valueDataset] of valueDatasets) {\n\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"set\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey: null,\n\t\t\t\t\t\t\tvalue: inputValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.add(valueDataset.value);\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/strictObject/strictObject.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction strictObject(entries$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"strict_object\",\n\t\treference: strictObject,\n\t\texpects: \"Object\",\n\t\tasync: false,\n\t\tentries: entries$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = {};\n\t\t\t\tfor (const key in this.entries) {\n\t\t\t\t\tconst valueSchema = this.entries[key];\n\t\t\t\t\tif (key in input || (valueSchema.type === \"exact_optional\" || valueSchema.type === \"optional\" || valueSchema.type === \"nullish\") && valueSchema.default !== void 0) {\n\t\t\t\t\t\tconst value$1 = key in input ? input[key] : /* @__PURE__ */ getDefault(valueSchema);\n\t\t\t\t\t\tconst valueDataset = valueSchema[\"~run\"]({ value: value$1 }, config$1);\n\t\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\t\tdataset.value[key] = valueDataset.value;\n\t\t\t\t\t} else if (valueSchema.fallback !== void 0) dataset.value[key] = /* @__PURE__ */ getFallback(valueSchema);\n\t\t\t\t\telse if (valueSchema.type !== \"exact_optional\" && valueSchema.type !== \"optional\" && valueSchema.type !== \"nullish\") {\n\t\t\t\t\t\t_addIssue(this, \"key\", dataset, config$1, {\n\t\t\t\t\t\t\tinput: void 0,\n\t\t\t\t\t\t\texpected: `\"${key}\"`,\n\t\t\t\t\t\t\tpath: [{\n\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tvalue: input[key]\n\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (config$1.abortEarly) break;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly) {\n\t\t\t\t\tfor (const key in input) if (!(key in this.entries)) {\n\t\t\t\t\t\t_addIssue(this, \"key\", dataset, config$1, {\n\t\t\t\t\t\t\tinput: key,\n\t\t\t\t\t\t\texpected: \"never\",\n\t\t\t\t\t\t\tpath: [{\n\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tvalue: input[key]\n\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/strictObject/strictObjectAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction strictObjectAsync(entries$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"strict_object\",\n\t\treference: strictObjectAsync,\n\t\texpects: \"Object\",\n\t\tasync: true,\n\t\tentries: entries$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = {};\n\t\t\t\tconst valueDatasets = await Promise.all(Object.entries(this.entries).map(async ([key, valueSchema]) => {\n\t\t\t\t\tif (key in input || (valueSchema.type === \"exact_optional\" || valueSchema.type === \"optional\" || valueSchema.type === \"nullish\") && valueSchema.default !== void 0) {\n\t\t\t\t\t\tconst value$1 = key in input ? input[key] : await /* @__PURE__ */ getDefault(valueSchema);\n\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue$1,\n\t\t\t\t\t\t\tvalueSchema,\n\t\t\t\t\t\t\tawait valueSchema[\"~run\"]({ value: value$1 }, config$1)\n\t\t\t\t\t\t];\n\t\t\t\t\t}\n\t\t\t\t\treturn [\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tinput[key],\n\t\t\t\t\t\tvalueSchema,\n\t\t\t\t\t\tnull\n\t\t\t\t\t];\n\t\t\t\t}));\n\t\t\t\tfor (const [key, value$1, valueSchema, valueDataset] of valueDatasets) if (valueDataset) {\n\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value[key] = valueDataset.value;\n\t\t\t\t} else if (valueSchema.fallback !== void 0) dataset.value[key] = await /* @__PURE__ */ getFallback(valueSchema);\n\t\t\t\telse if (valueSchema.type !== \"exact_optional\" && valueSchema.type !== \"optional\" && valueSchema.type !== \"nullish\") {\n\t\t\t\t\t_addIssue(this, \"key\", dataset, config$1, {\n\t\t\t\t\t\tinput: void 0,\n\t\t\t\t\t\texpected: `\"${key}\"`,\n\t\t\t\t\t\tpath: [{\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t\t\tif (config$1.abortEarly) break;\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly) {\n\t\t\t\t\tfor (const key in input) if (!(key in this.entries)) {\n\t\t\t\t\t\t_addIssue(this, \"key\", dataset, config$1, {\n\t\t\t\t\t\t\tinput: key,\n\t\t\t\t\t\t\texpected: \"never\",\n\t\t\t\t\t\t\tpath: [{\n\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tvalue: input[key]\n\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/strictTuple/strictTuple.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction strictTuple(items, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"strict_tuple\",\n\t\treference: strictTuple,\n\t\texpects: \"Array\",\n\t\tasync: false,\n\t\titems,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (Array.isArray(input)) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = [];\n\t\t\t\tfor (let key = 0; key < this.items.length; key++) {\n\t\t\t\t\tconst value$1 = input[key];\n\t\t\t\t\tconst itemDataset = this.items[key][\"~run\"]({ value: value$1 }, config$1);\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t\tif (!(dataset.issues && config$1.abortEarly) && this.items.length < input.length) _addIssue(this, \"type\", dataset, config$1, {\n\t\t\t\t\tinput: input[this.items.length],\n\t\t\t\t\texpected: \"never\",\n\t\t\t\t\tpath: [{\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\tinput,\n\t\t\t\t\t\tkey: this.items.length,\n\t\t\t\t\t\tvalue: input[this.items.length]\n\t\t\t\t\t}]\n\t\t\t\t});\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/strictTuple/strictTupleAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction strictTupleAsync(items, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"strict_tuple\",\n\t\treference: strictTupleAsync,\n\t\texpects: \"Array\",\n\t\tasync: true,\n\t\titems,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (Array.isArray(input)) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = [];\n\t\t\t\tconst itemDatasets = await Promise.all(this.items.map(async (item, key) => {\n\t\t\t\t\tconst value$1 = input[key];\n\t\t\t\t\treturn [\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tvalue$1,\n\t\t\t\t\t\tawait item[\"~run\"]({ value: value$1 }, config$1)\n\t\t\t\t\t];\n\t\t\t\t}));\n\t\t\t\tfor (const [key, value$1, itemDataset] of itemDatasets) {\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t\tif (!(dataset.issues && config$1.abortEarly) && this.items.length < input.length) _addIssue(this, \"type\", dataset, config$1, {\n\t\t\t\t\tinput: input[this.items.length],\n\t\t\t\t\texpected: \"never\",\n\t\t\t\t\tpath: [{\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\tinput,\n\t\t\t\t\t\tkey: this.items.length,\n\t\t\t\t\t\tvalue: input[this.items.length]\n\t\t\t\t\t}]\n\t\t\t\t});\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/string/string.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction string(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"string\",\n\t\treference: string,\n\t\texpects: \"string\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (typeof dataset.value === \"string\") dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/symbol/symbol.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction symbol(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"symbol\",\n\t\treference: symbol,\n\t\texpects: \"symbol\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (typeof dataset.value === \"symbol\") dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/tuple/tuple.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction tuple(items, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"tuple\",\n\t\treference: tuple,\n\t\texpects: \"Array\",\n\t\tasync: false,\n\t\titems,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (Array.isArray(input)) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = [];\n\t\t\t\tfor (let key = 0; key < this.items.length; key++) {\n\t\t\t\t\tconst value$1 = input[key];\n\t\t\t\t\tconst itemDataset = this.items[key][\"~run\"]({ value: value$1 }, config$1);\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/tuple/tupleAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction tupleAsync(items, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"tuple\",\n\t\treference: tupleAsync,\n\t\texpects: \"Array\",\n\t\tasync: true,\n\t\titems,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (Array.isArray(input)) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = [];\n\t\t\t\tconst itemDatasets = await Promise.all(this.items.map(async (item, key) => {\n\t\t\t\t\tconst value$1 = input[key];\n\t\t\t\t\treturn [\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tvalue$1,\n\t\t\t\t\t\tawait item[\"~run\"]({ value: value$1 }, config$1)\n\t\t\t\t\t];\n\t\t\t\t}));\n\t\t\t\tfor (const [key, value$1, itemDataset] of itemDatasets) {\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/tupleWithRest/tupleWithRest.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction tupleWithRest(items, rest, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"tuple_with_rest\",\n\t\treference: tupleWithRest,\n\t\texpects: \"Array\",\n\t\tasync: false,\n\t\titems,\n\t\trest,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (Array.isArray(input)) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = [];\n\t\t\t\tfor (let key = 0; key < this.items.length; key++) {\n\t\t\t\t\tconst value$1 = input[key];\n\t\t\t\t\tconst itemDataset = this.items[key][\"~run\"]({ value: value$1 }, config$1);\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly) for (let key = this.items.length; key < input.length; key++) {\n\t\t\t\t\tconst value$1 = input[key];\n\t\t\t\t\tconst itemDataset = this.rest[\"~run\"]({ value: value$1 }, config$1);\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/tupleWithRest/tupleWithRestAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction tupleWithRestAsync(items, rest, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"tuple_with_rest\",\n\t\treference: tupleWithRestAsync,\n\t\texpects: \"Array\",\n\t\tasync: true,\n\t\titems,\n\t\trest,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (Array.isArray(input)) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = [];\n\t\t\t\tconst [normalDatasets, restDatasets] = await Promise.all([Promise.all(this.items.map(async (item, key) => {\n\t\t\t\t\tconst value$1 = input[key];\n\t\t\t\t\treturn [\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tvalue$1,\n\t\t\t\t\t\tawait item[\"~run\"]({ value: value$1 }, config$1)\n\t\t\t\t\t];\n\t\t\t\t})), Promise.all(input.slice(this.items.length).map(async (value$1, key) => {\n\t\t\t\t\treturn [\n\t\t\t\t\t\tkey + this.items.length,\n\t\t\t\t\t\tvalue$1,\n\t\t\t\t\t\tawait this.rest[\"~run\"]({ value: value$1 }, config$1)\n\t\t\t\t\t];\n\t\t\t\t}))]);\n\t\t\t\tfor (const [key, value$1, itemDataset] of normalDatasets) {\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly) for (const [key, value$1, itemDataset] of restDatasets) {\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/undefined/undefined.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction undefined_(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"undefined\",\n\t\treference: undefined_,\n\t\texpects: \"undefined\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === void 0) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/undefinedable/undefinedable.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction undefinedable(wrapped, default_) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"undefinedable\",\n\t\treference: undefinedable,\n\t\texpects: `(${wrapped.expects} | undefined)`,\n\t\tasync: false,\n\t\twrapped,\n\t\tdefault: default_,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === void 0) {\n\t\t\t\tif (this.default !== void 0) dataset.value = /* @__PURE__ */ getDefault(this, dataset, config$1);\n\t\t\t\tif (dataset.value === void 0) {\n\t\t\t\t\tdataset.typed = true;\n\t\t\t\t\treturn dataset;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.wrapped[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/undefinedable/undefinedableAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction undefinedableAsync(wrapped, default_) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"undefinedable\",\n\t\treference: undefinedableAsync,\n\t\texpects: `(${wrapped.expects} | undefined)`,\n\t\tasync: true,\n\t\twrapped,\n\t\tdefault: default_,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === void 0) {\n\t\t\t\tif (this.default !== void 0) dataset.value = await /* @__PURE__ */ getDefault(this, dataset, config$1);\n\t\t\t\tif (dataset.value === void 0) {\n\t\t\t\t\tdataset.typed = true;\n\t\t\t\t\treturn dataset;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.wrapped[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/union/utils/_subIssues/_subIssues.ts\n/**\n* Returns the sub issues of the provided datasets for the union issue.\n*\n* @param datasets The datasets.\n*\n* @returns The sub issues.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _subIssues(datasets) {\n\tlet issues;\n\tif (datasets) for (const dataset of datasets) if (issues) for (const issue of dataset.issues) issues.push(issue);\n\telse issues = dataset.issues;\n\treturn issues;\n}\n\n//#endregion\n//#region src/schemas/union/union.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction union(options, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"union\",\n\t\treference: union,\n\t\texpects: /* @__PURE__ */ _joinExpects(options.map((option) => option.expects), \"|\"),\n\t\tasync: false,\n\t\toptions,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tlet validDataset;\n\t\t\tlet typedDatasets;\n\t\t\tlet untypedDatasets;\n\t\t\tfor (const schema of this.options) {\n\t\t\t\tconst optionDataset = schema[\"~run\"]({ value: dataset.value }, config$1);\n\t\t\t\tif (optionDataset.typed) if (optionDataset.issues) if (typedDatasets) typedDatasets.push(optionDataset);\n\t\t\t\telse typedDatasets = [optionDataset];\n\t\t\t\telse {\n\t\t\t\t\tvalidDataset = optionDataset;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse if (untypedDatasets) untypedDatasets.push(optionDataset);\n\t\t\t\telse untypedDatasets = [optionDataset];\n\t\t\t}\n\t\t\tif (validDataset) return validDataset;\n\t\t\tif (typedDatasets) {\n\t\t\t\tif (typedDatasets.length === 1) return typedDatasets[0];\n\t\t\t\t_addIssue(this, \"type\", dataset, config$1, { issues: /* @__PURE__ */ _subIssues(typedDatasets) });\n\t\t\t\tdataset.typed = true;\n\t\t\t} else if (untypedDatasets?.length === 1) return untypedDatasets[0];\n\t\t\telse _addIssue(this, \"type\", dataset, config$1, { issues: /* @__PURE__ */ _subIssues(untypedDatasets) });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/union/unionAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction unionAsync(options, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"union\",\n\t\treference: unionAsync,\n\t\texpects: /* @__PURE__ */ _joinExpects(options.map((option) => option.expects), \"|\"),\n\t\tasync: true,\n\t\toptions,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tlet validDataset;\n\t\t\tlet typedDatasets;\n\t\t\tlet untypedDatasets;\n\t\t\tfor (const schema of this.options) {\n\t\t\t\tconst optionDataset = await schema[\"~run\"]({ value: dataset.value }, config$1);\n\t\t\t\tif (optionDataset.typed) if (optionDataset.issues) if (typedDatasets) typedDatasets.push(optionDataset);\n\t\t\t\telse typedDatasets = [optionDataset];\n\t\t\t\telse {\n\t\t\t\t\tvalidDataset = optionDataset;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse if (untypedDatasets) untypedDatasets.push(optionDataset);\n\t\t\t\telse untypedDatasets = [optionDataset];\n\t\t\t}\n\t\t\tif (validDataset) return validDataset;\n\t\t\tif (typedDatasets) {\n\t\t\t\tif (typedDatasets.length === 1) return typedDatasets[0];\n\t\t\t\t_addIssue(this, \"type\", dataset, config$1, { issues: /* @__PURE__ */ _subIssues(typedDatasets) });\n\t\t\t\tdataset.typed = true;\n\t\t\t} else if (untypedDatasets?.length === 1) return untypedDatasets[0];\n\t\t\telse _addIssue(this, \"type\", dataset, config$1, { issues: /* @__PURE__ */ _subIssues(untypedDatasets) });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/unknown/unknown.ts\n/**\n* Creates a unknown schema.\n*\n* @returns A unknown schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction unknown() {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"unknown\",\n\t\treference: unknown,\n\t\texpects: \"unknown\",\n\t\tasync: false,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.typed = true;\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/variant/variant.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction variant(key, options, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"variant\",\n\t\treference: variant,\n\t\texpects: \"Object\",\n\t\tasync: false,\n\t\tkey,\n\t\toptions,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tlet outputDataset;\n\t\t\t\tlet maxDiscriminatorPriority = 0;\n\t\t\t\tlet invalidDiscriminatorKey = this.key;\n\t\t\t\tlet expectedDiscriminators = [];\n\t\t\t\tconst parseOptions = (variant$1, allKeys) => {\n\t\t\t\t\tfor (const schema of variant$1.options) {\n\t\t\t\t\t\tif (schema.type === \"variant\") parseOptions(schema, new Set(allKeys).add(schema.key));\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tlet keysAreValid = true;\n\t\t\t\t\t\t\tlet currentPriority = 0;\n\t\t\t\t\t\t\tfor (const currentKey of allKeys) {\n\t\t\t\t\t\t\t\tconst discriminatorSchema = schema.entries[currentKey];\n\t\t\t\t\t\t\t\tif (currentKey in input ? discriminatorSchema[\"~run\"]({\n\t\t\t\t\t\t\t\t\ttyped: false,\n\t\t\t\t\t\t\t\t\tvalue: input[currentKey]\n\t\t\t\t\t\t\t\t}, ABORT_EARLY_CONFIG).issues : discriminatorSchema.type !== \"exact_optional\" && discriminatorSchema.type !== \"optional\" && discriminatorSchema.type !== \"nullish\") {\n\t\t\t\t\t\t\t\t\tkeysAreValid = false;\n\t\t\t\t\t\t\t\t\tif (invalidDiscriminatorKey !== currentKey && (maxDiscriminatorPriority < currentPriority || maxDiscriminatorPriority === currentPriority && currentKey in input && !(invalidDiscriminatorKey in input))) {\n\t\t\t\t\t\t\t\t\t\tmaxDiscriminatorPriority = currentPriority;\n\t\t\t\t\t\t\t\t\t\tinvalidDiscriminatorKey = currentKey;\n\t\t\t\t\t\t\t\t\t\texpectedDiscriminators = [];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (invalidDiscriminatorKey === currentKey) expectedDiscriminators.push(schema.entries[currentKey].expects);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcurrentPriority++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (keysAreValid) {\n\t\t\t\t\t\t\t\tconst optionDataset = schema[\"~run\"]({ value: input }, config$1);\n\t\t\t\t\t\t\t\tif (!outputDataset || !outputDataset.typed && optionDataset.typed) outputDataset = optionDataset;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (outputDataset && !outputDataset.issues) break;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tparseOptions(this, new Set([this.key]));\n\t\t\t\tif (outputDataset) return outputDataset;\n\t\t\t\t_addIssue(this, \"type\", dataset, config$1, {\n\t\t\t\t\tinput: input[invalidDiscriminatorKey],\n\t\t\t\t\texpected: /* @__PURE__ */ _joinExpects(expectedDiscriminators, \"|\"),\n\t\t\t\t\tpath: [{\n\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\tinput,\n\t\t\t\t\t\tkey: invalidDiscriminatorKey,\n\t\t\t\t\t\tvalue: input[invalidDiscriminatorKey]\n\t\t\t\t\t}]\n\t\t\t\t});\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/variant/variantAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction variantAsync(key, options, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"variant\",\n\t\treference: variantAsync,\n\t\texpects: \"Object\",\n\t\tasync: true,\n\t\tkey,\n\t\toptions,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tlet outputDataset;\n\t\t\t\tlet maxDiscriminatorPriority = 0;\n\t\t\t\tlet invalidDiscriminatorKey = this.key;\n\t\t\t\tlet expectedDiscriminators = [];\n\t\t\t\tconst parseOptions = async (variant$1, allKeys) => {\n\t\t\t\t\tfor (const schema of variant$1.options) {\n\t\t\t\t\t\tif (schema.type === \"variant\") await parseOptions(schema, new Set(allKeys).add(schema.key));\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tlet keysAreValid = true;\n\t\t\t\t\t\t\tlet currentPriority = 0;\n\t\t\t\t\t\t\tfor (const currentKey of allKeys) {\n\t\t\t\t\t\t\t\tconst discriminatorSchema = schema.entries[currentKey];\n\t\t\t\t\t\t\t\tif (currentKey in input ? (await discriminatorSchema[\"~run\"]({\n\t\t\t\t\t\t\t\t\ttyped: false,\n\t\t\t\t\t\t\t\t\tvalue: input[currentKey]\n\t\t\t\t\t\t\t\t}, ABORT_EARLY_CONFIG)).issues : discriminatorSchema.type !== \"exact_optional\" && discriminatorSchema.type !== \"optional\" && discriminatorSchema.type !== \"nullish\") {\n\t\t\t\t\t\t\t\t\tkeysAreValid = false;\n\t\t\t\t\t\t\t\t\tif (invalidDiscriminatorKey !== currentKey && (maxDiscriminatorPriority < currentPriority || maxDiscriminatorPriority === currentPriority && currentKey in input && !(invalidDiscriminatorKey in input))) {\n\t\t\t\t\t\t\t\t\t\tmaxDiscriminatorPriority = currentPriority;\n\t\t\t\t\t\t\t\t\t\tinvalidDiscriminatorKey = currentKey;\n\t\t\t\t\t\t\t\t\t\texpectedDiscriminators = [];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (invalidDiscriminatorKey === currentKey) expectedDiscriminators.push(schema.entries[currentKey].expects);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcurrentPriority++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (keysAreValid) {\n\t\t\t\t\t\t\t\tconst optionDataset = await schema[\"~run\"]({ value: input }, config$1);\n\t\t\t\t\t\t\t\tif (!outputDataset || !outputDataset.typed && optionDataset.typed) outputDataset = optionDataset;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (outputDataset && !outputDataset.issues) break;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tawait parseOptions(this, new Set([this.key]));\n\t\t\t\tif (outputDataset) return outputDataset;\n\t\t\t\t_addIssue(this, \"type\", dataset, config$1, {\n\t\t\t\t\tinput: input[invalidDiscriminatorKey],\n\t\t\t\t\texpected: /* @__PURE__ */ _joinExpects(expectedDiscriminators, \"|\"),\n\t\t\t\t\tpath: [{\n\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\tinput,\n\t\t\t\t\t\tkey: invalidDiscriminatorKey,\n\t\t\t\t\t\tvalue: input[invalidDiscriminatorKey]\n\t\t\t\t\t}]\n\t\t\t\t});\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/void/void.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction void_(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"void\",\n\t\treference: void_,\n\t\texpects: \"void\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === void 0) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/keyof/keyof.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction keyof(schema, message$1) {\n\treturn /* @__PURE__ */ picklist(Object.keys(schema.entries), message$1);\n}\n\n//#endregion\n//#region src/methods/message/message.ts\n/**\n* Changes the local message configuration of a schema.\n*\n* @param schema The schema to configure.\n* @param message_ The error message.\n*\n* @returns The configured schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction message(schema, message_) {\n\treturn {\n\t\t...schema,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\treturn schema[\"~run\"](dataset, {\n\t\t\t\t...config$1,\n\t\t\t\tmessage: message_\n\t\t\t});\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/omit/omit.ts\n/**\n* Creates a modified copy of an object schema that does not contain the\n* selected entries.\n*\n* @param schema The schema to omit from.\n* @param keys The selected entries.\n*\n* @returns An object schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction omit(schema, keys) {\n\tconst entries$1 = { ...schema.entries };\n\tfor (const key of keys) delete entries$1[key];\n\treturn {\n\t\t...schema,\n\t\tentries: entries$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/parse/parse.ts\n/**\n* Parses an unknown input based on a schema.\n*\n* @param schema The schema to be used.\n* @param input The input to be parsed.\n* @param config The parse configuration.\n*\n* @returns The parsed input.\n*/\nfunction parse(schema, input, config$1) {\n\tconst dataset = schema[\"~run\"]({ value: input }, /* @__PURE__ */ getGlobalConfig(config$1));\n\tif (dataset.issues) throw new ValiError(dataset.issues);\n\treturn dataset.value;\n}\n\n//#endregion\n//#region src/methods/parse/parseAsync.ts\n/**\n* Parses an unknown input based on a schema.\n*\n* @param schema The schema to be used.\n* @param input The input to be parsed.\n* @param config The parse configuration.\n*\n* @returns The parsed input.\n*/\nasync function parseAsync(schema, input, config$1) {\n\tconst dataset = await schema[\"~run\"]({ value: input }, /* @__PURE__ */ getGlobalConfig(config$1));\n\tif (dataset.issues) throw new ValiError(dataset.issues);\n\treturn dataset.value;\n}\n\n//#endregion\n//#region src/methods/parser/parser.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction parser(schema, config$1) {\n\tconst func = (input) => parse(schema, input, config$1);\n\tfunc.schema = schema;\n\tfunc.config = config$1;\n\treturn func;\n}\n\n//#endregion\n//#region src/methods/parser/parserAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction parserAsync(schema, config$1) {\n\tconst func = (input) => parseAsync(schema, input, config$1);\n\tfunc.schema = schema;\n\tfunc.config = config$1;\n\treturn func;\n}\n\n//#endregion\n//#region src/methods/partial/partial.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction partial(schema, keys) {\n\tconst entries$1 = {};\n\tfor (const key in schema.entries) entries$1[key] = !keys || keys.includes(key) ? /* @__PURE__ */ optional(schema.entries[key]) : schema.entries[key];\n\treturn {\n\t\t...schema,\n\t\tentries: entries$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/partial/partialAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction partialAsync(schema, keys) {\n\tconst entries$1 = {};\n\tfor (const key in schema.entries) entries$1[key] = !keys || keys.includes(key) ? /* @__PURE__ */ optionalAsync(schema.entries[key]) : schema.entries[key];\n\treturn {\n\t\t...schema,\n\t\tentries: entries$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/pick/pick.ts\n/**\n* Creates a modified copy of an object schema that contains only the selected\n* entries.\n*\n* @param schema The schema to pick from.\n* @param keys The selected entries.\n*\n* @returns An object schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction pick(schema, keys) {\n\tconst entries$1 = {};\n\tfor (const key of keys) entries$1[key] = schema.entries[key];\n\treturn {\n\t\t...schema,\n\t\tentries: entries$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/pipe/pipe.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction pipe(...pipe$1) {\n\treturn {\n\t\t...pipe$1[0],\n\t\tpipe: pipe$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tfor (const item of pipe$1) if (item.kind !== \"metadata\") {\n\t\t\t\tif (dataset.issues && (item.kind === \"schema\" || item.kind === \"transformation\")) {\n\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly && !config$1.abortPipeEarly) dataset = item[\"~run\"](dataset, config$1);\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/pipe/pipeAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction pipeAsync(...pipe$1) {\n\treturn {\n\t\t...pipe$1[0],\n\t\tpipe: pipe$1,\n\t\tasync: true,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tfor (const item of pipe$1) if (item.kind !== \"metadata\") {\n\t\t\t\tif (dataset.issues && (item.kind === \"schema\" || item.kind === \"transformation\")) {\n\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly && !config$1.abortPipeEarly) dataset = await item[\"~run\"](dataset, config$1);\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/required/required.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction required(schema, arg2, arg3) {\n\tconst keys = Array.isArray(arg2) ? arg2 : void 0;\n\tconst message$1 = Array.isArray(arg2) ? arg3 : arg2;\n\tconst entries$1 = {};\n\tfor (const key in schema.entries) entries$1[key] = !keys || keys.includes(key) ? /* @__PURE__ */ nonOptional(schema.entries[key], message$1) : schema.entries[key];\n\treturn {\n\t\t...schema,\n\t\tentries: entries$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/required/requiredAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction requiredAsync(schema, arg2, arg3) {\n\tconst keys = Array.isArray(arg2) ? arg2 : void 0;\n\tconst message$1 = Array.isArray(arg2) ? arg3 : arg2;\n\tconst entries$1 = {};\n\tfor (const key in schema.entries) entries$1[key] = !keys || keys.includes(key) ? /* @__PURE__ */ nonOptionalAsync(schema.entries[key], message$1) : schema.entries[key];\n\treturn {\n\t\t...schema,\n\t\tentries: entries$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/safeParse/safeParse.ts\n/**\n* Parses an unknown input based on a schema.\n*\n* @param schema The schema to be used.\n* @param input The input to be parsed.\n* @param config The parse configuration.\n*\n* @returns The parse result.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction safeParse(schema, input, config$1) {\n\tconst dataset = schema[\"~run\"]({ value: input }, /* @__PURE__ */ getGlobalConfig(config$1));\n\treturn {\n\t\ttyped: dataset.typed,\n\t\tsuccess: !dataset.issues,\n\t\toutput: dataset.value,\n\t\tissues: dataset.issues\n\t};\n}\n\n//#endregion\n//#region src/methods/safeParse/safeParseAsync.ts\n/**\n* Parses an unknown input based on a schema.\n*\n* @param schema The schema to be used.\n* @param input The input to be parsed.\n* @param config The parse configuration.\n*\n* @returns The parse result.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nasync function safeParseAsync(schema, input, config$1) {\n\tconst dataset = await schema[\"~run\"]({ value: input }, /* @__PURE__ */ getGlobalConfig(config$1));\n\treturn {\n\t\ttyped: dataset.typed,\n\t\tsuccess: !dataset.issues,\n\t\toutput: dataset.value,\n\t\tissues: dataset.issues\n\t};\n}\n\n//#endregion\n//#region src/methods/safeParser/safeParser.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction safeParser(schema, config$1) {\n\tconst func = (input) => /* @__PURE__ */ safeParse(schema, input, config$1);\n\tfunc.schema = schema;\n\tfunc.config = config$1;\n\treturn func;\n}\n\n//#endregion\n//#region src/methods/safeParser/safeParserAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction safeParserAsync(schema, config$1) {\n\tconst func = (input) => /* @__PURE__ */ safeParseAsync(schema, input, config$1);\n\tfunc.schema = schema;\n\tfunc.config = config$1;\n\treturn func;\n}\n\n//#endregion\n//#region src/methods/summarize/summarize.ts\n/**\n* Summarize the error messages of issues in a pretty-printable multi-line string.\n*\n* @param issues The list of issues.\n*\n* @returns A summary of the issues.\n*\n* @beta\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction summarize(issues) {\n\tlet summary = \"\";\n\tfor (const issue of issues) {\n\t\tif (summary) summary += \"\\n\";\n\t\tsummary += `× ${issue.message}`;\n\t\tconst dotPath = /* @__PURE__ */ getDotPath(issue);\n\t\tif (dotPath) summary += `\\n  → at ${dotPath}`;\n\t}\n\treturn summary;\n}\n\n//#endregion\n//#region src/methods/unwrap/unwrap.ts\n/**\n* Unwraps the wrapped schema.\n*\n* @param schema The schema to be unwrapped.\n*\n* @returns The unwrapped schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction unwrap(schema) {\n\treturn schema.wrapped;\n}\n\n//#endregion\nexports.BASE64_REGEX = BASE64_REGEX;\nexports.BIC_REGEX = BIC_REGEX;\nexports.CUID2_REGEX = CUID2_REGEX;\nexports.DECIMAL_REGEX = DECIMAL_REGEX;\nexports.DIGITS_REGEX = DIGITS_REGEX;\nexports.DOMAIN_REGEX = DOMAIN_REGEX;\nexports.EMAIL_REGEX = EMAIL_REGEX;\nexports.EMOJI_REGEX = EMOJI_REGEX;\nexports.HEXADECIMAL_REGEX = HEXADECIMAL_REGEX;\nexports.HEX_COLOR_REGEX = HEX_COLOR_REGEX;\nexports.IMEI_REGEX = IMEI_REGEX;\nexports.IPV4_REGEX = IPV4_REGEX;\nexports.IPV6_REGEX = IPV6_REGEX;\nexports.IP_REGEX = IP_REGEX;\nexports.ISO_DATE_REGEX = ISO_DATE_REGEX;\nexports.ISO_DATE_TIME_REGEX = ISO_DATE_TIME_REGEX;\nexports.ISO_DATE_TIME_SECOND_REGEX = ISO_DATE_TIME_SECOND_REGEX;\nexports.ISO_TIMESTAMP_REGEX = ISO_TIMESTAMP_REGEX;\nexports.ISO_TIME_REGEX = ISO_TIME_REGEX;\nexports.ISO_TIME_SECOND_REGEX = ISO_TIME_SECOND_REGEX;\nexports.ISO_WEEK_REGEX = ISO_WEEK_REGEX;\nexports.ISRC_REGEX = ISRC_REGEX;\nexports.JWS_COMPACT_REGEX = JWS_COMPACT_REGEX;\nexports.MAC48_REGEX = MAC48_REGEX;\nexports.MAC64_REGEX = MAC64_REGEX;\nexports.MAC_REGEX = MAC_REGEX;\nexports.NANO_ID_REGEX = NANO_ID_REGEX;\nexports.OCTAL_REGEX = OCTAL_REGEX;\nexports.RFC_EMAIL_REGEX = RFC_EMAIL_REGEX;\nexports.SLUG_REGEX = SLUG_REGEX;\nexports.ULID_REGEX = ULID_REGEX;\nexports.UUID_REGEX = UUID_REGEX;\nexports.ValiError = ValiError;\nexports._addIssue = _addIssue;\nexports._cloneDataset = _cloneDataset;\nexports._formatCase = _formatCase;\nexports._getByteCount = _getByteCount;\nexports._getGraphemeCount = _getGraphemeCount;\nexports._getLastMetadata = _getLastMetadata;\nexports._getStandardProps = _getStandardProps;\nexports._getWordCount = _getWordCount;\nexports._isLuhnAlgo = _isLuhnAlgo;\nexports._isValidObjectKey = _isValidObjectKey;\nexports._joinExpects = _joinExpects;\nexports._stringify = _stringify;\nexports.any = any;\nexports.args = args;\nexports.argsAsync = argsAsync;\nexports.array = array;\nexports.arrayAsync = arrayAsync;\nexports.assert = assert;\nexports.awaitAsync = awaitAsync;\nexports.base64 = base64;\nexports.bic = bic;\nexports.bigint = bigint;\nexports.blob = blob;\nexports.boolean = boolean;\nexports.brand = brand;\nexports.bytes = bytes;\nexports.cache = cache;\nexports.cacheAsync = cacheAsync;\nexports.check = check;\nexports.checkAsync = checkAsync;\nexports.checkItems = checkItems;\nexports.checkItemsAsync = checkItemsAsync;\nexports.config = config;\nexports.creditCard = creditCard;\nexports.cuid2 = cuid2;\nexports.custom = custom;\nexports.customAsync = customAsync;\nexports.date = date;\nexports.decimal = decimal;\nexports.deleteGlobalConfig = deleteGlobalConfig;\nexports.deleteGlobalMessage = deleteGlobalMessage;\nexports.deleteSchemaMessage = deleteSchemaMessage;\nexports.deleteSpecificMessage = deleteSpecificMessage;\nexports.description = description;\nexports.digits = digits;\nexports.domain = domain;\nexports.email = email;\nexports.emoji = emoji;\nexports.empty = empty;\nexports.endsWith = endsWith;\nexports.entries = entries;\nexports.entriesFromList = entriesFromList;\nexports.entriesFromObjects = entriesFromObjects;\nexports.enum = enum_;\nexports.enum_ = enum_;\nexports.everyItem = everyItem;\nexports.exactOptional = exactOptional;\nexports.exactOptionalAsync = exactOptionalAsync;\nexports.examples = examples;\nexports.excludes = excludes;\nexports.fallback = fallback;\nexports.fallbackAsync = fallbackAsync;\nexports.file = file;\nexports.filterItems = filterItems;\nexports.findItem = findItem;\nexports.finite = finite;\nexports.flatten = flatten;\nexports.flavor = flavor;\nexports.forward = forward;\nexports.forwardAsync = forwardAsync;\nexports.function = function_;\nexports.function_ = function_;\nexports.getDefault = getDefault;\nexports.getDefaults = getDefaults;\nexports.getDefaultsAsync = getDefaultsAsync;\nexports.getDescription = getDescription;\nexports.getDotPath = getDotPath;\nexports.getExamples = getExamples;\nexports.getFallback = getFallback;\nexports.getFallbacks = getFallbacks;\nexports.getFallbacksAsync = getFallbacksAsync;\nexports.getGlobalConfig = getGlobalConfig;\nexports.getGlobalMessage = getGlobalMessage;\nexports.getMetadata = getMetadata;\nexports.getSchemaMessage = getSchemaMessage;\nexports.getSpecificMessage = getSpecificMessage;\nexports.getTitle = getTitle;\nexports.graphemes = graphemes;\nexports.gtValue = gtValue;\nexports.guard = guard;\nexports.hash = hash;\nexports.hexColor = hexColor;\nexports.hexadecimal = hexadecimal;\nexports.imei = imei;\nexports.includes = includes;\nexports.instance = instance;\nexports.integer = integer;\nexports.intersect = intersect;\nexports.intersectAsync = intersectAsync;\nexports.ip = ip;\nexports.ipv4 = ipv4;\nexports.ipv6 = ipv6;\nexports.is = is;\nexports.isOfKind = isOfKind;\nexports.isOfType = isOfType;\nexports.isValiError = isValiError;\nexports.isbn = isbn;\nexports.isoDate = isoDate;\nexports.isoDateTime = isoDateTime;\nexports.isoDateTimeSecond = isoDateTimeSecond;\nexports.isoTime = isoTime;\nexports.isoTimeSecond = isoTimeSecond;\nexports.isoTimestamp = isoTimestamp;\nexports.isoWeek = isoWeek;\nexports.isrc = isrc;\nexports.jwsCompact = jwsCompact;\nexports.keyof = keyof;\nexports.lazy = lazy;\nexports.lazyAsync = lazyAsync;\nexports.length = length;\nexports.literal = literal;\nexports.looseObject = looseObject;\nexports.looseObjectAsync = looseObjectAsync;\nexports.looseTuple = looseTuple;\nexports.looseTupleAsync = looseTupleAsync;\nexports.ltValue = ltValue;\nexports.mac = mac;\nexports.mac48 = mac48;\nexports.mac64 = mac64;\nexports.map = map;\nexports.mapAsync = mapAsync;\nexports.mapItems = mapItems;\nexports.maxBytes = maxBytes;\nexports.maxEntries = maxEntries;\nexports.maxGraphemes = maxGraphemes;\nexports.maxLength = maxLength;\nexports.maxSize = maxSize;\nexports.maxValue = maxValue;\nexports.maxWords = maxWords;\nexports.message = message;\nexports.metadata = metadata;\nexports.mimeType = mimeType;\nexports.minBytes = minBytes;\nexports.minEntries = minEntries;\nexports.minGraphemes = minGraphemes;\nexports.minLength = minLength;\nexports.minSize = minSize;\nexports.minValue = minValue;\nexports.minWords = minWords;\nexports.multipleOf = multipleOf;\nexports.nan = nan;\nexports.nanoid = nanoid;\nexports.never = never;\nexports.nonEmpty = nonEmpty;\nexports.nonNullable = nonNullable;\nexports.nonNullableAsync = nonNullableAsync;\nexports.nonNullish = nonNullish;\nexports.nonNullishAsync = nonNullishAsync;\nexports.nonOptional = nonOptional;\nexports.nonOptionalAsync = nonOptionalAsync;\nexports.normalize = normalize;\nexports.notBytes = notBytes;\nexports.notEntries = notEntries;\nexports.notGraphemes = notGraphemes;\nexports.notLength = notLength;\nexports.notSize = notSize;\nexports.notValue = notValue;\nexports.notValues = notValues;\nexports.notWords = notWords;\nexports.null = null_;\nexports.null_ = null_;\nexports.nullable = nullable;\nexports.nullableAsync = nullableAsync;\nexports.nullish = nullish;\nexports.nullishAsync = nullishAsync;\nexports.number = number;\nexports.object = object;\nexports.objectAsync = objectAsync;\nexports.objectWithRest = objectWithRest;\nexports.objectWithRestAsync = objectWithRestAsync;\nexports.octal = octal;\nexports.omit = omit;\nexports.optional = optional;\nexports.optionalAsync = optionalAsync;\nexports.parse = parse;\nexports.parseAsync = parseAsync;\nexports.parseBoolean = parseBoolean;\nexports.parseJson = parseJson;\nexports.parser = parser;\nexports.parserAsync = parserAsync;\nexports.partial = partial;\nexports.partialAsync = partialAsync;\nexports.partialCheck = partialCheck;\nexports.partialCheckAsync = partialCheckAsync;\nexports.pick = pick;\nexports.picklist = picklist;\nexports.pipe = pipe;\nexports.pipeAsync = pipeAsync;\nexports.promise = promise;\nexports.rawCheck = rawCheck;\nexports.rawCheckAsync = rawCheckAsync;\nexports.rawTransform = rawTransform;\nexports.rawTransformAsync = rawTransformAsync;\nexports.readonly = readonly;\nexports.record = record;\nexports.recordAsync = recordAsync;\nexports.reduceItems = reduceItems;\nexports.regex = regex;\nexports.required = required;\nexports.requiredAsync = requiredAsync;\nexports.returns = returns;\nexports.returnsAsync = returnsAsync;\nexports.rfcEmail = rfcEmail;\nexports.safeInteger = safeInteger;\nexports.safeParse = safeParse;\nexports.safeParseAsync = safeParseAsync;\nexports.safeParser = safeParser;\nexports.safeParserAsync = safeParserAsync;\nexports.set = set;\nexports.setAsync = setAsync;\nexports.setGlobalConfig = setGlobalConfig;\nexports.setGlobalMessage = setGlobalMessage;\nexports.setSchemaMessage = setSchemaMessage;\nexports.setSpecificMessage = setSpecificMessage;\nexports.size = size;\nexports.slug = slug;\nexports.someItem = someItem;\nexports.sortItems = sortItems;\nexports.startsWith = startsWith;\nexports.strictObject = strictObject;\nexports.strictObjectAsync = strictObjectAsync;\nexports.strictTuple = strictTuple;\nexports.strictTupleAsync = strictTupleAsync;\nexports.string = string;\nexports.stringifyJson = stringifyJson;\nexports.summarize = summarize;\nexports.symbol = symbol;\nexports.title = title;\nexports.toBigint = toBigint;\nexports.toBoolean = toBoolean;\nexports.toCamelCase = toCamelCase;\nexports.toDate = toDate;\nexports.toKebabCase = toKebabCase;\nexports.toLowerCase = toLowerCase;\nexports.toMaxValue = toMaxValue;\nexports.toMinValue = toMinValue;\nexports.toNumber = toNumber;\nexports.toPascalCase = toPascalCase;\nexports.toSnakeCase = toSnakeCase;\nexports.toString = toString;\nexports.toUpperCase = toUpperCase;\nexports.transform = transform;\nexports.transformAsync = transformAsync;\nexports.trim = trim;\nexports.trimEnd = trimEnd;\nexports.trimStart = trimStart;\nexports.tuple = tuple;\nexports.tupleAsync = tupleAsync;\nexports.tupleWithRest = tupleWithRest;\nexports.tupleWithRestAsync = tupleWithRestAsync;\nexports.ulid = ulid;\nexports.undefined = undefined_;\nexports.undefined_ = undefined_;\nexports.undefinedable = undefinedable;\nexports.undefinedableAsync = undefinedableAsync;\nexports.union = union;\nexports.unionAsync = unionAsync;\nexports.unknown = unknown;\nexports.unwrap = unwrap;\nexports.url = url;\nexports.uuid = uuid;\nexports.value = value;\nexports.values = values;\nexports.variant = variant;\nexports.variantAsync = variantAsync;\nexports.void = void_;\nexports.void_ = void_;\nexports.words = words;","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = {\n  8: \"Backspace\",\n  9: \"Tab\",\n  10: \"Enter\",\n  12: \"NumLock\",\n  13: \"Enter\",\n  16: \"Shift\",\n  17: \"Control\",\n  18: \"Alt\",\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  44: \"PrintScreen\",\n  45: \"Insert\",\n  46: \"Delete\",\n  59: \";\",\n  61: \"=\",\n  91: \"Meta\",\n  92: \"Meta\",\n  106: \"*\",\n  107: \"+\",\n  108: \",\",\n  109: \"-\",\n  110: \".\",\n  111: \"/\",\n  144: \"NumLock\",\n  145: \"ScrollLock\",\n  160: \"Shift\",\n  161: \"Shift\",\n  162: \"Control\",\n  163: \"Control\",\n  164: \"Alt\",\n  165: \"Alt\",\n  173: \"-\",\n  186: \";\",\n  187: \"=\",\n  188: \",\",\n  189: \"-\",\n  190: \".\",\n  191: \"/\",\n  192: \"`\",\n  219: \"[\",\n  220: \"\\\\\",\n  221: \"]\",\n  222: \"'\"\n};\n\nvar shift = {\n  48: \")\",\n  49: \"!\",\n  50: \"@\",\n  51: \"#\",\n  52: \"$\",\n  53: \"%\",\n  54: \"^\",\n  55: \"&\",\n  56: \"*\",\n  57: \"(\",\n  59: \":\",\n  61: \"+\",\n  173: \"_\",\n  186: \":\",\n  187: \"+\",\n  188: \"<\",\n  189: \"_\",\n  190: \">\",\n  191: \"?\",\n  192: \"~\",\n  219: \"{\",\n  220: \"|\",\n  221: \"}\",\n  222: \"\\\"\"\n};\n\nvar mac = typeof navigator != \"undefined\" && /Mac/.test(navigator.platform);\nvar ie = typeof navigator != \"undefined\" && /MSIE \\d|Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(navigator.userAgent);\n\n// Fill in the digit keys\nfor (var i = 0; i < 10; i++) base[48 + i] = base[96 + i] = String(i);\n\n// The function keys\nfor (var i = 1; i <= 24; i++) base[i + 111] = \"F\" + i;\n\n// And the alphabetic keys\nfor (var i = 65; i <= 90; i++) {\n  base[i] = String.fromCharCode(i + 32);\n  shift[i] = String.fromCharCode(i);\n}\n\n// For each code that doesn't have a shift-equivalent, copy the base name\nfor (var code in base) if (!shift.hasOwnProperty(code)) shift[code] = base[code];\n\nfunction keyName(event) {\n  // On macOS, keys held with Shift and Cmd don't reflect the effect of Shift in `.key`.\n  // On IE, shift effect is never included in `.key`.\n  var ignoreKey = mac && event.metaKey && event.shiftKey && !event.ctrlKey && !event.altKey ||\n      ie && event.shiftKey && event.key && event.key.length == 1 ||\n      event.key == \"Unidentified\";\n  var name = (!ignoreKey && event.key) ||\n    (event.shiftKey ? shift : base)[event.keyCode] ||\n    event.key || \"Unidentified\";\n  // Edge sometimes produces wrong names (Issue #3)\n  if (name == \"Esc\") name = \"Escape\";\n  if (name == \"Del\") name = \"Delete\";\n  // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/8860571/\n  if (name == \"Left\") name = \"ArrowLeft\";\n  if (name == \"Up\") name = \"ArrowUp\";\n  if (name == \"Right\") name = \"ArrowRight\";\n  if (name == \"Down\") name = \"ArrowDown\";\n  return name\n}\n\nexports.base = base;\nexports.keyName = keyName;\nexports.shift = shift;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"chunks/\" + chunkId + \".\" + {\"311\":\"5c8e1c99c6a97c4ca268\",\"482\":\"0bc2701a50f36ed2ec70\",\"498\":\"ddbcb812b63477a2cef6\",\"533\":\"41f87a0c68912ffb4dc7\",\"601\":\"ed1a32e59c48c2795a1e\",\"634\":\"4cb609e284e81e0f5508\",\"700\":\"ffcc9170d566642b5215\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","if (typeof document === \"undefined\") return;\nvar createStylesheet = (chunkId, fullhref, oldTag, resolve, reject) => {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tif (__webpack_require__.nc) {\n\t\tlinkTag.nonce = __webpack_require__.nc;\n\t}\n\tvar onLinkComplete = (event) => {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && event.type;\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + errorType + \": \" + realHref + \")\");\n\t\t\terr.name = \"ChunkLoadError\";\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tif (linkTag.parentNode) linkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\n\tif (oldTag) {\n\t\toldTag.parentNode.insertBefore(linkTag, oldTag.nextSibling);\n\t} else {\n\t\tdocument.head.appendChild(linkTag);\n\t}\n\treturn linkTag;\n};\nvar findStylesheet = (href, fullhref) => {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = (chunkId) => {\n\treturn new Promise((resolve, reject) => {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, null, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t393: 0,\n\t533: 0,\n\t601: 0\n};\n\n__webpack_require__.f.miniCss = (chunkId, promises) => {\n\tvar cssChunks = {\"482\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(() => {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, (e) => {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr\n\n// no prefetching\n\n// no preloaded","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t393: 0,\n\t533: 0,\n\t601: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkliftosaur\"] = self[\"webpackChunkliftosaur\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));"],"names":["inProgress","dataWebpackPrefix","_pageWrapper","_programDetailsContent","_hydrate","_jsxRuntime","module","exports","e","d","this","v","k","__esModule","r","a","length","n","Array","isArray","ReferenceError","asyncGeneratorStep","t","o","c","i","u","value","done","Promise","resolve","then","arguments","apply","_next","_throw","OverloadYield","TypeError","isNativeReflectConstruct","setPrototypeOf","Reflect","construct","push","p","bind","prototype","toPropertyKey","_defineProperties","enumerable","configurable","writable","Object","defineProperty","key","_arrayLikeToArray","_createForOfIteratorHelperLoose","Symbol","iterator","call","next","toString","slice","constructor","name","from","test","_extends","assign","hasOwnProperty","_typeof","_defineProperty","toPrimitive","String","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","_objectSpread2","forEach","getOwnPropertyDescriptors","defineProperties","_objectWithoutPropertiesLoose","indexOf","_getPrototypeOf","getPrototypeOf","__proto__","create","Function","_isNativeReflectConstruct","Boolean","valueOf","l","f","objectWithoutPropertiesLoose","propertyIsEnumerable","assertThisInitialized","_setPrototypeOf","arrayWithHoles","iterableToArrayLimit","unsupportedIterableToArray","nonIterableRest","iterableToArray","Number","arrayLikeToArray","AsyncGenerator","resume","settle","reject","arg","_invoke","asyncIterator","isNativeFunction","_wrapNativeSuper","Map","has","get","set","Wrapper","Mobile_isMobile","userAgent","Mobile_isPlaywright","includes","window","navigator","_reactNative","require","_url","_collection","_encoder","Service_nativeClientHeaders","Platform","OS","_deleteApiKey","_createApiKey","_getApiKeys","_getUserContext","_generateAiPrompt","_getMuscles","_programDetail","_programsIndex","_getDataFromShortUrl","_postShortUrl","_deleteAccount","_verifySubscriptionKey","_verifyGooglePurchaseToken","_verifyAppleReceipt","_postImageUploadUrl","_getUploadedImages","_postEvent","_cache","_getExceptionData","_getDebugSnapshotStorage","_getDebugSnapshotList","_getStorage","_postClaimCoupon","_deleteProgram","_postSaveProgram","_postAddFreeUser","_checkAdminKey","_postClaimKey","_postDebug","_postSetupTestAccount","_createDebugSession","_postSync","_getProgramRevision","_getProgramRevisions","_refreshGoogleSubscription","_signout","_changePassword","_verifyEmail","_resetPassword","_forgotPassword","_emailAuth","_emailSignIn","_emailSignUp","_appleSignIn","_getHistory","_getAllHistoryRecords","_googleSignIn","cachePromises","_createClass2","default","Service","client","_classCallCheck2","_asyncToGenerator2","token","id","args","body","JSON","stringify","forceuseremail","forcedUserEmail","historylimit","response","method","credentials","headers","json","storage","history","getAllHistoryRecords","alreadyFetchedHistory","historyLimit","email","user_id","is_new_user","session","_x","_x2","_x3","historyResponse","undefined","getHistory","after","limit","userId","adminKey","CollectionUtils_uniqBy","_x4","url","UrlUtils_build","searchParams","_x5","code","idToken","_x6","_x7","_x8","password","emailAuth","_x9","_x0","_x1","_x10","_x11","_x12","type","error","ok","status","providers","_x13","_x14","catch","_x15","_x16","_x17","_x18","currentPassword","newPassword","_x19","_x20","googlePurchaseToken","result","subscription","_x21","_x22","programId","success","data","text","message","Error","_x23","revision","_x24","_x25","tempUserId","storageUpdate","timestamp","Date","now","deviceId","compressedBody","Encoder_encode","payload","signal","_x26","_x27","_x28","apiKey","authorization","_x29","_x30","state","meta","compressed","_x31","_x32","_x33","userid","claim","_x34","_","_x35","_x36","_x37","program","source","_x38","_x39","_x40","_x41","platform","_ref","expires","appleOffer","googleOffer","affiliate","_x42","_x43","storageId","_x44","_x45","_x46","_x47","list","_x48","_x49","parse","Encoder_decode","_x50","_x51","_x52","apiUrl","_x53","fn","_x54","_x55","event","location","href","_x56","images","fileName","contentType","_x57","_x58","appleReceipt","_this2","cache","_x59","_x60","_this3","_x61","_x62","enforce","user","clear","_x63","_x64","urlToShorten","src","__HOST__","_x65","_x66","_x67","_x68","_x69","category","_x70","exercise","_x71","input","statusText","_x72","_this","_wrapAsyncGenerator2","_awaitAsyncGenerator2","reader","getReader","decoder","TextDecoder","buffer","_yield$_awaitAsyncGen","read","lines","decode","stream","split","line","pop","trim","startsWith","console","account","units","_x73","encodeURIComponent","_x74","props","service","jsx","View","style","minWidth","maxWidth","alignSelf","width","children","AccountLoggedInView","AccountLoggedOutView","redirectUrl","dispatch","onSignIn","onOpenEmailAuth","_react","_text","_service","_generator","_googleAccessToken","_button","_input","_linkButton","_iconApple","_iconDoc","_iconDumbbell","_iconGoogle","_iconSpinner","_thunks","_posthog","_tailwindConfig","_appleAuth","_dialog","isWeb","changePasswordErrorMessages","invalid_credentials","invalid_password","password_too_long","not_authorized","network_error","ChangePasswordForm","_useState","useState","_useState2","_slicedToArray2","isSubmitting","setIsSubmitting","_useState3","_useState4","setError","_useState5","_useState6","setDone","currentRef","useRef","newRef","repeatRef","_submit","current","err","changePassword","jsxs","className","Text","Button","kind","onClick","onDone","Input","label","identifier","changeType","autoCapitalize","autoCorrect","changeHandler","testID","disabled","submit","IconSpinner","height","color","Tailwind_semantic","alwayswhite","_useState7","_useState8","isLoading","setIsLoading","_useState9","_useState0","showChangePassword","setShowChangePassword","LinkButton","onPress","Fragment","numberOfPrograms","IconDoc","numberOfWorkouts","IconDumbbell","signout","reload","_useState1","_useState10","_useState11","_useState12","showEmailForm","setShowEmailForm","useEffect","AppleAuth_init","EmailAuthForm","Pressable","select","ios","shadowColor","shadowOffset","shadowOpacity","shadowRadius","android","elevation","boxShadow","track","Thunk_googleSignIn","newState","accessToken","getGoogleAccessToken","UidFactory_generateUid","googleSignIn","IconGoogle","Thunk_appleSignIn","appleResult","AppleAuth_signIn","Dialog_alert","appleSignIn","id_token","marginTop","IconApple","EmailAuthButton","emailAuthErrorMessages","invalid_email","account_exists","account_not_found","wrong_password","too_many_attempts","email_send_failed","_useState13","_useState14","mode","setMode","_useState15","_useState16","_useState17","_useState18","_useState19","_useState20","info","setInfo","emailRef","passwordRef","switchMode","newMode","onModeChange","handleResult","join","confirmationSent","_submit2","Thunk_emailAuth","emailSignUp","emailSignIn","onSent","Thunk_forgotPassword","forgotPassword","bottomShift","setBottomShift","bottomSheetRef","containerRef","setContainerRef","document","getElementById","isHidden","setTimeout","classList","remove","add","bottomSheet","clientHeight","element","zIndex","transition","onClose","ref","transform","borderRadius","shouldShowClose","_iconCloseCircleOutline","IconCloseCircleOutline","size","maxHeight","createPortal","_reactDom","_switch","_bottomSheet","_menuItem","_inputNumber","_inputWeight","_menuItemEditable","_iconTrash","_lensShmens","_state","_weight","_focusedInputFlush","BottomSheetEditTargetContent","editSetModal","rpe","enableRpe","setEnableRpe","setTimer","enableSetTimer","setEnableSetTimer","timer","enableTimer","setEnableTimer","lbSet","lb","pi","savedRef","MenuItemWrapper","InputNumber2","onBlur","updateProgress","record","onInput","isNaN","minReps","min","max","step","reps","Switch","isAmrap","onValueChange","InputWeight2","exerciseType","inputCommitMode","Weight_build","originalWeight","settings","unit","askWeight","allowDot","logRpe","marginRight","IconTrash","MenuItemEditable","onChange","isOverflowSetTimer","keyboardAddon","FocusedInputFlush_flush","entryIndex","setIndex","recordModify","progress","freshSet","ui","entries","sets","evaluatedWeight","Weight_evaluateWeight","weight","Weight_roundConvertTo","newSet","newEntries","map","entry","newSets","s","j","BottomSheet","buttonSize","textSize","containerCn","textCn","accessibilityLabel","trackClick","useTrackClick","userOnPress","PressableComponent","sticky","StickyPressable","accessibilityRole","containsString","_pressable","_clickTracking","some","planner","dayData","fullName","evaluatedProgram","ObjectUtils_clone","Program_evaluateCachedPlanner","Program_create","week","dayInWeek","targetDay","weeks","days","_PlannerExerciseEvalu2","PlannerExerciseEvaluator","extractNameParts","exercises","newExercise","shortName","PlannerKey_fromFullName","repeat","exerciseIndex","repeating","order","tags","exerciseVariations","isCurrent","evaluatedSetVariations","maxrep","isQuickAddSet","setVariations","repRange","numberOfSets","descriptions","values","globals","points","offset","to","index","EditProgramUiHelpers_validate","ProgramToPlanner","convertToPlanner","plannerExercise","cb","EditProgramUiHelpers_changeCurrentInstance2","fromIndex","toIndex","reorder","EditProgramUiHelpers_getWeeks2","shouldValidate","PP_iterate2","aKey","modalExerciseUi","onProgramChange","onUiChange","change","_PlannerExerciseEvalu","equipment","newKey","PlannerKey_fromLabelNameAndEquipment","EditProgramUiHelpers_changeAllInstances","EditProgramUiHelpers_changeCurrentInstance3","Exercise_findByNameEquipment","newFullName","Exercise_fullName","exerciseKey","repeatTo","repeatingExercise","newRepeating","findIndex","isRepeat","splice","daySets","weekIndex","dayInWeekIndex","dayIndex","daySet","setVariationIndex","setVariation","allowDeleteEverywhere","newPlanner","newEvaluatedProgram","Program_getFirstProgramExercise","newExerciseType","previousExercise","Exercise_get","notused","oldPlanner","oldEvaluatedWeeks","PlannerProgram_evaluate","evaluatedWeeks","newEvaluatedWeeks","changedKeys","oldWeek","newWeek","_loop2","oldDay","newDay","newKeys","Set","oldKeys","removed","added","plannerDispatch","lbUi","collapsedOrder","dayUi","collapsed","newCollapsed","delete","_pp","_plannerProgram","_plannerEvaluator","_plannerKey","_object","_plannerExerciseEvaluator","_exercise","_program","_programToPlanner","_loop","PlannerEvaluator_evaluate","PlannerEvaluator_getFirstError","ignoreRepeats","day","find","_iconDefaultExercise","_exerciseImage","_hostConfig","_imageCache","_useRem","ExerciseImageAuxiliary","isError","ExerciseNoImage","memo","remScale","useRemScale","defaultEquipment","rawSrc","ExerciseImageUtils_url","remoteSrc","HostConfig_resolveUrl","initialUri","ImageCache_initialUri","prevRemote","setPrevRemote","setIsError","aspectRatio","setAspectRatio","setSrc","usingRemote","setUsingRemote","doesExist","ExerciseImageUtils_exists","ExerciseImageUtils_existsCustom","suppressCustom","onCachedError","ImageCache_markMissing","onCachedLoad","ImageCache_download","w","Math","round","imgStyle","Image","uri","onLoad","onError","Exercise_nameWithEquipment","useTextForCustomExercise","customClassName","fontSize","lineHeight","IconDefaultExercise","resizeMode","nativeEvent","prev","useBorderForCustomExercise","rm","Exercise_onerm","displayValue","openCalculator","useModal","weightValue","onEditVariable","isBorderless","parseFloat","_iconCalculator","IconCalculator","rmKey","_ModalStateContext","show","setShow","pinned","setPinned","nudge","setNudge","wrapperRef","tooltipRef","handleOutsideClick","contains","target","addEventListener","removeEventListener","rect","getBoundingClientRect","viewportWidth","documentElement","clientWidth","left","right","targetMuscles","Exercise_targetMusclesGroups","synergistMuscles","Exercise_synergistMusclesGroups","onMouseEnter","onMouseLeave","stopPropagation","borderBottom","bottom","ExerciseImage","m","Muscle_getMuscleGroupName","position","background","borderRight","_muscle","backgroundColor","alt","_iconInstagramFlat","IconInstagramFlat","_iconYoutube","IconYoutube","secondaryColor","_iconReddit","IconReddit","_iconDiscord","IconDiscord","footerLinks","link","preventDefault","lftConsent","open","isControlled","onToggle","isExpanded","internalExpanded","setInternalExpanded","hasToggle","isHelpShown","setIsHelpShown","testId","StringUtils_dashcase","UIManager","setLayoutAnimationEnabledExperimental","LayoutAnimation","configureNext","Presets","easeInEaseOut","wrapperClassName","topPadding","headerClassName","inner","leftExpandIcon","expandOnIconClick","_iconArrowUp","IconArrowUp","_iconArrowDown","IconArrowDown2","highlighted","nameAddOn","rightAddOn","help","_iconHelp","IconHelp","_string","_fastText","_set","_styledText","_time","isNext","displayGroups","useMemo","Reps_group","g","Reps_setToDisplaySet","alignItems","HistoryRecordSet","prs","showPrDetails","group","prTypes","CollectionUtils_compact","ObjectUtils_keys","b","prset","auto","isPr","rem","useRem","sem","primary","secondary","purple","repsColor","isCompleted","isInRange","Tailwind_colors","yellow","rpeColor","isRpeFailed","timerColor","autoColor","syntax","dataCy","sm","StyledText_remToPx","xs","builder","StyledText","fontWeight","TimeUtils_formatMMSS","built","build","FastText","fragments","paddingHorizontal","yellow150","_iconSvg","IconSvg","viewBox","fill","_svg","Path","icon","neutral","stroke","strokeWidth","strokeLinecap","strokeLinejoin","fillRule","clipRule","ceil","checkColor","scale","isChecked","scaledSize","borderWidth","borderColor","border","prominent","bgColor","subtle","Rect","rx","noRemScale","playColor","_interopRequireDefault","white","spinValue","Animated","Value","animation","loop","timing","toValue","duration","easing","Easing","linear","useNativeDriver","start","stop","rotate","interpolate","inputRange","outputRange","Circle","cx","cy","rest","_objectWithoutProperties2","_excluded","Svg","IconSvg_scale","WeakMap","_t","_interopRequireWildcard","_math","selectInputOnFocus","HTMLInputElement","handleNumber","setSelectionRange","forwardRef","inputSize","errorMessage","patternMessage","requiredMessage","changeTypeProp","isLabelOutside","labelSizeProp","labelSize","identifierProp","multiline","valueProp","defaultValue","handleRef","otherProps","autoCorrectStr","toLowerCase","validationErrors","setValidationErrors","touched","setTouched","internalInputRef","setInputRef","useCallback","el","useImperativeHandle","touch","validateTarget","localValue","setLocalValue","displayMode","normalized","MathUtils_normalizeNumStr","errors","validity","patternMismatch","valueMissing","onInputHandler","errorMessages","containerClassName","labelSizeVal","minHeight","marginBottom","top","onFocus","_props$value","_props$step","onUpdate","setText","getNumericValue","MathUtils_clamp","parsed","newValue","_textInput","TextInput","paddingVertical","includeFontPadding","keyboardType","onChangeText","selectTextOnFocus","_iconKeyboardClose","_mobile","_iconBackspace","_fitText","clamp","num","nextPadOwnerId","activePadOwnerId","remValue","initialValue","setValue","isFocused","setIsFocused","isTyping","setIsTyping","inputRef","valueRef","keyboardRef","switchRef","onClickTarget","isFocusedRef","isTypingRef","allowDotRef","allowNegativeRef","allowNegative","isMobile","setIsMobile","isCalculatorOpen","setIsCalculatorOpen","isCalculatorOpenRef","debounceTimerRef","clearTimeout","hasPendingInputRef","pendingInputRef","onPreviewRef","onBlurRef","onInputRef","onPreview","onNextRef","onNext","onPrevRef","onPrev","onChangeUnitsRef","onChangeUnits","minRef","maxRef","stepRef","selectedUnitRef","selectedUnit","initialValueRef","commitMode","debounceMs","inputDebounceMs","commitModeRef","debounceMsRef","flushPendingInput","pending","cancelPendingInput","newValueNum","paddedScrollerRef","padOwnerIdRef","debugSessionRef","outsideTouchCountRef","resetKeyboardStyles","querySelectorAll","HTMLElement","paddingBottom","blurRef","openCalculatorRef","handleInput","dynMaxLength","endsWith","blur","debugCaller","lg","caller","sid","outsideTaps","onKeyboardClose","onPlus","onMinus","onShowCalculator","flush","FocusedInputFlush_register","FocusedInputFlush_unregister","isTargetOutside","cur","parentElement","keyboardHeight","scrollableContainer","overflowY","getComputedStyle","contentEl","firstElementChild","insideShiftedSheet","closest","inputRect","scrollerRect","innerHeight","visibleTop","visibleBottom","delta","scrollBy","behavior","keyboardHandler","maybeBlur","foundCurrentInput","foundOtherInput","reachedBody","nextInput","querySelector","focus","armedFinish","armDeferredBlur","finish","viaFallback","fallbackTimer","tag","tagName","cls","requestAnimationFrame","touchHandler","currentTarget","mouseHandler","baseFontSize","availableTextWidth","autowidth","valueFontSize","FitText_fontSize","placeholderFontSize","placeholder","paddingLeft","paddingRight","tabIndex","relatedTarget","stopImmediatePropagation","padding","showUnitInside","CustomKeyboard","enableCalculator","enableUnits","KeyboardButton","CustomKeyboardInner","handleBackspace","IconKeyboardClose","IconBackspace","setUnit","availableUnits","buildWeight","Weight_buildPct","getValue","newWeight","Weight_decrement","_inputWeightUnit","InputWeightUnit","Weight_increment","_iconBarbellSide","_subscriptions","_equipment","Equipment_getUnitOrDefaultForExerciseType","unitRef","onInputPropRef","onBlurPropRef","settingsRef","exerciseTypeRef","draftValueRef","newUnit","draft","Weight_buildAny","showPlates","Subscriptions_hasSubscription","Weight_is","addOn","PlatesCalculator","_Weight_calculatePlat","Weight_calculatePlates","plates","totalWeight","IconBarbellSide","blue","Weight_eq","Weight_formatOneSide","SendMessage_isIos","SendMessage_toIos","SendMessage_isAndroid","SendMessage_toAndroid","Linking","openURL","replace","ClipboardUtils_copy","Alert","alert","_clipboard","_sendMessage","isFontNormal","isNoUnderline","hitSlop","truncate","shouldTruncate","setShouldTruncate","isTruncated","setIsTruncated","preprocessed","directivesData","_match","exerciseExample","attrsStr","attrs","matchAll","weekLabels","onerm","preprocessDirectives","md","render","container","scrollHeight","setAttribute","codeEls","mod","codeEl","getAttribute","script","textContent","pre","wrapper","createElement","parentNode","replaceChild","createRoot","PlannerCodeBlock","hydrateLiftoscriptCodeBlocks","Exercise_findByNameAndEquipment","_exerciseTooltip","ExerciseTooltip","hydrateExerciseDirectives","weekSetup","weeksStr","weekLabelsStr","onermStr","_weeksStr$split$map","_weeksStr$split$map2","end","ProgramDetailsExerciseExample","programExerciseKey","defaultOnerm","hydrateExerciseExampleDirectives","dangerouslySetInnerHTML","__html","_client","_markdownIt","MarkdownIt","html","linkify","valueNode","dragHandle","_iconHandle","IconHandle","prefix","expandValue","addons","expandName","shouldShowRightArrow","_iconArrowRight","IconArrowRight","patternError","setPatternError","setIsExpanded","numberOfVisibleItems","isNameHtml","isNameBold","underName","MenuItemValue","maxLength","pattern","valueUnits","hasClear","nextLine","_scrollBarrell","ScrollBarrell","itemHeight","defaultSelectedValue","onSelect","handleChange","keyValue","title","checked","modalRef","prevProps","preautofocus","_ref2","callback","autofocusInputRef","noPaddings","isFullWidth","isFullHeight","overflowHidden","innerClassName","amrapModal","_modal","Modal","ModalAmrapContent","isPlayground","programExercise","otherStates","_groupHeader","_plannerProgramExercise","_props$amrapModal","isUnilateral","Exercise_getIsUnilateral","initialReps","completedReps","initialRepsLeft","completedRepsLeft","initialRpe","completedRpe","initialWeight","userVars","repsInputValue","setRepsInputValue","repsLeftInputValue","setRepsLeftInputValue","weightInputValue","setWeightInputValue","rpeInputValue","setRpeInputValue","stateMetadata","PlannerProgramExercise_getStateMetadata","stateMetadataKeys","userPrompted","PlannerProgramExercise_getState","initialUserVarInputValues","reduce","userVarInputValues","setUserVarInputValues","amrapValue","amrapLeftValue","rpeValue","userVarValues","MathUtils_round","InputNumber","InputWeight","UserPromptedStateVars","previousValue","typedValue","Weight_isPct","weightOrPctValue","GroupHeader","UserPromptedStateVar","getOpacity","muscle","muscles","opacity","defaultOpacity","getFill","G","contour","initialOnelink","Platform_onelink","onelink","setOnelink","_platform","userContext","setUserContext","isLoggedIn","setIsLoggedIn","getUserContext","ctx","display","flexDirection","skipTopNavMenu","_topNavMenu","TopNavMenu","maxBodyWidth","margin","flex","skipFooter","_footerPage","FooterPage","_reducer","_programPreviewPlaygroundDay","_useLensReducer3","_progress","_programPreviewPlaygroundInner","_deepmerge","_simpleMarkdown","_usePerfRenderCount","_webWorkoutModals","_StateContext","_useProgressiveItems","buildDayDispatch","playgroundDispatch","stats","action","newProgress","buildCardsReducer","onProgressChange","playgroundOnProgramChange","newProgram","progresses","wk","Progress_applyProgramDay","Progress_runInitialUpdateScripts","playgroundOnSettingsChange","newSettings","buildInitialState","initialEvaluatedProgram","Program_evaluate","dayNumber","Program_nextHistoryRecord","programDay","Program_getProgramDay","dayExercises","Program_getProgramDayUsedExercises","exerciseTags","flat","states","ObjectUtils_filter","PlaygroundWeekContent","handleProgressChange","handleFinish","programWeekDescription","description","visibleDays","useProgressiveItems","initialBatch","batchSize","debugLabel","SimpleMarkdown","gap","ProgramPreviewPlaygroundDay","weekName","onFinish","useNavModals","WebWorkoutModals","onSettingsChange","ProgramPreviewPlaygroundInner","stateRef","propsRef","pp","_Program_runAllFinish","Program_runAllFinishDayScripts","exerciseData","deepmerge","showAllWeeks","ProgramPreviewAllWeeks","ProgramPreviewPlaygroundInnerRenderer","headerContent","weekNames","singleWeek","renderWeekContent","scrollableTabsProps","hasNavbar","scrollTabZIndex","externalWeekIndex","hideWeekTabBar","ProgramPreviewPlaygroundLocal","initialState","_useLensReducer","useLensReducer","onEngage","_useLensReducer2","ProgramPreviewPlaygroundNav","_useAppState","useAppState","globalState","globalDispatch","updateState","playgroundState","lensRecordings","desc","recordings","lr","buildGlobalPlaygroundDispatch","numWeeks","cssRules","rules","breakpoint","allFitBreakpoint","buildAllWeeksCss","gridColumn","gridRow","scrollSnapAlign","usePerfRenderCount","_programPreviewPlaygroundExercise","_scroller","_workoutExerciseThumbnail","PreviewListOfExercises","colorToSupersetGroup","Progress_getColorToSupersetGroup","currentIdx","currentEntryIndex","currentSuperset","superset","Scroller","WorkoutExerciseThumbnail","shouldShowProgress","programExercises","programExerciseId","anEntry","ProgramPreviewPlaygroundExercise","_comparer","_iconCheckCircle","_iconEditSquare","_historyRecordSets","_workoutExerciseAllSets","_workoutExerciseUtils","ProgramPreviewHistoryRecordSets","PlannerProgramExercise_currentDescription","Reps_isFinished","Reps_isCompleted","getColor","PlaygroundExerciseTopBar","equipmentName","HistoryRecordSetsView","ProgramPreviewPlayground","Program_getDayData","currentEquipmentName","Equipment_getEquipmentNameForExerciseType","exerciseNotes","Exercise_getNotes","supersetEntry","Progress_getNextSupersetEntry","supersetExercise","WorkoutExerciseUtils_getBgColor50","xOffset","WorkoutExerciseAllSets","isCurrentProgress","userPromptedStateVars","lbSets","lbWarmupSets","IconEditSquare","neutralsubtle","completedWeight","IconCheckCircle","staticState","ComparerUtils_noFns","ProgramPreviewPlaygroundExerciseEditContent","_exerciseRm","hasStateVariables","pendingStateVarsRef","pendingRm","setPendingRm","hideVariables","ExerciseRM","ProgramStateVariables","onEditStateVariable","pendingRef","stateKey","_scrollableTabs","ScrollableTabs","offsetY","shouldNotExpand","nonSticky","tabs","editModalProgramExerciseId","editModal","editModalProgramExercise","Program_getProgramExercise","setTimerModal","showSetTimerModal","closeSetTimerModal","setTimerEditModal","setTimerEditSet","roundingModal","roundingEntry","roundingSet","_setTimerBanner","SetTimerBannerContent","closeSetTimerEditModal","_setTimerEdit","SetTimerEditContent","closeRoundingModal","_weightRoundingInfo","WeightRoundingInfoContent","_modalAmrap","ModalAmrap","_bottomSheetEditTarget","BottomSheetEditTarget","_programPreviewPlaygroundExerciseEditModal","ProgramPreviewPlaygroundExerciseEditModal","EditProgramLenses_properlyUpdateStateVariable","Program_stateValue","acc","lens","variableKey","Exercise_toKey","_editProgramLenses","spans","StyledText_fragmentsToSpans","baseStyle","fontFamily","normalizeFontWeight","fontStyle","textDecorationLine","noWrap","whiteSpace","preserveWhitespace","textAlign","numberOfLinesCss","numberOfLines","topTestId","topDataCy","span","fragmentCss","overflow","textOverflow","WebkitLineClamp","WebkitBoxOrient","React","every","cl","xmlns","xml","defaults","textColorPattern","textSizePattern","effectiveClassName","resolveFontFamily","dataTestid","allowFontScaling","isBold","isSemiBold","isItalic","Text_hasSizeClass","Text_resolveFontFamily","svg","setSvg","cancelled","QRCode","SvgXml","_qrcode","strikeThrough","ProgressStateChangesView","diffState","diffVars","prints","updatePrints","hasDiffState","ObjectUtils_isNotEmpty","hasDiffVars","onSuppressProgress","ExerciseChanges","isSuppressed","StateVariablesChanges","Prints","strike","print","Weight_print","changes","Program_computeProgressStateChanges","showEndOfDay","forceShow","numberOfDummyItems","floor","barrelRef","isDefaultSet","isTurnedOn","barrel","defaultSelectedIndex","scrollTop","setDefaultIndex","selected","visibility","WebkitOverflowScrolling","scrollSnapType","scrollTo","StringUtils_truncate","defaultIndex","selectedIndex","setSelectedIndex","barWidth","setBarWidth","tabsRow","paddingTop","isInvalid","nameClass","isSelected","activeColor","button","secondarystroke","activeTextColor","flexGrow","flexShrink","flexBasis","borderBottomWidth","borderBottomColor","tabBar","onLayout","layout","content","fillHeight","ScrollView","stickyHeaderIndices","contentContainerStyle","stickyStyle","scrollRef","scrollToEnd","animated","x","horizontal","showsHorizontalScrollIndicator","removeClippedSubviews","isActive","onTick","setTick","onTickRef","startedAt","Progress_isSetTimerCheckDue","Thunk_checkSetTimer","intervalId","setInterval","clearInterval","elapsedMs","pct","elapsedLabel","recordSetTimer","keepTiming","forceUpdateEntryIndex","isExternal","keepSetTimerRunning","Thunk_recordSetTimer","BannerHeader","subtitle","_workoutExerciseSet","WorkoutExerciseSetTarget","setType","ProgressBar","initialSeconds","completedSetTimer","minutesValue","setMinutesValue","StringUtils_pad","secondsValue","setSecondsValue","lbModal","onClear","onSave","minutes","seconds","newSeconds","rendered","tokens","renderBlocks","elements","_link","_internalLink","_iconSwap","_iconEdit","_iconPreview","_plannerCodeBlock","ICON_RE","depth","inline","renderInline","level","parseInt","sizeClass","ordered","closeType","listEnd","findMatchingClose","items","renderListItems","orderIndex","itemEnd","bullet","openType","pushTextWithIcons","collectInlineUntil","endIndex","attrGet","internalHref","InternalLink","Link","out","keyPrefix","lastIndex","match","part","exec","renderIcon","IconSwap","IconEdit2","IconPreview","startIndex","collected","openThreshold","closeThreshold","translateX","setTranslateX","startX","startY","startScrollTop","isDragging","isScrolling","isSwiping","isOpen","translateXRef","moveRef","onPointerDownProp","onPointerDown","updateTranslate","handlePointerDown","parentScroller","scroller","overflowX","touches","clientX","clientY","handlePointerMove","cancelable","deltaX","abs","scrollThreshold","initiateTreshold","handlePointerUp","passive","showHint","close","isWhite","PageTheme_toggle","_iconMoon","IconMoon","_iconSun","IconSun","_pageTheme","isMenuOpen","setIsMenuOpen","isAccountModalOpen","setIsAccountModalOpen","mobileRight","_themeToggle","ThemeToggle","_iconHamburger","IconHamburger","_iconClose","IconClose","getMenuItems","affiliateEnabled","_onelink","Onelink","redditname","googlename","_iconGooglePlay","IconGooglePlay","DesktopNav","onAccountClick","ModalAccount","_account","_iconUser","hideClass","IconUser","green","Account","equipmentData","Equipment_getEquipmentDataForExerciseType","Weight_convertTo","Weight_display","WeightRoundingEquipmentExplanation","targetWeight","isAssisting","rounding","Exercise_defaultRounding","isFixed","fixed","CollectionUtils_sort","usesBodyweight","useBodyweightForBar","currentBodyweight","barWeight","bar","platesResult","_iconPlus","_iconSwapSmall","_progressStateChanges","warmupSets","buttonBgColor","WorkoutExerciseUtils_getBgColor100","nextSetIndex","Reps_isFinishedSet","exerciseUnit","targetLabel","targetType","getTargetColumnLabel","workoutSettings","lbEntry","rpeLabel","allSets","longest","rpeColumnLabel","hasRpe","hasTime","rpeColumnWidthLabel","columnWidths","widths","computeSetColumnWidths","lbWarmupSetByIndex","lbSetByIndex","lastSets","onAddWarmupSet","unilateral","Reps_addSet","onAddSet","onTargetClick","IconSwapSmall","lightgray","separator","check","WorkoutExerciseSet","onStopShowingHint","helps","lastSet","ProgressStateChanges","progressSnapshot","IconPlus2","labelW","ch","computeRpeColumnWidth","iconWidth","_iconPlayCircle","_swipeableRow","_editProgressEntry","StyledText_cls","aSet","isDiffWeight","hasTarget","underline","underlineRounded","WorkoutExerciseLastSet","statusColor","WorkoutExerciseUtils_setsStatusToTextColorValue","Reps_setsStatus","semibold","RpeWeightHint","multiplier","Weight_rpeMultiplier","Weight_multiply","getDataCy","WorkoutExerciseSetTargetField","WorkoutExercisePlatesCalculator","WorkoutExerciseE1RMSet","setWeight","formattedPlates","Reps_avgUnilateralCompletedReps","e1RM","Weight_getOneRepMax","placeholderReps","placeholderWeight","completedRpeValue","WorkoutExerciseUtils_getBorderColor100","hasEdit","repsInputWidth","weightInputWidth","onInputLeftReps","onBlurLeftReps","onInputReps","Reps_enforceCompletedSet","onBlurReps","onBlurWeight","onInputWeight","onCompleteSet","onEditSetTimer","onOpenRoundingInfo","isRoundedWeight","SwipeableRow","primarybackground","WorkoutExerciseUtils_getIconColor","IconPlayCircle","marginLeft","EditProgressEntry_showEditSetModal","justifyContent","CollectionUtils_removeAt","SetsProgressBadge","counter","completed","total","hasSupersets","colorAndSupersetGroup","ObjectUtils_entries","supersetColor","setsStatus","isCurrentSuperset","WorkoutExerciseUtils_setsStatusToBorderColor","totalSetsCount","completedSetsCount","dataSet","marginVertical","WorkoutExerciseUtils_setsStatusToColor","env","oldState","isFinishDayAction","isExternalStorageMerge","Storage_isChanged","Thunk_sync2","log","programs","newProgramIds","programIds","lastReducerActions","Diagnostics_getLastActions","newPrograms","Progress_getCurrentProgress","oldProgram","Program_getProgram","ObjectUtils_isEqual","oldDayKeys","Program_getDayExerciseKeys","oldBodyweight","Stats_getCurrentMovingAverageBodyweight","newBodyweight","screenData","getCurrentScreenData","oldExerciseKey","params","oldProgramId","oldExerciseStateKey","oldPlannerState","editProgramExerciseStates","newPlannerState","EditProgramUiHelpers_getChangedKeys","navigationRef","isReady","setParams","Progress_getProgress","oldExerciseData","newExerciseData","ObjectUtils_changedKeys","changedExercises","affectedEntries","programExerciseIds","oldEquipment","Equipment_getCurrentGym","newEquipment","changedEquipmentIds","equipmentId","Equipment_getEquipmentIdForExerciseType","google","Subscriptions_cleanupOutdatedGooglePurchaseTokens","UndoingFlag_set","_getIdbKey","_getInitialState","_program2","_progress0","_storage","_indexeddb","_basicBeginnerProgram","_adminDebug","_log","_runner","_date","_undoingFlag","_diagnostics","_nativeWorkoutBridge","_nativeWatchBridge","_nativeWorkoutMirroringBridge","_editProgramUiHelpers","_history","_stats","_perfTracker","_perfEnabled","_perfSetCompleteProbe","_perfScorecard","isLoggingEnabled","isAdmin","currentAccount","IndexedDBUtils_get","messageerror","messagesuccess","nosync","localStorage","rawStorage","notification","finalStorage","hasUnrunMigrations","unrunMigrations","maybeStorage","Storage_get","serverStorage","getStorage","maybeServerStorage","corruptedstorage","backup","postDebug","local","confirmed","Storage_getDefault","finalLastSyncedStorage","lastSyncedStorage","oldProgress","migratedProgress","Storage_getHistoryRecord","vtype","loading","basicBeginnerProgram","programsIndex","revisions","freshMigrations","AdminDebug_isDebugAccountId","editProgramStates","buildState","LogUtils_log","timerId","Progress_completeSetAction","Progress_changeAmrapAction","Progress_checkSetTimer","Progress_closeTimedSet","recording","reducerWrapper","storeToLocalStorage","persistence","Diagnostics_setLastState","Diagnostics_recordAction","time","DateUtils_formatHHMMSS","perfOn","PerfEnabled_isEnabled","perfActionType","perfActionDesc","perfSyncStart","reducer","oldHistoryLen","newHistoryLen","actionDesc","oldLen","newLen","versions","Storage_updateVersions","_versions","newState2","IndexedDBUtils_set","probeTarget","PerfProbe_isTarget","save","stringify_ms","stringifyMs","write_ms","writeMs","bytes","shards","perfDurationMs","PerfScorecard_recordAction","PerfProbe_onAction","PerfEnabled_tier2","PerfTracker_recordEvent","PerfTracker_getSessionId","duration_ms","ts","Progress_setProgress","currentProgramId","historyRecord","Progress_getProgressById","newStorage","Progress_finishWorkout","Progress_isCurrent","Progress_stop","Progress_showUpdateDate","date","Progress_changeDate","NativeWorkoutBridge_discardWorkout","NativeWatchBridge_sendDiscardWorkoutToWatch","NativeWorkoutMirroring_resetWatchWorkoutState","h","History_deleteRecords","Progress_stopTimer","Progress_startTimer","lensRecording","_ref70","getState","isValid","load","checkAdminKey","_x169","_x170","_x171","_ref73","createDebugSession","force","_x178","_x179","_x180","_ref71","snapshots","getDebugSnapshotList","_x172","_x173","_x174","debugTimestamp","_ref72","AdminDebug_fetchDebugSnapshotStorage","AdminDebug_fetchStorage","debugStorage","Thunk_postevent","saveFull","getInitialState","Thunk_fetchInitial","navigateTo","getNavigationService","tab","_x175","_x176","_x177","_ref7","signInResult","SignIn_apple","SendMessage_toIosWithResult","AppleID","auth","_response$authorizati","signIn","handleLogin","historyRecords","customExercises","_ref58","applied","ImportSession_apply","importSessions","_x142","_x143","_ref83","IapHelpers_setLoading","lifetime","iap","getAvailablePurchases","IapHelpers_alertAlreadySubscribed","IapHelpers_clearLoading","requestInAppProduct","sku","IapHelpers_getSkus","warn","_x215","_x216","_x217","_ref24","hadSetTimer","_resolveTimedSetProgr2","resolveTimedSetProgramContext","timerEntryIndex","audio","play","volume","vibration","Thunk_refreshLiveActivity","_ref75","postClaimKey","finishFreeAccess","Thunk_log","_x184","_x185","_x186","screens","_ref40","screen","cleanupScreenEditState","_x102","_x103","restTimer","restTimerSince","_ref22","isWarmup","adjustedSetIndex","SendMessage_print","Program_getFullProgram","Thunk_updateLiveActivity","_ref42","confirmation","Screen_shouldConfirmNavigation","Dialog_confirm","_x104","_x105","_x106","_ref62","Thunk_logOut","_x153","_x154","_x155","_ref74","setup","postSetupTestAccount","apiKeyBound","_x181","_x182","_x183","_ref64","_x156","_x157","_x158","_ref66","_ref67","deleteAccount","_x165","_x162","_x163","_x164","_ref45","_x110","_ref43","_x107","_ref4","_ref52","csv","CSV_toString","History_exportAsCSV","Exporter_toFile","DateUtils_formatYYYYMMDD","_x126","_x127","_x128","_ref50","Program_exportProgramToFile","version","_x120","_x121","_x122","_ref51","Program_exportProgramToLink","_x123","_x124","_x125","_ref53","PlannerProgram_generateFullText","_x129","_x130","_x131","_ref49","ImportExporter_exportStorage","_x117","_x118","_x119","_ref65","Account_getAll","_x159","_x160","_x161","_ref48","programRevisions","getProgramRevisions","context","Rollbar","_x114","_x115","_x116","_ref29","_x78","_x79","_x80","_ref44","_yield$getNavigationS6","goBack","startTime","_x108","_x109","_ref5","editProgram","_ref60","getLatestMigrationVersion","postShortUrl","_x147","_x148","_x149","SignIn_google","loginResult","storageJson","isLiveActivity","_ref27","watchStorage","phoneHistoryLen","watchHistoryLen","wasOnProgressScreen","hadProgress","mergedStorage","Storage_mergeStorage","prevEntryIndex","mergedLastSynced","mergedHistoryLen","beforeProgress","afterProgress","timerSince","timerMode","remaining","Progress_scheduleTimerNotification","NativeTimerBridge_stopTimer","LiveActivityManager_updateLiveActivityForNextEntry","progressIsNowEmpty","Thunk_pushScreen","_ref87","subscriptionLoading","_x225","_x226","_ref89","skus","subs","fetchSubscriptions","monthly","yearly","inApp","fetchInAppProducts","newPrices","newOffers","sub","displayPrice","mapped","subscriptionOffers","offerId","formattedPrice","product","storedPrices","subscriptionPrices","_x230","_x231","_x232","purchase","_ref85","_getState","keepScreen","keepSubscriptionScreenOpen","renewsAsProductId","receipt","IapHelpers_readReceiptOrJwsIOS","Thunk_setAppleReceipt","purchaseToken","productId","Thunk_setGooglePurchaseToken","price","currency","resolved","getProductPrice","Analytics_trackPurchase","transactionId","transactionDate","finishTransaction","Thunk_iapRefreshActiveSubscriptions","_x221","_x222","_x223","_ref86","_x224","_ref77","apple","Thunk_restorePurchases","_x190","_x191","_x192","rawCsv","_ref55","importWithSpinner","ImportFromLiftosaur_convertLiftosaurCsvToHistoryRecords","ImportFileError","_x135","_x136","_x137","_ref59","ImportFromLink_importFromLink","Storage_setAffiliate","Thunk_importProgram","_x144","_x145","_x146","_ref56","ImportFromHevy_convertHevyCsvToHistoryRecords","_x138","_x139","_ref54","parsedMaybeStorage","_x132","_ref36","reviewRequests","lastReviewRequest","InAppReview_request","_x94","_x95","_ref37","signupRequests","lastsignupRequest","_x96","_x97","_ref38","OnloadModal_getNext","Thunk_maybeRequestHearAboutUs","_x98","_x99","_ref92","_dispatch","openManageSubscriptions","_x239","_x240","_x241","_ref26","_ref10","_ref80","_x199","_x200","_x201","_ref30","currentProgram","Program_isEmpty","Program_editAction","_x81","_x82","workoutProgramId","_ref33","isFromWorkout","editProgramIds","navigateToModal","fromWorkout","_x87","_x88","_ref32","editProgramState","_x85","_x86","recordedSeconds","_ref23","_resolveTimedSetProgr","_ref78","postClaimCoupon","_result$data2","_x193","_x194","_x195","_ref88","presentCodeRedemptionSheetIOS","_x227","_x228","_x229","_ref28","currentState","currentHistoryLen","diskHistoryLen","_x75","_x76","_x77","_ref14","health","requestPermissions","_ref13","bodyweight","bodyfat","waist","saveMeasurements","_ref12","intervalsCount","intervals","saveWorkout","successAlert","_ref31","_x83","_x84","buildSubscribeThunk","_ref68","_x166","_x167","_x168","_ref91","requestSubscription","active","subscriptionStatus","getActiveSubscriptions","purchaseTokenAndroid","isDeferred","androidOldPurchaseToken","androidOldProductId","androidReplacementMode","until","_x236","_x237","_x238","_ref15","appleSyncEnabled","appleHealthSyncMeasurements","appleHealthSyncSleepNutrition","googleSyncEnabled","googleHealthSyncMeasurements","googleHealthSyncSleepNutrition","HealthSync_eligibleForAppleHealth","HealthSync_eligibleForGoogleHealth","queue","enqueue","_syncHealthKit2","_syncHealthKit","sessionId","_ref57","editedCount","ImportSession_findEditedRecordIds","editedWarning","sourceName","workoutCount","StringUtils_pluralize","DateUtils_format","undone","ImportSession_undo","_x140","_x141","_ref35","_x91","_x92","_x93","newTimer","skipLiveActivityUpdate","_ref20","Progress_updateTimer","_navUtils","_signIn","_inAppReview","_state3","_importexporter","_importSession","_importTypes","_csv","_exporter","_whatsnewUtils","_onloadModal","_screen","_iapHelpers","_nativeTimerBridge","_importFromLink","_migrations","_rollbar","_importFromLiftosaur","_importFromHevy","_sync3","_editStats","_healthSync","_deviceId","_liveActivityManager","_keychainStore","_analytics","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","NoRetryError","_Error","noretry","_inherits2","_wrapNativeSuper2","extra","_ref6","detail","_ref9","affiliates","Subscriptions_listOfSubscriptions","referrer","landingPage","Thunk_verifySubscriptionKey","_ref0","verifySubscriptionKey","_ref1","isDebugAccount","KeychainStore_clearAuthToken","SignOut_google","NativeWatchBridge_sendClearAuthToWatch","_sync2","_sync","handleResponse","handleResponseArgs","requestedLastStorage","new_original_id","currentStorage","serverHistoryLen","historyVersions","serverDeletedHistory","deleted","probeMergeTarget","probeMergeT0","merge_ms","history_len","oldPrograms","oldVersions","newVersions","lastUserId","newUserId","postSync","aborted","probeSyncTarget","probeSyncT0","Sync_getStorageUpdate2","build_ms","has_update","syncMeasurements","syncSleepNutrition","anchor","appleHealthAnchor","googleHealthAnchor","weightUnit","lengthUnit","lengthUnits","EditStats_uploadHealthStats","versionStats","statType","concat","getDeletedStats","windowDays","daily","syncDailyMetrics","metrics","EditStats_uploadDailyMetrics","_ref17","isProcessing","getIsProcessing","queueLength","_ref18","args2","_ref21","LiveActivityManager_updateProgressLiveActivity","_ref25","Progress_getFirstIncompleteWorkoutSet","absoluteSetIndex","Reps_findNextEntryAndSetIndex","timerSetIndex","opts","_ref34","stack","scroll","_x89","_x90","_ref39","OnloadModal_shouldShowHearAboutUs","_x100","_x101","progressId","ObjectUtils_omit","exerciseStateKey","Thunk_pullScreen","Thunk_fetchPrograms","_ref46","details","all","programDetail","author","shortDescription","isMultiweek","_x111","_x112","_x113","_x133","_x134","_importWithSpinner","importLinkData","_ref61","maybeProgram","decoded","ImportExporter_getExportedProgram","_result$data","existingCustomExerciseNames","ObjectUtils_values","newCustomExercises","authorid","clonedAt","PlannerProgram_hasNonSelectedWeightUnit","fromUnit","Weight_oppositeUnit","toUnit","PlannerProgram_switchToUnit","CollectionUtils_setAt","_x150","_x151","_x152","_ref76","whatsNew","WhatsNew_updateStorage","Subscriptions_verifyAppleReceipt","Subscriptions_setAppleReceipt","Subscriptions_cleanupOutdatedAppleReceipts","_x187","_x188","_x189","_ref79","_x196","_x197","_x198","_ref81","Subscriptions_verifyGooglePurchaseToken","Subscriptions_setGooglePurchaseToken","_x202","_x203","_x204","_x205","_x206","_x207","_load2","_load","attempt","_x208","_x209","_x210","_x211","_handleLogin","oldUserId","configure","RollbarUtils_config","person","storageResult","Analytics_trackSignUp","new_userid","DeviceId_get","expiresAt","KeychainStore_setAuthToken","NativeWatchBridge_sendAuthToWatch","loadingKey","messageType","_ref82","applePromo","IapHelpers_applePromoToAdapter","googleOfferId","googlePromo","offer","_x212","_x213","_x214","_ref84","interactive","purchases","_x218","_x219","_x220","_ref90","serverPending","_yield$Promise$all","_yield$Promise$all2","owned","lifetimeSku","ownedLifetime","patchedSubs","activeStoreSub","refreshGoogleSubscription","pendingProduct","expirationDate","hint","subscriptionPendingHint","hintValid","keepHint","effectivePending","pendingProductId","_x233","_x234","_x235","SendMessage_iosAppVersion","SendMessage_androidAppVersion","standalone","SendMessage_iosVersion","Version","SendMessage_androidVersion","_ImportExporter_getExportedProgram","_ImportExporter_handleUniversalLink","_settings","parsedMaybeProgram","exportedProgram","PlannerProgram_convertExportedPlannerToProgram","Settings_build","timers","workout","ObjectUtils_pick","pathname","_lr","spec_Keyword","if","else","for","LRParser","deserialize","stateData","goto","nodeNames","maxTerm","skippedNodes","repeatNodeCount","tokenData","tokenizers","topRules","Program","specialized","term","tokenPrec","_liftoscriptFns","_liftoscript","NodeName","LiftoscriptSyntaxError","_SyntaxError","SyntaxError","getChildren","node","cursor","firstChild","nextSibling","comparing","operator","comparator","Weight_gt","Weight_lt","Weight_gte","Weight_lte","assert","LiftoscriptEvaluator","bindings","fns","fnContext","vars","updates","_this$getLineAndOffse","getLineAndOffset","_this$getLineAndOffse2","NumberExpression","WeightExpression","Percentage","VariableExpression","VariableIndex","nameNode","getChild","Keyword","LiftoscriptFns_bindingStaticType","LiftoscriptFns_isValidArg","LiftoscriptFns_acceptsTypeAt","argText","argSignature","LiftoscriptFns_argSignature","printedValue","linesLengths","lineLength","expr","numberNode","unitNode","Unit","evaluate","programNode","shift","getWeight","oldWeightStr","newWeightStr","Weight_smartConvert","substring","stateKeys","StateVariable","getStateKey","StateVariableIndex","stateKeyNode","BuiltinFunctionExpression","_getChildren","_getChildren2","_toArray2","keyword","fnArgs","LiftoscriptFns_isFnName","arity","LiftoscriptFns_arity","expected","fnArg","staticType","staticTypeOfNode","ForExpression","variableNode","Variable","AssignmentExpression","_getChildren3","indexExprs","_getChildren5","_getChildren6","indexExpr","v1","expression","op","oldNumberOfSets","weights","evaluatedValue","MathUtils_applyOp","evaluateToNumber","originalWeights","RPE","mr","setTime","amraps","logrpes","askweights","cr","cw","completedWeights","completedRPE","ns","indexes","ie","indexValues","calculateIndexValues","normalizedIndexValues","normalizeTarget","evalutedValue","evaluateToNumberOrWeightOrPercentage","Weight_applyOp","rm1","Weight_convertToWeight","roundWeight","maxTargetLength","_normalizedIndexValue2","_normalizedIndexValue3","exerciseVariationIndex","_normalizedIndexValue4","descriptionIndex","_normalizedIndexValue5","Wildcard","newTarget","unshift","toNumber","BlockExpression","child","isSkipped","BinaryExpression","_getChildren7","_getChildren8","evalLeft","evalRight","subtract","multiply","divide","modulo","plusNode","Plus","MathUtils_roundFloat","Ternary","_getChildren9","_getChildren0","condition","or","forInExpression","ForInExpression","blockNode","forIn","varKey","IfExpression","parenthesisNodes","ParenthesisExpression","blockNodes","parenthesisNode","lastBlock","_getChildren1","_getChildren11","_getChildren13","_getChildren14","indexNode","indexEval","variable","recordVariableUpdate","changeNumberOfSets","changeBinding","IncAssignmentExpression","_getChildren15","_getChildren16","stateVar","incAssignmentExpr","currentValue","_getChildren17","_getChildren18","argValues","validateFnArg","UnaryExpression","_getChildren19","_getChildren21","_getChildren22","Current","binding","one","two","operation","Weight_op","getValueRaw","oldScript","LiftoscriptParser","keywordNode","parent","number","percentage","array","sample","signature","liftoscriptFnSignatures","optional","schema","VScriptBindings","is","_types","optionalNumbers","optionalWeights","VWeight","object","union","VPercentage","completedSetTime","picklist","programNumberOfSets","completedNumberOfSets","scalar","numberOrWeight","numberOrWeightArray","nullish","aggregatable","boolean","returns","roundConvertWeight","calculateTrainingMax","calculate1RM","rpeMultiplier","sum","variadic","zeroOrGte","any","increment","decrement","_language","_highlight","liftoscriptParserWithMetadata","liftoscriptParser","styleTags","variableName","LineComment","lineComment","indentNodeProp","column","foldNodeProp","foldInside","LRLanguage","define","parser","latestMigrationVersion","migrations","aStorage","deletedGyms","reminder","plannerProgram","customExerciseKey","customExercise","updatedAt","graphs","graph","newExerciseStr","changeWeightsToCompletedWeights","exerciseText","createdAt","gym","gyms","random","muscleGroups","progressUi","muscleMultipliers","oldMultipliers","newMultipliers","mm","Progress_getEntryId","legacyUi","renames","sort","escapeRegExp","rename","RegExp","maxVersion","Storage_partialStorageToStorage","currentVersion","maxVersionInt","versionStr","_Account_getAll","nickname","getAccountSummaries","summary","_AdminDebug_fetchDebugSnapshotStorage","_AdminDebug_fetchStorage","adminDebugPrefix","AdminDebug_scrambledTempUserId","snapshotStorage","getDebugSnapshotStorage","pgms","Thunk_pushToEditProgram","Program_createFromHistoryRecord","customPrograms","emptyProgramId","past","future","isProgressEnabled","isUpdateEnabled","update","isExerciseVariationsEnabled","modeTabIndex","acrossWeeksTabIndex","focusedDay","exerciseUi","edit","weekUi","oldStateKey","newStateKey","pendingNewKey","exercisePickerState","exercisePickerChange","exercisePickerVariationIndex","ObjectUtils_diff","newEvalutedProgram","ex","updateStateVariable","findBy","nextDay","oldExerciseType","oldExercise","startingWeightKg","startingWeightLb","oldName","flatMap","removeStateVariableMetadata","editStateVariable","Reps_newSet","sharedTime","st","coll","hidden","byKey","sleep","calories","protein","upsert","existing","incoming","existingByTimestamp","incomingByTimestamp","merged","inc","prevUuid","appleUuid","googleUuid","uuid","kept","CollectionUtils_sortBy","statsHealthDef","upserted","dataAny","deletedStatsArr","deletedStats","weightValues","bodyfatValues","waistValues","Weight_roundTo005","Length_convertTo","applyValues","_length","kg","equipmentSettings","Equipment_isBuiltIn","builtInEquipmentKey","equipments","eq","builtInEquipmentName","Equipment_currentEquipment","gymEquipment","isDeleted","firstEquipment","equipmentUnit","newEquipmentData","oldEquipmentData","CollectionUtils_concatBy","Weight_compare","Equipment_getGymByIdOrCurrent","gymId","currentGymId","exerciseEquipment","currentGym","allExercises","tMuscles","sMuscles","types","smallImageUrl","largeImageUrl","Exercise_editCustomExercise","deletedExerciseKey","deletedExercise","bodyParts","Exercise_createCustomExercise","Exercise_getById","sortedEquipment","Exercise_getMetadata","barbell","cable","dumbbell","smith","band","kettlebell","leverageMachine","medicineball","ezbar","trapbar","eqp","Exercise_defaultSynergistMuscles","allMuscleGroups","Muscle_getScreenMusclesFromMuscle","muscleGroup","Exercise_defaultTargetMuscles","allExercisesList","query","tokenizeQuery","scored","score","scoreExerciseAgainstTokens","byName","localeCompare","StringUtils_fuzzySearch","filterTypes","_id","targetMuscleGroups","CollectionUtils_flat","synergistMuscleGroups","ft","StringUtils_capitalize","isSubstitute","Exercise_allExpanded","Exercise_filterExercises","Exercise_filterExercisesByType","Exercise_sortExercises","maybeGetExercise","exerciseId","Exercise_findIdByName","Exercise_findById","nameAndEquipment","parts","foundEquipment","bareNameCustom","getCustomExercisesNameIndex","fullNameKey","normalizeExerciseName","fullNameExerciseId","live","fullNameExercise","_type$split","_type$split2","slug","possibleEquipments","equipmentKey","StringUtils_camelCase","StringUtils_undashcase","Exercise_buildName","ids","getExercise","notes","override","volumeMultiplier","programExerciseWarmupSets","warmup","defaultWarmup","warmupValues","warmup10","warmup45","warmup95","Exercise_upsertCustomExercise","Exercise_deleteCustomExercise","updateSettings","Program_changeExerciseName","EditProgram_updateProgram","trimmed","forbiddenExerciseNameChars","allEquipment","forbiddenExerciseNameCharsAll","names","ce","tm","Exercise_targetMuscles","Exercise_synergistMuscles","rated","Exercise_all","Exercise_similarRating","Muscle_getMusclesFromScreenMuscle","rating","Exercise_synergistMuscleMultipliers","Exercise_toUrlSlug","_muscle4","_editProgram","abWheel","arnoldPress","aroundTheWorld","backExtension","ballSlams","battleRopes","behindTheNeckPress","benchDip","benchPress","benchPressCloseGrip","benchPressWideGrip","bentOverOneArmRow","bentOverRow","bicepCurl","bicycleCrunch","boxJump","boxSquat","bulgarianSplitSquat","burpee","cableCrossover","cableCrunch","cableKickback","cablePullThrough","cableTwist","calfPressOnLegPress","calfPressOnSeatedLegPress","chestDip","chestFly","chestPress","chestSupportedRow","chinUp","clean","cleanandJerk","concentrationCurl","crossBodyCrunch","crunch","cycling","deadlift","deadliftHighPull","declineBenchPress","declineCrunch","deficitDeadlift","ellipticalMachine","facePull","flatKneeRaise","flatLegRaise","frontRaise","frontSquat","gobletSquat","goodMorning","gluteBridge","gluteBridgeMarch","gluteKickback","hackSquat","hammerCurl","handstandPushUp","hangClean","hangSnatch","hangingLegRaise","highKneeSkips","highRow","hipAbductor","hipAdductor","hipThrust","inclineBenchPress","inclineBenchPressWideGrip","inclineChestFly","inclineChestPress","inclineCurl","inclineRow","invertedRow","isoLateralChestPress","isoLateralRow","jackknifeSitUp","jumpRope","jumpSquat","jumpingJack","kettlebellSwing","kettlebellTurkishGetUp","kippingPullUp","kneeRaise","kneelingPulldown","kneestoElbows","latPulldown","lateralBoxJump","lateralRaise","legsUpBenchPress","legCurl","legExtension","legPress","lunge","lyingBicepCurl","lyingLegCurl","mountainClimber","muscleUp","obliqueCrunch","overheadPress","overheadSquat","pecDeck","pendlayRow","pistolSquat","plank","powerClean","powerSnatch","preacherCurl","pressUnder","pullUp","pullover","pushPress","pushUp","reverseCrunch","reverseCurl","reverseFly","reverseGripConcentrationCurl","reversePlank","reverseLatPulldown","reverseLunge","reverseWristCurl","romanianDeadlift","reverseHyperextension","rowing","russianTwist","safetySquatBarSquat","seatedCalfRaise","seatedFrontRaise","seatedLegCurl","seatedLegPress","seatedOverheadPress","seatedPalmsUpWristCurl","seatedRow","seatedWideGripRow","shoulderPress","shoulderPressParallelGrip","shrug","sideBend","sideCrunch","sideHipAbductor","sideLyingClam","sidePlank","singleLegBridge","singleLegCalfRaise","singleLegDeadlift","singleLegGluteBridgeBench","singleLegGluteBridgeStraight","singleLegGluteBridgeBentKnee","singleLegHipThrust","sissySquat","sitUp","skullcrusher","slingShotBenchPress","snatch","snatchPull","splitSquat","splitJerk","squat","squatRow","standingCalfRaise","standingRow","standingRowCloseGrip","standingRowRearDeltWithRope","standingRowRearHorizontalDeltWithRope","standingRowVBar","stepUp","stiffLegDeadlift","straightLegDeadlift","sumoDeadlift","sumoDeadliftHighPull","superman","tBarRow","thruster","toesToBar","torsoRotation","trapBarDeadlift","tricepsDip","tricepsExtension","tricepsPushdown","uprightRow","vUp","widePullUp","wristCurl","wristRoller","zercherSquat","wallPushup","inclinePushup","kneePushup","diamondPushup","pseudoPlanchePushup","pikePushup","ringDip","negativeDip","verticalRow","wideRow","ringRow","tuckFrontLeverRow","frontLeverRow","scapularPullUp","deadHang","negativePullup","assistedSquat","shrimpSquat","nordicCurl","handstand","wallHandstand","crowPose","dragonFlag","copenhagenPlank","hangingKneeRaise","archHang","supportHold","pallofPress","renegadeRow","nameToIdMapping","metadata","threshold","shouldSkipThreshold","programExerciseWarmupSet","warmupWeight","roundedWeight","custom","str","customExercisesNameIndexCache","StringUtils_uncamelCase","Exercise_defaultSynergistMuscleMultipliers","synergistMultiplier","etm","esm","existingExercise","sameNameDeletedExercise","scoreTokenAgainstWords","words","fullText","isDefaultEquipment","normalizedQuery","nameWords","equipmentWords","normalizedFullName","totalScore","nameScore","equipmentScore","best","currentExerciseType","aRating","Muscle_getAvailableMuscleGroups","lowercaseFilterTypes","aTargetMuscleGroups","bTargetMuscleGroups","ExerciseImageUtils_id","availableSmallImages","availableLargeImages","checkDomain","imageUrl","beforeTime","twoMonthsAgo","hr","endTime","isBefore","seenKeys","count","Reps_isStarted","lastEntryTimestamp","lastEntry","lastNoteTimestamp","lastNote","timeMs","History_workoutTime","all1RMs","Exercise_eq","max1RM","max1RMHistoryRecord","max1RMSet","initial","lastHistoryEntry","lastHistoryRecord","maxTime","minTime","Infinity","maxSet","History_getMaxWeightSet","maxWeight","maxWeightHistoryRecord","idSet","warmupSet","programName","dayName","toISOString","maxSets","entryMaxSet","History_getMaxWeightSetFromEntry","History_findPersonalRecord","excludeRecordId","resultTime","forceEndTime","deletedProgramExercises","originalUpdatePrints","Program_getProgramExerciseForKeyAndDay","_entry","_excluded2","useRm1","ProgramExercise_isUsingVariable","descriptionSnapshot","snapshot","History_compactDiff","History_buildProgressSnapshot","History_pauseWorkout","currentEntry","nextSet","last","startWeekFromMonday","setDate","setMonth","getMonth","getDate","getDay","setHours","recordDate","lensGetters","NativeWorkoutBridge_pauseWorkout","lbu","getters","hasSubscription","Progress_lbProgress","History_resumeWorkout","History_totalEntryReps","History_totalEntrySets","Weight_add","History_totalEntryWeight","_collector","_programExercise","_microMemoize","diff","History_getMax1RMSetFromEntry","History_getMax1RMSet","weightDiff","History_collectProgramChangeTimes","changeProgramTimes","getTime","History_collectMuscleGroups","synergistMuscleGroupToMultiplier","Exercise_synergistMusclesGroupMultipliers","muscleGroupAcc","lastTs","finishedSets","lastDate","DateUtils_firstDayOfWeekTimestamp","Reps_volume","Exercise_getVolumeMultiplier","isMax","Reps_setVolume","History_getFinishedSets","History_isPaused","newIntervals","lastInterval","isStart","NativeWorkoutBridge_resumeWorkout","interval","memoize","maxSize","History_getPersonalRecords","sortedHistory","CollectionUtils_sortByExpr","max1RMSets","maxWeightSets","thisMaxWeightSet","thisMaxWeight","lastMaxWeight","prevMaxWeightSet","maxWeightSet","thisMax1RMSet","thisMax1RM","lastMax1RMSet","lastMax1RM","prevMax1RMSet","_Collector$build$addF","Collector","addFn","run","_Collector$build$addF2","muscleGroupsData","programChangeTimes","sortedHistoryDesc","weeksData","firstDayOfWeeksSet","historyRecordDateToFirstDayOfWeek","firstDayOfWeekToHistoryRecord","firstDayOfWeek","today","firstDayOfWeeks","buildHomeWeekData","existingIds","addedHistoryIds","addedCustomExerciseIds","historyRecordIds","customExerciseIds","importedIds","isExerciseReferenced","Length_operation","comparison","objLen","Length_printUnit","prebuiltLengths","Length_build","prebuiltLength","toFixed","screenMusclePoints","strength","hypertrophy","exercisePoints","muscleGroupSettings","Muscle_isBuiltInMuscleGroup","newMuscleGroups","screenMuscles","shoulders","triceps","back","glutes","hamstrings","quadriceps","chest","biceps","calves","forearms","screenMuscleToMuscleMapping","mergePoints","Muscle_getPointsForDay","mg","oldPoints","newPoints","Muscle_getUnifiedPointsForExercise","Muscle_mergeScreenMusclePoints","mergeExercisePoints","maxValues","ObjectUtils_findMaxValue","normalize","isDefault","Muscle_isDefaultMuscles","_setUtils","muscleToScreenMuscleMapping","screenMuscle","obj","maxValue","defaultMuscles","SetUtils_areEqual","Muscle_getPointsForExercise","historyEntry","Program_nextHistoryEntry","screenTargetMuscles","screenSynergistMuscles","ObjectUtils_combinedKeys","oldValue","points1","points2","OnloadModal_shouldShowWhatsNew","_whatsnew","WhatsNew_doesHaveNewUpdates","hearAboutUs","requests","lastRequest","groupedTopLines","afterDay","newDayData","PlannerProgramExercise_createExerciseFromEntry","PlannerEvaluator_changeExerciseName","newProgramId","Program_runExerciseFinishDayScript","Program_getDiffState","Program_getDiffVars","variations","Program_createVariation","finishDayExpr","variationExpr","reuseLogic","dayApproxTimes","Program_dayApproxTimeMs","minDays","maxDays","plannerState","EditProgram_initPlannerState","Program_exerciseRangeFormat","Program_exportProgram","_Program_exportProgramToLink","exportedPlannerProgram","aNextDay","plannerSettings","Program_evaluatePlannerWeeks","Program_getDayExercisesInOrder","plannerProgramExercise","Program_getCurrentProgram","exerciseTypes","exType","et","Program_getAllProgramExercises","Program_fullProgram","isReallyMultiweek","Program_getDayNumber","Program_getAllUsedProgramExercises","Program_getWeekFromDay","reuse","reuseSetCandidate","weekAndDays","reusingCustomProgressExercises","Program_getReusingCustomProgressExercises","reusingSetProgressExercises","Program_getReusingSetProgressExercises","evalutedProgram","excludeExercise","groups","aProgram","bProgram","cleanedAProgram","_objectDestructuringEmpty2","cleanedBProgram","ObjectUtils_diffPaths","enforceNew","deletedWeeks","deletedDays","deletedExercises","Program_nextHistoryRecordFromEvaluated","showCustomPrograms","Program_forceEvaluate","Progress_getDayData","newStateResult","Program_runFinishDayScript","_newStateResult$data","ProgramExercise_applyVariables","theNextDay","Program_nextDay","Program_selectProgram","numValue","Program_cleanPlannerProgram","_Program_toUrl","isEvaluatedProgram","_parser","_programSet","encodedProgramHashToShortUrl","Program_createEmptyProgram","programSets","PlannerProgramExercise_currentEvaluatedSetVariation","PlannerProgramExercise_programWarmups","programSet","minrep","ProgramSet_getEvaluatedWeight","programSetIndex","Exercise_getWarmupSets","Progress_runUpdateScriptForEntry","Program_numberOfDays","fullDayName","Program_getDayName","PlannerProgramExercise_getProgressScript","PlannerProgramExercise_currentEvaluatedSetVariationIndex","PlannerProgramExercise_currentDescriptionIndex","PlannerProgramExercise_currentExerciseVariationIndex","Progress_createScriptBindings","Progress_createScriptFunctions","runner","ScriptRunner","execute","getUpdates","diffOtherStates","memo2","key2","ProgramExercise_approxTimeMs","pe","Program_getAllProgramExercisesWithType","useStateWeight","repsExpr","weightExpr","Program_emptyEvaluatedProgram","Program_buildWeeks","dayNum","evaluatedWeek","evaluatedDay","evaluatedExercises","Program_buildEvaluatedProgram","_Program_buildWeeks","PP_iterate","PlannerEvaluator_forceEvaluate","minExs","maxExs","daysTotal","Program_getDayInWeek","aDay","nd","Encoder_encodeIntoUrl","baseUrl","hash","StringUtils_hashString","encodedProgramUrl","shortUrl","ProgramExercise_doesUse1RM","ProgramExercise_doesUseRPE","oldValueStr","newValueStr","oldOnerm","Weight_printOrNumber","_target","variation","programWeek","Program_getProgramDayExercises","variationIndex","defaultSet","indexValue","currentSetVariationIndex","sv","currentExerciseVariationIndex","nextVariation","currentDescriptionIndex","ProgramSet_approxTimeMs","usesPercentageWeights","ProgramSet_isEligibleForInferredWeight","usesRM1Var","PlannerProgramExercise_sets","lastKey","warmupSetToKey","results","currentVariationIndex","PlannerProgramExercise_getUpdateScript","hasKeyword","isSuperset","supersetTimer","ProgramSet_approxRestTimer","ProgramSet_approxSetTimeMs","Weight_rpePct","lastGroup","rpeExpr","getCurrentDescriptionExercise","dereuseDecisions","reuseExercise","getGlobals","reusedGlobals","PlannerProgramExercise_getOnlyChangedState","programVariation","reuseVariation","reuseSet","Weight_eqNull","Weight_zero","groupedTopLine","reorders","groupedDay","indexMap","item","adds","renamedValue","renameMapping","addedCurrentDescription","currentIndex","getCurrentDescriptionIndex","reusedExercise","reusedDayData","currentWeekReusedExercisesCount","candidates","candidate","groupedTopLineMap","PP_iterateTopLineExercises","getRenamedValue","shouldReuseSets","getDereuseDecisions","addPropertyCandidate","isOrigin","progressPoint","updatePoint","warmupPoint","idPoint","targets","property","origin","fallback","plannerWeeks","msg","topLineMap","PlannerProgram_topLineItems","PlannerProgram_groupedTopLines","reorderGroupedTopLine","addGroupedTopLine","propertyTargets","getPropertyTargets","addedProgressMap","addedUpdateMap","addedWarmupsMap","addedIdMap","plannerWeek","plannerDay","finishedToAddDescription","groupTextArr","groupLoop","groupIndex","exerciseTextArr","lineIndex","addExerciseDescriptions","evalExercise","getExerciseName","reuseToStr","variationToString","overriddenGlobals","weightExprToStr","setTimerGlobalToStr","globalsStr","warmupSource","getPropertySource","getWarmupSets","idSource","idToStr","updateStr","getUpdate","progressStr","getProgress","repeatingExercises","PlannerKey_fromPlannerExercise","PlannerProgram_compact","warmupSetsToStr","PlannerProgramExercise_warmups","activeIndex","segment","firstWeight","firstRpe","firstLogRpe","firstAskWeight","firstTimer","hasAnySetTimer","firstSetTimer","firstIsOverflowSetTimer","setTimerIsGlobal","originalSets","setToKey","groupWarmupsSets","strs","first","restPart","groupedVariationSets","groupVariationSets","setStr","resultStr","Weight_printNull","hideScript","resolveReuse","argsState","successes","successCounter","failures","failureCounter","maxReps","resolvedScript","numberOfEntries","History_createCustomEntry","options","structural","newDayKeys","changed","Progress_hasCompletedWork","at","predecessor","commonBefore","commonAfter","inherited","sortKeys","own","sortKey","reconcileStructure","Stats_getEmpty","reindexed","Progress_reindexEntries","Progress_applyProgramExercise","Progress_updateAmrapRepsInExercise","Progress_updateAmrapRepsLeftInExercise","Progress_updateRpeInExercise","Progress_updateWeightInExercise","Progress_updateUserPromptedStateVars","Progress_completeAmrapSet","Progress_runUpdateScript","Progress_isFullyEmptyOrFinishedSet","amrapSetTimerModal","Progress_maybeApplySuperset","dateStr","startTimeDate","DateUtils_fromYYYYMMDD","getFullYear","getHours","getMinutes","getSeconds","DateUtils_fromYYYYMMDDStr","dateModal","shouldKeepProgramExerciseId","prevEntry","History_findLastEntryForExerciseType","programWarmups","Progress_programWarmupsForExerciseType","Progress_updateSetWeights","nowArg","stm","restSet","Progress_getNextTimedSet","Progress_advanceTimedSet","programIndex","newHistory","History_finishProgramDay","lf","newSettingsExerciseData","Progress_getSupersetGroups","ObjectUtils_entriesNonnull","supersetColors","supersetGroups","supersetGroup","supersetIndex","Progress_getProgressId","aProgress","bProgress","Progress_isCompletedSet","Reps_isEmpty","oldKey","liveActivityEntryIndex","liveActivitySetIndex","nativeNotificationScheduled","_weight2","applyRounding","rounder","isScriptValue","flattenScriptArgs","Progress_createEmptyScriptBindings","toWeight","Equipment_getUnitForExerciseType","Weight_round","Weight_getTrainingMax","repsRaw","rpeRaw","y","vals","aVal","bVal","flatArgs","subtitleHeader","bodyHeader","nextEntryAndSet","Reps_findNextEntryAndSet","nextEntry","NativeTimerBridge_startTimer","ignoreDoNotDisturb","isAdjusting","timerForPush","Progress_getNextEntry","shouldGoToNextEntry","visitedAndFinished","isInitial","Reps_isEmptyOrFinished","Progress_getNextEntryIndex","nextEntryIndex","Progress_stopTimerPure","Progress_isEmptyOrFinishedSet","Progress_hasLastUnfinishedSet","editIds","newEntry","Progress_applyBindings","oldEntry","lastCompletedIndex","CollectionUtils_findIndexReverse","modify","progressSet","Progress_shouldShowAmrapModal","hasUserPromptedVars","shouldLogRpe","shouldPromptUserVars","shouldAskWeight","Progress_completeSet","hasOpenSetTimer","nonce","Progress_getNextTimedSetInSuperset","freshNonce","prevNonce","entryChanged","Progress_proceedAfterTimedSet","restOffsetSeconds","_progress$amrapModal","_progress$amrapModal2","_progress$amrapModal3","_progress$amrapModal4","Progress_isEligibleForInferredWeight","warmups","targetReps","targetRpe","bestOnerm","bestDistance","distance","findSwapSourceSet","sourceWeight","sourceReps","sourceRpe","ratio","swapDerivedWeight","newIndexOf","remap","keepAt","pickerState","exercisePicker","exerciseBottomSheet","entryIndexEditMode","progressEntry","forceWarmupSets","PlannerProgramExercise_currentSetVariationIndex","newSetsNum","newWarmupSets","ws","wasSetTimerOpen","oldSet","recorded","stopped","ProgramExercise_hasUserPromptedVars","didFinish","Screen_tab","currentScreen","oldHistoryRecord","progressWithoutUi","dequal","oldCleanedProgram","newCleanedProgram","exerciseProgramId","editProgramExerciseState","_dequal","maxIndex","Reps_areSameReps","arr","Reps_displayReps","Reps_displayCompletedReps","CollectionUtils_inGroupsOf","Reps_findNextSet","Reps_findNextSetIndex","keyFn","displaySets","CollectionUtils_groupBy","set1","set2","completedOrRequiredWeight","Reps_isCompletedSet","Reps_isInRangeCompleted","amrap","firstRep","Reps_isInRangeCompletedSet","totalReps","recentExercises","Settings_withRecentSwap","theme","lftSystemDarkMode","Theme_apply","SendMessage_toIosAndAndroid","strengthSetsPct","hypertrophySetsPct","weeklyRangeSets","weeklyFrequency","graphsSettings","isSameXAxis","isWithBodyweight","isWithOneRm","graphOptions","exerciseStatsSettings","ascendingSort","Settings_defaultEquipment","statsEnabled","Settings_getExercisesWithUnset1RMs","Settings_getNextTargetType","skipPlatesCalculator","nextTargetType","targetTypes","osFontScale","clampTextSize","scaled","TEXT_SIZE_STEP","starred","_theme","Settings_programContentBuild","settingsRecentExercisesLimit","fromKey","toKey","previous","plannerExercises","CollectionUtils_uniqByExpr","TEXT_SIZE_MIN","TEXT_SIZE_MAX","movingAverageWindowSize","Stats_getCurrentBodyweight","recentWeights","Weight_divide","versionTracker","VersionTracker","STORAGE_VERSION_TYPES","currentVersions","incomingVersions","mergedVersions","mergeVersions","updatedStorage","mergeByVersions","sortedProgress","sortProgressByIndex","updateWithStats","_excluded7","gymsObj","CollectionUtils_groupByKeyUniq","gymsArr","deletedHistory","deletedPrograms","mergeHearAboutUs","filledVersions","fillVersions","shouldReportError","runMigrations","Storage_validate","VStorage","Storage_validateAndReport","migratedRecord","VHistoryRecord","bStorage","cleanedAStorage","originalId","cleanedBStorage","oldStorage","migratedOldStorage","migratedNewStorage","oldId","oldOriginalId","oldCleanedStorage","_excluded5","newId","newOriginalId","newCleanedStorage","_excluded6","updatedVersions","partialStorage","_excluded3","_excluded4","updateVersions","_versionTracker","safeParse","abortEarly","issues","issue","path","formatIssuePath","lastActions","Diagnostics_setLastValidationErrors","dateNow","neck","bicepLeft","bicepRight","forearmLeft","forearmRight","hips","thighLeft","thighRight","calfLeft","calfRight","head","byIndex","entriesWithSortedSets","sortedSets","CollectionUtils_immutableSort","sortedEntries","_versionTrackerDiffVersions","_versionTrackerExtractByVersions","_versionTrackerFillVersions","_versionTrackerMergeByVersions","_versionTrackerMergeVersions","_versionTrackerUpdateVersions","_exportNames","versionTypes","oldObj","newObj","VersionTrackerUpdateVersions","fullObj","VersionTrackerFillVersions","VersionTrackerDiffVersions","versionsDiff","VersionTrackerExtractByVersions","fullVersions","versionDiff","extractedObj","VersionTrackerMergeByVersions","VersionTrackerMergeVersions","isVectorClock","isFieldVersion","isCollectionVersions","collection","currentTimestamp","compactionThresholds","deletionTimestamp","vc","newClock","VersionTrackerUtils_normalizeVersion","isVersionsObject","VersionTrackerUtils_isTypedObject","idField","typeIdMapping","VersionTrackerUtils_isControlledType","idVersion","isIdVersion","nukedeleted","VersionTrackerUtils_NUKEDELETED_THRESHOLD","atomicTypes","VersionTrackerUtils_compareVersions","aNorm","bNorm","allDevices","mergedVc","controlledTypes","aDevices","bDevices","aHasVc","bHasVc","aHasHigher","bHasHigher","aCount","bCount","_utils","hasChanges","oldVersion","newVersion","fieldDiff","diffFieldVersion","oldCollection","diffCollection","oldDeletedKeys","newDeletedKeys","oldItemVersion","newItemVersion","itemDiff","diffObj","extractedValue","extractFieldByVersion","extractCollectionByVersion","VersionTrackerUtils_isRecord","extractControlledTypeByVersion","controlledFields","excludedFields","excludedFieldsSet","field","collectionVersion","hasItemChanges","hasDeletions","itemId","VersionTrackerUtils_getId","itemVersion","extracted","itemValue","resultObj","VersionTrackerUtils_asVersionsObject","fieldStr","filledVersion","fillFieldVersion","hasTrackableItems","collectionVersions","VersionTrackerUtils_ensureCollectionVersions","itemPath","getInitialItemVersion","filledItemVersion","fillControlledObjectVersion","VersionTrackerUtils_createVersion","dictionaryFields","dictValue","VersionTrackerUtils_isAtomicType","fillNestedVersions","VersionTrackerUtils_ensureVersionsObject","VersionTrackerUtils_getIdFieldName","idValue","VersionTrackerUtils_getIdValue","VersionTrackerUtils_createIdVersion","controlledField","fieldValue","fieldPath","fillControlledFieldVersion","_ref3","parentPath","hasAnyVersion","currentPath","writeKey","deleteKey","diffVersion","fullVersion","mergedValue","mergeFieldByVersion","diffNorm","fullNorm","fullValue","mergeCollectionByVersion","fullCollection","fullVersionObj","diffVersionObj","fullIdVersion","VersionTrackerUtils_getIdVersionFromVersions","diffIdVersion","VersionTrackerUtils_pickWinningIdVersion","controlledFieldSet","fullIsRecord","fullRecord","mergedItem","writeField","fullFieldVersion","fullFieldValue","extractedFieldValue","validator","typeValidators","deletedKeys","dedupedFull","dedupedExtracted","dedupedFullById","processedIds","allSame","pushItem","idx","extractedItem","diffItemVersion","fullItemVersion","fullItem","shouldTakeExtractedItem","ensureResult","dk","mergedVersion","mergeVersionField","VersionTrackerUtils_mergeFieldVersions","mergeCollectionVersions","findIdVersion","mergedField","mergedItemVersion","fullDeletedTime","diffDeletedTime","versionsObj","newVersionsObj","VersionTrackerUtils_areEqual","updatedVersion","updateFieldVersion","oldFull","newFull","oldFullVersion","newFullVersion","oldHasTrackableItems","updateArrayCollectionVersion","fieldVersion","updateDictionaryCollectionVersion","updateControlledObjectVersion","oldObjValue","updateNestedVersions","VersionTrackerUtils_incrementNukedeleted","newIds","deletedInThisUpdate","oldItemsById","oldItem","oldItemId","deletedCount","newCollectionVersion","getItemVersion","compactedCollection","VersionTrackerUtils_applyCompaction","oldDict","newItem","currentItemVersion","fieldVersions","currentIdVersion","oldFieldValue","newFieldValue","currentFieldVersion","updateControlledFieldVersion","opr","MathUtils_roundTo005","knownReps","knownRpe","knownWeight","targetRpeMultiplier","Weight_compareReverse","smallestPlate","Equipment_smallestPlate","Weight_subtract","withUnit","platesArr","plate","CollectionUtils_compressArray","oneRepMax","objWeight","Weight_parse","isFinite","prebuiltWeights","prebuiltWeight","Weight_roundTo000005","MathUtils_roundTo000005","allWeight","platesWeight","originalUnit","weightInUnits","absAllWeight","Weight_abs","inverted","Weight_invert","availablePlatesArr","availablePlates","targetValue","plateTypes","unitWeight","maxUnits","allValues","maxDecimals","dot","precision","pow","intTarget","intWeights","maxFrom","bestRemaining","iterations","search","newRemaining","calculatePlatesInternalFast","weightToAdd","totalInUnits","Weight_operation","lastDateStr","WhatsNew_newUpdates","cached","_whatsnewParser","WhatsNew_all","WhatsNewParser_parseAll","bodyLines","isFrontmatterStart","changelogMarkdown","latestDateStr","reverse","_useReducer","useReducer","modalReducer","initialModalState","_useReducer2","ModalDispatchContext","Provider","ModalStateContext","useContext","noopModalDispatch","useModalState","useModalDispatch","callbackRef","isOpenRef","idRef","isOwner","owners","Modal_open","getNavigationRef","navigate","modals","_toPropertyKey","_toPrimitive","owner","_action$key","_action$key2","createContext","StateContext","NavigationContext","PlannerHighlighter_segments","colorForClass","clazz","_builder$build","MONO_FONT_FAMILY","wrap","_plannerHighlighter","web","literal","attributeName","comment","atom","attributeValue","setResults","frequency","focusedExercise","onEditSettings","showLink","colorize","colorPctValue","labelSet","PlannerSetSplit","upper","shouldIncludeFrequency","lower","core","pull","legs","_plannerWeekMuscles","PlannerWeekMuscles","isDesktopWeb","SendMessage_isIosOrAndroid","showTooltip","setShowTooltip","setColor","colorRangeValue","setDirection","directionValue","frequencyColor","handlePress","totalNode","trailingNode","hasExercises","PlannerStatsTooltip","isSynergist","exerciseName","totalSets","strengthSets","hypertrophySets","strengthPct","muscleData","setNumber","_backMusclesSvg","BackMusclesSvg","_frontMusclesSvg","FrontMusclesSvg","evaluatedDays","PlannerStatsUtils_calculateSetResults","hideTitle","_plannerStats","PlannerStats","_plannerStatsUtils","PlannerProgram_usedExercises","Program_exportedPlannerProgramToExportedProgram","oldPlannerProgram","additionalRepeatingExercises","ev","declaringWeekIndexes","oldKeyFor","ObjectUtils_findKeyByExpression","declaringKey","lastDescriptions","mapping","tree","plannerExerciseParser","evaluator","topNode","declaringPass","_loop3","used","declaringWeeks","claimWeek","repeatWeekIndex","repeatDay","repeatedExercises","sectionsToReuse","firstWeek","lastWeek","repeatRanges","ongoingDescriptions","repeatStr","repeatParts","sections","fullProgramText","PlannerEvaluator_evaluateFull","PlannerExerciseEvaluatorText","fullResult","_PlannerProgram_getExportedPlannerProgram","topLine","topLineWeek","topLineDay","reset","group1","group2","ex1","ex2","PlannerEvaluator_compareExerciseOrder","hasWeightInUnit","aPlannerProgram","firstPass","newLine","PlannerProgram_topLineItemToText","toExerciseType","PlannerProgram_replaceExercise","weightChanges","wc","weightChange","newPlannerProgram","switchWeightsToUnit","_loop4","reuseDay","di","_plannerExerciseParser","_plannerExerciseEvaluatorText","newLabel","labelSuffix","noConflicts","getLabel","PlannerKey_fromExerciseType","newLabel2","newName","PlannerDayDataError","evaluatedSetVariation","lastEvaluatedSet","Weight_parsePct","fnArgsToStateVars","reuseFullname","PlannerProgramExercise_shortNameFromFullName","_PlannerExerciseEvalu3","groupedWarmupSets","CollectionUtils_groupByExpr","PlannerProgramExercise_evaluateSetVariations","ProgramExercise_groupWarmupsSets","dimReps","dimRpe","dimWeight","dimTimer","Reps_groupDisplaySets","Exercise_findByName","visited","seen","acc2","PlannerProgramExercise_numberOfSets","exerciseWarmups","MathUtils_roundTo0005","increase","successesRequired","successesCounter","decrease","failuresRequired","failuresCounter","ranges","rep","originalSetVariations","reuseSetVariations","hasCurrentSets","evaluatedSets","reusedSets","currentSets","currentGlobals","originalState","originalStateMetadata","_value$split$map","_value$split$map2","fnArgKey","fnArgValStr","fnArgVal","synergistMusclesGroupMultipliers","addMuscleGroup","exerciseSupersetTimer","totalA","capitalizedMuscle","charAt","toUpperCase","frequencyDays","synergistNote","_muscle2","isStrength","isTarget","changeExerciseName","_PlannerEvaluator_get","PlannerEvaluator_getFullEvaluatedWeeks","perDayEvaluatedWeeks","PlannerProgram_fullToWeekEvalResult","PlannerEvaluator_postProcess","exerciseFullNames","fullNames","_liftoscriptEvaluator","PlannerEvaluator_fillInMetadata","PlannerProgramExercise_buildDpRangeScript","byWeekDayExercise","PlannerSyntaxError","fromPoint","tagsProp","existingTags","properties","point","progressProp","existingProgress","isEqualProgress","updateProp","existingUpdate","isEqualUpdate","scheme","PlannerEvaluator_setByWeekDayExercise","PlannerEvaluator_setByExerciseWeekDay","byExerciseWeekDay","PlannerEvaluator_evaluateDay","PlannerEvaluator_getPerDayEvaluatedWeeks","PlannerEvaluator_getDayIndexFromWeekAndDayInWeekIndex","PlannerEvaluator_fillRepeats","repeatWeek","repeatedExercise","PlannerEvaluator_checkSelfReuse","originalExercise","PlannerEvaluator_fillSetReuses","reuseSetPoint","originalExercises","PlannerEvaluator_findOriginalExercisesAtWeekDay","sharedProgressReuse","originalProgress","PlannerEvaluator_forEachSiblingInstance","other","sharedUpdateReuse","originalUpdate","weekKey","weekEntry","dayKey","PlannerEvaluator_fillEvaluatedSetVariations","PlannerProgramExercise_setVariations","PlannerEvaluator_fillDescriptions","lastWeekExercise","PlannerEvaluator_findLastWeekExercise","PlannerEvaluator_fillDescriptionReuses","PlannerEvaluator_findReusedDescriptions","PlannerEvaluator_isDescriptionReuse","PlannerEvaluator_fillSingleProperties","PlannerEvaluator_fillProgressReuses","originalProperty","originalReuseKey","Weight_type","PlannerEvaluator_checkUpdateScript","liftoscriptNode","PlannerProgramExercise_getExercise","liftoscriptEvaluator","PlannerEvaluator_fillUpdateReuses","PlannerEvaluator_checkReuseLoops","PlannerEvaluator_checkReusesResolve","PlannerEvaluator_iterateOverExercises","PlannerEvaluator_checkUnknownExercises","_weekIndex","_dayInWeekIndex","_dayIndex","_index","reusingName","currentWeekIndex","weekDayMatch","_weekDayMatch$1$split","_weekDayMatch$1$split2","dayOrWeekStr","dayStr","weekExercises","weekDescriptions","atWeek","atDay","candidateDays","originalKey","cond","lastWeekDay","val","_PlannerEvaluator_get2","isEqual","W","_plannerExerciseStyles","_plannerStateVars","latestDescriptions","getValueTrim","getPoint","setParts","_setParts$split","_setParts$split2","numberOfSetsStr","repsStr","_setParts$split3","_setParts$split4","reprange","minrepStr","maxrepStr","PlannerNodeName","WeightWithPlus","Weight","WarmupExerciseSet","WarmupSetPart","setPartNode","_this$getWarmupReps","getWarmupReps","percentageNode","weightNode","ExerciseSection","ExerciseSet","SetPart","getRepRange","rpeNode","Rpe","timerNode","Timer","setTimerNode","SetTimer","autoNode","Auto","PercentageWithPlus","labelNode","SetLabel","AskWeight","_this$getValue$split","_this$getValue$split2","leftRaw","rightRaw","ExerciseProperty","FunctionExpression","fnNameNode","FunctionName","fnName","FunctionArgument","argNode","Liftoscript","reuseLiftoscriptNode","ReuseLiftoscript","ReuseSection","ExerciseName","getStateVariableKeys","evaluateProgressImpl","None","PlannerProgramExercise_buildProgress","validateProgress","_this$getLineAndOffse3","setsNode","WarmupExerciseSets","evaluateWarmupSet","Superset","exerciseNameNode","ExercisePropertyName","evaluateProgress","evaluateUpdate","evaluateWarmup","evaluateId","weekDayNode","WeekOrDay","Int","ReuseSectionWithWeekDay","_this$getReuseWeekDay","getReuseWeekDay","WeekDay","reuseNode","evaluateReuseNode","ExerciseSets","CurrentVariation","evaluateSet","evaluateSuperset","evaluateProperty","ExerciseExpression","repeatNode","Repeat","childNode","Rep","RepRange","_getChildren$map","_getChildren$map2","numbers","rangeStart","rangeEnd","section","EmptyExpression","TripleLineComment","Week","_this$getLineAndOffse5","Day","_this$getLineAndOffse7","addDescription","variationsNode","ExerciseVariations","variationNodes","ExerciseVariation","variationNode","variationNameNode","variationFullName","variationShortName","variationExerciseType","allWarmupSets","activeVariation","PlannerKey_fromExerciseVariations","getIsNotUsed","sectionNodes","getRepeat","getOrder","sectionNode","evaluateSection","_this$getLineAndOffse9","rawDescriptions","StringUtils_unindent","fullNamePoint","reuseSetsNode","progressNode","updateNode","idNode","warmupNode","supersetNode","supersetPoint","evaluateExercise","evaluateProgram","oldLiftoscript","newLiftoscript","fromNode","toNode","getRepeatRanges","isUsed","sectionsNode","propertyNameNode","replacement","pickA","pickB","PlannerStateVars_fromArgs","changeWeightsToCompleteWeights","_str$split","_str$split2","nameEquipmentItems","nameEquipment","matchingExercise","fullTextLineToWeekdayDescription","ongoingLines","anyCommentStarted","commentStarted","linesToPreviousExercise","nextLines","_this$getWeekDayOngoi","getWeekDayOngoingLines","lastDay","getLastDay","getWeekDayDescriptionAndFillLastDay","evaluateLine","none","blockComment","SupersetKeyword","SectionSeparator","annotation","docComment","buildRanges","reduceRight","range","segments","_common","_liftoscriptLanguage","parserWithMetadata","plannerExerciseStyles","parseMixed","liftoscriptLanguage","highlightTree","classHighlighter","classes","keyParts","cleaned","segmentLabel","exportProgram","pg","postSaveProgram","isiOS","Platform_isiOS","isAndroid","Platform_isAndroid","_programQrCode","ProgramQrCode","_programPreviewPlayground","_programDetailsLiftoscript","UnitSwitcher","currentUnit","onUnitChange","setUnits","setTab","weeksAsTabs","setWeeksAsTabs","canScrollLeft","setCanScrollLeft","canScrollRight","setCanScrollRight","updateScrollState","scrollLeft","scrollWidth","ro","ResizeObserver","observe","disconnect","direction","firstCol","colWidth","offsetWidth","ProgramDetailsLiftoscript","indexEntry","fullProgram","descriptionText","fullDescription","exercisesRange","weeksCount","isSummaryOpen","setIsSummaryOpen","isWeekStatsOpen","setIsWeekStatsOpen","_markdown","Markdown","faq","_iconWatch","IconWatch","_iconCalendarSmall","IconCalendarSmall","_iconKettlebellSmall","IconKettlebellSmall","_programDetailsAddButton","ProgramDetailsAddButton","_plannerWeekStats","PlannerWeekStats","_programDetailsWorkoutPlayground","ProgramDetailsWorkoutPlayground","_programDetailsUpsell","ProgramDetailsUpsell","lastAlertDisplayedTs","hasKeywordMemoized","liftoscriptTree","_this$parse","_this$parse2","rawResult","output","convertResult","errorMsg","lastAlertTs","reportError","availableMuscles","availableBodyParts","exerciseKinds","graphExerciseSelectedTypes","graphMuscleGroupSelectedTypes","percentageUnits","historyRecordChange","exercisePickerSorts","statsWeightDef","statsLengthDef","statsPercentageDef","VUnit","VPercentageUnit","VLengthUnit","VExerciseKind","VMuscle","VBodyPart","VBuiltinEquipment","VExercisePickerSort","VExercisePickerScreen","VHistoryRecordChange","VTargetType","VProgressMode","VProgramTag","VGraphExerciseSelectedType","VGraphMuscleGroupSelectedType","VScreenMuscle","string","VEquipment","VExerciseId","_VWeight","_VPercentage","_VLength","VLength","_VPlate","_VMetaExercises","VMetaExercises","_VExerciseType","VExerciseType","_VCustomExercise","clonedFrom","reuseImageFrom","VCustomExercise","_VSet","VSet","VProgramState","_VHistoryEntryProgressSnapshot","VHistoryEntryProgressSnapshot","_VHistoryEntry","VHistoryEntry","_VProgramStateMetadataValue","VProgramStateMetadataValue","VProgramStateMetadata","_VProgramSet","minRepsExpr","timerExpr","VProgramSet","_VProgramExerciseVariation","quickAddSets","VProgramExerciseVariation","_VProgramExerciseWarmupSet","VProgramExerciseWarmupSet","_VProgramExerciseReuseLogic","VProgramExerciseReuseLogic","_VProgramExercise","updateDayExpr","diffPaths","descriptionExpr","enableRepRanges","reuseFinishDayScript","reuseUpdateDayScript","VProgramExercise","_VExercisePickerFilters","isStarred","VExercisePickerFilters","_VExercisePickerProgramExercise","VExercisePickerProgramExercise","_VExercisePickerAdhocExercise","VExercisePickerAdhocExercise","_VExercisePickerTemplate","VExercisePickerTemplate","VExercisePickerSelectedExercise","_VExercisePickerState","screenStack","filters","selectedExercises","showMuscles","customExerciseName","templateName","selectedTab","editCustomExercise","hideLabel","hideTemplate","VExercisePickerState","_VProgressUi","equipmentModal","rm1Modal","showSupersetPicker","lazy","VProgressUi","VIntervals","tuple","null","_VHistoryRecord","_VProgramDayEntry","_VProgramWeek","VProgramWeek","_VProgramDay","VProgramDay","_VPlannerProgramDay","VPlannerProgramDay","_VPlannerProgramWeek","VPlannerProgramWeek","_VPlannerProgram","VPlannerProgram","_VProgram","VProgram","_VStatsWeightValue","VStatsWeightValue","VStatsWeight","_VStatsLengthValue","VStatsLengthValue","VStatsLength","_VStatsPercentageValue","VStatsPercentageValue","VStatsPercentage","_VStatsHealthValue","VStatsHealthValue","VStatsHealth","buildBoolPartial","VStatsWeightEnabled","VStatsLengthEnabled","VStatsPercentageEnabled","_VStatsEnabled","VStatsEnabled","_VSettingsTimers","VSettingsTimers","VGraph","_VEquipmentData","similarTo","VEquipmentData","_VGraphOptions","VGraphOptions","_VMuscleMultiplier","_VExerciseDataValue","VExerciseDataValue","_VPlannerSettings","VPlannerSettings","_VGym","VGym","_VWorkoutSettings","shouldHideGraphs","shouldShowInvisibleEquipment","pickerSort","VWorkoutSettings","_VGraphs","VGraphs","_VMuscleGroupsSettings","VMuscleGroupsSettings","_VSettings","isWithProgramLines","defaultType","defaultMuscleGroupType","hideWithoutWorkoutNotes","hideWithoutExerciseNotes","appleHealthSyncWorkout","googleHealthSyncWorkout","healthConfirmation","isPublicProfile","alwaysOnDisplay","starredExercises","VSettings","_VStats","VStats","_VSubscriptionReceipt","VSubscriptionReceipt","_VSubscription","VSubscription","_VAffiliateData","VAffiliateData","_VImportSession","VImportSession","_VHearAboutUs","freeform","_VStorage","attribution","unknown","_VMuscleGeneratorResponse","vIs","ATOMIC_TYPES","CONTROLLED_TYPES","CONTROLLED_FIELDS","history_entry","TYPE_ID_MAPPING","history_record","progress_ui","custom_exercise","stat","equipment_data","subscription_receipt","muscle_groups_settings","import_session","DICTIONARY_FIELDS","EXCLUDED_FIELDS","_opts","_userId","_event","isIos","iOSVersion","androidVersion","iOSOSVersion","androidOSVersion","_AppleAuth_signIn","cancelErrorCodes","_waitForSdk","timeoutMs","deadline","_AppleAuth_init","waitForSdk","init","clientId","scope","redirectURI","usePopup","ClickTrackingContext","lsClass","eventName","_ClipboardUtils_canReadTextFromClipboard","_ClipboardUtils_copy","_ClipboardUtils_paste","clipboard","fallbackReadTextFromClipboard","_readTextFromClipboard","readTextFromClipboard","permissions","writeText","copyTextToClipboard","fallbackCopyTextToClipboard","disableCopying","textArea","appendChild","execCommand","removeChild","queryResult","readText","contentEditableElement","contentEditable","innerText","coll1","coll2","areEqual","transformer","compare","shouldFill","lastColl","newDays","_newDays$splice","daysToMove","CollectionUtils_setBy","compareFn","arrCopy","isReverse","aIndex","bIndex","numberOfGroups","callbacks","shouldWrapIntoQuotes","months","UTC","getUTCFullYear","getUTCMonth","toLocaleDateString","weekday","weekDay","beginningOfWeekDay","withMs","hours","getMilliseconds","startDate","endDate","month","getUTCDate","year","getUTCMinutes","getUTCHours","hour","minute","endOfWeekDay","hideWeekday","hideYear","regexp","regexpMatchArray","_regexpMatchArray","_DeviceId_get","DeviceId_cachedId","DeviceId_getDeviceType","storageKey","DeviceId_STORAGE_KEY","stored","DeviceId_generate","webeditor","lastState","lastValidationErrors","MAX_ACTIONS","_Dialog_choice","_Dialog_confirm","_Dialog_prompt","confirm","spelled","option","prompt","uintarray","dataUrl","atob","isBrowser","fetch","blob","Uint8Array","arrayBuffer","b64","binary","charCodeAt","gunzip","gunzipSync","str2","fromCharCode","decodeURIComponent","escape","_Encoder_encodeIntoUrlAndSetUrl","_fflate","FileReader","Worker","replaceState","_Encoder_encodeIntoUrl","base","base64data","urlParams","URLSearchParams","TextEncoder","encode","gzipSync","btoa","gzip","onload","readAsDataURL","Blob","_handler","_data","filename","contents","objectUrl","URL","createObjectURL","click","availableWidth","currentFlushCallback","uid","domain","useBrowserCallback","callbackPath","urlBuilder","append","receiveMessage","windowOpts","windowRef","closed","windowUrl","exUrl","baseHost","globalThis","PageTheme_restore","escapedRawData","innerHTML","escapedPageWrapperProps","DOMParser","unescapedRawData","parseFromString","unescapedPageWrapperProps","pageWrapperProps","hydrateRoot","promo","keyIdentifier","_IapHelpers_readReceiptOrJwsIOS","unref","jws","getReceiptDataIOS","refreshed","getReceiptIOS","_ImageCache_download","remoteUrl","_remoteUrl","hevyCsvRaw","Papa","header","skipEmptyLines","ImportUtils_detectCsvKind","fields","hevyRecords","row","warnings","validRecords","validateHevyRecord","collectHevyWarnings","hevyWorkouts","CollectionUtils_groupByKey","hevyExercises","set_type","set_index","exercise_title","exercise_notes","weight_lbs","parseHevyNumber","weight_kg","start_time","end_time","backMap","hevyWorkout","startTs","parseHevyDate","endTs","exerciseNameAndEquipment","exerciseMapping","_exerciseNameAndEquip","sanitizedTitle","Exercise_sanitizeName","maybeExerciseId","_exerciseNameAndEquip3","buildHevyWeight","History_generateId","validation","_papaparse","_exercise2","Burpee","Clamshell","Clean","Crunch","Lunge","Plank","Snatch","Superman","Cycling","hevyMonths","raw","ImportUtils_isSuspiciousTimestamp","ImportUtils_isSuspiciousWeight","ImportUtils_isSuspiciousReps","liftosaurCsvRaw","rows","liftosaurRecords","cells","columns","columnIndex","validateRecord","collectWarnings","groupedRecords","records","rawSets","firstSet","rawWarmupSets","isWarmupSet","rawWorkoutSets","buildSet","completedWeightValue","completedWeightUnit","requiredReps","parseTimestamp","completedRepsTime","workoutDateTime","firstRecord","dayname","numericColumns","unitColumns","valueColumn","unitColumn","_ImportFromLink_importFromLink","base64","getDecodedData","_url$pathname$split$f","_url$pathname$split$f2","getDataFromShortUrl","_getDecodedData","referencedIds","hevySignatureHeaders","liftosaurSignatureHeaders","minTimestamp","existingHistory","minStartTime","maxStartTime","customExerciseNames","duplicateIds","ImportUtils_findDuplicates","existingStartTimes","duplicates","lo","hi","mid","_IndexedDBUtils_get","_IndexedDBUtils_getAllKeys","nativeStorage","NativeStorage","isAvailable","indexedDB","connection","handler","request","createObjectStore","_IndexedDBUtils_remove","_IndexedDBUtils_set","_IndexedDBUtils_setMany","_nativeStorage","runTransaction","db","IndexedDBUtils_initialize","transaction","objectStore","logIndexedDBError","errorDetails","withTransaction","_withTransaction","withNative","_withNative","getAllKeys","getAll","put","pairs","nativeMirror","_KeychainStore_clearAuthToken","_KeychainStore_getAuthToken","_KeychainStore_setAuthToken","_auth","LiveActivityManager_updateLiveActivity","LiveActivityManager_getLiveActivityEntry","isNextSetWarmup","weightForPlates","exerciseImageUrl","canCompleteFromLiveActivity","currentReps","currentWeight","currentSet","completedSets","targetRPE","targetTimer","isSetTimer","setTimerState","liveActivityEntry","timedEntry","timedSet","setTimerSince","isOverflow","restingSet","attributes","workoutStartTimestamp","historyEntryState","isAuto","NativeWorkoutBridge_updateLiveActivity","subscriptions","EventManager_isAvailable","commithash","__COMMIT_HASH__","EventManager_log","_eventManager","fractionDigits","sign","_clear","_getAllKeys","_has","_delete2","_get","pendingRequests","requestId","generateRequestId","promise","createPromise","pendingRequest","timeout","exists","sound","_saveToHealth","_filteredStorageJson","healthSync","structuredCloneLike","obj1","obj2","fromEntries","chKeys","obj1original","obj2original","newPath","ignoreKeys","currentObj1","currentObj2","keys1","keys2","ObjectUtils_isEmpty","theKeys","sortedKeys","copyObj","CollectionUtils_remove","flags","ArrayBuffer","isView","view","DataView","byteOffset","byteLength","SafeLocalStorage_getItem","PAGE_THEME_STORAGE_KEY","PageTheme_set","PageTheme_current","_tailwindSemanticGenerated","_safeLocalStorage","PageTheme_backgroundColor","semanticColors","SafeLocalStorage_setItem","decision","tier1","tier2","_perfSampling","PerfSampling_decide","PerfSampling_decideFor","_label","_durationMs","_window","_recent","_provider","windowActive","reducerMs","triggerLabel","triggerReducerMs","scheduleFlush","phase","durationMs","agg","byId","commits","sumMs","maxMs","mounts","component","renderCounts","renderChanges","flushTimer","TARGET_USER_IDS","ms","renderComps","trigger","reducer_ms","comp","_n","_name","noparams","afr","currentSearchParams","utmSource","utmMedium","utmCampaign","utmContent","utmTerm","landing","Platform_landingPageParams","programMatch","exerciseMatch","repMaxMatch","trackedEvents","gtag","rdt","_appAttribution","AppAttribution_get","postEvent","enabled","__ENV__","environment","javascript","source_map_enabled","code_version","__FULL_COMMIT_HASH__","guess_uncaught_frames","pld","RollbarUtils_checkIgnore","liftosaur_exception_id","lftAndroidVersion","lftAndroidAppVersion","lftIosVersion","lftIosAppVersion","Diagnostics_getLastState","Diagnostics_getLastValidationErrors","checkIgnore","exceptionIgnores","RollbarUtils_load","_RollbarUtils_load","accept","getExceptionData","_JSON$parse","isUncaught","firstArg","loadRollbar","getItem","removeItem","setItem","webkit","messageHandlers","liftosaurMessage","SendMessage_toAndroidWithResult","toIosResult","toAndroidResult","postMessage","JSAndroidBridge","sendMessage","_sets","within","_SignIn_apple","_SignIn_google","_SignOut_google","StringUtils_hashCode","letter","needle","haystack","outer","nch","Uint32Array","spaces","indent2","trimEnd","semantic","colors","resolveColor","direct","dashIndex","tail","fromSemantic","palette","FONT_WEIGHT_CLASSES","SIZE_PX","isDev","sorted","fragment","__DEV__","hasStyle","xl","verdicts","newestValid","newest","SubscriptionReceipts_cleanupApple","CollectionUtils_removeBy","hasApple","hasAppleSubscription","hasGoogle","hasGoogleSubscription","_subscriptionReceipts","verifyAppleReceipt","verifyGooglePurchaseToken","lastStorage","diffVersions","storageDiff","extractByVersions","filledVersionsDiff","duplicatedPrograms","duplicateInfo","baseColors","black","isPageRenderContext","light","_tailwindColors","TAILWIND_PAGE_MARKER_CLASS","semanticVars","shape","buildSemanticVars","root","TimeUtils_formatHHMM","isUndoing","isUndoingRef","_urlPolyfill","URLConstructor","URLPolyfill","parseURL","authority","userInfo","host","atIndex","username","colonIndex","hostname","port","portMatch","protocol","URLSearchParamsPolyfill","_parseFromString","pair","eqIndex","filtered","thisArg","_protocol","_hostname","_port","_pathname","_search","_hash","_username","_password","baseP","urlPart","hashIndex","searchIndex","basePath","lastIndexOf","_searchParams","userinfo","onActions","modifiedOnActions","onAction","_useThunkReducer","useThunkReducer","_useThunkReducer2","hookState","thunkDispatch","_useThunkReducer3","_componentName","useProgressiveCount","_NavScreenScrollContext","rateLimitMs","idleCap","resetKey","setCount","prevResetKey","setPrevResetKey","unlockedRef","effectiveCount","countRef","lastBumpRef","mountedRef","NavScreenScrollContext","addScrollListener","_e$nativeEvent","contentOffset","contentSize","layoutMeasurement","idleTarget","tick","cap","requestIdleCallback","handle","cancelIdleCallback","SCALED_SPACINGS","SCALED_LEADINGS","setProperty","currentRem","listeners","_scaledSpacings","useSyncExternalStore","remSubscribe","remGet","remServerGet","fs","setHookState","setState","WorkoutExerciseUtils_getColor","red","_toConsumableArray","_arrayWithoutHoles","iter","_iterableToArray","minLen","_unsupportedIterableToArray","_nonIterableSpread","len","arr2","filterUniqueArray","assignStyle","baseValue","DASH","MS","toUpper","camelCaseProperty","camelProp","hyphenateProperty","cssifyDeclaration","cssifyObject","css","RE","isPrefixedProperty","isPrefixedValue","unitlessProperties","borderImageOutset","borderImageSlice","borderImageWidth","orphans","tabSize","widows","zoom","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","prefixedUnitlessProperties","prefixes","getPrefixedProperty","jLen","_property","isUnitlessProperty","unprefixProperty","propertyWithoutPrefix","normalizeProperty","resolveArrayValue","unprefixValue","_hyphenateStyleName2","alpha","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","blanchedalmond","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","rebeccapurple","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","whitesmoke","yellowgreen","hex","per","num_per","hue","rgb_num_old","rgb_per_old","target_mode","converters","rgb","modes","parsers","colorProfiles","identity","useMode","definition","toMode","fromMode","difference","channels","channel","use","fixup","useParser","IdentStartCodePoint","IdentCodePoint","Tok","_i","is_num","chars","ch1","is_ident","huenits","deg","rad","PI","grad","turn","digits","ident","identlike","consumeCoords","includeHue","coords","tokenize","parseModernSyntax","res","getMode","ii","parseColorSyntax","interpolatorLinear","interpolator","get_classes","fixupAlpha","some_defined","serialize","gamut","linearize","a98","z","gamma","xyz65","fixupHueShorter","hues","curr","M","degToRad","radToDeg","DE","BE","BCAD","differenceHueSaturation","std","smp","std_h","smp_h","dH","sin","sqrt","differenceHueChroma","averageAngle","cos","angle","atan2","amp","cosh","sinh","average","D50","D65","fy","fz","lab","cbrt","f0","f1","factor","exp","convertDlabToLab65","convertLab65ToDlab","lab65","dlab","hsl_old","m1","m2","convertHsvToRgb","convertRgbToHsv","rgba","hsv","M1","M2","C1","C2","C3","transferPqDecode","transferPqEncode","toRel","toAbs","absX","absY","absZ","jabPqEncode","vn","xp","yp","jabPqDecode","vp","rel","jab","xyz50","u_fn","v_fn","un","up","luv","lchuv","L","S","toe","k_1","k_3","toe_inv","find_cusp","S_cusp","k0","k1","k2","k3","k4","wl","wm","k_l","k_m","k_s","l_","m_","s_","compute_max_saturation","L_cusp","get_ST_max","a_","b_","cusp","C","get_Cs","C_max","L1","L0","dL","l_dt","m_dt","s_dt","ldt","mdt","sdt","ldt2","mdt2","sdt2","r1","u_r","t_r","g1","u_g","t_g","b1","u_b","t_b","find_gamut_intersection","ST_max","C_a","C_b","C_mid","convertOklabToOkhsl","ret","C_0","k_0","convertOkhslToOklab","hsl","k_2","modeOkhsl","oklab","convertOklabToOkhsv","S_max","T","L_v","C_v","L_vt","C_vt","rgb_scale","scale_L","convertOkhsvToOklab","S_0","L_new","modeOkhsv","lrgb","prophoto","rec2020","bias","bias_cbrt","transfer","q","serializeHex","formatHex","formatHex8","serializeHex8","isMergeableObject","isNonNullObject","stringValue","$$typeof","REACT_ELEMENT_TYPE","isReactElement","isSpecial","cloneUnlessOtherwiseSpecified","clone","defaultArrayMerge","getKeys","symbol","getEnumerableOwnPropertySymbols","propertyIsOnObject","arrayMerge","sourceIsArray","destination","propertyIsUnsafe","customMerge","getMergeFunction","mergeObject","deepmerge_1","tar","foo","ctor","tmp","getInt8","dijkstra","single_source_shortest_paths","predecessors","costs","cost_of_s_to_u","adjacent_nodes","cost_of_s_to_u_plus_cost_of_e","cost_of_s_to_v","PriorityQueue","make","empty","cost","extract_shortest_path_from_predecessor_list","nodes","find_path","sorter","default_sorter","second","makeEmptyFunction","emptyFunction","thatReturns","thatReturnsFalse","thatReturnsTrue","thatReturnsNull","thatReturnsThis","thatReturnsArgument","format","_len","_key","argIndex","framesToPop","warning","uppercasePattern","msPattern","toHyphenLower","hName","prefixMap","plugins","_isObject2","combinedValue","processedValue","_prefixValue2","_addNewValuesOnly2","_processedValue","_prefixProperty2","_cssInJsUtils","CROSS_FADE_REGEX","_isPrefixedValue2","alternativeProps","alternativePropList","marginBlockStart","marginBlockEnd","marginInlineStart","marginInlineEnd","paddingBlockStart","paddingBlockEnd","paddingInlineStart","paddingInlineEnd","borderBlockStart","borderBlockStartColor","borderBlockStartStyle","borderBlockStartWidth","borderBlockEnd","borderBlockEndColor","borderBlockEndStyle","borderBlockEndWidth","borderInlineStart","borderInlineStartColor","borderInlineStartStyle","borderInlineStartWidth","borderInlineEnd","borderInlineEndColor","borderInlineEndStyle","borderInlineEndWidth","columnWidth","propertyPrefixMap","outputValue","multipleValues","singleValue","dashCaseProperty","_hyphenateProperty2","pLen","prefixMapping","prefixValue","webkitOutput","mozOutput","_capitalizeString2","transitionProperty","WebkitTransition","WebkitTransitionProperty","MozTransition","MozTransitionProperty","Webkit","Moz","addIfNew","prefixProperties","requiredPrefixes","capitalizedProperty","prefixedProperty","metaData","extendStatics","__extends","__","__assign","__spreadArrays","il","jl","Lens","LensBuilder","LensBuilderWithObject","LensError","object_1","LENS_OPTIONAL_BREAK","_super","AbstractLensBuilder","lensFactory","baseLens","_a","_optional","buildLensRecording","buildLensModifyRecording","prop","propLens","getter","setter","_getRaw","nestedErr","aLens","modifyFn","ObjectUtils","startName","lensGetterStr","prepend","newLensOrBuilder","newLens","combinedLens","newLensGetters","newGetter","propKey","isOptional","thisGetRaw","thisSet","nextObj","newParent","uc_micro","_class","isFunction","escapeRE","defaultOptions","fuzzyLink","fuzzyEmail","fuzzyIP","defaultSchemas","validate","pos","self","re","http","src_auth","src_host_port_strict","src_path","no_http","src_domain","src_domain_root","src_port","src_host_terminator","mailto","src_email_name","src_host_strict","tlds_default","compile","src_Any","Any","src_Cc","Cc","src_Z","Z","src_P","P","src_ZPCc","src_ZCc","src_pseudo_letter","src_ip4","src_xn","src_host","tpl_host_fuzzy","tpl_host_no_ip_fuzzy","tpl_host_fuzzy_strict","tpl_host_port_fuzzy_strict","tpl_host_port_no_ip_fuzzy_strict","tpl_host_fuzzy_test","tpl_email_fuzzy","tpl_link_fuzzy","tpl_link_no_ip_fuzzy","reFactory","__opts__","tlds","__tlds__","untpl","tpl","src_tlds","onCompile","__tlds_replaced__","email_fuzzy","link_fuzzy","link_no_ip_fuzzy","host_fuzzy_test","aliases","schemaError","__compiled__","__schemas__","compiled","createValidator","isString","alias","slist","schema_test","schema_search","schema_at_start","pretest","__index__","__text_cache__","resetScanCache","Match","__last_index__","__schema__","createMatch","LinkifyIt","schemas","ml","me","tld_pos","at_pos","testSchemaAt","matchAtStart","keepOld","mdurl","ucmicro","entities","punycode","_interopNamespaceDefault","freeze","mdurl__namespace","ucmicro__namespace","_hasOwnProperty","arrayReplaceAt","newElements","isValidEntityCode","fromCodePoint","surrogate1","surrogate2","UNESCAPE_MD_RE","UNESCAPE_ALL_RE","DIGITAL_ENTITY_TEST_RE","unescapeAll","escaped","entity","decodeHTML","replaceEntityPattern","HTML_ESCAPE_TEST_RE","HTML_ESCAPE_REPLACE_RE","HTML_REPLACEMENTS","replaceUnsafeChar","escapeHtml","REGEXP_ESCAPE_RE","isSpace","isWhiteSpace","isPunctChar","isMdAsciiPunct","normalizeReference","lib","utils","unescapeMd","helpers","parseLinkDestination","parseLinkLabel","disableNested","found","marker","prevPos","posMax","oldPos","skipToken","labelEnd","parseLinkTitle","prev_state","can_continue","default_rules","Renderer","Ruler","__rules__","__cache__","Token","nesting","markup","block","StateCore","inlineMode","code_inline","slf","renderAttrs","code_block","fence","langName","langAttrs","highlight","attrIndex","tmpAttrs","langPrefix","tmpToken","image","renderInlineAsText","renderToken","hardbreak","xhtmlOut","softbreak","breaks","html_block","html_inline","needLf","nextToken","__find__","__compile__","chains","rule","altName","chain","opt","before","beforeName","ruleName","afterName","enable","ignoreInvalid","enableOnly","disable","getRules","chainName","attrPush","attrData","attrSet","attrJoin","NEWLINES_RE","NULL_RE","isLinkOpen$1","isLinkClose$1","RARE_RE","SCOPED_ABBR_TEST_RE","SCOPED_ABBR_RE","SCOPED_ABBR","replaceFn","replace_scoped","inlineTokens","inside_autolink","replace_rare","QUOTE_TEST_RE","QUOTE_RE","replaceAt","process_inlines","thisLevel","OUTER","canOpen","canClose","isSingle","lastChar","nextChar","isLastPunctChar","isNextPunctChar","isLastWhiteSpace","isNextWhiteSpace","single","openQuote","closeQuote","quotes","_rules$2","tok","blockTokens","htmlLinkLevel","currentToken","links","lastPos","ln","fullUrl","normalizeLink","validateLink","urlText","normalizeLinkText","token_o","token_t","token_c","blkIdx","typographer","Core","ruler","StateBlock","bMarks","eMarks","tShift","sCount","bsCount","blkIndent","lineMax","tight","ddIndent","listIndent","parentType","indent","indent_found","getLine","escapedSplit","isEscaped","skipBulletListMarker","startLine","skipOrderedListMarker","process","State","isEmpty","skipSpaces","skipSpacesBack","skipChars","skipCharsBack","getLines","begin","keepLastLF","lineIndent","lineStart","open_tag","close_tag","HTML_TAG_RE","HTML_OPEN_CLOSE_TAG_RE","HTML_SEQUENCES","_rules$1","endLine","silent","firstCh","secondCh","lineText","aligns","columnCount","oldParentType","terminatorRules","tableLines","token_ho","token_il","tbodyLines","autocompletedCells","terminate","token_tdo","mem","haveEndMarker","oldLineMax","oldBMarks","oldBSCount","oldSCount","oldTShift","lastLineEmpty","isOutdented","spaceAfterMarker","adjustTab","oldIndent","cnt","isOrdered","markerValue","posAfterMarker","isTerminatingParagraph","markerCharCode","listTokIdx","listLines","prevEmptyEnd","contentStart","indentAfterMarker","itemLines","oldTight","oldListIndent","markTightParagraphs","_endLine","getNextLine","isContinuation","lineContent","destRes","destEndPos","destEndLineNo","titleRes","references","token_i","ParserBlock","StateInline","outTokens","tokens_meta","pendingLevel","delimiters","_prev_delimiters","backticks","backticksScanned","linkLevel","isTerminatorChar","maxNesting","hasEmptyLines","prevLine","pushPending","token_meta","scanDelims","canSplitWord","left_flanking","right_flanking","can_open","can_close","SCHEME_RE","ESCAPED","postProcess$1","loneMarkers","startDelim","endDelim","r_strikethrough","scanned","postProcess","isStrong","r_emphasis","EMAIL_RE","AUTOLINK_RE","DIGITAL_RE","NAMED_RE","processDelimiters","openersBottom","headerIdx","lastTokenIdx","jumps","closerIdx","closer","minOpenerIdx","openerIdx","newMinOpenerIdx","opener","isOddMatch","lastJump","_rules","proto","urlEnd","pmax","escapedStr","ch2","origStr","openerLength","matchStart","matchEnd","closerLength","parseReference","labelStart","lc","isLetter","isLinkClose","_rules2","ParserInline","ruler2","config","components","zero","rules2","commonmark","BAD_PROTO_RE","GOOD_DATA_RE","RECODE_HOSTNAME_FOR","toASCII","er","toUnicode","defaultChars","presetName","renderer","presets","missed","plugin","parseInline","__createBinding","__setModuleDefault","__importStar","__importDefault","decodeXML","decodeHTMLStrict","decodeHTMLAttribute","determineBranch","EntityDecoder","DecodingMode","BinTrieFlags","replaceCodePoint","decodeCodePoint","xmlDecodeTree","htmlDecodeTree","decode_data_html_js_1","decode_data_xml_js_1","decode_codepoint_js_1","CharCodes","EntityDecoderState","decode_codepoint_js_2","isNumber","ZERO","NINE","isHexadecimalCharacter","UPPER_A","UPPER_F","LOWER_A","LOWER_F","isEntityInAttributeInvalidEnd","EQUALS","UPPER_Z","LOWER_Z","isAsciiAlphaNumeric","decodeTree","emitCodePoint","EntityStart","consumed","treeIndex","excess","decodeMode","Strict","startEntity","write","NUM","NumericStart","stateNumericStart","NamedEntity","stateNamedEntity","NumericDecimal","stateNumericDecimal","NumericHex","stateNumericHex","LOWER_X","addToNumericResult","digitCount","substr","startIdx","char","emitNumericEntity","lastCp","expectedLength","absenceOfDigitsInNumericCharacterReference","SEMI","missingSemicolonAfterCharacterReference","validateNumericCharacterReference","valueLength","VALUE_LENGTH","Attribute","emitNotTerminatedNamedEntity","emitNamedEntityData","getDecoder","nodeIdx","branchCount","BRANCH_LENGTH","jumpOffset","JUMP_TABLE","midVal","htmlDecoder","xmlDecoder","Legacy","decodeMap","codePoint","encodeNonAsciiHTML","encodeHTML","encode_html_js_1","escape_js_1","htmlReplacer","encodeHTMLTrieRe","regExp","lastIdx","cp","getCodePoint","xmlReplacer","escapeText","escapeAttribute","escapeUTF8","encodeXML","xmlCodeMap","getEscaper","regex","codePointAt","Uint16Array","restoreDiff","decodeXMLStrict","decodeHTML5Strict","decodeHTML4Strict","decodeHTML5","decodeHTML4","encodeHTML5","encodeHTML4","decodeStrict","EncodingMode","EntityLevel","decode_js_1","encode_js_1","XML","HTML","UTF8","ASCII","escape_js_2","encode_js_2","decode_js_2","decodeCache","exclude","getDecodeCache","seq","b2","chr","b3","b4","componentChars","encodeCache","keepEscaped","getEncodeCache","nextCode","Url","slashes","protocolPattern","portPattern","simplePathPattern","unwise","autoEscape","nonHostChars","hostEndingChars","hostnamePartPattern","hostnamePartStart","hostlessProtocol","slashedProtocol","https","ftp","gopher","file","slashesDenoteHost","lowerProto","hec","simplePath","atSign","hostEnd","parseHost","ipv6Hostname","hostparts","newpart","validParts","notHost","bit","qm","DEFAULT_OPTIONS_KEYS","isMatchingKey","isPromise","onCacheAdd","onCacheChange","onCacheHit","transformKey","cloneArray","arrayLike","isSameValueZero","object1","object2","mergeOptions","existingOptions","newOptions","Cache","isMatchingKeyFunction","getKeyIndex","_getKeyIndexFromMatchingKey","_getKeyIndexForMany","_getKeyIndexForSingle","canTransformKey","shouldCloneArguments","shouldUpdateOnAdd","shouldUpdateOnChange","shouldUpdateOnHit","keyToMatch","keysLength","existingKey","keyLength","orderByLru","startingIndex","currentLength","updateAsyncCache","memoized","firstKey","firstValue","keyIndex","createMemoizedFunction","isMemoized","_b","_c","normalizedOptions","customOptions","getCustomOptions","factory","nullthrows","IS_PAPA_WORKER","dynamicTyping","J","dynamicTypingFunction","worker","WORKERS_SUPPORTED","webkitURL","BLOB_URL","onmessage","userStep","userChunk","chunk","userComplete","complete","userError","workerId","NODE_STREAM_INPUT","download","readable","on","File","unparse","delimiter","BAD_DELIMITERS","newline","quoteChar","escapeChar","escapeFormulae","Q","RECORD_SEP","UNIT_SEP","BYTE_ORDER_MARK","LocalChunkSize","RemoteChunkSize","DefaultDelimiter","Parser","E","ParserHandle","NetworkStreamer","FileStreamer","StringStreamer","ReadableStreamStreamer","jQuery","each","attr","files","inputElem","instanceConfig","extend","reason","_handle","_finished","_completed","_halted","_baseIndex","_partialLine","_rowCount","_start","_nextChunk","isFirstChunk","_completeResults","chunkSize","streamer","_config","parseChunk","beforeFirstChunk","paused","preview","WORKER_ID","finished","_sendError","_readChunk","_chunkLoaded","XMLHttpRequest","withCredentials","onerror","_chunkError","downloadRequestBody","downloadRequestHeaders","setRequestHeader","send","readyState","responseText","getResponseHeader","webkitSlice","mozSlice","FileReaderSync","readAsText","encoding","pause","_streamData","_streamEnd","_streamError","_checkIsFinished","_streamCleanUp","removeListener","abort","transformHeader","comments","successful","bestDelimiter","delimitersToGuess","getCharIndex","U","N","B","fastMode","K","H","I","F","R","D","O","A","linebreak","truncated","maxInt","regexPunycode","regexNonASCII","regexSeparators","stringFromCharCode","RangeError","mapDomain","encoded","ucs2decode","ucs2encode","codePoints","basicToDigit","digitToBasic","digit","flag","adapt","numPoints","firstTime","baseMinusTMin","inputLength","basic","oldi","baseMinusT","basicLength","handledCPCount","handledCPCountPlusOne","qMinusT","canPromise","CanvasRenderer","SvgRenderer","renderCanvas","renderFunc","canvas","argsNum","isLastArgCb","getContext","toCanvas","toDataURL","renderToDataURL","getSymbolSize","getRowColCoords","posCount","positions","getPositions","posLength","Mode","ALPHA_NUM_CHARS","AlphanumericData","ALPHANUMERIC","getBitsLength","getLength","bitBuffer","BitBuffer","bufIndex","putBit","getLengthInBits","BitMatrix","reservedBit","col","reserved","xor","isReserved","encodeUtf8","ByteData","BYTE","ECLevel","EC_BLOCKS_TABLE","EC_CODEWORDS_TABLE","getBlocksCount","errorCorrectionLevel","getTotalCodewordsCount","fromString","Utils","G15_BCH","getBCHDigit","getEncodedBits","mask","EXP_TABLE","LOG_TABLE","mul","KanjiData","KANJI","toSJIS","Patterns","PATTERN000","PATTERN001","PATTERN010","PATTERN011","PATTERN100","PATTERN101","PATTERN110","PATTERN111","getMaskAt","maskPattern","getPenaltyN1","sameCountCol","sameCountRow","lastCol","lastRow","getPenaltyN2","getPenaltyN3","bitsCol","bitsRow","getPenaltyN4","darkCount","modulesCount","applyMask","getBestMask","setupFormatFunc","numPatterns","bestPattern","lowerPenalty","penalty","VersionCheck","Regex","NUMERIC","ccBits","MIXED","getCharCountIndicator","getBestModeForData","dataStr","testNumeric","testAlphanumeric","testKanji","NumericData","remainingNum","GF","p1","p2","coeff","divident","divisor","generateECPolynomial","degree","poly","AlignmentPattern","FinderPattern","MaskPattern","ECCode","ReedSolomonEncoder","FormatInfo","Segments","setupFormatInfo","matrix","bits","createSymbol","fromArray","estimatedVersion","rawSegments","rawSplit","getBestVersionForData","bestVersion","dataBits","dataTotalCodewordsBits","getSymbolTotalCodewords","remainingByte","totalCodewords","dataTotalCodewords","ecTotalBlocks","blocksInGroup1","totalCodewordsInGroup1","dataCodewordsInGroup1","dataCodewordsInGroup2","ecCount","rs","dcData","ecData","maxDataSize","dataSize","createCodewords","createData","moduleCount","modules","setupFinderPattern","setupTimingPattern","setupAlignmentPattern","setupVersionInfo","bitIndex","byteIndex","dark","setupData","toSJISFunc","setToSJISFunction","Polynomial","genPoly","initialize","paddedData","remainder","buff","numeric","kanji","byte","BYTE_KANJI","TEST_KANJI","TEST_NUMERIC","TEST_ALPHANUMERIC","getStringByteLength","unescape","getSegments","getSegmentsFromString","numSegs","alphaNumSegs","byteSegs","kanjiSegs","isKanjiModeEnabled","s1","s2","getSegmentBitsLength","buildSingleSegment","modesHint","bestMode","seg","segs","buildNodes","table","prevNodeIds","nodeGroup","currentNodeIds","lastCount","prevNodeId","buildGraph","optimizedSegs","prevSeg","toSJISFunction","CODEWORDS_COUNT","G18_BCH","getReservedBitsCount","getTotalBitsFromDataArray","totalBits","reservedBits","getCapacity","usableBits","ecl","getBestVersionForMixedData","getBestVersionForDataLength","qrData","canvasEl","getCanvasElement","getOptions","getImageWidth","createImageData","qrToImageData","clearRect","clearCanvas","putImageData","rendererOpts","quality","getColorAttrib","attrib","svgCmd","cmd","qrcodesize","bg","moveBy","newRow","qrToPath","svgTag","hex2rgba","hexCode","hexValue","getScale","qrSize","imgData","qr","symbolSize","scaledMargin","posDst","pxColor","Scheduler","ReactDOM","formatProdErrorMessage","isValidContainer","nodeType","getNearestMountedFiber","fiber","nearestMounted","alternate","return","getSuspenseInstanceFromFiber","suspenseState","memoizedState","dehydrated","getActivityInstanceFromFiber","activityState","assertIsMounted","findCurrentHostFiberImpl","sibling","REACT_LEGACY_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_SUSPENSE_LIST_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","REACT_ACTIVITY_TYPE","REACT_MEMO_CACHE_SENTINEL","MAYBE_ITERATOR_SYMBOL","getIteratorFn","maybeIterable","REACT_CLIENT_REFERENCE","getComponentNameFromType","displayName","_context","innerType","_payload","_init","isArrayImpl","ReactSharedInternals","__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE","ReactDOMSharedInternals","__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE","sharedNotPendingObject","valueStack","createCursor","suffix","contextStackCursor","contextFiberStackCursor","rootInstanceStackCursor","hostTransitionProviderCursor","pushHostContainer","nextRootInstance","namespaceURI","getOwnHostContext","getChildHostContextProd","popHostContainer","pushHostContext","JSCompiler_inline_result","popHostContext","HostTransitionContext","_currentValue","describeBuiltInComponentFrame","reentry","describeNativeComponentFrame","previousPrepareStackTrace","prepareStackTrace","RunInRootFrame","DetermineComponentFrameRoot","Fake","control","x$1","x$2","namePropDescriptor","_RunInRootFrame$Deter","sampleStack","controlStack","sampleLines","controlLines","frame","describeFiber","childFiber","getStackByFiberInDevAndProd","workInProgress","scheduleCallback$3","unstable_scheduleCallback","cancelCallback$1","unstable_cancelCallback","shouldYield","unstable_shouldYield","requestPaint","unstable_requestPaint","unstable_now","getCurrentPriorityLevel","unstable_getCurrentPriorityLevel","ImmediatePriority","unstable_ImmediatePriority","UserBlockingPriority","unstable_UserBlockingPriority","NormalPriority$1","unstable_NormalPriority","LowPriority","unstable_LowPriority","IdlePriority","unstable_IdlePriority","log$1","unstable_setDisableYieldValue","rendererID","injectedHook","setIsStrictModeForDevtools","newIsStrictMode","setStrictMode","clz32","LN2","nextTransitionUpdateLane","nextTransitionDeferredLane","nextRetryLane","getHighestPriorityLanes","lanes","pendingSyncLanes","getNextLanes","wipLanes","rootHasPendingCommit","pendingLanes","nextLanes","suspendedLanes","pingedLanes","warmLanes","nonIdlePendingLanes","checkIfRootIsPrerendering","renderLanes","computeExpirationTime","lane","currentTime","claimNextRetryLane","createLaneMap","laneMap","markRootUpdated$1","updateLane","markSpawnedDeferredLane","spawnedLane","entangledLanes","spawnedLaneIndex","entanglements","markRootEntangled","rootEntangledLanes","index$8","getBumpedLaneForHydration","renderLane","getBumpedLaneForHydrationByLane","lanesToEventPriority","resolveUpdatePriority","updatePriority","getEventPriority","runWithPriority","priority","previousPriority","randomKey","internalInstanceKey","internalPropsKey","internalContainerInstanceKey","internalEventHandlersKey","internalEventHandlerListenersKey","internalEventHandlesSetKey","internalRootNodeResourcesKey","internalHoistableMarker","detachDeletedInstance","getClosestInstanceFromNode","targetNode","targetInst","getParentHydrationBoundary","getInstanceFromNode","getNodeFromInstance","inst","stateNode","getResourcesFromRoot","resources","hoistableStyles","hoistableScripts","markNodeAsHoistable","allNativeEvents","registrationNameDependencies","registerTwoPhaseEvent","registrationName","dependencies","registerDirectEvent","VALID_ATTRIBUTE_NAME_REGEX","illegalAttributeNameCache","validatedAttributeNameCache","setValueForAttribute","removeAttribute","prefix$10","setValueForKnownAttribute","setValueForNamespacedAttribute","namespace","setAttributeNS","getToStringValue","isCheckable","elem","nodeName","_valueTracker","valueField","descriptor","stopTracking","trackValueOnNode","updateValueIfChanged","tracker","lastValue","getActiveElement","doc","activeElement","escapeSelectorAttributeValueInsideDoubleQuotesRegex","escapeSelectorAttributeValueInsideDoubleQuotes","updateInput","lastDefaultValue","defaultChecked","setDefaultValue","initInput","isHydrating","ownerDocument","updateOptions","multiple","propValue","setDefaultSelected","defaultSelected","updateTextarea","initTextarea","setTextContent","lastChild","nodeValue","unitlessNumbers","setValueForStyle","styleName","isCustomProperty","cssFloat","setValueForStyles","styles","prevStyles","styleName$16","styleName$17","isCustomElement","isJavaScriptProtocol","sanitizeURL","noop$1","currentReplayingEvent","getEventTarget","srcElement","correspondingUseElement","restoreTarget","restoreQueue","restoreStateOfTarget","internalInstance","otherNode","form","isInsideEventHandler","batchedUpdates$1","flushSyncWork$1","getListener","canUseDOM","passiveBrowserEventsSupported","startText","fallbackText","getData","startValue","startLength","endValue","endLength","minEnd","getEventCharCode","keyCode","charCode","functionThatReturnsTrue","functionThatReturnsFalse","createSyntheticEvent","Interface","SyntheticBaseEvent","reactName","reactEventType","nativeEventTarget","propName","_reactName","_targetInst","isDefaultPrevented","defaultPrevented","returnValue","isPropagationStopped","cancelBubble","persist","isPersistent","lastMovementX","lastMovementY","lastMouseEvent","EventInterface","eventPhase","bubbles","timeStamp","isTrusted","SyntheticEvent","UIEventInterface","SyntheticUIEvent","MouseEventInterface","screenX","screenY","pageX","pageY","ctrlKey","shiftKey","altKey","metaKey","getModifierState","getEventModifierState","buttons","fromElement","toElement","movementX","movementY","SyntheticMouseEvent","SyntheticDragEvent","dataTransfer","SyntheticFocusEvent","SyntheticAnimationEvent","animationName","elapsedTime","pseudoElement","SyntheticClipboardEvent","clipboardData","SyntheticCompositionEvent","normalizeKey","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","translateToKey","modifierKeyToProp","Alt","Control","Meta","Shift","modifierStateGetter","keyArg","SyntheticKeyboardEvent","locale","which","SyntheticPointerEvent","pointerId","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","SyntheticTouchEvent","targetTouches","changedTouches","SyntheticTransitionEvent","propertyName","SyntheticWheelEvent","wheelDeltaX","deltaY","wheelDeltaY","wheelDelta","deltaZ","deltaMode","SyntheticToggleEvent","END_KEYCODES","canUseCompositionEvent","documentMode","canUseTextInputEvent","useFallbackCompositionData","SPACEBAR_CHAR","hasSpaceKeypress","isFallbackCompositionEnd","domEventName","getDataFromCustomEvent","isComposing","supportedInputTypes","datetime","tel","isTextInputElement","createAndAccumulateChangeEvent","dispatchQueue","accumulateTwoPhaseListeners","activeElement$1","activeElementInst$1","runEventInBatch","processDispatchQueue","getInstIfValueChanged","getTargetInstForChangeEvent","isInputEventSupported","JSCompiler_inline_result$jscomp$286","isSupported$jscomp$inline_427","element$jscomp$inline_428","oninput","stopWatchingForValueChange","detachEvent","handlePropertyChange","handleEventsForInputEventPolyfill","attachEvent","getTargetInstForInputEventPolyfill","getTargetInstForClickEvent","getTargetInstForInputOrChangeEvent","objectIs","shallowEqual","objA","objB","keysA","keysB","currentKey","getLeafNode","getNodeForCharacterOffset","nodeEnd","containsNode","outerNode","innerNode","compareDocumentPosition","getActiveElementDeep","containerInfo","defaultView","HTMLIFrameElement","contentWindow","hasSelectionCapabilities","skipSelectionChangeEvent","activeElementInst","lastSelection","mouseDown","constructSelectEvent","selectionStart","selectionEnd","anchorNode","getSelection","anchorOffset","focusNode","focusOffset","makePrefixMap","styleProp","vendorPrefixes","animationend","animationiteration","animationstart","transitionrun","transitionstart","transitioncancel","transitionend","prefixedEventNames","getVendorPrefixedEventName","ANIMATION_END","ANIMATION_ITERATION","ANIMATION_START","TRANSITION_RUN","TRANSITION_START","TRANSITION_CANCEL","TRANSITION_END","topLevelEventsToReactNames","simpleEventPluginEvents","registerSimpleEvent","reportGlobalError","ErrorEvent","dispatchEvent","emit","concurrentQueues","concurrentQueuesIndex","concurrentlyUpdatedLanes","finishQueueingConcurrentUpdates","markUpdateLaneFromFiberToRoot","enqueueUpdate$1","enqueueConcurrentHookUpdate","getRootForUpdatedFiber","enqueueConcurrentRenderForLane","sourceFiber","childLanes","_visibility","hiddenUpdates","nestedUpdateCount","rootWithNestedUpdates","emptyContextObject","FiberNode","pendingProps","elementType","refCleanup","updateQueue","memoizedProps","subtreeFlags","deletions","createFiberImplClass","shouldConstruct","Component","isReactComponent","createWorkInProgress","firstContext","resetWorkInProgress","createFiberFromTypeAndProps","fiberTag","hostContext","itemProp","precedence","async","isHostHoistableType","createFiberFromFragment","createFiberFromText","createFiberFromDehydratedFragment","dehydratedNode","createFiberFromPortal","portal","pendingChildren","implementation","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","instance","listenToNonDelegatedEvent","mediaEventTypes","suppressHydrationWarning","checkForUnmatchedText","popover","onScroll","onScrollEnd","onclick","popToNextHostParent","popHydrationState","JSCompiler_temp","shouldSetTextContent","getNextHydratableInstanceAfterHydrationBoundary","isSingletonScope","previousHydratableOnEnteringScopedSingleton","getNextHydratable","resetHydrationState","upgradeHydrationErrorsToRecoverable","queuedErrors","workInProgressRootRecoverableErrors","valueCursor","currentlyRenderingFiber$1","lastContextDependency","pushProvider","providerFiber","nextValue","popProvider","scheduleContextWorkOnParentPath","propagationRoot","propagateContextChanges","contexts","forcePropagateEntireTree","nextFiber","dependency","propagateParentContextChanges","isInsidePropagationBailout","currentParent","checkIfContextChanged","currentDependencies","memoizedValue","prepareToReadContext","readContext","readContextForConsumer","readContextDuringReconciliation","consumer","AbortControllerLocal","AbortController","listener","scheduleCallback$2","NormalPriority","CacheContext","Consumer","_currentValue2","_threadCount","createCache","controller","refCount","releaseCache","currentEntangledListeners","currentEntangledPendingCount","currentEntangledLane","currentEntangledActionThenable","pingEngtangledActionScope","prevOnStartTransitionFinish","globalMostRecentTransitionTime","thenable","entangledListeners","requestTransitionLane","entangleAsyncAction","resumedCache","peekCacheFromPool","cacheResumedFromPreviousRender","workInProgressRoot","pooledCache","pushTransition","offscreenWorkInProgress","prevCachePool","pool","getSuspendedCache","cacheFromPool","SuspenseException","SuspenseyCommitException","SuspenseActionException","noopSuspenseyCommitThenable","isThenableResolved","trackUsedThenable","thenableState","checkIfUseWrappedInAsyncCatch","shellSuspendCounter","fulfilledValue","fulfilledThenable","rejectedThenable","suspendedThenable","resolveLazy","lazyType","getSuspendedThenable","rejectedReason","thenableState$1","thenableIndexCounter$1","unwrapThenable","coerceRef","throwOnInvalidObjectTypeImpl","returnFiber","newChild","createChildReconciler","shouldTrackSideEffects","deleteChild","childToDelete","deleteRemainingChildren","currentFirstChild","mapRemainingChildren","existingChildren","useFiber","placeChild","newFiber","lastPlacedIndex","newIndex","placeSingleChild","updateTextNode","updateElement","updateFragment","updatePortal","createChild","updateSlot","oldFiber","updateFromMap","newIdx","reconcileChildFibersImpl","newChildren","resultingFirstChild","previousNewFiber","nextOldFiber","reconcileChildrenArray","reconcileChildrenIterator","firstChildFiber","reconcileChildFibers","mountChildFibers","hasForceUpdate","initializeUpdateQueue","baseState","firstBaseUpdate","lastBaseUpdate","shared","hiddenCallbacks","cloneUpdateQueue","createUpdate","enqueueUpdate","executionContext","entangleTransitions","queueLanes","enqueueCapturedUpdate","capturedUpdate","newFirst","newLast","didReadFromEntangledAsyncAction","suspendIfUpdateReadFromEntangledAsyncAction","processUpdateQueue","workInProgress$jscomp$0","instance$jscomp$0","pendingQueue","lastPendingUpdate","firstPendingUpdate","isHiddenUpdate","workInProgressRootRenderLanes","workInProgressRootSkippedLanes","callCallback","commitCallbacks","currentTreeHiddenStackCursor","prevEntangledRenderLanesCursor","pushHiddenContext","entangledRenderLanes","baseLanes","reuseHiddenContextOnStack","popHiddenContext","suspenseHandlerStackCursor","shellBoundary","pushPrimaryTreeSuspenseHandler","suspenseStackCursor","pushDehydratedActivitySuspenseHandler","pushOffscreenSuspenseHandler","reuseSuspenseHandlerOnStack","popSuspenseHandler","findFirstSuspended","isSuspenseInstancePending","isSuspenseInstanceFallback","revealOrder","currentlyRenderingFiber","currentHook","workInProgressHook","didScheduleRenderPhaseUpdate","didScheduleRenderPhaseUpdateDuringThisPass","shouldDoubleInvokeUserFnsInHooksDEV","localIdCounter","thenableIndexCounter","globalClientIdCounter","throwInvalidHookError","areHookInputsEqual","nextDeps","prevDeps","renderWithHooks","secondArg","nextRenderLanes","HooksDispatcherOnMount","HooksDispatcherOnUpdate","renderWithHooksAgain","finishRenderingHooks","ContextOnlyDispatcher","didRenderTooFewHooks","didReceiveUpdate","numberOfReRenders","lastEffect","events","stores","memoCache","HooksDispatcherOnRerender","TransitionAwareHostComponent","dispatcher","maybeThenable","useThenable","checkDidRenderIdHook","didRenderIdHook","bailoutHooks","resetHooksOnUnwind","mountWorkInProgressHook","hook","baseQueue","updateWorkInProgressHook","nextCurrentHook","nextWorkInProgressHook","usable","useMemoCache","basicStateReducer","updateReducer","updateReducerImpl","lastRenderedReducer","baseFirst","newBaseQueueFirst","newBaseQueueLast","didReadFromEntangledAsyncAction$60","revertLane","gesture","hasEagerState","eagerState","lastRenderedState","rerenderReducer","lastRenderPhaseUpdate","updateSyncExternalStore","subscribe","getSnapshot","getServerSnapshot","isHydrating$jscomp$0","snapshotChanged","updateEffect","subscribeToStore","pushSimpleEffect","destroy","updateStoreInstance","pushStoreConsistencyCheck","renderedSnapshot","nextSnapshot","checkIfSnapshotChanged","forceStoreRerender","latestGetSnapshot","scheduleUpdateOnFiber","mountStateImpl","initialStateInitializer","updateOptimisticImpl","passthrough","dispatchActionState","actionQueue","setPendingState","isRenderPhaseUpdate","actionNode","isTransition","runActionStateAction","prevState","prevTransition","currentTransition","onStartTransitionFinish","handleActionReturnValue","onActionError","error$66","nextState","onActionSuccess","notifyActionListeners","actionStateReducer","mountActionState","initialStateProp","ssrFormState","formState","JSCompiler_inline_result$jscomp$0","inRootOrSingleton","dispatchSetState","dispatchOptimisticSetState","updateActionState","updateActionStateImpl","stateHook","currentStateHook","actionStateActionEffect","rerenderActionState","deps","updateRef","mountEffectImpl","fiberFlags","hookFlags","updateEffectImpl","mountEffect","updateEvent","componentUpdateQueue","useEffectEventImpl","nextImpl","impl","updateInsertionEffect","updateLayoutEffect","imperativeHandleEffect","updateImperativeHandle","mountDebugValue","updateCallback","updateMemo","nextCreate","mountDeferredValueImpl","requestDeferredLane","updateDeferredValueImpl","prevValue","startTransition","pendingState","finishedState","thenableWithOverride","dispatchSetStateInternal","requestUpdateLane","noop","startHostTransition","formFiber","formData","ensureFormComponentIsStateful","requestFormReset$1","existingStateHook","initialResetState","useHostTransitionStatus","updateId","updateRefresh","refreshCache","provider","root$69","dispatchReducerAction","enqueueRenderPhaseUpdate","entangleTransitionUpdate","throwIfDuringRender","useLayoutEffect","useInsertionEffect","useDebugValue","useDeferredValue","useTransition","useId","useFormState","useActionState","useOptimistic","useCacheRefresh","useEffectEvent","initialArg","identifierPrefix","booleanOrThenable","applyDerivedStateFromProps","getDerivedStateFromProps","nextProps","classComponentUpdater","enqueueSetState","_reactInternals","enqueueReplaceState","enqueueForceUpdate","checkShouldComponentUpdate","oldProps","newProps","nextContext","shouldComponentUpdate","isPureReactComponent","callComponentWillReceiveProps","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","resolveClassComponentProps","baseProps","defaultProps","propName$73","defaultOnUncaughtError","defaultOnCaughtError","defaultOnRecoverableError","logUncaughtError","errorInfo","onUncaughtError","componentStack","e$74","logCaughtError","boundary","onCaughtError","errorBoundary","e$75","createRootErrorUpdate","createClassErrorUpdate","initializeClassErrorUpdate","getDerivedStateFromError","componentDidCatch","legacyErrorBoundariesThatAlreadyFailed","SelectiveHydrationException","reconcileChildren","nextChildren","updateForwardRef","propsWithoutRef","bailoutOnAlreadyFinishedWork","updateMemoComponent","updateSimpleMemoComponent","checkScheduledUpdateOrContext","updateFunctionComponent","updateOffscreenComponent","_pendingMarkers","_retryCache","_transitions","deferHiddenOffscreenComponent","cachePool","bailoutOffscreenComponent","nextBaseLanes","remainingChildLanes","mountActivityChildren","mountWorkInProgressOffscreenFiber","retryActivityComponentWithoutHydrating","markRef","replayFunctionComponent","updateClassComponent","contextType","updater","refs","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","componentDidMount","unresolvedOldProps","oldContext","contextType$jscomp$0","UNSAFE_componentWillUpdate","componentWillUpdate","componentDidUpdate","mountHostRootWithoutHydrating","SUSPENDED_MARKER","treeContext","retryLane","mountSuspenseOffscreenState","getRemainingWorkInPrimaryTree","primaryTreeDidDefer","workInProgressDeferredLane","updateSuspenseComponent","showFallback","didSuspend","canHydrateHydrationBoundary","nextPrimaryChildren","mountSuspensePrimaryChildren","retrySuspenseComponentWithoutHydrating","dataset","digest","dgst","renderDidSuspendDelayIfPossible","primaryChildren","offscreenProps","scheduleSuspenseWorkOnFiber","initSuspenseListRenderState","isBackwards","lastContentRow","tailMode","renderState","rendering","renderingStartTime","updateSuspenseListComponent","suspenseContext","shouldForceFallback","beginWork","state$102","didSuspendBefore","attemptEarlyBailoutIfNoScheduledUpdate","isDehydrated","getResource","getOwnerDocumentFromRootContainer","setInitialProperties","resolveSingletonInstance","anyProps","hasAttribute","crossOrigin","canHydrateInstance","canHydrateTextInstance","updateActivityComponent","pooledCacheLanes","markUpdate","preloadInstanceAndSuspendIfNeeded","shouldRemainOnPreviousScreen","preloadResourceAndSuspendIfNeeded","resource","preloadResource","scheduleRetryEffect","retryQueue","workInProgressSuspendedRetryLanes","cutOffTailIfNeeded","hasRenderedATailFallback","lastTailNode","lastTailNode$106","bubbleProperties","completedWork","didBailout","newChildLanes","child$107","completeWork","pendingContext","nextResource","createElementNS","autoFocus","createTextNode","listenToAllSupportedEvents","workInProgressRootExitStatus","workInProgressRootRenderTargetTime","unwindWork","unwindInterruptedWork","interruptedWork","commitHookEffectListMount","finishedWork","firstEffect","captureCommitPhaseError","commitHookEffectListUnmount","nearestMountedAncestor$jscomp$0","nearestMountedAncestor","destroy_","commitClassCallbacks","safelyCallComponentWillUnmount","componentWillUnmount","safelyAttachRef","instanceToUse","safelyDetachRef","error$140","commitHostMount","srcSet","srcset","commitHostUpdate","domElement","lastProps","lastProp","setProp","propKey$201","propKey$217","propKey$222","propKey$227","setPropOnCustomElement","propKey$232","updateProperties","isHostParent","getHostSibling","insertOrAppendPlacementNodeIntoContainer","insertBefore","_reactRootContainer","insertOrAppendPlacementNode","commitHostSingletonAcquisition","singleton","removeAttributeNode","offscreenSubtreeIsHidden","offscreenSubtreeWasHidden","needsFormReset","PossiblyWeakSet","WeakSet","nextEffect","commitLayoutEffectOnFiber","finishedRoot","recursivelyTraverseLayoutEffects","__reactInternalSnapshotBeforeUpdate","error$139","commitActivityHydrationCallbacks","commitSuspenseHydrationCallbacks","_reactRetry","registerSuspenseInstanceRetry","retryDehydratedSuspenseBoundary","prevOffscreenSubtreeWasHidden","recursivelyTraverseReappearLayoutEffects","detachFiberAfterEffects","hostParent","hostParentIsContainer","recursivelyTraverseDeletionEffects","commitDeletionEffectsOnFiber","deletedFiber","onCommitFiberUnmount","prevHostParent","prevHostParentIsContainer","releaseSingletonInstance","clearHydrationBoundary","retryIfBlockedOn","attachSuspenseRetryListeners","wakeables","retryCache","getRetryCache","wakeable","retry","resolveRetryWakeable","recursivelyTraverseMutationEffects","root$jscomp$0","parentFiber","commitMutationEffectsOnFiber","currentHoistableRoot","commitReconciliationEffects","hoistableRoot","currentResource","getElementsByTagName","maybeNodes","getHydratableHoistableCache","httpEquiv","charSet","mountHoistable","acquireResource","tagCaches","getHoistableRoot","recursivelyResetForms","globalMostRecentFallbackTime","wasHidden","prevOffscreenSubtreeIsHidden","recursivelyTraverseDisappearLayoutEffects","hideOrUnhideDehydratedBoundary","hostParentFiber","parent$141","parent$143","finishedRoot$jscomp$0","includeWorkInProgressEffects","commitOffscreenPassiveMountEffects","previousCache","commitCachePassiveMountEffect","recursivelyTraversePassiveMountEffects","committedLanes","committedTransitions","commitPassiveMountOnFiber","_finishedWork$memoize2","onPostCommit","passiveEffectDuration","recursivelyTraverseAtomicPassiveEffects","recursivelyTraverseReconnectPassiveEffects","committedLanes$jscomp$0","committedTransitions$jscomp$0","suspenseyCommitFlag","recursivelyAccumulateSuspenseyCommit","suspendedState","accumulateSuspenseyCommitOnFiber","media","matchMedia","matches","getStyleKey","getStylesheetSelectorFromKey","_p","onUnsuspend","stylesheetPropsFromRawProps","preloadPropsMap","adoptPreloadPropsForStylesheet","linkInstance","stylesheets","preload","suspendResource","previousHoistableRoot","detachAlternateSiblings","previousFiber","recursivelyTraversePassiveUnmountEffects","commitPassiveUnmountEffectsInsideOfDeletedTree_begin","commitPassiveUnmountOnFiber","recursivelyTraverseDisconnectPassiveEffects","deletedSubtreeRoot","DefaultAsyncDispatcher","getCacheForType","resourceType","cacheForType","cacheSignal","PossiblyWeakMap","workInProgressSuspendedReason","workInProgressThrownValue","workInProgressRootDidSkipSuspendedSiblings","workInProgressRootIsPrerendering","workInProgressRootDidAttachPingListener","workInProgressRootInterleavedUpdatedLanes","workInProgressRootPingedLanes","workInProgressRootConcurrentErrors","workInProgressRootDidIncludeRecursiveRenderUpdate","workInProgressTransitions","pendingEffectsStatus","pendingEffectsRoot","pendingFinishedWork","pendingEffectsLanes","pendingEffectsRemainingLanes","pendingPassiveTransitions","pendingRecoverableErrors","cancelPendingCommit","prepareFreshStack","markRootSuspended","ensureRootIsScheduled","performWorkOnRoot","forceSync","shouldTimeSlice","expiredLanes","exitStatus","prevExecutionContext","prevDispatcher","pushDispatcher","prevAsyncDispatcher","pushAsyncDispatcher","thrownValue","throwAndUnwindWorkLoop","replaySuspendedUnitOfWork","hostFiber","completeUnitOfWork","resetWorkInProgressStack","workLoopConcurrentByScheduler","thrownValue$167","handleThrow","renderRootConcurrent","renderRootSync","renderWasConcurrent","isRenderConsistentWithExternalStores","errorRecoveryDisabledLanes","wasRootDehydrated","timeoutHandle","scheduleTimeout","commitRootWhenReady","recoverableErrors","transitions","didIncludeRenderPhaseUpdate","updatedLanes","suspendedRetryLanes","didSkipSuspendedSiblings","suspendedCommitReason","completedRenderStartTime","completedRenderEndTime","imgCount","imgBytes","suspenseyImages","waitingForImages","waitingForViewTransition","unsuspend","timeoutOffset","insertSuspendedStylesheets","commit","stylesheetTimer","estimatedBytesWithinLimit","performance","getEntriesByType","resourceEntries","transferSize","initiatorType","isLikelyStaticResource","responseEnd","overlapEntry","overlapStartTime","overlapTransferSize","overlapInitiatorType","downlink","estimateBandwidth","imgTimer","waitForCommitToBeReady","commitRoot","didAttemptEntireTree","expirationTimes","index$6","flushSyncWorkAcrossRoots_impl","cancelTimeout","allEntangledLanes","index$4","shouldYieldForPrerendering","unitOfWork","workLoopSync","thrownValue$165","performUnitOfWork","suspendedReason","rootRenderLanes","attachPingListener","markerInstances","cause","wrapperError","throwException","unwindUnitOfWork","skipSiblings","flushPendingEffects","finishedLanes","remainingLanes","previouslyPendingLanes","index$7","hiddenUpdatesForLane","markRootFinished","callbackNode","callbackPriority","flushPassiveEffects","eventsEnabled","_enabled","selection","rangeCount","e$20","indexWithinAnchor","indexWithinFocus","selectionInformation","focusedElem","selectionRange","resolvedPrevProps","clearContainerSparingly","commitBeforeMutationEffects","flushMutationEffects","flushLayoutEffects","flushSpawnedWork","rootMutationHasEffect","priorSelectionInformation","curFocusedElem","priorFocusedElem","priorSelectionRange","win","start$jscomp$0","end$jscomp$0","startMarker","endMarker","createRange","setStart","removeAllRanges","addRange","setEnd","rootHasLayoutEffect","releaseRootPooledCache","onCommitFiberRoot","onRecoverableError","recoverableError","renderPriority","onPostCommitFiberRoot","captureCommitPhaseErrorOnRoot","rootFiber","pingCache","threadIDs","pingSuspendedRoot","retryTimedOutBoundary","boundaryFiber","firstScheduledRoot","lastScheduledRoot","didScheduleMicrotask","mightHavePendingSyncWork","isFlushingWork","currentEventTransitionLane","scheduleMicrotask","processRootScheduleInImmediateTask","processRootScheduleInMicrotask","syncTransitionLanes","onlyLegacy","didPerformSomeWork","root$170","performSyncWorkOnRoot","currentPopstateTransitionEvent","scheduleTaskForRootDuringMicrotask","index$5","expirationTime","performWorkOnRootViaSchedulerTask","didTimeout","originalCallbackNode","workInProgressRootRenderLanes$jscomp$0","actionScopeLane","coerceFormActionProp","actionProp","createFormDataWithSubmitter","submitter","temp","FormData","i$jscomp$inline_1577","eventName$jscomp$inline_1578","nonDelegatedEvents","eventSystemFlags","_dispatchQueue$i","previousInstance","i$jscomp$0","_dispatchListeners$i","targetElement","listenerSetKey","addTrappedEventListener","listenToNativeEvent","isCapturePhaseListener","listeningMarker","rootContainerElement","targetContainer","listenerWrapper","dispatchDiscreteEvent","dispatchContinuousEvent","capture","dispatchEventForPluginEventSystem","targetInst$jscomp$0","ancestorInst","nodeTag","grandTag","SyntheticEventCtor","inCapturePhase","accumulateTargetOnly","reactEventName","lastHostComponent","_instance","createDispatchListener","parentWindow","getParent","tempB","accumulateEnterLeaveListenersForEvent","getTargetInstFunc","handleEventFunc","fallbackData","eventType","getNativeBeforeInputChars","getFallbackBeforeInputChars","maybeTargetInst","formAction","extractEvents$1","targetFiber","captureName","_instance2","common","_instance3","NORMALIZE_NEWLINES_REGEX","NORMALIZE_NULL_AND_REPLACEMENT_REGEX","normalizeMarkupForTextOrAttribute","serverText","clientText","formEncType","formMethod","formTarget","encType","muted","hasSrc","hasSrcSet","propValue$184","parentNamespace","localPromise","queueMicrotask","handleErrorInNextTick","parentInstance","hydrationInstance","nextNode","node$jscomp$0","nextNode$jscomp$0","suspenseInstance","_stashedDisplay","_stashedText","targetInstance","previousSibling","rootContainerInstance","preconnectsSet","getRootNode","previousDispatcher","previousWasRendering","wasRendering","formInst","preconnectAs","as","globalDocument","preloadSelector","imageSrcSet","imageSizes","getScriptKey","getScriptSelectorFromKey","X","scripts","adoptPreloadPropsForScript","insertStylesheet","limitedEscapedHref","currentProps","preloadProps","styles$243","resource$244","integrity","hrefLang","referrerPolicy","rawProps","styleProps","instance$249","prior","stylesheetProps","scriptProps","keyAttribute","caches","nodeKey","precedencesByRoot","insertStylesheetIntoRoot","precedences","FiberRootNode","hydrate","onDefaultTransitionIndicator","incompleteTransitions","createFiberRoot","initialChildren","hydrationCallbacks","isStrictMode","getContextForSubtree","parentComponent","updateContainerImpl","markRetryLaneImpl","markRetryLaneIfNotHydrated","attemptContinuousHydration","attemptHydrationAtCurrentPriority","blockedOn","findInstanceBlockingEvent","return_targetInst","clearIfContinuousEvent","queuedFocus","accumulateOrCreateContinuousQueuedReplayableEvent","queuedDrag","queuedMouse","queuedPointers","queuedPointerCaptures","queueIfContinuousEvent","discreteReplayableEvents","findInstanceBlockingTarget","hasScheduledReplayAttempt","queuedExplicitHydrationTargets","existingQueuedEvent","targetContainers","attemptExplicitHydrationTarget","queuedTarget","attemptReplayContinuousQueuedEvent","queuedEvent","nextBlockedOn","nativeEventClone","attemptReplayContinuousQueuedEventInMap","replayUnblockedEvents","scheduleCallbackIfUnblocked","unblocked","lastScheduledReplayQueue","scheduleReplayQueueIfNeeded","formReplayingQueue","submitterOrAction","unblock","$$reactFormReplay","formProps","defaultOnDefaultTransitionIndicator","handleNavigate","canIntercept","intercept","pendingResolve","focusReset","handleNavigateComplete","isCancelled","startFakeNavigation","navigation","ReactDOMRoot","internalRoot","_internalRoot","ReactDOMHydrationRoot","unmount","unstable_scheduleHydration","isomorphicReactPackageVersion$jscomp$inline_1840","findDOMNode","componentOrElement","parentA","parentB","didFindChild","child$0","findCurrentFiberUsingSlowPath","internals$jscomp$inline_2347","bundleType","rendererPackageName","currentDispatcherRef","reconcilerVersion","__REACT_DEVTOOLS_GLOBAL_HOOK__","hook$jscomp$inline_2348","isDisabled","supportsFiber","inject","unstable_strictMode","Internals","getCrossOriginStringAs","createPortal$1","flushSync","previousTransition","previousUpdatePriority","preconnect","prefetchDNS","preinit","fetchPriority","preinitModule","preloadModule","requestFormReset","unstable_batchedUpdates","permalink","useFormStatus","checkDCE","listenerMapping","getColorScheme","addChangeListener","mappedListener","colorScheme","addListener","exitApp","dimensions","fontScale","shouldInit","visualViewport","docEl","devicePixelRatio","handleResize","Dimensions","dimension","initialDimensions","ease","kSampleStepSize","float32ArraySupported","Float32Array","aA1","aA2","calcBezier","aT","getSlope","bezier","mX1","mY1","mX2","mY2","sampleValues","aX","intervalStart","currentSample","kSplineTableSize","guessForT","initialSlope","_aGuessT","aGuessT","currentSlope","newtonRaphsonIterate","_aA","_aB","currentX","currentT","aA","aB","binarySubdivide","getTForX","step0","step1","quad","cubic","circle","elastic","bounciness","bounce","_t2","t2","x1","y1","x2","y2","inOut","deepDiffer","maxDepth","twoKey","safeIsNaN","areInputsEqual","newInputs","lastInputs","numColumnsOrDefault","numColumns","FlatList","_listRef","scrollToIndex","scrollToItem","scrollToOffset","recordInteraction","flashScrollIndicators","getScrollResponder","getNativeScrollRef","getScrollRef","getScrollableNode","_props","super","_virtualizedListPairs","_captureRef","_getItem","kk","itemIndex","_item","_getItemCount","isArrayLike","_keyExtractor","_this$props$keyExtrac","keyExtractor","_renderer","ListItemComponent","renderItem","columnWrapperStyle","extraData","cols","renderProp","_item2","it","separators","_memoizedRenderer","resultFn","newArgs","lastThis","lastArgs","lastResult","memoizeOne","_checkProps","viewabilityConfigCallbackPairs","viewabilityConfig","onViewableItemsChanged","_createOnViewableItemsChanged","getItemCount","_pushMultiColumnViewable","_this$props$keyExtrac2","viewableItems","_this$props","_removeClippedSubviews","_this$props$strictMod","strictMode","restProps","VirtualizedList","StyleSheet","allowRTL","forceRTL","getConstants","isRTL","assets","getAssetByID","assetId","dataUriPattern","ImageUriCache","_entries","lastUsedTimestamp","_cleanUpIfNeeded","leastRecentlyUsedKey","leastRecentlyUsedEntry","imageUris","_maximumEntries","ImageLoader","getSize","failure","naturalHeight","naturalWidth","onDecode","prefetch","queryCache","uris","LOADED","LOADING","_filterId","svgDataUriPattern","resolveAssetUri","asset","scales","preferredScale","PixelRatio","scaleSuffix","httpServerLocation","_ariaLabel","blurRadius","defaultSource","draggable","onLoadEnd","onLoadStart","pointerEvents","ariaLabel","_React$useState","_React$useState2","updateLayout","hasTextAncestor","TextAncestorContext","hiddenImageRef","filterRef","requestRef","shouldDisplaySource","_extractNonStandardSt","filterId","tintColorProp","flatStyle","flatten","tintColor","warnOnce","_filter","shadowString","extractNonStandardStyleProps","_resizeMode","_tintColor","selectedSource","displayImageUri","imageSizeStyle","_getAssetByID","resolveAssetDimensions","backgroundImage","backgroundSize","_hiddenImageRef$curre","_height3","_width3","scaleFactor","getBackgroundSize","hiddenImage","accessibilityImage$raw","abortPendingRequest","_layout","undo","resizeModeStyles","floodColor","in2","createTintColorSVG","ImageWithStatics","overlayColor","absoluteFillObject","backgroundPosition","backgroundRepeat","center","contain","cover","stretch","isSupported","timeRemaining","_emitter","EventEmitter","InteractionManager","Events","interactionStart","interactionComplete","runAfterInteractions","task","tasks","_scheduleUpdate","_taskQueue","enqueueTasks","cancel","cancelTasks","createInteractionHandle","_inc","_addInteractionSet","clearInteractionHandle","_deleteInteractionSet","setDeadline","_deadline","_interactionSet","onMoreTasks","_onMoreTasks","_queueStack","popable","_getCurrentQueue","tasksToCancel","hasTasksToProcess","processNext","gen","_genPromise","stackIdx","stackItem","_nextUpdateHandle","_processUpdate","interactionCount","nextInteractionCount","isVisible","dismiss","removeAllListeners","getFontScale","getPixelSizeForLayoutSize","layoutSize","roundToNearestPixel","isTesting","onRefresh","progressBackgroundColor","progressViewOffset","refreshing","titleColor","normalizeScrollEvent","offsetHeight","ScrollViewBase","forwardedRef","onTouchMove","onWheel","_props$scrollEnabled","scrollEnabled","_props$scrollEventThr","scrollEventThrottle","showsVerticalScrollIndicator","scrollState","scrollLastTick","scrollTimeout","createPreventableScrollHandler","handleScrollTick","hideScrollbar","lastTick","eventThrottle","timeSinceLastTick","handleScrollEnd","handleScrollStart","useMergeRefs","scrollDisabled","touchAction","scrollbarWidth","emptyObject","_scrollNodeRef","_innerViewRef","isTouching","lastMomentumScrollBeginTime","lastMomentumScrollEndTime","observedScrollSinceBecomingResponder","becameResponderWhileAnimating","scrollResponderHandleScrollShouldSetResponder","scrollResponderHandleStartShouldSetResponderCapture","scrollResponderIsAnimating","scrollResponderHandleTerminationRequest","scrollResponderHandleTouchEnd","onTouchEnd","scrollResponderHandleResponderRelease","onResponderRelease","currentlyFocusedTextInput","TextInputState","currentlyFocusedField","keyboardShouldPersistTaps","onScrollResponderKeyboardDismissed","blurTextInput","scrollResponderHandleScroll","scrollResponderHandleResponderGrant","onResponderGrant","scrollResponderHandleScrollBeginDrag","onScrollBeginDrag","scrollResponderHandleScrollEndDrag","onScrollEndDrag","scrollResponderHandleMomentumScrollBegin","onMomentumScrollBegin","scrollResponderHandleMomentumScrollEnd","onMomentumScrollEnd","scrollResponderHandleTouchStart","onTouchStart","scrollResponderHandleTouchMove","scrollResponderScrollTo","scrollResponderZoomTo","scrollResponderScrollNativeHandleToKeyboard","nodeHandle","additionalOffset","preventNegativeScrollOffset","additionalScrollOffset","measureLayout","getInnerViewNode","scrollResponderTextInputFocusError","scrollResponderInputMeasureAndScrollToKeyboard","keyboardScreenY","keyboardWillOpenTo","endCoordinates","scrollOffsetY","scrollResponderKeyboardWillShow","onKeyboardWillShow","scrollResponderKeyboardWillHide","onKeyboardWillHide","scrollResponderKeyboardDidShow","onKeyboardDidShow","scrollResponderKeyboardDidHide","onKeyboardDidHide","scrollResponderFlashScrollIndicators","getInnerViewRef","scrollResponderNode","_handleContentOnLayout","_e$nativeEvent$layout","onContentSizeChange","_handleScroll","keyboardDismissMode","dismissKeyboard","_setInnerViewRef","_setScrollNodeRef","mergeRefs","scrollResponderHandleStartShouldSetResponder","scrollResponderHandleResponderReject","refreshControl","pagingEnabled","centerContent","contentSizeChangeProps","hasStickyHeaderIndices","isSticky","stickyHeader","pagingEnabledChild","contentContainer","collapsable","contentContainerHorizontal","contentContainerCenterContent","baseHorizontal","baseVertical","pagingEnabledStyle","pagingEnabledHorizontal","pagingEnabledVertical","onStartShouldSetResponder","onStartShouldSetResponderCapture","onScrollShouldSetResponder","onResponderTerminationRequest","onResponderTerminate","scrollResponderHandleTerminate","onResponderReject","ScrollViewClass","scrollView","commonStyle","ForwardedScrollView","VirtualizedSectionList","_subExtractor","_convertViewable","viewable","_info$index","keyExtractorWithNullableIndex","keyExtractorWithNonNullableIndex","_onViewableItemsChanged","_renderItem","listItemCount","infoIndex","renderSectionHeader","renderSectionFooter","SeparatorComponent","_getSeparatorComponent","ItemWithSeparator","LeadingSeparatorComponent","SectionSeparatorComponent","cellKey","leadingItem","leadingSection","prevCellKey","setSelfHighlightCallback","_setUpdateHighlightFor","setSelfUpdatePropsCallback","_setUpdatePropsFor","updateHighlightFor","_updateHighlightFor","updatePropsFor","_updatePropsFor","trailingItem","trailingSection","updateProps","_updatePropsMap","updateHighlight","_updateHighlightMap","updateHighlightFn","updatePropsFn","scrollToLocation","sectionIndex","viewOffset","stickySectionHeadersEnabled","__getFrameMetricsApprox","toIndexParams","getListRef","_step","passThroughProps","ItemSeparatorComponent","listHeaderOffset","ListHeaderComponent","itemCount","_iterator","itemIdx","sectionData","_this$props2","isLastItemInList","isLastItemInSection","leadingSeparatorHiglighted","setLeadingSeparatorHighlighted","separatorHighlighted","setSeparatorHighlighted","_React$useState3","leadingSeparatorProps","setLeadingSeparatorProps","_React$useState4","separatorProps","setSeparatorProps","unhighlight","leadingSeparator","SectionList","_wrapperListRef","listRef","_stickySectionHeadersEnabled","StatusBar","setBackgroundColor","setBarStyle","setHidden","setNetworkActivityIndicatorVisible","setTranslucent","supportsCSS3TextDecoration","CSS","supports","SYSTEM_FONT_STACK","STYLE_SHORT_FORM_EXPANSIONS","borderBlockColor","borderInlineColor","borderStyle","borderBlockStyle","borderInlineStyle","borderBlockWidth","borderInlineWidth","insetBlock","insetInline","marginBlock","marginInline","paddingBlock","paddingInline","overscrollBehavior","borderEndStartRadius","borderEndEndRadius","borderStartStartRadius","borderStartEndRadius","insetBlockEnd","insetBlockStart","isInline","resolvedStyle","backgroundClip","WebkitBackgroundClip","textDecoration","_value","longFormProperties","longForm","colorInt","processColor","animationIterationCount","boxFlex","boxFlexGroup","boxOrdinalGroup","flexOrder","flexPositive","flexNegative","gridRowEnd","gridRowGap","gridRowStart","gridColumnEnd","gridColumnGap","gridColumnStart","lineClamp","scaleX","scaleY","scaleZ","prefixKey","colorProps","borderTopColor","borderRightColor","borderLeftColor","textDecorationColor","textShadowColor","normalizeValueWithProperty","normalizeColor","createCSSStyleSheet","rootNode","ShadowRoot","sheet","createOrderedCSSStyleSheet","selectors","sheetInsert","orderedGroups","getOrderedGroups","nextGroupIndex","nextGroup","isInserted","cssText","insertRule","insertRuleAt","groupNumber","previousStart","cssRule","selectorText","groupPattern","decodeGroupRule","getSelectorText","OrderedCSSStyleSheet","getTextContent","insert","groupValue","markerRule","encodeGroupRule","selectorPattern","selector","layerRule","fakeSheet","CSSLayerBlockRule","layerIndex","originalLayered","original","roots","sheets","initialRules","createSheet","initialSheet","wms","crossFade","imageSet","logical","sizing","appearance","userSelect","textEmphasisPosition","textEmphasis","textEmphasisStyle","textEmphasisColor","boxDecorationBreak","clipPath","maskImage","maskMode","maskRepeat","maskPosition","maskClip","maskOrigin","maskSize","maskComposite","maskBorderSource","maskBorderMode","maskBorderSlice","maskBorderWidth","maskBorderOutset","maskBorderRepeat","maskBorder","maskType","textDecorationStyle","textDecorationSkip","breakAfter","breakBefore","breakInside","columnFill","columnGap","columnRule","columnRuleColor","columnRuleStyle","columnRuleWidth","columnSpan","backdropFilter","hyphens","flowInto","flowFrom","regionFragment","textOrientation","fontKerning","textSizeAdjust","createPrefixer","customGroup","inset","insetInlineEnd","insetInlineStart","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","borderLeftStyle","borderLeftWidth","borderRightStyle","borderRightWidth","PROPERTIES_FLIP","PROPERTIES_I18N","PROPERTIES_VALUE","createDeclarationBlock","domStyle","prefixStyles","createReactDOMStyle","createIdentifier","murmurhash2_32_gc","processKeyframesValue","keyframesValue","animationNames","keyframes","_createKeyframes","steps","stepName","createKeyframes","keyframesRules","staticStyleMap","defaultPreprocessOptions","shadow","textShadow","insertRules","compiledOrderedRules","absoluteFill","compiledStyles","_atomic","compiledStyle","styleObj","$$css","_classic","compiledRules","animationKeyframes","_processKeyframesValu","classic","compileAndInsertReset","atomicCompile","srcProp","valueString","normalizedValue","stringifyValueWithProperty","cacheKey","cachedResult","_processKeyframesValu2","_block","finalValue","_block2","_block3","_block4","_block5","_block6","_block7","createAtomicRules","orderedRules","localizeableValue","_left","_right","propPolyfill","ltr","rtl","polyfillIndices","ltrPolyfillValues","rtlPolyfillValues","ltrVal","ltrPolyfill","rtlPolyfill","_ltr","_rtl","atomic","preprocess","writingDirection","_options","preprocessOptions","styleq","customStyleq","originalStyle","frozenProps","nextStyle","originalValue","originalProp","originalValues","valuePolyfill","compose","style1","style2","flatArray","getSheet","hairlineWidth","resolveRNStyle","defaultOffset","createBoxShadowValue","offsetX","mapBoxShadow","spreadDistance","createBoxShadowArrayValue","mapTransform","createTransformValue","createTransformOriginValue","PROPERTIES_STANDARD","borderBottomEndRadius","borderBottomStartRadius","borderTopEndRadius","borderTopStartRadius","borderEndColor","borderEndStyle","borderEndWidth","borderStartColor","borderStartStyle","borderStartWidth","marginEnd","marginHorizontal","marginStart","paddingEnd","paddingStart","ignoredProps","boxShadowValue","textShadowOffset","textShadowRadius","textShadowValue","radius","createTextShadowValue","verticalAlign","transformOrigin","forwardPropsList","lang","hrefAttrs","onMoveShouldSetResponder","onMoveShouldSetResponderCapture","onResponderEnd","onResponderMove","onResponderStart","onScrollShouldSetResponderCapture","onSelectionChangeShouldSetResponder","onSelectionChangeShouldSetResponderCapture","selectable","hostRef","contextDirection","handleClick","langDirection","componentDirection","dir","supportedProps","pickProps","textHasAncestor$raw","text$raw","textOneLine","textMultiLine","notSelectable","pressable","platformMethodsRef","setRef","textStyle","boxSizing","font","listStyle","wordWrap","twoArgumentPooler","a1","a2","Klass","instancePool","standardReleaser","destructor","poolSize","DEFAULT_POOLER","addPoolingTo","CopyConstructor","pooler","NewKlass","getPooled","release","BoundingDimensions","getPooledFromElement","Position","extractSingleTouch","hasTouches","hasChangedTouches","States","baseStatesConditions","NOT_RESPONDER","RESPONDER_INACTIVE_PRESS_IN","RESPONDER_INACTIVE_PRESS_OUT","RESPONDER_ACTIVE_PRESS_IN","RESPONDER_ACTIVE_PRESS_OUT","RESPONDER_ACTIVE_LONG_PRESS_IN","RESPONDER_ACTIVE_LONG_PRESS_OUT","ERROR","IsActive","IsPressingIn","IsLongPressingIn","Signals","Transitions","DELAY","RESPONDER_GRANT","RESPONDER_RELEASE","RESPONDER_TERMINATED","ENTER_PRESS_RECT","LEAVE_PRESS_RECT","LONG_PRESS_DETECTED","TouchableMixin","touchableNode","getTouchableNode","_touchableBlurListener","_isTouchableKeyboardActive","touchable","touchState","touchableHandleResponderTerminate","touchableDelayTimeout","longPressDelayTimeout","pressOutDelayTimeout","pressInLocation","responderID","touchableGetInitialState","touchableHandleResponderTerminationRequest","rejectResponderTermination","touchableHandleStartShouldSetResponder","touchableLongPressCancelsPress","touchableHandleResponderGrant","dispatchID","_receiveSignal","delayMS","touchableGetHighlightDelayMS","_handleDelay","longDelayMS","touchableGetLongPressDelayMS","LONG_PRESS_THRESHOLD","_handleLongDelay","touchableHandleResponderRelease","touchableHandleResponderMove","positionOnActivate","dimensionsOnActivate","pressRectOffset","touchableGetPressRectOffset","pressExpandLeft","pressExpandTop","pressExpandRight","pressExpandBottom","touchableGetHitSlop","_getDistanceBetweenPoints","_cancelLongPressDelayTimeout","touchableHandleFocus","touchableHandleBlur","_remeasureMetricsOnActivation","measure","_handleQueryLayout","globalX","globalY","curState","_performSideEffectsForTransition","_isHighlight","_savePressInLocation","locationX","locationY","aY","bX","bY","curIsHighlight","newIsHighlight","isInitialTransition","isActiveTransition","touchableHandleLongPress","_startHighlight","_endHighlight","hasLongPressHandler","onLongPress","pressIsLongButStillCallOnPress","touchableHandlePress","_playTouchSound","playTouchSound","touchableHandleActivePressIn","touchableHandleActivePressOut","touchableGetPressOutDelayMS","touchableHandleKeyEvent","AccessibilityUtil","propsToAriaRole","withoutDefaultFocusAndBlur","TouchableMixinWithoutDefaultFocusAndBlur","Touchable","Mixin","TOUCH_TARGET_DEBUG","renderDebugView","debugHitSlopStyle","normalizedColor","hexColor","styleValue","getRect","offsetLeft","offsetTop","offsetParent","clientLeft","clientTop","scrollY","scrollX","relativeToNativeNode","relativeNode","isConnected","relativeRect","_getRect","elementsToIgnore","BODY","INPUT","SELECT","TEXTAREA","isContentEditable","measureInWindow","_getBoundingClientRec","onFail","onSuccess","updateView","configureNextLayoutAnimation","onAnimationDidEnd","view$raw","alignContent","hyphenateString","processIDRefList","idRefList","pointerEventsStyles","accessibilityComponent","propsToAccessibilityComponent","domProps","ariaActiveDescendant","accessibilityActiveDescendant","ariaAtomic","accessibilityAtomic","ariaAutoComplete","accessibilityAutoComplete","ariaBusy","accessibilityBusy","ariaChecked","accessibilityChecked","ariaColumnCount","accessibilityColumnCount","ariaColumnIndex","accessibilityColumnIndex","ariaColumnSpan","accessibilityColumnSpan","ariaControls","accessibilityControls","ariaCurrent","accessibilityCurrent","ariaDescribedBy","accessibilityDescribedBy","ariaDetails","accessibilityDetails","ariaDisabled","accessibilityDisabled","ariaErrorMessage","accessibilityErrorMessage","ariaExpanded","accessibilityExpanded","ariaFlowTo","accessibilityFlowTo","ariaHasPopup","accessibilityHasPopup","ariaHidden","accessibilityHidden","ariaInvalid","accessibilityInvalid","ariaKeyShortcuts","accessibilityKeyShortcuts","ariaLabelledBy","accessibilityLabelledBy","ariaLevel","accessibilityLevel","ariaLive","accessibilityLiveRegion","ariaModal","accessibilityModal","ariaMultiline","accessibilityMultiline","ariaMultiSelectable","accessibilityMultiSelectable","ariaOrientation","accessibilityOrientation","ariaOwns","accessibilityOwns","ariaPlaceholder","accessibilityPlaceholder","ariaPosInSet","accessibilityPosInSet","ariaPressed","accessibilityPressed","ariaReadOnly","accessibilityReadOnly","ariaRequired","accessibilityRequired","ariaRoleDescription","role","accessibilityRoleDescription","ariaRowCount","accessibilityRowCount","ariaRowIndex","accessibilityRowIndex","ariaRowSpan","accessibilityRowSpan","ariaSelected","accessibilitySelected","ariaSetSize","accessibilitySetSize","ariaSort","accessibilitySort","ariaValueMax","accessibilityValueMax","ariaValueMin","accessibilityValueMin","ariaValueNow","accessibilityValueNow","ariaValueText","accessibilityValueText","focusable","nativeID","_ariaActiveDescendant","_ariaAtomic","_ariaAutoComplete","_ariaBusy","_ariaChecked","_ariaColumnCount","_ariaColumnIndex","_ariaColumnSpan","_ariaControls","_ariaCurrent","_ariaDescribedBy","_ariaDetails","_ariaErrorMessage","_ariaExpanded","_ariaFlowTo","_ariaHasPopup","_ariaHidden","_ariaInvalid","_ariaKeyShortcuts","_ariaLabelledBy","_ariaLevel","_ariaLive","_ariaModal","_ariaMultiline","_ariaMultiSelectable","_ariaOrientation","_ariaOwns","_ariaPlaceholder","_ariaPosInSet","_ariaPressed","_ariaReadOnly","readOnly","_ariaRequired","required","_ariaRoleDescription","_ariaRowCount","_ariaRowIndex","_ariaRowSpan","_ariaSelected","_ariaSetSize","_ariaSort","_ariaValueMax","_ariaValueMin","_ariaValueNow","_ariaValueText","dataProp","dataName","dataValue","_StyleSheet","inlineStyle","int32Color","accessibilityRoleToWebRole","adjustable","imagebutton","keyboardkey","_role","inferredRole","roleComponents","article","banner","blockquote","complementary","contentinfo","deletion","emphasis","figure","insertion","listitem","main","paragraph","region","strong","accessibilityStates","_currentlyFocusedNode","focusTextInput","textFieldNode","unimplementedViewStyles","accessibilityProps","inert","clickProps","onAuxClick","onContextMenu","onGotPointerCapture","onLostPointerCapture","onPointerCancel","onPointerEnter","onPointerMove","onPointerLeave","onPointerOut","onPointerOver","onPointerUp","focusProps","keyboardProps","onKeyDown","onKeyDownCapture","onKeyUp","onKeyUpCapture","mouseProps","onMouseDown","onMouseMove","onMouseOver","onMouseOut","onMouseUp","touchProps","onTouchCancel","onTouchCancelCapture","onTouchEndCapture","onTouchMoveCapture","onTouchStartCapture","pick","DOM_LAYOUT_HANDLER_NAME","resizeObserver","useElementLayout","observer","unobserve","rtlScripts","rtlLangs","defaultLocale","LocaleContext","getLocaleDirection","cachedRTL","Intl","Locale","maximize","_unused","_lang","isLocaleRTL","LocaleProvider","useLocaleContext","usePlatformMethods","hostNode","relativeToNode","RESPONDER_ACTIVE_LONG_PRESS_START","RESPONDER_ACTIVE_PRESS_START","RESPONDER_INACTIVE_PRESS_START","getElementRole","getElementType","isActiveSignal","isButtonRole","isPressStartSignal","isValidKeyPress","isSpacebar","isButtonish","PressResponder","_eventHandlers","_isPointerTouch","_longPressDelayTimeout","_longPressDispatched","_pressDelayTimeout","_pressOutDelayTimeout","_touchState","_responderElement","_cancelPressDelayTimeout","_cancelPressOutDelayTimeout","getEventHandlers","_createEventHandlers","shouldDelay","_selectionTerminated","delayPressStart","normalizeDelay","delayLongPress","_handleLongPress","keyupHandler","isNativeInteractiveElement","isActiveElement","isSpacebarKey","onPressMove","getTouchFromResponderEvent","_touchActivatePosition","hypot","_this$_config","_this$_config2","_this$_config3","_performTransitionSideEffects","isTerminalSignal","isPrevActive","isNextActive","_activate","_deactivate","_this$_config4","_onLongPress","_this$_config5","onPressChange","onPressStart","_this$_config6","onPressEnd","delayPressEnd","delay","_event$nativeEvent","usePressEvents","pressResponderRef","pressResponder","emptyArray","normalizeIdentifier","createResponderEvent","domEvent","responderTouchHistoryStore","propagationWasStopped","domEventChangedTouches","domEventType","normalizeTouches","emulatedTouches","responderEvent","dispatchConfig","touchHistory","isStartish","isMoveish","isEndish","isCancelish","keyName","composedPathFallback","getResponderId","timestampForTouch","getTouchIdentifier","printTouch","printTouchBank","touchBank","printed","startRegistration","moveRegistration","shouldSetResponderEvents","touchstart","mousedown","touchmove","mousemove","emptyResponder","idPath","responderListenersMap","isEmulatingMouseEvents","trackedTouchCount","currentResponder","_touchHistory","numberActiveTouches","indexOfSingleActiveTouch","mostRecentTimeStamp","recordTouchTrack","topLevelType","touchRecord","touchActive","previousPageX","currentPageX","previousPageY","currentPageY","previousTimeStamp","currentTimeStamp","recordTouchMove","startPageX","startPageY","startTimeStamp","resetTouchRecord","createTouchRecord","recordTouchStart","recordTouchEnd","touchTrackToCheck","changeCurrentResponder","responder","getResponderConfig","eventListener","eventTarget","isStartEvent","noModifiers","isPrimaryPointerDown","isMoveEvent","isEndEvent","isScrollEvent","isScroll","isSelectionChangeEvent","isSelectionChange","wantsResponder","eventPaths","nodePath","eventPath","composedPath","getEventPath","getResponderPaths","wasNegotiated","currentResponderIdPath","eventIdPath","lowestCommonAncestor","pathA","pathB","pathALength","pathBLength","itemA","indexA","itemB","indexB","getLowestCommonAncestor","shouldSetCallbacks","shouldSetCallbackCaptureName","shouldSetCallbackBubbleName","callbackName","shouldSetCallback","_result","_id2","_node2","findWantsResponder","_currentResponder2","currentId","currentNode","_getResponderConfig2","_getResponderConfig3","allowTransfer","attemptTransfer","_currentResponder","_getResponderConfig","isTerminateEvent","isTextNode","Node","TEXT_NODE","hasValidSelection","isReleaseEvent","hasTargetTouches","shouldTerminate","documentEventsCapturePhase","documentEventsBubblePhase","removeNode","_currentResponder3","terminateResponder","idCounter","useResponderEvents","getInitialValue","isAttachedRef","__reactResponderSystemActive","requiresResponderSystem","setResponderId","isResponder","UNINITIALIZED","useStable","NativeEventEmitter","nativeModule","_nativeModule","_this$_nativeModule","_this$_nativeModule2","removeListeners","_this$_nativeModule3","_this$_nativeModule4","listenerCount","computeWindowedRenderLimits","maxToRenderPerBatch","windowSize","getFrameMetricsApprox","scrollMetrics","velocity","visibleLength","_scrollMetrics$zoomSc","zoomScale","visibleBegin","visibleEnd","overscanLength","fillPreference","overscanBegin","overscanEnd","_elementsThatOverlapO","offsets","getFrameMetrics","offsetIndex","currentOffset","scaledOffsetStart","scaledOffsetEnd","elementsThatOverlapOffsets","overscanFirst","overscanLast","visible","newCellCount","newRangeCount","maxNewCells","firstWillAddMore","firstShouldIncrement","lastWillAddMore","lastShouldIncrement","_delay","_callback","dispose","_taskHandle","schedule","CellRenderMask","numCells","_numCells","_regions","isSpacer","enumerateRegions","addCells","_this$_findRegion","_findRegion","firstIntersect","firstIntersectIdx","_this$_findRegion2","lastIntersect","lastIntersectIdx","newLeadRegion","newTailRegion","newMainRegion","replacementRegions","numRegionsToDelete","equals","cellIdx","firstIdx","middleIdx","middleRegion","ChildListCollection","_cellKeyToChildren","_childrenToCellKey","_this$_cellKeyToChild","cellLists","_step2","listSet","_iterator2","forEachInCell","_this$_cellKeyToChild2","_step3","_iterator3","anyInCell","_this$_cellKeyToChild3","_step4","_iterator4","Info","any_blank_count","any_blank_ms","any_blank_speed_sum","mostly_blank_count","mostly_blank_ms","pixels_blank","pixels_sampled","pixels_scrolled","total_time_spent","sample_count","_listeners","_minSampleCount","_sampleRate","setSampleRate","sampleRate","setMinSampleCount","minSampleCount","_anyBlankStartTime","_info","_mostlyBlankStartTime","_samplesStartTime","_getFrameMetrics","_resetData","activate","deactivateAndFlush","computeBlankness","cellsAroundViewport","dOffset","scrollSpeed","blankTop","firstFrame","inLayout","blankBottom","lastFrame","bottomEdge","blankness","StateSafePureComponent","_inAsyncStateUpdate","_installSetStateHooks","partialState","that","_isViewable","viewAreaMode","viewablePercentThreshold","viewportHeight","itemLength","_isEntirelyVisible","pixels","visibleHeight","_getPixelsVisible","viewAreaCoveragePercentThreshold","_hasInteracted","_timers","_viewableIndices","_viewableItems","computeViewableItems","scrollOffset","renderRange","itemVisiblePercentThreshold","viewableIndices","firstVisible","createViewToken","waitForInteraction","minimumViewTime","_onUpdateSync","resetViewableIndices","viewableIndicesToCheck","prevItems","nextItems","_step$value","_step2$value","_viewable","isViewable","VirtualizedListContext","VirtualizedListContextProvider","getScrollMetrics","getOutermostParentListRef","registerAsNestedChild","unregisterAsNestedChild","VirtualizedListCellContextProvider","currContext","CellRenderer","_separators","onUpdateSeparators","_this$props3","_onLayout","onCellLayout","updateSeparatorProps","onUnmount","_renderElement","_this$props4","CellRendererComponent","inversionStyle","onCellFocusCapture","itemSeparator","cellStyle","rowReverse","columnReverse","onFocusCapture","_usedIndexForKey","_keylessItemComponentName","horizontalOrDefault","maxToRenderPerBatchOrDefault","onEndReachedThresholdOrDefault","onEndReachedThreshold","getScrollingThreshold","windowSizeOrDefault","veryLast","_footerLength","_scrollMetrics","_scrollRef","getItemLayout","onScrollToIndexFailed","viewPosition","_highestMeasuredFrameIndex","averageItemLength","_averageCellLength","highestMeasuredFrameIndex","_getOffsetApprox","_nestedChildLists","childList","_viewabilityTuples","viewabilityHelper","_updateViewableItems","_getCellKey","_this$context","hasMore","_hasMore","_this$props$updateCel","_getScrollMetrics","_getOutermostParentListRef","_isNestedWithSameOrientation","_registerAsNestedChild","_unregisterAsNestedChild","_onUpdateSeparators","_cellRefs","_getSpacerKey","isVertical","_frames","_hasTriggeredInitialScrollToIndex","_hasWarned","_headerLength","_hiPriInProgress","_indicesToKeys","_lastFocusedCellKey","_offsetFromParentVirtualizedList","_prevParentOffset","contentLength","dt","_sentStartForContentLength","_sentEndForContentLength","_totalCellLength","_totalCellsMeasured","_captureScrollRef","_defaultRenderScrollComponent","_props$refreshing","RefreshControl","_onCellLayout","_selectOffset","_selectLength","_scheduleCellsToRenderUpdate","_triggerRemeasureForChildListsInCell","_computeBlankness","_onCellUnmount","measureLayoutRelativeToContainingList","_maybeCallOnEdgeReached","_onLayoutEmpty","_onLayoutFooter","_getFooterCellKey","_onLayoutHeader","_onContentSizeChange","initialScrollIndex","_convertParentScrollMetrics","_onScroll","_this$_convertParentS","perf","prevDt","_fillRateHelper","_onScrollBeginDrag","_onScrollEndDrag","_onMomentumScrollBegin","_onMomentumScrollEnd","_updateCellsToRender","_adjustCellsAroundViewport","renderMask","_createRenderMask","_getNonViewportRenderRegions","_createViewToken","isInteger","frameMetrics","focusedCellIndex","heightOfCellsBeforeFocused","heightOfCellsAfterFocused","_updateCellsToRenderBatcher","updateCellsBatchingPeriod","initialRenderRegion","_initialRenderRegion","invertedWheelEventHandler","scrollLength","clientLength","isEventTargetScrollable","leftoverDelta","targetDelta","nextScrollLeft","nextScrollTop","__isNative","additionalRegions","_i2","_allRegions","initialRegion","stickyIndicesSet","_ensureClosestStickyHeader","_props$initialScrollI","initialNumToRender","firstCellIndex","stickyOffset","newCellsAroundViewport","_this$_scrollMetrics","distanceFromEnd","_constrainToItemCount","disableVirtualization","renderAhead","EPSILON","childIdx","_findFirstChildWithMore","cellKeyForIndex","setupWebWheelHandler","teardownWebWheelHandler","constrainedCells","_pushCells","stickyIndicesFromProps","debug","shouldListenForLayout","_onCellFocusCapture","nestedContext","_this$props5","ListEmptyComponent","ListFooterComponent","_this$props6","horizontallyInverted","verticallyInverted","_element","ListHeaderComponentStyle","_element2","spacerKey","renderRegions","lastSpacer","predicate","findLastWhere","firstMetrics","lastMetrics","spacerSize","_element3","ListFooterComponentStyle","scrollProps","invertStickyHeaders","renderScrollComponent","_renderDebugOverlay","_this$props7","hiPriInProgress","framesInLayout","windowTop","frameLast","windowLen","visTop","visLen","debugOverlayBase","debugOverlay","debugOverlayFrame","debugOverlayFrameLast","debugOverlayFrameVis","_this$props8","onStartReached","onStartReachedThreshold","onEndReached","_this$_scrollMetrics2","distanceFromStart","isWithinStartThreshold","isWithinEndThreshold","_this$state$cellsArou","_this$_scrollMetrics3","hiPri","onStartReachedThresholdOrDefault","distTop","distBottom","_registry","registrations","registry","allocate","registration","_arr","hue2rgb","hslToRgb","NUMBER","PERCENTAGE","callWithSlashSeparator","commaSeparatedCall","cachedMatchers","parse255","int","parse360","parse1","parsePercentage","matchers","hsla","hwb","hex3","hex4","hex6","hex8","colorFromKeyword","normalizeKeyword","hwbToRgb","jsxProd","maybeKey","ReactNoopUpdateQueue","isMounted","ComponentDummy","PureComponent","forceUpdate","pureComponentPrototype","ReactElement","refProp","isValidElement","userProvidedKeyEscapeRegex","getElementKey","escaperLookup","mapIntoArray","escapedPrefix","nameSoFar","oldElement","invokeCallback","nextNamePrefix","resolveThenable","mapChildren","func","lazyInitializer","_status","moduleObject","Children","forEachFunc","forEachContext","toArray","only","Activity","Profiler","StrictMode","Suspense","__COMPILER_RUNTIME","cloneElement","childArray","childrenLength","createRef","unstable_useCacheRefresh","Context","heap","parentIndex","peek","halfLength","leftIndex","rightIndex","sortIndex","localPerformance","localDate","initialTime","taskQueue","timerQueue","taskIdCounter","currentTask","currentPriorityLevel","isPerformingWork","isHostCallbackScheduled","isHostTimeoutScheduled","needsPaint","localSetTimeout","localClearTimeout","localSetImmediate","setImmediate","advanceTimers","handleTimeout","isMessageLoopRunning","schedulePerformWorkUntilDeadline","requestHostTimeout","taskTimeoutID","frameInterval","shouldYieldToHost","performWorkUntilDeadline","hasMoreWork","previousPriorityLevel","priorityLevel","continuationCallback","MessageChannel","port2","port1","unstable_Profiling","unstable_forceFrameRate","fps","unstable_next","eventHandler","unstable_runWithPriority","unstable_wrapCallback","parentPriorityLevel","createStyleq","disableCache","disableMix","definedProperties","nextCache","possibleStyle","classNameChunk","cacheEntry","definedPropertiesChunk","weakMap","subStyle","_prop","markerProp","compiledStyleIndex","_cachedStyles","_compiledStyle","compileStyle","cachedStyles","Cf","copyComponentProperties","UniwindComponent","nativeEventEmitter","RN$Bridgeless","__nativeAnimatedNodeTagCount","__nativeAnimationIdCount","waitingForQueuedOperations","queueOperations","queueAndExecuteBatchedOperations","flushQueueTimeout","nativeOps","API","saveValueCallback","queueOperation","setWaitingForIdentifier","unsetWaitingForIdentifier","disableQueue","clearImmediate","flushQueue","createAnimatedNode","updateAnimatedNodeConfig","startListeningToAnimatedNodeValue","stopListeningToAnimatedNodeValue","connectAnimatedNodes","parentTag","childTag","disconnectAnimatedNodes","startAnimatingNode","animationId","endCallback","stopAnimation","setAnimatedNodeValue","setAnimatedNodeOffset","flattenAnimatedNodeOffset","extractAnimatedNodeOffset","connectAnimatedNodeToView","viewTag","disconnectAnimatedNodeFromView","restoreDefaultValues","dropAnimatedNode","addAnimatedEventToView","eventMapping","removeAnimatedEventFromView","animatedNodeTag","SUPPORTED_COLOR_STYLES","SUPPORTED_STYLES","translateY","SUPPORTED_TRANSFORMS","rotateX","rotateY","rotateZ","perspective","SUPPORTED_INTERPOLATION_PARAMS","extrapolate","extrapolateRight","extrapolateLeft","isSupportedStyleProp","isSupportedTransformProp","isSupportedInterpolationParam","param","generateNewAnimationId","_warnedMissingNativeAnimated","shouldUseNativeDriver","isSupportedColorStyleProp","addWhitelistedStyleProp","addWhitelistedTransformProp","addWhitelistedInterpolationParam","validateStyles","_key2","validateTransform","configs","validateInterpolation","_key3","generateNewNodeTag","assertNativeAnimatedModule","transformDataType","NativeAnimatedAPI","NativeAnimatedHelper","_uniqueId","__attach","__detach","__nativeTag","__getValue","__getAnimatedValue","__addChild","__removeChild","__getChildren","__makeNative","platformConfig","_platformConfig","hasListeners","_startListeningToNativeValueUpdates","_stopListeningForNativeValueUpdates","__nativeAnimatedValueListener","__shouldUpdateListenersForNewNativeTag","__getNativeTag","__onAnimatedValueUpdateReceived","__callListeners","_this$__nativeTag","nativeTag","__getNativeConfig","toJSON","__getPlatformConfig","__setPlatformConfig","_children","createInterpolation","stringShapeRegex","checkPattern","colorToRgba","outputRanges","interpolations","shouldRound","createInterpolationFromStringOutputRange","findRange","inputMin","inputMax","outputMin","outputMax","AnimatedInterpolation","_parent","_interpolation","parentValue","__transformDataType","__createInterpolation","_startingValue","_offset","_animation","_updateValue","setOffset","flattenOffset","extractOffset","resetAnimation","animate","__isInteraction","previousAnimation","_tracking","tracking","animatedStyles","findAnimatedStyles","animatedStyle","attachNativeEvent","viewRef","argMapping","eventMappings","traverse","nativeEventPath","animatedValueTag","detach","AnimatedEvent","_argMapping","__addListener","_callListeners","_attachedEvent","__removeListener","__getHandler","_len2","recMapping","recEvt","mappingKey","_len3","_key4","transforms","_transforms","transConfigs","flattenStyle","createAnimatedStyle","inputStyle","_inputStyle","_style","_walkStyleAndGetValues","updatedStyle","_walkStyleAndGetAnimatedValues","styleConfig","styleKey","_animatedView","__disconnectAnimatedView","__connectAnimatedView","setNativeView","animatedView","nativeViewTag","__restoreDefaultValues","propsConfig","reduceAnimatedProps","createAnimatedComponent","_useAnimatedProps","scheduleUpdate","onUpdateRef","prevNodeRef","isUnmountingRef","prevNode","useAnimatedPropsLifecycle","effect","cleanupRef","refEffect","_events","_events$_i","_propName","useAnimatedProps","reducedProps","_refs","passthroughAnimatedPropExplicitValues","passthroughStyle","passthroughProps","mergedStyle","_min","_max","_lastValue","_warnedAboutDivideByZero","modulus","_modulus","animationClass","animationConfig","_animationClass","_animationConfig","_useNativeDriver","__getNativeAnimationConfig","valueIn","jointCallback","getLayout","getTranslateTransform","startNativeAnimationNextId","fromValue","onEnd","animatedValue","__nativeId","__debouncedOnEnd","__onEnd","__startNativeAnimation","startNativeAnimationWaitId","_config$deceleration","_config$isInteraction","_config$iterations","_deceleration","deceleration","_velocity","isInteraction","__iterations","__active","_fromValue","_onUpdate","_startTime","_animationFrame","cancelAnimationFrame","stiffnessFromOrigamiValue","oValue","dampingFromOrigamiValue","tension","friction","stiffness","damping","speed","projectNormal","bouncyTension","bouncyFriction","linearInterpolation","b3Friction2","b3Friction3","SpringAnimation","_config$overshootClam","_config$restDisplacem","_config$restSpeedThre","_config$velocity","_config$velocity2","_config$delay","_config$stiffness","_config$damping","_config$mass","_overshootClamping","overshootClamping","_restDisplacementThreshold","restDisplacementThreshold","_restSpeedThreshold","restSpeedThreshold","_initialVelocity","_lastVelocity","_toValue","mass","_stiffness","_damping","_mass","_config$bounciness","_config$speed","springConfig","SpringConfig","_config$tension","_config$friction","_springConfig","_this$_initialVelocit","initialVelocity","_startPosition","_lastPosition","_lastTime","_frameTime","internalState","getInternalState","lastPosition","lastVelocity","lastTime","_timeout","deltaTime","v0","zeta","omega0","omega1","x0","envelope","_envelope","isOvershooting","isVelocity","isDisplacement","_easeInOut","_config$easing","_config$duration","_easing","_duration","frames","numFrames","defaultColor","isRgbaValue","AnimatedColor","isRgbaAnimatedValue","rgbaAnimatedValue","_processColor","processedColor","initColor","nativeColor","_processColor2","shouldUpdateNodeConfig","rgbaValue","_nativeTag","_combineCallbacks","onComplete","maybeVectorAnim","anim","configX","configY","_config$key","parallel","stopTogether","configR","configG","configB","configA","_config$_key","aR","aG","_start2","configuration","singleConfig","_startNativeLoop","_isUsingNativeDriver","sequence","animations","doneCount","hasEnded","endResult","ValueXY","Color","Interpolation","decay","_start3","spring","diffClamp","stagger","_temp","_ref$iterations","_ref$resetBeforeItera","resetBeforeIteration","isFinished","iterationsSoFar","restart","animatedEvent","forkEvent","unforkEvent","Event","inAnimationCallback","mockAnimationStart","guardedCallback","emptyAnimation","mockCompositeAnimation","anyValue","AnimatedImplementation","AnimatedMock","hasSingleColumn","columnWrapperClassName","contentContainerClassName","ListFooterComponentClassName","ListHeaderComponentClassName","tintColorClassName","styleReset","canUsePassiveEvents","supported","supportsPassiveEvents","compatListener","previousModality","previousActiveModality","activeModality","modality","KEYBOARD","MOUSE","TOUCH","CONTEXTMENU","MOUSEDOWN","MOUSEMOVE","MOUSEUP","POINTERDOWN","POINTERMOVE","SCROLL","SELECTIONCHANGE","TOUCHCANCEL","TOUCHMOVE","TOUCHSTART","bubbleOptions","captureOptions","restoreModality","callListeners","onPointerish","PointerEvent","visibilityState","useEvent","targetListeners","removeTargetListener","lockEventType","unlockEventType","dispatchCustomEvent","createEvent","_ref$bubbles","_ref$cancelable","initCustomEvent","getPointerType","delayPressIn","delayPressOut","onHoverIn","onHoverOut","onPressIn","onPressOut","testOnly_hovered","testOnly_pressed","_useForceableState","useForceableState","hovered","setHovered","_useForceableState2","focused","setFocused","_useForceableState3","pressed","setPressed","pressConfig","pressEventHandlers","onContextMenuPress","onKeyDownPress","targetRef","onHoverStart","onHoverChange","onHoverUpdate","onHoverEnd","canUsePE","addMoveListener","addEnterListener","addLeaveListener","addLockListener","addUnlockListener","hoverEnd","leaveListener","moveListener","hoverStart","lockEvent","useHover","_tabIndex","interactionState","blurHandler","focusHandler","contextMenuHandler","keyDownHandler","forced","MemoedPressable","generateDataSet","CSS_UNIT_RE","thumbDefaultBoxShadow","thumbFocusedBoxShadow","defaultDisabledTrackColor","defaultDisabledThumbColor","activeThumbColor","activeTrackColor","_props$disabled","_props$style","thumbColor","trackColor","thumbRef","handleFocusState","_StyleSheet$flatten","styleHeight","styleWidth","trackBorderRadius","trackCurrentColor","true","false","thumbCurrentColor","thumbHeight","thumbWidth","rootStyle","cursorDefault","disabledTrackColor","disabledThumbColor","trackStyle","thumbStyle","thumb","thumbActive","nativeControl","cursorInherit","forcedColorAdjust","transitionDuration","trackColorOn","useUniwindAccent","trackColorOnClassName","trackColorOff","trackColorOffClassName","thumbColorClassName","setSelection","isSelectionStale","forwardedProps","autoComplete","spellCheck","focusTimeout","_inputMode","_props$autoCapitalize","autoCompleteType","_props$autoCorrect","blurOnSubmit","caretHidden","clearTextOnFocus","editable","enterKeyHint","inputMode","_props$multiline","onKeyPress","onSelectionChange","onSubmitEditing","placeholderTextColor","_props$readOnly","returnKeyType","_props$secureTextEntr","secureTextEntry","showSoftInputOnFocus","prevSelection","prevSecureTextEntry","handleContentSizeChange","newHeight","newWidth","imperativeRef","useLocale","shouldBlurOnSubmit","isEventComposing","_e$target","_selection","textinput$raw","virtualkeyboardpolicy","MozAppearance","WebkitAppearance","resize","caretColor","placeholderTextColorClassName","reactRoot","unmountComponentAtNode","rootTag","isScreenReaderEnabled","prefersReducedMotionMedia","handlers","AccessibilityInfo","isReduceMotionEnabled","setAccessibilityFocus","reactTag","announceForAccessibility","announcement","RootTagContext","AppContainer","WrapperComponent","innerView","appContainer","wrapperComponentProvider","runnables","componentProviderInstrumentationHook","AppRegistry","getAppKeys","getApplication","appKey","appParameters","registerComponent","componentProvider","RootComponent","initialProps","getStyleElement","renderApplication","renderFn","registerConfig","registerRunnable","runApplication","setComponentProviderInstrumentationHook","setWrapperComponentProvider","unmountApplicationComponentAtRootTag","isPrefixed","EVENT_TYPES","VISIBILITY_CHANGE_EVENT","VISIBILITY_STATE_PROPERTY","AppStates","changeEmitter","AppState","clipboardAvailable","Clipboard","queryCommandSupported","getString","setString","selectNodeContents","springDamping","Types","easeIn","easeOut","keyboard","Properties","scaleXY","checkConfig","initialURL","_eventCallbacks","_dispatchEvent","filteredCallbacks","canOpenURL","getInitialURL","urlToOpen","_validateURL","TouchHistoryMath","centroidDimension","touchesChangedAfter","isXAxis","ofCurrent","oneTouchData","touchTrack","noCentroid","currentCentroidXOfTouchesChangedAfter","currentCentroidYOfTouchesChangedAfter","previousCentroidXOfTouchesChangedAfter","previousCentroidYOfTouchesChangedAfter","currentCentroidX","currentCentroidY","PanResponder","_initializeGestureState","gestureState","moveX","moveY","y0","dx","dy","vx","vy","_accountsForMovesUpTo","_updateGestureStateOnMove","movedAfter","prevX","prevY","nextDX","nextDY","shouldCancelClick","stateID","panHandlers","onStartShouldSetPanResponder","onMoveShouldSetPanResponder","onStartShouldSetPanResponderCapture","onMoveShouldSetPanResponderCapture","clearInteractionTimeout","onPanResponderGrant","onShouldBlockNativeResponder","onPanResponderReject","onPanResponderRelease","setInteractionTimeout","onPanResponderStart","onPanResponderMove","onPanResponderEnd","onPanResponderTerminate","onPanResponderTerminationRequest","onClickCapture","getInteractionHandle","share","sharedAction","dismissedAction","vibrate","CheckBox","fakeControl","fakeControlChecked","fakeControlDisabled","fakeControlCheckedAndDisabled","Picker","selectedValue","itemStyle","Item","_props$color","_props$indeterminate","indeterminate","_props$progress","_props$trackColor","percentageProgress","animationDuration","animationTimingFunction","YellowBox","UnimplementedView","ignoreWarnings","ignoreLogs","ignoreAllLogs","uninstall","install","useColorScheme","Appearance","setColorScheme","useWindowDimensions","dims","setDims","createSvgCircle","ActivityIndicator","_props$animating","animating","_props$hidesWhenStopp","hidesWhenStopped","_props$size","indicatorSizes","animationPause","animationPlayState","small","large","colorClassName","TouchableOpacity","activeOpacity","setDuration","opacityOverride","setOpacityOverride","setOpacityTo","setOpacityActive","setOpacityInactive","isGrant","actionable","MemoedTouchableOpacity","buttonDisabled","textDisabled","textTransform","ImageBackground","imageStyle","imageRef","imageClassName","KeyboardAvoidingView","relativeKeyboardHeight","keyboardFrame","keyboardY","keyboardVerticalOffset","onKeyboardChange","elementRef","getAnimationStyle","animationType","animatedSlideInStyles","animatedSlideOutStyles","animatedFadeInStyles","animatedFadeOutStyles","animatedIn","ANIMATION_DURATION","animatedOut","fadeIn","fadeOut","slideIn","slideOut","onDismiss","onShow","isRendering","setIsRendering","wasVisible","isAnimated","animationEndCallback","onAnimationEnd","ModalContent","onRequestClose","transparent","closeOnEscape","modal","modalTransparent","modalOpaque","FocusBracket","focusBracket","attemptFocus","focusFirstDescendant","childNodes","focusLastDescendant","trapElementRef","focusRef","trapFocusInProgress","lastFocusedElement","trapFocus","hasFocused","lastFocusedElementOutsideTrap","outlineStyle","uniqueModalIdentifier","activeModalStack","activeModalListeners","notifyActiveModalListeners","activeModalId","modalId","removeActiveModal","_props$visible","setIsActive","onDismissCallback","onShowCallback","addActiveModal","cssFunction","SafeAreaView","createExtraStyles","underlayColor","underlay","hasPressHandler","TouchableHighlight","onHideUnderlay","onShowUnderlay","extraStyles","setExtraStyles","showUnderlay","hideUnderlay","MemoedTouchableHighlight","underlayColorClassName","accessibilityState","accessibilityValue","TouchableWithoutFeedback","elementProps","MemoedTouchableWithoutFeedback","getVariableValue","UNSPECIFIED_THEME","constants","reactNativeVersion","minor","_themes","Light","prevTheme","onThemeChange","notify","Theme","themes","hasAdaptiveThemes","currentTheme","setTheme","prevHasAdaptiveThemes","isAdaptiveTheme","AdaptiveThemes","updateCSSVariables","cssVariables","updateInsets","insets","getCSSVariable","uniwindContext","name2","scopedTheme","__reinit","variables","uniwindRules","getUniwindDynamicCSSRules","varName","varValue","existingRules","Variables","generateStyleSheetCallback","oldThemes","styleElement","addClassNameToRoot","toRNWClassName","tailwind","accentColor","UniwindListener","ColorScheme","Orientation","Insets","FontScale","Rtl","dep","notifyAll","listenerSet","wrappedListeners","wrappedListener","once","CSSListener","activeRules","classNameMediaQueryListeners","registeredRulesMediaQueries","processedStyleSheets","pendingInitialization","MutationObserver","mutations","mutation","scheduleInitialization","subtree","attributeFilter","subscribeToClassName","classNames","disposables","mediaQuery","disposeThemeListener","disposable","cancelPendingInitialization","pruneStaleRules","activeSheets","styleSheets","parentStyleSheet","addMediaQueriesDeep","isStyleRule","isMediaRule","isSupportsRule","collectParentMediaQueries","parentRule","mediaQueries","addMediaQuery","conditionText","CSSRuleList","parsedClassName","cachedMediaQueryList","toggleRule","mediaQueryList","isRuleLive","mqList","formatColor","parsedColor","parseCSSValue","dummyParent","dummy","getWebStyles","componentProps","computedStyles","extractedStyles","safeSelector","getPropertyValue","getActiveStylesForClass","getWebVariable","UniwindContext","emptyState","useResolveClassNames","recreate","StyleDependency","StyleDependency2","ColorScheme2","styleMod","languageDataProp","NodeProp","defineLanguageFacet","baseData","Facet","combine","sublanguageProp","Language","extraExtensions","EditorState","syntaxTree","extension","language","of","languageData","side","topNodeAt","facet","sublang","isActiveAt","findRegions","allowsNesting","explore","mount","mounted","overlay","Tree","topLang","enter","IterMode","ExcludeBuffers","isTop","StateEffect","spec","hasWrappers","ensureSyntaxTree","upto","oldVieport","viewport","updateViewport","isDone","work","DocInput","cursorPos","syncTo","lineChunks","stringStart","sliceString","currentContext","ParseContext","treeLen","skipped","scheduleOn","tempSkipped","startParse","takeTree","withContext","stoppedAt","stopAt","advance","withoutTempSkipped","TreeFragment","addTree","parsedPos","cutFragments","iterChangedRanges","fromA","toA","fromB","toB","applyChanges","mapPos","startLen","skipUntilInView","getSkippingParser","createParse","NodeType","frags","LanguageState","tr","docChanged","newCx","startState","vpTo","parseState","StateField","effects","requestIdle","idle","isInputPending","scheduling","parseWorker","ViewPlugin","fromClass","working","workScheduled","chunkEnd","chunkBudget","scheduleWork","selectionSet","hasFocus","checkAsyncSchedule","viewportFirst","logException","isWorking","eventHandlers","languages","enables","EditorView","contentAttributes","compute","LanguageDescription","extensions","loadFunc","support","matchFilename","descs","ext","matchLanguageName","fuzzy","indentService","indentUnit","getIndentUnit","indentString","getIndentation","IndentContext","ast","resolveStack","enterUnfinishedNodesBefore","indentFor","syntaxIndentation","lineAt","simulateBreak","simulateDoubleBreak","textAfterPos","countColumn","overrideIndentation","overriden","simulatedBreak","strategy","indentStrategy","TreeIndentContext","closedBy","delimitedStrategy","ignoreClosed","topIndent","textAfter","baseIndent","baseIndentFor","atBreak","isParent","align","closing","closedAt","space","aligned","openToken","childAfter","sim","openLine","lineEnd","bracketedAligned","foldService","isUnfinished","foldable","syntaxFolding","mapRange","foldEffect","unfoldEffect","selectedLines","lineBlockAt","foldState","Decoration","folded","foldExists","preparePlaceholder","foldConfig","widget","PreparedFoldWidget","foldWidget","filterFrom","filterTo","onSelection","between","provide","decorations","fromJSON","findFold","maybeEnable","state$1","appendConfig","codeFolding","foldCode","announceFold","unfoldCode","view$1","fold","lineFrom","lineTo","announce","phrase","foldAll","unfoldAll","foldableContainer","lineBlock","foldableRegion","foldKeymap","mac","defaultConfig","placeholderDOM","placeholderText","combineConfig","baseTheme$1","widgetToDOM","prepared","conf","posAtDOM","WidgetType","toDOM","foldGutterDefaults","openText","closedText","markerDOM","domEventHandlers","foldingChanged","FoldMarker","GutterMarker","baseTheme","HighlightStyle","specs","modSpec","def","StyleModule","scopeOpt","tagHighlighter","class","themeType","highlighterFacet","fallbackHighlighter","getHighlighters","treeHighlighter","Prec","high","markCache","buildDeco","decoratedTo","highlighters","styleChange","decoratedToMapped","viewportChanged","RangeSetBuilder","visibleRanges","mark","defaultHighlightStyle","heading","strikethrough","bool","contentSeparator","labelName","inserted","special","typeName","macroName","invalid","DefaultBrackets","bracketMatchingConfig","afterCursor","brackets","maxScanDistance","renderMatch","defaultRenderMatch","matchingMark","nonmatchingMark","matched","bracketMatchingUnique","deco","matchBrackets","bracketMatchingHandle","matchingNodes","byProp","openedBy","findHandle","hasHandle","resolveInner","matchMarkedBrackets","tokenType","startCh","sliceDoc","bracket","startToken","iterRange","basePos","matchPlainBrackets","_pos","matching","firstToken","childBefore","endHandle","prevSibling","countCol","StringStream","overrideIndent","lastColumnPos","lastColumnValue","eol","sol","eat","eatWhile","eatSpace","skipToEnd","skipTo","backUp","indentation","consume","caseInsensitive","cased","defaultCopyState","IndentedFrom","StreamLanguage","blankLine","copyState","tokenTable","noTokens","Parse","typeArray","getIndent","docID","streamParser","stateAfter","perNode","TokenTable","defaultTokenTable","statePos","findState","readToken","off","startPos","cutTree","inside","chunks","chunkPos","chunkReused","rangeIndex","endPos","editorState","openStart","openEnd","findStartInFragments","chunkStart","moveRangeIndex","parseEnd","parseLine","finishChunk","lineAfter","skipGapsTo","offPos","emitToken","len0","nodeSet","topID","maxBufferLength","reused","balance","NodeSet","warned","byTag","defaultTable","legacyName","createTokenType","warnForPart","tagStr","known","buildForLine","textHasRTL","alwaysIsolate","isolateMarks","always","textDirection","Direction","LTR","perLineTextDirection","hasRTL","iterChanges","fA","tA","fB","tB","ins","changeAddsRTL","access","outerDecorations","lowest","bidiIsolatedRanges","lineBreak","clipRTLLines","iterate","iso","isolate","marks","inclusive","bidiIsolate","RTL","LanguageSupport","bidiIsolates","bracketMatching","continuedIndent","except","matchExcept","delimitedIndent","flatIndent","foldGutter","fullConfig","canFold","canUnfold","markers","buildMarkers","viewportLineBlocks","gutter","RangeSet","initialSpacer","foldedRanges","forceParsing","highlightingFor","highlighter","indentOnInput","transactionFilter","isUserEvent","languageDataAt","newDoc","newSelection","norm","sequential","indentRange","updated","syntaxHighlighting","styleModule","computeN","darkTheme","syntaxParserRunning","syntaxTreeAvailable","toggleFold","foldRange","findClusterBreak$1","lineInner","clip","decompose","TextNode","scanIdentical","RawTextCursor","skip","PartialTextCursor","iterLines","LineCursor","TextLeaf","textLength","isLine","Line","sliceText","joined","appendText","lineSep","childOpen","totalLines","copy","iA","iB","eA","eB","chA","chB","maxChunk","minChunk","chunked","currentLines","currentLen","currentChunk","nextInner","offsetValue","afterBreak","findClusterBreak","forward","includeExtending","DefaultSplit","MapMode","ChangeDesc","newLength","iterGaps","posA","posB","individual","invertedDesc","composeDesc","composeSets","mapDesc","mapSet","assoc","Simple","endA","TrackDel","TrackBefore","TrackAfter","touchesRange","ChangeSet","_toB","invert","resultSections","resultInserted","filteredSections","SectionIter","addSection","addInsert","insText","insLen","createSet","forceJoin","endB","setA","setB","mkSet","piece","len2","sectionLen","insB","textBit","forward2","SelectionRange","bidiLevel","goalColumn","EditorSelection","includeAssoc","mainIndex","asSingle","replaceRange","checkSelection","docLength","nextID","compareInput","isStatic","sameArray","static","FacetProvider","dynamicSlot","addresses","multi","depDoc","depSel","depAddrs","ensureAll","newVal","compareArray","reconfigure","oldAddr","address","oldVal","getAddr","addrs","addr","ensureAddr","dynamicFacetSlot","providerAddrs","providerTypes","dynamic","depChanged","oldProviders","facets","initField","createF","updateF","compareF","provides","slot","prec","PrecExtension","highest","low","Compartment","CompartmentInstance","compartment","compartments","Configuration","dynamicSlots","staticValues","statusTemplate","staticFacet","newCompartments","oldFacets","computeSlot","allowMultipleSelections","lineSeparator","changeFilter","transactionExtender","Annotation","AnnotationType","StateEffectType","mapEffects","Transaction","annotations","scrollIntoView","_doc","applyTransaction","ann","reconfigured","userEvent","joinRanges","mergeTransaction","mapForA","mapForB","resolveTransactionInner","docSize","sel","asArray","resolveTransaction","extenders","extendTransaction","filterTransaction","addToHistory","remote","CharCategory","nonASCIISingleCaseWordChar","wordChar","startValues","replaceSelection","toText","changeByRange","result1","newChanges","newMapped","mapBy","fieldInit","phrases","charCategorizer","wordChars","Space","hasWordChar","Word","Other","wordAt","cat","kA","kB","RangeValue","Range","startSide","endSide","mapMode","cmpRange","Chunk","maxPoint","startAt","newPos","newFrom","newTo","curFrom","curTo","nextLayer","updateSpec","LayerCursor","spill","addInner","chunkIndex","addChunk","nextChunk","finishInner","HeapCursor","oldSets","textDiff","minPointSize","sharedChunks","findSharedChunks","sideA","SpanCursor","sideB","sameValues","openRanges","activeForPoint","openCount","pointFrom","pointRank","lazySort","layer","newArrays","setMaxPoint","lastFrom","lastTo","inA","minPoint","rank","gotoInner","setRangeIndex","heapBubble","childIndex","activeTo","activeRank","minActive","removeActive","findMinIndex","addActive","trackOpen","wasPoint","nextVal","startA","startB","dPos","dEnd","clipEnd","comparePoint","compareRange","boundChange","foundPos","code0","code1","surrogateLow","codePointSize","findColumn","strict","w3cKeyname","dom","hasSelection","clientRectsFor","textRange","getClientRects","isEquivalentPosition","targetOff","scanFor","domIndex","isBlockElement","maxOffset","flattenRect","windowRect","innerWidth","elt","DOMSelectionState","domSel","setRange","scratchRange","preventScrollSupported","focusPreventScroll","setActive","preventScroll","dispatchKey","mods","down","KeyboardEvent","synthetic","clearAttributes","isScrolledToBottom","textNodeBefore","startNode","startOffset","textNodeAfter","DOMPos","precise","noChildren","ContentView","overrideDOMText","posAtStart","posBefore","posAtEnd","posAfter","sync","contentView","canReuseDOM","reuseDOM","written","rm$1","_dom","localPosFromDOM","domBoundsAround","fromI","fromStart","toI","toEnd","prevEnd","startDOM","endDOM","markDirty","andParent","markParentsDirty","setParent","setDOM","cmView","rootView","replaceChildren","ignoreMutation","_rec","ignoreEvent","childCursor","ChildCursor","childPos","findPos","isEditable","isWidget","merge","hasStart","become","getSide","fromOff","toOff","breakAtStart","breakAtEnd","mergeChildrenInto","dLen","nav","vendor","ie_edge","ie_upto10","ie_11up","gecko","chrome","safari","maxTouchPoints","browser","windows","linux","ie_version","gecko_version","chrome_version","webkit_version","TextView","createDOM","textDOM","domAtPos","_from","_to","coordsAt","rects","textCoords","MarkView","setAttrs","_hasStart","detachFrom","inlineDOMAtPos","coordsInChildren","WidgetView","prevWidget","updateDOM","fromBack","WidgetBufferView","joinInlineInto","beforePos","afterPos","scan","fallbackRect","combineAttrs","noAttrs","attrsEq","ignore","updateAttrs","getAttrs","estimatedHeight","lineBreaks","BlockType","heightRelevant","MarkDecoration","inlineOrder","PointDecoration","isBlockGap","getInclusive","LineDecoration","hasHeight","isReplace","WidgetRange","WidgetBefore","WidgetAfter","inclusiveStart","inclusiveEnd","LineView","prevAttrs","transferDOM","setDeco","addLineDeco","hack","cmIgnore","measureTextSize","textHeight","totalWidth","charWidth","heightOracle","viewState","dist","covers","docView","BlockWidgetView","_takeDeco","BlockGapWidget","ContentBuilder","disallowBlockEffectsFor","curLine","pendingBuffer","bufferMarks","atCursorPos","textOff","posCovered","flushBuffer","wrapMarks","addBlockWidget","buildText","take","NullWidget","cursorBefore","cursorAfter","dynamicDecorationMap","dec","LowTypes","ArabicTypes","Brackets","BracketStack","charType","BidiRE","BidiSpan","maybe","isolatesEq","emitSpans","baseLevel","isolates","ourType","iCh","iI","sameDir","isNum","recurse","localLevel","iScan","jI","computeSectionOrder","outerType","rFrom","rTo","prevType","prevStrong","computeCharTypes","oppositeType","sI","br","sJ","embed","processBracketPairs","beforeL","fromJ","processNeutrals","computeOrder","trivialOrder","movedOver","moveVisually","spanI","spanEnd","nextI","nextIndex","nextSpan","autoDirection","clickAddsSelectionRange","dragMovesSelection$1","mouseSelectionStyle","exceptionSink","updateListener","inputHandler","focusChangeEffect","clipboardInputFilter","clipboardOutputFilter","nativeSelectionHidden","scrollHandler","ScrollTarget","yMargin","xMargin","isSnapshot","setEditContextFormatting","exception","nextPluginID","viewPlugin","domEventObservers","buildExtensions","eventObservers","pluginInst","PluginInstance","mustUpdate","deactivate","editorAttributes","atomicRanges","getIsolatedRanges","fromDoc","toDoc","scrollMargins","getScrollMargins","ChangedRange","addToSet","extendWithRanges","dI","rI","ViewUpdate","transactions","changedRanges","heightChanged","geometryChanged","focusChanged","DocView","domChanged","hasComposition","markedForComposition","editContextFormatting","lastCompositionAfterCursor","minWidthFrom","minWidthTo","impreciseAnchor","impreciseHead","forceSelection","lastUpdate","contentDOM","updateDeco","updateInner","updateEditContextFormatting","readCompositionAt","inputState","composing","editContext","newSel","composition","touchesComposition","headPos","findCompositionNode","textNode","inv","parentView","findCompositionRange","decoDiff","DecorationComparator$1","findChangedDeco","oldLength","mustMeasureContent","updateChildren","contentHeight","cView","gaps","updateGaps","compLine","compositionView","fixCompositionDOM","fix","updateSelection","mustRead","fromPointer","readSelectionRange","activeElt","selectionNotFocus","moveToLine","suppressWidgetCursorChange","assignedSlot","inUneditable","rawSel","nextTo","collapse","caretBidiLevel","posFromDOM","enforceCursorAssoc","newRange","nearest","domView","bestPos","coordsForChar","childOff","measureVisibleLineHeights","contentWidth","isWider","scrollDOM","widest","childRect","textDirectionAt","computeBlockGapDeco","vs","viewports","allDeco","dynamicOuter","outerDeco","lineGapDeco","margins","targetRect","bounding","rectHeight","boundingHeight","movedX","movedY","scrollRectIntoView","textBefore","descAfter","descBefore","getdx","getdy","yOverlap","upTop","upBot","domPosAtCoords","closestRect","closestX","closestY","above","below","aboveRect","belowRect","closestOverlap","domPosInText","clipX","closestOffset","closestDY","generalSide","posAtCoords","docTop","docHeight","yOffset","halfLine","bounced","elementAtHeight","posAtCoordsImprecise","elementFromPoint","caretPositionFromPoint","offsetNode","caretRangeFromPoint","startContainer","isSuspiciousSafariCaretResult","isSuspiciousChromeCaretResult","contentRect","into","defaultCharacterWidth","lineWrapping","defaultLineHeight","blockAt","moveByChar","by","bidiSpans","visualLineSide","skipAtomicRanges","atoms","moved","skipAtoms","LineBreakPlaceholder","DOMReader","readRange","findPointBefore","readNode","nextView","readTextNode","nextBreak","breakSize","fromView","findPointInside","isAtEnd","DOMPoint","DOMChange","typeOver","bounds","iHead","iAnchor","selPoints","selectionPoints","selectionFromPoints","offFrom","offTo","applyDOMChange","domChange","lastKeyTime","lastKeyCode","preferredPos","preferredSide","findDiff","applyDOMChangeInner","lastSelectionTime","lastSelectionOrigin","flushIOSKey","defaultTr","defaultInsert","mainSel","compositionRange","replaced","rangeChanges","selOff","compositionPendingChange","compositionEndedAt","compositionFirstChange","applyDefaultInsert","InputState","setSelectionOrigin","lastTouchTime","lastFocusTime","lastScrollTop","lastScrollLeft","pendingIOSKey","tabFocusMode","lastContextMenu","scrollHandlers","compositionPendingKey","mouseSelection","draggedContent","handleEvent","notifiedFocused","appliedFirefoxHack","firefoxCopyCutHack","eventBelongsToEditor","ignoreDuringComposition","keydown","runHandlers","observers","ensureHandlers","computeHandlers","modifierCodes","delayAndroidKey","PendingKeys","EmacsyPendingKeys","forceFlush","startMouseSelection","bindHandler","inputType","dragScrollSpeed","MouseSelection","startEvent","mustSelect","scrolling","lastEvent","scrollParents","scrollableParents","move","addsSelectionRange","dragging","getRangeAt","isInPrimarySelection","getClickType","sx","sy","setScrollSpeed","brokenClipboardAPI","textFilter","doPaste","byLine","lastLinewiseCopy","lastLine","rangeForClick","categorize","linePos","groupAt","visual","makeStyle","queryPos","startSel","startRange","removeRangeAround","basicMouseSelection","mustFocus","mouseSel","findPositionSide","BadMouseDetail","lastMouseDown","lastMouseDownCount","lastMouseDownTime","dropText","dropPos","del","dragMovesSelection","dragstart","setData","effectAllowed","dragend","drop","finishFile","paste","capturePaste","cut","linewise","copiedRange","clearData","captureCopy","isFocusChange","focusChangeTransaction","getEffect","updateForFocusChange","clearSelectionRange","compositionstart","compositionupdate","compositionend","pendingRecords","flushSoon","contextmenu","beforeinput","getTargetRanges","endContainer","endOffset","startViewHeight","wrappingWhiteSpace","heightChangeFlag","clearHeightChangeFlag","HeightOracle","heightSamples","heightForGap","heightForLine","setDoc","mustRefreshForWrapping","mustRefreshForHeights","lineHeights","refresh","knownHeights","MeasuredHeights","heights","more","BlockInfo","_content","widgetLineBreaks","QueryType","Epsilon","HeightMap","outdated","setHeight","decomposeLeft","decomposeRight","oldDoc","oracle","ByPosNoHeight","NodeBuilder","updateHeight","HeightMapText","break","brk","HeightMapBranch","old","HeightMapBlock","_height","_oracle","_type","forEachLine","_force","measured","widgetHeight","HeightMapGap","heightMetrics","perLine","firstLine","perChar","totalPerLine","guess","lineTop","ByHeight","linesAbove","singleHeight","rightTop","rightOffset","subQuery","ByPos","rightStart","balanced","mergeGaps","rebalance","around","covering","writtenTo","isCovered","addBlock","enterLine","blankContent","ensureLine","DecorationComparator","visiblePixelRange","parentRect","fullPixelRange","LineGap","displaySize","same","gA","gB","draw","wrapping","LineGapWidget","vertical","ViewState","pixelViewport","inView","contentDOMWidth","contentDOMHeight","editorHeight","editorWidth","scrolledToBottom","scrollAnchorPos","scrollAnchorHeight","scaler","IdScaler","scrollTarget","printing","defaultTextDirection","mustEnforceCursorAssoc","guessWrapping","stateDeco","heightMap","getViewport","updateForViewport","updateViewportLines","lineGaps","ensureLineGaps","computeVisibleRanges","Viewport","updateScaler","BigScaler","viewportLines","scaleBlock","prevDeco","contentChanges","heightChanges","heightRelevantDecoChanges","prevHeight","scrollAnchor","scrollAnchorAt","mapViewport","viewportIsAppropriate","viewportChange","updateLineGaps","mapLineGaps","domRect","measureContent","dTop","dBottom","fromDOM","topPos","viewHeight","mayMeasure","halfMargin","doubleMargin","addGap","structure","avoid","moveToLineBoundary","gapSize","checkLine","lineStructure","viewFrom","viewTo","bot","marginHeight","targetFrac","findFraction","spaceFrac","findPosition","marginWidth","horizOffset","pxLeft","pxRight","fraction","lineBlockAtHeight","counted","vpHeight","domBase","domTop","domBottom","bTop","bBottom","baseThemeID","baseLightID","baseDarkID","lightDarkIDs","buildTheme","scopes","outline","overflowAnchor","WebkitUserModify","whiteSpace_fallback","wordBreak","overflowWrap","borderLeft","unicodeBidi","borderTop","observeOptions","characterData","characterDataOldValue","useCharData","DOMObserver","selectionChanged","delayedFlush","resizeTimeout","delayedAndroidKey","flushingAndroidKey","lastChange","scrollTargets","intersection","resizeScroll","intersecting","gapIntersection","printQuery","parentCheck","mut","removedNodes","EditContext","EDIT_CONTEXT","EditContextManager","onCharData","onResize","onPrint","addWindowListeners","IntersectionObserver","listenForScroll","intersectionRatio","onScrollChanged","requestMeasure","measureReq","wasChanged","getComposedRanges","buildSelectionRangeFromRange","safariSelectionRangeHack","atElementStart","processRecords","clearDelayedAndroidKey","takeRecords","readMutation","readChange","readSelection","handled","rec","findChild","setWindow","removeWindowListeners","curView","curAnchor","pendingContextChange","resetRange","toContextPos","textupdate","toEditorPos","updateRangeStart","updateRangeEnd","contextBase","editorBase","drifted","revertPending","characterboundsupdate","DOMRect","updateCharacterBounds","textformatupdate","getTextFormats","lineStyle","underlineStyle","thickness","underlineThickness","updateControlBounds","updateSelectionBounds","applyEdits","_fromB","updateText","reverted","rangeIsValid","contextPos","clipLen","editorPos","compositionStarted","_root","pluginMap","editorAttrs","contentAttrs","bidiCache","destroyed","measureScheduled","measureRequests","announceDOM","dispatchTransactions","trs","getRoot","mountStyles","fonts","ready","redrawn","attrsChanged","focusFlag","dispatchFocus","pendingKey","CachedOrder","updatePlugins","styleModules","showAnnouncements","docViewUpdate","hadFocus","prevSpecs","newPlugins","sDOM","measuring","BadMeasure","themeClasses","attrsFromFacet","spellcheck","autocorrect","autocapitalize","writingsuggestions","translate","contenteditable","changedContent","changedEditor","cspNonce","readMeasured","documentTop","documentPadding","moveByGroup","nextCat","byGroup","includeWrap","coordsAtPos","editorRect","moveVertically","goal","startCoords","resolvedGoal","curY","charRect","MaxBidiLine","fresh","setRoot","scrollSnapshot","setTabFocusMode","findFromDOM","lastDir","sources","currentPlatform","modifiers","handleKeyEvents","getKeymap","keymap","Keymaps","bound","isPrefix","checkPrefix","command","scopeObj","ctrl","normalizeKeyName","ourObj","storedPrefix","full","_any","currentKeyEvent","buildKeymap","isChar","prevented","baseName","shiftName","ran","runFor","RectangleMarker","adjust","forRange","getBase","lineElt","leftSide","textIndent","rightSide","startBlock","endBlock","visualStart","visualEnd","wrappedLine","pieces","drawForLine","drawForWidget","addSpan","fromOpen","toOpen","fromCoords","toCoords","docLine","spanFrom","spanTo","rectanglesForRange","LayerView","drawn","setOrder","layerOrder","updateOnDocViewUpdate","oldI","CanHidePrimary","selectionConfig","cursorBlinkRate","drawRangeCursor","configChanged","cursorLayer","cursors","prim","confChange","setBlinkRate","selectionLayer","themeSpec","hideNativeSelection","setDropCursorPos","dropCursorPos","drawDropCursor","readPos","drawCursor","setDropPos","dragover","dragleave","iterMatches","MatchDecorator","decoration","decorate","global","addMatch","_view","createDeco","matchRanges","changeFrom","changeTo","_f","updateRange","updateFrom","updateTo","fromLine","toLine","UnicodeRegexpSupport","unicode","Specials","Names","_supportsTabSize","specialCharConfig","specialChars","addSpecialChars","replaceTabs","MozTabSize","supportsTabSize","_plugin","SpecialCharWidget","ph","TabWidget","lineDeco","activeLineHighlighter","getDeco","lastLineStart","Placeholder","cloneNode","MaxOff","getPos","absoluteColumn","showCrosshair","Outside","TooltipViewManager","createTooltipView","removeTooltipView","tooltips","tooltipViews","newAbove","tip","tooltipView","windowSpace","tooltipConfig","tooltipSpace","knownHeight","tooltipPlugin","madeAbsolute","lastTransaction","measureTimeout","createContainer","readMeasure","writeMeasure","measureSoon","manager","createTooltip","intersectionObserver","observeIntersection","maybeMeasure","tooltip","shouldMeasure","newConfig","arrow","makeAbsolute","tv","getCoords","others","tView","arrowHeight","noOffset","strictSide","spaceVert","overlap","setLeftStyle","arrowLeft","toggle","positioned","showHoverTooltip","inputs","HoverTooltipHost","createHostedView","hostedView","passProp","given","showHoverTooltipHost","HoverPlugin","setHover","hoverTime","hoverTimeout","restartTimeout","lastMove","checkHover","mouseleave","startHover","posCoords","bidi","arrowRect","isInTooltip","docBottom","isOverRange","watchTooltipLeave","watch","closeHoverTooltipEffect","closeHoverTooltips","panelConfig","topContainer","bottomContainer","panelPlugin","showPanel","panels","PanelGroup","syncClasses","panel","scrollMargin","syncDOM","curDOM","elementClass","gutterLineClass","gutterWidgetClass","renderEmptyElements","elementStyle","lineMarker","widgetMarker","lineMarkerChange","updateSpacer","activeGutters","unfixGutters","gutters","gutterView","prevViewport","SingleGutterView","syncGutters","updateGutters","vpA","vpB","vpOverlap","lineClasses","classSet","UpdateContext","advanceCursor","collect","addElement","newElt","GutterElement","extraMarkers","localMarkers","forLine","spacer","prevMarkers","sameMarkers","setMarkers","domPos","iNew","iOld","lineNumberMarkers","lineNumberWidgetMarker","lineNumberConfig","formatNumber","NumberMarker","lineNumberGutter","maxLineNumber","activeLineGutterMarker","activeLineGutterHighlighter","matcher","decorator","tabDeco","spaceDeco","whitespaceHighlighter","trailingHighlighter","__test","getHeightChangeFlag","crosshairCursor","isDown","keyup","drawSelection","dropCursor","getDrawSelectionConfig","getPanel","getTooltip","hasHoverTooltips","highlightActiveLine","highlightActiveLineGutter","highlightSpecialChars","decorationCache","makeDecorator","highlightTrailingWhitespace","highlightWhitespace","hoverTooltip","hoverState","hideOnChange","hideOn","lineNumbers","rectangularSelection","eventFilter","newStart","_extend","startOff","endOff","startCol","endCol","rectangleFor","rectangleSelectionStyle","repositionTooltips","runScopeHandlers","scrollPastEnd","DefaultBufferLength","nextPropID","contextHash","lookAhead","MountedTree","noProps","isAnonymous","newTypes","CachedNode","CachedInnerNode","TreeCursor","cursorAt","moveTo","_tree","TreeNode","resolveNode","layers","iterStack","stackIterator","leave","anon","IncludeAnonymous","entered","propValues","balanceRange","makeTree","minRepeatType","FlatBufferCursor","takeNode","parentStart","minPos","inRepeat","lookAheadAtStart","contextAtStart","fork","minStart","nodeSize","localSkipped","nodeStart","findBufferSize","copyToBuffer","TreeBuffer","localChildren","localPositions","localInRepeat","lastEnd","makeRepeatLeaf","takeFlatNode","lookAheadProp","lastI","makeBalanced","nodeCount","bufferStart","buildTree","childString","checkSide","startI","endI","overlays","IgnoreOverlays","BaseNode","matchContext","matchNodeContext","nextChild","BufferNode","BufferContext","hasChild","IgnoreMounts","rPos","nextSignificantParent","toTree","externalSibling","heads","picked","newHeads","StackIterator","bufferNode","yieldNode","yieldBuf","yield","enterChild","atLastNode","mustLeave","nodeSizeCache","balanceType","mkTop","mkTree","maxChild","groupFrom","groupStart","groupSize","nextSize","partial","minGap","fI","nextF","cI","nextC","nextPos","fFrom","fTo","StringInput","InnerParse","checkRanges","ActiveOverlay","stoppedInner","MixedParse","nest","innerDone","baseTree","baseParse","startInner","fragmentCursor","FragmentCursor","covered","hasNode","frag","checkCover","materialize","oldMounts","findMounts","punchRanges","enterFragments","sliceBuf","buf","newStack","innerOffset","stackPos","targetI","StructureCursor","fragI","curFrag","nextFrag","gapFrom","gapTo","findCoverChanges","inB","nextA","nextB","NodeWeakMap","setBuffer","getBuffer","cursorSet","cursorGet","nextTagID","Tag","modified","defineModifier","Modifier","nextModifierID","instances","powerSet","ruleNodeProp","Rule","opaque","inherit","tagClass","HighlightBuilder","startSpan","highlightRange","inheritedClass","getStyleTags","tagCls","highlightTags","innerHighlighters","rangeFrom","rangeTo","punctuation","docString","character","integer","float","modifier","operatorKeyword","controlKeyword","definitionKeyword","moduleKeyword","derefOperator","arithmeticOperator","logicOperator","bitwiseOperator","compareOperator","updateOperator","definitionOperator","typeOperator","controlOperator","angleBracket","squareBracket","paren","brace","heading1","heading2","heading3","heading4","heading5","heading6","quote","monospace","documentMeta","processingInstruction","constant","function","standard","putStyle","Recover","Stack","reducePos","bufferBase","curContext","StackContext","pushState","dPrec","dynamicPrecedence","getGoto","minRepeatTerm","storeNode","reduceContext","lastBigReductionStart","bigReductionCount","lastBigReductionSize","stateFlag","baseStateID","isReduce","nextEnd","shiftContext","maxNode","useNode","updateContext","recoverByDelete","isNode","canShift","SimulatedStack","stateSlot","hasAction","recoverByInsert","nextStates","forceReduce","validAction","findForcedReduction","allActions","rDepth","forceAll","deadEnd","sameState","dialectEnabled","dialectID","dialect","emitContext","emitLookAhead","setLookAhead","StackBufferCursor","maybeNext","decodeArray","Type","CachedToken","extended","nullToken","InputStream","chunkOff","chunk2","chunk2Pos","readNext","resolveOffset","clipPos","acceptToken","getChunk","TokenGroup","tokenPrecTable","contextual","LocalTokenGroup","precTable","elseToken","precOffset","groupMask","accEnd","allows","overrides","findOffset","tableData","tableOffset","iPrev","verbose","LOG","stackIDs","Safety","Rec","cutAt","safeFrom","safeTo","trees","nextFragment","fr","nextStart","nodeAt","TokenCache","mainToken","actions","getActions","actionIndex","tokenizer","updateCachedToken","addActions","eofTerm","getMainToken","specializers","putAction","recovering","nextStackID","minStackPos","topTerm","stacks","bufferLength","stoppedTokens","newStacks","advanceStack","findFinished","stackToTree","getName","runRecovery","maxRemaining","stackID","strictCx","cxHash","defaultReduce","localStack","advanceFully","pushStackDedup","restarted","tokenEnd","forceBase","Dialect","wrappers","topTerms","nodeProps","nodeID","propSpec","propSources","tokenArray","specializerSpecs","getSpecializer","dialects","dynamicPrecedences","termNames","parseDialect","loose","groupTag","terminal","deflt","external","contextTracker","ContextTracker","ExternalTokenizer","isExtendingChar","isRegionalIndicator","nextClusterBreak","surrogateHigh","countBefore","prevClusterBreak","node_worker_1","u8","u16","u32","fleb","fdeb","clim","freb","eb","fl","revfl","fd","revfd","rev","hMap","cd","mb","co","le","rvb","r_1","flt","fdt","flm","flrm","fdm","fdrm","bits16","shft","slc","BYTES_PER_ELEMENT","subarray","FlateErrorCode","UnexpectedEOF","InvalidBlockType","InvalidLengthLiteral","InvalidDistance","StreamFinished","NoStreamHandler","InvalidHeader","NoCallback","InvalidUTF8","ExtraFieldTooLong","InvalidDate","FilenameTooLong","StreamFinishing","InvalidZipData","UnknownCompressionMethod","ec","ind","nt","captureStackTrace","inflt","dat","sl","noBuf","noSt","cbuf","bl","nbuf","final","bt","lm","dm","lbt","dbt","tbts","hLit","hcLen","tl","clt","clb","clbmsk","clm","lt","lms","dms","lpos","sym","dsym","wbits","wbits16","hTree","i0","i1","i2","maxSym","mbt","lft","cst","i2_1","i2_2","i2_3","cli","cln","clen","cf","wfblk","wblk","syms","df","li","bs","dlt","mlb","ddt","mdb","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","ll","dl","flen","ftlen","dtlen","llm","lcts","clct","dst","deo","dflt","lvl","plvl","post","lst","msk_1","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","ch_1","dif","maxn","maxd","nl","mmd","ti","lin","din","crct","Int32Array","crc","adler","dopt","mrg","wcln","fnStr","td","ks","st_1","spInd","wrkr","td_1","cbfs","bInflt","inflateSync","pbf","gu8","bDflt","deflateSync","gze","gzh","gzhl","wbytes","guze","gzs","gzl","zle","zlh","zule","zlv","cbify","astrm","strm","ondata","astrmify","b8","mtime","flg","zs","lv","AsyncCmpStrm","Deflate","AsyncDeflate","deflate","Inflate","bts","AsyncInflate","inflate","Gzip","Compress","AsyncGzip","AsyncCompress","compress","compressSync","Gunzip","AsyncGunzip","Zlib","AsyncZlib","zlibSync","zlib","Unzlib","AsyncUnzlib","unzlib","unzlibSync","Decompress","_this_1","AsyncDecompress","decompress","decompressSync","fltn","te","tds","dutf8","DecodeUTF8","np","EncodeUTF8","strToU8","latin1","ar_1","ar","ai","strFromU8","dbf","slzh","zh","fnl","es","z64e","sc","su","exfl","wzh","exl","os","compression","exf","wzf","ZipPassThrough","ZipDeflate","AsyncZipDeflate","Zip","fl_1","com","hl_1","chks_1","pAll_1","chks_2","chk","tr_1","ind_1","uf_1","nxt","cl_1","dd","zip","tot","slft","tAll","cbd","mt","cbf","oe","cdl","badd","loc","_loop_1","cbl","zipSync","UnzipPassThrough","UnzipInflate","AsyncUnzipInflate","sz","Unzip","onfile","toAdd","oc","_loop_2","sig","this_1","bf","cmp_1","chks_3","d_1","sc_1","su_1","fn_1","file_1","ctr","chks_4","originalSize","register","unzip","ze","fltr","_loop_3","c_1","no","infl","unzipSync","c_2","ed","$e$","COUNT","SET","splitSelector","isKeyframes","isAt","setNonce","StyleSet","adoptedSet","adoptedStyleSheets","CSSStyleSheet","adopted","styleTag","i$1","store$4","DEFAULT_CONFIG","abortPipeEarly","getGlobalConfig","config$1","store$3","store$2","store$1","textEncoder","segmenter","getGlobalMessage","getSchemaMessage","getSpecificMessage","reference","_stringify","_addIssue","expects","received","requirement","isSchema","message$1","typed","_cloneDataset","_formatCase","capFirst","capRest","firstWord","prevPrev","word","firstCode","charLen","charLower","_getByteCount","_getGraphemeCount","Segmenter","_getLastMetadata","nestedSchemas","pipe","nestedSchema","_standardCache","_getStandardProps","value$1","store","_getWordCount","locales","granularity","isWordLike","NON_DIGIT_REGEX","_isLuhnAlgo","number$1","length$1","_isValidObjectKey","object$1","_joinExpects","values$1","getDotPath","ValiError","BASE64_REGEX","BIC_REGEX","CUID2_REGEX","DECIMAL_REGEX","DIGITS_REGEX","DOMAIN_REGEX","EMAIL_REGEX","EMOJI_REGEX","HEXADECIMAL_REGEX","HEX_COLOR_REGEX","IMEI_REGEX","IPV4_REGEX","IPV6_REGEX","IP_REGEX","ISO_DATE_REGEX","ISO_DATE_TIME_REGEX","ISO_DATE_TIME_SECOND_REGEX","ISO_TIME_REGEX","ISO_TIME_SECOND_REGEX","ISO_TIMESTAMP_REGEX","ISO_WEEK_REGEX","JWS_COMPACT_REGEX","ISRC_REGEX","MAC48_REGEX","MAC64_REGEX","MAC_REGEX","NANO_ID_REGEX","OCTAL_REGEX","RFC_EMAIL_REGEX","SLUG_REGEX","ULID_REGEX","UUID_REGEX","CREDIT_CARD_REGEX","SANITIZE_REGEX","PROVIDER_REGEX_LIST","HASH_LENGTHS","md4","md5","sha1","sha256","sha384","sha512","ripemd128","ripemd160","tiger128","tiger160","tiger192","crc32","crc32b","adler32","ISBN_SEPARATOR_REGEX","ISBN_10_DETECTION_REGEX","ISBN_13_DETECTION_REGEX","TRUTHY","FALSY","_isPartiallyTyped","paths","ABORT_EARLY_CONFIG","_LruCache","maxAge","hasMaxAge","refIds","getFallback","getDefault","enum_","enum__","enum","function_","_merge","value1","value2","nonOptional","wrapped","nonOptionalAsync","null_","default_","optionalAsync","undefined_","_subIssues","datasets","void_","parseAsync","safeParseAsync","args_","argsDataset","argsAsync","args$1","itemDataset","pathItem","arrayAsync","itemDatasets","awaitAsync","bic","bigint","brand","cacheConfig","runConfig","outputDataset","cacheAsync","activeRuns","promise$1","checkAsync","checkItems","checkItemsAsync","requirementResults","config_","creditCard","sanitized","regex$1","cuid2","check$1","customAsync","decimal","deleteGlobalConfig","deleteGlobalMessage","deleteSchemaMessage","deleteSpecificMessage","description_","emoji","entriesFromList","entries$1","entriesFromObjects","everyItem","exactOptional","exactOptionalAsync","examples","examples_","excludes","fallback$1","fallbackAsync","filterItems","findItem","finite","flatErrors","dotPath","nested","flavor","prevIssues","pathInput","pathValue","forwardAsync","getDefaults","getDefaultsAsync","getDescription","getExamples","examples$1","depthFirstCollect","schema$1","example","getFallbacks","getFallbacksAsync","getMetadata","depthFirstMerge","getTitle","graphemes","gtValue","guard","hexadecimal","imei","class_","intersect","outputs","optionDataset","mergeDataset","intersectAsync","optionDatasets","ip","ipv4","ipv6","isOfKind","isOfType","isValiError","isbn","replacedInput","digits$1","_isIsbn10","_isIsbn13","isoDate","isoDateTime","isoDateTimeSecond","isoTime","isoTimeSecond","isoTimestamp","isoWeek","isrc","jwsCompact","keyof","lazyAsync","literal_","looseObject","valueSchema","valueDataset","looseObjectAsync","valueDatasets","looseTuple","looseTupleAsync","ltValue","mac48","mac64","inputKey","inputValue","keyDataset","mapAsync","mapItems","maxBytes","maxEntries","maxGraphemes","maxWords","message_","metadata_","mimeType","minBytes","minEntries","minGraphemes","minLength","minSize","minValue","minWords","multipleOf","nan","nanoid","never","nonEmpty","nonNullable","nonNullableAsync","nonNullish","nonNullishAsync","notBytes","notEntries","notGraphemes","notLength","notSize","notValue","notValues","notWords","nullable","nullableAsync","nullishAsync","objectAsync","objectWithRest","objectWithRestAsync","normalDatasets","restDatasets","octal","omit","parseBoolean","normalize$1","truthyRaw","truthy","falsyRaw","falsy","config$2","parseJson","reviver","parserAsync","partialAsync","partialCheck","partialCheckAsync","pipe$1","pipeAsync","rawCheck","addIssue","rawCheckAsync","rawTransform","NEVER","rawTransformAsync","readonly","entryKey","entryValue","recordAsync","key$1","reduceItems","arg2","arg3","requiredAsync","returnsDataset","returnsAsync","rfcEmail","safeInteger","isSafeInteger","safeParser","safeParserAsync","setAsync","setGlobalConfig","setGlobalMessage","setSchemaMessage","setSpecificMessage","someItem","sortItems","strictObject","strictObjectAsync","strictTuple","strictTupleAsync","stringifyJson","replacer","summarize","title_","toBigint","BigInt","toBoolean","toCamelCase","toDate","toKebabCase","toMaxValue","toMinValue","toPascalCase","toSnakeCase","transformAsync","trimStart","tupleAsync","tupleWithRest","tupleWithRestAsync","ulid","undefinedable","undefinedableAsync","validDataset","typedDatasets","untypedDatasets","unionAsync","unwrap","variant","maxDiscriminatorPriority","invalidDiscriminatorKey","expectedDiscriminators","parseOptions","variant$1","allKeys","keysAreValid","currentPriority","discriminatorSchema","variantAsync","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","chunkId","promises","miniCssF","needAttach","charset","nc","onScriptComplete","doneFns","toStringTag","installedCssChunks","miniCss","fullhref","existingLinkTags","dataHref","existingStyleTags","findStylesheet","oldTag","linkTag","errorType","realHref","createStylesheet","loadStylesheet","installedChunks","installedChunkData","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","chunkLoadingGlobal","HydrateUtils_hydratePage","PageWrapper","userCtx","ProgramDetailsContent"],"sourceRoot":""}