libaribhtml5 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +124 -0
- package/THIRD_PARTY_NOTICES.md +24 -0
- package/dist/sdk/arib-vfs-sw.js +336 -0
- package/dist/sdk/libaribhtml5.js +11 -0
- package/dist/sdk/libaribhtml5.mjs +1353 -0
- package/dist/types/broadcast-document.d.ts +12 -0
- package/dist/types/broadcast-url.d.ts +9 -0
- package/dist/types/device-identifier.d.ts +4 -0
- package/dist/types/index.d.ts +23 -0
- package/dist/types/media-plane.d.ts +79 -0
- package/dist/types/program-guide.d.ts +25 -0
- package/dist/types/program-info.d.ts +29 -0
- package/dist/types/receiver-host.d.ts +144 -0
- package/dist/types/runtime/clock.d.ts +5 -0
- package/dist/types/runtime/fonts.d.ts +4 -0
- package/dist/types/runtime/install.d.ts +31 -0
- package/dist/types/runtime/resources.d.ts +22 -0
- package/dist/types/runtime/romsound-markup.d.ts +5 -0
- package/dist/types/runtime/romsound.d.ts +4 -0
- package/dist/types/runtime/system-information.d.ts +14 -0
- package/dist/types/service-worker-vfs.d.ts +66 -0
- package/docs/android-program-guide.md +127 -0
- package/docs/broadcast-clock.md +57 -0
- package/docs/broadcast-resources-and-fonts.md +143 -0
- package/docs/media-plane-integration.md +227 -0
- package/docs/receiver-host-contracts.md +92 -0
- package/package.json +69 -0
|
@@ -0,0 +1,1353 @@
|
|
|
1
|
+
const lq = "data:audio/mpeg;base64,SUQzBAAAAAAACgAAAAAAAAAAAAD/40TAAAAAAAAAAAAASW5mbwAAAA8AAABdAAAjoAAICg0QEhUYGh0gIyUoKystMDM1ODs9QENGSEtOTlBTVlhbXmFjZmlrbnFxc3Z5e36BhIaJjI6RlJaWmZyeoaSnqayvsbS3ubm8v8LEx8rMz9LU19rc3N/i5efq7e/y9ff6/f8AAAAATGF2ZiBsYW1lAAAAAAAAAAAAAAAAJAKUAAAAAAAAI6ClHNEzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4yTEABJQgqW/SEgAwAAAuH+EAuifL3/LuW7uYlFg3AXAXD8YCYJitHMHz/WDgIBj/4IAh/f0f8/wff/dwGD4Pg/BAEHagQd///lwfeXB8P/gQEAQBBUWAVruFAL4qEn/4yTECRMT6rQBhZgA0eQ0MCghBJgAtsjgJnGaUZLGN4ziW3/////////////OFt/+mf/8s//61EDR+r+SD//yLN/o/LA4En//83Kf//5iQZUDAwFAZicXdGttTop1ukr/4yTEDxYjkoRX1IgAJ4dQtYCAYGO0geNAAEeC0EOVE+kyaqTd2pf/////WO5///////+sxMQv6Vf//t9D///rRLoQ0gpqj///1///+YGAZ+FyFgr/4hUiCWoO1fa2B2X/4yTECRNDjnQKHuaqChK9rckgZuhBgmqFzgxtbieMiq8Qf//////rGg3///////rOAhYbv///6v///QL4Dmhzzz///9b///8sEiCA4M0M/+9Ixfbp/iqzbbaFNCSmyzb/4yTEDxTzkmgATyjEA84nUYWZJ0QGIkQwMABPmpl1FkP/////9RZ////////MQHlygil///1///2qRLwCxAFhxq////U////H4nAhFhTKe/+lYO4hzucyfRtpGSaSSXD/4yTEDhTTkmQANyjEwxyjCgnPDA8SBCwgqBIj3uS3df/////+RJ////////YyAwg4hqTf//////1LKATVDkHa///9R///9S2H0XAxCDtp5//k1cGsXH482CmtFLUAfSz/4yTEDRRzkmQANujEpJxEqzAoA+Y7RQchCUqOp3SSFX/////9ZIf///////dABgmOc3///q///7JloA0EFBhbZ6v//zj///3j6Nw5AHXWf/5JgHGdZHR2MYXvkBWORCn/4yTEDhSr8lwAHuiMH+QZGeYy8zVWfxjxQDTvePe//////5wh////////2PgHKRcv///1///9FIhoBq8FApsj///zn///UPxChAaBcK////zy7Wy3J0k3auIuohYSW0b/4yTEDhU7klgATyjE2vKYmCWAcTB7rxNKtM7uWKC2//////1jif///////1kYBkSgpZ////R///6zAdYDmoW9k4mh///nP///HULEBVMA1xU3/yGjrVrvLVxUtBExhbf/4yTEDBGbjmAAHubAAhg5ER5ycY5YeUmrf//////yWb///////1FMBapLN///6v///Y+FyAYU8////U3///KQyQQaBaLP/UpFVVdlIdSLcxRPFMZgAUjgBYYOnHWH4jj/4yTEGBETkmAAqCkMF/qL////////1lgBYsRdJv//////6lkcCBMJyOq///6m///6Q0ghOBhV//pqWjX90dW63ZMoEqJ4ANQoGbwcKXIGLlEkf9ZS////////OgZWkcj/4yTEJhCjjmAAqCcMv///1///+mTAEcAiIbt///7f//9MW4EHhpm//vqz+1f60XMjEoFkUMBBWgY2Dg6SuJwDwn0fyRb///////5mA0cGZS///9X///ZIugLkQodSb///4yTENhEzllwAqCkM/62///5mLeCFcCgs2/+uvV/b9ZkiZGIuYDARnA28EBBpMByAn02X+T////////1lwBokTX///////WojwgUjpNF///863///KY3wKlgWVhz/7v3/4yTERBDDjlwAqCkMv/Wg6BfKg2wMHBYCZ5CzAswNGIGYLV6yx///////9AzAwQkW1v///X///3Yvg21BQWedv//87///1kePYTMApPPt/9Gv/77aZcJscgMhgYEYwG//4yTEVBE7klgAqCkMYag3MEJAuGDQzR/qHa3///////ywASav///////qRJoCCILTkf///O///9Y/kuBEQC2o2b/1Kmf/69VIxOFEawZKBWEAZFJIjIkA0MHAoqpN6h3/4yTEYhFLllQAqCkM7///////+oshMuTiL///9X///UmUAF1AXYmh///zr///6x8mwigMemv/vmf+/60kkS8TozQW+gYjbwHpRKFAkJ7AeAws0TqTK//////86Rn/8yD/4yTEbxGzjlAAqCkMMAgH82R///6///+yRVBsODkJ9n///1n///9YzrCywRjjd3/k6kf//ugbk4OMOUAxGMwPhhYBgNh6YEASK0M1L9Q4W///////+TIGRCjHGqX///T/4yTEexMTkkgAqCmkf//+s4PkCrEQROL///8////x8kiCYsGNy3/9dWb//2UXyYHLBvIBg97gcbHQNnxBcG1QUABXQf423///////9SYBTETql///6v///QJsAw+Chc3/4yTEgRJblkgAqCkME0P//9R////WRo8hMqC2Iru/9Cr//9ZwuLE9gCgMDBKTAwkMALAwUIH0D3CCHv//////1lz///////5mRcG2w9pN///////oEMDGgeNP///1P///4yTEihKLkkgAqCkM/81IgDWgiRP/7vGHEb7BzxD60w5wBomgLFTMjgbFhagEjIG1Ej74uRO4IlgarHIHO/8nTc+h/////6dJF0v//2TdBNZgmYyy3/nT3/SJwc8sIl3/4yTEkhJDjlwBVYgALx41Pk4afl5v++mUfe8vlwwJsmB1CChEDApmBNEybEG/mBc//9qid/+REiZLkQHPJscgY8OkSWYmSJdSY1NmAMMAD3l3Xf3jjl/N481apsK2Vq3/4yTEnCIEFpQBjaAAuyICIHBIpAUQbSQ47Nb0/////6kX///////6AtnP///////0IgDgsm////+39f89QeF7f/TVAuQcYEFVJv/1OizWZjRlqCeCKRJcQVEMOnjxgx//4yTEZxJLkqBV2lAATS7//Cy3////921rt+4CBD//3RHovUxnsYaiGVZP6hPE3///////5wIhP7saZtGrRuUCAwEAX/RqVTZ1KUTqRsLwEp4AUwZ0oEgME2XspV//////4yTEcBOjjrG+gBVG/6if//qEHF7//vt9VfavVa6/qOg05F1f//+v///1lYMMGlv/9Cogdb/94d/n8/W9Zd7S27FiWu8BE8NNJisxp1cssvWZf///////mYN9J3///6//4yTEdBGLkohWoCOk///0TcMiheZo////X///50rBCQHjf/5CBgIBABVX1e1dTsxokaG4j0CUgEaE4H+MUjylXZ1f/////lX/+oG9i2///1+hqrtXv6vrMgKMKMj///7/4yTEgBEzknwK2CcMv///yyfDvBW3RX7VrRrW+tCgyRFwCCkBq4EicBmAxsMnTqr//////5X//lkGo0wR///9X//r+mUAImBGibf//9b///1MSqYhEFIT//TVpddWzoL/4yTEjhEDkoBWqCWkepS1MTZDBIwkoAMvBkUwiAgsIHLjtXf/////+sw//pAADiLmzf//9f///uWgyODAx9v///f///WP8SMFLz//SkL9v0VO6lqM1mpPCMQHqYDKYXH/4yTEnRELknQCqCmmQRGjJh2jWz//////+oqt/+iAUTGWR///9H///rOFkCKcUCgv///z////IaREIgQJVjv/rltV71andbJorRKw5IGAzsBtcAhlR/DUxPxr76//////4yTEqxErkmwAqCmk/8if/7JgS6LlV///6v//+tAvgCbBR5UdX//+p///+Ro4QTyD/Fr/6GPf1oKqS10DM8TY0AJB8EY6DfxZ4YNIxG7f/////+smP/1mAGPFC4v/////4yTEuRGzjmgCqCmk///Z0SLAEEAoWKrt///nH///5RGCCSUKMir/9FX/qvUqqmnUQ8RwACgQNciQLmxW4YpEaG7fURX///////6jMDAHxiI///+v///WpZGAhZD4TV//4yTExRHDkmQAqCek//85///5iMEE1YWlGn/1Kq9e216qVbEyRw+Q7wCzVAyIPg/Eg4bADgCW2dv//////jaf/6yOBqqIKbN///1f//7s5UAwIgHKS2ef///ON///2E3/4yTE0RHLkmAAqCmkAHPRmC6c/8jVTn6yOAcO+ymNOyjcYaZp9QdDQVaQDAQgbTY6atP/////+YilG///+3///qHSBkWooA1dv//9Jv//9EmhQoGFsgNGTiL///5YPf//4yTE3BFLlmAAqCkM/+5DA2EJWQCoBCKX///rPlyz4jNH8zpIu6hfsw6GY5YB8DBogkEIKKnmM9La9X/////ywOT///+l///7GwGsRBkUvI///87///1lASMDCYwGkZD/4yTE6RLLklgAqCmkQ3QQt//8yLX//+oagbCCC6C5UXCa/8WqT//BA9dlEBsAEIHMNWI74WwEFEvDAoEGg3FKfif//////uLc////2///6CZaBFmDVyP///of//1s5qT/4yTE8BZ78kwADyiouAMgB2oeT6Cv//8tf//6heB9QQQQGXg7DZv//9Z6bR/73RSMllIfxEATBoC/YAzSdw1gpQCwXBw2HafZ//RFwN///9///+mYDHga4+G2of//+c//4yTE6RaTkkgAD2io//7IpFESoAzYAUGJVLa3//nS1//6ukIoJ9AczBHxFwv///1Hqkv/LcWV2mjLKgQAJhSrRwiJosDTGwCB4kDUO1uf//////OD7////b///qMx0Ab/4yTE4RYz8kgADyioEx8KMfb///mf///QMxjAMIjoEQ0HGaJrb//8snv//9QlQ8hADQJRAiB9v/FaS//z/etyx101DC0FDjEAg4J0qxgEWxUOtq//////9YyT////f///4yTE2xZT8kQAqCko/9RKggZjsNX///6P//+6JsMqBg0oIno9Hn///yy3//+oU5IXIBN6N5///+o/b//61GZMDLhfADBatA5OOAbPiFwb6GwG6D/Hhv///////WZACID/4yTE1BajmkQAD2qog6X///q///1LOEqE4Iss4vf//86///+ofiSBoOCohv///n3//+cNInsAUAgYLTIGAhwBYIChA4AOMIoaf//////qM3///////8zJsAUJEjRBv///4yTEzBS78kgAD2io////63QIwGwaBZ5FzfW///1v//+pBAvD2ECAXiRQ0X/1qv9ifxRBB9XBSDWwbyKAIQLKz4fqBrExZ4zBmbk4GzjhQR+aN0UUn/////9v//7rdCv/4yTEzBIz8lAAqCkMUkktFtZ7/oGBot0EGTT5iO1HrUkkv8sf+2kx4uFw0J8vm5OIoqSqELkFOF5JaKl/0zP/5cNC+m9BEixFDQny+blwuIG6bokyZF4mjFEmQ95J/PL/4yTE1hRLllwBVZgAQVUBoDwwAAn/1quz62WcHKAioA/IgiDcIou+6K6Guzo/////5wqt///////+Fwa3///////mgujb///////5gYiw/nMyHERxEuSKeNjSBKXqAPL/4yTE1yFb7qQBiKABFABQFWd/+pk1IpaS6YRBKKSiDD0g9Tps3/////7ijP//C5mX//+rQS+q++39kgRwGY1///////6mFiL33MS6YIoJUkkUlJTjG508hekkdVUAohz/4yTEpBOrwq2X01ADAFAGA//7sgk6dbs5AQIogGrY7iGiyxJirRSpu1f/////rIg3/6wuJR//+31f///UDAl///////6jUPoMn0Eq2UzukrVdVj161RECAl//9lKzUvr/4yTEqBRcErW+gBumgQhgFJ8LGQ8VknkWSel//////qO//zAG3kn///9f///ugF/hME2X///r///8sGod0HgY3AMkUHX4hSkRDB/rr76tR9AgYuQAkIgDXYUuXw6EdiT/4yTEqRLT9pW+oBuk1F22/////+siX/6joFEks3///s////UYgmsNNP///+v///qLDCugvlA//5G/+26S0HWYG5SHyLMANP4GiQcILk2ICiYVqb//////5If/rLANCRj/4yTEsBFDkoAuqCekpf//+r///1GYJGyBoJof//51///+RzihAdJPf/Sq/7fdLdM4QMP4CBUgYKEQ+SLioB5j6l6//////9RN//0QBRJSR///9f///sbBtoODmj///9b/4yTEvhEDkngsqCek////I4rBngLRR//31Wb6KSCrIMs4pqZPjIh6QGDn+B3gMAsBSCAOAAKAUnkWZV+l/////zMXM//2NgM4KFal5f///R///2UYi1AETgGCxdS///7/4yTEzRELknAAqCmks////xrDFAgyAuMLgcb/ySpm/61staTOXjRIkBYwMICMAdmgSAAfoCYCICgtdD//////sMRv/plwBhkLmR///9X///UZjoAJZAiMJod///qP////4yTE2xBLjmwAqCmk/IcKMCFwAVZLX///z1Vtf+vZR1SRcIuOgMDgYUUAHJheAUABAQG5QceaUHV//////zg5//1oEPAyRUTq3///v///uikRUDBhwRNSs3///OH/////4yTE7BWLklgAqCmkYhwe8EL4HFR6O/+Qbvr6nWuyCjE4PsYwLVgIowGSiaF6BZgUAQUC5LGzLXW//////50XM//oLIwDCuhNTZv//+d///0llgboNLoiJSTVdv//lh//4yTE6BPL8lwAqCmk//+8+G1BGoJ1JIYn/iNv/Vd3pKRLxDR1BbkDBcUA5uNwwUSoNrgoDidSR9hgt///////1qHyAliShqk3//+p///9aBAwBB4OjkQTQ///ywr///X/4yTE6xRDklgAqCmklMPOCdIBhOWF///+fV/WVwXfs0dFCk+TCkajhMCRoG09yED1jTNb1f/////+cHG////////ykBmFQuzZv//+l///opGJDgMQ0BFGJ1L///lg9///4yTE7RVDklAAqCmk/6I+xDgHygRbz55Jv//6zZVPX/xlnSU8MM7BgAGFZunEYiAYJ0JYEA8vxL7GbL//////50fX///////0zwGvGiAxq////O///61GYoQCNwLQDMz/4yTE6xRz8lAAqCkME3Z///nD3//9SxfiTBDAB7Ikybv+JF/+mIYcbkzBDCxwEAG7mvTkDQGpuGBEmEEjsZt//////6AyLf///b///ugTYAVUPlS///9v//92ccwBgMH/4yTE7BWT8kwAD2ioSYSZomn///UWv//6li7GSAXUA92OJv//+s8qX/n7PGtKYaZ6MgYwljzshYLWvsYCAA0JYtZtM///////SFvf///7///60Ex0AaVIJ2T///85////4yTE6BYDkkgAD2io3SRMiKgA3wGGpeR///6Za///qWKyLmAqGBXUzP///qNaX/+YjxtWZFCU1jDAszkADhoJFVBgEkfZVjr//////50hn///7f//9aA6wMQ/Dss/////4yTE4xXL8kgADyio0///9SZcIOAZPAYRkUL6CH//8snv//7JiVsGKwJ7x6mf+K1v//0zQnxcgYrAw8ggPkDEA4KBlwA0EBy5cTQ9Q4W///+////pkoDSAKXNm///6L//4yTE3hYj8kQADyio//+54c4DEHgUhEifb///LLf//6xTR2AmZBG6Tb///qPqb//6lnCmOgL9gEOYDWg7DAAsgG7gcAy07eoe3///////+UQMSrHKNX///6v//9ajo3D/4yTE2BUrkkQAD2ioIYwgsdUv///LP///WNUbAQIQqGL////z9f//0Fl+LQAIAAMCJoDKoxAaD4kYe+HPIuf///////WYN///////5gXAAiDhMzd///////0FlMA0wEn/4yTE1hQb8kgAqCkMBBDRqv//1v///TcujQBOoKqJs3P/9aqZEgGkMEyWAoJSafBc2eKtMOOEDgYAkAE4ICIDABxyaQeG9jpJcrA3QLx1fzQ3Wq3////7ft//3qWtVH//4yTE2BKb8kwAqCkM9I//0jQd6lopMzoNIeSX//Kd/00FLnT5FCaMTIvF0+T31h7Kf1t/QLn/zUrlsqE+bmgzYhGQY1LpseNTY8an0HWjXTHNC5qrtuVINwhSgUBArLT/4yTE4BQLllgBVZgAkkv6SKC6SNSVZdBKhOiWC5C9GprTnSrOa03////8iGZv///////4Mo////////xgTP///////0QMQ0Xzj30rNb0ucXWEa2oGsBUAYAcD27pquyb/4yTE4iFr6qABjKAB2lSpJsRUfgm5ACUE6mQQUVNkjBJrJ//////WMl//UFYt//+zfQf///1A9Fxf///////UeFUERvU6Tpourbfas2XVEQAkTkmeahe1dBpsQwTZOEb/4yTErxPb9spfzVADHMYDnFLYgsh1bWOnopbf////+skP///////0QbZk0j///6v///moqQXWTr///1f//9RSYL8g/KD//FkGAgIJS9a66St0tTJImxcG+A4EAaaAYnT/4yTEshNL9pm+oBukIgH+JsydTKW9f/////1Hf/6YfUnf///r///9R0ImO1L///1f//+cWTgVVv/o0Ijykj5HwdY4ELoGZgSEOIGX8iDLmhzveIt//////5t/////////4yTEtxLzknwsRubEoA2Die///////+mA4Yh55f///U3///KRfDdAuVv/oVLpOgrsm7VnZ84ZGahaQIsoDE4TGWNRRwyrO3yp///////9RZAQsqt///6v///RLwDhBpT/4yTEvhFDkoRUqCWkav///1N///qKRJBAIKhFf/Uqx99EsnFQg4Nw2GCxBUphNqHOQ6k00dAWhdLcNv//////6ib///////+ssA0ODvSb///v///1HR8Am2FaGaC/////4yTEzBEzkngAHubEt///yOHEE0wFmLf/I1H6pKvqFTleX6WanXfYgYnGg3/xYRhxYQDxSR1qkWv/////+sc7///9////URoGDTj6NX///6///+zkUAw4YGFiTNE/////4yTE2hFLjnAAqCcMWe///2KQkwJNALJT////zZVTwfJlcjt4mcxNzTlpUGEU+ddGAYB1zgwBqQzw7qV//////jy3///////0gMgKHNS///9X///WkOkCKUEQU2R///7/4yTE5xN7kmQAHyjEdb///pDDAouDpS8v/1pE9brpO65iastSRDyACkwkAgI0EDQJWC/YoMBoAgwFFdFNtv/////5wg//6ZGAWbi5kf///S///60B1gOhhaWaJqb//+f/4yTE7BWT8lwAHyikW///6YgcBd8Frak/+SpkL77VXQZSCKRiXhXQt0Bg6GgcGGAapHUFogKAkiTJesmv///////oF8DIARzVf//+v///uiWwDggUTlo+1f//53///sT/4yTE6BPrlmAAHyioeKOCFgBZ2Vv///nq5j+98ww/D+85jqtju1Ozz8pdGFBDhIMCwMKqDgHKa1t5fHlv//////+pMhgGNSB9n///9B///6KiyNYCE4LgjFS///86f///4yTE6xSjklgAqCmk/9Y/jbATEBkMnjP/kGf+yl0LpPc0IuOYGAwMRKQD5wzAKCAYgANBQYzLiaGt//////6iDv/9Q6wHNxkDV///+r///0xjAMG0BEkL6Ca///6z////4yTE6xQj8lgAqCkM/rGuI+AiUBUm5qr/yNUC85zXEnTV49Aa8BGCTB2cOLGkAARQQDBIeFcIv8f//////zo6P///1///+sfgMVGGubM///+Z///6SJeIqBk1oIqJWPP/4yTE7RUDklAA6CkMrV//+xb///qWJWO4ChIF96SP///n1SD+89UT9arMQS2IcA5gXSHBTGlVCQUDx4VSG1x2//////5gLhb///6v///cuAZtOKSNUv//+3//+pZYEVD/4yTE7BTLmlAAqCmkIWREygtBn///OFv//+pYlpOESBXOme/+Jk5foPAbrUvZ1xkiTClAjiULSgHl9hcExIAqWtt///////SFvf///6////YtgHRA+UvI///85///3ND/4yTE6xaT8kgADyioc8DGHwWnkgboN///LB///+pMU0qA0IgN4jNv//+s8kf/9W54rkQFxhcABgzCeBpFA0AcCsLPgOAmIKFNS/OkA////V///6ZcA0pIQSR///9P////4yTE4xWDmkgAFyio0UjEgQGEnAWVE6l///yw///+mLSKVAXPgquX///89bf//UZkwOsNkAwS0wN3jQG7xC4Wihdhuh9RO////////UR4GCKjtb///1///9RmQwBKgL3/4yTE4BYr8kgAD2iohfQT///zn///kaNEGh0FHS//kG/6v2RMimPwp4TAwNMSBmgxBo4yYEgQDhKSR57//////9xtv/9ZDAHshvmzf//9X///RNioBhwYLQSSPP///lj/4yTE2hSr8kgAsCkMb///TJkTEB8EFoxf/+RVX//7NrGVOCXOMJFTOGBOFgVZ4BAQFgZi1nL//////50XI3///////qLIArsZQ1S///7///6SJkRoD7IZZMlqb//+cPf/4yTE2hHDklQAqCkM//+5dDKBO+BIcX1N///z6l//yPHOkh9qCeZg0RJ1wJpgsABfwEg43GUZ6Wr//////nBZv///7////PgZZUHyl5f///Mf//+5gVwMY1BzcnE0Ff//4yTE5hOTkkgAqCmk/+Wv//9I1DTABKoDSRZr/xNV1uYiboF9zCh0OzEsv4uwAgpIOc7z//////6Q0n///////9MigIj4pZf///q///6SI6gKDAcqKr///9Z7//+tRwT/4yTE6hTb8kQAD2io+ARgg5wamv/JKmf/7IKZJIolgfw/wNAWA/LAbWO4Ng4ZkDBISBQVDtNkeosiiI////f///ZMwNgNYTGVZ///+r///Wo6KcAvwAKNFMwdNv//yyX/4yTE6RULkkAAD2ior//66ZQJoLKAMpdBVqRA+zt//+sq1Wf//qSZyqSQj0DDLeBZTgiC4hGIoGCjFL6i7///////9Y1gMeQHcbN///0///+zlQBosF2F9B///863////4yTE5xKLkkQAByioWohw8BMyBbLf/6FJVED7OC3emm/XIBgENsMNPY9vi37Dy5EMW+eg6q36t6/9v6/+o//t/Xb6f///qJUEAsro///+3///nEQiPBEZNv///O///9j/4yTE7xeL8iwAqCkMmjUBAUCVEe//ka//m+PKs1KXqGAdOGBMQNH4AQoMibI13////+r/WUP///+/6/7+xAwMGUIOpH///UpX//+swHWAu3H8vJq///qMfq//XsXjAO//4yTE4xHzkjAAqCkMAptEXNf9giW1dv/VrLhNjkBf8DAsH4DQYEsAoCgYgAFAkHHlxNn3//+v/19fzu3+zimjVFiNf//+t////QJoFQhsRUf///rff+v/eUhfB9QrgW7/4yTE7hSDki4yFmjE7N/pzz/WGH554bzt9wpLHyiMUkfctKsKwG02iO9jrNvL8pRLL2dJY3XAzgRGRCd3iPxE3frnom7lufE9C1PzGo2f3zNeuZz99DCEl////X///5z/4yTE7xQjkhwAD2ikAsIb///////0IBkIUuo6ZEwrE5CZhD7Pq4Yn05PTVEmR4UDDjSKLHJYDQ8FVBoseEriU8V6Z4rEU8v/2/nSP+VhpR4Sw1PZXnjv///ywx/6KTEH/4yTE8RODkhwAsCekTUUzLjEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/4yTE9hdbkkAAyNUsqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/4yTE6xCglkQOC8yIqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo=", Tq = "data:audio/mpeg;base64,SUQzBAAAAAAACgAAAAAAAAAAAAD/40TAAAAAAAAAAAAASW5mbwAAAA8AAACLAAA04AAHCQwOEBMVGRsdICImJyktLzI0Njo7PUFDRkhKTk9TVVdaXGBiY2dpa25wdHZ3e32AgoSIiY2PkZSWmpydoaOlqKqusLG1t7u8vsLEx8nLztDS1tjb3d/i5Ojq7O/x9fb4/P4AAAAATGF2ZiBsYW1lAAAAAAAAAAAAAAAAJAN9AAAAAAAANODbb7tsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4yTEAAAAA0gAAAAAIHoHNinAjnImXAXeQPvdxNAJD+mJ3JcAC5/3JRjhRS//VTKBgSn/7zw7DQlCQBbC9//+ShoTCAmpnL//63T/4mgIQTiQNFm6Bopk//////b7KWb/4yTEUwAAA0gAAAAA5v//////6DN+s3Pom5TY3KaJ9WOBMUv8il1hJhmgb3T1ZuaIXso11m6abOyLLMU+py+bzEYceakSRMgEYT6osgtpkiXzdk1G5kZmq0kjZFus+/3/4yTEpgAAA0gBQAAASBfstFtLUcb6ZmocA8ES+7eaGRfBpE4Nl/OoKAmhX/1v/dAcfW3oozIewYf/rpCajDm/p71IGiRcNEi4gMMbUUaKOVD1NVLRVMhzEBG3C6qTV13/4yTE+RlkFmgDk2gAKW8MaYIATjejs+ymZSDxOdd77Z7QrGpxBLqJmxZTUdCKFsfmHOXh4F4wJA6CfhxmVNnNzb7mxJARxBIShkj1EoGKOcyGIOgcsdRgBzibA2CefLj/4yTE5iPLzsQBiWgAxmbm70KbqqHqeL6kGTdNNSDJuht9Nbu77Ikuv//dX/roa/////2NB6hzTEumHf/w7ZJZa89A41bEEJw8m9tZWwUsvtt14ZH7qOtn/kWvsmhYadz/4yTEqSGrMs5/y2gA4iiM66+3//DEN7x3ZrZfVsyq3WyUUAYikpbMwc5Xcsu1b1a1VplLI/Rr//1/VzTm/6sc7GHLWcah5pxIcg9OBfBEFkVQbSAmNZmOc5zWOPNp/VH/4yTEdSALLv5eRlWGEJjSZzsSGv//yIsqqGVQra4GYJUxKQ7jJX1uWgvUPLrehbj5HBKA7SdMEzF3YfIpQnFMUzylJnC6gKDLpn/66zhAxzh239RGE4kkbMPsLIgJ3GT/4yTERyFr/tJ+mU/Iy7QLqSDLTdSDFwEFhNkZX1dCasf0RCk9CiS//0b//MofByOOWu6J90RuefMZT0MPMMG8xlf//////+awpCx1jGAAoOIDCVBiXDe31Jh9/+dK7Ev/4yTEFBb7Rt52aJ/pvWj5dPW9S0Fl0ejf++kSJlf+3RWJgZlAuJO6VaNJ1pl4G6JUbKdFuyn9bfSi/T//1X//sKc3///6GxkkO9QJ5zYZsRaS/c6EYAhHdpWdG5dsE2//4yTECxRTKxseaZTj81E/D89TV/GsDGkAC0c/ngtk8nvemSAht/66mjS/6N6lBiIZs3+hh4AoeGf//5AQj8sNvTb/+ca7f/zlNlScz///+hAJNupgClm2purQD9oXf9n/4yTEDBUjLuseaZUhMYQJ6NlF0F6eJqFmxsT0VPWiwswFYdWuLjYMC4rkzP/z+Qq3+/sWchNzn/oPAQSA////IiYik3///n0T/5q1Nb////s5CLBkCrMz4SwzvBIgaon/4yTEChTLKtp2WFtl+OK/ysN52s/4qAUG7MwRSbb1f2mi+anq+x3l0Iid///bG9r9kXsJndnHKj+WCflgUYmhSV///OGDEqh///qvT///////rdWXk9W7W8GlZtjDogX/4yTECRSzLwp+aoTfpzNmapUZwBVIdJvzAFgknieNiLIaSAJInOSnbGqDTBbBSd/1Fp2QhPb+7+ptOPv5ghR+FCp///hAosGv///US5P//////+hyj5VuI0Pr/AYEJSn/4yTECRKDNuJWKop+WvNhQSDpit+GYjRuCAxq+cHxNLs/NICoDoiTf+k+IDFb+3q3/9CAUcGArf//vEg6UVf//9LGUyf//////5SJOOcARAbbywhQQZwd7f6kxSoDaaL/4yTEEhIjNvJeBA5aCa+xkXmFGL5dON+iDYef/nKhyFxgn+o+DPNP+c/6HElLP///V1HDDv//+zf///////Qqg8cQZQBHhfb3CZWx/6ieJSnT/qDEL7pnH9cmyDE5/qX/4yTEHBHjJupebATvglipCfjdX+nBuP+oUT9qdf8MJIKX//9AoCFHCixf//+hnRv//////6OYVAUAdgX3+oB+Uf+mSAflf+bDI2/Ymj2W39ReD8J0SyH+URWJjgIP/q//4yTEJxJLMsZeaUd56Cs7af1EhodUFMn//opBQJiws///93Zf/+n////o6eoC6yoASAfc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rAAAA0gAAAAAMTAwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy7/4yTErAAAA0gAAAAAMTAwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy7/4yTErAAAA0gAAAAAMTAwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy7/4yTErAAAA0gAAAAAMTAwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy7/4yTErAAAA0gAAAAAMTAwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy7/4yTErAAAA0gAAAAAMTAwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy7/4yTErAAAA0gAAAAAMTAwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy7/4yTErAAAA0gAAAAAMTAwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/4yTErAAAA0gAAAAAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/4yTErAAAA0gAAAAAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo=", cq = "data:audio/mpeg;base64,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VVVMQU1FMy7/4yTErAAAA0gAAAAAMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy7/4yTErAAAA0gAAAAAMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy7/4yTErAAAA0gAAAAAMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy7/4yTErAAAA0gAAAAAMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy7/4yTErAAAA0gAAAAAMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy7/4yTErAAAA0gAAAAAMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy7/4yTErAAAA0gAAAAAMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy7/4yTErAAAA0gAAAAAMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy7/4yTErAAAA0gAAAAAMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy7/4yTErAAAA0gAAAAAMTAwVVVVVVVVVVVVVVVV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qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy7/4yTErAAAA0gAAAAAMTAwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy7/4yTErAAAA0gAAAAAMTAwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy7/4yTErAAAA0gAAAAAMTAwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy7/4yTErAAAA0gAAAAAMTAwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy7/4yTErAAAA0gAAAAAMTAwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/4yTErAAAA0gAAAAAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/4yTErAAAA0gAAAAAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo=", gq = "data:audio/mpeg;base64,SUQzBAAAAAAACgAAAAAAAAAAAAD/40TAAAAAAAAAAAAASW5mbwAAAA8AAACAAAAwwAAHCQsPERMVGRsdISMlJystLzM1Nzk9P0BERkhKTlBSVFhaXGBiZGZqbG5ydHZ4fH6Ag4WHiY2PkZOXmZufoaOlqautsbO1t7u9v8LExsjMztDS1tja3uDi5Ojq7PDy9Pb6/P4AAAAATGF2ZiBsYW1lAAAAAAAAAAAAAAAAJAREAAAAAAAAMMCD0Ng+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4yTEABCw6pRXQUAA0AAqIV///kDkC3d3d3dEREREQXF3gOAFAFAFA8FyxcXB8H/+Aw/h8EAQDHLg+H3ff/lz/VEgIHP/+XB9/Ln////wQft2ZSaNlaTHSZKwC5gwqbH/4yTEEBaLzqQBgJgAeGNC0MRZ2I0GkSbI4miaMzEuk7QUkcMG9JJJbNRX0f+tPr6/bq//6ZkTK/3UgoYSv9RmT2z//LP/+a//2Mjb//s2p//6jBeV/82qAFptuyin9JL/4yTECBQ79sh/wGgCRZbZk5kgTxLTEK0Vzj/QSdS1JJUnSSSRqSdT0kUWRbrf+ovnCEbmnUtFl7e/q//7/1rLpg3//////9S6y6kbf//////9RgiUVQJmNvwNL876vSf/4yTEChS79ph+ANrpKy67AJkG4FoK0NtBJqCZOZ3si9GpW7dq3rekg9JJy6WJJmvS//////86RRhB7rf//////1tQWOETAbh5Jf//////3YvEoPU3GAPCkgF7//dv7nj/4yTEChOh0sBcAjEOviQKv//8Il+iCiYxNxE9DRI4EQcSIZYzh3KOpGIclnN7lcOWObr08bp+59zp6e3/6zzz/WFTBzP/9Zr///8iz/xJ/+GaEEhVjACv///6//qerZb/4yTEDhQ7itB+oAvqi60Zwyf9bezaTkcLUJxDVgGXWAdQWJ1BtUnBcxNGZAbMbE0bGJmyRskvNS8bJdaP2/o7///9FCZDDIrDrpGJQ2WlXQAIkHLIrtVD7AiC7f//Scn/4yTEEBVr7rB+Ao8vd3F4Ji2b+ym1NqzGmsbJiwYd1Zze2mlDndtEOzs5DqOcvqYpgkMdf///Mf///WcOO///84uIwsBMiWvc6ccc8500fPE4WgKAAkLDvT6ZlCYD8GL/4yTEDRLTkoBeAGMEqgh/VbVWt2h0AClBKBiMahozLXZ9v/WamSk9J7r3v/3///9EvHCw3///Zn///9Ewf//+1yZDiB9EsGnu/wUqEAoAFtoG3//+YYtBr///1OEYEF7/4yTEFBSiYrR+Ap7c3///3imr3tSPuA8y/jyPI8B5rMOOXQHIAPwjabORUVfx8P90eahx8UvilPt/pgIFxxwgXHBgosPggGP///FKEAjRcggH///ucVb//985RMf//+//4yTEFBH60sx+PgXj1Cyt//1adNayznqykC76ETyLdiUuaS2sSHnCUS5NaBb7jdvVZ7dnLfNf///+kxykcEBDyxQBKKwp8Yrq////UbDNX/a3tKdGH4AocNf9aur7fN//4yTEHxJTlpx+AqDc9tdFq0utTkOAgj4DSp50f//rb///6KTl4yPur//9Z6l///RkedY+3/xzFTAeFod0nf///oOguMRPVVQ17LctqkNE+ks3/b6Cv6Ptq+pBfyyLWBj/4yTEKBITkpReAeTUeMoPJdTf//+r///61mo7Vq///XY4mq3//UlTNi8b/+RVUoGIaf///YJACGFb//pXKIhCAckuki6tXqqb/X1a+ij3U1501REPEpAAcA+BChS0VS//4yTEMhITjngWAWbVXb//oI///+s8okhbVGv//////1VmWpUACSSSNqAAOIiIiO7u76F3d3dxYAAAAAgAIhFAAmBFAnBWS5fJQuFwuGBogg37fLT/icHwQBAEBn/9Sf//4yTEPBHxMspeANp6////5QBv/9X/5NpN221sok23/3a0K2a6zqtfX51HiwaJ2IkWZTHMpgzgCVoVMHdJ4rjs010OQ5zvQ7/Nm//////6EHN///qOBAQWn///f//r2u7/4yTERxUL9vB+A863FXOf///x1n///1NHrKoNuBKRqdjI1b+1FFlHEqReHqRIsgIEaK+prX/9Dwx/3nI7PNpONNNPMO/9//ODyD///pFQNElaP///T///uyj4vI//Bz//4yTERRGzKrB8A07S+GoOSivZhP6rq716NTrYvvMThPKGOAZ863zXQ5j5qv6KRhe//5v6q5Ojen//k5ABCQf//3MUV1f///////NKKE8fCiz///5pv//+PBmRhZFdERL/4yTEURP7+ph+BJTQOButIOs/qGMYxn8MZTJTNzc4SGdgnV//y97/e9Mlk976D+AeIwEhMOJn2IGg6CZRuO8njsHYaUmmbm7+qnOc5+p1O/+jDCf//9UM3///////oHz/4yTEVBmr+sR+AsrfDsf///Ul/JPkIQnkYiiIwWEIAgog8MHf///ochs1DjkOTnb6HHHD8C0av9LVQ4idzUoYZj1OhMF9uVGpdNSqzrRhznHPdKPyIgOOOfzn1aqfWdb/4yTEQBpL8qBuVhWBf//zdEOWs3o//////9DkLsd///j8MxbzcsQEqmzUocpiscpQnHzGAU1VFF0gttrwnD//TITGrjYYjwAmq6O1WXe01vHwUD/zTTSU1jnrVrD8wRb/4yTEKRN7ksh+AFTKp7a//+YIoWj///6IJQrlDv//+ccd///85///9CppENyZ1P9qEACABrZdTMbDWEyK/2/7qXWUyHA2AAbQUPgtHk29f/8ulwix9Tetu9SKvuaLLz//4yTELhITkoRcAGkg//9RkWjdf///r////U3//+tygKYMwXTv/WTqAFsBEks3/////o2RlPk2hYEb///xYBf///2n0aQk53EBRhAOau/jwFIJIARilxoDBEy/j1hx90r/4yTEOBgTjtR+K8XjaOdp3slWn0/5JyTnQAEE9dGkar0J2V///8xhxv/ATAZHwGhGb/ADA+oNiYIKlBzV1/jqkTokqj//XqotRGcHMNyT///1aqLaX3WzvUkSKI4RCAD/4yTEKhMbjpxuAFrMjAFUCSBsiYl4ljK119LSf377f//ol2///+lV///0Trf/w1UYD7DUXb2AT//9NjHRUDABVTP/+5LzgMhh/t+3V1qjrv0OOOzpz+pEPhaA6DSd//X/4yTEMBIDkqR+ANTA+a3f//67HmCg1n///OVX///1EkeOn/4YbFQcgOCaBZGzalfU/rOqok6AWJASV+nWyqqL62X//ZfetSBwnQMKABNgCBElQWpD//7Kf///psiMqff/4yTEOxFbjoQeA2dIv///3//+ugYlA4rIEY/oKIsJSKn27/Ut3W8IBADQseWb///9f+331F8bQ+wMSHA2poBkGHyEPMGRb//rb//6+qSECIdfT//3NQ7///KlDSQXbsf/4yTESBFDknQOBRU4BQ5PopU1f/rVrGUC/wKJh2FR1O3+v+29X+v0qlHCLiuh3QHlwAs4GjHASCi4jVFnVu//qUf///+if//+3///uhAwdfmdPoJIEg1q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5darhy1zCHWtGkcnEONdl+8bfaprot29B00VUanei39mUtA4on0CmVUkbro/1/7//VbepaYzwub/4yTEqBjj9sB/wWgCARIZscBaLrf/////+6ZZMhUBBYgpPH1f//////RkcajGmzIYBIZ//6/9f3Ut0DQvqWkcc4yBWJwZ4AGYAEwAaCDSMHoKXbougmo6iMixOSI0iqz/4yTElxmr+nAyFqckybJ0C9R3P6/y6uUHJqRlmw/+bC6js4Ls9auy+zJq69qLjyDqFOIQTNMwVb//////cwHiP4A8AT490EEU3QqWrb/17t//62MjA2N01T9EkiAc////4yTEgx7L9nQ0oluI/bu6pZzUVWc36osLC83+zcr4T0nmY5XkEijL0MzfdcpiiH5Yh3a4v9prlP9E38tRWVSmpG60tpq+F+zlXrOpPzsuma2css2qtzOxlVrXM/3/////4yTEWh979sBePktvqVv///////hAwBDUOzuvsm3VCIPHC6pRbGz3VL0q5hYWqW7SI8GNtAT///85m/opzpU2iGsVhYG/05rok5Do1Db5GKFZlxCdVPmYCTfONaaTI33/4yTELxzb+qBePs+GYYp6tLKpdXyprV396lUq0cKRak0dMMd6mHHqcurZrt5rfv/YdLHl2///////6P///7wWi9n5o8xx6VNIq81DjlCwbNLVAMAG1sSitlpoLYc4MLH/4yTEDhVjkoReBRUsE/9fXZlG6bGQywJjgNKLEOKjmRlZR2jzrN6KPyduVILNPRFsvahzNWnanT7uIgoQ2///3t///rSb///qQj4LkNwsBR7P4oEFA9jxAIyPruNBcXD/4yTECxTLiqhWAFUGKH//9DNRUFoBQT/7OyLex7stDjScxnRlZzDT0YjOJyDz0ZjzFdv/HiliM4w08KMRY8H5Rj0Y9GMY9GP/////////ypQl/8kLKgxAgBJIB///8n//4yTEChOa2tB+Lgfi/J/8Yf///7jv///ysPHMZSFIPKQwRQWDxorKtt3gKNJukkxZTM4pDVLOy7PK7y1vlykqNfqHmqHSO9ndvWHeBwAx8Z1VEACwdwUH///sxn///1L/4yTEDhTDjqB+VoXgIfE/6nd2986LwDRt///zs5WOeca09h8TFzVWJS+UO+7IUDmLNm50BHp2HRmpTTU/crN37tnH/////tCgLf//6f//+rC1EAEqtFuuJf//+coTkX//4yTEDhHbkrx+AFTCndt1bnC8AsRf6/6mtdV62td0Mejr80PRnX/+utLIf///3POLkZOWd///nkJ5I3//1njo4LQ3b/6yakJCDt///6xJBMTtv/+zqLo+ATUCkDdLUX//4yTEGRKLknQUA2jYdu3/X9X267LZBRQFzi5wM1VDBYHEDiiD7OqQ/f/pV///9pkfNTBBX//6////rMThk9WQCAah0Jineta5T26FaSmWnywPoMEkw////6nZT9F9uvb/4yTEIREzkoQeAyVAoikAvyAzYYBE8GyX//9X//+utSJkRhFy6n//+tdX///WTBipFqiAq+d0zT41vW4l8wIcja+bXzisK4sCPAFgZoK8liHl/SDauG189fRYrnEniP7/4yTELx3L9pxUA9TUAeiKIIYmK6u7Ox5h6KqGnGuzmEGf///PMLjAAqOheopxr2drfWp7ioNHJ56Kn/Z8+qN///5GLaK7P//+6zFdnZ+i1Ttarjx1Klj1MKftfiqlKwD/4yTEChTr9owiAWjMxQ6FDOhECByyQaqJI6bHEWQWq6nWze9S2///9Rir///rchxsRU8r//60SdDkh4RSUlt//////2WMuLYTyT///80d///6kSgTL00SCCOxsO4iESn/4yTECRKL9rh+AVrPtv+rSmOFLEKMtv1qSqq/2OGp7+yv/pGWm3//+yInw41r///UmOENkgGrul//////+pEay8ZL///90n///1kwxUsqBAgVtYb0f//rnEikHIgWjqv/4yTEERJr8ph8BA7Q/V/VFGwZFguGoki0mQPMY8xXZ/2fno6W///uVEBIz//8xBqBUJjkZv//////zSo6eZ///////6SdKwKSAARcfRGVJmXllWjrNddw5res8LeNatX/4yTEGhiBoqReAHLMdU96mnGwNxarFDTnMEIuqoM6LgQ3F34ppTEqW5blli1VtV6TO9Wl07axuCQHQWFgcAoNN1kv/g27///1q/+SILgmPCqTKF0pA8BGMAT9alJ0dmf/4yTECxRzlpheBQ8QGG6P0a2XSrrRJovEBNAMYbA4wYWQLjQaitI01jTTZ23KDUwufvWtTaPNr6srt9P/9R9P///////saY3//1qawARpMze/8FUACxizWsdtSyoYQPj/4yTEDBDTlsB+A1UmnZev/0ToOghFn/SiXarIrLOFYmf//+pAcC0IghZFf//qeKpUQpa6///zn///9Kt//+qGKTjhc9UAC1m2UHftIgIwaRRv//tzBCgrp+Z7/2s//PT/4yTEGw/iZsh+ApM2Y8w1z0ydQXWMBwnQJydOshe5f97OsnjBEtYR/////9TX1I/hRRQAgJbaB///7Iv///5RVv//+McIAz//37JZkctyocykdSDxEYOFqt6VSmy/Sb7/4yTELhPizrh+LgXhFelG3jnYVMyyjs53st8y2xkdUsay3s7Xfr/1HEBVyvL/pRAI4Iy3Kyk6N//p9lBgRf/p9pvoIR/6Mi0bNbQ5nW1GpV2XWg6KK/c6DyBCDmJA////4yTEMRJr/rR+Apre/6P///9A0NEKv//9v//9bGiV//q/6bObOjANGgf0OT///+KiT/032Wj9lADJf55hyo26pqctH1aXt1eeSFmgP4baZGH///R//9uukYE0QMnTBFv/4yTEOhJbkpReAeLc//6lTExb//9aZcOmhL/ytROBiH9SaQ8rq/X/WgqhFnh85BzRNH2tvo777t/VSXdV61GIyg7BCYF8BoQapIDdT//+7f///dxompP//3yf//8hQKP/4yTEQxDTkngWBMs41YDGhxXBY0mdJVX/pr0zUGgEG1CESUlq///dLWjr3e9JqdIZ0PsBihwGpDBYsNAZwif1f/mVv///Qg0TV///9P///YYER9YX91CUQl6ddpvXKqT/4yTEUhF7knAUBQtUzEmwucAMAiLGiP6v////1M7rOE8H9AwQYDOIgMcDA0RQBoiQ8kkkXb/v6k////////+///7qpkULy1Xt1OLwkjZHVd+r82SYyJgGoQMHibSQRW//4yTEXxGLjmQCAqkp/6v/+30frY2LJMAPCAaM8BrcQElgaaOIkDdB0kP/0UcN////Y3///////OGDHfXVBAAwOvvQxXvelDpsmWAEhhSgmRiiq2tT/////XrMnKYfuCD/4yTEaxFzkmAABQU4AAiFgYmyCzoW0a40S+ul//0DFv///6n///////pKOJL3/qluk0Q4AkWDEYujputrIZRMjYlhAEBooJmXKb0W/+vr/7dSXosscsgoWGgOUgZLgAL/4yTEeBErjlgAAqkoGgLGRWgzZbQst9v/QPq////Mf9hcPrrr/9ZTJsSgRFaSD66VvqmS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", dq = "data:audio/mpeg;base64,SUQzBAAAAAAACgAAAAAAAAAAAAD/40TAAAAAAAAAAAAASW5mbwAAAA8AAABdAAAjoAAICg0QEhUYGh0gIyUoKystMDM1ODs9QENGSEtOTlBTVlhbXmFjZmlrbnFxc3Z5e36BhIaJjI6RlJaWmZyeoaSnqayvsbS3ubm8v8LEx8rMz9LU19rc3N/i5efq7e/y9ff6/f8AAAAATGF2ZiBsYW1lAAAAAAAAAAAAAAAAJAJPAAAAAAAAI6DBOPpYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4yTEAAAAA0gAAAAATEFNRTMuMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVXwBMGzy4P/4yTEUwAAA0gAAAAAG8FoEo/ImZk//h8AfILgGt9aZuhAQAAGIAadGBoy4Wt//ibwxOO8myDm//+tNMuIk+AYA/+/4GGDANAA9cr+h///+XGTTfdPV////+h6DTAuFwT/4yTEpgAAA0gAAAAA7k+bo//////+m7dN0MuIKgcyp0oQzKKMpT2pRoGAwWeyidx7/+ZF4ixYK8fQo+ZEWS6WUzQcoDAggEVwJIw1aSpBAMkMBaUVDUW0Ck4MVHSkfMb/4yTErAAAA0gBQAAAiXf1P6kklJMJF+bfOFgG2YopRIqXVJGSIcYKOp/jnFBbfRRUkXjE8RArJJfzhNof91L/+oyGcJMnTFX/ODcJAuf/TNy6V571nf9f/RVRc1sBwCn/4yTE/xo7+pQBjaABMRl5EzKiQNoSpaYXtYd77xTd6jXPtBM7G5oKdMvl8vixEYNUUC5pHzMmCDArZKorL5fTMSXKhyCJDlgrYIWFXGAOjjGHGHHuXzdRfL5unQ9NP/P/4yTE6SPbHqQBmaAAqSZ082/+ggxgXEG+mmmmnppp/01qrb/9NNNNNNummm//+tFRkxMKYwPf//pVMoL1pEfTtnALSLahoLk/PWx0Na1vj2MxkMGmpS5znO8mBFf43Q7/4yTErCG6/sG9z2gCuCUO7/+tYU5JrEuOqNt6+fQrfNUUf//6nWiij/+ZGRcC3FBb6kkr///1spJL0UUkknomJqYpGReLzoph6LjJKLxkbJdSXWxJHD7JLb///9SazYn/4yTEeCETmtm2W9tGhqYl0ym5M8HW/4NbqhgQUA6kZAw5E5k5h16ClBYsHvyv2xWy5+OrQwOhAA/tj//8O61+Ldmv77/O/+XaaaLw0k3Rvq8L2TQICTlAEiERKRJIl1n/4yTERiCDooRC3I9sBPb///9NaaNvqTSMzJJw9YPwBPwxQHuDIG1MhT//////6sw1OG41HDs3//T////542iMIgWYH4Ph8kYXIBcMsYwhvqBPRTWyg6i1vRroq5NG01T/4yTEFxearsZea89im2XTupIFk31JrQHcQ+rk4L3HcXtKIUrtZV0eDe////ViZMoY//6QIhK3nT///+b/pZnU6yGjppABxEKhhBIn+Q//yqkg0eGVZCkVFhor2sApHkP/4yTECxSLks5eaAuCOCbjId0GXWvyoSAmS0F/zIWYkiTekpRkZIf0hxHxJCmYOeRQV/9TnHGIb/6jhIrFTksb//////+qiIr////////mmc4TFUQqEkzQ4waorqJ8EDT/4yTECxRTmpxWmAXjEcS4gZI/1jcIql/8xEavV7rqLrVPW5cFaIDjMjI1M0lKSWr///6KZibKf/+USRSZP////1Yju3/+yWXf///9URzA0OYMeaoTzKAkA5REjRE0F0D/4yTEDBRrjoRWoAXk2SCm0iihuGtXudFJB5zZf/WRxNm59FOhTXI4XCyLUzVhaASBkUMistB3e7////rqT/+i6nLoxhbZT8////////+qO0w8fQkMBiFGFN922g2cECr/4yTEDRJZynQ03NR8asNN2tJK9JQ6gL2Ikk//MhJkfapGUiJvqdygLOA7oLwrFyprd////6syv/6ZMYBpRb////////zyAqJTKgg1jFWvpuamhywfBGk9oW1moolgMHj/4yTEFhFxxmAA3I58B/HVf9Q+x9LZ9mTWZORZqSJdQIcH/ADEcKGH7f///+rNf/7KSNC5E7////////+uDk2TU03GB0DMKYDkAhDdOCyrb0Z2mgD9C0AWErW/rOBzC8j/4yTEIw/BylwA2yRF9WmZJkiaqqOolE8GCCeZl0v////7//60GIabjR6ht3YYhpFULxRwQ2saMIJlvYb5jh/KMRDIdAjBdt//8goArC/+5yKR43bSTQRDEAPJwkVpv///4yTENxGRykwA2trM///qdVH/+igXB1Gf///6ag0IqxR/48gyYK4IoKxQyspOJFKvkPDI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////uoyNjI2////vAY0y8jUIIUjiAdkCqKTCcWjgXxD/4yTEDxJZyqEeU8tEjJa/0Iw3M/9AoxKJmfbRVFX/11aQ9QLDgQtWqSPEnvJbHr///9GEzv/+KwopB3///1mg7////mQwTQoKiF/nmmYzEIuoqUJx7rFWz6hTxcSP/zH/4yTEGBHZyoAqxEp8FtfrZZ5cpiUGLanNpREAQAyaBYYIGVyP///+tqOb/9JwHA3////AX///94wXeVJVQYiQ0AtTYV0bJfREY9YVbfMArRRTf/rMi6m9VFaaBgIQBun/4yTEIxIBynxUe2Z45GpCxFArcg5itpk2jb///6mWav//TMjAgZ7////Mf///1uCV7UCFxxSegm5DzpkbbSBPY1ReI8GQp//OCZqf0a0RXiTLpokXUikZDXA4owLrmrn/4yTELhIRymwKwKRIsiu3///9dB//3mRmRQcQdf////////1uuNpVB8c7LY5Xm7AtTluVZqTFoAkUwWr/keMszVrovYfQdswTUbHTxmGLAafIITyJftZD////0nR//4v/4yTEOBEB1lwAyCZk4icyv////////+YqEzdqgl1uRCAIJLLNFQZPdNlTAL8EDIn/7mgfQttrUs8swLwmZMmp08fNYm4D7QZsUMx7yb///97so5v/tQaEApQ6IwqLzMT/4yTERxB50lQA1Mp8X1eUhkHpmqkNSJvUtAEIYFnQ7kf+sfAfK7660jJAfxDkmd0TyZAABrIsB9DZ7f///9jU63/2zImED5Pf///7P////JIqDV6/SMFoID0ZLNmFHqX/4yTEWBJR0kgA3igI+YCkgGBx9B9f46hBzJVaZ53F6RxXNmOF5jUPiAlLKRokgq1v///9VJN//6UdRdWa/////////qRVALAgAFAtbwfis3+4VWjSvhu/VpwhB8b+2lT/4yTEYRGJ0kAA2+gIbfvqFTkuzrFUCWGZx3pV/6v8MHKV/+n/9P////S7f/+UCDACAfuGxTu35Tnk3aRYvO1Z9AqErelqtUirdTtUMUUGoKRWXQmImZg7bv//sv/+tlP/4yTEbQ7A6km+0dpc//3Om5d/3/6dH7n////9vX/QCAIFmOAgxgsNDEmWhqe3W1TazVX6v+tfpmoZUF050lgSpCNVs3b37f6v+un//3UTUBDT+n01//8XR7v//o/0XaL/4yTEhRD5zjT82dpYATWgMO7AD1CQilybUzIuvbv32/v7+t5pgmvOmnkBYBAQ/yvb+7+x79Hr//J/+zG+//+hvr+LXIsq33OgRosH+lGa037PtiZu+ggj9SAudReJpfz/4yTElBAxyiRU4loIXOSYocG2Yn9YWRBKOBJUFv35otM0QYWaQUu0n/voIGgfHmJkTQ6hPP/EfpCdyDm5cQwIFA+xemRiao///oNNFv60ZaIgWTVSP///600FpoMr6ln/4yTEpg4Q5i2VVFAARJgkSdUj////7p1pv20V/6RRAosApRsCgAIeF/1xLUbM8LSQrWf48Klb/5Y9/PL/tChQ0o3nOd/fuSg6zNJnLqI7RCpVD2QMAZAzVwAUAF1RJk7/4yTEwCA79qgBj6ABtpbOz3v///010SdFykEAOPAiQkaTjooKb/////+fI4cZYKSTf/////0Tx0vsdIiXTJA36/////0VsyTFIZ8qGKpAoyECMJsqHEq83vowRGrZzq//4yTEkh/Lvpm/2aAAjW8fHRTO22cH8C2bZ3E/jf//71e+QjrJWO8lnT5mA5D6PLyAyEJdNGxXSljS4eilfIxWcz90X/OcIRab/MVxw4ggLAwC8XmD5rjQq5h6MYtv+93/4yTEZSDjusm+fg9jNvr6MehBW3HCx7mW//9laz////+qDcmZcyTHDjCtmkQpFtmforq8R3JN0heOa2sf91fsBsFk0m72dt6BYNjUus9q//MsdzDjf/67vO8pnkI0jSX/4yTENB07ht5eXhsPOplaIqmLDEfojLLW1Jf3Wtlf3zqKv/1ScFEbKZLPJJ/////dfpLNUEqR86aD2IpGSOqdknR///////ZdzEjI7rNEBQ2xCiGxoBVkmMFlIGEeTUX/4yTEEhazisZeaBWDn1PzMOIYcwM0LoaaLjtAcJ9FSvqMCB16ieEycaAuYc0xPGK0Xf/1iFIU//kzgPFl9EOT//9f//+rIUkJv///////+6mopNVSOUiZHhoaGtqwom3/4yTEChFBytZeG9QioAUMt9n2fQKrgLkx5n8jEoF0Wxu3usPAD/6gEYN41Ipd3////+d//zkEcQrpVn/X/+FFAz////JFRa0zxhANmCIl0vISdBB0LKCDF1BB/41RGhf/4yTEGBGhyqBemAWAkv/OCp3/UxeEAnepJKPgMVFYZE+dTJ1bP/6cZX//oYo4V////lhD////Fw0WJJX3BUazjwD4CJoui4sRtqU3+iQTT/1D+JctvrTpic3rppEgEhP/4yTEJBHRytW+aA+CEdxmRS4XjqkV/9jnMAw91b/8oBg+Gv///8Q////xVQNCU6RVA8yQFAVmUfynjcyVMPQX5SQROvUvW4dAIsm//TNA5hWbVWgyKJS9KkOoFIyKETz/4yTELxIByoRWzA58gaj/////Hv/+g4A4aEf///9P///9cmaDTAi1BCveh9lFTCHU9gTTgdxYK92CruXQQ8Amcgy/+sfAgq7t1vnhwLMDhZMSmOUI+BH0cwvKTpMp////4yTEOhIh0mQI2OZl//rLCTt/3zI+Q8ZkrnG1GqXs7F7CuzBCE44Pe71lTbOIxJGgW6An42PP/sRwky0vdSllAkz56ZGxdKwzwWzTIiZVX////9WpL/+hFIkRmv//////4yTERBHZ0mAA2GZk///9Kg6M8uwSyFaBiEhDYMMFgKDlUpTWu4a3lWtCi4L2azOZ4626QYQL4yb0mekF2HUzO1qJoxAIYYcmFt0VL/////q//UcJISc2SP0TXbNJJG7/4yTETxIp0lAA5lpQxCAipAd8Ws6oi3THrPeXsuYyQkH0QBgTZH/SD6Aouav/IoWBk84mxwcACeJ6OZ0/////f//odxAMo3////////45DRrlLIu9DamQbAtQtiNqHLj/4yTEWRHx0kgA20TQjydF5iRYBZoDPRYEmdv5aE4n3bTddmDfVtKKBsXBygB+kUKzm6S6////7buyX/9IwH8tIG4NisiqsBruwYuEYQTO0rWnmNXQfRJkMggDKR2o1qb/4yTEZBF50jgA5qYI+odQt3rW9jgtQaeO50yYMydIqM0A1OFbMVzMtpM9////6qKP/9IzQFfJ1ioF8F1sGfS51R0CJ1QPbmJ5qCexmgVUv/qLy/Wt3OEOBQxuhMTQmiH/4yTEcRJRyiwA5qgJwkIF4j7EhcTS3////qRWdv/qg0oISp////////8nAC0SFYAfBvoBuDa48nH6f22R9f1b+pv7Ckkvq6f3/5L9/Z/MXXWq/X/X//rVAM122AXo+37/4yTEehE5yiQA5Mp8NlbR1KFZGij2b+SdpacR9Xar1uv/JaNqKFfr19H9H/F7OX6KXRtTUdH9KjwQbQ2flwqWmQ4vQv//lz1PatiVV3uSQURdNFonlVfX//r/1N/9/TL/4yTEiAsQ6k5+0EQciJP/q0dGjZ+rr32fXcr6tX+3svHNAaklDoci0pVrpdeemdtrT3p3qcHntOY00iAWLDzVZ9f9tvRu/26+tW8yKxab2VCyOteUR/+j6W9Cd9Cb/Zf/4yTErgyYCk5e0EQAbbwxQceBKST85XukZCLm6cUrOJ59y+1R0yqWtJBSgTkk0btrRvvumnvbbd9m19fXb+VlhSpbboSLogNxC9JrF9fog2825j2h5LEsiv+9a0BuUc//4yTEzg6xyhgA4Fo8FFSDpVUQBxK1pbTbtnbz5S/7+v2Z9ZRR1MtcEKSXtnv7+233r9e3bRut7LUTTXJofuPIqppbbsbICguljDp+u0aQJXL+66KiBU2YiQEaWKeJnkX/4yTE5hC5yhQg4Y4AihcDtrJpawBjREOK/1f1/T6zFMouqmCsWyoA0e0FQemWPXpp73/7UU6dNeqWU9DT8zZUJQmD3vV9yUOGFKSIicgCsEANDnCi1VnbduqlB1ClfgX/4yTE9hURygwg4Fo8ppW5zVIHkLjP5LaWsEcicmRZ//nm+lsiwxRnZgsJ3QMHQJHtiiuI/76nr//r5v675fbnmmuKjhl+h1CRcPISklfVetvJovSSF7ITjK8x7b1PW6n/4yTE9BQBygyg2Fo8ovI1sKqTdrUVpkxBTUUzLjEwMKqqqqoBuNMARkuWEeZqlgUrOucZKFNS9jzPe+gzu/sZ+da5Tf7qP//R3/oQ2tfQ6KM9WyntatdDpioP6p9t3gP/4yTE9xVp3gQA2NQIpZyWYaAAExmab1//84hEaIo5JdykOJHQoiaXAnPgAwKMWLpeh3NvMg0IBoPlzYosWDrwCE7ZhTKZsKEBdoHaY+8mOECxRbdQosXDrzDuYF4uhyL/4yTE9BXx3gAA2FA82yWCkWYLohgG0iw0YJB08wlJqImza7v9VP//XM9mOHDhw4sWLAwgQMGJpQpMDxf9AXFzYHFrdIPg+HxzP7heqbC4ub+bC4ubez/WL/+KfSLzaqD/4yTE4g1QFhm+wMQAYKpqAOqUgGhsi1rQjMIQi36KUpfRSl+it/0MYxgICAQEBASgrEoKgqGv/6sRA0DIKgqCrssDQMgqGv6gaBoGuIgZO/8RA0DQKu/LN+oGj38Ggar/4yTE/xfxAfAA0ExcCk/XQXrUx5NBNS0kXORf//VGcio3dFGB0GDQQPhwTRfs7f//7KZk6WKKGEC0s/ImViMjGGFpf8ief//8zI3SwjIyJ4RpWGGFo8rKOLR5/mZH////4yTE8hORBfBA0kQE/KxEZOlBKOLEOllYkeViMjdLl/kZfzM/KysSPKysMLoyLZlGaa7cKZkYWQ9FM+5P+ndtHTkko0eOtThECAAOAIA8MCo9Onhfp04mFuv4/q/iY+//4yTE9hPg7e2MyEQMhyyC4/gaScOPgcH4NA7GlLf/3TpPUxdX8x9XV/dXdXV/DjRktUwt9oeB0jf0s//9VmmyIGK00rB5lVVVkgZV4HTadZ//6vIgZQBgfEQRl+Ypppr/4yTE+RykFawAsUa8e1mr2+U75T42kQYUegkRODwUArBmhn/SEzISwKIwEJDakf//1kh7HRjTQq3//xVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy7/4yTE2R7qvewAwJA9MTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy7/4yTEsA5A8dAAQAzIMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy7/4yTErAAAA0gAAAAAMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy7/4yTErAAAA0gAAAAAMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy7/4yTErAAAA0gAAAAAMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/4yTErAAAA0gAAAAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/4yTErAAAA0gAAAAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU=", hq = "data:audio/mpeg;base64,SUQzBAAAAAAACgAAAAAAAAAAAAD/40TAAAAAAAAAAAAASW5mbwAAAA8AAAAOAAAGAAAwMDAwMDAwQEBAQEBAQFBQUFBQUFBgYGBgYGBgcHBwcHBwcICAgICAgICQkJCQkJCQoKCgoKCgoKCwsLCwsLCwwMDAwMDAwNDQ0NDQ0NDg4ODg4ODg8PDw8PDw8P////////8AAAAATGF2ZiBsYW1lAAAAAAAAAAAAAAAAJANvAAAAAAAABgAp2DaJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4yTEABEhSigBTGAA+Zmb3vN73/Fhg42JB42ZxkgEAoZBARHTszP/YWH6/6Um9/35mlKU1inbe9/y97/RhZS5gs698Yclg4D4fg/yjv/EBwEFehu5i5zhQHJgXIOwyD//4yTEDhRjCrgBgpgAIBhLHwXkJ0Jw0L4s1MxSF5036ReRRR+hppupJJaJj+RQ0dDj8Jij4uh2/////6mQ/8pnv/MS1////+fb/+Y///lv+QUX//vUZEWSD8QMDA8DDzP/4yTEDxVDkoAD1aAAwMHmADCIABuqFrIYVGZNb/////+oyLxsTQjoA0EB0SYyJ42f//////+iTIAggUCRU1///////6QY4SST///////7piXFNv1vG1OxZxS8Ri6nnmj/4yTEDRQrkmQAByiMDiw0RAZ8HA2NVcl/////+iVD5qUReAVShHMKHIwzQTdv/////+gmRQAJeJ2X///////3NAFwQyBu3///////Ng3QqTr9fy3LIfYgXHMdLU/wbzD/4yTEDxTrklQAByqMoAi6hgcGMxjGeH/////zMxOImpCg2SBq40goCBplQ3QQ//////9MwHLAOHIuFn///////0jEMfDeUm///////58OsIc9//+6jpQIeJ4AqBQMJEL/4yTEDhRLkkgAqCekA5IYwssE6AYFBQaGSx9n/////8yNjUvE0MaBERAaPAAWlERNkf6kx0AcWF42b///////UZgUKMir///////rcUMJM6r+ZZVZqAWZDAWDfARGocL/4yTEDxRLkjAABuiMzdQKCDQtAtrFL/////zE0PmpRF4A8yBkoAhCRhmgm///////rUN0DHHyXKqTf//////2SFAjDZ///////9Fxag5z1bW6AApAIiCJmeqeZll3nbP/4yTEEBRzjjJcDqioLmumF2HvGJBunFGnY69S/+r/rt/+tS2Ph6IGiNiwG6Dt0fqr////X+ZA3mJFJv////39f/UM8PX///////rlIkut/93tr2TLhPjgAxLgDloA+cb/4yTEEREjkhgAoBWkXE4k06urb/b///U61JEyFtgMeCFuNXb/kISRsz3/9en7f//7xWJu/9///p//+RE1erX+pY0kgCopcuYcXJ4ZSu4AMTxFeZpbLGf7f32/0N6larX/4yTEHw6xNgIyCwTEAIGJKuI5bT/Dv5Z+79T5b+vuWd6/p//yrmf+WUxBTUUzLjEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy7/4yTENwAAA0gAAAAAMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy7/4yTEigAAA0gAAAAAMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/4yTErAAAA0gAAAAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/4yTErAAAA0gAAAAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU=", fq = "data:audio/mpeg;base64,SUQzBAAAAAAACgAAAAAAAAAAAAD/40TAAAAAAAAAAAAASW5mbwAAAA8AAAAOAAAGAAAwMDAwMDAwQEBAQEBAQFBQUFBQUFBgYGBgYGBgcHBwcHBwcICAgICAgICQkJCQkJCQoKCgoKCgoKCwsLCwsLCwwMDAwMDAwNDQ0NDQ0NDg4ODg4ODg8PDw8PDw8P////////8AAAAATGF2ZiBsYW1lAAAAAAAAAAAAAAAAJANvAAAAAAAABgBfyYtOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4yTEABDRTiABSUAAn/7XRz2aNHqgUBAMJgADEUbdEAoJA/eEosG4fkALgvHkCgokuKGU73Cf///om4ufAufCJIufAuLgQEIOO//5wSHCexU5zG3QPCO0OgDoDGClCkH/4yTEDxVr6rQBhZAAswBuqGfA7guIGhfHAQY2WMs2X0zRCyloo//VqSMvyfPoJp4+RF38XYtz/////9D/rYqt/yMR/////Sb/+Y//////o///rPoX//pOovGxDQ5EGyT/4yTEDBTjkoAD1aAAABBgbgFANuidhAQUqRUnW/////+sxLpqTIjkAgWBxjwj4rIo///////pF42AJDD0ef///////rEcCjGz///////1sgKFGSNqAAEQT/DAYdG3vM//4yTECxRLjuJeAxSaZOOEWVjHUpSlKXve4AYAYAYAYBwAACAQAgBADgNAaCII4liWJf/5iHkZME0eMZ///////zxJf///////6FP///////2GZ9UAoABj9qqqqpmZmZn/4yTEDBSzkqBUNqTIIkiQMAn2YcKrAOZXq+ztQNTU1NayyxxxxRRRb+iiikkkl//2G6BPjdT///////60RGCbf//////9SifJFf///////qHyVkn//0UkkSaHyNQGgBD/4yTEDBRrjmwAqCmkMH3oDCyPDiBYQCgkCgiJE+il/////5iVTJEuizgFhaBq4TBvpBi6l/uUAMGtE7I///////9RTBAXE+q///////6y0G5IkgBKyFv2QGIx/yKjCwj/4yTEDRVKxuZeE8TSrk5M9ESZix8Z3QkZfiaEEM9CiwBDxzDaCRjkHEKQJOTIrRcyYFxH+PswjVJelyKzorkXrKT///////6AH///////6CG////MVQDkmSFhCg//Utn/4yTEChOrjrWemFsO0VXWpzUIYASOTxQFxkkbGKDCRMJMJMISYSNCM0I0I0ypnfmAot/SWq3+yv//ddvw5x////////6hNjT///////1OIQPKF+/7y3RRdahitpHjxMP/4yTEDhKLknACByiMwnVXRBV1X1v/////6jZFJImQKlAOyTE7GKS///////6h8gZA6iav///////zETeIFf///////qNhIh2pVRfhXlDtpUGFQAclIxeNd4EALiT+Hf//4yTEFhGzimgCByip////7IOyygDe4GNYDLmCaH//////9ZHAElCqbN///////qOhfkdqv//////+o2FOnf//0VHSwNcM8Af/A/LYPRJcG1Q00rM//////1oqWiVgviD/4yTEIhCTklgAoCWkdJGIELZ52/zEGnkSNX///////7izSTb///////3GsW3V3ljTQymkYNeh3QVgjdGko002Ov/////qNkUi8Q0GowFwwg4upN///////Y+A4AO1L///4yTEMhD7kkQABuio/////84JcMJv///////caxJOrNmpp2Z2uLi0FLGjoq4wEqeDuhBkvsV8MzDzGdnZ2OVUVF//1RUUw8xnYFwyzt///////VCRy////////Hn/////4yTEQRCixlgANg7EwaoFKuHZ42pqaIq5SpJcK9YdrKiNEnw7SAk8OtGLbocRJCizLh2LKjc/81JrW3Z2e83NkkJFAR6BoChUSGv//0gsLiMzTEFNRTMuMTAwVVVVVVX/4yTEURC5LfAAM8yMVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU=", Bq = "data:audio/mpeg;base64,SUQzBAAAAAAACgAAAAAAAAAAAAD/40TAAAAAAAAAAAAASW5mbwAAAA8AAAAIAAADwABMTExMTExMTExMTExmZmZmZmZmZmZmZmaAgICAgICAgICAgICAmZmZmZmZmZmZmZmZs7Ozs7Ozs7Ozs7Ozs8zMzMzMzMzMzMzMzObm5ubm5ubm5ubm5ub///////////////8AAAAATGF2ZiBsYW1lAAAAAAAAAAAAAAAAJARDAAAAAAAAA8BH4WKCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4yTEABKQAvZfQRAC////9aDl2c4IAgCAIAmD4Pg+9QIBiDgYKHAQB8H9AIcHwfy4P4f/7+gEAQBAEAfB8H8oCH5cPwfB8EAQBAEAGD4P///Lvu//+/oVAAA4/H39gJD/4yTECBPS6vpfgTgAzP9wFQOP/5cppvzUOOU89zM6abO557/wMHDjpgKC0/ioJQfOppvn/qaahx01vp/3NN0+v//////+gt//isS0Yn9P/ywJv/pV////+sumo/CCws//4yTECxVLQnwBwKgAAwIfwMlNkDLA/AxoMQMRTUDkAiAAAoBwFEASYNC8bf/////////////////1JJJB/gACWOQbkVJ1mRuOkCATAzeGACgcJ2KyJikqJ/////////r/4yTECBJbOmwIqCmskzAlRZgX/AxEcwOKmwEQiC24GPp2B6QogNBwTuMwQcmzRP///+pZgM+IAgYI6Cg8lj7LKpsal0WoIHoDxwoEyMVV////+xfQL4YAGoBgmDkBhkD/4yTEERZTOlABQLAAfBQJoGA0D4GDYoIGhANYGCgEQyIggOeRcnLf/////////////////0TcS0OJAMA0CwYh0lZljtLBdIqLeAgMoAxDQJAQKRaN1f//9//VZOsmAHr/4yTEChUDymQBgKABgA6wB0JYepMAsuAaOAeEIJO6A5YGAAgZ4QPP/+Ti3TUyH//+/////////WIxC5RtFC/+QwgDTD/yaHChH4FlKH//4LDUP//w7IiACPwB8h+ZLQ//4yTECRNLMlwDgWgBzFA+Xv9M8SJcKX/jiHuCSh1AAZA8f/xPSCSRkbGK//81MlJLoq///pLdFTJLSWpH///9X+tEyPo/////0S6iiluSyvUqTEFNRTMuMTAwqqqqqqr/4yTEDgAAA0gBwAAAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo=", uq = "data:audio/mpeg;base64,SUQzBAAAAAAACgAAAAAAAAAAAAD/40TAAAAAAAAAAAAASW5mbwAAAA8AAAARAAAHIAAoKCgoKDU1NTU1NUNDQ0NDQ1BQUFBQUF5eXl5eXmtra2tra3l5eXl5eYaGhoaGhpSUlJSUoaGhoaGhr6+vr6+vvLy8vLy8ysrKysrK19fX19fX5eXl5eXl8vLy8vLy//////8AAAAATGF2ZiBsYW1lAAAAAAAAAAAAAAAAJAM6AAAAAAAAByD/VSCXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4yTEABJhCtpXQRgCkuusaQVyC4AAABArGMbyAMfmMaJ6J+7u7u7uiJ//+7u8CAYGBg/f5R3B/wQBAEP/8uf//xP/5cP/lwcBAEAQBAHwfB8+jhgHwfX//+v6P0kloor/4yTECRM7ytABgJAAkg0QNVEGLyaYTAT4Osd6jILbBdYC4E0iiipLJwuIJpugi3/+1//////////1EYQBJL/5eHahN//LJJvOf//6mT//+PYn////zEunhSQN+BtsCYv/4yTEDxWbOoQJwKgDQNJJcDFQBAFEQGP30BpQugYmBYdKNwPmFylQvG3/////////////////8xICLNG4CICgFEYR8fRRZSRk43QMrgILKhcRWWDVAAEktoBloAE9hWT/4yTECxSa/upeAkSe9hc6xSKNJhHJAuwjkgVRlDBGShsY/////2sXXNtzD17V//1FkY86EO5FcjiFcjHchiHciuRiK6VkVjuRXJf////////84v1qkugBewAH806adFv/4yTECxTh+ux+Asy+XTS5qYHB3ECTHIsc2ad////y0DR5EWEIellumnf/+2y2y+a/3/8FAh4SKTCQYxIiVaJxcInWidaJzgUKgISA0SCoC///+t/gOgANvtqx7uCR/+f/4yTEChSDKvJeCkVmR7AbAYyQDGSGQDQxANgNjYPOMkP/9Ri+Ho/gODYAyIEDonEDIrWJyjJ0Zba2ukiujHtZbLTyTox3OjLJfS6X///////+j/+KADktoAloAGV9vK//4yTECxUx1um+AlaWkKijVk0qwWiYO2aLoSJ4lEBUTBv//57lqRLDOD55zOv///80UWOKZ6aU1kIp7VHHTRSjiu6aUhZAmDoiABEeWQwDkx////4c+GK3aAQbAAaqqr//4yTECRLRwux+ANSy1QoCAgICq6hQFVVV+//1NBqeLg6dArA3CJFklNnHHERppv//j0ej0lNahpppKCoaWCoKgqdgqCoKnYKgr///9bvFaiY01W0QnQoyphYAlgAGHVr/4yTEEBCLNnQIBylhHpSsW3cgcsgBUN0H//////////////////pmBPi2AAPwGgJcTy8tTkiAaoA94IUctOrV/////////00C+TAucMAAHD4DMRdOAgAQGGR8BzskBor/4yTEIBBbNmQAqCmtM4Q8uGh9v///9ah9ilQCBIZstOy0E2OjoDV4HDIDrMEyKv////////+tllIZ8DAhXA1KQARBcCAIAwKGwN2jwG1RjiyYIO3////SIaMqEgwKIif/4yTEMRBLMkwAqCmtUmWVTY1LozwJKwFCAnEvA1X/////////QTQMyGCFwJDAIjAMEBAXIAUygfdEAUZEpEVSRSb////ZMnSLgGlgJFjFVZdMkTUiQBDEDoDRJCueSP//4yTEQhA7NjAAoCmt//9///P/fj58n5ABTAUKtUQgAy8DOjRrrFU+tSN9+v/9//////v////////90CeHULiTapFToE2A4IAYSUMzjP//+ir//5LRRRR60UaUvJEVDIT/4yTEVBETMhwADmdgIBgZiYFc851FFvR69J1upL6/9X/6n9T+v////////9taNbbqKJBR1ESAX57/BV3kbLo5VmpMQU1FMy4xMDCqqqqqqqqqqqqqqqqqqqpMQU1FMy7/4yTEYhAzLfwACCCwMTAwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy7/4yTEdACQBAAA0AAAMTAwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/4yTErAAAA0gAAAAAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/4yTErAAAA0gAAAAAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo=", mq = "data:audio/mpeg;base64,SUQzBAAAAAAACgAAAAAAAAAAAAD/40TAAAAAAAAAAAAASW5mbwAAAA8AAAAHAAADYABVVVVVVVVVVVVVVVVVVXFxcXFxcXFxcXFxcXFxjo6Ojo6Ojo6Ojo6Ojo6qqqqqqqqqqqqqqqqqqqrHx8fHx8fHx8fHx8fHx+Pj4+Pj4+Pj4+Pj4+Pj//////////////////8AAAAATGF2ZiBsYW1lAAAAAAAAAAAAAAAAJAQXAAAAAAAAA2Bfsez8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4yTEABHA2q43QUAAlGrkAG0OMAAAA8AASBAAYxjzGOoREREp3d3e90pxcG4KwXh/YPvwIGMEAfB8Hz6IIHP/8uf/9UHwfD8Ewff+BAx//////BAw+EvEL1ot/mKX+Xj/4yTEDBQScqgBgaAAcoZ0AIqA0ix1AUaCls8AoCDYCZIqTqRsl//qrRV//pJLRRv///1LRRUkkisLeyx/qF+JSS/4+Q8J0Gv0f//+Xd/od/qV//1l0umpRD0QBAKBgwL/4yTEDhXr/lwBwKgA4GJDaBwxLgZCE4GEgGHKizhBYXETz//////////////6yZIqTAN0gMDjEDGQPAKAIauD5hcRPP//////////////+oyHKI8vGzr/vzsPOEskqBD/4yTECRNj+iQABqkkRqTbHDTkjjni1L0SZ1ndmjb//////7///////VUmXBzxQADQMDkYwNwVDGgsgQcIVJx2///////////////RE9BiY0Nq//+EX/zCH/+Ot01qWu//4yTEDhLj8gQADlskF7SFQ5Ukl2CP3K6S3Z9Wkk//////ot/////W3SfpLOEUSQADwXcbDArLDb/+j//1f///+v+k//9FFFv8yToAsH9///ULCwqzMBUVFRH//////5X/4yTEFQxQBQBMAEQABkVFQTAoqKiooLCwsSd1ioqK/iwsLf/FhZv6xWpMQU1FMy4xMDCqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/4yTENgAAA0gAAAAAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo=", pq = "data:audio/mpeg;base64,SUQzBAAAAAAACgAAAAAAAAAAAAD/40TAAAAAAAAAAAAASW5mbwAAAA8AAAALAAAE4AA7Ozs7Ozs7OztOTk5OTk5OTk5iYmJiYmJiYmJ2dnZ2dnZ2dnaJiYmJiYmJiYmdnZ2dnZ2dnZ2xsbGxsbGxsbHExMTExMTExMTY2NjY2NjY2Njs7Ozs7Ozs7Oz///////////8AAAAATGF2ZiBsYW1lAAAAAAAAAAAAAAAAJAPKAAAAAAAABODo82LkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4yTEABCQ1rWXQSgCA+pQGkGJ/wAAAACAAYxjGMYxkIQhCN5z/nD4fAMAw+LiMHwfB8PggclATB8H35R3/o//qBA5ygIOIfp//////5cH1TD4S8Qv1frRJky/yLCthQr/4yTEEBaMCqQBgaAABlgADR7H0AmAJQyKgAgwoIMSKmt1v/9SRkiiir//SSWj1///1JW1mJkH5CAqP+xDgcHKH+ofYfMkbf/7//7f////oL///Sf//86qAgDUgFAgEcr/4yTECBR7csB/gJgC3Ix+1D/75ZARcgOMsBggDtok+O4A2xAv/xGhEyCDscnP/9rd///97v/9IUKDiln/WQwGx1HazaYlwUERRv/9//92b////y6a/9UQSDSDOvGfkfr/4yTECRTicrTLgZgAKTfmpsaHtXzcihDA4sLq6RDgHWFizAAUAhhASUOl0ybVq/NTZBnQV//poKXSu////2dBAdYyZ7/UPkXAn/0BGqLDP0f////63f6FIJI/9A83+mr/4yTECBQ7bpgLgaAAb/ZOljOhA1BQTm4NhRObG49BEINr/8g5kThOHTf//N0LP///3TUyC3f/WKwJTMP+Xg45L2QW6RGmRff////7O/////mT/9v/JAl5/CXqdv0UEy//4yTEChJacrQBgZgAf5ZJgc0LFxBSosgU2Lj0gbkBwSBPGKJ5L/9JNkVJv//rVddqv//+pdnMh9kmXv+URJF/8oClUQl////9P//9Vf/9Imj6JiL4DAIUAxaSgM7vgDr/4yTEExaT/lgBwKgAyTgMKhADBYGACAQYBEESIo//////////////osYkyTo+gsEBg0RAZdKAW8jlFUY4ZYgxef//////////////6i8KSH2RY2SV///////QTPFkcgP/4yTECxHr+jQAqCmM0wBAMBj0vAahNgBAVDAghcZsdhJEVb/90kTIoi1BALA3V0C2EW4siehvlV///////////////7DPCPjxsv//////5kiXSBCkQQggBQIGoWgscFT/4yTEFhAj8gwAoBtsyIFAzOH//9FvW2u7OUQIMG+ALomA9C0lVVf///9Fv///////9LZSPU8yegwX9qjTizDLQSIgwkCFgZRZgOA4L/////+KijTQVFRZusVMgsLCojP/4yTEKA6g6TwqAE0AP//9Qt/4qKixoChUUFhYWFhW6kxBTUUzLjEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/4yTEQAAAA0gAAAAAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo=", Mq = "data:audio/mpeg;base64,SUQzBAAAAAAACgAAAAAAAAAAAAD/40TAAAAAAAAAAAAASW5mbwAAAA8AAAAMAAAFQAA2NjY2NjY2NklJSUlJSUlJW1tbW1tbW1ttbW1tbW1tbW2AgICAgICAgJKSkpKSkpKSpKSkpKSkpKSktra2tra2trbJycnJycnJydvb29vb29vb2+3t7e3t7e3t//////////8AAAAATGF2ZiBsYW1lAAAAAAAAAAAAAAAAJAQ4AAAAAAAABUCYzqrsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4yTEABBg1slPQxgAIEClt3PRPd0Qvru6IgQAAAAAEO7u7u5oiIX7oiAAAAAAACYPg+D5/ygIAgcg+D4Pg+j/+4EHf/qDH/gh/+Ud//6VAHBRi3FKguAu0wbQbfJILcD/4yTEERYpgsgBimgA36YK9QDhJAlhxEilzvGFEtE2CRBcdYDHNa0wWkbzJIkjEuj1//Go8ktFSJUn8yLfomLg0JdnXyRY9SdV6FdbO79X//9H//9aAgs2IMcyP/W+AwD/4yTECxT6PsABxWgAQsIpanWyrrZKySbF0agk44iWJIcx81Wiq3/XddFReS/9akjhuQCSCZhbhtJdBkt1skt0VOtkrf0vdbJWX1LRHOYlpVBFv/Z8Oav27BS6CcCBQ2//4yTEChOTuuG2YM4+sHg4pAijo8I0lYjlL5xZLsTz9BsLzF///P2cIAcGux//qk42ad2cxUZz0V2X////sn6nuYf/////81v////+eQV2/uRVhVauUAAYAUSQp9niPCH/4yTEDhW7jtWWQctOCJSIiPfoiIju7vfCO79y7vBbqe57/72/ahgGAmjGf//0JoHCN//////+pTC4KPK7///////yEDhP///iT5QEz9YPuB8P3XCcPpLtZbbrKxJQWm3/4yTEChRbPwpeSFS+joepsVSROUbnKq6QTCl8whCE89TNsiKZm2IRN/+RyYf5qqzZppppCLJoqjYCkY7nP///////1av//////dFZSImAhJBZMKUVHvksltAlAvsaiWD/4yTECxPhmtG+GI2gysZLsdU1Xh6lQpRur1eHrxZwEq7LsdXjcPpbGbWlz2///hTRrn/xEs6SLPOiFR4SgI6HSoCPCJZ0Olnhr//rO//9zVa1Fi0txouJMCybCSgb1hD/4yTEDhKBoowqSM54CioLDBhixyaK0fLjNU1CCyJw1av11dvOqrCcr6/q15xxIUmmmiOBEOJ2Ms9Mf/vtPA27//9GLlAYev/qVi4GxB9TOYV51NNrz/mQbmtIs3Z2E0D/4yTEFxHiWoxWMFToMVF+QzRVMZUrzr6tqqWcqCAve3r6TGRyxUGl0dP/9Mx/t/9fNRyqP///tBkRjj3+tQWqjqOoo5qxLB5wr1GMyLgkeyurSt/nWYegoHyOb+3b0ML/4yTEIhKrLpD/QygAAkoxDNZDL+6XWRB7hdv//bTM9DfvTr6C0UEBa/X//////uo0QHpZ/0I4VvAWTy4gfNEoAN+UFohX/YQTBdDv/j5TDUIf/ziEkNQ87//Ih8aKxc7/4yTEKhDKrlgBilAAon//5yzVR6oPk////Oqx2htTlQh//4ZDtVVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/4yTEOQAAA0gBwAAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU=", Cq = "data:audio/mpeg;base64,SUQzBAAAAAAACgAAAAAAAAAAAAD/40TAAAAAAAAAAAAASW5mbwAAAA8AAAAMAAAFQAA2NjY2NjY2NklJSUlJSUlJW1tbW1tbW1ttbW1tbW1tbW2AgICAgICAgJKSkpKSkpKSpKSkpKSkpKSktra2tra2trbJycnJycnJydvb29vb29vb2+3t7e3t7e3t//////////8AAAAATGF2ZiBsYW1lAAAAAAAAAAAAAAAAJAQ4AAAAAAAABUD7ePEWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4yTEABJBnrpfQygAoAAAml7ATIm58RNwAAEIX7oiIn+c5znvnOc/yEkITnPnP+QhCf/IQn/8gcAMDi7iAEATB8Hw/gh/5cCAgGP//8EAQ8QAgGP/6TKrbbaKBQAAP4D/4yTEChTbzwJXj1ACNxNzWNpbF6pXGCcjtl6dUO92rNITvnHHL/mt////////5wuBwfPplwo2/YSH+aahz///////1JB5//cg//kA6Tt//+TG///i0YoAL//w8ARY6OL/4yTECRRqbuGVw0AARQWk1JnEsgoKgoKQEDtUZUZUWGWmmmi1hlpptYtYuaWLWmmm2EoCEmxazTf/////X/////8XO03/+sLFr3MW00IFhoPg9OFIRYABXTKhEfGDi0T/4yTEChRpeuGeGkckrhFEOxPFNJTR4RpCNKZPGJ0VaYRpIgwNm4XLJ3WalMnsI0s/6ApTK/2Z/9AwJQFjIRNBEgFkhD/5TwUPf//W///1uxyA/cxKBjwK7bSyd1UoFbv/4yTECxQCPtRWMdD8kRERHaDDCAIAEHzEb0mfY4AKWFYDxeeqnn7GMf9vMMb//mDopGCrZ///9JCJoL3p+81z3QgBYzfWGP/B8H3+A/R/+CHrwAArYEtlsoVHMzFFFMr/4yTEDhWCxtm+QA9gqr/DKtcFA8NobK1DWzf//LWKqwIp//rKBUi3/+g2UtNmhAS1NNNzTTfZvRxKf//dTdSBMicaNSRrN//9TSX/1u/+z/i4wBOqkjkr1hrlbggUTB7/4yTECxHYhupeGNhKhcNDPGjNVfZhZyx0FTy4lB8tOYhQcFUWJGhrqWdBUiPOywd/1YsVAQdBYqMPBoS6w3/68Rf+Hf/////ytRzHMnGP6mmZjTCeZHpd1wdLBa6Nqq//4yTEFhIaapzWQc0eV0Q/ssqNFWO/l0JUJNWcd4nBjbHHV/6D22Nbtzv+v9X//0v/86wYcWQgV/q7b0zYC20qB2wWKbgDL6zk4a2lRNpx4eDVYWEL+uIaZZp/jhZFVBT/4yTEIBKSbpD+Ggq8iZvn8nVltmjpeItARfr6r/0YENR4Sez/7f7lYSNR39V+iKsVF544Oz3kqgrUAFR93KUyhCi2TSbCWP7lIo0Al1bHJv7K9nKHOwORoOHOqPb/6Uj/4yTEKBDyanQWScT0KBKSzLP+9Q4AJPLhXexltv8j/u///bxQdWOQBkDES2/GbuoVuN1VL9hQMTqL/4hfFWTP5ryFF9DG//9AwNPEX/7f/EoK///EUj7f///ZsuWWUjb/4yTENwyxfmy2GETwVqCqOMJDBQwMEHQWKEhgoIGEcMAyKioJmv/6hZqBgsLN/6AqKipECioqKu/wMEhYWDwCFhYSGwkLCxJMQU1FMy4xMDCqqqqqqqqqqqqqqqqqqqr/4yTEVw/AsRgAAAYEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo=", Qq = "data:audio/mpeg;base64,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";
|
|
2
|
+
function S(V) {
|
|
3
|
+
return V.replace(
|
|
4
|
+
/\s+src\s*=\s*(?:(["'])(romsound:\/\/\d+)\1|(romsound:\/\/\d+)(?=[\s/>]))/gi,
|
|
5
|
+
(q, A, t, r) => ` data-arib-romsound="${t ?? r}"`
|
|
6
|
+
);
|
|
7
|
+
}
|
|
8
|
+
const kq = [
|
|
9
|
+
lq,
|
|
10
|
+
Tq,
|
|
11
|
+
cq,
|
|
12
|
+
gq,
|
|
13
|
+
dq,
|
|
14
|
+
hq,
|
|
15
|
+
fq,
|
|
16
|
+
Bq,
|
|
17
|
+
uq,
|
|
18
|
+
mq,
|
|
19
|
+
pq,
|
|
20
|
+
Mq,
|
|
21
|
+
Cq,
|
|
22
|
+
Qq
|
|
23
|
+
];
|
|
24
|
+
function Rq(V) {
|
|
25
|
+
const q = /^romsound:\/\/(\d+)$/i.exec(String(V ?? ""));
|
|
26
|
+
if (!q) return null;
|
|
27
|
+
const A = Number(q[1]);
|
|
28
|
+
return Number.isInteger(A) ? A : null;
|
|
29
|
+
}
|
|
30
|
+
function K(V) {
|
|
31
|
+
const q = Rq(V);
|
|
32
|
+
return (q === null ? null : kq[q]) ?? null;
|
|
33
|
+
}
|
|
34
|
+
function wq(V) {
|
|
35
|
+
if (V.__ARIB_HTML5_ROMSOUND__) return;
|
|
36
|
+
V.__ARIB_HTML5_ROMSOUND__ = !0;
|
|
37
|
+
const q = V.HTMLMediaElement?.prototype, A = V.Element?.prototype;
|
|
38
|
+
if (!q || !A) return;
|
|
39
|
+
const t = (a) => K(a) ?? String(a), r = (a) => a instanceof V.HTMLMediaElement || !!(V.HTMLSourceElement && a instanceof V.HTMLSourceElement), s = "data-arib-romsound", l = A.getAttribute, g = A.setAttribute, u = A.removeAttribute, h = (a) => l.call(a, s), p = (a, y) => {
|
|
40
|
+
const E = String(y), m = K(E);
|
|
41
|
+
return m ? g.call(a, s, E) : u.call(a, s), m ?? E;
|
|
42
|
+
};
|
|
43
|
+
A.getAttribute = function(a) {
|
|
44
|
+
if (a.toLowerCase() === "src" && r(this)) {
|
|
45
|
+
const y = h(this);
|
|
46
|
+
if (y !== null) return y;
|
|
47
|
+
}
|
|
48
|
+
return l.call(this, a);
|
|
49
|
+
}, A.setAttribute = function(a, y) {
|
|
50
|
+
const E = a.toLowerCase() === "src" && r(this) ? p(this, y) : String(y);
|
|
51
|
+
g.call(this, a, String(E));
|
|
52
|
+
};
|
|
53
|
+
const M = A.setAttributeNS;
|
|
54
|
+
A.setAttributeNS = function(a, y, E) {
|
|
55
|
+
const m = y.toLowerCase() === "src" && r(this) ? p(this, E) : String(E);
|
|
56
|
+
M.call(this, a, y, String(m));
|
|
57
|
+
}, A.removeAttribute = function(a) {
|
|
58
|
+
a.toLowerCase() === "src" && r(this) && u.call(this, s), u.call(this, a);
|
|
59
|
+
};
|
|
60
|
+
const Q = (a) => {
|
|
61
|
+
if (!a) return;
|
|
62
|
+
const y = Object.getOwnPropertyDescriptor(a, "src");
|
|
63
|
+
return !y?.get || !y.set || Object.defineProperty(a, "src", {
|
|
64
|
+
configurable: !0,
|
|
65
|
+
enumerable: y.enumerable,
|
|
66
|
+
get() {
|
|
67
|
+
return r(this) ? h(this) ?? y.get.call(this) : y.get.call(this);
|
|
68
|
+
},
|
|
69
|
+
set(E) {
|
|
70
|
+
y.set.call(this, r(this) ? p(this, E) : t(E));
|
|
71
|
+
}
|
|
72
|
+
}), y;
|
|
73
|
+
}, C = Q(q);
|
|
74
|
+
Q(V.HTMLSourceElement?.prototype);
|
|
75
|
+
const w = q.play;
|
|
76
|
+
q.play = function() {
|
|
77
|
+
const a = K(h(this) ?? l.call(this, "src"));
|
|
78
|
+
return a && C?.set?.call(this, a), w.call(this);
|
|
79
|
+
};
|
|
80
|
+
const n = (a, y) => {
|
|
81
|
+
if (!a) return;
|
|
82
|
+
const E = Object.getOwnPropertyDescriptor(a, y);
|
|
83
|
+
!E?.get || !E.set || Object.defineProperty(a, y, {
|
|
84
|
+
configurable: !0,
|
|
85
|
+
enumerable: E.enumerable,
|
|
86
|
+
get: E.get,
|
|
87
|
+
set(m) {
|
|
88
|
+
E.set.call(this, S(String(m)));
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
};
|
|
92
|
+
n(A, "innerHTML"), n(A, "outerHTML"), n(V.ShadowRoot?.prototype, "innerHTML");
|
|
93
|
+
const d = A.insertAdjacentHTML;
|
|
94
|
+
A.insertAdjacentHTML = function(a, y) {
|
|
95
|
+
d.call(this, a, S(String(y)));
|
|
96
|
+
};
|
|
97
|
+
const c = V.Range?.prototype;
|
|
98
|
+
if (c) {
|
|
99
|
+
const a = c.createContextualFragment;
|
|
100
|
+
c.createContextualFragment = function(y) {
|
|
101
|
+
return a.call(this, S(String(y)));
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
const f = V.DOMParser?.prototype;
|
|
105
|
+
if (f) {
|
|
106
|
+
const a = f.parseFromString;
|
|
107
|
+
f.parseFromString = function(y, E) {
|
|
108
|
+
return a.call(this, S(String(y)), E);
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
const v = V.Document?.prototype;
|
|
112
|
+
if (v) {
|
|
113
|
+
const a = v.write, y = v.writeln;
|
|
114
|
+
v.write = function(...E) {
|
|
115
|
+
a.apply(this, E.map((m) => S(String(m))));
|
|
116
|
+
}, v.writeln = function(...E) {
|
|
117
|
+
y.apply(this, E.map((m) => S(String(m))));
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
const F = (a) => {
|
|
121
|
+
const y = [];
|
|
122
|
+
r(a) && y.push(a), (a instanceof V.Element || a === V.document) && y.push(...a.querySelectorAll(
|
|
123
|
+
'audio[src^="romsound://"], video[src^="romsound://"], source[src^="romsound://"], audio[data-arib-romsound], video[data-arib-romsound], source[data-arib-romsound]'
|
|
124
|
+
));
|
|
125
|
+
for (const E of y) {
|
|
126
|
+
const U = h(E) ?? l.call(E, "src"), D = K(U);
|
|
127
|
+
D && (E instanceof V.HTMLMediaElement && C?.set ? C.get?.call(E) !== D && C.set.call(E, D) : l.call(E, "src") !== D && g.call(E, "src", D));
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
new V.MutationObserver((a) => {
|
|
131
|
+
for (const y of a) {
|
|
132
|
+
y.type === "attributes" && F(y.target);
|
|
133
|
+
for (const E of y.addedNodes) F(E);
|
|
134
|
+
}
|
|
135
|
+
}).observe(V.document.documentElement, {
|
|
136
|
+
attributes: !0,
|
|
137
|
+
attributeFilter: ["src", "data-arib-romsound"],
|
|
138
|
+
childList: !0,
|
|
139
|
+
subtree: !0
|
|
140
|
+
}), F(V.document);
|
|
141
|
+
}
|
|
142
|
+
const vq = "data:font/woff;base64,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", Uq = "U+1F19B-1F1AC";
|
|
143
|
+
function Dq(V) {
|
|
144
|
+
if (V.__ARIB_HTML5_SYMBOL_FONT__) return;
|
|
145
|
+
V.__ARIB_HTML5_SYMBOL_FONT__ = !0;
|
|
146
|
+
const q = V.document.createElement("style");
|
|
147
|
+
q.dataset.aribRuntime = "symbol-font";
|
|
148
|
+
const A = ["ARIB Symbols", "丸ゴシック", "太丸ゴシック", "角ゴシック"].map((t) => `@font-face {
|
|
149
|
+
font-family: "${t}";
|
|
150
|
+
src: url("${vq}") format("woff");
|
|
151
|
+
font-style: normal;
|
|
152
|
+
font-weight: normal;
|
|
153
|
+
font-display: block;
|
|
154
|
+
unicode-range: ${Uq};
|
|
155
|
+
}`).join(`
|
|
156
|
+
`);
|
|
157
|
+
q.textContent = `${A}
|
|
158
|
+
:root { --arib-symbol-font: "ARIB Symbols"; }
|
|
159
|
+
`, (V.document.head ?? V.document.documentElement).append(q);
|
|
160
|
+
}
|
|
161
|
+
function Iq(V, q) {
|
|
162
|
+
if (!q || V.__ARIB_HTML5_BROADCAST_CLOCK__) return;
|
|
163
|
+
V.__ARIB_HTML5_BROADCAST_CLOCK__ = !0;
|
|
164
|
+
const A = V.Date, t = () => {
|
|
165
|
+
try {
|
|
166
|
+
const s = Number(q());
|
|
167
|
+
return Number.isFinite(s) ? s : A.now();
|
|
168
|
+
} catch {
|
|
169
|
+
return A.now();
|
|
170
|
+
}
|
|
171
|
+
}, r = function(...s) {
|
|
172
|
+
const l = s.length === 0 ? [t()] : s;
|
|
173
|
+
return new.target ? Reflect.construct(A, l, new.target) : new A(t()).toString();
|
|
174
|
+
};
|
|
175
|
+
Object.setPrototypeOf(r, A), Object.defineProperty(r, "prototype", {
|
|
176
|
+
value: A.prototype
|
|
177
|
+
}), Object.defineProperty(r, "now", {
|
|
178
|
+
configurable: !0,
|
|
179
|
+
value: t
|
|
180
|
+
}), Object.defineProperty(V, "Date", {
|
|
181
|
+
configurable: !0,
|
|
182
|
+
writable: !0,
|
|
183
|
+
value: r
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
const bq = "/data-broadcast/";
|
|
187
|
+
function aq(V, q) {
|
|
188
|
+
const A = new URL(V ?? bq, q);
|
|
189
|
+
if (!/^https?:$/.test(A.protocol))
|
|
190
|
+
throw new TypeError(`Broadcast base URL must use HTTP(S): ${A.href}`);
|
|
191
|
+
return A.pathname.endsWith("/") || (A.pathname += "/"), A.search = "", A.hash = "", A;
|
|
192
|
+
}
|
|
193
|
+
function Sq(V, q) {
|
|
194
|
+
const A = new URL(V, q);
|
|
195
|
+
if (A.origin !== q.origin || !A.pathname.startsWith(q.pathname))
|
|
196
|
+
return new URL(q.href);
|
|
197
|
+
const t = A.pathname.slice(q.pathname.length).replace(/^\/+/, ""), r = t.indexOf("/");
|
|
198
|
+
if (r <= 0) return new URL(q.href);
|
|
199
|
+
const s = new URL(q.href);
|
|
200
|
+
return s.pathname = `${q.pathname}${t.slice(0, r)}/`, s.search = "", s.hash = "", s;
|
|
201
|
+
}
|
|
202
|
+
function sq(V, q, A = q) {
|
|
203
|
+
const t = new URL(V, q);
|
|
204
|
+
if (t.origin !== q.origin || !/^https?:$/.test(t.protocol)) return t;
|
|
205
|
+
if (!t.pathname.startsWith(q.pathname)) {
|
|
206
|
+
const r = t.pathname.replace(/^\/+/, ""), s = A.pathname.startsWith(q.pathname) ? A.pathname.slice(q.pathname.length).replace(/^\/+|\/+$/g, "") : "", l = s && (r === s || r.startsWith(`${s}/`));
|
|
207
|
+
t.pathname = `${l ? q.pathname : A.pathname}${r}`;
|
|
208
|
+
}
|
|
209
|
+
return t;
|
|
210
|
+
}
|
|
211
|
+
function Fq(V, q, A) {
|
|
212
|
+
const t = A ?? {
|
|
213
|
+
async store(n, d) {
|
|
214
|
+
const c = await V.fetch(n, {
|
|
215
|
+
cache: "reload",
|
|
216
|
+
credentials: "same-origin",
|
|
217
|
+
signal: d.signal
|
|
218
|
+
});
|
|
219
|
+
if (!c.ok) throw new Error(`Broadcast resource returned HTTP ${c.status}`);
|
|
220
|
+
await c.arrayBuffer();
|
|
221
|
+
}
|
|
222
|
+
}, r = /* @__PURE__ */ new Map(), s = /* @__PURE__ */ new Map();
|
|
223
|
+
let l = !1;
|
|
224
|
+
const g = (n) => q(n).href, u = (n, d, c) => V.queueMicrotask(() => d(n, c)), h = (n, d) => {
|
|
225
|
+
for (const c of n.paths)
|
|
226
|
+
for (const f of r.get(c) ?? []) u(c, f, d);
|
|
227
|
+
}, p = (n) => {
|
|
228
|
+
try {
|
|
229
|
+
Promise.resolve(t.release?.(n)).catch(() => {
|
|
230
|
+
});
|
|
231
|
+
} catch {
|
|
232
|
+
}
|
|
233
|
+
}, M = (n) => {
|
|
234
|
+
n.generation += 1, n.controller?.abort(), n.controller = void 0, s.delete(n.url), p(n.url);
|
|
235
|
+
}, Q = (n, d) => {
|
|
236
|
+
n.controller?.abort();
|
|
237
|
+
const c = new V.AbortController(), f = ++n.generation;
|
|
238
|
+
n.controller = c, n.state = "loading", Promise.resolve(t.store(n.url, { signal: c.signal })).then(
|
|
239
|
+
() => {
|
|
240
|
+
l || c.signal.aborted || n.generation !== f || (n.controller = void 0, n.state = "stored", h(n, d));
|
|
241
|
+
},
|
|
242
|
+
() => {
|
|
243
|
+
l || c.signal.aborted || n.generation !== f || (n.controller = void 0, n.state = "failed", h(n, "store_failed"));
|
|
244
|
+
}
|
|
245
|
+
);
|
|
246
|
+
}, C = (n, d) => typeof d != "function" || l ? !1 : (r.has(n) || r.set(n, /* @__PURE__ */ new Set()), r.get(n)?.add(d), s.get(g(n))?.state === "stored" && u(n, d, "store_finished"), !0), w = (n) => {
|
|
247
|
+
if (n === void 0) {
|
|
248
|
+
for (const c of [...s.values()]) M(c);
|
|
249
|
+
return !0;
|
|
250
|
+
}
|
|
251
|
+
const d = s.get(g(n));
|
|
252
|
+
return d && M(d), !0;
|
|
253
|
+
};
|
|
254
|
+
return {
|
|
255
|
+
addListener: C,
|
|
256
|
+
removeListener(n, d) {
|
|
257
|
+
return d ? (r.get(n)?.delete(d), r.get(n)?.size === 0 && r.delete(n)) : r.delete(n), !0;
|
|
258
|
+
},
|
|
259
|
+
store(n, d) {
|
|
260
|
+
if (l) return !1;
|
|
261
|
+
const c = g(n);
|
|
262
|
+
let f = s.get(c);
|
|
263
|
+
return f || (f = {
|
|
264
|
+
url: c,
|
|
265
|
+
paths: /* @__PURE__ */ new Set(),
|
|
266
|
+
state: "failed",
|
|
267
|
+
generation: 0
|
|
268
|
+
}, s.set(c, f)), f.paths.add(n), d && C(n, d), f.state === "stored" || f.state !== "loading" && Q(f, "store_finished"), !0;
|
|
269
|
+
},
|
|
270
|
+
release: w,
|
|
271
|
+
change(n, d) {
|
|
272
|
+
const c = s.get(g(n));
|
|
273
|
+
c && (d === "deleted" ? (h(c, "deleted"), M(c)) : Q(c, "updated"));
|
|
274
|
+
},
|
|
275
|
+
dispose() {
|
|
276
|
+
l || (w(), l = !0, r.clear());
|
|
277
|
+
}
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
const Lq = "libaribhtml5", Gq = "0.1.0", Jq = { name: "huggy" }, jq = { modelName: "Huggy ARIB HTML5 Receiver" }, O = {
|
|
281
|
+
name: Lq,
|
|
282
|
+
version: Gq,
|
|
283
|
+
author: Jq,
|
|
284
|
+
aribReceiver: jq
|
|
285
|
+
}, Wq = Object.freeze({
|
|
286
|
+
browsername: O.name,
|
|
287
|
+
browserversion: O.version,
|
|
288
|
+
makerid: O.author.name,
|
|
289
|
+
modelname: O.aribReceiver.modelName
|
|
290
|
+
});
|
|
291
|
+
function xq(V, q = {}) {
|
|
292
|
+
return {
|
|
293
|
+
...Wq,
|
|
294
|
+
...q,
|
|
295
|
+
baseurl: V
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
const Yq = [
|
|
299
|
+
"original_network_id",
|
|
300
|
+
"transport_stream_id",
|
|
301
|
+
"service_id",
|
|
302
|
+
"event_id",
|
|
303
|
+
"f_event_id"
|
|
304
|
+
], Kq = ["start_time", "f_start_time"], Oq = ["duration", "f_duration"];
|
|
305
|
+
function N(V) {
|
|
306
|
+
if (!V || typeof V != "object" || Array.isArray(V))
|
|
307
|
+
throw new TypeError("program information must be an object");
|
|
308
|
+
const q = { ...V };
|
|
309
|
+
for (const A of Yq) {
|
|
310
|
+
const t = q[A];
|
|
311
|
+
if (t !== void 0 && (!Number.isInteger(t) || t < 0 || t > 65535))
|
|
312
|
+
throw new TypeError(`${A} must be an unsigned 16-bit integer`);
|
|
313
|
+
}
|
|
314
|
+
for (const A of Kq) {
|
|
315
|
+
const t = q[A];
|
|
316
|
+
if (t === void 0) continue;
|
|
317
|
+
const r = Object.prototype.toString.call(t) === "[object Date]" ? Number(t.getTime()) : Number.NaN;
|
|
318
|
+
if (!Number.isFinite(r))
|
|
319
|
+
throw new TypeError(`${A} must be a valid Date`);
|
|
320
|
+
q[A] = new Date(r);
|
|
321
|
+
}
|
|
322
|
+
for (const A of Oq) {
|
|
323
|
+
const t = q[A];
|
|
324
|
+
if (t !== void 0 && (!Number.isFinite(t) || t < 0))
|
|
325
|
+
throw new TypeError(`${A} must be a non-negative millisecond duration`);
|
|
326
|
+
}
|
|
327
|
+
return q;
|
|
328
|
+
}
|
|
329
|
+
const Nq = "4194c4ae4730";
|
|
330
|
+
async function Zq(V, q) {
|
|
331
|
+
const A = q ? await q(V) : Nq;
|
|
332
|
+
if (A == null) return "";
|
|
333
|
+
if (typeof A != "string")
|
|
334
|
+
throw new TypeError("receiver device identifier must be a string");
|
|
335
|
+
return A;
|
|
336
|
+
}
|
|
337
|
+
const Pq = {
|
|
338
|
+
VK_0: 48,
|
|
339
|
+
VK_1: 49,
|
|
340
|
+
VK_2: 50,
|
|
341
|
+
VK_3: 51,
|
|
342
|
+
VK_4: 52,
|
|
343
|
+
VK_5: 53,
|
|
344
|
+
VK_6: 54,
|
|
345
|
+
VK_7: 55,
|
|
346
|
+
VK_8: 56,
|
|
347
|
+
VK_9: 57,
|
|
348
|
+
VK_10: 410,
|
|
349
|
+
VK_11: 411,
|
|
350
|
+
VK_12: 412,
|
|
351
|
+
VK_ENTER: 13,
|
|
352
|
+
VK_LEFT: 37,
|
|
353
|
+
VK_UP: 38,
|
|
354
|
+
VK_RIGHT: 39,
|
|
355
|
+
VK_DOWN: 40,
|
|
356
|
+
VK_RED: 403,
|
|
357
|
+
VK_GREEN: 404,
|
|
358
|
+
VK_YELLOW: 405,
|
|
359
|
+
VK_BLUE: 406,
|
|
360
|
+
VK_BACK: 461,
|
|
361
|
+
VK_DBUTTON: 457
|
|
362
|
+
};
|
|
363
|
+
function X(V, q, A) {
|
|
364
|
+
Object.defineProperty(V, q, {
|
|
365
|
+
configurable: !0,
|
|
366
|
+
enumerable: !0,
|
|
367
|
+
value: A
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
function Hq(V, q = {}) {
|
|
371
|
+
if (V.__ARIB_HTML5_RUNTIME__) return;
|
|
372
|
+
V.__ARIB_HTML5_RUNTIME__ = !0, Iq(V, q.now), wq(V), Dq(V);
|
|
373
|
+
const A = aq(
|
|
374
|
+
q.broadcastBaseUrl,
|
|
375
|
+
V.location.href
|
|
376
|
+
);
|
|
377
|
+
if (A.origin !== V.location.origin)
|
|
378
|
+
throw new Error(`Broadcast base URL must be same-origin: ${A.href}`);
|
|
379
|
+
const t = Sq(V.location.href, A), r = (e) => {
|
|
380
|
+
const i = new URL(String(e ?? ""), V.location.href);
|
|
381
|
+
return sq(i, A, t);
|
|
382
|
+
}, s = V.crypto.randomUUID?.() ?? `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`, l = (e, i = {}) => {
|
|
383
|
+
V.parent?.postMessage({
|
|
384
|
+
type: "arib-runtime",
|
|
385
|
+
runtimeId: s,
|
|
386
|
+
event: e,
|
|
387
|
+
...i
|
|
388
|
+
}, "*");
|
|
389
|
+
};
|
|
390
|
+
if (!q.allowExternalNetwork) {
|
|
391
|
+
const e = (T) => {
|
|
392
|
+
try {
|
|
393
|
+
const B = new URL(String(T), V.location.href);
|
|
394
|
+
return /^https?:$/.test(B.protocol) && B.origin !== V.location.origin;
|
|
395
|
+
} catch {
|
|
396
|
+
return !1;
|
|
397
|
+
}
|
|
398
|
+
}, i = V.XMLHttpRequest?.prototype;
|
|
399
|
+
if (i) {
|
|
400
|
+
const T = /* @__PURE__ */ new WeakSet(), B = i.open, R = i.send;
|
|
401
|
+
Object.defineProperty(i, "open", {
|
|
402
|
+
configurable: !0,
|
|
403
|
+
writable: !0,
|
|
404
|
+
value: function(G, b, ...j) {
|
|
405
|
+
return e(b) ? T.add(this) : T.delete(this), Reflect.apply(B, this, [G, b, ...j]);
|
|
406
|
+
}
|
|
407
|
+
}), Object.defineProperty(i, "send", {
|
|
408
|
+
configurable: !0,
|
|
409
|
+
writable: !0,
|
|
410
|
+
value: function(G) {
|
|
411
|
+
if (!T.has(this)) return R.call(this, G);
|
|
412
|
+
V.queueMicrotask(() => this.dispatchEvent(new V.ProgressEvent("error")));
|
|
413
|
+
}
|
|
414
|
+
});
|
|
415
|
+
}
|
|
416
|
+
const o = V.fetch?.bind(V);
|
|
417
|
+
if (o && (V.fetch = (T, B) => {
|
|
418
|
+
const R = T instanceof V.Request ? T.url : T;
|
|
419
|
+
return e(R) ? Promise.reject(new TypeError("External network is offline")) : o(T, B);
|
|
420
|
+
}), typeof V.navigator.sendBeacon == "function") {
|
|
421
|
+
const T = V.navigator.sendBeacon.bind(V.navigator);
|
|
422
|
+
Object.defineProperty(V.navigator, "sendBeacon", {
|
|
423
|
+
configurable: !0,
|
|
424
|
+
value: (B, R) => e(B) ? !1 : T(B, R)
|
|
425
|
+
});
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
for (const [e, i] of Object.entries(Pq)) V[e] = i;
|
|
429
|
+
const g = /* @__PURE__ */ new Map(), u = /* @__PURE__ */ new Set(), h = Fq(
|
|
430
|
+
V,
|
|
431
|
+
(e) => r(e),
|
|
432
|
+
q.resourceStore
|
|
433
|
+
);
|
|
434
|
+
let p = null;
|
|
435
|
+
const M = (e, i) => `${e?.event_message_tag ?? 0}:${i ?? 0}`, Q = /* @__PURE__ */ new Set(), C = /* @__PURE__ */ new Map(), w = (e) => {
|
|
436
|
+
const i = e.match(/\/([0-9a-f]{4})(?:[?#]|$)/i)?.[1];
|
|
437
|
+
return i === void 0 ? null : Number.parseInt(i, 16);
|
|
438
|
+
}, n = (e) => {
|
|
439
|
+
typeof e.isCaptionExistent != "function" && (e.isCaptionExistent = (i) => {
|
|
440
|
+
const o = w(i);
|
|
441
|
+
return o !== null && Q.has(o);
|
|
442
|
+
}), typeof e.addCaptionListener != "function" && (e.addCaptionListener = (i, o) => {
|
|
443
|
+
const T = w(o);
|
|
444
|
+
return typeof i != "function" || T === null ? !1 : (C.set(i, T), !0);
|
|
445
|
+
}), typeof e.removeCaptionListener != "function" && (e.removeCaptionListener = (i) => C.delete(i));
|
|
446
|
+
};
|
|
447
|
+
V.addEventListener("message", (e) => {
|
|
448
|
+
if (!(e.source !== V.parent || e.origin !== V.location.origin) && !(e.data?.type !== "arib-host" || e.data.runtimeId !== s)) {
|
|
449
|
+
if (e.data.event === "caption-tracks") {
|
|
450
|
+
Q.clear();
|
|
451
|
+
for (const i of e.data.componentTags ?? []) {
|
|
452
|
+
const o = Number(i);
|
|
453
|
+
Number.isInteger(o) && Q.add(o);
|
|
454
|
+
}
|
|
455
|
+
return;
|
|
456
|
+
}
|
|
457
|
+
if (e.data.event === "caption-reset") {
|
|
458
|
+
Q.clear(), C.clear();
|
|
459
|
+
return;
|
|
460
|
+
}
|
|
461
|
+
if (e.data.event === "caption-data") {
|
|
462
|
+
const i = Number(e.data.componentTag), o = typeof e.data.payload == "string" ? e.data.payload : JSON.stringify({
|
|
463
|
+
data_type: String(e.data.dataType ?? "0000"),
|
|
464
|
+
TMD: String(e.data.tmd ?? ""),
|
|
465
|
+
data: String(e.data.data ?? "")
|
|
466
|
+
});
|
|
467
|
+
for (const [T, B] of C)
|
|
468
|
+
B === i && T(o);
|
|
469
|
+
return;
|
|
470
|
+
}
|
|
471
|
+
if (e.data.event === "program-info") {
|
|
472
|
+
try {
|
|
473
|
+
p = e.data.value === null ? null : N(e.data.value);
|
|
474
|
+
} catch (i) {
|
|
475
|
+
l("error", { message: `Invalid program information: ${String(i)}` });
|
|
476
|
+
return;
|
|
477
|
+
}
|
|
478
|
+
for (const i of u) queueMicrotask(i);
|
|
479
|
+
return;
|
|
480
|
+
}
|
|
481
|
+
if (e.data.event === "resource-change") {
|
|
482
|
+
const i = e.data.change;
|
|
483
|
+
(i === "updated" || i === "deleted") && h.change(String(e.data.path ?? ""), i);
|
|
484
|
+
return;
|
|
485
|
+
}
|
|
486
|
+
if (e.data.event === "stream-event") {
|
|
487
|
+
const i = e.data.value, o = M(i?.source, i?.message_id);
|
|
488
|
+
for (const T of g.get(o) ?? []) T(i);
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
});
|
|
492
|
+
const d = {
|
|
493
|
+
RED: 1,
|
|
494
|
+
GREEN: 2,
|
|
495
|
+
YELLOW: 4,
|
|
496
|
+
BLUE: 8,
|
|
497
|
+
NAVIGATION: 16,
|
|
498
|
+
DBUTTON: 32,
|
|
499
|
+
value: 0,
|
|
500
|
+
setValue(e) {
|
|
501
|
+
return this.value = e, !0;
|
|
502
|
+
}
|
|
503
|
+
}, c = (e) => {
|
|
504
|
+
let i = String(e ?? "");
|
|
505
|
+
try {
|
|
506
|
+
i = new URL(i, V.location.href).href;
|
|
507
|
+
} catch {
|
|
508
|
+
}
|
|
509
|
+
l("navigation-blocked", {
|
|
510
|
+
url: i
|
|
511
|
+
});
|
|
512
|
+
}, f = (e) => {
|
|
513
|
+
try {
|
|
514
|
+
const i = r(e);
|
|
515
|
+
return i.origin === V.location.origin && /^https?:$/.test(i.protocol) ? i : null;
|
|
516
|
+
} catch {
|
|
517
|
+
return null;
|
|
518
|
+
}
|
|
519
|
+
}, v = () => {
|
|
520
|
+
const e = V.nhksh;
|
|
521
|
+
if (!e || typeof e.lu != "function" || e.__navigationGuarded) return;
|
|
522
|
+
const i = e.lu;
|
|
523
|
+
e.lu = (o, ...T) => {
|
|
524
|
+
const B = f(o);
|
|
525
|
+
return B ? i.call(e, B.href, ...T) : (c(o), !1);
|
|
526
|
+
}, e.__navigationGuarded = !0;
|
|
527
|
+
}, F = {
|
|
528
|
+
keySet: d,
|
|
529
|
+
show: () => !0,
|
|
530
|
+
hide: () => !0,
|
|
531
|
+
activateInput: () => !0,
|
|
532
|
+
deactivateInput: () => !0,
|
|
533
|
+
createApplication: (e) => {
|
|
534
|
+
const i = f(e);
|
|
535
|
+
return i ? (V.location.href = i.href, F) : (c(e), null);
|
|
536
|
+
},
|
|
537
|
+
destroyApplication: () => {
|
|
538
|
+
l("destroy");
|
|
539
|
+
}
|
|
540
|
+
};
|
|
541
|
+
X(V.navigator, "applicationManager", {
|
|
542
|
+
getOwnerApplication: () => F
|
|
543
|
+
});
|
|
544
|
+
const $ = xq(
|
|
545
|
+
A.href,
|
|
546
|
+
q.systemInformation
|
|
547
|
+
);
|
|
548
|
+
X(V.navigator, "receiverDevice", {
|
|
549
|
+
getSystemInformation: () => ({ ...$ }),
|
|
550
|
+
getDeviceIdentifier: (e, i) => {
|
|
551
|
+
queueMicrotask(() => {
|
|
552
|
+
Zq(e, q.getDeviceIdentifier).then(
|
|
553
|
+
i,
|
|
554
|
+
() => i("")
|
|
555
|
+
);
|
|
556
|
+
});
|
|
557
|
+
},
|
|
558
|
+
getCurrentEventInformation: (e) => {
|
|
559
|
+
queueMicrotask(() => e(p ? N(p) : null));
|
|
560
|
+
},
|
|
561
|
+
cacheEvent: {
|
|
562
|
+
addCacheEventListener: (e, i) => h.addListener(e, i),
|
|
563
|
+
storeDataResource: (e, i) => h.store(e, i),
|
|
564
|
+
releaseDataResource: (e) => h.release(e),
|
|
565
|
+
removeCacheEventListener: (e, i) => h.removeListener(e, i)
|
|
566
|
+
},
|
|
567
|
+
streamEvent: {
|
|
568
|
+
addGeneralEventMessageListener: (e, i) => {
|
|
569
|
+
const o = M(e.source, e.message_id);
|
|
570
|
+
return g.has(o) || g.set(o, /* @__PURE__ */ new Set()), g.get(o)?.add(i), !0;
|
|
571
|
+
},
|
|
572
|
+
removeGeneralEventMessageListener: (e, i) => {
|
|
573
|
+
if (!e?.source)
|
|
574
|
+
return g.clear(), !0;
|
|
575
|
+
const o = M(e.source, e.message_id);
|
|
576
|
+
return i ? g.get(o)?.delete(i) : g.delete(o), !0;
|
|
577
|
+
},
|
|
578
|
+
addEventIDUpdateListener: (e) => typeof e != "function" ? !1 : (u.add(e), !0),
|
|
579
|
+
removeEventIDUpdateListener: (e) => (e ? u.delete(e) : u.clear(), !0)
|
|
580
|
+
}
|
|
581
|
+
}), X(V.navigator, "bmlCompat", {
|
|
582
|
+
browserPseudo: {
|
|
583
|
+
readPersistentArray: (e, i) => {
|
|
584
|
+
const o = V.localStorage.getItem(`arib:nvram:${e}`);
|
|
585
|
+
if (!o) return null;
|
|
586
|
+
const T = JSON.parse(o);
|
|
587
|
+
return i.split(",").map((B) => T[B] ?? null);
|
|
588
|
+
},
|
|
589
|
+
writePersistentArray: (e, i, o) => {
|
|
590
|
+
const T = Object.fromEntries(
|
|
591
|
+
i.split(",").map((B, R) => [B, o[R]])
|
|
592
|
+
);
|
|
593
|
+
return V.localStorage.setItem(`arib:nvram:${e}`, JSON.stringify(T)), o.length;
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
});
|
|
597
|
+
const a = () => {
|
|
598
|
+
V.document.documentElement.style.setProperty("background", "transparent", "important"), V.document.body && V.document.body.style.setProperty("background", "transparent", "important");
|
|
599
|
+
}, y = () => {
|
|
600
|
+
const e = V.document.body ? V.getComputedStyle(V.document.body) : V.getComputedStyle(V.document.documentElement);
|
|
601
|
+
l("stage-style", {
|
|
602
|
+
backgroundColor: e.backgroundColor
|
|
603
|
+
});
|
|
604
|
+
}, E = q.mediaPlaneAdapter, m = /* @__PURE__ */ new WeakMap(), U = /* @__PURE__ */ new WeakMap();
|
|
605
|
+
let D = 1, k = null, J = "", x = null, L = null, P = () => {
|
|
606
|
+
};
|
|
607
|
+
const Eq = () => {
|
|
608
|
+
const e = k;
|
|
609
|
+
return !e || typeof V.document.getAnimations != "function" ? !1 : V.document.getAnimations().some((i) => {
|
|
610
|
+
if (i.playState !== "running") return !1;
|
|
611
|
+
const o = i.effect?.target;
|
|
612
|
+
return o instanceof V.Element && (o === e || o.contains(e) || e.contains(o));
|
|
613
|
+
});
|
|
614
|
+
}, I = () => {
|
|
615
|
+
L === null && (L = V.requestAnimationFrame(() => {
|
|
616
|
+
L = null, P(), Eq() && I();
|
|
617
|
+
}));
|
|
618
|
+
}, Y = typeof V.ResizeObserver == "function" ? new V.ResizeObserver(I) : null, qq = (e) => {
|
|
619
|
+
e !== x && (x && Y?.unobserve(x), x = e, e && Y?.observe(e));
|
|
620
|
+
}, Aq = () => {
|
|
621
|
+
const e = V.document.querySelector('meta[name="viewport"]')?.content ?? "", i = Number(e.match(/(?:^|,)\s*width\s*=\s*(\d+)/i)?.[1] ?? 3840), o = Number(e.match(/(?:^|,)\s*height\s*=\s*(\d+)/i)?.[1] ?? 2160);
|
|
622
|
+
return { width: i, height: o };
|
|
623
|
+
}, Vq = (e) => {
|
|
624
|
+
const i = m.get(e);
|
|
625
|
+
if (i) return i;
|
|
626
|
+
const o = `media-plane-${D++}`;
|
|
627
|
+
return m.set(e, o), o;
|
|
628
|
+
}, yq = (e) => {
|
|
629
|
+
const i = [];
|
|
630
|
+
let o = e;
|
|
631
|
+
for (; o; ) {
|
|
632
|
+
const T = V.getComputedStyle(o);
|
|
633
|
+
i.push({
|
|
634
|
+
tagName: o.tagName.toLowerCase(),
|
|
635
|
+
...o.id ? { id: o.id } : {},
|
|
636
|
+
position: T.position,
|
|
637
|
+
zIndex: T.zIndex,
|
|
638
|
+
display: T.display,
|
|
639
|
+
visibility: T.visibility,
|
|
640
|
+
opacity: U.get(o)?.computed ?? Number(T.opacity),
|
|
641
|
+
transform: T.transform
|
|
642
|
+
}), o = o.parentElement;
|
|
643
|
+
}
|
|
644
|
+
return i.reverse();
|
|
645
|
+
}, eq = (e, i) => {
|
|
646
|
+
if (i) {
|
|
647
|
+
U.has(e) || U.set(e, {
|
|
648
|
+
value: e.style.getPropertyValue("opacity"),
|
|
649
|
+
priority: e.style.getPropertyPriority("opacity"),
|
|
650
|
+
computed: Number(V.getComputedStyle(e).opacity)
|
|
651
|
+
}), (e.style.getPropertyValue("opacity") !== "0" || e.style.getPropertyPriority("opacity") !== "important") && e.style.setProperty("opacity", "0", "important");
|
|
652
|
+
return;
|
|
653
|
+
}
|
|
654
|
+
const o = U.get(e);
|
|
655
|
+
o && (o.value ? e.style.setProperty("opacity", o.value, o.priority) : e.style.removeProperty("opacity"), U.delete(e));
|
|
656
|
+
}, H = (e) => {
|
|
657
|
+
try {
|
|
658
|
+
e();
|
|
659
|
+
} catch (i) {
|
|
660
|
+
l("error", {
|
|
661
|
+
message: `Media-plane adapter failed: ${String(i)}`
|
|
662
|
+
});
|
|
663
|
+
}
|
|
664
|
+
}, z = (e) => {
|
|
665
|
+
k && eq(k, !1), E && H(() => E.unmountMediaPlane(e)), k = null;
|
|
666
|
+
};
|
|
667
|
+
P = () => {
|
|
668
|
+
const e = V.document.querySelector(
|
|
669
|
+
'object[type="video/x-arib2-broadcast"], object[data-arib-type="video/x-arib2-broadcast"]'
|
|
670
|
+
);
|
|
671
|
+
if (!e) {
|
|
672
|
+
qq(null);
|
|
673
|
+
const W = k ? Vq(k) : "";
|
|
674
|
+
k && z("slot-removed");
|
|
675
|
+
const rq = Aq(), oq = {
|
|
676
|
+
slotId: W,
|
|
677
|
+
visible: !1,
|
|
678
|
+
x: 0,
|
|
679
|
+
y: 0,
|
|
680
|
+
width: 0,
|
|
681
|
+
height: 0,
|
|
682
|
+
screenWidth: rq.width,
|
|
683
|
+
screenHeight: rq.height,
|
|
684
|
+
layer: { documentOrder: -1, stackingPath: [] }
|
|
685
|
+
}, nq = JSON.stringify(oq);
|
|
686
|
+
nq !== J && (J = nq, l("media-plane", oq));
|
|
687
|
+
return;
|
|
688
|
+
}
|
|
689
|
+
qq(e), n(e);
|
|
690
|
+
const i = e.getBoundingClientRect(), o = V.getComputedStyle(e), T = e.querySelector('param[name="video_src"]')?.value, B = e.querySelector('param[name="audio_src"]')?.value, R = Aq(), G = yq(e), b = {
|
|
691
|
+
slotId: Vq(e),
|
|
692
|
+
visible: o.display !== "none" && o.visibility !== "hidden" && i.width > 0 && i.height > 0 && G.every((W) => W.display !== "none" && W.visibility !== "hidden" && W.opacity > 0),
|
|
693
|
+
x: i.x,
|
|
694
|
+
y: i.y,
|
|
695
|
+
width: i.width,
|
|
696
|
+
height: i.height,
|
|
697
|
+
screenWidth: R.width,
|
|
698
|
+
screenHeight: R.height,
|
|
699
|
+
videoSource: T,
|
|
700
|
+
audioSource: B,
|
|
701
|
+
layer: {
|
|
702
|
+
documentOrder: Array.from(V.document.querySelectorAll("*")).indexOf(e),
|
|
703
|
+
stackingPath: G
|
|
704
|
+
}
|
|
705
|
+
}, j = JSON.stringify(b);
|
|
706
|
+
e !== k ? (k && z("slot-removed"), k = e, E && H(() => E.mountMediaPlane(e, b))) : j !== J && E && H(() => E.updateMediaPlane(e, b)), eq(e, (E?.renderMode ?? "external") === "external"), j !== J && (J = j, l("media-plane", b));
|
|
707
|
+
};
|
|
708
|
+
const tq = () => {
|
|
709
|
+
v(), y(), a(), P();
|
|
710
|
+
};
|
|
711
|
+
l("installed", { url: V.location.href }), V.document.readyState === "loading" ? V.document.addEventListener("DOMContentLoaded", tq, { once: !0 }) : queueMicrotask(tq), V.document.addEventListener("click", (e) => {
|
|
712
|
+
const o = (e.target instanceof V.Element ? e.target : null)?.closest("a[href]");
|
|
713
|
+
if (!o) return;
|
|
714
|
+
const T = f(o.href);
|
|
715
|
+
T && T.href === o.href || (e.preventDefault(), e.stopImmediatePropagation(), T ? V.location.href = T.href : c(o.href));
|
|
716
|
+
}, !0);
|
|
717
|
+
const iq = new V.MutationObserver(I);
|
|
718
|
+
iq.observe(V.document.documentElement, {
|
|
719
|
+
attributes: !0,
|
|
720
|
+
attributeFilter: ["class", "style", "type", "data-arib-type", "name", "value"],
|
|
721
|
+
childList: !0,
|
|
722
|
+
subtree: !0
|
|
723
|
+
}), Y?.observe(V.document.documentElement), V.addEventListener("resize", I);
|
|
724
|
+
for (const e of [
|
|
725
|
+
"animationstart",
|
|
726
|
+
"animationend",
|
|
727
|
+
"animationcancel",
|
|
728
|
+
"transitionrun",
|
|
729
|
+
"transitionend",
|
|
730
|
+
"transitioncancel"
|
|
731
|
+
])
|
|
732
|
+
V.document.addEventListener(e, I, !0);
|
|
733
|
+
queueMicrotask(I), V.addEventListener("pagehide", () => {
|
|
734
|
+
L !== null && V.cancelAnimationFrame(L), L = null, iq.disconnect(), Y?.disconnect(), V.removeEventListener("resize", I), h.dispose(), z("document-unload"), l("unloading", { url: V.location.href });
|
|
735
|
+
}), V.addEventListener("error", (e) => {
|
|
736
|
+
l("error", {
|
|
737
|
+
message: e.message
|
|
738
|
+
});
|
|
739
|
+
});
|
|
740
|
+
}
|
|
741
|
+
class VA {
|
|
742
|
+
renderMode = "in-object";
|
|
743
|
+
media;
|
|
744
|
+
normalPlayerContainer;
|
|
745
|
+
mountedObject = null;
|
|
746
|
+
constructor(q) {
|
|
747
|
+
this.media = q.media, this.normalPlayerContainer = q.normalPlayerContainer ?? q.parkingContainer, this.media.dataset.aribMediaPlaneContent = "", Object.assign(this.media.style, {
|
|
748
|
+
display: "block",
|
|
749
|
+
width: "100%",
|
|
750
|
+
height: "100%",
|
|
751
|
+
objectFit: "contain",
|
|
752
|
+
background: "#000",
|
|
753
|
+
pointerEvents: "none"
|
|
754
|
+
});
|
|
755
|
+
}
|
|
756
|
+
mountMediaPlane(q, A) {
|
|
757
|
+
this.mountedObject = q, this.normalPlayerContainer && (this.normalPlayerContainer.style.display = "none"), this.media.parentElement !== q && q.append(this.media), this.media.style.visibility = A.visible ? "visible" : "hidden";
|
|
758
|
+
}
|
|
759
|
+
updateMediaPlane(q, A) {
|
|
760
|
+
if (q !== this.mountedObject || this.media.parentElement !== q) {
|
|
761
|
+
this.mountMediaPlane(q, A);
|
|
762
|
+
return;
|
|
763
|
+
}
|
|
764
|
+
this.media.style.visibility = A.visible ? "visible" : "hidden";
|
|
765
|
+
}
|
|
766
|
+
unmountMediaPlane(q) {
|
|
767
|
+
this.mountedObject = null;
|
|
768
|
+
const A = q === "application-exit";
|
|
769
|
+
this.media.style.visibility = A ? "visible" : "hidden", this.normalPlayerContainer ? (this.media.parentElement !== this.normalPlayerContainer && this.normalPlayerContainer.replaceChildren(this.media), Object.assign(this.normalPlayerContainer.style, {
|
|
770
|
+
display: A ? "grid" : "none",
|
|
771
|
+
left: "0%",
|
|
772
|
+
top: "0%",
|
|
773
|
+
width: "100%",
|
|
774
|
+
height: "100%"
|
|
775
|
+
})) : this.media.remove();
|
|
776
|
+
}
|
|
777
|
+
}
|
|
778
|
+
class zq {
|
|
779
|
+
renderMode = "external";
|
|
780
|
+
surface;
|
|
781
|
+
keepVisible;
|
|
782
|
+
constructor(q) {
|
|
783
|
+
this.surface = q.surface, this.keepVisible = q.keepVisible ?? !1;
|
|
784
|
+
}
|
|
785
|
+
mountMediaPlane(q, A) {
|
|
786
|
+
this.apply(A);
|
|
787
|
+
}
|
|
788
|
+
updateMediaPlane(q, A) {
|
|
789
|
+
this.apply(A);
|
|
790
|
+
}
|
|
791
|
+
unmountMediaPlane(q) {
|
|
792
|
+
const A = q === "application-exit" || this.keepVisible;
|
|
793
|
+
Object.assign(this.surface.style, {
|
|
794
|
+
display: A ? "grid" : "none",
|
|
795
|
+
left: "0%",
|
|
796
|
+
top: "0%",
|
|
797
|
+
width: "100%",
|
|
798
|
+
height: "100%"
|
|
799
|
+
});
|
|
800
|
+
}
|
|
801
|
+
apply(q) {
|
|
802
|
+
if (!q.visible) {
|
|
803
|
+
this.unmountMediaPlane("slot-removed");
|
|
804
|
+
return;
|
|
805
|
+
}
|
|
806
|
+
const A = (t, r) => `${t / r * 100}%`;
|
|
807
|
+
Object.assign(this.surface.style, {
|
|
808
|
+
display: "grid",
|
|
809
|
+
left: A(q.x, q.screenWidth),
|
|
810
|
+
top: A(q.y, q.screenHeight),
|
|
811
|
+
width: A(q.width, q.screenWidth),
|
|
812
|
+
height: A(q.height, q.screenHeight)
|
|
813
|
+
});
|
|
814
|
+
}
|
|
815
|
+
}
|
|
816
|
+
function Xq(V) {
|
|
817
|
+
return {
|
|
818
|
+
...V,
|
|
819
|
+
program: V.program ? N(V.program) : void 0
|
|
820
|
+
};
|
|
821
|
+
}
|
|
822
|
+
async function _q(V, q, A) {
|
|
823
|
+
const t = Xq(V);
|
|
824
|
+
if (!q)
|
|
825
|
+
return A?.({ request: t, reason: "unsupported" }), !1;
|
|
826
|
+
try {
|
|
827
|
+
return await q(t) === !1 ? (A?.({ request: t, reason: "rejected" }), !1) : !0;
|
|
828
|
+
} catch (r) {
|
|
829
|
+
return A?.({ request: t, reason: "error", error: r }), !1;
|
|
830
|
+
}
|
|
831
|
+
}
|
|
832
|
+
class eA {
|
|
833
|
+
iframe;
|
|
834
|
+
viewport;
|
|
835
|
+
videoSurface;
|
|
836
|
+
ownerWindow;
|
|
837
|
+
origin;
|
|
838
|
+
onStatus;
|
|
839
|
+
onLifecycle;
|
|
840
|
+
onUrlChange;
|
|
841
|
+
onMediaPlane;
|
|
842
|
+
onVideoPlane;
|
|
843
|
+
mediaPlaneAdapter;
|
|
844
|
+
runtimeMediaPlaneAdapter;
|
|
845
|
+
allowExternalNetwork;
|
|
846
|
+
broadcastBaseUrl;
|
|
847
|
+
resourceStore;
|
|
848
|
+
onOpenProgramGuide;
|
|
849
|
+
onProgramGuideUnavailable;
|
|
850
|
+
systemInformation;
|
|
851
|
+
getDeviceIdentifier;
|
|
852
|
+
resizeObserver;
|
|
853
|
+
activeRuntimeId = null;
|
|
854
|
+
logicalWidth = 3840;
|
|
855
|
+
logicalHeight = 2160;
|
|
856
|
+
captionComponentTags = [];
|
|
857
|
+
programInfo = null;
|
|
858
|
+
broadcastClock = null;
|
|
859
|
+
video = null;
|
|
860
|
+
mediaPlaneEnabled = !1;
|
|
861
|
+
applicationExited = !1;
|
|
862
|
+
destroyed = !1;
|
|
863
|
+
constructor(q) {
|
|
864
|
+
this.iframe = q.iframe, this.viewport = q.viewport, this.videoSurface = q.videoSurface, this.ownerWindow = this.iframe.ownerDocument.defaultView ?? window, this.origin = this.ownerWindow.location.origin, this.onStatus = q.onStatus, this.onLifecycle = q.onLifecycle, this.onUrlChange = q.onUrlChange, this.onMediaPlane = q.onMediaPlane, this.onVideoPlane = q.onVideoPlane, this.mediaPlaneAdapter = q.mediaPlaneAdapter ?? (q.videoSurface ? new zq({
|
|
865
|
+
surface: q.videoSurface,
|
|
866
|
+
keepVisible: q.keepVideoVisible
|
|
867
|
+
}) : void 0);
|
|
868
|
+
const A = this.mediaPlaneAdapter;
|
|
869
|
+
if (this.runtimeMediaPlaneAdapter = A ? {
|
|
870
|
+
renderMode: A.renderMode,
|
|
871
|
+
mountMediaPlane: (t, r) => {
|
|
872
|
+
this.mediaPlaneEnabled && !this.destroyed && A.mountMediaPlane(t, r);
|
|
873
|
+
},
|
|
874
|
+
updateMediaPlane: (t, r) => {
|
|
875
|
+
this.mediaPlaneEnabled && !this.destroyed && A.updateMediaPlane(t, r);
|
|
876
|
+
},
|
|
877
|
+
unmountMediaPlane: (t) => {
|
|
878
|
+
this.mediaPlaneEnabled && !this.destroyed && A.unmountMediaPlane(t);
|
|
879
|
+
}
|
|
880
|
+
} : void 0, this.allowExternalNetwork = q.allowExternalNetwork ?? !1, this.broadcastBaseUrl = aq(
|
|
881
|
+
q.broadcastBaseUrl,
|
|
882
|
+
this.ownerWindow.location.href
|
|
883
|
+
), this.broadcastBaseUrl.origin !== this.origin)
|
|
884
|
+
throw new Error(`Broadcast base URL must be same-origin: ${this.broadcastBaseUrl.href}`);
|
|
885
|
+
this.resourceStore = q.resourceStore, this.onOpenProgramGuide = q.onOpenProgramGuide, this.onProgramGuideUnavailable = q.onProgramGuideUnavailable, this.systemInformation = q.systemInformation, this.getDeviceIdentifier = q.getDeviceIdentifier, this.ownerWindow.addEventListener("message", this.handleRuntimeMessage), this.iframe.addEventListener("load", this.handleFrameLoad), this.resizeObserver = new ResizeObserver(() => this.fitBroadcastCanvas()), this.resizeObserver.observe(this.viewport), this.fitBroadcastCanvas();
|
|
886
|
+
}
|
|
887
|
+
installRuntime(q) {
|
|
888
|
+
this.mediaPlaneEnabled = !this.destroyed && !this.applicationExited, Hq(q, {
|
|
889
|
+
allowExternalNetwork: this.allowExternalNetwork,
|
|
890
|
+
broadcastBaseUrl: this.broadcastBaseUrl.href,
|
|
891
|
+
resourceStore: this.resourceStore,
|
|
892
|
+
mediaPlaneAdapter: this.runtimeMediaPlaneAdapter,
|
|
893
|
+
now: () => this.getBroadcastTime(),
|
|
894
|
+
systemInformation: this.systemInformation,
|
|
895
|
+
getDeviceIdentifier: this.getDeviceIdentifier
|
|
896
|
+
});
|
|
897
|
+
}
|
|
898
|
+
/** @deprecated Pass an AribMediaPlaneAdapter to the constructor. */
|
|
899
|
+
attachVideo(q) {
|
|
900
|
+
if (!this.videoSurface)
|
|
901
|
+
throw new Error("attachVideo() requires the behind-iframe videoSurface fallback");
|
|
902
|
+
this.video = q, q.classList.add("broadcast-video"), q.parentElement !== this.videoSurface && this.videoSurface.replaceChildren(q);
|
|
903
|
+
}
|
|
904
|
+
loadApplication(q, A = "アプリケーション読込中") {
|
|
905
|
+
this.assertAlive();
|
|
906
|
+
const t = sq(q, this.broadcastBaseUrl);
|
|
907
|
+
if (t.origin !== this.origin)
|
|
908
|
+
throw new Error(`External broadcast application URL is not allowed: ${t.href}`);
|
|
909
|
+
this.applicationExited = !1, this.iframe.style.removeProperty("display"), this.invalidateRuntime("document-unload"), this.viewport.style.backgroundColor = "#fff", this.onStatus?.(A), this.onUrlChange?.(t.pathname), this.onLifecycle?.({ type: "loading", url: t.href }), t.searchParams.set("runtime", Date.now().toString()), this.iframe.src = t.href;
|
|
910
|
+
}
|
|
911
|
+
/** Leave data-broadcast mode and restore media to the ordinary player. */
|
|
912
|
+
exitApplication(q = "データ放送終了") {
|
|
913
|
+
this.assertAlive(), !this.applicationExited && (this.applicationExited = !0, this.invalidateRuntime("application-exit"), this.iframe.style.display = "none", this.iframe.src = "about:blank", this.onUrlChange?.(""), this.onStatus?.(q), this.onLifecycle?.({ type: "exited" }));
|
|
914
|
+
}
|
|
915
|
+
dispatchKey(q) {
|
|
916
|
+
this.assertAlive();
|
|
917
|
+
const A = this.iframe.contentWindow;
|
|
918
|
+
if (A)
|
|
919
|
+
try {
|
|
920
|
+
for (const t of ["keydown", "keyup"]) {
|
|
921
|
+
const r = new KeyboardEvent(t, { bubbles: !0, cancelable: !0 });
|
|
922
|
+
Object.defineProperties(r, {
|
|
923
|
+
keyCode: { value: q },
|
|
924
|
+
which: { value: q }
|
|
925
|
+
}), A.document.dispatchEvent(r);
|
|
926
|
+
}
|
|
927
|
+
} catch {
|
|
928
|
+
this.onStatus?.("キー入力を送信できません");
|
|
929
|
+
}
|
|
930
|
+
}
|
|
931
|
+
setCaptionTracks(q) {
|
|
932
|
+
this.captionComponentTags = [...new Set(q.filter(Number.isInteger))], this.postToRuntime("caption-tracks", { componentTags: this.captionComponentTags });
|
|
933
|
+
}
|
|
934
|
+
pushCaption(q) {
|
|
935
|
+
this.postToRuntime("caption-data", q);
|
|
936
|
+
}
|
|
937
|
+
resetCaptions() {
|
|
938
|
+
this.captionComponentTags = [], this.postToRuntime("caption-reset");
|
|
939
|
+
}
|
|
940
|
+
/** Notify a stored carousel resource after the receiver updates or removes it. */
|
|
941
|
+
notifyDataResource(q, A) {
|
|
942
|
+
this.postToRuntime("resource-change", { path: q, change: A });
|
|
943
|
+
}
|
|
944
|
+
setProgramInfo(q) {
|
|
945
|
+
this.programInfo = N(q), this.postToRuntime("program-info", { value: this.programInfo });
|
|
946
|
+
}
|
|
947
|
+
/** Clear stale EIT state while changing services or broadcast sessions. */
|
|
948
|
+
clearProgramInfo() {
|
|
949
|
+
this.programInfo = null, this.postToRuntime("program-info", { value: null });
|
|
950
|
+
}
|
|
951
|
+
/**
|
|
952
|
+
* Ask the receiver host to open its EPG. A WebView host can bridge this to a
|
|
953
|
+
* native activity; an ordinary browser receives a clear unsupported notice.
|
|
954
|
+
*/
|
|
955
|
+
openProgramGuide(q = {
|
|
956
|
+
destination: "program-guide"
|
|
957
|
+
}) {
|
|
958
|
+
return this.assertAlive(), _q(
|
|
959
|
+
q,
|
|
960
|
+
this.onOpenProgramGuide,
|
|
961
|
+
this.reportProgramGuideUnavailable
|
|
962
|
+
);
|
|
963
|
+
}
|
|
964
|
+
/** Set a free-running broadcast clock from an absolute Unix time. */
|
|
965
|
+
setBroadcastTime(q) {
|
|
966
|
+
this.setBroadcastClock({
|
|
967
|
+
epochMilliseconds: q instanceof Date ? q.getTime() : q
|
|
968
|
+
});
|
|
969
|
+
}
|
|
970
|
+
/** Set an absolute clock anchor, optionally projected from the media timeline. */
|
|
971
|
+
setBroadcastClock(q) {
|
|
972
|
+
const A = Number(q.epochMilliseconds), t = q.mediaTimeSeconds === void 0 ? void 0 : Number(q.mediaTimeSeconds);
|
|
973
|
+
if (!Number.isFinite(A))
|
|
974
|
+
throw new TypeError("broadcast epochMilliseconds must be finite");
|
|
975
|
+
if (t !== void 0 && !Number.isFinite(t))
|
|
976
|
+
throw new TypeError("broadcast mediaTimeSeconds must be finite");
|
|
977
|
+
if (q.currentMediaTimeSeconds && t === void 0)
|
|
978
|
+
throw new TypeError("currentMediaTimeSeconds requires mediaTimeSeconds");
|
|
979
|
+
this.broadcastClock = {
|
|
980
|
+
...q,
|
|
981
|
+
epochMilliseconds: A,
|
|
982
|
+
mediaTimeSeconds: t,
|
|
983
|
+
monotonicMilliseconds: this.ownerWindow.performance.now()
|
|
984
|
+
};
|
|
985
|
+
}
|
|
986
|
+
clearBroadcastClock() {
|
|
987
|
+
this.broadcastClock = null;
|
|
988
|
+
}
|
|
989
|
+
getBroadcastTime() {
|
|
990
|
+
const q = this.broadcastClock;
|
|
991
|
+
if (!q) return Date.now();
|
|
992
|
+
if (q.currentMediaTimeSeconds && q.mediaTimeSeconds !== void 0) {
|
|
993
|
+
const A = Number(q.currentMediaTimeSeconds());
|
|
994
|
+
if (Number.isFinite(A))
|
|
995
|
+
return q.epochMilliseconds + (A - q.mediaTimeSeconds) * 1e3;
|
|
996
|
+
}
|
|
997
|
+
return q.epochMilliseconds + (this.ownerWindow.performance.now() - q.monotonicMilliseconds);
|
|
998
|
+
}
|
|
999
|
+
emitStreamEvent(q) {
|
|
1000
|
+
this.postToRuntime("stream-event", { value: q });
|
|
1001
|
+
}
|
|
1002
|
+
destroy() {
|
|
1003
|
+
this.destroyed || (this.destroyed = !0, this.ownerWindow.removeEventListener("message", this.handleRuntimeMessage), this.iframe.removeEventListener("load", this.handleFrameLoad), this.resizeObserver.disconnect(), this.invalidateRuntime("host-destroy"), this.video = null);
|
|
1004
|
+
}
|
|
1005
|
+
handleFrameLoad = () => {
|
|
1006
|
+
if (!this.applicationExited) {
|
|
1007
|
+
try {
|
|
1008
|
+
if (this.iframe.contentWindow?.location.origin === this.origin) return;
|
|
1009
|
+
} catch {
|
|
1010
|
+
}
|
|
1011
|
+
this.invalidateRuntime("document-unload"), this.onStatus?.("通信ページをブロックしました"), this.onLifecycle?.({ type: "frame-blocked", url: this.iframe.src });
|
|
1012
|
+
}
|
|
1013
|
+
};
|
|
1014
|
+
reportProgramGuideUnavailable = (q) => {
|
|
1015
|
+
const A = q.request.destination === "program-detail" ? "このプレーヤーでは放送予定の番組詳細を表示できません。" : "このプレーヤーでは番組表を表示できません。";
|
|
1016
|
+
if (this.onStatus?.(A), this.onProgramGuideUnavailable) {
|
|
1017
|
+
this.onProgramGuideUnavailable(q);
|
|
1018
|
+
return;
|
|
1019
|
+
}
|
|
1020
|
+
this.ownerWindow.alert?.(A);
|
|
1021
|
+
};
|
|
1022
|
+
handleRuntimeMessage = (q) => {
|
|
1023
|
+
if (q.origin !== this.origin) return;
|
|
1024
|
+
const A = q.data;
|
|
1025
|
+
if (!(A?.type !== "arib-runtime" || typeof A.runtimeId != "string")) {
|
|
1026
|
+
if (A.event === "installed") {
|
|
1027
|
+
this.activeRuntimeId = A.runtimeId, this.onUrlChange?.(String(A.url ?? "")), this.postToRuntime("caption-tracks", { componentTags: this.captionComponentTags }), this.programInfo && this.postToRuntime("program-info", { value: this.programInfo }), this.onStatus?.("ランタイム導入済み"), this.onLifecycle?.({
|
|
1028
|
+
type: "installed",
|
|
1029
|
+
url: String(A.url ?? ""),
|
|
1030
|
+
runtimeId: A.runtimeId
|
|
1031
|
+
});
|
|
1032
|
+
return;
|
|
1033
|
+
}
|
|
1034
|
+
if (A.runtimeId === this.activeRuntimeId)
|
|
1035
|
+
switch (A.event) {
|
|
1036
|
+
case "unloading":
|
|
1037
|
+
this.invalidateRuntime("document-unload"), this.onStatus?.("ページ遷移中"), this.onLifecycle?.({ type: "navigating", url: String(A.url ?? "") });
|
|
1038
|
+
return;
|
|
1039
|
+
case "navigation-blocked":
|
|
1040
|
+
this.onStatus?.("外部URLをブロックしました"), this.onUrlChange?.(String(A.url ?? "")), this.onLifecycle?.({
|
|
1041
|
+
type: "navigation-blocked",
|
|
1042
|
+
url: String(A.url ?? "")
|
|
1043
|
+
});
|
|
1044
|
+
return;
|
|
1045
|
+
case "stage-style": {
|
|
1046
|
+
const t = String(A.backgroundColor ?? "");
|
|
1047
|
+
t && t !== "rgba(0, 0, 0, 0)" && t !== "transparent" && (this.viewport.style.backgroundColor = t);
|
|
1048
|
+
return;
|
|
1049
|
+
}
|
|
1050
|
+
case "media-plane":
|
|
1051
|
+
case "video-plane":
|
|
1052
|
+
this.applyMediaPlane(A);
|
|
1053
|
+
return;
|
|
1054
|
+
case "destroy":
|
|
1055
|
+
this.exitApplication("アプリケーション終了");
|
|
1056
|
+
return;
|
|
1057
|
+
case "error":
|
|
1058
|
+
this.onStatus?.(`ランタイムエラー:${String(A.message ?? "")}`), this.onLifecycle?.({ type: "error", message: String(A.message ?? "") });
|
|
1059
|
+
return;
|
|
1060
|
+
default:
|
|
1061
|
+
this.onStatus?.(`ランタイム:${String(A.event ?? "")}`);
|
|
1062
|
+
}
|
|
1063
|
+
}
|
|
1064
|
+
};
|
|
1065
|
+
applyMediaPlane(q) {
|
|
1066
|
+
if (!q.visible) {
|
|
1067
|
+
const t = {
|
|
1068
|
+
slotId: String(q.slotId ?? ""),
|
|
1069
|
+
visible: !1,
|
|
1070
|
+
x: 0,
|
|
1071
|
+
y: 0,
|
|
1072
|
+
width: 0,
|
|
1073
|
+
height: 0,
|
|
1074
|
+
screenWidth: this.logicalWidth,
|
|
1075
|
+
screenHeight: this.logicalHeight,
|
|
1076
|
+
layer: this.readMediaLayer(q.layer)
|
|
1077
|
+
};
|
|
1078
|
+
this.onMediaPlane?.(t), this.onVideoPlane?.(t);
|
|
1079
|
+
return;
|
|
1080
|
+
}
|
|
1081
|
+
const A = {
|
|
1082
|
+
slotId: String(q.slotId ?? ""),
|
|
1083
|
+
visible: !0,
|
|
1084
|
+
x: Number(q.x) || 0,
|
|
1085
|
+
y: Number(q.y) || 0,
|
|
1086
|
+
width: Number(q.width) || 0,
|
|
1087
|
+
height: Number(q.height) || 0,
|
|
1088
|
+
screenWidth: Number(q.screenWidth) || 3840,
|
|
1089
|
+
screenHeight: Number(q.screenHeight) || 2160,
|
|
1090
|
+
videoSource: typeof q.videoSource == "string" ? q.videoSource : void 0,
|
|
1091
|
+
audioSource: typeof q.audioSource == "string" ? q.audioSource : void 0,
|
|
1092
|
+
layer: this.readMediaLayer(q.layer)
|
|
1093
|
+
};
|
|
1094
|
+
this.logicalWidth = A.screenWidth, this.logicalHeight = A.screenHeight, this.viewport.style.aspectRatio = `${this.logicalWidth} / ${this.logicalHeight}`, this.fitBroadcastCanvas(), this.onStatus?.(`映像 ${Math.round(A.width)}×${Math.round(A.height)} / 位置 ${Math.round(A.x)},${Math.round(A.y)}`), this.onMediaPlane?.(A), this.onVideoPlane?.(A);
|
|
1095
|
+
}
|
|
1096
|
+
readMediaLayer(q) {
|
|
1097
|
+
if (!q || typeof q != "object")
|
|
1098
|
+
return { documentOrder: -1, stackingPath: [] };
|
|
1099
|
+
const A = q;
|
|
1100
|
+
return {
|
|
1101
|
+
documentOrder: Number(A.documentOrder) || 0,
|
|
1102
|
+
stackingPath: Array.isArray(A.stackingPath) ? A.stackingPath : []
|
|
1103
|
+
};
|
|
1104
|
+
}
|
|
1105
|
+
postToRuntime(q, A = {}) {
|
|
1106
|
+
this.activeRuntimeId && this.iframe.contentWindow?.postMessage({
|
|
1107
|
+
type: "arib-host",
|
|
1108
|
+
runtimeId: this.activeRuntimeId,
|
|
1109
|
+
event: q,
|
|
1110
|
+
...A
|
|
1111
|
+
}, this.origin);
|
|
1112
|
+
}
|
|
1113
|
+
invalidateRuntime(q) {
|
|
1114
|
+
this.activeRuntimeId = null, this.mediaPlaneEnabled = !1, this.mediaPlaneAdapter?.unmountMediaPlane(q);
|
|
1115
|
+
}
|
|
1116
|
+
fitBroadcastCanvas() {
|
|
1117
|
+
const q = Math.min(
|
|
1118
|
+
this.viewport.clientWidth / this.logicalWidth,
|
|
1119
|
+
this.viewport.clientHeight / this.logicalHeight
|
|
1120
|
+
);
|
|
1121
|
+
this.iframe.style.width = `${this.logicalWidth}px`, this.iframe.style.height = `${this.logicalHeight}px`, this.iframe.style.transform = `scale(${q})`;
|
|
1122
|
+
}
|
|
1123
|
+
assertAlive() {
|
|
1124
|
+
if (this.destroyed) throw new Error("AribReceiverHost has been destroyed");
|
|
1125
|
+
}
|
|
1126
|
+
}
|
|
1127
|
+
function Z(V) {
|
|
1128
|
+
return `/${(V || "/data-broadcast/").replace(/^\/+|\/+$/g, "")}/`;
|
|
1129
|
+
}
|
|
1130
|
+
function $q(V) {
|
|
1131
|
+
return V.replace(/<object\b[^>]*>/gi, (q) => /\btype\s*=\s*(?:["']video\/x-arib2-broadcast["']|video\/x-arib2-broadcast)(?:\s|\/?>)/i.test(q) ? q.replace(
|
|
1132
|
+
/\s+type\s*=\s*(?:["']video\/x-arib2-broadcast["']|video\/x-arib2-broadcast)/i,
|
|
1133
|
+
' data-arib-type="video/x-arib2-broadcast"'
|
|
1134
|
+
).replace(/\s+data\s*=\s*(["'])(.*?)\1/i, " data-arib-data=$1$2$1") : q);
|
|
1135
|
+
}
|
|
1136
|
+
function _(V, q, A) {
|
|
1137
|
+
if (V.startsWith(A)) return V;
|
|
1138
|
+
const t = q.startsWith(A) ? q.slice(A.length).replace(/^\/+|\/+$/g, "") : "", r = V.replace(/^\/+/, "");
|
|
1139
|
+
return t && (r === t || r.startsWith(`${t}/`)) ? `${A}${r}` : `${q}${r}`;
|
|
1140
|
+
}
|
|
1141
|
+
function qA(V, q, A) {
|
|
1142
|
+
const t = Z(q), r = Z(A ?? q);
|
|
1143
|
+
return V.replace(
|
|
1144
|
+
/(\b(?:href|src|action|poster)\s*=\s*)(?:(['"])(\/[^/][^"']*)\2|(\/[^\s>]*))/gi,
|
|
1145
|
+
(s, l, g, u, h) => {
|
|
1146
|
+
const p = u ?? h;
|
|
1147
|
+
if (!p || p.startsWith(t)) return s;
|
|
1148
|
+
const M = _(p, t, r);
|
|
1149
|
+
return g ? `${l}${g}${M}${g}` : `${l}${M}`;
|
|
1150
|
+
}
|
|
1151
|
+
);
|
|
1152
|
+
}
|
|
1153
|
+
function tA(V, q = {}) {
|
|
1154
|
+
const A = Z(q.basePath), t = Z(q.scopePath ?? q.basePath);
|
|
1155
|
+
return V.replace(
|
|
1156
|
+
/url\(\s*(["']?)(\/[^/)][^)]*)\1\s*\)/gi,
|
|
1157
|
+
(r, s, l) => l.startsWith(A) ? r : `url(${s}${_(l, A, t)}${s})`
|
|
1158
|
+
).replace(
|
|
1159
|
+
/(@import\s+)(["'])(\/[^/][^"']*)\2/gi,
|
|
1160
|
+
(r, s, l, g) => g.startsWith(A) ? r : `${s}${l}${_(g, A, t)}${l}`
|
|
1161
|
+
);
|
|
1162
|
+
}
|
|
1163
|
+
function iA(V, q = {}) {
|
|
1164
|
+
const A = qA(
|
|
1165
|
+
S($q(V)),
|
|
1166
|
+
q.basePath,
|
|
1167
|
+
q.scopePath
|
|
1168
|
+
);
|
|
1169
|
+
if (!q.bootstrap) return A;
|
|
1170
|
+
const t = /<head(?:\s[^>]*)?>/i.exec(A);
|
|
1171
|
+
if (!t) return `${q.bootstrap}${A}`;
|
|
1172
|
+
const r = t.index + t[0].length;
|
|
1173
|
+
return `${A.slice(0, r)}${q.bootstrap}${A.slice(r)}`;
|
|
1174
|
+
}
|
|
1175
|
+
function AA(V) {
|
|
1176
|
+
const q = V.data instanceof Uint8Array ? V.data : new Uint8Array(V.data);
|
|
1177
|
+
return {
|
|
1178
|
+
path: String(V.path).replace(/^\/+/, ""),
|
|
1179
|
+
contentType: V.contentType ?? "",
|
|
1180
|
+
data: q.slice()
|
|
1181
|
+
};
|
|
1182
|
+
}
|
|
1183
|
+
class rA {
|
|
1184
|
+
backend;
|
|
1185
|
+
onError;
|
|
1186
|
+
scheduleTask;
|
|
1187
|
+
mirror = /* @__PURE__ */ new Map();
|
|
1188
|
+
queue = [];
|
|
1189
|
+
waiters = [];
|
|
1190
|
+
generation = 0;
|
|
1191
|
+
nextRevision = 0;
|
|
1192
|
+
completedRevision = 0;
|
|
1193
|
+
drainScheduled = !1;
|
|
1194
|
+
ioTail = Promise.resolve();
|
|
1195
|
+
sessionReady = Promise.resolve();
|
|
1196
|
+
constructor(q, A = {}) {
|
|
1197
|
+
this.backend = q, this.onError = A.onError, this.scheduleTask = A.schedule ?? ((t) => {
|
|
1198
|
+
const r = globalThis.scheduler;
|
|
1199
|
+
r ? r.postTask(t, { priority: "background" }).catch((s) => this.onError?.(s)) : globalThis.setTimeout(t, 0);
|
|
1200
|
+
});
|
|
1201
|
+
}
|
|
1202
|
+
beginSession() {
|
|
1203
|
+
return this.generation += 1, this.queue.splice(0), this.mirror.clear(), this.completedRevision = this.nextRevision, this.resolveWaiters(), this.sessionReady = this.appendIo(() => this.backend.begin()), this.sessionReady;
|
|
1204
|
+
}
|
|
1205
|
+
enqueue(q) {
|
|
1206
|
+
const A = AA(q), t = ++this.nextRevision;
|
|
1207
|
+
return this.mirror.set(A.path, A), this.queue.push({ revision: t, generation: this.generation, resource: A }), this.scheduleDrain(), t;
|
|
1208
|
+
}
|
|
1209
|
+
waitFor(q) {
|
|
1210
|
+
return this.completedRevision >= q ? Promise.resolve() : new Promise((A) => this.waiters.push({ revision: q, resolve: A }));
|
|
1211
|
+
}
|
|
1212
|
+
/** Ensure a staged path is readable, replaying the page-owned mirror if needed. */
|
|
1213
|
+
async ensure(q, A = this.nextRevision) {
|
|
1214
|
+
const t = this.generation, r = String(q).replace(/^\/+/, "");
|
|
1215
|
+
if (await this.waitFor(A), await this.sessionReady, t !== this.generation) throw new Error("Broadcast VFS session changed");
|
|
1216
|
+
await this.appendIo(async () => {
|
|
1217
|
+
if (!await this.backend.canRead(r)) {
|
|
1218
|
+
await this.backend.begin();
|
|
1219
|
+
for (const s of this.mirror.values()) await this.backend.put(s);
|
|
1220
|
+
if (!await this.backend.canRead(r))
|
|
1221
|
+
throw new Error(`Broadcast VFS resource is not available: /${r}`);
|
|
1222
|
+
}
|
|
1223
|
+
});
|
|
1224
|
+
}
|
|
1225
|
+
appendIo(q) {
|
|
1226
|
+
const A = this.ioTail.then(q, q);
|
|
1227
|
+
return this.ioTail = A.then(() => {
|
|
1228
|
+
}, () => {
|
|
1229
|
+
}), A;
|
|
1230
|
+
}
|
|
1231
|
+
scheduleDrain() {
|
|
1232
|
+
this.drainScheduled || !this.queue.length || (this.drainScheduled = !0, this.scheduleTask(() => {
|
|
1233
|
+
this.drainScheduled = !1, this.drainOne();
|
|
1234
|
+
}));
|
|
1235
|
+
}
|
|
1236
|
+
async drainOne() {
|
|
1237
|
+
const q = this.queue.shift();
|
|
1238
|
+
if (q)
|
|
1239
|
+
try {
|
|
1240
|
+
await this.sessionReady, q.generation === this.generation && await this.appendIo(() => this.backend.put(q.resource));
|
|
1241
|
+
} catch (A) {
|
|
1242
|
+
this.onError?.(A);
|
|
1243
|
+
} finally {
|
|
1244
|
+
this.completedRevision = Math.max(this.completedRevision, q.revision), this.resolveWaiters(), this.scheduleDrain();
|
|
1245
|
+
}
|
|
1246
|
+
}
|
|
1247
|
+
resolveWaiters() {
|
|
1248
|
+
const q = this.waiters;
|
|
1249
|
+
this.waiters = [];
|
|
1250
|
+
for (const A of q)
|
|
1251
|
+
this.completedRevision >= A.revision ? A.resolve() : this.waiters.push(A);
|
|
1252
|
+
}
|
|
1253
|
+
}
|
|
1254
|
+
class oA {
|
|
1255
|
+
workerUrl;
|
|
1256
|
+
scopeUrl;
|
|
1257
|
+
uniqueBasenameFallback;
|
|
1258
|
+
registration = null;
|
|
1259
|
+
ready = null;
|
|
1260
|
+
constructor(q) {
|
|
1261
|
+
if (this.workerUrl = new URL(q.workerUrl, window.location.href), this.scopeUrl = new URL(q.baseUrl ?? "/data-broadcast/", window.location.href), this.workerUrl.origin !== window.location.origin || this.scopeUrl.origin !== window.location.origin)
|
|
1262
|
+
throw new TypeError("Broadcast VFS worker and base URL must be same-origin");
|
|
1263
|
+
this.scopeUrl.pathname.endsWith("/") || (this.scopeUrl.pathname += "/"), this.scopeUrl.search = "", this.scopeUrl.hash = "", this.uniqueBasenameFallback = q.uniqueBasenameFallback ?? !1;
|
|
1264
|
+
}
|
|
1265
|
+
initialize() {
|
|
1266
|
+
return this.ready ? this.ready : (this.ready = (async () => {
|
|
1267
|
+
if (!("serviceWorker" in navigator))
|
|
1268
|
+
throw new Error("This browser does not support Service Worker");
|
|
1269
|
+
for (const A of await navigator.serviceWorker.getRegistrations())
|
|
1270
|
+
(A.active?.scriptURL ?? A.waiting?.scriptURL ?? A.installing?.scriptURL) === this.workerUrl.href && A.scope !== this.scopeUrl.href && await A.unregister();
|
|
1271
|
+
this.registration = await navigator.serviceWorker.register(this.workerUrl.href, {
|
|
1272
|
+
scope: this.scopeUrl.pathname,
|
|
1273
|
+
updateViaCache: "none"
|
|
1274
|
+
}), await this.registration.update();
|
|
1275
|
+
const q = this.registration.installing ?? this.registration.waiting;
|
|
1276
|
+
if (q && q.state !== "activated" && await this.waitForActivation(q), !this.registration.active) throw new Error("Broadcast VFS worker did not activate");
|
|
1277
|
+
return this.registration;
|
|
1278
|
+
})(), this.ready);
|
|
1279
|
+
}
|
|
1280
|
+
async begin() {
|
|
1281
|
+
await this.request({
|
|
1282
|
+
type: "arib-vfs-begin",
|
|
1283
|
+
uniqueBasenameFallback: this.uniqueBasenameFallback
|
|
1284
|
+
});
|
|
1285
|
+
}
|
|
1286
|
+
async put(q) {
|
|
1287
|
+
const t = (q.data instanceof Uint8Array ? q.data : new Uint8Array(q.data)).slice();
|
|
1288
|
+
await this.request({
|
|
1289
|
+
type: "arib-vfs-put",
|
|
1290
|
+
path: q.path,
|
|
1291
|
+
contentType: q.contentType ?? "",
|
|
1292
|
+
data: t.buffer
|
|
1293
|
+
}, [t.buffer]);
|
|
1294
|
+
}
|
|
1295
|
+
async canRead(q) {
|
|
1296
|
+
return (await this.request({
|
|
1297
|
+
type: "arib-vfs-probe",
|
|
1298
|
+
path: String(q).replace(/^\/+/, "")
|
|
1299
|
+
})).available === !0;
|
|
1300
|
+
}
|
|
1301
|
+
async reset() {
|
|
1302
|
+
await this.request({ type: "arib-vfs-reset" });
|
|
1303
|
+
}
|
|
1304
|
+
async request(q, A = []) {
|
|
1305
|
+
const t = await this.initialize(), r = t.active ?? t.waiting ?? t.installing;
|
|
1306
|
+
if (!r) throw new Error("Broadcast VFS worker is unavailable");
|
|
1307
|
+
return new Promise((s, l) => {
|
|
1308
|
+
const g = new MessageChannel(), u = window.setTimeout(
|
|
1309
|
+
() => l(new Error("Broadcast VFS worker did not respond")),
|
|
1310
|
+
5e3
|
|
1311
|
+
);
|
|
1312
|
+
g.port1.onmessage = (h) => {
|
|
1313
|
+
window.clearTimeout(u), h.data?.ok ? s(h.data) : l(new Error(h.data?.error || "Broadcast VFS worker error"));
|
|
1314
|
+
}, r.postMessage(q, [g.port2, ...A]);
|
|
1315
|
+
});
|
|
1316
|
+
}
|
|
1317
|
+
waitForActivation(q) {
|
|
1318
|
+
return new Promise((A) => {
|
|
1319
|
+
const t = window.setTimeout(() => {
|
|
1320
|
+
q.removeEventListener("statechange", r), A();
|
|
1321
|
+
}, 15e3), r = () => {
|
|
1322
|
+
q.state !== "activated" && q.state !== "redundant" || (window.clearTimeout(t), q.removeEventListener("statechange", r), A());
|
|
1323
|
+
};
|
|
1324
|
+
q.addEventListener("statechange", r);
|
|
1325
|
+
});
|
|
1326
|
+
}
|
|
1327
|
+
}
|
|
1328
|
+
export {
|
|
1329
|
+
eA as AribReceiverHost,
|
|
1330
|
+
zq as BehindIframeMediaPlaneAdapter,
|
|
1331
|
+
rA as BroadcastVfsSession,
|
|
1332
|
+
bq as DEFAULT_BROADCAST_BASE_PATH,
|
|
1333
|
+
Nq as DEFAULT_RECEIVER_DEVICE_IDENTIFIER,
|
|
1334
|
+
VA as DomObjectMediaPlaneAdapter,
|
|
1335
|
+
Wq as RECEIVER_SYSTEM_IDENTITY,
|
|
1336
|
+
oA as ServiceWorkerBroadcastVfs,
|
|
1337
|
+
N as cloneProgramInfo,
|
|
1338
|
+
xq as createReceiverSystemInformation,
|
|
1339
|
+
S as deferRomSoundMarkup,
|
|
1340
|
+
Sq as deriveBroadcastRootUrl,
|
|
1341
|
+
Dq as installAribSymbolFont,
|
|
1342
|
+
Iq as installBroadcastClock,
|
|
1343
|
+
wq as installRomSoundProtocol,
|
|
1344
|
+
Hq as installRuntime,
|
|
1345
|
+
aq as normalizeBroadcastBaseUrl,
|
|
1346
|
+
qA as prefixBroadcastRootAttributes,
|
|
1347
|
+
iA as prepareBroadcastHtml,
|
|
1348
|
+
tA as prepareBroadcastStylesheet,
|
|
1349
|
+
sq as resolveBroadcastUrl,
|
|
1350
|
+
Zq as resolveReceiverDeviceIdentifier,
|
|
1351
|
+
K as resolveRomSoundUrl,
|
|
1352
|
+
$q as rewriteBroadcastObjectMarkup
|
|
1353
|
+
};
|