small patches and updates

Co-authored-by: Cobalt-60 <plastics-eater@users.noreply.github.com>
This commit is contained in:
Russell2259
2024-01-02 17:38:01 -07:00
parent ff5b275ac3
commit 305b7a26b0
13 changed files with 154 additions and 112 deletions
+21 -1
View File
@@ -23,6 +23,26 @@ const swPaths = [
'/assets/js/offline.js'
];
app.get('/cdn/3kh0/*', cors({
origin: false
}), async (req, res, next) => {
let reqTarget = `https://codeberg.org/3kh0/3kh0-assets/raw/branch/main/${req.path.replace('/cdn/3kh0/', '')}`;
const asset = await fetch(reqTarget);
if (asset.status == 200) {
var data = Buffer.from(await asset.arrayBuffer());
const noRewrite = ['.unityweb'];
if (!noRewrite.includes(mime.getExtension(reqTarget))) res.writeHead(200, {
'content-type': mime.getType(reqTarget)
});
if (mime.getType(reqTarget) === 'text/html') data = data + '<script src=\'/assets/js/cdn.inject.js\' preload=\'true\'></script>';
res.end(data);
} else next();
});
app.get('/cdn/*', cors({
origin: false
}), async (req, res, next) => {
@@ -37,7 +57,7 @@ app.get('/cdn/*', cors({
'content-type': mime.getType(reqTarget)
});
if (mime.getType(reqTarget) === 'text/html') data = data + '<script src=\'/assets/js/cdn_inject.js\' preload=\'true\'></script>';
if (mime.getType(reqTarget) === 'text/html') data = data + '<script src=\'/assets/js/cdn.inject.js\' preload=\'true\'></script>';
res.end(data);
} else next();
+6 -11
View File
@@ -2,31 +2,26 @@
{
"name": "Discord",
"image": "/assets/img/discord.png",
"target": "https://discord.com/app",
"proxy": true
"target": "https://discord.com/app"
},
{
"name": "Emulator",
"image": "https://emulatorjs.org/media/logo-light.png",
"target": "https://demo.emulatorjs.org/",
"proxy": true
"target": "https://demo.emulatorjs.org/"
},
{
"name": "Tiktok",
"image": "/assets/img/tiktok.png",
"target": "https://www.tiktok.com/en/",
"proxy": true
"target": "https://www.tiktok.com/en/"
},
{
"name": "Twitch",
"image": "/assets/img/twitch.png",
"target": "https://www.twitch.tv/",
"proxy": true
"target": "https://www.twitch.tv/"
},
{
"name": "Youtube",
"image": "/assets/img/youtube.png",
"target": "https://youtube.com",
"proxy": true
"target": "https://youtube.com"
}
]
]
+8 -8
View File
@@ -1,42 +1,42 @@
[
{
"name": "Blooket",
"source": "/assets/misc/cheats/blooket.html",
"target": "/assets/misc/cheats/blooket.html",
"image": "https://media.discordapp.net/attachments/1118495479802630174/1158062820097802331/latest.png?ex=651ae18c&is=6519900c&hm=544b7a8eb56236327b7bcabfce4b688428d59a63c8e07bcb2aab3ff81c916286&="
},
{
"name": "EdPuzzle",
"source": "/service/hvtrs8%2F-efpwzxlg.js%2Cva%2F",
"target": "https://edpuzzle.hs.vc/",
"image": "https://edpuzzle.imgix.net/edpuzzle-logos/vertical-logo.png"
},
{
"name": "Wordle",
"source": "/assets/misc/cheats/wordle.html",
"target": "/assets/misc/cheats/wordle.html",
"image": "/assets/img/wordle.png"
},
{
"name": "Prodigy",
"source": "/assets/misc/cheats/prodigy.html",
"target": "/assets/misc/cheats/prodigy.html",
"image": "https://webcdn.prodigygame.com/common/images/socialshare.png"
},
{
"name": "Quizizz",
"source": "/service/hvtrs8%2F-qwixiv.mnnile-sgrtiaeq%2Fsukzkzx%2F",
"target": "https://quizit.online/services/quizizz/",
"image": "https://media.discordapp.net/attachments/1118495479802630174/1158062649792286720/Screen_Shot_2023-10-01_at_11.27.24_AM.png?ex=651ae163&is=65198fe3&hm=d9b86e146ddc9e98690822155ccdc2c239d776f1a42fa16447d820e8e34a826b&="
},
{
"name": "Quizlet",
"source": "/assets/misc/cheats/quizlet.html",
"target": "/assets/misc/cheats/quizlet.html",
"image": "https://assets.quizlet.com/a/j/dist/app/i/brandmark/1024.38e7be0a829de8f.png"
},
{
"name": "Gimkit",
"source": "/service/hvtrs8%2F-gktju%60.aoo%2FVhgLcz%7BSsukd-GkmiivCject",
"target": "https://github.com/TheLazySquid/GimkitCheat",
"image": "https://images.crunchbase.com/image/upload/c_lpad,f_auto,q_auto:eco,dpr_1/iin53jlbkmdjjdpjbcde"
},
{
"name": "Skoolvox Helper",
"source": "/service/hvtrs8%2F-gktju%60.aoo%2Fdounvakn-siimvmx%2Fsiomlgdktkol%2Fpenecsgs",
"target": "https://github.com/fowntain/skiovox-skooledition/releases",
"image": "https://raw.githubusercontent.com/fowntain/skiovox-skooledition/main/icon.png"
}
]
+39 -40
View File
@@ -6,7 +6,7 @@
},
{
"name": "1v1.LoL",
"target": "https://codeberg.org/3kh0/3kh0-assets/raw/branch/main/1v1lol/index.html",
"target": "/cdn/3kh0/1v1lol/index.html",
"image": "/assets/img/1v1lol.png",
"popular": true
},
@@ -22,12 +22,12 @@
},
{
"name": "Achievement Unlocked",
"target": "https://codeberg.org/3kh0/3kh0-assets/raw/branch/main/achievementunlocked/index.html",
"image": "https://codeberg.org/3kh0/3kh0-assets/raw/branch/main/achievementunlocked/achievementunlocked.png"
"target": "/cdn/3kh0/achievementunlocked/index.html",
"image": "/cdn/3kh0/achievementunlocked/achievementunlocked.png"
},
{
"name": "Adventure Capitalist",
"target": "/service/hvtrs8%2F-tjal128%3B.eivhwb%2Cim%2Fcdteltwrg-aarivaniqt-",
"target": "https://than1089.github.io/adventure-capitalist/",
"image": "/assets/img/adventurecapitalist.png"
},
{
@@ -52,7 +52,7 @@
},
{
"name": "Ashbelt",
"target": "/service/hvtrs8%2F-untkmctgmgn%2Cgktju%60.ko-gcmgs-aqh%60ent-ildgx%2Chvmn",
"target": "https://ultimatemen.github.io/games/ashbelt/index.html",
"image": "https://f4.bcbits.com/img/a4238131019_10.jpg"
},
{
@@ -72,12 +72,12 @@
},
{
"name": "Backrooms",
"target": "https://codeberg.org/3kh0/3kh0-assets/raw/branch/main/backrooms/index.html",
"target": "/cdn/3kh0/backrooms/index.html",
"image": "/assets/img/backrooms.jpg"
},
{
"name": "Basket Bros",
"target": "https:https://codeberg.org/3kh0/3kh0-assets/raw/branch/main/basketbros-io/index.html",
"target": "https:/cdn/3kh0/basketbros-io/index.html",
"image": "/assets/img/basketbros.jpg"
},
{
@@ -112,7 +112,7 @@
},
{
"name": "Bloons TD 2",
"target": "https://codeberg.org/3kh0/3kh0-assets/raw/branch/main/bloonstd2/index.html",
"target": "/cdn/3kh0/bloonstd2/index.html",
"image": "/assets/img/btd2.png"
},
{
@@ -122,7 +122,7 @@
},
{
"name": "Bob The Robber 2",
"target": "https://codeberg.org/3kh0/3kh0-assets/raw/branch/main/bobtherobber2/index.html",
"target": "/cdn/3kh0/bobtherobber2/index.html",
"image": "/assets/img/btr2.jpeg"
},
{
@@ -132,17 +132,17 @@
},
{
"name": "BuildNow.GG",
"target": "/service/hvtrs8%2F-gcmgs%2Ccpaxyeaoeq.aoo%2Fgn%5DUQ%2F%60uklfnmw%2Fge%2Fknfez.jtol",
"target": "https://games.crazygames.com/en_US/buildnow-gg/index.html",
"image": "https://play-lh.googleusercontent.com/MdtXwEOt43tY6GV3-IHAwhdmoW-jY4B1rqvA0m1Yj89Bj4et8FfWGL3cCt_lkDvWbWk=w240-h480-rw"
},
{
"name": "Candy Jump",
"target": "/service/hvtrs8%2F-ccnfyhuop%2Cgcmgs037.aoo%2F",
"target": "https://candyjump.games235.com/",
"image": "https://www.coolmathgames.com/sites/default/files/styles/pwa_512x512/public/game_m_thumbnail/candy-jump-game-icon.png"
},
{
"name": "Chrome Dino",
"target": "https://codeberg.org/3kh0/3kh0-assets/raw/branch/main/chrome-dino/index.html",
"target": "/cdn/3kh0/chrome-dino/index.html",
"image": "https://img.poki.com/cdn-cgi/image/quality=78,width=600,height=600,fit=cover,f=auto/9afd3b92ab41ffca7f368a8fcbd6d39a75894efe0edbc14cf1f067cf625e6678.png"
},
{
@@ -152,7 +152,7 @@
},
{
"name": "Cluster Truck",
"target": "/service/hvtrs8%2F-wuw%2Cslaie%2Fgcmgs%2Cim%2Fnoaangcmgs-cnuqtgr%2Frwsj%2F",
"target": "https://www.snake-games.io/localgames/cluster-rush/",
"image": "https://image.api.playstation.com/cdn/UP0097/CUSA06481_00/36sNa79pxV859fFg3CU7zFhQ34ThNx8z.png"
},
{
@@ -162,12 +162,12 @@
},
{
"name": "Cubeform",
"target": "/service/hvtrs8%2F-wuw%2Cmctjpna%7Bgpownf.aoo%2Fau%60edopm-ildgx%2Chvmn",
"target": "https://www.mathplayground.com/cubeform/index.html",
"image": "https://www.coolmathgames.com/sites/default/files/styles/pwa_512x512/public/game_m_thumbnail/cubeform-game-icon.png?itok=RHIZMSy5"
},
{
"name": "Cut the Rope",
"target": "https://codeberg.org/3kh0/3kh0-assets/raw/branch/main/ctr/index.html'",
"target": "/cdn/3kh0/ctr/index.html'",
"image": "/assets/img/ctr.png"
},
{
@@ -177,12 +177,12 @@
},
{
"name": "Defly.io",
"target": "/service/hvtrs8%2F-dgfny%2Cim%2F",
"target": "https://defly.io/",
"image": "https://cdn.glitch.global/82c5292a-89b3-4a53-84e2-abbc0fa27724/defly_io.webp?v=1679319580067"
},
{
"name": "DogeMiner",
"target": "https://codeberg.org/3kh0/3kh0-assets/raw/branch/main/DogeMiner/index.html",
"target": "/cdn/3kh0/DogeMiner/index.html",
"image": "/assets/img/dogeminer.png"
},
{
@@ -197,17 +197,17 @@
},
{
"name": "Drift Boss",
"target": "/service/hvtrs8%2F-wuw%2Cmctjpna%7Bgpownf.aoo%2Ffrkfv-%60oqs%2Fv1%2Fknfez.jtol",
"target": "https://www.mathplayground.com/drift-boss-v3/index.html",
"image": "/assets/img/driftboss.png"
},
{
"name": "Drift Hunters (have patience)",
"target": "/service/hvtrs8%2F-wgbeloavh%2Cgktju%60.ko-dpidt%2Fhwnveps-",
"target": "https://webglmath.github.io/drift-hunters/",
"image": "https://play-lh.googleusercontent.com/smo8Ln-PRREDGq_QjA-Nws7ZNJQhvQfUB2oA8XV0GW12uq6hqdhvwXCB2rdl6zjekcow=w240-h480-rw"
},
{
"name": "Drive Mad",
"target": "https://codeberg.org/3kh0/3kh0-assets/raw/branch/main/drive-mad/index.html",
"target": "/cdn/3kh0/drive-mad/index.html",
"image": "/assets/img/dmd.jpg"
},
{
@@ -222,7 +222,7 @@
},
{
"name": "Flappy Bird",
"target": "https://codeberg.org/3kh0/3kh0-assets/raw/branch/main/flappybird/index.html",
"target": "/cdn/3kh0/flappybird/index.html",
"image": "/assets/img/fp.png"
},
{
@@ -247,12 +247,12 @@
},
{
"name": "GunSpin",
"target": "/service/hvtrs8%2F-u%60g167.eivhwb%2Cim%2Feulsril%2Frlcy%2Chvmn",
"target": "https://ubg365.github.io/gunspin/play.html",
"image": "https://play-lh.googleusercontent.com/fLqvWSVq5rENEvu32xl0hf96wwSHVwQm-_9xc6KZg9Vgv9PbAtf1CyBYW7i1mlAXoSA"
},
{
"name": "Hacker Tetris",
"target": "https://codeberg.org/3kh0/3kh0-assets/raw/branch/main/twitch-tetris/index.html",
"target": "/cdn/3kh0/twitch-tetris/index.html",
"image": "/assets/img/hackertetris.png"
},
{
@@ -262,8 +262,8 @@
},
{
"name": "Idle Breakout",
"target": "https://codeberg.org/3kh0/3kh0-assets/raw/branch/main/idle-breakout/index.html",
"image": "https://codeberg.org/3kh0/3kh0-assets/raw/branch/main/idle-breakout/img/thumbnail.png"
"target": "/cdn/3kh0/idle-breakout/index.html",
"image": "/cdn/3kh0/idle-breakout/img/thumbnail.png"
},
{
"name": "Janissary Battles",
@@ -276,23 +276,23 @@
"image": "/cdn/jetpack-joyride/splash.jpg"
},
{
"name": "Kirka",
"target": "/service/hvtrs8%2F-kkria%2Cim%2F",
"name": "Kirka.io",
"target": "https://kirka.io/",
"image": "https://cdn.glitch.global/40d8a6f7-c124-43fe-8544-1617c1dcc948/download%20(1).jpeg?v=1680006191209"
},
{
"name": "Learn To Fly",
"target": "https://codeberg.org/3kh0/3kh0-assets/raw/branch/main/learntofly/index.html",
"target": "/cdn/3kh0/learntofly/index.html",
"image": "/assets/img/learntofly.png"
},
{
"name": "Learn To Fly 2",
"target": "https://codeberg.org/3kh0/3kh0-assets/raw/branch/main/learntofly2/index.html",
"target": "/cdn/3kh0/learntofly2/index.html",
"image": "/assets/img/ltf2.jpg"
},
{
"name": "Let's Surf",
"target": "https://codeberg.org/3kh0/3kh0-assets/raw/branch/main/edge-surf/index.html",
"target": "/cdn/3kh0/edge-surf/index.html",
"image": "/assets/img/ltsf.png"
},
{
@@ -329,7 +329,7 @@
},
{
"name": "Monster Truck Stunts",
"target": "/service/hvtrs8%2F-fklgs%2Ctuorlcygreaoeq.mre%2Fdineq%2Feaoeq%2Fmtjep%2FOolsvep_Vrwci_Ropt%5DSvult-ildgx%2Chvmn",
"target": "https://files.twoplayergames.org/files/games/other/Monster_Truck_Port_Stunt/index.html",
"image": "https://images.twoplayergames.org/files/games/other/Monster_Truck_Port_Stunt/MonsterTruckPortStunt_180x135.jpg?auto=format&w=100"
},
{
@@ -369,12 +369,12 @@
},
{
"name": "Papas Pizzeria",
"target": "https://codeberg.org/3kh0/3kh0-assets/raw/branch/main/papaspizzaria/index.html",
"target": "/cdn/3kh0/papaspizzaria/index.html",
"image": "/assets/img/pizzeria.jpeg"
},
{
"name": "Penalty Kicks",
"target": "/service/hvtrs8%2F-wuw%2Cmctjpna%7Bgpownf.aoo%2Frelant%7B-iiakq%2Fknfez.jtol",
"target": "https://www.mathplayground.com/penalty-kicks/index.html",
"image": "/assets/img/penaltykicks.png"
},
{
@@ -389,19 +389,18 @@
},
{
"name": "Retro Bowl",
"target": "https://codeberg.org/3kh0/3kh0-assets/raw/branch/main/retro-bowl/index.html",
"target": "/cdn/3kh0/retro-bowl/index.html",
"image": "/assets/img/retrobowl.jpeg",
"popular": true
},
{
"name": "Rise Higher",
"target": "/service/hvtrs8%2F-wuw%2Cmctjpna%7Bgpownf.aoo%2Fpiqe%2Fhkgjep%2Fknfez.jtol",
"target": "https://www.mathplayground.com/rise-higher/index.html",
"image": "/assets/img/risehigher.jpg"
},
{
"name": "Roblox",
"target": "/service/hvtrs8%2F-nmw%2Cge%2Frlcy-rmbnoz-aoppmrctkol%2F7369-rmbnoz",
"comment": "/service/hvtrs8%2F-aab%2Cswpgrvulnglpuqh%2Ccmm-dgmm",
"target": "https://now.gg/play/roblox-corporation/5349/roblox",
"image": "/assets/img/roblox.png",
"popular": true
},
@@ -412,7 +411,7 @@
},
{
"name": "Rocket League 2D",
"target": "/service/hvtrs8%2F-v4p%3Bd%3Bt6.qsn.jwadl.lev%2Fjtol-3127314-ildgx%2Chvmn",
"target": "https://v6p9d9t4.ssl.hwcdn.net/html/3325334/index.html",
"image": "https://img.itch.zone/aW1hZ2UvMTcwNjIyLzgyMDkwMS5wbmc=/original/j3UIZb.png"
},
{
@@ -447,7 +446,7 @@
},
{
"name": "Stumble Guys",
"target": "/service/hvtrs8%2F-nmweg%2Cnn%2Frlcy-kktia%2Fgcmgs-7%3B9%3B%2Fqtwm%60lg-eu%7Bs",
"target": "https://nowgg.nl/play/kitka-games/7999/stumble-guys",
"image": "https://play-lh.googleusercontent.com/Oci7f4WR0JShbn-n5hnwubbXaMssleb2b1Dv7AMOzFFcgstIdC9kg-E3LHx3em8RCaLf",
"popular":true
},
@@ -458,7 +457,7 @@
},
{
"name": "Super Mario 64",
"target": "/service/hvtrs8%2F-untkmctgmgn%2Cgktju%60.ko-gcmgs-swpgro66%2Fknfez.jtol",
"target": "https://ultimatemen.github.io/games/superm64/index.html",
"image": "https://nintendocore.org/cdn/shop/products/Super-Mario-64-1.png"
},
{
+8
View File
@@ -308,6 +308,10 @@ input:checked+.slider:before {
border-radius: 1.5vh;
}
.game.hidden {
display: none;
}
.game:hover {
filter: brightness(95%);
transform: translateY(-0.2vh);
@@ -343,6 +347,10 @@ input:checked+.slider:before {
z-index: 10;
}
.searchErr {
margin-bottom: 100px;
}
.cheats {
width: 100%;
display: flex;
+25 -25
View File
@@ -1,35 +1,35 @@
import { loadProxyWorker } from './utils.js';
import { createViewPage } from './utils.js';
import PolarisError from './error.js';
import effects from './effects.js';
const load = () => {
fetch('/assets/JSON/apps.json').then(res => res.json()).then(apps => {
apps.forEach(app => {
const el = document.createElement('div');
el.classList = 'app';
el.innerHTML = `<img src='${app.image}'><h3>${app.name}</h3>`;
document.querySelector('.apps').appendChild(el);
const load = () => fetch('/assets/JSON/apps.json').then(res => res.json()).then(apps => {
apps.forEach(app => {
const el = document.createElement('div');
el.classList = 'app';
el.innerHTML = `<img src='${app.image}'><h3>${app.name}</h3>`;
document.querySelector('.apps').appendChild(el);
effects.hoverTilt({
max: 8,
perspective: 1000,
scale: 1.05,
speed: 800,
easing: 'cubic-bezier(.03,.98,.52,.99)'
}, el);
effects.hoverTilt({
max: 8,
perspective: 1000,
scale: 1.05,
speed: 800,
easing: 'cubic-bezier(.03,.98,.52,.99)'
}, el);
el.addEventListener('click', async () => {
await loadProxyWorker('uv');
localStorage.setItem('frameData', JSON.stringify({
type: 'app',
app
}));
location.href = '/view';
el.addEventListener('click', async () => {
if (URL.canParse(app.target)) createViewPage({
target: app.target,
title: app.name,
proxied: true
});
else createViewPage({
target: app.target,
title: app.name
});
});
}).catch(e => new PolarisError('Failed to load Apps'));
};
});
}).catch(e => new PolarisError('Failed to load Apps'));
export default {
load
+20
View File
@@ -0,0 +1,20 @@
if (window.self === window.top) {
document.body.style.display = 'none';
fetch('/404')
.then(res => res.text())
.then(data => {
document.documentElement.innerHTML = data;
document.body.style.display = 'none';
try { document.body.dataset.theme = JSON.parse(localStorage.getItem('settings')).theme || 'system-default'; }
catch {
document.body.dataset.theme = 'system-default';
sessionStorage.setItem('settings', JSON.stringify({
theme: 'system-default'
}));
}
setTimeout(() => document.body.style.display = 'block', 400);
});
}
View File
+10 -5
View File
@@ -1,3 +1,4 @@
import { createViewPage } from './utils.js';
import PolarisError from './error.js';
import effects from './effects.js';
@@ -18,11 +19,15 @@ const load = () => fetch('/assets/JSON/cheats.json')
}, el);
el.addEventListener('click', () => {
localStorage.setItem('frameData', JSON.stringify({
type: 'cheat',
cheat
}));
location.href = '/view';
if (URL.canParse(cheat.target)) createViewPage({
target: cheat.target,
title: cheat.name,
proxied: true
});
else createViewPage({
target: cheat.target,
title: cheat.name
});
});
})).catch(e => new PolarisError('Failed to load cheats.'));
+5 -16
View File
@@ -38,24 +38,13 @@ class PolarisError {
}, 500);
}, 8000);
if (e.stack) {
console.log('An error occurred:\n\n' + e.stack);
} else {
console.log('An error occurred:\n\n' + e);
}
if (e.stack) console.log('An error occurred:\n\n' + e.stack);
else console.log('An error occurred:\n\n' + e);
}
}
window.onerror = (a, b, c, d, e) => {
new PolarisError(e);
}
window.console.error = (e) => {
new PolarisError(e);
}
window.onmessageerror = (e) => {
new PolarisError(e);
}
window.onerror = (...e) => new PolarisError(e);
window.console.error = (...e) => new PolarisError(e);
window.onmessageerror = (...e) => new PolarisError(e);
export default PolarisError;
+4 -2
View File
@@ -6,14 +6,16 @@ const load = () => {
fetch('/assets/JSON/games.json')
.then(res => res.json())
.then(games => {
const searchBar = document.getElementById('searchInput');
const searchBar = document.querySelector('#searchInput');
searchBar.addEventListener('input', () => {
console.log(searchBar.value);
if (searchBar.value) {
var result = false;
document.querySelectorAll('.games>.game').forEach(game => {
if (game.title.toLowerCase().includes(searchBar.value.toLowerCase())) {
if (game.querySelector('h3').textContent.toLowerCase().includes(searchBar.value.toLowerCase())) {
result = true;
game.classList.remove('hidden');
+3 -3
View File
@@ -28,7 +28,7 @@
<input type="text" id="searchInput" placeholder="Search Games...">
<!--el:ad_horizontal-->
<!--el:ad_horizontal-->
<br>
<br>
@@ -36,10 +36,10 @@
</div>
<div class="searchErr hidden">
<h1>¯\(°_o)/¯</h1>
<h1 class="title">¯\(°_o)/¯</h1>
<br>
<p>Oops, we couldn't find the game you were looking for.</p>
</div>
</div>
<script src="/assets/js/main.js" type="module"></script>
+5 -1
View File
@@ -7,7 +7,7 @@
<h3>Panic Key</h3>
<input class="settings-input" type="text" name="Panic Key" id="panic_key" value="No Key Selected" readonly />
<input class="settings-input" type="text" name="Panic Key" id="panic_key" value="Click and press any key" readonly />
<button class="settings-button" id="reset_panic">Reset</button>
<br>
@@ -45,4 +45,8 @@
<input class="settings-input" type="text" placeholder="Title" id="title" />
<input class="settings-input" type="text" placeholder="eg: google.com" id="domain" />
</div>
<h2>Export Data</h2>
<p>Coming soon!</p>
</div>