New Website

I've made a new website, as lynx.io is dead. You can find it here: http://macr.ae/—it's similar in format to lynx.io, but has better articles, and they're all written by me.

JavaScript disabled

While it will still mostly work, a lot of this site's functionality relies on JavaScript - please enable it for the best experience.

Protecting your code with Obfuscation and Licenses

If you're going to be releasing your code, you may want to protect your code against people releasing it as their own work, or you may want to make sure that they leave your name at the bottom of it. Obfuscation and licensing are two ways that you can do this, and we're going to look at both in this article.

Obfuscation

This is the method that I'm newest to, and I don't have much experience with. Obfuscation will attempt to encrypt your code, or make it unreadable. It obviously isn't 100% secure, and is actually usually pretty easy to break (as I will explain soon).

The first tool we're going to look at is http://www.fopo.com.ar/. It's a very easy tool to use with three levels of obfuscation. I'm going to put a simple file through all three and show you the results:

(yup, I stole most of the code from php.net/time)

<php

$test = "This is a test.\n";
echo $test;

$nextWeek = time() + (7 * 24 * 60 * 60);
// 7 days; 24 hours; 60 mins; 60secs
echo 'Now: '. date('Y-m-d') ."\n";
echo 'Next Week: '. date('Y-m-d', $nextWeek) ."\n";
// or using strtotime():
echo 'Next Week: '. date('Y-m-d', strtotime('+1 week')) ."\n";
?>

This returns:

This is a test.
Now: 2010-10-17
Next Week: 2010-10-24
Next Week: 2010-10-24

Level 1 obfuscation

<?php
//Obfuscation provided by FOPO - Free Online PHP Obfuscator v1.2: http://www.fopo.com.ar
$i047cd8fbd0c="\x62\141\x73\145\x36\64\x5f\144\x65\143\x6f\144\x65";@eval($i047cd8fbd0c(
"JHgzNmM5Y2Y5NGEyMjlkNmQ3OTBkZDFlYWVjNjBjZDhmPSJceDYyIjskeTUzZjBhNjYzMWE4NWJlYTkyZGQwMDM
1OGJjMTdkNTY9Ilx4NjUiOyRxZWZmMGM0NjZlOWQxYjI4MjY3NDcyMjViNWU3ZGIzNT0iXHg2NiI7JHFjNmY2MGU
xOTczNDU5ODAxMjdkZmY1YTlmMWU0MjZkPSJceDY3IjskYWJlMTEwNGE0ZTE5M2NkZDk2ZmU4M2ZmY2Q0ZDY4MDI
9Ilx4NmQiOyRnZDdjNjE3MDVjZWZjZmFlN2VlNDFlNWRlYmFjNTAxOD0iXHg2ZiI7JGM1MDRkOTUzNTJkYWE5NjN
iOThhMzUxMTcwNWJhNDFhPSJceDZmIjskZjE0YzgyOWU0NmQ2YTgyMTQyOTY1N2E0MWE0N2JkM2M9Ilx4NmYiOyR
sMWQ5ODUyZTVkY2YyYTRmODA3ZDQxNzI1NTAyZTQ4Mz0iXHg2ZiI7JHdhN2QxMTQzNTVhZDc4ZmY2NzZhMmY3OWQ
zODY1NzdhPSJceDczIjskdmFkNDg3ZmJlYmI2ZWNmM2RjZWY4YjMyNjA1ZTU1NGQ9Ilx4NzMiOyRvYjEwNTY5MGR
iNmQ5Y2FjZmM0N2M1YWIxMzIwNjYxZD0iXHg3MyI7JGw1ZmVlYTcyYmVmNjZiMGE5MGZiY2M1ZTQ4ZTlhMjBmPSJ
ceDczIjskeDM2YzljZjk0YTIyOWQ2ZDc5MGRkMWVhZWM2MGNkOGYuPSJcMTQxIjskeTUzZjBhNjYzMWE4NWJlYTk
yZGQwMDM1OGJjMTdkNTYuPSJcMTYyIjskcWVmZjBjNDY2ZTlkMWIyODI2NzQ3MjI1YjVlN2RiMzUuPSJcMTUxIjs
kcWM2ZjYwZTE5NzM0NTk4MDEyN2RmZjVhOWYxZTQyNmQuPSJcMTcyIjskYWJlMTEwNGE0ZTE5M2NkZDk2ZmU4M2Z
mY2Q0ZDY4MDIuPSJcMTQ0IjskZ2Q3YzYxNzA1Y2VmY2ZhZTdlZTQxZTVkZWJhYzUwMTguPSJcMTQyIjskYzUwNGQ
5NTM1MmRhYTk2M2I5OGEzNTExNzA1YmE0MWEuPSJcMTQyIjskZjE0YzgyOWU0NmQ2YTgyMTQyOTY1N2E0MWE0N2J
kM2MuPSJcMTQyIjskbDFkOTg1MmU1ZGNmMmE0ZjgwN2Q0MTcyNTUwMmU0ODMuPSJcMTQyIjskd2E3ZDExNDM1NWF
kNzhmZjY3NmEyZjc5ZDM4NjU3N2EuPSJcMTY0IjskdmFkNDg3ZmJlYmI2ZWNmM2RjZWY4YjMyNjA1ZTU1NGQuPSJ
cMTY0Ijskb2IxMDU2OTBkYjZkOWNhY2ZjNDdjNWFiMTMyMDY2MWQuPSJcMTY0IjskbDVmZWVhNzJiZWY2NmIwYTk
wZmJjYzVlNDhlOWEyMGYuPSJcMTY0IjskeDM2YzljZjk0YTIyOWQ2ZDc5MGRkMWVhZWM2MGNkOGYuPSJceDczIjs
keTUzZjBhNjYzMWE4NWJlYTkyZGQwMDM1OGJjMTdkNTYuPSJceDY1IjskcWVmZjBjNDY2ZTlkMWIyODI2NzQ3MjI
1YjVlN2RiMzUuPSJceDZjIjskcWM2ZjYwZTE5NzM0NTk4MDEyN2RmZjVhOWYxZTQyNmQuPSJceDY5IjskYWJlMTE
wNGE0ZTE5M2NkZDk2ZmU4M2ZmY2Q0ZDY4MDIuPSJceDM1IjskZ2Q3YzYxNzA1Y2VmY2ZhZTdlZTQxZTVkZWJhYzU
wMTguPSJceDVmIjskYzUwNGQ5NTM1MmRhYTk2M2I5OGEzNTExNzA1YmE0MWEuPSJceDVmIjskZjE0YzgyOWU0NmQ
2YTgyMTQyOTY1N2E0MWE0N2JkM2MuPSJceDVmIjskbDFkOTg1MmU1ZGNmMmE0ZjgwN2Q0MTcyNTUwMmU0ODMuPSJ
ceDVmIjskd2E3ZDExNDM1NWFkNzhmZjY3NmEyZjc5ZDM4NjU3N2EuPSJceDcyIjskdmFkNDg3ZmJlYmI2ZWNmM2R
jZWY4YjMyNjA1ZTU1NGQuPSJceDcyIjskb2IxMDU2OTBkYjZkOWNhY2ZjNDdjNWFiMTMyMDY2MWQuPSJceDcyIjs
kbDVmZWVhNzJiZWY2NmIwYTkwZmJjYzVlNDhlOWEyMGYuPSJceDcyIjskeDM2YzljZjk0YTIyOWQ2ZDc5MGRkMWV
hZWM2MGNkOGYuPSJcMTQ1IjskeTUzZjBhNjYzMWE4NWJlYTkyZGQwMDM1OGJjMTdkNTYuPSJcMTQ3IjskcWVmZjB
jNDY2ZTlkMWIyODI2NzQ3MjI1YjVlN2RiMzUuPSJcMTQ1IjskcWM2ZjYwZTE5NzM0NTk4MDEyN2RmZjVhOWYxZTQ
yNmQuPSJcMTU2IjskZ2Q3YzYxNzA1Y2VmY2ZhZTdlZTQxZTVkZWJhYzUwMTguPSJcMTQ1IjskYzUwNGQ5NTM1MmR
hYTk2M2I5OGEzNTExNzA1YmE0MWEuPSJcMTQ1IjskZjE0YzgyOWU0NmQ2YTgyMTQyOTY1N2E0MWE0N2JkM2MuPSJ
cMTQ3IjskbDFkOTg1MmU1ZGNmMmE0ZjgwN2Q0MTcyNTUwMmU0ODMuPSJcMTYzIjskd2E3ZDExNDM1NWFkNzhmZjY
3NmEyZjc5ZDM4NjU3N2EuPSJcMTM3IjskdmFkNDg3ZmJlYmI2ZWNmM2RjZWY4YjMyNjA1ZTU1NGQuPSJcMTM3Ijs
kb2IxMDU2OTBkYjZkOWNhY2ZjNDdjNWFiMTMyMDY2MWQuPSJcMTYwIjskbDVmZWVhNzJiZWY2NmIwYTkwZmJjYzV
lNDhlOWEyMGYuPSJcMTY0IjskeDM2YzljZjk0YTIyOWQ2ZDc5MGRkMWVhZWM2MGNkOGYuPSJceDM2IjskeTUzZjB
hNjYzMWE4NWJlYTkyZGQwMDM1OGJjMTdkNTYuPSJceDVmIjskcWVmZjBjNDY2ZTlkMWIyODI2NzQ3MjI1YjVlN2R
iMzUuPSJceDVmIjskcWM2ZjYwZTE5NzM0NTk4MDEyN2RmZjVhOWYxZTQyNmQuPSJceDY2IjskZ2Q3YzYxNzA1Y2V
mY2ZhZTdlZTQxZTVkZWJhYzUwMTguPSJceDZlIjskYzUwNGQ5NTM1MmRhYTk2M2I5OGEzNTExNzA1YmE0MWEuPSJ
ceDZlIjskZjE0YzgyOWU0NmQ2YTgyMTQyOTY1N2E0MWE0N2JkM2MuPSJceDY1IjskbDFkOTg1MmU1ZGNmMmE0Zjg
wN2Q0MTcyNTUwMmU0ODMuPSJceDc0Ijskd2E3ZDExNDM1NWFkNzhmZjY3NmEyZjc5ZDM4NjU3N2EuPSJceDcyIjs
kdmFkNDg3ZmJlYmI2ZWNmM2RjZWY4YjMyNjA1ZTU1NGQuPSJceDcyIjskb2IxMDU2OTBkYjZkOWNhY2ZjNDdjNWF
iMTMyMDY2MWQuPSJceDZmIjskbDVmZWVhNzJiZWY2NmIwYTkwZmJjYzVlNDhlOWEyMGYuPSJceDZmIjskeDM2Yzl
jZjk0YTIyOWQ2ZDc5MGRkMWVhZWM2MGNkOGYuPSJcNjQiOyR5NTNmMGE2NjMxYTg1YmVhOTJkZDAwMzU4YmMxN2Q
1Ni49IlwxNjIiOyRxZWZmMGM0NjZlOWQxYjI4MjY3NDcyMjViNWU3ZGIzNS49IlwxNDciOyRxYzZmNjBlMTk3MzQ
1OTgwMTI3ZGZmNWE5ZjFlNDI2ZC49IlwxNTQiOyRnZDdjNjE3MDVjZWZjZmFlN2VlNDFlNWRlYmFjNTAxOC49Ilw
xNDQiOyRjNTA0ZDk1MzUyZGFhOTYzYjk4YTM1MTE3MDViYTQxYS49IlwxNDQiOyRmMTRjODI5ZTQ2ZDZhODIxNDI
5NjU3YTQxYTQ3YmQzYy49IlwxNjQiOyRsMWQ5ODUyZTVkY2YyYTRmODA3ZDQxNzI1NTAyZTQ4My49IlwxNDEiOyR
3YTdkMTE0MzU1YWQ3OGZmNjc2YTJmNzlkMzg2NTc3YS49IlwxNDUiOyR2YWQ0ODdmYmViYjZlY2YzZGNlZjhiMzI
2MDVlNTU0ZC49IlwxNTciOyRvYjEwNTY5MGRiNmQ5Y2FjZmM0N2M1YWIxMzIwNjYxZC49IlwxNjMiOyRsNWZlZWE
3MmJlZjY2YjBhOTBmYmNjNWU0OGU5YTIwZi49IlwxNTMiOyR4MzZjOWNmOTRhMjI5ZDZkNzkwZGQxZWFlYzYwY2Q
4Zi49Ilx4NWYiOyR5NTNmMGE2NjMxYTg1YmVhOTJkZDAwMzU4YmMxN2Q1Ni49Ilx4NjUiOyRxZWZmMGM0NjZlOWQ
xYjI4MjY3NDcyMjViNWU3ZGIzNS49Ilx4NjUiOyRxYzZmNjBlMTk3MzQ1OTgwMTI3ZGZmNWE5ZjFlNDI2ZC49Ilx
4NjEiOyRnZDdjNjE3MDVjZWZjZmFlN2VlNDFlNWRlYmFjNTAxOC49Ilx4NWYiOyRjNTA0ZDk1MzUyZGFhOTYzYjk
4YTM1MTE3MDViYTQxYS49Ilx4NWYiOyRmMTRjODI5ZTQ2ZDZhODIxNDI5NjU3YTQxYTQ3YmQzYy49Ilx4NWYiOyR
sMWQ5ODUyZTVkY2YyYTRmODA3ZDQxNzI1NTAyZTQ4My49Ilx4NzIiOyR3YTdkMTE0MzU1YWQ3OGZmNjc2YTJmNzl
kMzg2NTc3YS49Ilx4NzAiOyR2YWQ0ODdmYmViYjZlY2YzZGNlZjhiMzI2MDVlNTU0ZC49Ilx4NzQiOyR4MzZjOWN
mOTRhMjI5ZDZkNzkwZGQxZWFlYzYwY2Q4Zi49IlwxNDQiOyR5NTNmMGE2NjMxYTg1YmVhOTJkZDAwMzU4YmMxN2Q
1Ni49IlwxNjAiOyRxZWZmMGM0NjZlOWQxYjI4MjY3NDcyMjViNWU3ZGIzNS49IlwxNjQiOyRxYzZmNjBlMTk3MzQ
1OTgwMTI3ZGZmNWE5ZjFlNDI2ZC49IlwxNjQiOyRnZDdjNjE3MDVjZWZjZmFlN2VlNDFlNWRlYmFjNTAxOC49Ilw
xNDMiOyRjNTA0ZDk1MzUyZGFhOTYzYjk4YTM1MTE3MDViYTQxYS49IlwxNDYiOyRmMTRjODI5ZTQ2ZDZhODIxNDI
5NjU3YTQxYTQ3YmQzYy49IlwxNDMiOyRsMWQ5ODUyZTVkY2YyYTRmODA3ZDQxNzI1NTAyZTQ4My49IlwxNjQiOyR
3YTdkMTE0MzU1YWQ3OGZmNjc2YTJmNzlkMzg2NTc3YS49IlwxNTQiOyR2YWQ0ODdmYmViYjZlY2YzZGNlZjhiMzI
2MDVlNTU0ZC49Ilw2MSI7JHgzNmM5Y2Y5NGEyMjlkNmQ3OTBkZDFlYWVjNjBjZDhmLj0iXHg2NSI7JHk1M2YwYTY
2MzFhODViZWE5MmRkMDAzNThiYzE3ZDU2Lj0iXHg2YyI7JHFlZmYwYzQ2NmU5ZDFiMjgyNjc0NzIyNWI1ZTdkYjM
1Lj0iXHg1ZiI7JHFjNmY2MGUxOTczNDU5ODAxMjdkZmY1YTlmMWU0MjZkLj0iXHg2NSI7JGdkN2M2MTcwNWNlZmN
mYWU3ZWU0MWU1ZGViYWM1MDE4Lj0iXHg2YyI7JGM1MDRkOTUzNTJkYWE5NjNiOThhMzUxMTcwNWJhNDFhLj0iXHg
2YyI7JGYxNGM4MjllNDZkNmE4MjE0Mjk2NTdhNDFhNDdiZDNjLj0iXHg2ZiI7JHdhN2QxMTQzNTVhZDc4ZmY2NzZ
hMmY3OWQzODY1NzdhLj0iXHg2MSI7JHZhZDQ4N2ZiZWJiNmVjZjNkY2VmOGIzMjYwNWU1NTRkLj0iXHgzMyI7JHg
zNmM5Y2Y5NGEyMjlkNmQ3OTBkZDFlYWVjNjBjZDhmLj0iXDE0MyI7JHk1M2YwYTY2MzFhODViZWE5MmRkMDAzNTh
iYzE3ZDU2Lj0iXDE0MSI7JHFlZmYwYzQ2NmU5ZDFiMjgyNjc0NzIyNWI1ZTdkYjM1Lj0iXDE0MyI7JGdkN2M2MTc
wNWNlZmNmYWU3ZWU0MWU1ZGViYWM1MDE4Lj0iXDE0NSI7JGM1MDRkOTUzNTJkYWE5NjNiOThhMzUxMTcwNWJhNDF
hLj0iXDE2NSI7JGYxNGM4MjllNDZkNmE4MjE0Mjk2NTdhNDFhNDdiZDNjLj0iXDE1NiI7JHdhN2QxMTQzNTVhZDc
4ZmY2NzZhMmY3OWQzODY1NzdhLj0iXDE0MyI7JHgzNmM5Y2Y5NGEyMjlkNmQ3OTBkZDFlYWVjNjBjZDhmLj0iXHg
2ZiI7JHk1M2YwYTY2MzFhODViZWE5MmRkMDAzNThiYzE3ZDU2Lj0iXHg2MyI7JHFlZmYwYzQ2NmU5ZDFiMjgyNjc
0NzIyNWI1ZTdkYjM1Lj0iXHg2ZiI7JGdkN2M2MTcwNWNlZmNmYWU3ZWU0MWU1ZGViYWM1MDE4Lj0iXHg2MSI7JGM
1MDRkOTUzNTJkYWE5NjNiOThhMzUxMTcwNWJhNDFhLj0iXHg3MyI7JGYxNGM4MjllNDZkNmE4MjE0Mjk2NTdhNDF
hNDdiZDNjLj0iXHg3NCI7JHdhN2QxMTQzNTVhZDc4ZmY2NzZhMmY3OWQzODY1NzdhLj0iXHg2NSI7JHgzNmM5Y2Y
5NGEyMjlkNmQ3OTBkZDFlYWVjNjBjZDhmLj0iXDE0NCI7JHk1M2YwYTY2MzFhODViZWE5MmRkMDAzNThiYzE3ZDU
2Lj0iXDE0NSI7JHFlZmYwYzQ2NmU5ZDFiMjgyNjc0NzIyNWI1ZTdkYjM1Lj0iXDE1NiI7JGdkN2M2MTcwNWNlZmN
mYWU3ZWU0MWU1ZGViYWM1MDE4Lj0iXDE1NiI7JGM1MDRkOTUzNTJkYWE5NjNiOThhMzUxMTcwNWJhNDFhLj0iXDE
1MCI7JGYxNGM4MjllNDZkNmE4MjE0Mjk2NTdhNDFhNDdiZDNjLj0iXDE0NSI7JHgzNmM5Y2Y5NGEyMjlkNmQ3OTB
kZDFlYWVjNjBjZDhmLj0iXHg2NSI7JHFlZmYwYzQ2NmU5ZDFiMjgyNjc0NzIyNWI1ZTdkYjM1Lj0iXHg3NCI7JGY
xNGM4MjllNDZkNmE4MjE0Mjk2NTdhNDFhNDdiZDNjLj0iXHg2ZSI7JHFlZmYwYzQ2NmU5ZDFiMjgyNjc0NzIyNWI
1ZTdkYjM1Lj0iXDE0NSI7JGYxNGM4MjllNDZkNmE4MjE0Mjk2NTdhNDFhNDdiZDNjLj0iXDE2NCI7JHFlZmYwYzQ
2NmU5ZDFiMjgyNjc0NzIyNWI1ZTdkYjM1Lj0iXHg2ZSI7JGYxNGM4MjllNDZkNmE4MjE0Mjk2NTdhNDFhNDdiZDN
jLj0iXHg3MyI7JHFlZmYwYzQ2NmU5ZDFiMjgyNjc0NzIyNWI1ZTdkYjM1Lj0iXDE2NCI7JHFlZmYwYzQ2NmU5ZDF
iMjgyNjc0NzIyNWI1ZTdkYjM1Lj0iXHg3MyI7JGwxZDk4NTJlNWRjZjJhNGY4MDdkNDE3MjU1MDJlNDgzKCk7aWY
oJGFiZTExMDRhNGUxOTNjZGQ5NmZlODNmZmNkNGQ2ODAyKCR5NTNmMGE2NjMxYTg1YmVhOTJkZDAwMzU4YmMxN2Q
1NigiXHg1Y1w1MFx4MjJcMTMzXHgzMFw1NVx4MzlcMTAxXHgyZFwxMzJceDYxXDU1XHg3YVwxMzRceDJiXDU3XHg
zZFwxMzVceDJhXDQyXHg1Y1w1MSIsIlx4MjhcNDJceDIyXDUxIiwkd2E3ZDExNDM1NWFkNzhmZjY3NmEyZjc5ZDM
4NjU3N2EoIlxyXG4iLCIiLCRxZWZmMGM0NjZlOWQxYjI4MjY3NDcyMjViNWU3ZGIzNSgkbDVmZWVhNzJiZWY2NmI
wYTkwZmJjYzVlNDhlOWEyMGYoX19GSUxFX18sIlx4MjgiKSkpKSk9PSJceDM4XDYyXHg2MVwxNDZceDMzXDE0NFx
4NjJcNjRceDM3XDE0NVx4MzlcMTQ1XHgzNlw2NVx4NjFcNjNceDM3XDE0M1x4MzJcMTQ1XHgzMVw2MFx4NjFcNjV
ceDMxXDY2XHg2MVwxNDVceDM1XDE0NVx4MzZcNjMiKXtAZXZhbCgkcWM2ZjYwZTE5NzM0NTk4MDEyN2RmZjVhOWY
xZTQyNmQoJHgzNmM5Y2Y5NGEyMjlkNmQ3OTBkZDFlYWVjNjBjZDhmKCR2YWQ0ODdmYmViYjZlY2YzZGNlZjhiMzI
2MDVlNTU0ZCgieUw1RVA0V05SVkcvbHZRUGRNSm5yUzVNNkcvalhMdnRTOC9vSFpYSENYdnMzNklFMFNpWVp0L1l
BbVpvclFsWkZwbkZyT1lXZmNGV1JWV21xTW9JdnlzZU1ubDhWWisyckkvM3RYMWMwQXdPMmdzQU5ZWnlLdXMvcVl
IMmJYZWhXelZRKzBiQ3NGUDZUU3QzWUd4aE1hTlJDUkZreEZEcGtLMm9KQVVxSDBtUXNYdUZ4OEJCdjNudXpOaXM
rZG5tamZHdnlNaSt0aUFpNWsrckRxOTBBbTdWTXhpcFFwR3B3bTNDYXQ9PSIpKSkpO30kb2IxMDU2OTBkYjZkOWN
hY2ZjNDdjNWFiMTMyMDY2MWQoJGYxNGM4MjllNDZkNmE4MjE0Mjk2NTdhNDFhNDdiZDNjKCksIlx4MzVcNjBceDM
0XDE0NVx4NjJcNjRceDYyXDE0NVx4MzVcNjZceDMyXDE0Mlx4NjFcMTQxXHg2Mlw2Nlx4MzdcNjdceDM3XDY1XHg
zNVwxNDRceDY2XDE0Mlx4NjNcNzBceDM1XDE0M1x4MzlcNjFceDM0XDE0NCIpPyRnZDdjNjE3MDVjZWZjZmFlN2V
lNDFlNWRlYmFjNTAxOCgpOiRjNTA0ZDk1MzUyZGFhOTYzYjk4YTM1MTE3MDViYTQxYSgpOw=="));
?>

Friendly!

It returns exactly what it should return.

Level 2

<?php
//Obfuscation provided by FOPO - Free Online PHP Obfuscator v1.2: http://www.fopo.com.ar
$d446b3c0e51a="\x62\141\x73\145\x36\64\x5f\144\x65\143\x6f\144\x65";@eval($d446b3c0e51a(
"JHkwMDkyYWY2MTVmNjUwZmEyYzdmZGYyZDZiM2FjYzQyPSJceDYyIjskeTA5NWQxZGJlMTJlMzYwOTNmZTg5OTA
1NTgyZDQ3N2I9Ilx4NjUiOyRvMGMyOWY2NzUxMDNmZDA2N2JhYzhlMjAxMDgxNmE1ND0iXHg2NiI7JG1lYmZhNjU
0ODFjN2ZhNTJmNWFkMWMzNTM2MzUyY2RkPSJceDY3IjskcTA1ZDIzODQ1MzVlMTliMjM4YTcxZDBjMGI1ZTMwOTg
9Ilx4NmQiOyRwZmZiMGMzZTJhMzg3NTU3MzRjNTE2YTE2ZTNkOTVkZT0iXHg2ZiI7JHM1OTcyYmJjZGE3ZTIxNmY
4Y2EyMGM2ZTg4YmQyZWNkPSJceDZmIjskZmZiYjUyZDg4MWNiMjEwZWUxYzk0YjA5NGE4NWM4Yzg9Ilx4NmYiOyR
xN2VkZjA3MjhmMzE2YmM3NThjZWUzODJmNjg4MzU1ND0iXHg2ZiI7JGhlNjlkYmFmNjJhZDMxZmJmMzhiOTFlMjU
5MmJmZjUzPSJceDczIjskdTQ4ZTVmOWE5ZTFhZWJlMDkyNThiOGYwY2FkNmIyZjE9Ilx4NzMiOyRmNGExMDA2MjU
yNmJkOGEzY2RjYzZmYTgzMzMxMWY2MT0iXHg3MyI7JHE5NjMwODFmYTg3ZTRmMTJjYTI0MGMzZDNjNDFlOTlkPSJ
ceDczIjskeTAwOTJhZjYxNWY2NTBmYTJjN2ZkZjJkNmIzYWNjNDIuPSJcMTQxIjskeTA5NWQxZGJlMTJlMzYwOTN
mZTg5OTA1NTgyZDQ3N2IuPSJcMTYyIjskbzBjMjlmNjc1MTAzZmQwNjdiYWM4ZTIwMTA4MTZhNTQuPSJcMTUxIjs
kbWViZmE2NTQ4MWM3ZmE1MmY1YWQxYzM1MzYzNTJjZGQuPSJcMTcyIjskcTA1ZDIzODQ1MzVlMTliMjM4YTcxZDB
jMGI1ZTMwOTguPSJcMTQ0IjskcGZmYjBjM2UyYTM4NzU1NzM0YzUxNmExNmUzZDk1ZGUuPSJcMTQyIjskczU5NzJ
iYmNkYTdlMjE2ZjhjYTIwYzZlODhiZDJlY2QuPSJcMTQyIjskZmZiYjUyZDg4MWNiMjEwZWUxYzk0YjA5NGE4NWM
4YzguPSJcMTQyIjskcTdlZGYwNzI4ZjMxNmJjNzU4Y2VlMzgyZjY4ODM1NTQuPSJcMTQyIjskaGU2OWRiYWY2MmF
kMzFmYmYzOGI5MWUyNTkyYmZmNTMuPSJcMTY0IjskdTQ4ZTVmOWE5ZTFhZWJlMDkyNThiOGYwY2FkNmIyZjEuPSJ
cMTY0IjskZjRhMTAwNjI1MjZiZDhhM2NkY2M2ZmE4MzMzMTFmNjEuPSJcMTY0IjskcTk2MzA4MWZhODdlNGYxMmN
hMjQwYzNkM2M0MWU5OWQuPSJcMTY0IjskeTAwOTJhZjYxNWY2NTBmYTJjN2ZkZjJkNmIzYWNjNDIuPSJceDczIjs
keTA5NWQxZGJlMTJlMzYwOTNmZTg5OTA1NTgyZDQ3N2IuPSJceDY1IjskbzBjMjlmNjc1MTAzZmQwNjdiYWM4ZTI
wMTA4MTZhNTQuPSJceDZjIjskbWViZmE2NTQ4MWM3ZmE1MmY1YWQxYzM1MzYzNTJjZGQuPSJceDY5IjskcTA1ZDI
zODQ1MzVlMTliMjM4YTcxZDBjMGI1ZTMwOTguPSJceDM1IjskcGZmYjBjM2UyYTM4NzU1NzM0YzUxNmExNmUzZDk
1ZGUuPSJceDVmIjskczU5NzJiYmNkYTdlMjE2ZjhjYTIwYzZlODhiZDJlY2QuPSJceDVmIjskZmZiYjUyZDg4MWN
iMjEwZWUxYzk0YjA5NGE4NWM4YzguPSJceDVmIjskcTdlZGYwNzI4ZjMxNmJjNzU4Y2VlMzgyZjY4ODM1NTQuPSJ
ceDVmIjskaGU2OWRiYWY2MmFkMzFmYmYzOGI5MWUyNTkyYmZmNTMuPSJceDcyIjskdTQ4ZTVmOWE5ZTFhZWJlMDk
yNThiOGYwY2FkNmIyZjEuPSJceDcyIjskZjRhMTAwNjI1MjZiZDhhM2NkY2M2ZmE4MzMzMTFmNjEuPSJceDcyIjs
kcTk2MzA4MWZhODdlNGYxMmNhMjQwYzNkM2M0MWU5OWQuPSJceDcyIjskeTAwOTJhZjYxNWY2NTBmYTJjN2ZkZjJ
kNmIzYWNjNDIuPSJcMTQ1IjskeTA5NWQxZGJlMTJlMzYwOTNmZTg5OTA1NTgyZDQ3N2IuPSJcMTQ3IjskbzBjMjl
mNjc1MTAzZmQwNjdiYWM4ZTIwMTA4MTZhNTQuPSJcMTQ1IjskbWViZmE2NTQ4MWM3ZmE1MmY1YWQxYzM1MzYzNTJ
jZGQuPSJcMTU2IjskcGZmYjBjM2UyYTM4NzU1NzM0YzUxNmExNmUzZDk1ZGUuPSJcMTQ1IjskczU5NzJiYmNkYTd
lMjE2ZjhjYTIwYzZlODhiZDJlY2QuPSJcMTQ1IjskZmZiYjUyZDg4MWNiMjEwZWUxYzk0YjA5NGE4NWM4YzguPSJ
cMTQ3IjskcTdlZGYwNzI4ZjMxNmJjNzU4Y2VlMzgyZjY4ODM1NTQuPSJcMTYzIjskaGU2OWRiYWY2MmFkMzFmYmY
zOGI5MWUyNTkyYmZmNTMuPSJcMTM3IjskdTQ4ZTVmOWE5ZTFhZWJlMDkyNThiOGYwY2FkNmIyZjEuPSJcMTM3Ijs
kZjRhMTAwNjI1MjZiZDhhM2NkY2M2ZmE4MzMzMTFmNjEuPSJcMTYwIjskcTk2MzA4MWZhODdlNGYxMmNhMjQwYzN
kM2M0MWU5OWQuPSJcMTY0IjskeTAwOTJhZjYxNWY2NTBmYTJjN2ZkZjJkNmIzYWNjNDIuPSJceDM2IjskeTA5NWQ
xZGJlMTJlMzYwOTNmZTg5OTA1NTgyZDQ3N2IuPSJceDVmIjskbzBjMjlmNjc1MTAzZmQwNjdiYWM4ZTIwMTA4MTZ
hNTQuPSJceDVmIjskbWViZmE2NTQ4MWM3ZmE1MmY1YWQxYzM1MzYzNTJjZGQuPSJceDY2IjskcGZmYjBjM2UyYTM
4NzU1NzM0YzUxNmExNmUzZDk1ZGUuPSJceDZlIjskczU5NzJiYmNkYTdlMjE2ZjhjYTIwYzZlODhiZDJlY2QuPSJ
ceDZlIjskZmZiYjUyZDg4MWNiMjEwZWUxYzk0YjA5NGE4NWM4YzguPSJceDY1IjskcTdlZGYwNzI4ZjMxNmJjNzU
4Y2VlMzgyZjY4ODM1NTQuPSJceDc0IjskaGU2OWRiYWY2MmFkMzFmYmYzOGI5MWUyNTkyYmZmNTMuPSJceDcyIjs
kdTQ4ZTVmOWE5ZTFhZWJlMDkyNThiOGYwY2FkNmIyZjEuPSJceDcyIjskZjRhMTAwNjI1MjZiZDhhM2NkY2M2ZmE
4MzMzMTFmNjEuPSJceDZmIjskcTk2MzA4MWZhODdlNGYxMmNhMjQwYzNkM2M0MWU5OWQuPSJceDZmIjskeTAwOTJ
hZjYxNWY2NTBmYTJjN2ZkZjJkNmIzYWNjNDIuPSJcNjQiOyR5MDk1ZDFkYmUxMmUzNjA5M2ZlODk5MDU1ODJkNDc
3Yi49IlwxNjIiOyRvMGMyOWY2NzUxMDNmZDA2N2JhYzhlMjAxMDgxNmE1NC49IlwxNDciOyRtZWJmYTY1NDgxYzd
mYTUyZjVhZDFjMzUzNjM1MmNkZC49IlwxNTQiOyRwZmZiMGMzZTJhMzg3NTU3MzRjNTE2YTE2ZTNkOTVkZS49Ilw
xNDQiOyRzNTk3MmJiY2RhN2UyMTZmOGNhMjBjNmU4OGJkMmVjZC49IlwxNDQiOyRmZmJiNTJkODgxY2IyMTBlZTF
jOTRiMDk0YTg1YzhjOC49IlwxNjQiOyRxN2VkZjA3MjhmMzE2YmM3NThjZWUzODJmNjg4MzU1NC49IlwxNDEiOyR
oZTY5ZGJhZjYyYWQzMWZiZjM4YjkxZTI1OTJiZmY1My49IlwxNDUiOyR1NDhlNWY5YTllMWFlYmUwOTI1OGI4ZjB
jYWQ2YjJmMS49IlwxNTciOyRmNGExMDA2MjUyNmJkOGEzY2RjYzZmYTgzMzMxMWY2MS49IlwxNjMiOyRxOTYzMDg
xZmE4N2U0ZjEyY2EyNDBjM2QzYzQxZTk5ZC49IlwxNTMiOyR5MDA5MmFmNjE1ZjY1MGZhMmM3ZmRmMmQ2YjNhY2M
0Mi49Ilx4NWYiOyR5MDk1ZDFkYmUxMmUzNjA5M2ZlODk5MDU1ODJkNDc3Yi49Ilx4NjUiOyRvMGMyOWY2NzUxMDN
mZDA2N2JhYzhlMjAxMDgxNmE1NC49Ilx4NjUiOyRtZWJmYTY1NDgxYzdmYTUyZjVhZDFjMzUzNjM1MmNkZC49Ilx
4NjEiOyRwZmZiMGMzZTJhMzg3NTU3MzRjNTE2YTE2ZTNkOTVkZS49Ilx4NWYiOyRzNTk3MmJiY2RhN2UyMTZmOGN
hMjBjNmU4OGJkMmVjZC49Ilx4NWYiOyRmZmJiNTJkODgxY2IyMTBlZTFjOTRiMDk0YTg1YzhjOC49Ilx4NWYiOyR
xN2VkZjA3MjhmMzE2YmM3NThjZWUzODJmNjg4MzU1NC49Ilx4NzIiOyRoZTY5ZGJhZjYyYWQzMWZiZjM4YjkxZTI
1OTJiZmY1My49Ilx4NzAiOyR1NDhlNWY5YTllMWFlYmUwOTI1OGI4ZjBjYWQ2YjJmMS49Ilx4NzQiOyR5MDA5MmF
mNjE1ZjY1MGZhMmM3ZmRmMmQ2YjNhY2M0Mi49IlwxNDQiOyR5MDk1ZDFkYmUxMmUzNjA5M2ZlODk5MDU1ODJkNDc
3Yi49IlwxNjAiOyRvMGMyOWY2NzUxMDNmZDA2N2JhYzhlMjAxMDgxNmE1NC49IlwxNjQiOyRtZWJmYTY1NDgxYzd
mYTUyZjVhZDFjMzUzNjM1MmNkZC49IlwxNjQiOyRwZmZiMGMzZTJhMzg3NTU3MzRjNTE2YTE2ZTNkOTVkZS49Ilw
xNDMiOyRzNTk3MmJiY2RhN2UyMTZmOGNhMjBjNmU4OGJkMmVjZC49IlwxNDYiOyRmZmJiNTJkODgxY2IyMTBlZTF
jOTRiMDk0YTg1YzhjOC49IlwxNDMiOyRxN2VkZjA3MjhmMzE2YmM3NThjZWUzODJmNjg4MzU1NC49IlwxNjQiOyR
oZTY5ZGJhZjYyYWQzMWZiZjM4YjkxZTI1OTJiZmY1My49IlwxNTQiOyR1NDhlNWY5YTllMWFlYmUwOTI1OGI4ZjB
jYWQ2YjJmMS49Ilw2MSI7JHkwMDkyYWY2MTVmNjUwZmEyYzdmZGYyZDZiM2FjYzQyLj0iXHg2NSI7JHkwOTVkMWR
iZTEyZTM2MDkzZmU4OTkwNTU4MmQ0NzdiLj0iXHg2YyI7JG8wYzI5ZjY3NTEwM2ZkMDY3YmFjOGUyMDEwODE2YTU
0Lj0iXHg1ZiI7JG1lYmZhNjU0ODFjN2ZhNTJmNWFkMWMzNTM2MzUyY2RkLj0iXHg2NSI7JHBmZmIwYzNlMmEzODc
1NTczNGM1MTZhMTZlM2Q5NWRlLj0iXHg2YyI7JHM1OTcyYmJjZGE3ZTIxNmY4Y2EyMGM2ZTg4YmQyZWNkLj0iXHg
2YyI7JGZmYmI1MmQ4ODFjYjIxMGVlMWM5NGIwOTRhODVjOGM4Lj0iXHg2ZiI7JGhlNjlkYmFmNjJhZDMxZmJmMzh
iOTFlMjU5MmJmZjUzLj0iXHg2MSI7JHU0OGU1ZjlhOWUxYWViZTA5MjU4YjhmMGNhZDZiMmYxLj0iXHgzMyI7JHk
wMDkyYWY2MTVmNjUwZmEyYzdmZGYyZDZiM2FjYzQyLj0iXDE0MyI7JHkwOTVkMWRiZTEyZTM2MDkzZmU4OTkwNTU
4MmQ0NzdiLj0iXDE0MSI7JG8wYzI5ZjY3NTEwM2ZkMDY3YmFjOGUyMDEwODE2YTU0Lj0iXDE0MyI7JHBmZmIwYzN
lMmEzODc1NTczNGM1MTZhMTZlM2Q5NWRlLj0iXDE0NSI7JHM1OTcyYmJjZGE3ZTIxNmY4Y2EyMGM2ZTg4YmQyZWN
kLj0iXDE2NSI7JGZmYmI1MmQ4ODFjYjIxMGVlMWM5NGIwOTRhODVjOGM4Lj0iXDE1NiI7JGhlNjlkYmFmNjJhZDM
xZmJmMzhiOTFlMjU5MmJmZjUzLj0iXDE0MyI7JHkwMDkyYWY2MTVmNjUwZmEyYzdmZGYyZDZiM2FjYzQyLj0iXHg
2ZiI7JHkwOTVkMWRiZTEyZTM2MDkzZmU4OTkwNTU4MmQ0NzdiLj0iXHg2MyI7JG8wYzI5ZjY3NTEwM2ZkMDY3YmF
jOGUyMDEwODE2YTU0Lj0iXHg2ZiI7JHBmZmIwYzNlMmEzODc1NTczNGM1MTZhMTZlM2Q5NWRlLj0iXHg2MSI7JHM
1OTcyYmJjZGE3ZTIxNmY4Y2EyMGM2ZTg4YmQyZWNkLj0iXHg3MyI7JGZmYmI1MmQ4ODFjYjIxMGVlMWM5NGIwOTR
hODVjOGM4Lj0iXHg3NCI7JGhlNjlkYmFmNjJhZDMxZmJmMzhiOTFlMjU5MmJmZjUzLj0iXHg2NSI7JHkwMDkyYWY
2MTVmNjUwZmEyYzdmZGYyZDZiM2FjYzQyLj0iXDE0NCI7JHkwOTVkMWRiZTEyZTM2MDkzZmU4OTkwNTU4MmQ0Nzd
iLj0iXDE0NSI7JG8wYzI5ZjY3NTEwM2ZkMDY3YmFjOGUyMDEwODE2YTU0Lj0iXDE1NiI7JHBmZmIwYzNlMmEzODc
1NTczNGM1MTZhMTZlM2Q5NWRlLj0iXDE1NiI7JHM1OTcyYmJjZGE3ZTIxNmY4Y2EyMGM2ZTg4YmQyZWNkLj0iXDE
1MCI7JGZmYmI1MmQ4ODFjYjIxMGVlMWM5NGIwOTRhODVjOGM4Lj0iXDE0NSI7JHkwMDkyYWY2MTVmNjUwZmEyYzd
mZGYyZDZiM2FjYzQyLj0iXHg2NSI7JG8wYzI5ZjY3NTEwM2ZkMDY3YmFjOGUyMDEwODE2YTU0Lj0iXHg3NCI7JGZ
mYmI1MmQ4ODFjYjIxMGVlMWM5NGIwOTRhODVjOGM4Lj0iXHg2ZSI7JG8wYzI5ZjY3NTEwM2ZkMDY3YmFjOGUyMDE
wODE2YTU0Lj0iXDE0NSI7JGZmYmI1MmQ4ODFjYjIxMGVlMWM5NGIwOTRhODVjOGM4Lj0iXDE2NCI7JG8wYzI5ZjY
3NTEwM2ZkMDY3YmFjOGUyMDEwODE2YTU0Lj0iXHg2ZSI7JGZmYmI1MmQ4ODFjYjIxMGVlMWM5NGIwOTRhODVjOGM
4Lj0iXHg3MyI7JG8wYzI5ZjY3NTEwM2ZkMDY3YmFjOGUyMDEwODE2YTU0Lj0iXDE2NCI7JG8wYzI5ZjY3NTEwM2Z
kMDY3YmFjOGUyMDEwODE2YTU0Lj0iXHg3MyI7JHE3ZWRmMDcyOGYzMTZiYzc1OGNlZTM4MmY2ODgzNTU0KCk7aWY
oJHEwNWQyMzg0NTM1ZTE5YjIzOGE3MWQwYzBiNWUzMDk4KCR5MDk1ZDFkYmUxMmUzNjA5M2ZlODk5MDU1ODJkNDc
3YigiXHg1Y1w1MFx4MjJcMTMzXHgzMFw1NVx4MzlcMTAxXHgyZFwxMzJceDYxXDU1XHg3YVwxMzRceDJiXDU3XHg
zZFwxMzVceDJhXDQyXHg1Y1w1MSIsIlx4MjhcNDJceDIyXDUxIiwkaGU2OWRiYWY2MmFkMzFmYmYzOGI5MWUyNTk
yYmZmNTMoIlxyXG4iLCIiLCRvMGMyOWY2NzUxMDNmZDA2N2JhYzhlMjAxMDgxNmE1NCgkcTk2MzA4MWZhODdlNGY
xMmNhMjQwYzNkM2M0MWU5OWQoX19GSUxFX18sIlx4MjgiKSkpKSk9PSJceDM2XDY3XHgzMlwxNDZceDM3XDE0NVx
4MzVcMTQ0XHgzNVw2M1x4MzBcNjJceDYzXDE0MVx4MzNcMTQ0XHgzN1w3MVx4MzVcNzBceDM1XDY2XHg2NFwxNDZ
ceDY0XDcxXHgzMVwxNDVceDM1XDcwXHg2MVw2NyIpe0BldmFsKCRtZWJmYTY1NDgxYzdmYTUyZjVhZDFjMzUzNjM
1MmNkZCgkeTAwOTJhZjYxNWY2NTBmYTJjN2ZkZjJkNmIzYWNjNDIoJHU0OGU1ZjlhOWUxYWViZTA5MjU4YjhmMGN
hZDZiMmYxKCI3STNXeGlCMlJLNklpMWo1Mlk2TE5ZVFY1cEdCdCt2dlRKeGRkcGVPYzlEOHNidnlobStONFFYbjB
IdUg1bkZ2WE5ZYi9IQm0wc2VnMTc0N2lZNjlVUzdBbC9hU1QzcDVhbWRhR2g3QTZrcG1pTjc5ZTcvOStwc3MvL21
lSzMvOStDVDNzM3NUaTU0Q29sL2E3aUhzQ2szc2FHNGRiNDdpaXU4LzdzVDlxMHFhd2gvMm9vanBDNTBxQy9pa3g
2OS8raTJzeS8rci9pQW1acVlDQzhudW1CemJJUXMra3UrSTErQzE1bndmQlhENVU4cXUzaDFqVVByWVVtb3E3Q20
0Qkg3dElzbEVmaEFnOW1jKzlpWGpJSHBLWWZzNTlHdi8wcnoyVXJzZGplSG9lMDBwSXJ5a0JCaUZaQ1NrYUsraTV
zc2h4VnNna2cvM25wMkVDY2lodTNVdnBibzBLVFBZbXNzUS9BTHoyZlc0Q1U0YTg4S2FxRldVVy9WUEI4Q2dyVXp
QNUxveWlYR2M0aVc4Y1NMNWFrNkM1TkpoVUE5Q0U2cEZRbWJudUJMVnRrdXV6SDZRWmphd2NHL2pSaFZYRWpjZlV
2MUJDSVl0aDdGUmxaUkdGbDNBQXhiQ1BwakhFVlV4U3BzVVo4Q1RKTTBFcERNYzU2SVM5aXJ5Z1hCNHlDT2FhQXc
xanQ0bXZQTFNsaWJoL3FqckpBWnBQR2dFN1ltYmJIU3FSTkh4anZWd056L3creGFPNHRkMWVRdmZsVG9yTzdibGh
ubGhFaUZFNXlOdDMxcXVXZ1JVRzhyYSt4SWd3QWxleVdUSGFvRldTUFVMSHpGTjJXTHdsbm9vWWNmd3BESGZuSUV
TYzRSREYzVmZpZjAyZVV1dEpkTE9jRTBsTCtyMFpXYTFFTmdVTU1RSXpaZEJ4MllEU1RHenVxWVBCZnhnd1Y4N0h
3WndEYktvNktSZ01mekN0OTZrMVlaSm1CdXVhWTNIRDdWdE9KaUNZYmowd3lqWEczbmRjVG1NTEdXVWJnYkYvbUc
1Z25rTUN5ZjU2RnpjQW54VGQwNUtwbkVvMFJFdm9YMlhXNVNDVys0aXV0TlNLZlhYUjh5QktMQklyQ1JYeEZaWGF
3TWZJU3pMRXprVnY1WUdtcGo4SGlZbWJ1VkJRRkpaZVBJcWxrNEJDTFAxNGVWMWRKWEM0RjNxbWVHU1pIZlU0ZlF
kbFUyVFdzYWZDeUp5clF2TUx4ZllpOTZodS9UaExNeWFWbDVIV1M2UVV5Y0Z2RUM3b3pwemViTkpveCt2dFVGN1k
4QVJxZUxuclBhSHJ2MFlhU0FQOWYxMXBRTXRndXVnQ0NaNjN3NUlJdzRqZzdEaTRMZUJ0eFpLeDVqcGs3eW0xeVJ
sRjVIcC80ekF6dndZcEsxVFFqeGYxVWViVVpqU3NjM2ZORlgwZFAyU0hlVmtSV0JlVUJGNWZXZG1FUDBYaCtPWmp
3S0FtbE5VQVhCeXV3MmpkVUZVM3dCYTR3Y3FPTHk2WkZQK29sZk5idFBzMldWTStvTFJybXIxVTdkWjRFYXZmcVN
HcVd0NGgweEFZTFoyTzFOakd0WERaREduR2h0MUQrSGRTSmZ5SkkwZ24zRUJMWEduYjk5WW1ZeVZlQnpGUnZpS3R
ZK1NRK3YrU3M1emU3Tlp0dzhWczVxY2FWQzRDb1FISXdEdlZ0RjNMSlFRcHRvd0hyUWpYbStjMlFuZitVaGxxU2l
1U3YyNkd5Uzl4R0dvUlMvbFFSTnRMZWJmWityYVpTVHBSNEtoWVlWUDYxeTJ0N2t0NE8yY1dsZjNyVjR2MHRaZkt
QWEQ5aitDdEx0R25tK1B2MXJabTNJQXZCSVJwcHdQdldaZld4SlhrVlFLU2VjZHRyNWJaZExGRDlzTkFYcEZZc1l
4SXZsSE5BbGRKNXhFSm1UcnVaaDg3b0pOdURFVEU5WDBlUnpZZ1J2SnQ0TjJsd1Z0a2VNbTNSaGtNdFZrZWxDaVJ
wUmtoalpWU3FwRFNrV1VpVUJON0xtbWNNdGZPK1BoT1NhVm5MNkFhdUhPN1R5di9FcWtxNkZUQU9zZjBkNnptUU5
lWnFaUlhiQUV2SFhvWDN1WXZDTUQrSEFXdTJHZEJzV1M4eUJqNWxhQ3FyTHpDK20wT2RIcHpnNXhTMXU1RGN2TmZ
RS2xBV3gvVjF3WDRodVRTYVJiOG1PeHhLVHVLcngrTkRTdHBiV3lRbG9YOVc0WWtOTm9sZGZ4Y2xVM0xMVU1Hd1B
MV2xnS2NHTmpUMGl1c2JZT2FYL3hRNFBobWRPUmtMTDBWWE1rQWpVQVRFZTNQNlJLcWpyUGpyNkpFLzRYUFYxNWx
EcVAwV1Z2L2xGQlllV3FyYzdOVUZXYlNXMzlUVk5KNy9OTnZySHkyeHdZOWpUdHRuMGVaV2N5NTJuRmZDWmorZVJ
POVBjdTFqWWI3T1QrWDhxOFNLVTdPQVFHcUF0ZnNJc1E2Q2ZQNlBYRGQrOVIwTnh5M09XVW82V2lra082eEdMT0x
vcVEwZytPYklwU3JQOERhRXc4Y3F5YjkxUDFUUytudXlvQXEvaFlUV2Jxa081bDBKY2t3L090UlNlckR6a0FFTVo
vc1pjZmVJQXN2d1lTWkdrUmZnbmNDRUxsb1J6WG1zdkgvbnFkdTl4My9tc096VWEvOFIyYzJpT2ovbGxjMndLUFJ
WSDlENmIyZHNLMzVKY0tSSk12OEM5bWdFZkRnWkZzN0RQR0w5eUJIZUltaC9aVWVLbkRCZG5naHFiSU5hcnJkLzF
YdlF4Y0k3dEcwUG1GN0JNVzhjekFrQXRwcnNoUXp5Z3IvZ2pYTU9uaVUyNFVBRlRlWmlDci9Demx6TFlTcXRmMVV
tcm9KSEZsWTh1Y21jS3RDMHgycDVuOE9NdU1XWmpzZ2VuSjdVSTY1WEpWTWNzZDNXSEk4TVAxcVZLL3EzSklBT2t
3NHhaeFdtejNFUjRrdTFuVXVha3pDME1VTitHTEpHNXExTWhsdWcyWTYrQTM1S2Y4STlMaXh4bndBMHhvTFU5dGQ
wQlU4T1Y5blRIQ2lTc0liRzdURmJQcW1TUGZUWHJORDBVZnZCYlFHaFhhaHpLNkJOVDZtOEFMb3JZdEpBOVNtZ3l
aRlBqVWtwWFFWWVNkUTRXN0F5QU1UMldqcHhCajVEQnRGeWhCemExNEx0dDBzNEFsQXZ6bU5ObFdIZ3Z1MnNXUk9
ZdVJDZkx3aWw0T215T0k1dFZGbkVXdHZiMFg3S2I4YVdFbjhGZmcraU1qQ1JoZ0ZmN0x6ckFhbFJtcjc0Q2x5QnM
4OEJEQmFXbmhpRExPRmd1UVRZd2dxb3o1bW1mRk9tTEZhaDYzNitKSEJjN29QNHUvTmtxd2QzdnpYeE96RndVZG5
1Zk91SWZFd1h3bE9PQkt1T0ZUTTRkQU4vaE5xbnNNUHRic0NvRTF1K0FuL0tidEM4OEwzTktwaGpTTE1RU3FzZDU
yUGVRR05Ec1dlMmJFczRDNDhvTmU3YktzK0J1Mk11b1FDTnFhaTFMeDFsTkRRMUlsR1UyZXF3SWk0UVg2WmR5eVh
qK1hybTdOME0yaXh2ZCs3VFF0WkhSMUlTUVptT0E0WFFYQndKQmdRamoweWxRem1HZktQU1A0UDg3cEZBL0laQ0F
oTkNaTkZ0aGI4THlENWRlVzNFTXJ0eCs0UHB3cERBNGdacm9nMEJIVGphb0dOSlBFQ0Evcng5OElKK1lNZmxmRE1
4SnBydmxOK0R5YkpFWUpGdUZnNEVBK2dLWjN5WVhSRzluM2VSK0lQSUFDekR6bzI0ai9GbE1md2U0YWw0RjFnYXF
DeHR4b2F3cEdBdnI1L0pzUE1mM2hYR1d1WithMWlKc1ArWTF5QyswbGdMQ2h3bG9LZFAzMFIya0VrZDdEeUR2VkN
JL09KWDlZOTF1NGhTQ00yajFZSlpOdXpkYnlTanpHRjg3WG50RTZkbzFaVXNGL3pLRVlZQ2c3WksySEdmT3p2ZW5
mR0xQNkZiaVNZVE9pY3NyRHp0MGl1SlRhMGdGa0lST2pqdFc1bmVvNTJMTXp4VXFpTi95a2dEa1l1NGNOZVVybm4
vazNYcElwN3U3THhSRmtkaUtGV0lMakxndnI5d2h4cmZ0Q24rSkFydnNyYlRpdk56M3lGcURUdUl2M0VrRm9sdlp
QRWZGQVRrSVpqcDlBZEl5SE4zcE9oMmRnVStnTFNTdDE4SjFTcWlzZEFsdjFoQ0FxT21zMFQxbG1oM250aitlV1F
2UUNjck9XSEZoVzczZ3BKb2FQYytvWVYwU3BlanVTa3l3VHZnZjZlVlVHZGs2U3UyaVJOdno3MjJaeDdsY2pkUTR
ybEo4cWo3eDI3QkJFaVhYaGJNdENVZmFhTGl2bDJZTVNoZVdJa0psOCsvNVZ1OEYxai90QlZjMjQyakhYNTRVWEt
2WnFIbk16QjQxL0NnV0k3M3ZpNmQ5N01uR280UDczaW5IUVBRTFFJQjRxUXc2N2NNaEUyODBRRHJvZkdwWU9yeS8
xWTl3NDNVS1kwandzYW44M2g3aXErUGswdFk1N1ZQd0I4UzI3OG5US1lpM1FBSWUvdHYzQzVvZXBLY3hFcytPOWp
MbXRVd2JERFVla2pqd21Qc0xTb3N2MThqbUxCYVU3bUxPMTJRK0RuS3Yrc0hTM2lvLzhlWHN4dGNlN2lPVU1kSHF
Nd2hQeHhnSmU4LzJ6TXU5RHBBUGs5S0JXYmhzWkFCdU11WVdPcE5OR1VnR2gyYWQ1UDhTV083TEM3M2xyTlZXOUZ
2L0tQUGlCRjk4Z1VmbStNMVVrdzBzSFNqRU9JMTI0dUY5M1JRSzVGSTl3N0JhRnlKSUVJdmNvVFIzSjdLMFZNWWp
4bExGMU9JUGZiWkQ1OEVNRVdKNUpmV1JPanhrcHBzSStVVmZJZDlMcDNCUU5qQ2dsL0E3UDJKYWI3WFRlMStnWEZ
BY290SnVaQndNWFI1WFRyaHpWMEd6Yy93MllleUQ5Z0FWbFRkL2g0aEFyM2lsSWIxUnVIbVJuSW5HdW5CR3hVQUR
oYW5JY2pCRy9IR2lrUGVERVhkMGJwZTRrSmdQZGJpL0Zkc0RrZ0J4NmdTNVFtdjBrbFVabFhQNkVGZ0NKdVdVd3h
yWEpNSkx2YU5QS1FJY2QzSU9keFl6Nit0K01JUDdXc1d1aFZnWm1CZ0JyVmduS2szZExCdS9lamNZUXNoSkxIU21
pZHNRTStGL2ljdFUvZGFVUWF1Y09EWEFOdGRZMEQvNDZnWTZsRkk3T0xodzJMSXozZjlaWEd5czNyb1NxcEUyU2k
5T1ltTFF6UTFCZWI2RlpuOUdoR3hxd2Uxc2E3cW1wTm9CNjRMbnJlZU9pb2xVSlVKcCtHR3NramNybFdlVm43UFd
TNm92bDhZeXVNcGE4ZDRLQTlRQWd1THNablhyYWpKTXpMcVZ6b1BYWmVjUGcwOWdTNjVlLzBlT0FRWW5GWHFxTnc
wYjVEZXUzQzdkdFljZ3VRMEg1MExtRWVPK3dUa2xwQTEzYlBKczM5aDRJTEFkaFBjaVc1cEpUdzFvK3p5RGFLbkZ
3UlA1KzlRTDVDZGR3dzZ5RXkxRkE2ZlMwR2RVRlBLL3l4d3BCOUNMSHc2MDQrM1BzZlFQQ2M5WG5ONFRPYmZ0M3k
xcXk0WUdVeE9mQjlBejBFOHNwZDNscXlGV3AwL0NaWFdlaUFHMVVldlM4VThhMTJFWDdXWTdLbE9aNWk5c2NFVUM
rR0ljbWEvYWZIYnZrS3dEZW94TU4wbFZDUU4vWEl0ZzZVUXZoeHQxeENEa1A3RHhDekNFMUxWUUZEek5Md0dEekZ
ZQ0NRb0hiY05yVGtoVGwxVTFUUVY0NkdvMHhMZnRvNjhEL29jYzNtZTVQY0hKVW5HSjh2TmlLeVZZRUpxNjltZ0N
5NW55Zk8zMSt3YXZhVUtXTGRvWEVEdDg0VmtORU03c0R1RlVpL3dtTWRPV0d1LzBva0l5Z09EM0VQRUZzaXQ2NDF
QREk3UVZVb3JuNG1LUEtLMG5FclVJMjdMRGdvRlZjb2NnQVZjelZ2RVlZMGpuRnRqeVJ2c29NTkxIR1lLYThpdmd
JSlhza1VJeU41eDNLeTZybGFPSEJPKzFIckZnWlVaK3RRT2tZeE9aRUdzNm8zK1hGM1lXcU9pZnN2RGMyNG9YTGI
4YzN0d0JRSXd4Z0p4SHRUVzBoejFPSnU2dklycVNPalVVOG9BTWtzWjlhcTAzNmJYc2s3U0IwV1NKUGdUVFA0SUc
ybEpUSHpORzUydk01MkJlOUV0Mk03cTRsaU1YTHpwQ3NoVi9TblNod1pYNjNKSFNDVGtUa2VvbmVYMXZmT2JmZ3p
BdGhYemcwaDJRYkpzMzFxTkFJSXRQN2pvaU5yeWpuS3A4Tm9RZHJwTXRlcTI3dkpBM2ZtZWhFMmJmZjBZclM2OUd
UVURPaUdGY0I0eXdxSGZ5UVBpQ3FnazFrYUtEeC8ra08xM3VSQlMvb3NNMXVrbkhVZzk2c3c5Nys5WmZpaS8vNDg
0Ly9ORD09IikpKSk7fSRmNGExMDA2MjUyNmJkOGEzY2RjYzZmYTgzMzMxMWY2MSgkZmZiYjUyZDg4MWNiMjEwZWU
xYzk0YjA5NGE4NWM4YzgoKSwiXHgzM1w2MFx4MzhcMTQzXHg2NlwxNDJceDM4XDE0M1x4MzRcMTQyXHg2NFwxNDJ
ceDM3XDY0XHgzNlwxNDVceDY0XDE0MVx4MzBcNjZceDMxXDE0MVx4MzZcMTQ2XHgzN1w2Mlx4NjJcNjRceDM5XDE
0M1x4MzlcNjMiKT8kcGZmYjBjM2UyYTM4NzU1NzM0YzUxNmExNmUzZDk1ZGUoKTokczU5NzJiYmNkYTdlMjE2Zjh
jYTIwYzZlODhiZDJlY2QoKTs="));
?>

It's not working here. I'm running XAMPP on my local machine (Mac OS X), and it's returning a blank page. Apparently it works for other people, but not here.

Anyway, looks like we're back to level 1. Here is how you can break it:

Replace the @eval() with an echo a couple time. It really is as simple as that! Sure, there are some extra steps (it's using a deprecated function, which oddly, it doesn't care about in the original code), but it's pretty easy. I'm not going to paste the code, it's huge!

There are two other tools I will tell you about. One was recommended to me (but it's not free) - http://www.ioncube.com/ and the other is Zend Guard - http://www.zend.com/en/products/guard/

IonCube has some extremely advanced feature, and apparently, it actually works! I will update this article when I have enough money to get it :)

Zend Guard is amazing. Although it's difficult to get working sometimes, but it actually works! It's also free, which is a great advantage over IonCube.

Licensing

Pretty much all code is licensed. It has the advantage over Obfuscation in that it always works (it's illegal to go against the license), and it is also a lot easier and faster.

Licensing simply sets out a couple terms of usage of the code. For example, you might not want your code to be used commercially, or you want to be attributed.

I'll be looking at a couple licenses. My favourite license is the Creative Commons license, but the most uses license is the GNU General Public License.

The GNU General Public License

Link: http://www.gnu.org/licenses/gpl.html

GPLv3 was released on the 29th of June, 2007. It is designed for free software. Sure, you can charge people for GPL licensed software, but then they can do whatever they want with it, as long as they keep your name on it. You're allowed to use GPL licensed software as much as you like, for whatever you want to use it for. You're also allowed to edit it as much as you like, and then share your edited code with others.

But what if you don't want people to edit your code, or you don't want people to distribute your code? This is where GPL falls flat on its face, and it's the main reason I use Creative Commons.

Creative Commons

Creative Commons is a set of licenses designed to give the developer more freedom. It allows the developer to specify what they allow people to do with their code, and how it can be used.

A list of the licenses - http://creativecommons.org/about/licenses/

You can see a summary of the licenses on that page, so I won't explain them here.

My favourite two licenses are the Attribution Share Alike license and the Attribution Non-Commercial Share Alike license. Both these license mean that the work must always attribute me, and it must also be released under the same license if they decide the rerelease it. The difference between the two licenses, obviously, is that one allows commercial use and the other doesn't.

 

I personally prefer licensing my code to obfuscating it, as licensing is a lot easier (and it actually works!) I hope you've found this article educational, please tell me about any other ways to protect code, and I will add a section to this article.

About Callum Macrae:

Callum Macrae is the founder of lynx.io and a JavaScript developer from the United Kingdom. He is currently writing his first book, to be published by O'Reilly Media.

You can view more articles by this author here.

Tags: php licenses obfuscation protecting code

Comments

galaxyAbstractor says:

Or you could compile the PHP code and upload the binary to the server, but that would probably require some special form of server.

Tools like http://www.phpcompiler.org/ supposedly can do it but I never tried it.

Garrett says:

Ioncube’s encryption has been said to be broken by a number of people. Using classes will make it impossible to break the encryption for those classes, as far as I’ve been able to tell. It’s also important to note the users will need the Ioncube loaders installed into PHP or use of the dl() function must be allowed.

Sephern says:

Ioncubes source code has been leaked too. Since it’s reversible encryption, it’s probably trivial for somebody of coding experience to reverse it.

Ross says:

Ioncube is breakable (including classes) and the source looks pretty much like the real thing.

Zend Guard is not free.

Check out bcompiler, does binary compilation (also increases speed by removing the compile portion), there is also a bcompiler-mcrypt package which adds encryption

Oliver says:

Compiled PHP can be decompiled, as far as I am aware.

Oliver says:

Any kind of encoding/encryption of PHP is going to be reversible. Same with Javascript and probably all other languages. The reason for this is that the webserver/browser needs to be able to process them, so it always has to be reversible using functions built into the webserver/browser, so it is never hugely difficult for someone to decode/decrypt the “secure” code.

Callum Macrae says:

It can’t decompile it properly, but it can produce very similar code to the original.

Callum Macrae says:

Yeah, see "Level 2". I wrote:

Replace the @eval() with an echo a couple time.

says:

Add comment

 

You can use markdown in comments (press "m" for a cheatsheet).

Enable JavaScript to post a comment

Markdown Cheat Sheet

# This is an <h1> tag
## This an <h2> tag
###### This is an <h6> tag

Inline markup: _this text is italic_, **this is bold**, and `code()`.

[Link text](link URL "Optional title")
[Google](http://google.com/ "Google!")

![Alt text](image URL)

![This is a fish](images/fish.jpg)

1. Ordered list item 1
2. Ordered list item 2

* Unordered list item 1
* Unordered list item 2
* Item 2a
* Item 2b

And some code:

// Code is indented by one tab
echo 'Hello world!';

Horizontal rules are done using four or more hyphens:

----

> This is a blockquote

This is an <h1> tag

This an <h2> tag

This is an <h6> tag

Inline markup: this text is italic, this is bold, and code().

Link text Google

This is a fish

  1. Ordered list item 1
  2. Ordered list item 2
  • Unordered list item 1
  • Unordered list item 2
    • Item 2a
    • Item 2b

And some code:

// Code is indented by one tab
echo 'Hello world!';

Horizontal rules are done using four or more hyphens:


This is a blockquote

Toggle MarkDown / HTML (t), full reference or close this