From 0524b2a7cdc406dddc6adb456c9c6c69fde744a3 Mon Sep 17 00:00:00 2001 From: nullius Date: Tue, 2 Jan 2018 04:42:22 +0000 Subject: [PATCH] Import 1.0.8.6 from a.m.o. Closes #10. --- README.md | 2 +- src/META-INF/manifest.mf | 47 ++++++++++++++++++++ src/META-INF/mozilla.rsa | Bin 0 -> 4196 bytes src/META-INF/mozilla.sf | 4 ++ src/manifest.json | 4 +- src/setwhitelist.html | 16 ++++--- src/setwhitelist.js | 26 ++++++----- src/stop_cf_mitm.js | 90 ++++++++++++++++++--------------------- src/style.css | 2 +- 9 files changed, 121 insertions(+), 70 deletions(-) create mode 100644 src/META-INF/manifest.mf create mode 100644 src/META-INF/mozilla.rsa create mode 100644 src/META-INF/mozilla.sf diff --git a/README.md b/README.md index 7987dd2fb..70b62da8a 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,6 @@ The purpose of this browser add-on is to block Cloudflare sites. The TLS protocol promises end-to-end encryption between the client and an authenticated, identified endpoint server. The browser’s lock icon is a UI widget which makes this promise to the user. Cloudflare is a mass-decryption chokepoint, which intercepts and decrypts the Web requests made by billions of people to millions of websites. - Prior discussion: [Tor Browser Bug #24351: Block Global Active Adversary Cloudflare](https://trac.torproject.org/projects/tor/ticket/24351) -- Imported from [block_cloudflare_mitm_attack-1.0.8-an+fx.xpi](https://addons.mozilla.org/en-US/firefox/addon/block-cloudflare-mitm-attack/), by an anonymous cypherpunk. “Cyperpunks write code.” Cheers! +- Imported from [block_cloudflare_mitm_attack-1.0.8.6-an+fx.xpi](https://addons.mozilla.org/en-US/firefox/addon/block-cloudflare-mitm-attack/), by an anonymous cypherpunk. “Cyperpunks write code.” Cheers! - [Original announcement](https://trac.torproject.org/projects/tor/ticket/24351#comment:25) - Thanks to [Debian Bug #831835](https://bugs.debian.org/831835) for some inspiration. diff --git a/src/META-INF/manifest.mf b/src/META-INF/manifest.mf new file mode 100644 index 000000000..a59452c70 --- /dev/null +++ b/src/META-INF/manifest.mf @@ -0,0 +1,47 @@ +Manifest-Version: 1.0 + +Name: manifest.json +Digest-Algorithms: MD5 SHA1 +MD5-Digest: zGY60qlrfec2aFsUpYrEqw== +SHA1-Digest: v9XeO2ot0V/rLuSXYs4AUccSP4Y= + +Name: setwhitelist.html +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 5IRX40t9xV3hOSzG5DQt8g== +SHA1-Digest: bZ6eElvQE432Qn5zeoGXI46I4OU= + +Name: setwhitelist.js +Digest-Algorithms: MD5 SHA1 +MD5-Digest: zyiTPW8+zVdotk5uf71nuw== +SHA1-Digest: Ttn6071lJN7uBVK2UaZOhroEm5I= + +Name: stop_cf_mitm.js +Digest-Algorithms: MD5 SHA1 +MD5-Digest: z8IOdHN5/VdbDGGQNMqMnw== +SHA1-Digest: jzwn+6SLINasUf2De/FE8fpmNJc= + +Name: style.css +Digest-Algorithms: MD5 SHA1 +MD5-Digest: qVs2pHeT+noWZ7sQttO/2Q== +SHA1-Digest: TgXktEJyUNImPTbaPF/viYfWcQo= + +Name: icons/icon-16.png +Digest-Algorithms: MD5 SHA1 +MD5-Digest: BMpS9q28ylgmlebPGO0HBw== +SHA1-Digest: ejT7934OdR+CRbKWJFoXPSvAo7M= + +Name: icons/icon-32.png +Digest-Algorithms: MD5 SHA1 +MD5-Digest: DPnYcEZnUZa6voVAI6nm0w== +SHA1-Digest: CqFkcPOpoKmq7Ly82vbmq/Ouhzs= + +Name: icons/icon-48.png +Digest-Algorithms: MD5 SHA1 +MD5-Digest: PVwvbCCjWU+2fJeaUrrwVA== +SHA1-Digest: upats+fdmYeFmAtgvIVwaW8mszA= + +Name: icons/icon-64.png +Digest-Algorithms: MD5 SHA1 +MD5-Digest: YVzojmSoYwjhM0m20OOk5A== +SHA1-Digest: sa4ES4gA5mSb0cu9UgGpp/2eh84= + diff --git a/src/META-INF/mozilla.rsa b/src/META-INF/mozilla.rsa new file mode 100644 index 0000000000000000000000000000000000000000..65093fd1a3f6cef872e4c6b025cc749496fce9be GIT binary patch literal 4196 zcmds4XH-+&wk3stbO-`U6$C^GoP^$yCW`bTMS&Q43mpV$K@pG^3sq`FKq*p#C?Hit znt*g8V4;ZgUgUy4KYjQ8c)#9wW8886oO#w<`>eCiUUTmW;23OR$IeD-MQ+l9D8Sh` z1_J=cpaTYhkkr627`ZSV1bmX5450o)0%hZ9-T^rBZU6_V&W3=01F;X2qrCs$WAj~dp?1M7wMal*PI#Q?-nlo~GZ zJ9k4N7NYwL?SBJdbFIk-EyJMb9UdHFeE?2t%6>?i>OKjZNa3E};VgutLh(YCf& zcW+U*U+)sddO08^0MtJv9s{xPd;c2B8-exk7XHQmm9O$U3xjn7xL9eCG5``l0Z2(e zT*iWx7A1ZN53ipP2#-d>0mfg&Q~fFUzkfUnzg!<)6n zS{pqL&pY<%zSnL)uS)CJ=m#HQ-fhH0GosQ3JzKI$`d;J_ugiR9BrHZ-^S$|a(6pi6 z?bvACW8nL+I!TO!{!JqS)+ zzBQ^-v3X1UiVyn=qd%ID>*n`%VKNP!a(rsNvpmPC(MZ(4$p(#~V2 zh?Z^-l002o7ag`)(6B*eN-8Emb~wA|5tmi9V&f|>yq~l7Rf1&;zZpS6`p$T~P@pwO zm_kEvXNJ;e2bjB!XDD8Mk>+-wwBQm59}Y9-S1W(LPJFwhc&30&l9zx+sBT8 zCcB=M>Yf7&a)J12+3h-T?kwxKB(r@$r{ftnyhR}^+nJC2B*)bRK|g}I4@aPz3 zdj2DMNY}lQd7f)$F2KZscVCh_lwc}hMA|MXokoR4S@i_Q(g~ek?2s;KQ)k?2p|R?_ zNJ*7X7zEjDbQG4w)0m+~(=H5W(DyRzz=BSgK63k9W}~0c0oyRwQ^=|JZXAoJOeS9G zrOLe?TU}`L#lKrsUUHn$ee<)kBUh5{W(V%otWl*0n%#W^GH^Gu21!5ABK=OHoF
    os(VjoXjDX;!mYA|8yeTAVUA=a5z7H8Zj ze|(l(MutUD34edX7M=biTy~MH;N{A3wsyI&Qz{xBo{n$BFq{#sdX!E)sXE#X`%{Gv^%g0O5|>0tppI1d2ul1H{Eyjf{x=10>J%TT z=3ttn;;TzLfytXOx_#37zR+^ge6vG_)?P^GOP2P!MEgyNLe8O&&nt_Zb)MMh*7;AT z>y$PLcMbC1p&3iqP|cj)L#HVugQ+8>1uiy~lPT4mQUSH^fEuB^1322XBiLTEDm4t|t&KO;CxaW>B z4R)+hubXjzNM!jApzey*GA9RFX`OKWF^e_KTNU8BBPtZd`c&}U+Qui+t<9G43w9q~ z38~cm=+hcC2odpUUyvm06qdo;Yx10iC>79~Lhd>&KI03l1esIZ4BXc<^E=fW_9a|w z^j%Fys#%v^c&*du@IF^)6UQK%eiYn<`{s77V!zLH=G;qb=_Lf7IfznNGEj(O%?r+# zS1eVz5#=@fKGLJt?%u_8dux$z!FakL-X79S(fNfWni!JYPEYWI2zmRbrRL>T>vdX5 zVmsRUp4!s>&GI%kNSKqam122PM6qF>mevya3Ld8CuRLj_rqoOw9Hiw@jc(I{lwB0K zN6e1(n>A`3@#XiS@BiE$sxWyc#*j!HsVl5$X_xbbQ-O3N@cRT|KX0=-{=z=`Hjd7| z8!4ZxdCnFmNyQ94-oss8Y0$`F5D#4aejqUfRo~ zkz`^{c=)5x|7S_Sfk1#b?3hiY7ASH{6$FI}u$*@E@$rxo6Z@ZMKQRni4CCc0>S5>h zZ^HI-`zs!52p%5$j+6)pX-{}*Jdrf6ea7rV%PEtvXDsxI2hNzSUTzm@KEtU&h^8_+ zU6ErxFyX68!2QtmNa0G_ZYIhWfblHAi)k(S$iQnusOPlbRaP zv$W@eiWBS{(^GYeC%@-iZoS$WT}l0x?l}LwR4Gr@YnH5?hGk@q@j+sY1pze6jN224 zx!i&Wd6^ZrUHB;R5G5ppE`zu6vu?@ttpJk$<{ zk8HGO!|1?n}ofH{Z{T)005TSAxpsupx8C`w$Wiff)UKj73gZ|H~Jp0;idzu&UG=6)qQGsu4Zz*SHbICgB2X zSBlzlo>8D|svB!FLoJy7-H+2dvsSeg-TIJfKhknKNMNbveDd}s#h0Li*h+cugdDdZ za{Gi}con6Utb$tJOWzfZ1+cQay(xm|z+th+a}lBN6-7P4zW0NT7W;K(O>(boqz4#@?`SUS(*3BBSxLb; zyHPd6dR?wOhmEwa(hdC)g-xv-iz#CdI0L=Bu3=~OV?_(c->+R>Liu#;!=(6~R^%M3 zZlkA~bhKbd&43NZ8V^!i?@Bkmt2#@~$xB@&%(R)P1fiWCt2@mcD76p>B4Oc1^K3hEM=aww=ZXIKRiy( bN=ze=nQx)nMpLN52kdJ)Ywsm+ffD}(M+maj literal 0 HcmV?d00001 diff --git a/src/META-INF/mozilla.sf b/src/META-INF/mozilla.sf new file mode 100644 index 000000000..320319dd0 --- /dev/null +++ b/src/META-INF/mozilla.sf @@ -0,0 +1,4 @@ +Signature-Version: 1.0 +MD5-Digest-Manifest: /gjyjvUwMAfWGYwYw54bpw== +SHA1-Digest-Manifest: 93RJzzo6Uc5BI3Yj2ffLSr6dWnI= + diff --git a/src/manifest.json b/src/manifest.json index e168c3fa5..0a42b2156 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -2,7 +2,7 @@ "manifest_version": 2, "name": "Block Cloudflare MiTM Attack", "description": "If the destination website use Cloudflare, block further request.", -"version": "1.0.8.1", +"version": "1.0.8.6", "homepage_url": "https://trac.torproject.org/projects/tor/ticket/24351", "permissions": ["webRequest","webRequestBlocking","","storage","activeTab"], "options_ui": { @@ -28,4 +28,4 @@ "strict_min_version": "52.0" } } -} +} \ No newline at end of file diff --git a/src/setwhitelist.html b/src/setwhitelist.html index cf19c9d40..1214be2b7 100644 --- a/src/setwhitelist.html +++ b/src/setwhitelist.html @@ -1,18 +1,22 @@
    [Whitelist]
    -1. Add FQDN you want to ignore. One FQDN per line. Click "Save".
    +1. Add FQDN or .FQDN you want to ignore. Click "Save".
    2. Open new tab and visit whitelisted website.
    +(.mozilla.org will allow mozilla.org and *.mozilla.org)

    [Advanced]



    -
    -
    -
    +


    - +When MiTM attempt is detected:
    +
    +
    +
    +
    +
    - + \ No newline at end of file diff --git a/src/setwhitelist.js b/src/setwhitelist.js index 33148cc50..a0e7305da 100644 --- a/src/setwhitelist.js +++ b/src/setwhitelist.js @@ -5,7 +5,7 @@ e.preventDefault(); // check each line and remove bad fqdn (simple check) var cf_tmpdata=document.querySelector("#myset_cfwhite").value.split("\n"); for (var i=0;ib}).reduce(function(a,b){if (a.slice(-1)[0]!==b){a.push(b);};return a;},[]);// -duplicate cf_tmpdata=cf_tmpdata.filter(v=>v!='');// -empty cf_tmpdata=cf_tmpdata.join("\n"); -browser.storage.local.set({myset_cfwhite: cf_tmpdata}); -document.querySelector("#myset_cfwhite").value=cf_tmpdata; -//workaround - simplewarn didn't work as expected if igncj is active -if (document.querySelector("#myset_xsimplewarn").checked){document.querySelector("#myset_xigncj").checked=false;} +browser.storage.local.set({myset_cfwhite: cf_tmpdata});document.querySelector("#myset_cfwhite").value=cf_tmpdata; +//workaround - simplewarn didn't work as expected if ign3p is active +if (document.querySelector("#myset_xsimplewarn_1").checked){document.querySelector("#myset_xign3p").checked=false;} //ADVANCED if (document.querySelector("#myset_xincapsula").checked){browser.storage.local.set({myset_xincapsula: "y"});}else{browser.storage.local.set({myset_xincapsula: "n"});} if (document.querySelector("#myset_xgshield").checked){browser.storage.local.set({myset_xgshield: "y"});}else{browser.storage.local.set({myset_xgshield: "n"});} if (document.querySelector("#myset_xsucuri").checked){browser.storage.local.set({myset_xsucuri: "y"});}else{browser.storage.local.set({myset_xsucuri: "n"});} -if (document.querySelector("#myset_xignhttp").checked){browser.storage.local.set({myset_xignhttp: "y"});}else{browser.storage.local.set({myset_xignhttp: "n"});} -if (document.querySelector("#myset_xigncj").checked){browser.storage.local.set({myset_xigncj: "y"});}else{browser.storage.local.set({myset_xigncj: "n"});} -if (document.querySelector("#myset_xsimplewarn").checked){browser.storage.local.set({myset_xsimplewarn: "y"});}else{browser.storage.local.set({myset_xsimplewarn: "n"});} +if (document.querySelector("#myset_xign3p").checked){browser.storage.local.set({myset_xign3p: "y"});}else{browser.storage.local.set({myset_xign3p: "n"});} +//ACTION +if (document.querySelector("#myset_xsimplewarn_0").checked){browser.storage.local.set({myset_xsimplewarn:0});} +if (document.querySelector("#myset_xsimplewarn_1").checked){browser.storage.local.set({myset_xsimplewarn:1});} +if (document.querySelector("#myset_xsimplewarn_2").checked){browser.storage.local.set({myset_xsimplewarn:2});} browser.runtime.sendMessage({relnow:'go'}).then(function(r){},onError); } function loadWhitelist(){ @@ -34,9 +35,12 @@ document.querySelector("#myset_cfwhite").value = r.myset_cfwhite||""; if (r.myset_xincapsula=='y'){document.querySelector("#myset_xincapsula").checked=true;}else{document.querySelector("#myset_xincapsula").checked=false;} if (r.myset_xgshield=='y'){document.querySelector("#myset_xgshield").checked=true;}else{document.querySelector("#myset_xgshield").checked=false;} if (r.myset_xsucuri=='y'){document.querySelector("#myset_xsucuri").checked=true;}else{document.querySelector("#myset_xsucuri").checked=false;} -if (r.myset_xignhttp=='y'){document.querySelector("#myset_xignhttp").checked=true;}else{document.querySelector("#myset_xignhttp").checked=false;} -if (r.myset_xigncj=='y'){document.querySelector("#myset_xigncj").checked=true;}else{document.querySelector("#myset_xigncj").checked=false;} -if (r.myset_xsimplewarn=='y'){document.querySelector("#myset_xsimplewarn").checked=true;}else{document.querySelector("#myset_xsimplewarn").checked=false;} +if (r.myset_xign3p=='y'){document.querySelector("#myset_xign3p").checked=true;}else{document.querySelector("#myset_xign3p").checked=false;} +if (r.myset_xsimplewarn){switch(r.myset_xsimplewarn){ +case 1:document.querySelector("#myset_xsimplewarn_1").checked=true;break; +case 2:document.querySelector("#myset_xsimplewarn_2").checked=true;break; +default:document.querySelector("#myset_xsimplewarn_0").checked=true;break; +}}else{document.querySelector("#myset_xsimplewarn_0").checked=true;} } var getting=browser.storage.local.get(); getting.then(setCurrentChoice, onError); diff --git a/src/stop_cf_mitm.js b/src/stop_cf_mitm.js index d0fe5995e..6aff8ced4 100644 --- a/src/stop_cf_mitm.js +++ b/src/stop_cf_mitm.js @@ -12,10 +12,12 @@ var cf_history=[];//used by whitelist-from-warnpage var stop_incapsula=0; var stop_gshield=0; var stop_sucuri=0; -var ign_phttp=0; -var ign_rescj=0; -var do_simplewarn=0; +var ign_thirdparty=0; +var do_reaction=0; +var cfblockscreen=''; +var cf_blocked_img='data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQBCgAAACwAAAAAAQABAAACAkQBADs='; +function onError(e){console.log(`CFMITM Error:${e}`);} function whitelist_reload(){browser.storage.local.get().then(function(w){ //WHITELIST if (w.myset_cfwhite){ @@ -26,16 +28,28 @@ cf_ignore=tmp_whitelist; if (w.myset_xincapsula=='y'){stop_incapsula=1;}else{stop_incapsula=0;} if (w.myset_xgshield=='y'){stop_gshield=1;}else{stop_gshield=0;} if (w.myset_xsucuri=='y'){stop_sucuri=1;}else{stop_sucuri=0;} -if (w.myset_xignhttp=='y'){ign_phttp=1;}else{ign_phttp=0;} -if (w.myset_xigncj=='y'){ign_rescj=1;}else{ign_rescj=0;} -if (w.myset_xsimplewarn=='y'){do_simplewarn=1;}else{do_simplewarn=0;} +if (w.myset_xign3p=='y'){ign_thirdparty=1;}else{ign_thirdparty=0;} +//ACTION +if (w.myset_xsimplewarn){switch(w.myset_xsimplewarn){ +case 1:do_reaction=1;break; +case 2:do_reaction=2;break; +default:do_reaction=0;break; +}}else{do_reaction=0;} },onError);} -function onError(e){console.log(`CFMITM Error:${e}`);} +function is_domain_ignored(w){ +if (cf_ignore.includes(w)){return true;} +var dotSTXfound=0;for(var f=0;f= 4) { //console.log("CFMITM: testing...: "+res.url); -var mitm_isdetected=0; -var mitm_cdnname='Cloudflare'; - -for (var i=0;i -if (mitm_isdetected>=2){break;} +if (mitm_isdetected>=1){break;} } - -var cfblockscreen=''; if (mitm_isdetected>=1){ - //add to history (used in gotwhitelistrequest()) if (cf_history.length>=10){cf_history=[];} if (!cf_history.includes(cf_hostname)){cf_history.push(cf_hostname);} - - -if (do_simplewarn!=1){// block - console.log('SECURITY_WARN: '+mitm_cdnname+' MiTM Detected: '+res.url); -cfblockscreen='document.documentElement.innerHTML=atob(\'PGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPjxoZWFkPjx0aXRsZT5JbnNlY3VyZSBDb25uZWN0aW9uPC90aXRsZT4KPCEtLQpUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UsIHYuIDIuMC4KSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMgZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHBzOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uCi8vLS0+CjxsaW5rIGlkPSJmYXZpY29uIiByZWw9Imljb24iIHR5cGU9ImltYWdlL3gtaWNvbiIgaHJlZj0iZGF0YTppbWFnZS94LWljb247YmFzZTY0LEFBQUJBQUVBRUJBQUFBRUFJQUJvQkFBQUZnQUFBQ2dBQUFBUUFBQUFJQUFBQUFFQUlBQUFBQUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFPems0T0twTVNrcTZVRTlQdWxSVFU3cFhWMWU2VzF0YnVsMWRYYnBiVzF1NldGaFl1bFZWVmJwVFUxTzZVRkJRdWt4TVRMb3RMUzJiQUFBQU96WTBOSjdZM056L3Y5emgvOEhlNC8vRDRlYi94dVRwLzhqbTYvL0k1T24veCtQby84Ymo2Zi9FNGVmL3d0L2wvOEhkNC8rLzJkLy8zTi9mL3hrWkdZVTJOVFdkMk43ZS94ZWt4ZjhXdWVEL0ZycmgveGE3NGY4VXI5UC9JaXd1L3lJc0x2OFdzOS8vRjdEZS94ZXIzUDhYcHRyL0lKUzYvOTdnNGY4WkdSbUNBQUFBVjlIUTBPOTFzN3ovRjhIai94YkM0LzhXdytUL0ZMYlYveUFyTGY4Z0t5My9GcnJoL3hhMTMvOFhzTjcvRnFiVi81RzN2Zit4c2JIVUFBQUFSUUFBQUM1b1oyZVYyTjdmL3lXdHYvOFh5dWIvRnNybS94Yko1djhacThmL0dhdkgveGJBNC84V3UrSC9GclhmL3pXZ3VmL1oyZG4vTHk4dmVBQUFBQndBQUFBQUFBQUFTc2JGeGQyZ3k4Ny9LdFRtL3huVTZ2OFcwT2ovRkVKSS94UkNTUDhXeGVYL0ZyL2oveFd3MC8rc3dzUC9rNU9UdGdBQUFEb0FBQUFBQUFBQUFBQUFBQ0ZGUlVWKzZldnIvenExdnY4dzVQSC9KOS92L3lJaUl2OGlJaUwvRnNybS94YkU1UDlYcTduLzE5ZlgrQmtaR1cwQUFBQUtBQUFBQUFBQUFBQUFBQUFBQUFBQVByZTJ0c25BM3VEL0xOcmoveS9vOHY4ckt5di9LeXNyL3l2Yjd2OG12ZEQveE0vUC8zZDNkNkFBQUFBMEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCVWJHeHR0OFBEdytGckF3Lzh1N1BQL05EUTAvelEwTlA4dzNlLy9nTHUvLzhqSXlPZ0FBQUJSQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTkoyZG5iVFM0K1QvS2REVi96UThQUDgwUUVIL05MM0ovOVhaMmY5V1ZsYUxBQUFBS0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFrQUFBQlgzOS9mNzMzRXh2OHQ1dkgvTGRycC81ckJ3LysydHJiVUFBQUFSUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFMbTF0YlpYZjV1Yi9MTG5ELzBTN3hQL2QzZDMvTVRFeGVBQUFBQndBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCS3g4ZkgzYkhQMGYrOHpNMy9sNWVYdGdBQUFEb0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUlUSXlNbmErdnI3VHJxNnV5UmtaR1cwQUFBQUtBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFiQUFBQVJBQUFBRDRBQUFBVkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBLy84QUFJQUJBQUFBQUFBQUFBQUFBSUFCQUFDQUF3QUF3QU1BQU9BSEFBRGdCd0FBOEE4QUFQQVBBQUQ0SHdBQStEOEFBUHcvQUFEK2Z3QUEvLzhBQUE9PSI+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+QG5hbWVzcGFjZSBodG1sICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjtAbmFtZXNwYWNlIHh1bCAiaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9rZXltYXN0ZXIvZ2F0ZWtlZXBlci90aGVyZS5pcy5vbmx5Lnh1bCI7KnwqOnJvb3R7LS1pbi1jb250ZW50LXBhZ2UtY29sb3I6IzQyNGU1YTstLWluLWNvbnRlbnQtcGFnZS1iYWNrZ3JvdW5kOiNmYmZiZmI7LS1pbi1jb250ZW50LXRleHQtY29sb3I6IzMzMzstLWluLWNvbnRlbnQtc2VsZWN0ZWQtdGV4dDojZmZmOy0taW4tY29udGVudC1oZWFkZXItYm9yZGVyLWNvbG9yOiNjOGM4Yzg7LS1pbi1jb250ZW50LWJveC1iYWNrZ3JvdW5kOiNmZmY7LS1pbi1jb250ZW50LWJveC1iYWNrZ3JvdW5kLW9kZDojZjNmNmZhOy0taW4tY29udGVudC1ib3gtYmFja2dyb3VuZC1ob3ZlcjojZWJlYmViOy0taW4tY29udGVudC1ib3gtYmFja2dyb3VuZC1hY3RpdmU6I2RhZGFkYTstLWluLWNvbnRlbnQtYm94LWJvcmRlci1jb2xvcjojYzFjMWMxOy0taW4tY29udGVudC1pdGVtLWhvdmVyOnJnYmEoMCwxNDksMjIxLDAuMjUpOy0taW4tY29udGVudC1pdGVtLXNlbGVjdGVkOiMwMDk1ZGQ7LS1pbi1jb250ZW50LWJvcmRlci1oaWdobGlnaHQ6I2ZmOTUwMDstLWluLWNvbnRlbnQtYm9yZGVyLWZvY3VzOiMwMDk1ZGQ7LS1pbi1jb250ZW50LWJvcmRlci1jb2xvcjojYzFjMWMxOy0taW4tY29udGVudC1jYXRlZ29yeS10ZXh0OiNjMWMxYzE7LS1pbi1jb250ZW50LWNhdGVnb3J5LWJvcmRlci1mb2N1czoxcHggZG90dGVkICNmZmY7LS1pbi1jb250ZW50LWNhdGVnb3J5LXRleHQtc2VsZWN0ZWQ6I2YyZjJmMjstLWluLWNvbnRlbnQtY2F0ZWdvcnktYmFja2dyb3VuZDojNDI0ZjVhOy0taW4tY29udGVudC1jYXRlZ29yeS1iYWNrZ3JvdW5kLWhvdmVyOiM1ZTY5NzI7LS1pbi1jb250ZW50LWNhdGVnb3J5LWJhY2tncm91bmQtYWN0aXZlOiMzNDNmNDg7LS1pbi1jb250ZW50LXRhYi1jb2xvcjojNDI0ZjVhOy0taW4tY29udGVudC1saW5rLWNvbG9yOiMwMDk1ZGQ7LS1pbi1jb250ZW50LWxpbmstY29sb3ItaG92ZXI6IzE3OGNlNTstLWluLWNvbnRlbnQtbGluay1jb2xvci1hY3RpdmU6I2ZmOTUwMDstLWluLWNvbnRlbnQtbGluay1jb2xvci12aXNpdGVkOiM1NTFhOGI7LS1pbi1jb250ZW50LXByaW1hcnktYnV0dG9uLWJhY2tncm91bmQ6IzAwOTVkZDstLWluLWNvbnRlbnQtcHJpbWFyeS1idXR0b24tYmFja2dyb3VuZC1ob3ZlcjojMDA4YWNiOy0taW4tY29udGVudC1wcmltYXJ5LWJ1dHRvbi1iYWNrZ3JvdW5kLWFjdGl2ZTojMDA2YjlkOy0taW4tY29udGVudC10YWJsZS1ib3JkZXItZGFyay1jb2xvcjojZDFkMWQxOy0taW4tY29udGVudC10YWJsZS1oZWFkZXItYmFja2dyb3VuZDojMDA5NWRkfWh0bWx8aHRtbCx4dWx8cGFnZSx4dWx8d2luZG93e2ZvbnQ6bWVzc2FnZS1ib3g7LW1vei1hcHBlYXJhbmNlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1jb250ZW50LXBhZ2UtYmFja2dyb3VuZCk7Y29sb3I6dmFyKC0taW4tY29udGVudC1wYWdlLWNvbG9yKX1odG1sfGJvZHl7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6bm9ybWFsO21hcmdpbjowfWh0bWx8aDF7Zm9udC1zaXplOjIuNWVtO2ZvbnQtd2VpZ2h0OmxpZ2h0ZXI7bGluZS1oZWlnaHQ6MS4yO2NvbG9yOnZhcigtLWluLWNvbnRlbnQtdGV4dC1jb2xvcik7bWFyZ2luOjA7bWFyZ2luLWJvdHRvbTouNWVtfWh0bWx8aHJ7Ym9yZGVyLXN0eWxlOnNvbGlkIG5vbmUgbm9uZSBub25lO2JvcmRlci1jb2xvcjp2YXIoLS1pbi1jb250ZW50LWJvcmRlci1jb2xvcil9eHVsfGNhcHRpb257LW1vei1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjB9eHVsfGNhcHRpb24+eHVsfGNoZWNrYm94LHh1bHxjYXB0aW9uPnh1bHxsYWJlbHtmb250LXNpemU6MS4zcmVtO2ZvbnQtd2VpZ2h0OmJvbGQ7bGluZS1oZWlnaHQ6MjJweH14dWx8Y2FwdGlvbj54dWx8Y2hlY2tib3gseHVsfGNhcHRpb24+eHVsfGxhYmVse21hcmdpbjowIWltcG9ydGFudH0qfCoubWFpbi1jb250ZW50e3BhZGRpbmctdG9wOjQwcHg7cGFkZGluZy1pbmxpbmUtZW5kOjQ0cHg7cGFkZGluZy1ib3R0b206NDhweDtwYWRkaW5nLWlubGluZS1zdGFydDo0OHB4O292ZXJmbG93OmF1dG99eHVsfHByZWZwYW5lPnh1bHwqLmNvbnRlbnQtYm94e292ZXJmbG93OnZpc2libGV9eHVsfGdyb3VwYm94ey1tb3otYXBwZWFyYW5jZTpub25lO2JvcmRlcjowO21hcmdpbjoxNXB4IDAgMDtwYWRkaW5nLWlubGluZS1zdGFydDowO3BhZGRpbmctaW5saW5lLWVuZDowO2ZvbnQtc2l6ZToxLjI1cmVtfXh1bHxncm91cGJveCB4dWx8bGFiZWw6bm90KC5tZW51LWFjY2VsKTpub3QoLm1lbnUtdGV4dCk6bm90KC5pbmRlbnQpLHh1bHxncm91cGJveCB4dWx8ZGVzY3JpcHRpb257bWFyZ2luLWlubGluZS1zdGFydDowIWltcG9ydGFudDttYXJnaW4taW5saW5lLWVuZDowIWltcG9ydGFudH14dWx8dGFicGFuZWxzey1tb3otYXBwZWFyYW5jZTpub25lO2ZvbnQtc2l6ZToxLjI1cmVtO2xpbmUtaGVpZ2h0OjIycHg7Ym9yZGVyOjA7cGFkZGluZzowO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Y29sb3I6aW5oZXJpdH14dWx8dGFic3ttYXJnaW4tYm90dG9tOjE1cHg7Ym9yZGVyLXRvcDoxcHggc29saWQgdmFyKC0taW4tY29udGVudC1ib3gtYm9yZGVyLWNvbG9yKTtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1pbi1jb250ZW50LWJveC1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tY29udGVudC1wYWdlLWJhY2tncm91bmQpfXh1bHwqLnRhYnMtbGVmdCx4dWx8Ki50YWJzLXJpZ2h0e2JvcmRlci1ib3R0b206MH14dWx8dGFiey1tb3otYXBwZWFyYW5jZTpub25lO21hcmdpbi10b3A6MDtwYWRkaW5nOjRweCAyMHB4O21pbi1oZWlnaHQ6NDRweDtjb2xvcjp2YXIoLS1pbi1jb250ZW50LXRhYi1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1jb250ZW50LXBhZ2UtYmFja2dyb3VuZCk7Ym9yZGVyLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czowIWltcG9ydGFudDt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgNTBtcyBlYXNlIDBzfXh1bHx0YWI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1jb250ZW50LWJveC1iYWNrZ3JvdW5kLWhvdmVyKX14dWx8dGFiW3NlbGVjdGVkXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWNvbnRlbnQtYm94LWJhY2tncm91bmQtaG92ZXIpO3BhZGRpbmctYm90dG9tOjA7Ym9yZGVyLWJvdHRvbTo0cHggc29saWQgdmFyKC0taW4tY29udGVudC1ib3JkZXItaGlnaGxpZ2h0KX14dWx8Ki50YWItdGV4dHtmb250LXNpemU6MS4zcmVtO2xpbmUtaGVpZ2h0OjIycHh9aHRtbHxidXR0b257cGFkZGluZzozcHg7Zm9udDppbmhlcml0fSp8YnV0dG9uLGh0bWx8c2VsZWN0LHh1bHxjb2xvcnBpY2tlclt0eXBlPSJidXR0b24iXSx4dWx8bWVudWxpc3R7LW1vei1hcHBlYXJhbmNlOm5vbmU7bWluLWhlaWdodDozMHB4O2NvbG9yOnZhcigtLWluLWNvbnRlbnQtdGV4dC1jb2xvcik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1pbi1jb250ZW50LWJveC1ib3JkZXItY29sb3IpOy1tb3otYm9yZGVyLXRvcC1jb2xvcnM6bm9uZSFpbXBvcnRhbnQ7LW1vei1ib3JkZXItcmlnaHQtY29sb3JzOm5vbmUhaW1wb3J0YW50Oy1tb3otYm9yZGVyLWJvdHRvbS1jb2xvcnM6bm9uZSFpbXBvcnRhbnQ7LW1vei1ib3JkZXItbGVmdC1jb2xvcnM6bm9uZSFpbXBvcnRhbnQ7Ym9yZGVyLXJhZGl1czoycHg7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1jb250ZW50LXBhZ2UtYmFja2dyb3VuZCl9aHRtbHxidXR0b246ZW5hYmxlZDpob3ZlcixodG1sfHNlbGVjdDplbmFibGVkOmhvdmVyLHh1bHxidXR0b246bm90KFtkaXNhYmxlZD0idHJ1ZSJdKTpob3Zlcix4dWx8Y29sb3JwaWNrZXJbdHlwZT0iYnV0dG9uIl06bm90KFtkaXNhYmxlZD0idHJ1ZSJdKTpob3Zlcix4dWx8bWVudWxpc3Q6bm90KFtkaXNhYmxlZD0idHJ1ZSJdKTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWNvbnRlbnQtYm94LWJhY2tncm91bmQtaG92ZXIpfWh0bWx8YnV0dG9uOmVuYWJsZWQ6aG92ZXI6YWN0aXZlLGh0bWx8c2VsZWN0OmVuYWJsZWQ6aG92ZXI6YWN0aXZlLHh1bHxidXR0b246bm90KFtkaXNhYmxlZD0idHJ1ZSJdKTpob3ZlcjphY3RpdmUseHVsfGNvbG9ycGlja2VyW3R5cGU9ImJ1dHRvbiJdOm5vdChbZGlzYWJsZWQ9InRydWUiXSk6aG92ZXI6YWN0aXZlLHh1bHxtZW51bGlzdFtvcGVuPSJ0cnVlIl06bm90KFtkaXNhYmxlZD0idHJ1ZSJdKXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWNvbnRlbnQtYm94LWJhY2tncm91bmQtYWN0aXZlKX1odG1sfGJ1dHRvbjpkaXNhYmxlZCxodG1sfHNlbGVjdDpkaXNhYmxlZCx4dWx8YnV0dG9uW2Rpc2FibGVkPSJ0cnVlIl0seHVsfGNvbG9ycGlja2VyW3R5cGU9ImJ1dHRvbiJdW2Rpc2FibGVkPSJ0cnVlIl0seHVsfG1lbnVsaXN0W2Rpc2FibGVkPSJ0cnVlIl17b3BhY2l0eTouNX0qfGJ1dHRvbi5wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tY29udGVudC1wcmltYXJ5LWJ1dHRvbi1iYWNrZ3JvdW5kKTtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7Y29sb3I6dmFyKC0taW4tY29udGVudC1zZWxlY3RlZC10ZXh0KX1odG1sfGJ1dHRvbi5wcmltYXJ5OmVuYWJsZWQ6aG92ZXIseHVsfGJ1dHRvbi5wcmltYXJ5Om5vdChbZGlzYWJsZWQ9InRydWUiXSk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1jb250ZW50LXByaW1hcnktYnV0dG9uLWJhY2tncm91bmQtaG92ZXIpfWh0bWx8YnV0dG9uLnByaW1hcnk6ZW5hYmxlZDpob3ZlcjphY3RpdmUseHVsfGJ1dHRvbi5wcmltYXJ5Om5vdChbZGlzYWJsZWQ9InRydWUiXSk6aG92ZXI6YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tY29udGVudC1wcmltYXJ5LWJ1dHRvbi1iYWNrZ3JvdW5kLWFjdGl2ZSl9eHVsfGNvbG9ycGlja2VyW3R5cGU9ImJ1dHRvbiJde3BhZGRpbmc6NnB4O3dpZHRoOjUwcHh9eHVsfGJ1dHRvbj54dWx8Ki5idXR0b24tYm94e3BhZGRpbmctcmlnaHQ6MTBweCFpbXBvcnRhbnQ7cGFkZGluZy1sZWZ0OjEwcHghaW1wb3J0YW50fXh1bHxtZW51bGlzdD54dWx8Ki5tZW51bGlzdC1sYWJlbC1ib3g+eHVsfCoubWVudWxpc3QtaWNvbltzcmNde21hcmdpbi1pbmxpbmUtZW5kOjVweH14dWx8YnV0dG9uW3R5cGU9Im1lbnUiXT54dWx8Ki5idXR0b24tYm94Pnh1bHwqLmJ1dHRvbi1tZW51LWRyb3BtYXJrZXJ7LW1vei1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjFweCAwO21hcmdpbi1pbmxpbmUtc3RhcnQ6MTBweDtwYWRkaW5nOjA7d2lkdGg6MTBweDtoZWlnaHQ6MTZweDtib3JkZXI6MDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fXh1bHxidXR0b25bdHlwZT0ibWVudSJdPnh1bHxtZW51cG9wdXB7LW1vei1hcHBlYXJhbmNlOm5vbmU7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1pbi1jb250ZW50LWJveC1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6MnB4O2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tY29udGVudC1ib3gtYmFja2dyb3VuZCl9eHVsfG1lbnVsaXN0Pnh1bHxtZW51cG9wdXAgeHVsfG1lbnUseHVsfG1lbnVsaXN0Pnh1bHxtZW51cG9wdXAgeHVsfG1lbnVpdGVtLHh1bHxidXR0b25bdHlwZT0ibWVudSJdPnh1bHxtZW51cG9wdXAgeHVsfG1lbnUseHVsfGJ1dHRvblt0eXBlPSJtZW51Il0+eHVsfG1lbnVwb3B1cCB4dWx8bWVudWl0ZW17LW1vei1hcHBlYXJhbmNlOm5vbmU7Zm9udC1zaXplOjFlbTtjb2xvcjp2YXIoLS1pbi1jb250ZW50LXRleHQtY29sb3IpO3BhZGRpbmctdG9wOi4yZW07cGFkZGluZy1ib3R0b206LjJlbTtwYWRkaW5nLWlubGluZS1zdGFydDoxMHB4O3BhZGRpbmctaW5saW5lLWVuZDozMHB4fXh1bHxtZW51bGlzdD54dWx8bWVudXBvcHVwPnh1bHxtZW51Om5vdChbZGlzYWJsZWQ9InRydWUiXSlbX21vei1tZW51YWN0aXZlPSJ0cnVlIl0seHVsfG1lbnVsaXN0Pnh1bHxtZW51cG9wdXA+eHVsfG1lbnVpdGVtOm5vdChbZGlzYWJsZWQ9InRydWUiXSlbX21vei1tZW51YWN0aXZlPSJ0cnVlIl0seHVsfGJ1dHRvblt0eXBlPSJtZW51Il0+eHVsfG1lbnVwb3B1cD54dWx8bWVudTpub3QoW2Rpc2FibGVkPSJ0cnVlIl0pW19tb3otbWVudWFjdGl2ZT0idHJ1ZSJdLHh1bHxidXR0b25bdHlwZT0ibWVudSJdPnh1bHxtZW51cG9wdXA+eHVsfG1lbnVpdGVtOm5vdChbZGlzYWJsZWQ9InRydWUiXSlbX21vei1tZW51YWN0aXZlPSJ0cnVlIl17Y29sb3I6dmFyKC0taW4tY29udGVudC10ZXh0LWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWNvbnRlbnQtaXRlbS1ob3Zlcil9eHVsfG1lbnVsaXN0Pnh1bHxtZW51cG9wdXA+eHVsfG1lbnU6bm90KFtkaXNhYmxlZD0idHJ1ZSJdKVtzZWxlY3RlZD0idHJ1ZSJdLHh1bHxtZW51bGlzdD54dWx8bWVudXBvcHVwPnh1bHxtZW51aXRlbTpub3QoW2Rpc2FibGVkPSJ0cnVlIl0pW3NlbGVjdGVkPSJ0cnVlIl0seHVsfGJ1dHRvblt0eXBlPSJtZW51Il0+eHVsfG1lbnVwb3B1cD54dWx8bWVudTpub3QoW2Rpc2FibGVkPSJ0cnVlIl0pW3NlbGVjdGVkPSJ0cnVlIl0seHVsfGJ1dHRvblt0eXBlPSJtZW51Il0+eHVsfG1lbnVwb3B1cD54dWx8bWVudWl0ZW06bm90KFtkaXNhYmxlZD0idHJ1ZSJdKVtzZWxlY3RlZD0idHJ1ZSJde2NvbG9yOnZhcigtLWluLWNvbnRlbnQtc2VsZWN0ZWQtdGV4dCk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1jb250ZW50LWl0ZW0tc2VsZWN0ZWQpfXh1bHxtZW51bGlzdD54dWx8bWVudXBvcHVwPnh1bHxtZW51W2Rpc2FibGVkPSJ0cnVlIl0seHVsfG1lbnVsaXN0Pnh1bHxtZW51cG9wdXA+eHVsfG1lbnVpdGVtW2Rpc2FibGVkPSJ0cnVlIl0seHVsfGJ1dHRvblt0eXBlPSJtZW51Il0+eHVsfG1lbnVwb3B1cD54dWx8bWVudVtkaXNhYmxlZD0idHJ1ZSJdLHh1bHxidXR0b25bdHlwZT0ibWVudSJdPnh1bHxtZW51cG9wdXA+eHVsfG1lbnVpdGVtW2Rpc2FibGVkPSJ0cnVlIl17Y29sb3I6Izk5OTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fXh1bHxtZW51bGlzdD54dWx8bWVudXBvcHVwIHh1bHxtZW51c2VwYXJhdG9yLHh1bHxidXR0b25bdHlwZT0ibWVudSJdPnh1bHxtZW51cG9wdXAgeHVsfG1lbnVzZXBhcmF0b3J7LW1vei1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlci10b3A6MXB4IHNvbGlkIHZhcigtLWluLWNvbnRlbnQtYm94LWJvcmRlci1jb2xvcik7Ym9yZGVyLWJvdHRvbTowfWh0bWx8aW5wdXRbdHlwZT0idGV4dCJdLGh0bWx8dGV4dGFyZWEseHVsfHRleHRib3h7LW1vei1hcHBlYXJhbmNlOm5vbmU7Y29sb3I6dmFyKC0taW4tY29udGVudC10ZXh0LWNvbG9yKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWluLWNvbnRlbnQtYm94LWJvcmRlci1jb2xvcik7LW1vei1ib3JkZXItdG9wLWNvbG9yczpub25lIWltcG9ydGFudDstbW96LWJvcmRlci1yaWdodC1jb2xvcnM6bm9uZSFpbXBvcnRhbnQ7LW1vei1ib3JkZXItYm90dG9tLWNvbG9yczpub25lIWltcG9ydGFudDstbW96LWJvcmRlci1sZWZ0LWNvbG9yczpub25lIWltcG9ydGFudDtib3JkZXItcmFkaXVzOjJweDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWNvbnRlbnQtYm94LWJhY2tncm91bmQpfXh1bHx0ZXh0Ym94e21pbi1oZWlnaHQ6MzBweDtwYWRkaW5nLXJpZ2h0OjEwcHg7cGFkZGluZy1sZWZ0OjEwcHh9eHVsfHRleHRib3gudHJlZS1pbnB1dHttaW4taGVpZ2h0OnVuc2V0O3BhZGRpbmctcmlnaHQ6dW5zZXQ7cGFkZGluZy1sZWZ0OnVuc2V0fWh0bWx8aW5wdXRbdHlwZT0idGV4dCJdLGh0bWx8dGV4dGFyZWF7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtwYWRkaW5nOjVweCAxMHB4fWh0bWx8aW5wdXRbdHlwZT0idGV4dCJdOmZvY3VzLGh0bWx8dGV4dGFyZWE6Zm9jdXMseHVsfHRleHRib3hbZm9jdXNlZF17Ym9yZGVyLWNvbG9yOnZhcigtLWluLWNvbnRlbnQtYm9yZGVyLWZvY3VzKX1odG1sfGlucHV0W3R5cGU9InRleHQiXTpkaXNhYmxlZCxodG1sfHRleHRhcmVhOmRpc2FibGVkLHh1bHx0ZXh0Ym94W2Rpc2FibGVkPSJ0cnVlIl17b3BhY2l0eTouNX1odG1sfGEsLnRleHQtbGlua3tjb2xvcjp2YXIoLS1pbi1jb250ZW50LWxpbmstY29sb3IpO3RleHQtZGVjb3JhdGlvbjpub25lfWh0bWx8YTpob3ZlciwudGV4dC1saW5rOmhvdmVye2NvbG9yOnZhcigtLWluLWNvbnRlbnQtbGluay1jb2xvci1ob3Zlcik7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX1odG1sfGE6dmlzaXRlZHtjb2xvcjp2YXIoLS1pbi1jb250ZW50LWxpbmstY29sb3ItdmlzaXRlZCl9aHRtbHxhOmhvdmVyOmFjdGl2ZSwudGV4dC1saW5rOmhvdmVyOmFjdGl2ZXtjb2xvcjp2YXIoLS1pbi1jb250ZW50LWxpbmstY29sb3ItYWN0aXZlKTt0ZXh0LWRlY29yYXRpb246bm9uZX1odG1sfGlucHV0W3R5cGU9ImNoZWNrYm94Il17b3BhY2l0eTowO3dpZHRoOjA7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZX1odG1sfGlucHV0W3R5cGU9ImNoZWNrYm94Il0raHRtbHxsYWJlbDpiZWZvcmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29udGVudDoiIjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9aHRtbHxpbnB1dFt0eXBlPSJjaGVja2JveCJdK2h0bWx8bGFiZWx7bGluZS1oZWlnaHQ6MH14dWx8Y2hlY2tib3h7bWFyZ2luLWlubGluZS1zdGFydDowfXh1bHwqLmNoZWNrYm94LWNoZWNrLGh0bWx8aW5wdXRbdHlwZT0iY2hlY2tib3giXStodG1sfGxhYmVsOmJlZm9yZXstbW96LWFwcGVhcmFuY2U6bm9uZTt3aWR0aDoyM3B4O2hlaWdodDoyM3B4O2JvcmRlci1yYWRpdXM6MnB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0taW4tY29udGVudC1ib3gtYm9yZGVyLWNvbG9yKTttYXJnaW4taW5saW5lLWVuZDoxMHB4O2JhY2tncm91bmQtY29sb3I6I2YxZjFmMTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgjZmZmLHJnYmEoMjU1LDI1NSwyNTUsMC44KSkhaW1wb3J0YW50O2JhY2tncm91bmQtcG9zaXRpb246Y2VudGVyIGNlbnRlcjtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7Ym94LXNoYWRvdzowIDFweCAxcHggMCAjZmZmLGluc2V0IDAgMnB4IDAgMCByZ2JhKDAsMCwwLDAuMDMpfXh1bHxjaGVja2JveDpub3QoW2Rpc2FibGVkPSJ0cnVlIl0pOmhvdmVyPnh1bHwqLmNoZWNrYm94LWNoZWNrLGh0bWx8aW5wdXRbdHlwZT0iY2hlY2tib3giXTpub3QoOmRpc2FibGVkKStodG1sfGxhYmVsOmhvdmVyOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0taW4tY29udGVudC1ib3JkZXItZm9jdXMpfXh1bHxjaGVja2JveFtkaXNhYmxlZD0idHJ1ZSJdPnh1bHwqLmNoZWNrYm94LWNoZWNrLGh0bWx8aW5wdXRbdHlwZT0iY2hlY2tib3giXTpkaXNhYmxlZCtodG1sfGxhYmVse29wYWNpdHk6LjV9eHVsfCouY2hlY2tib3gtbGFiZWwtYm94e21hcmdpbi1pbmxpbmUtc3RhcnQ6LTFweDtwYWRkaW5nLWlubGluZS1zdGFydDowfXh1bHxyaWNobGlzdGl0ZW0+eHVsfCouY2hlY2tib3gtY2hlY2t7bWFyZ2luOjNweCA2cHh9eHVsfHJhZGlve21hcmdpbi1pbmxpbmUtc3RhcnQ6MH14dWx8Ki5yYWRpby1jaGVja3stbW96LWFwcGVhcmFuY2U6bm9uZTt3aWR0aDoyM3B4O2hlaWdodDoyM3B4O2JvcmRlcjoxcHggc29saWQgdmFyKC0taW4tY29udGVudC1ib3gtYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOjUwJTttYXJnaW4taW5saW5lLWVuZDoxMHB4O2JhY2tncm91bmQtY29sb3I6I2YxZjFmMTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgjZmZmLHJnYmEoMjU1LDI1NSwyNTUsMC44MCkpO2JveC1zaGFkb3c6MCAxcHggMXB4IDAgI2ZmZixpbnNldCAwIDJweCAwIDAgcmdiYSgwLDAsMCwwLjAzKX14dWx8cmFkaW86bm90KFtkaXNhYmxlZD0idHJ1ZSJdKTpob3Zlcj54dWx8Ki5yYWRpby1jaGVja3tib3JkZXItY29sb3I6dmFyKC0taW4tY29udGVudC1ib3JkZXItZm9jdXMpfXh1bHxyYWRpb1tkaXNhYmxlZD0idHJ1ZSJdPnh1bHwqLnJhZGlvLWNoZWNre29wYWNpdHk6LjV9eHVsfCoucmFkaW8tbGFiZWwtYm94e21hcmdpbi1pbmxpbmUtc3RhcnQ6LTFweDttYXJnaW4taW5saW5lLWVuZDoxMHB4O3BhZGRpbmctaW5saW5lLXN0YXJ0OjB9KnwqI2NhdGVnb3JpZXN7LW1vei1hcHBlYXJhbmNlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1jb250ZW50LWNhdGVnb3J5LWJhY2tncm91bmQpO3BhZGRpbmctdG9wOjM5cHg7bWFyZ2luOjA7Ym9yZGVyLXdpZHRoOjB9KnwqLmNhdGVnb3J5ey1tb3otYXBwZWFyYW5jZTpub25lO2NvbG9yOnZhcigtLWluLWNvbnRlbnQtY2F0ZWdvcnktdGV4dCk7Ym9yZGVyLWlubGluZS1lbmQtd2lkdGg6MDtwYWRkaW5nLWlubGluZS1zdGFydDoxNXB4O3BhZGRpbmctaW5saW5lLWVuZDoyMXB4O21pbi1oZWlnaHQ6NDBweDt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgMTUwbXN9KnwqLmNhdGVnb3J5OmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tY29udGVudC1jYXRlZ29yeS1iYWNrZ3JvdW5kLWhvdmVyKX0qfCouY2F0ZWdvcnlbc2VsZWN0ZWRdLCp8Ki5jYXRlZ29yeS5zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWNvbnRlbnQtY2F0ZWdvcnktYmFja2dyb3VuZC1hY3RpdmUpO2NvbG9yOnZhcigtLWluLWNvbnRlbnQtY2F0ZWdvcnktdGV4dC1zZWxlY3RlZCk7cGFkZGluZy1pbmxpbmUtc3RhcnQ6MTFweDtib3JkZXItaW5saW5lLXN0YXJ0OnNvbGlkIDRweCB2YXIoLS1pbi1jb250ZW50LWJvcmRlci1oaWdobGlnaHQpfSp8KiNjYXRlZ29yaWVzW2tleWJvYXJkLW5hdmlnYXRpb249InRydWUiXTotbW96LWZvY3VzcmluZz4qfCouY2F0ZWdvcnlbY3VycmVudF17Ym9yZGVyLXRvcDp2YXIoLS1pbi1jb250ZW50LWNhdGVnb3J5LWJvcmRlci1mb2N1cyk7Ym9yZGVyLWJvdHRvbTp2YXIoLS1pbi1jb250ZW50LWNhdGVnb3J5LWJvcmRlci1mb2N1cyl9KnwqLmNhdGVnb3J5LW5hbWV7bGluZS1oZWlnaHQ6MjJweDtmb250LXNpemU6MS4yNXJlbTtwYWRkaW5nLWJvdHRvbToycHg7cGFkZGluZy1pbmxpbmUtc3RhcnQ6OXB4O21hcmdpbjowOy1tb3otdXNlci1zZWxlY3Q6bm9uZX0qfCouY2F0ZWdvcnktaWNvbnt3aWR0aDoyNHB4O2hlaWdodDoyNHB4fSp8Ki5oZWFkZXJ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0taW4tY29udGVudC1oZWFkZXItYm9yZGVyLWNvbG9yKTttYXJnaW4taW5saW5lLWVuZDo0cHg7bWFyZ2luLWJvdHRvbToxNXB4O3BhZGRpbmctYm90dG9tOjE1cHg7LW1vei1ib3gtYWxpZ246YmFzZWxpbmV9KnwqLmhlYWRlci1uYW1le2ZvbnQtc2l6ZToyLjVyZW07Zm9udC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjQwcHg7bWFyZ2luOjA7LW1vei11c2VyLXNlbGVjdDpub25lfXh1bHxmaWxlZmllbGR7LW1vei1hcHBlYXJhbmNlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXI6MDtwYWRkaW5nOjB9eHVsfCouZmlsZUZpZWxkQ29udGVudEJveHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fXh1bHwqLmZpbGVGaWVsZEljb257bWFyZ2luLWlubGluZS1zdGFydDoxMHB4O21hcmdpbi1pbmxpbmUtZW5kOjB9eHVsfCouZmlsZUZpZWxkTGFiZWx7bWFyZ2luLWlubGluZS1zdGFydDotMjZweDtwYWRkaW5nLWlubGluZS1zdGFydDozNnB4fXh1bHx0ZXh0Ym94K3h1bHxidXR0b24seHVsfGZpbGVmaWVsZCt4dWx8YnV0dG9ue2JvcmRlci1pbmxpbmUtc3RhcnQ6bm9uZX14dWx8cmljaGxpc3Rib3gseHVsfGxpc3Rib3h7LW1vei1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luLWlubGluZS1zdGFydDowO2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tY29udGVudC1ib3gtYmFja2dyb3VuZCk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1pbi1jb250ZW50LWJveC1ib3JkZXItY29sb3IpO2NvbG9yOnZhcigtLWluLWNvbnRlbnQtdGV4dC1jb2xvcil9eHVsfHRyZWVjaGlsZHJlbjo6LW1vei10cmVlLXJvdyx4dWx8bGlzdGJveCB4dWx8bGlzdGl0ZW17cGFkZGluZzouM2VtO21hcmdpbjowO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtiYWNrZ3JvdW5kLWltYWdlOm5vbmV9eHVsfHRyZWVjaGlsZHJlbjo6LW1vei10cmVlLXJvdyhob3ZlcikseHVsfGxpc3Rib3ggeHVsfGxpc3RpdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tY29udGVudC1pdGVtLWhvdmVyKX14dWx8dHJlZWNoaWxkcmVuOjotbW96LXRyZWUtcm93KHNlbGVjdGVkKSx4dWx8bGlzdGJveCB4dWx8bGlzdGl0ZW1bc2VsZWN0ZWQ9InRydWUiXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWNvbnRlbnQtaXRlbS1zZWxlY3RlZCk7Y29sb3I6dmFyKC0taW4tY29udGVudC1zZWxlY3RlZC10ZXh0KX14dWx8dHJlZXstbW96LWFwcGVhcmFuY2U6bm9uZTtmb250LXNpemU6MWVtO2JvcmRlcjoxcHggc29saWQgdmFyKC0taW4tY29udGVudC1ib3gtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWNvbnRlbnQtYm94LWJhY2tncm91bmQpO21hcmdpbjowfXh1bHx0cmVlOi1tb3otZm9jdXNyaW5nLHh1bHxyaWNobGlzdGJveDotbW96LWZvY3VzcmluZ3tib3JkZXI6MXB4IGRvdHRlZCB2YXIoLS1pbi1jb250ZW50LWJvcmRlci1mb2N1cyl9eHVsfGxpc3RoZWFkZXIseHVsfHRyZWVjb2xzey1tb3otYXBwZWFyYW5jZTpub25lO2JvcmRlcjowO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWluLWNvbnRlbnQtYm9yZGVyLWNvbG9yKTtwYWRkaW5nOjB9LmF1dG9jb21wbGV0ZS10cmVlPnh1bHx0cmVlY29sc3tib3JkZXItYm90dG9tOm5vbmUhaW1wb3J0YW50fXh1bHx0cmVlY29sOm5vdChbaGlkZWhlYWRlcj0idHJ1ZSJdKSx4dWx8dHJlZWNvbHBpY2tlcnstbW96LWFwcGVhcmFuY2U6bm9uZTtib3JkZXI6MDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWNvbnRlbnQtYm94LWJhY2tncm91bmQtaG92ZXIpO2NvbG9yOiM4MDgwODA7cGFkZGluZzo1cHggMTBweH14dWx8dHJlZWNvbDpub3QoW2hpZGVoZWFkZXI9InRydWUiXSk6bm90KFtzb3J0YWJsZT0iZmFsc2UiXSk6aG92ZXIseHVsfHRyZWVjb2xwaWNrZXI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1jb250ZW50LWJveC1iYWNrZ3JvdW5kLWFjdGl2ZSk7Y29sb3I6dmFyKC0taW4tY29udGVudC10ZXh0LWNvbG9yKX14dWx8dHJlZWNvbDpub3QoW2hpZGVoZWFkZXI9InRydWUiXSk6bm90KDpmaXJzdC1jaGlsZCkseHVsfHRyZWVjb2xwaWNrZXJ7Ym9yZGVyLWlubGluZS1zdGFydC13aWR0aDoxcHg7Ym9yZGVyLWlubGluZS1zdGFydC1zdHlsZTpzb2xpZDtib3JkZXItaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRyYW5zcGFyZW50IDAsdHJhbnNwYXJlbnQgMjAlLCNjMWMxYzEgMjAlLCNjMWMxYzEgODAlLHRyYW5zcGFyZW50IDgwJSx0cmFuc3BhcmVudCAxMDAlKSAxIDF9eHVsfHRyZWVjb2w6bm90KFtoaWRlaGVhZGVyPSJ0cnVlIl0pPnh1bHwqLnRyZWVjb2wtc29ydGRpcmVjdGlvbltzb3J0RGlyZWN0aW9uXXt3aWR0aDoxOHB4O2hlaWdodDoxOHB4fXh1bHx0cmVlY29sOm5vdChbaGlkZWhlYWRlcj0idHJ1ZSJdKT54dWx8Ki50cmVlY29sLXNvcnRkaXJlY3Rpb25bc29ydERpcmVjdGlvbj0iYXNjZW5kaW5nIl17dHJhbnNmb3JtOnNjYWxlWSgtMSl9eHVsfHRyZWVjaGlsZHJlbjo6LW1vei10cmVlLXJvd3ttaW4taGVpZ2h0OjJlbX14dWx8dHJlZWNoaWxkcmVuOjotbW96LXRyZWUtY2VsbC10ZXh0e2NvbG9yOnZhcigtLWluLWNvbnRlbnQtdGV4dC1jb2xvcil9eHVsfHRyZWVjaGlsZHJlbjo6LW1vei10cmVlLWNlbGwtdGV4dChzZWxlY3RlZCl7Y29sb3I6dmFyKC0taW4tY29udGVudC1zZWxlY3RlZC10ZXh0KX14dWx8Y2FwdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fXh1bHxidXR0b24saHRtbHxidXR0b24seHVsfGNvbG9ycGlja2VyW3R5cGU9ImJ1dHRvbiJdLHh1bHxtZW51bGlzdHttYXJnaW46MnB4IDRweH14dWx8bWVudWxpc3Q6bm90KFtlZGl0YWJsZT0idHJ1ZSJdKT54dWx8Ki5tZW51bGlzdC1kcm9wbWFya2Vye21hcmdpbi10b3A6MXB4O21hcmdpbi1ib3R0b206MXB4fXh1bHxjaGVja2JveHtwYWRkaW5nLWlubGluZS1zdGFydDowfXh1bHwqLmJ1dHRvbi1ib3gseHVsfCoubWVudWxpc3QtbGFiZWwtYm94LHh1bHwqLnJhZGlvLWxhYmVsLWJveCx4dWx8Ki5jaGVja2JveC1sYWJlbC1ib3h7Ym9yZGVyLXN0eWxlOm5vbmV9eHVsfGJ1dHRvbjotbW96LWZvY3VzcmluZz54dWx8Ki5idXR0b24tYm94LHh1bHxtZW51bGlzdDotbW96LWZvY3VzcmluZz54dWx8Ki5tZW51bGlzdC1sYWJlbC1ib3gseHVsfHJhZGlvW2ZvY3VzZWQ9InRydWUiXT54dWx8Ki5yYWRpby1sYWJlbC1ib3gsaHRtbHxpbnB1dFt0eXBlPSJjaGVja2JveCJdOi1tb3otZm9jdXNyaW5nK2h0bWx8bGFiZWw6YmVmb3JlLHh1bHxjaGVja2JveDotbW96LWZvY3VzcmluZz54dWx8Ki5jaGVja2JveC1sYWJlbC1ib3h7b3V0bGluZToxcHggZG90dGVkfWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWluLWhlaWdodDoxMDB2aDtwYWRkaW5nLXRvcDowO3BhZGRpbmctYm90dG9tOjA7cGFkZGluZy1pbmxpbmUtc3RhcnQ6Y2FsYyg0OHB4KzQuNmVtKTtwYWRkaW5nLWlubGluZS1lbmQ6NDhweDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uY29udGFpbmVye21pbi13aWR0aDoxM2VtO21heC13aWR0aDo1MmVtfS5jb250YWluZXIucmVzdG9yZS1jaG9zZW57ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWdyb3c6MTttYXJnaW46MTB2aCAwfS50aXRsZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOmxlZnQgMDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjEuNmVtO21hcmdpbi1pbmxpbmUtc3RhcnQ6LTIuM2VtO3BhZGRpbmctaW5saW5lLXN0YXJ0OjIuM2VtO2ZvbnQtc2l6ZToyLjVlbX0udGl0bGU6ZGlyKHJ0bCl7YmFja2dyb3VuZC1wb3NpdGlvbjpyaWdodCAwfS50aXRsZS10ZXh0e2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNjMWMxYzE7Zm9udC1zaXplOmluaGVyaXQ7cGFkZGluZy1ib3R0b206LjRlbX0uYnV0dG9uLWNvbnRhaW5lcnttYXJnaW4tdG9wOjEuMmVtfS5idXR0b24tY29udGFpbmVyPmJ1dHRvbnttaW4td2lkdGg6MTUwcHh9LmJ1dHRvbi1jb250YWluZXI+YnV0dG9uOmZpcnN0LWNoaWxke21hcmdpbi1pbmxpbmUtc3RhcnQ6MH1ib2R5e2JhY2tncm91bmQtc2l6ZTo2NHB4IDMycHg7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7cGFkZGluZzo3NXB4IDA7bWluLXdpZHRoOjEzZW19LmJ1dHRvbi1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgd3JhcH0uYnV0dG9uLXNwYWNlcntmbGV4OjF9Ym9keXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgtNDVkZWcsI2YwZDAwMCwjZjBkMDAwIDMzJSwjZmVkYzAwIDMzJSwjZmVkYzAwIDY2JSwjZjBkMDAwIDY2JSwjZjBkMDAwKX0jcmV0dXJuQnV0dG9ue21pbi13aWR0aDoyNTBweH0uY29udGFpbmVye3Bvc2l0aW9uOnJlbGF0aXZlfTwvc3R5bGU+CjwvaGVhZD48Ym9keT4KPGRpdiBpZD0iZXJyb3JQYWdlQ29udGFpbmVyIiBjbGFzcz0iY29udGFpbmVyIj4KPGRpdiBjbGFzcz0idGl0bGUiPjxoMSBjbGFzcz0idGl0bGUtdGV4dCI+WW91ciBjb25uZWN0aW9uIGlzIG5vdCBzZWN1cmU8L2gxPjwvZGl2PjxkaXYgaWQ9ImVycm9yTG9uZ0NvbnRlbnQiPgo8ZGl2IGlkPSJlcnJvclNob3J0RGVzYyI+PHAgaWQ9ImVycm9yU2hvcnREZXNjVGV4dCI+ClRoZSBvd25lciBvZiB0aGlzIHdlYnNpdGUgaGFzIGNvbmZpZ3VyZWQgdGhlaXIgd2Vic2l0ZSBpbXByb3Blcmx5LgpUaGUgY29ubmVjdGlvbiBiZXR3ZWVuIHlvdSBhbmQg\')+\''+cf_hostname+' is being MITMed by '+mitm_cdnname+'\'+atob(\'LgpUbyBwcm90ZWN0IHlvdXIgaW5mb3JtYXRpb24gZnJvbSBiZWluZyBzdG9sZW4sIHRoZSBhZGQtb24gc3RvcHBlZCBmdXJ0aGVyIGNvbm5lY3Rpb24gdG8gdGhpcyB3ZWJzaXRlLgo8L3A+PC9kaXY+PGRpdiBpZD0iY2VydEVycm9yQW5kQ2FwdGl2ZVBvcnRhbEJ1dHRvbkNvbnRhaW5lciIgY2xhc3M9ImJ1dHRvbi1jb250YWluZXIiPgo8YnV0dG9uIGlkPSJyZXR1cm5CdXR0b24iIGNsYXNzPSJwcmltYXJ5IiBhdXRvY29tcGxldGU9Im9mZiIgb25jbGljaz0iaGlzdG9yeS5nbygtMSkiPkdvIEJhY2s8L2J1dHRvbj4KPGRpdiBjbGFzcz0iYnV0dG9uLXNwYWNlciI+PC9kaXY+CjxidXR0b24gaWQ9ImFkdmFuY2VkQnV0dG9uIiBhdXRvY29tcGxldGU9Im9mZiIgb25jbGljaz0iaWYgKGNvbmZpcm0oJ0RvIHlvdSByZWFsbHkgd2FudCB0byBhZGQg\')+\''+cf_hostname+'\'+atob(\'IHRvIHdoaXRlbGlzdD8nKSl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjbGluaycpLnNyYz0naHR0cHM6Ly8wLjAuMC4wL2NmbWl0bV9hZGRvbi9hbGxvdy8=\')+\''+cf_hostname+'?'+btoa(cf_hostname)+'\'+atob(\'Jzt9Ij5BZGQgRXhjZXB0aW9uPC9idXR0b24+CjwvZGl2Pgo8L2Rpdj4KPC9kaXY+CjxkaXYgc3R5bGU9ImRpc3BsYXk6bm9uZSI+PGlmcmFtZSBpZD0iYWNsaW5rIiBzcmM9Imh0dHBzOi8vMC4wLjAuMC9jZm1pdG1fYWRkb24vIj48L2lmcmFtZT48L2Rpdj4KPC9ib2R5PjwvaHRtbD4=\');window.stop();'; +if (do_reaction==0){ +cfblockscreen='document.documentElement.innerHTML=atob(\'PGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPjxoZWFkPjx0aXRsZT5JbnNlY3VyZSBDb25uZWN0aW9uPC90aXRsZT4KPCEtLQpUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UsIHYuIDIuMC4KSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMgZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHBzOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uCi8vLS0+CjxsaW5rIGlkPSJmYXZpY29uIiByZWw9Imljb24iIHR5cGU9ImltYWdlL3gtaWNvbiIgaHJlZj0iZGF0YTppbWFnZS94LWljb247YmFzZTY0LEFBQUJBQUVBRUJBQUFBRUFJQUJvQkFBQUZnQUFBQ2dBQUFBUUFBQUFJQUFBQUFFQUlBQUFBQUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFPems0T0twTVNrcTZVRTlQdWxSVFU3cFhWMWU2VzF0YnVsMWRYYnBiVzF1NldGaFl1bFZWVmJwVFUxTzZVRkJRdWt4TVRMb3RMUzJiQUFBQU96WTBOSjdZM056L3Y5emgvOEhlNC8vRDRlYi94dVRwLzhqbTYvL0k1T24veCtQby84Ymo2Zi9FNGVmL3d0L2wvOEhkNC8rLzJkLy8zTi9mL3hrWkdZVTJOVFdkMk43ZS94ZWt4ZjhXdWVEL0ZycmgveGE3NGY4VXI5UC9JaXd1L3lJc0x2OFdzOS8vRjdEZS94ZXIzUDhYcHRyL0lKUzYvOTdnNGY4WkdSbUNBQUFBVjlIUTBPOTFzN3ovRjhIai94YkM0LzhXdytUL0ZMYlYveUFyTGY4Z0t5My9GcnJoL3hhMTMvOFhzTjcvRnFiVi81RzN2Zit4c2JIVUFBQUFSUUFBQUM1b1oyZVYyTjdmL3lXdHYvOFh5dWIvRnNybS94Yko1djhacThmL0dhdkgveGJBNC84V3UrSC9GclhmL3pXZ3VmL1oyZG4vTHk4dmVBQUFBQndBQUFBQUFBQUFTc2JGeGQyZ3k4Ny9LdFRtL3huVTZ2OFcwT2ovRkVKSS94UkNTUDhXeGVYL0ZyL2oveFd3MC8rc3dzUC9rNU9UdGdBQUFEb0FBQUFBQUFBQUFBQUFBQ0ZGUlVWKzZldnIvenExdnY4dzVQSC9KOS92L3lJaUl2OGlJaUwvRnNybS94YkU1UDlYcTduLzE5ZlgrQmtaR1cwQUFBQUtBQUFBQUFBQUFBQUFBQUFBQUFBQVByZTJ0c25BM3VEL0xOcmoveS9vOHY4ckt5di9LeXNyL3l2Yjd2OG12ZEQveE0vUC8zZDNkNkFBQUFBMEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCVWJHeHR0OFBEdytGckF3Lzh1N1BQL05EUTAvelEwTlA4dzNlLy9nTHUvLzhqSXlPZ0FBQUJSQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTkoyZG5iVFM0K1QvS2REVi96UThQUDgwUUVIL05MM0ovOVhaMmY5V1ZsYUxBQUFBS0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFrQUFBQlgzOS9mNzMzRXh2OHQ1dkgvTGRycC81ckJ3LysydHJiVUFBQUFSUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFMbTF0YlpYZjV1Yi9MTG5ELzBTN3hQL2QzZDMvTVRFeGVBQUFBQndBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCS3g4ZkgzYkhQMGYrOHpNMy9sNWVYdGdBQUFEb0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUlUSXlNbmErdnI3VHJxNnV5UmtaR1cwQUFBQUtBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFiQUFBQVJBQUFBRDRBQUFBVkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBLy84QUFJQUJBQUFBQUFBQUFBQUFBSUFCQUFDQUF3QUF3QU1BQU9BSEFBRGdCd0FBOEE4QUFQQVBBQUQ0SHdBQStEOEFBUHcvQUFEK2Z3QUEvLzhBQUE9PSI+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+QG5hbWVzcGFjZSBodG1sICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjtAbmFtZXNwYWNlIHh1bCAiaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9rZXltYXN0ZXIvZ2F0ZWtlZXBlci90aGVyZS5pcy5vbmx5Lnh1bCI7KnwqOnJvb3R7LS1pbi1jb250ZW50LXBhZ2UtY29sb3I6IzQyNGU1YTstLWluLWNvbnRlbnQtcGFnZS1iYWNrZ3JvdW5kOiNmYmZiZmI7LS1pbi1jb250ZW50LXRleHQtY29sb3I6IzMzMzstLWluLWNvbnRlbnQtc2VsZWN0ZWQtdGV4dDojZmZmOy0taW4tY29udGVudC1oZWFkZXItYm9yZGVyLWNvbG9yOiNjOGM4Yzg7LS1pbi1jb250ZW50LWJveC1iYWNrZ3JvdW5kOiNmZmY7LS1pbi1jb250ZW50LWJveC1iYWNrZ3JvdW5kLW9kZDojZjNmNmZhOy0taW4tY29udGVudC1ib3gtYmFja2dyb3VuZC1ob3ZlcjojZWJlYmViOy0taW4tY29udGVudC1ib3gtYmFja2dyb3VuZC1hY3RpdmU6I2RhZGFkYTstLWluLWNvbnRlbnQtYm94LWJvcmRlci1jb2xvcjojYzFjMWMxOy0taW4tY29udGVudC1pdGVtLWhvdmVyOnJnYmEoMCwxNDksMjIxLDAuMjUpOy0taW4tY29udGVudC1pdGVtLXNlbGVjdGVkOiMwMDk1ZGQ7LS1pbi1jb250ZW50LWJvcmRlci1oaWdobGlnaHQ6I2ZmOTUwMDstLWluLWNvbnRlbnQtYm9yZGVyLWZvY3VzOiMwMDk1ZGQ7LS1pbi1jb250ZW50LWJvcmRlci1jb2xvcjojYzFjMWMxOy0taW4tY29udGVudC1jYXRlZ29yeS10ZXh0OiNjMWMxYzE7LS1pbi1jb250ZW50LWNhdGVnb3J5LWJvcmRlci1mb2N1czoxcHggZG90dGVkICNmZmY7LS1pbi1jb250ZW50LWNhdGVnb3J5LXRleHQtc2VsZWN0ZWQ6I2YyZjJmMjstLWluLWNvbnRlbnQtY2F0ZWdvcnktYmFja2dyb3VuZDojNDI0ZjVhOy0taW4tY29udGVudC1jYXRlZ29yeS1iYWNrZ3JvdW5kLWhvdmVyOiM1ZTY5NzI7LS1pbi1jb250ZW50LWNhdGVnb3J5LWJhY2tncm91bmQtYWN0aXZlOiMzNDNmNDg7LS1pbi1jb250ZW50LXRhYi1jb2xvcjojNDI0ZjVhOy0taW4tY29udGVudC1saW5rLWNvbG9yOiMwMDk1ZGQ7LS1pbi1jb250ZW50LWxpbmstY29sb3ItaG92ZXI6IzE3OGNlNTstLWluLWNvbnRlbnQtbGluay1jb2xvci1hY3RpdmU6I2ZmOTUwMDstLWluLWNvbnRlbnQtbGluay1jb2xvci12aXNpdGVkOiM1NTFhOGI7LS1pbi1jb250ZW50LXByaW1hcnktYnV0dG9uLWJhY2tncm91bmQ6IzAwOTVkZDstLWluLWNvbnRlbnQtcHJpbWFyeS1idXR0b24tYmFja2dyb3VuZC1ob3ZlcjojMDA4YWNiOy0taW4tY29udGVudC1wcmltYXJ5LWJ1dHRvbi1iYWNrZ3JvdW5kLWFjdGl2ZTojMDA2YjlkOy0taW4tY29udGVudC10YWJsZS1ib3JkZXItZGFyay1jb2xvcjojZDFkMWQxOy0taW4tY29udGVudC10YWJsZS1oZWFkZXItYmFja2dyb3VuZDojMDA5NWRkfWh0bWx8aHRtbCx4dWx8cGFnZSx4dWx8d2luZG93e2ZvbnQ6bWVzc2FnZS1ib3g7LW1vei1hcHBlYXJhbmNlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1jb250ZW50LXBhZ2UtYmFja2dyb3VuZCk7Y29sb3I6dmFyKC0taW4tY29udGVudC1wYWdlLWNvbG9yKX1odG1sfGJvZHl7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6bm9ybWFsO21hcmdpbjowfWh0bWx8aDF7Zm9udC1zaXplOjIuNWVtO2ZvbnQtd2VpZ2h0OmxpZ2h0ZXI7bGluZS1oZWlnaHQ6MS4yO2NvbG9yOnZhcigtLWluLWNvbnRlbnQtdGV4dC1jb2xvcik7bWFyZ2luOjA7bWFyZ2luLWJvdHRvbTouNWVtfWh0bWx8aHJ7Ym9yZGVyLXN0eWxlOnNvbGlkIG5vbmUgbm9uZSBub25lO2JvcmRlci1jb2xvcjp2YXIoLS1pbi1jb250ZW50LWJvcmRlci1jb2xvcil9eHVsfGNhcHRpb257LW1vei1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjB9eHVsfGNhcHRpb24+eHVsfGNoZWNrYm94LHh1bHxjYXB0aW9uPnh1bHxsYWJlbHtmb250LXNpemU6MS4zcmVtO2ZvbnQtd2VpZ2h0OmJvbGQ7bGluZS1oZWlnaHQ6MjJweH14dWx8Y2FwdGlvbj54dWx8Y2hlY2tib3gseHVsfGNhcHRpb24+eHVsfGxhYmVse21hcmdpbjowIWltcG9ydGFudH0qfCoubWFpbi1jb250ZW50e3BhZGRpbmctdG9wOjQwcHg7cGFkZGluZy1pbmxpbmUtZW5kOjQ0cHg7cGFkZGluZy1ib3R0b206NDhweDtwYWRkaW5nLWlubGluZS1zdGFydDo0OHB4O292ZXJmbG93OmF1dG99eHVsfHByZWZwYW5lPnh1bHwqLmNvbnRlbnQtYm94e292ZXJmbG93OnZpc2libGV9eHVsfGdyb3VwYm94ey1tb3otYXBwZWFyYW5jZTpub25lO2JvcmRlcjowO21hcmdpbjoxNXB4IDAgMDtwYWRkaW5nLWlubGluZS1zdGFydDowO3BhZGRpbmctaW5saW5lLWVuZDowO2ZvbnQtc2l6ZToxLjI1cmVtfXh1bHxncm91cGJveCB4dWx8bGFiZWw6bm90KC5tZW51LWFjY2VsKTpub3QoLm1lbnUtdGV4dCk6bm90KC5pbmRlbnQpLHh1bHxncm91cGJveCB4dWx8ZGVzY3JpcHRpb257bWFyZ2luLWlubGluZS1zdGFydDowIWltcG9ydGFudDttYXJnaW4taW5saW5lLWVuZDowIWltcG9ydGFudH14dWx8dGFicGFuZWxzey1tb3otYXBwZWFyYW5jZTpub25lO2ZvbnQtc2l6ZToxLjI1cmVtO2xpbmUtaGVpZ2h0OjIycHg7Ym9yZGVyOjA7cGFkZGluZzowO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Y29sb3I6aW5oZXJpdH14dWx8dGFic3ttYXJnaW4tYm90dG9tOjE1cHg7Ym9yZGVyLXRvcDoxcHggc29saWQgdmFyKC0taW4tY29udGVudC1ib3gtYm9yZGVyLWNvbG9yKTtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1pbi1jb250ZW50LWJveC1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tY29udGVudC1wYWdlLWJhY2tncm91bmQpfXh1bHwqLnRhYnMtbGVmdCx4dWx8Ki50YWJzLXJpZ2h0e2JvcmRlci1ib3R0b206MH14dWx8dGFiey1tb3otYXBwZWFyYW5jZTpub25lO21hcmdpbi10b3A6MDtwYWRkaW5nOjRweCAyMHB4O21pbi1oZWlnaHQ6NDRweDtjb2xvcjp2YXIoLS1pbi1jb250ZW50LXRhYi1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1jb250ZW50LXBhZ2UtYmFja2dyb3VuZCk7Ym9yZGVyLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czowIWltcG9ydGFudDt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgNTBtcyBlYXNlIDBzfXh1bHx0YWI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1jb250ZW50LWJveC1iYWNrZ3JvdW5kLWhvdmVyKX14dWx8dGFiW3NlbGVjdGVkXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWNvbnRlbnQtYm94LWJhY2tncm91bmQtaG92ZXIpO3BhZGRpbmctYm90dG9tOjA7Ym9yZGVyLWJvdHRvbTo0cHggc29saWQgdmFyKC0taW4tY29udGVudC1ib3JkZXItaGlnaGxpZ2h0KX14dWx8Ki50YWItdGV4dHtmb250LXNpemU6MS4zcmVtO2xpbmUtaGVpZ2h0OjIycHh9aHRtbHxidXR0b257cGFkZGluZzozcHg7Zm9udDppbmhlcml0fSp8YnV0dG9uLGh0bWx8c2VsZWN0LHh1bHxjb2xvcnBpY2tlclt0eXBlPSJidXR0b24iXSx4dWx8bWVudWxpc3R7LW1vei1hcHBlYXJhbmNlOm5vbmU7bWluLWhlaWdodDozMHB4O2NvbG9yOnZhcigtLWluLWNvbnRlbnQtdGV4dC1jb2xvcik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1pbi1jb250ZW50LWJveC1ib3JkZXItY29sb3IpOy1tb3otYm9yZGVyLXRvcC1jb2xvcnM6bm9uZSFpbXBvcnRhbnQ7LW1vei1ib3JkZXItcmlnaHQtY29sb3JzOm5vbmUhaW1wb3J0YW50Oy1tb3otYm9yZGVyLWJvdHRvbS1jb2xvcnM6bm9uZSFpbXBvcnRhbnQ7LW1vei1ib3JkZXItbGVmdC1jb2xvcnM6bm9uZSFpbXBvcnRhbnQ7Ym9yZGVyLXJhZGl1czoycHg7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1jb250ZW50LXBhZ2UtYmFja2dyb3VuZCl9aHRtbHxidXR0b246ZW5hYmxlZDpob3ZlcixodG1sfHNlbGVjdDplbmFibGVkOmhvdmVyLHh1bHxidXR0b246bm90KFtkaXNhYmxlZD0idHJ1ZSJdKTpob3Zlcix4dWx8Y29sb3JwaWNrZXJbdHlwZT0iYnV0dG9uIl06bm90KFtkaXNhYmxlZD0idHJ1ZSJdKTpob3Zlcix4dWx8bWVudWxpc3Q6bm90KFtkaXNhYmxlZD0idHJ1ZSJdKTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWNvbnRlbnQtYm94LWJhY2tncm91bmQtaG92ZXIpfWh0bWx8YnV0dG9uOmVuYWJsZWQ6aG92ZXI6YWN0aXZlLGh0bWx8c2VsZWN0OmVuYWJsZWQ6aG92ZXI6YWN0aXZlLHh1bHxidXR0b246bm90KFtkaXNhYmxlZD0idHJ1ZSJdKTpob3ZlcjphY3RpdmUseHVsfGNvbG9ycGlja2VyW3R5cGU9ImJ1dHRvbiJdOm5vdChbZGlzYWJsZWQ9InRydWUiXSk6aG92ZXI6YWN0aXZlLHh1bHxtZW51bGlzdFtvcGVuPSJ0cnVlIl06bm90KFtkaXNhYmxlZD0idHJ1ZSJdKXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWNvbnRlbnQtYm94LWJhY2tncm91bmQtYWN0aXZlKX1odG1sfGJ1dHRvbjpkaXNhYmxlZCxodG1sfHNlbGVjdDpkaXNhYmxlZCx4dWx8YnV0dG9uW2Rpc2FibGVkPSJ0cnVlIl0seHVsfGNvbG9ycGlja2VyW3R5cGU9ImJ1dHRvbiJdW2Rpc2FibGVkPSJ0cnVlIl0seHVsfG1lbnVsaXN0W2Rpc2FibGVkPSJ0cnVlIl17b3BhY2l0eTouNX0qfGJ1dHRvbi5wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tY29udGVudC1wcmltYXJ5LWJ1dHRvbi1iYWNrZ3JvdW5kKTtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7Y29sb3I6dmFyKC0taW4tY29udGVudC1zZWxlY3RlZC10ZXh0KX1odG1sfGJ1dHRvbi5wcmltYXJ5OmVuYWJsZWQ6aG92ZXIseHVsfGJ1dHRvbi5wcmltYXJ5Om5vdChbZGlzYWJsZWQ9InRydWUiXSk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1jb250ZW50LXByaW1hcnktYnV0dG9uLWJhY2tncm91bmQtaG92ZXIpfWh0bWx8YnV0dG9uLnByaW1hcnk6ZW5hYmxlZDpob3ZlcjphY3RpdmUseHVsfGJ1dHRvbi5wcmltYXJ5Om5vdChbZGlzYWJsZWQ9InRydWUiXSk6aG92ZXI6YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tY29udGVudC1wcmltYXJ5LWJ1dHRvbi1iYWNrZ3JvdW5kLWFjdGl2ZSl9eHVsfGNvbG9ycGlja2VyW3R5cGU9ImJ1dHRvbiJde3BhZGRpbmc6NnB4O3dpZHRoOjUwcHh9eHVsfGJ1dHRvbj54dWx8Ki5idXR0b24tYm94e3BhZGRpbmctcmlnaHQ6MTBweCFpbXBvcnRhbnQ7cGFkZGluZy1sZWZ0OjEwcHghaW1wb3J0YW50fXh1bHxtZW51bGlzdD54dWx8Ki5tZW51bGlzdC1sYWJlbC1ib3g+eHVsfCoubWVudWxpc3QtaWNvbltzcmNde21hcmdpbi1pbmxpbmUtZW5kOjVweH14dWx8YnV0dG9uW3R5cGU9Im1lbnUiXT54dWx8Ki5idXR0b24tYm94Pnh1bHwqLmJ1dHRvbi1tZW51LWRyb3BtYXJrZXJ7LW1vei1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjFweCAwO21hcmdpbi1pbmxpbmUtc3RhcnQ6MTBweDtwYWRkaW5nOjA7d2lkdGg6MTBweDtoZWlnaHQ6MTZweDtib3JkZXI6MDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fXh1bHxidXR0b25bdHlwZT0ibWVudSJdPnh1bHxtZW51cG9wdXB7LW1vei1hcHBlYXJhbmNlOm5vbmU7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1pbi1jb250ZW50LWJveC1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6MnB4O2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tY29udGVudC1ib3gtYmFja2dyb3VuZCl9eHVsfG1lbnVsaXN0Pnh1bHxtZW51cG9wdXAgeHVsfG1lbnUseHVsfG1lbnVsaXN0Pnh1bHxtZW51cG9wdXAgeHVsfG1lbnVpdGVtLHh1bHxidXR0b25bdHlwZT0ibWVudSJdPnh1bHxtZW51cG9wdXAgeHVsfG1lbnUseHVsfGJ1dHRvblt0eXBlPSJtZW51Il0+eHVsfG1lbnVwb3B1cCB4dWx8bWVudWl0ZW17LW1vei1hcHBlYXJhbmNlOm5vbmU7Zm9udC1zaXplOjFlbTtjb2xvcjp2YXIoLS1pbi1jb250ZW50LXRleHQtY29sb3IpO3BhZGRpbmctdG9wOi4yZW07cGFkZGluZy1ib3R0b206LjJlbTtwYWRkaW5nLWlubGluZS1zdGFydDoxMHB4O3BhZGRpbmctaW5saW5lLWVuZDozMHB4fXh1bHxtZW51bGlzdD54dWx8bWVudXBvcHVwPnh1bHxtZW51Om5vdChbZGlzYWJsZWQ9InRydWUiXSlbX21vei1tZW51YWN0aXZlPSJ0cnVlIl0seHVsfG1lbnVsaXN0Pnh1bHxtZW51cG9wdXA+eHVsfG1lbnVpdGVtOm5vdChbZGlzYWJsZWQ9InRydWUiXSlbX21vei1tZW51YWN0aXZlPSJ0cnVlIl0seHVsfGJ1dHRvblt0eXBlPSJtZW51Il0+eHVsfG1lbnVwb3B1cD54dWx8bWVudTpub3QoW2Rpc2FibGVkPSJ0cnVlIl0pW19tb3otbWVudWFjdGl2ZT0idHJ1ZSJdLHh1bHxidXR0b25bdHlwZT0ibWVudSJdPnh1bHxtZW51cG9wdXA+eHVsfG1lbnVpdGVtOm5vdChbZGlzYWJsZWQ9InRydWUiXSlbX21vei1tZW51YWN0aXZlPSJ0cnVlIl17Y29sb3I6dmFyKC0taW4tY29udGVudC10ZXh0LWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWNvbnRlbnQtaXRlbS1ob3Zlcil9eHVsfG1lbnVsaXN0Pnh1bHxtZW51cG9wdXA+eHVsfG1lbnU6bm90KFtkaXNhYmxlZD0idHJ1ZSJdKVtzZWxlY3RlZD0idHJ1ZSJdLHh1bHxtZW51bGlzdD54dWx8bWVudXBvcHVwPnh1bHxtZW51aXRlbTpub3QoW2Rpc2FibGVkPSJ0cnVlIl0pW3NlbGVjdGVkPSJ0cnVlIl0seHVsfGJ1dHRvblt0eXBlPSJtZW51Il0+eHVsfG1lbnVwb3B1cD54dWx8bWVudTpub3QoW2Rpc2FibGVkPSJ0cnVlIl0pW3NlbGVjdGVkPSJ0cnVlIl0seHVsfGJ1dHRvblt0eXBlPSJtZW51Il0+eHVsfG1lbnVwb3B1cD54dWx8bWVudWl0ZW06bm90KFtkaXNhYmxlZD0idHJ1ZSJdKVtzZWxlY3RlZD0idHJ1ZSJde2NvbG9yOnZhcigtLWluLWNvbnRlbnQtc2VsZWN0ZWQtdGV4dCk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1jb250ZW50LWl0ZW0tc2VsZWN0ZWQpfXh1bHxtZW51bGlzdD54dWx8bWVudXBvcHVwPnh1bHxtZW51W2Rpc2FibGVkPSJ0cnVlIl0seHVsfG1lbnVsaXN0Pnh1bHxtZW51cG9wdXA+eHVsfG1lbnVpdGVtW2Rpc2FibGVkPSJ0cnVlIl0seHVsfGJ1dHRvblt0eXBlPSJtZW51Il0+eHVsfG1lbnVwb3B1cD54dWx8bWVudVtkaXNhYmxlZD0idHJ1ZSJdLHh1bHxidXR0b25bdHlwZT0ibWVudSJdPnh1bHxtZW51cG9wdXA+eHVsfG1lbnVpdGVtW2Rpc2FibGVkPSJ0cnVlIl17Y29sb3I6Izk5OTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fXh1bHxtZW51bGlzdD54dWx8bWVudXBvcHVwIHh1bHxtZW51c2VwYXJhdG9yLHh1bHxidXR0b25bdHlwZT0ibWVudSJdPnh1bHxtZW51cG9wdXAgeHVsfG1lbnVzZXBhcmF0b3J7LW1vei1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlci10b3A6MXB4IHNvbGlkIHZhcigtLWluLWNvbnRlbnQtYm94LWJvcmRlci1jb2xvcik7Ym9yZGVyLWJvdHRvbTowfWh0bWx8aW5wdXRbdHlwZT0idGV4dCJdLGh0bWx8dGV4dGFyZWEseHVsfHRleHRib3h7LW1vei1hcHBlYXJhbmNlOm5vbmU7Y29sb3I6dmFyKC0taW4tY29udGVudC10ZXh0LWNvbG9yKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWluLWNvbnRlbnQtYm94LWJvcmRlci1jb2xvcik7LW1vei1ib3JkZXItdG9wLWNvbG9yczpub25lIWltcG9ydGFudDstbW96LWJvcmRlci1yaWdodC1jb2xvcnM6bm9uZSFpbXBvcnRhbnQ7LW1vei1ib3JkZXItYm90dG9tLWNvbG9yczpub25lIWltcG9ydGFudDstbW96LWJvcmRlci1sZWZ0LWNvbG9yczpub25lIWltcG9ydGFudDtib3JkZXItcmFkaXVzOjJweDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWNvbnRlbnQtYm94LWJhY2tncm91bmQpfXh1bHx0ZXh0Ym94e21pbi1oZWlnaHQ6MzBweDtwYWRkaW5nLXJpZ2h0OjEwcHg7cGFkZGluZy1sZWZ0OjEwcHh9eHVsfHRleHRib3gudHJlZS1pbnB1dHttaW4taGVpZ2h0OnVuc2V0O3BhZGRpbmctcmlnaHQ6dW5zZXQ7cGFkZGluZy1sZWZ0OnVuc2V0fWh0bWx8aW5wdXRbdHlwZT0idGV4dCJdLGh0bWx8dGV4dGFyZWF7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtwYWRkaW5nOjVweCAxMHB4fWh0bWx8aW5wdXRbdHlwZT0idGV4dCJdOmZvY3VzLGh0bWx8dGV4dGFyZWE6Zm9jdXMseHVsfHRleHRib3hbZm9jdXNlZF17Ym9yZGVyLWNvbG9yOnZhcigtLWluLWNvbnRlbnQtYm9yZGVyLWZvY3VzKX1odG1sfGlucHV0W3R5cGU9InRleHQiXTpkaXNhYmxlZCxodG1sfHRleHRhcmVhOmRpc2FibGVkLHh1bHx0ZXh0Ym94W2Rpc2FibGVkPSJ0cnVlIl17b3BhY2l0eTouNX1odG1sfGEsLnRleHQtbGlua3tjb2xvcjp2YXIoLS1pbi1jb250ZW50LWxpbmstY29sb3IpO3RleHQtZGVjb3JhdGlvbjpub25lfWh0bWx8YTpob3ZlciwudGV4dC1saW5rOmhvdmVye2NvbG9yOnZhcigtLWluLWNvbnRlbnQtbGluay1jb2xvci1ob3Zlcik7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX1odG1sfGE6dmlzaXRlZHtjb2xvcjp2YXIoLS1pbi1jb250ZW50LWxpbmstY29sb3ItdmlzaXRlZCl9aHRtbHxhOmhvdmVyOmFjdGl2ZSwudGV4dC1saW5rOmhvdmVyOmFjdGl2ZXtjb2xvcjp2YXIoLS1pbi1jb250ZW50LWxpbmstY29sb3ItYWN0aXZlKTt0ZXh0LWRlY29yYXRpb246bm9uZX1odG1sfGlucHV0W3R5cGU9ImNoZWNrYm94Il17b3BhY2l0eTowO3dpZHRoOjA7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZX1odG1sfGlucHV0W3R5cGU9ImNoZWNrYm94Il0raHRtbHxsYWJlbDpiZWZvcmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29udGVudDoiIjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9aHRtbHxpbnB1dFt0eXBlPSJjaGVja2JveCJdK2h0bWx8bGFiZWx7bGluZS1oZWlnaHQ6MH14dWx8Y2hlY2tib3h7bWFyZ2luLWlubGluZS1zdGFydDowfXh1bHwqLmNoZWNrYm94LWNoZWNrLGh0bWx8aW5wdXRbdHlwZT0iY2hlY2tib3giXStodG1sfGxhYmVsOmJlZm9yZXstbW96LWFwcGVhcmFuY2U6bm9uZTt3aWR0aDoyM3B4O2hlaWdodDoyM3B4O2JvcmRlci1yYWRpdXM6MnB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0taW4tY29udGVudC1ib3gtYm9yZGVyLWNvbG9yKTttYXJnaW4taW5saW5lLWVuZDoxMHB4O2JhY2tncm91bmQtY29sb3I6I2YxZjFmMTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgjZmZmLHJnYmEoMjU1LDI1NSwyNTUsMC44KSkhaW1wb3J0YW50O2JhY2tncm91bmQtcG9zaXRpb246Y2VudGVyIGNlbnRlcjtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7Ym94LXNoYWRvdzowIDFweCAxcHggMCAjZmZmLGluc2V0IDAgMnB4IDAgMCByZ2JhKDAsMCwwLDAuMDMpfXh1bHxjaGVja2JveDpub3QoW2Rpc2FibGVkPSJ0cnVlIl0pOmhvdmVyPnh1bHwqLmNoZWNrYm94LWNoZWNrLGh0bWx8aW5wdXRbdHlwZT0iY2hlY2tib3giXTpub3QoOmRpc2FibGVkKStodG1sfGxhYmVsOmhvdmVyOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0taW4tY29udGVudC1ib3JkZXItZm9jdXMpfXh1bHxjaGVja2JveFtkaXNhYmxlZD0idHJ1ZSJdPnh1bHwqLmNoZWNrYm94LWNoZWNrLGh0bWx8aW5wdXRbdHlwZT0iY2hlY2tib3giXTpkaXNhYmxlZCtodG1sfGxhYmVse29wYWNpdHk6LjV9eHVsfCouY2hlY2tib3gtbGFiZWwtYm94e21hcmdpbi1pbmxpbmUtc3RhcnQ6LTFweDtwYWRkaW5nLWlubGluZS1zdGFydDowfXh1bHxyaWNobGlzdGl0ZW0+eHVsfCouY2hlY2tib3gtY2hlY2t7bWFyZ2luOjNweCA2cHh9eHVsfHJhZGlve21hcmdpbi1pbmxpbmUtc3RhcnQ6MH14dWx8Ki5yYWRpby1jaGVja3stbW96LWFwcGVhcmFuY2U6bm9uZTt3aWR0aDoyM3B4O2hlaWdodDoyM3B4O2JvcmRlcjoxcHggc29saWQgdmFyKC0taW4tY29udGVudC1ib3gtYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOjUwJTttYXJnaW4taW5saW5lLWVuZDoxMHB4O2JhY2tncm91bmQtY29sb3I6I2YxZjFmMTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgjZmZmLHJnYmEoMjU1LDI1NSwyNTUsMC44MCkpO2JveC1zaGFkb3c6MCAxcHggMXB4IDAgI2ZmZixpbnNldCAwIDJweCAwIDAgcmdiYSgwLDAsMCwwLjAzKX14dWx8cmFkaW86bm90KFtkaXNhYmxlZD0idHJ1ZSJdKTpob3Zlcj54dWx8Ki5yYWRpby1jaGVja3tib3JkZXItY29sb3I6dmFyKC0taW4tY29udGVudC1ib3JkZXItZm9jdXMpfXh1bHxyYWRpb1tkaXNhYmxlZD0idHJ1ZSJdPnh1bHwqLnJhZGlvLWNoZWNre29wYWNpdHk6LjV9eHVsfCoucmFkaW8tbGFiZWwtYm94e21hcmdpbi1pbmxpbmUtc3RhcnQ6LTFweDttYXJnaW4taW5saW5lLWVuZDoxMHB4O3BhZGRpbmctaW5saW5lLXN0YXJ0OjB9KnwqI2NhdGVnb3JpZXN7LW1vei1hcHBlYXJhbmNlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1jb250ZW50LWNhdGVnb3J5LWJhY2tncm91bmQpO3BhZGRpbmctdG9wOjM5cHg7bWFyZ2luOjA7Ym9yZGVyLXdpZHRoOjB9KnwqLmNhdGVnb3J5ey1tb3otYXBwZWFyYW5jZTpub25lO2NvbG9yOnZhcigtLWluLWNvbnRlbnQtY2F0ZWdvcnktdGV4dCk7Ym9yZGVyLWlubGluZS1lbmQtd2lkdGg6MDtwYWRkaW5nLWlubGluZS1zdGFydDoxNXB4O3BhZGRpbmctaW5saW5lLWVuZDoyMXB4O21pbi1oZWlnaHQ6NDBweDt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgMTUwbXN9KnwqLmNhdGVnb3J5OmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tY29udGVudC1jYXRlZ29yeS1iYWNrZ3JvdW5kLWhvdmVyKX0qfCouY2F0ZWdvcnlbc2VsZWN0ZWRdLCp8Ki5jYXRlZ29yeS5zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWNvbnRlbnQtY2F0ZWdvcnktYmFja2dyb3VuZC1hY3RpdmUpO2NvbG9yOnZhcigtLWluLWNvbnRlbnQtY2F0ZWdvcnktdGV4dC1zZWxlY3RlZCk7cGFkZGluZy1pbmxpbmUtc3RhcnQ6MTFweDtib3JkZXItaW5saW5lLXN0YXJ0OnNvbGlkIDRweCB2YXIoLS1pbi1jb250ZW50LWJvcmRlci1oaWdobGlnaHQpfSp8KiNjYXRlZ29yaWVzW2tleWJvYXJkLW5hdmlnYXRpb249InRydWUiXTotbW96LWZvY3VzcmluZz4qfCouY2F0ZWdvcnlbY3VycmVudF17Ym9yZGVyLXRvcDp2YXIoLS1pbi1jb250ZW50LWNhdGVnb3J5LWJvcmRlci1mb2N1cyk7Ym9yZGVyLWJvdHRvbTp2YXIoLS1pbi1jb250ZW50LWNhdGVnb3J5LWJvcmRlci1mb2N1cyl9KnwqLmNhdGVnb3J5LW5hbWV7bGluZS1oZWlnaHQ6MjJweDtmb250LXNpemU6MS4yNXJlbTtwYWRkaW5nLWJvdHRvbToycHg7cGFkZGluZy1pbmxpbmUtc3RhcnQ6OXB4O21hcmdpbjowOy1tb3otdXNlci1zZWxlY3Q6bm9uZX0qfCouY2F0ZWdvcnktaWNvbnt3aWR0aDoyNHB4O2hlaWdodDoyNHB4fSp8Ki5oZWFkZXJ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0taW4tY29udGVudC1oZWFkZXItYm9yZGVyLWNvbG9yKTttYXJnaW4taW5saW5lLWVuZDo0cHg7bWFyZ2luLWJvdHRvbToxNXB4O3BhZGRpbmctYm90dG9tOjE1cHg7LW1vei1ib3gtYWxpZ246YmFzZWxpbmV9KnwqLmhlYWRlci1uYW1le2ZvbnQtc2l6ZToyLjVyZW07Zm9udC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjQwcHg7bWFyZ2luOjA7LW1vei11c2VyLXNlbGVjdDpub25lfXh1bHxmaWxlZmllbGR7LW1vei1hcHBlYXJhbmNlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXI6MDtwYWRkaW5nOjB9eHVsfCouZmlsZUZpZWxkQ29udGVudEJveHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fXh1bHwqLmZpbGVGaWVsZEljb257bWFyZ2luLWlubGluZS1zdGFydDoxMHB4O21hcmdpbi1pbmxpbmUtZW5kOjB9eHVsfCouZmlsZUZpZWxkTGFiZWx7bWFyZ2luLWlubGluZS1zdGFydDotMjZweDtwYWRkaW5nLWlubGluZS1zdGFydDozNnB4fXh1bHx0ZXh0Ym94K3h1bHxidXR0b24seHVsfGZpbGVmaWVsZCt4dWx8YnV0dG9ue2JvcmRlci1pbmxpbmUtc3RhcnQ6bm9uZX14dWx8cmljaGxpc3Rib3gseHVsfGxpc3Rib3h7LW1vei1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luLWlubGluZS1zdGFydDowO2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tY29udGVudC1ib3gtYmFja2dyb3VuZCk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1pbi1jb250ZW50LWJveC1ib3JkZXItY29sb3IpO2NvbG9yOnZhcigtLWluLWNvbnRlbnQtdGV4dC1jb2xvcil9eHVsfHRyZWVjaGlsZHJlbjo6LW1vei10cmVlLXJvdyx4dWx8bGlzdGJveCB4dWx8bGlzdGl0ZW17cGFkZGluZzouM2VtO21hcmdpbjowO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtiYWNrZ3JvdW5kLWltYWdlOm5vbmV9eHVsfHRyZWVjaGlsZHJlbjo6LW1vei10cmVlLXJvdyhob3ZlcikseHVsfGxpc3Rib3ggeHVsfGxpc3RpdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tY29udGVudC1pdGVtLWhvdmVyKX14dWx8dHJlZWNoaWxkcmVuOjotbW96LXRyZWUtcm93KHNlbGVjdGVkKSx4dWx8bGlzdGJveCB4dWx8bGlzdGl0ZW1bc2VsZWN0ZWQ9InRydWUiXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWNvbnRlbnQtaXRlbS1zZWxlY3RlZCk7Y29sb3I6dmFyKC0taW4tY29udGVudC1zZWxlY3RlZC10ZXh0KX14dWx8dHJlZXstbW96LWFwcGVhcmFuY2U6bm9uZTtmb250LXNpemU6MWVtO2JvcmRlcjoxcHggc29saWQgdmFyKC0taW4tY29udGVudC1ib3gtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWNvbnRlbnQtYm94LWJhY2tncm91bmQpO21hcmdpbjowfXh1bHx0cmVlOi1tb3otZm9jdXNyaW5nLHh1bHxyaWNobGlzdGJveDotbW96LWZvY3VzcmluZ3tib3JkZXI6MXB4IGRvdHRlZCB2YXIoLS1pbi1jb250ZW50LWJvcmRlci1mb2N1cyl9eHVsfGxpc3RoZWFkZXIseHVsfHRyZWVjb2xzey1tb3otYXBwZWFyYW5jZTpub25lO2JvcmRlcjowO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWluLWNvbnRlbnQtYm9yZGVyLWNvbG9yKTtwYWRkaW5nOjB9LmF1dG9jb21wbGV0ZS10cmVlPnh1bHx0cmVlY29sc3tib3JkZXItYm90dG9tOm5vbmUhaW1wb3J0YW50fXh1bHx0cmVlY29sOm5vdChbaGlkZWhlYWRlcj0idHJ1ZSJdKSx4dWx8dHJlZWNvbHBpY2tlcnstbW96LWFwcGVhcmFuY2U6bm9uZTtib3JkZXI6MDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWNvbnRlbnQtYm94LWJhY2tncm91bmQtaG92ZXIpO2NvbG9yOiM4MDgwODA7cGFkZGluZzo1cHggMTBweH14dWx8dHJlZWNvbDpub3QoW2hpZGVoZWFkZXI9InRydWUiXSk6bm90KFtzb3J0YWJsZT0iZmFsc2UiXSk6aG92ZXIseHVsfHRyZWVjb2xwaWNrZXI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1jb250ZW50LWJveC1iYWNrZ3JvdW5kLWFjdGl2ZSk7Y29sb3I6dmFyKC0taW4tY29udGVudC10ZXh0LWNvbG9yKX14dWx8dHJlZWNvbDpub3QoW2hpZGVoZWFkZXI9InRydWUiXSk6bm90KDpmaXJzdC1jaGlsZCkseHVsfHRyZWVjb2xwaWNrZXJ7Ym9yZGVyLWlubGluZS1zdGFydC13aWR0aDoxcHg7Ym9yZGVyLWlubGluZS1zdGFydC1zdHlsZTpzb2xpZDtib3JkZXItaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRyYW5zcGFyZW50IDAsdHJhbnNwYXJlbnQgMjAlLCNjMWMxYzEgMjAlLCNjMWMxYzEgODAlLHRyYW5zcGFyZW50IDgwJSx0cmFuc3BhcmVudCAxMDAlKSAxIDF9eHVsfHRyZWVjb2w6bm90KFtoaWRlaGVhZGVyPSJ0cnVlIl0pPnh1bHwqLnRyZWVjb2wtc29ydGRpcmVjdGlvbltzb3J0RGlyZWN0aW9uXXt3aWR0aDoxOHB4O2hlaWdodDoxOHB4fXh1bHx0cmVlY29sOm5vdChbaGlkZWhlYWRlcj0idHJ1ZSJdKT54dWx8Ki50cmVlY29sLXNvcnRkaXJlY3Rpb25bc29ydERpcmVjdGlvbj0iYXNjZW5kaW5nIl17dHJhbnNmb3JtOnNjYWxlWSgtMSl9eHVsfHRyZWVjaGlsZHJlbjo6LW1vei10cmVlLXJvd3ttaW4taGVpZ2h0OjJlbX14dWx8dHJlZWNoaWxkcmVuOjotbW96LXRyZWUtY2VsbC10ZXh0e2NvbG9yOnZhcigtLWluLWNvbnRlbnQtdGV4dC1jb2xvcil9eHVsfHRyZWVjaGlsZHJlbjo6LW1vei10cmVlLWNlbGwtdGV4dChzZWxlY3RlZCl7Y29sb3I6dmFyKC0taW4tY29udGVudC1zZWxlY3RlZC10ZXh0KX14dWx8Y2FwdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fXh1bHxidXR0b24saHRtbHxidXR0b24seHVsfGNvbG9ycGlja2VyW3R5cGU9ImJ1dHRvbiJdLHh1bHxtZW51bGlzdHttYXJnaW46MnB4IDRweH14dWx8bWVudWxpc3Q6bm90KFtlZGl0YWJsZT0idHJ1ZSJdKT54dWx8Ki5tZW51bGlzdC1kcm9wbWFya2Vye21hcmdpbi10b3A6MXB4O21hcmdpbi1ib3R0b206MXB4fXh1bHxjaGVja2JveHtwYWRkaW5nLWlubGluZS1zdGFydDowfXh1bHwqLmJ1dHRvbi1ib3gseHVsfCoubWVudWxpc3QtbGFiZWwtYm94LHh1bHwqLnJhZGlvLWxhYmVsLWJveCx4dWx8Ki5jaGVja2JveC1sYWJlbC1ib3h7Ym9yZGVyLXN0eWxlOm5vbmV9eHVsfGJ1dHRvbjotbW96LWZvY3VzcmluZz54dWx8Ki5idXR0b24tYm94LHh1bHxtZW51bGlzdDotbW96LWZvY3VzcmluZz54dWx8Ki5tZW51bGlzdC1sYWJlbC1ib3gseHVsfHJhZGlvW2ZvY3VzZWQ9InRydWUiXT54dWx8Ki5yYWRpby1sYWJlbC1ib3gsaHRtbHxpbnB1dFt0eXBlPSJjaGVja2JveCJdOi1tb3otZm9jdXNyaW5nK2h0bWx8bGFiZWw6YmVmb3JlLHh1bHxjaGVja2JveDotbW96LWZvY3VzcmluZz54dWx8Ki5jaGVja2JveC1sYWJlbC1ib3h7b3V0bGluZToxcHggZG90dGVkfWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWluLWhlaWdodDoxMDB2aDtwYWRkaW5nLXRvcDowO3BhZGRpbmctYm90dG9tOjA7cGFkZGluZy1pbmxpbmUtc3RhcnQ6Y2FsYyg0OHB4KzQuNmVtKTtwYWRkaW5nLWlubGluZS1lbmQ6NDhweDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uY29udGFpbmVye21pbi13aWR0aDoxM2VtO21heC13aWR0aDo1MmVtfS5jb250YWluZXIucmVzdG9yZS1jaG9zZW57ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWdyb3c6MTttYXJnaW46MTB2aCAwfS50aXRsZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOmxlZnQgMDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjEuNmVtO21hcmdpbi1pbmxpbmUtc3RhcnQ6LTIuM2VtO3BhZGRpbmctaW5saW5lLXN0YXJ0OjIuM2VtO2ZvbnQtc2l6ZToyLjVlbX0udGl0bGU6ZGlyKHJ0bCl7YmFja2dyb3VuZC1wb3NpdGlvbjpyaWdodCAwfS50aXRsZS10ZXh0e2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNjMWMxYzE7Zm9udC1zaXplOmluaGVyaXQ7cGFkZGluZy1ib3R0b206LjRlbX0uYnV0dG9uLWNvbnRhaW5lcnttYXJnaW4tdG9wOjEuMmVtfS5idXR0b24tY29udGFpbmVyPmJ1dHRvbnttaW4td2lkdGg6MTUwcHh9LmJ1dHRvbi1jb250YWluZXI+YnV0dG9uOmZpcnN0LWNoaWxke21hcmdpbi1pbmxpbmUtc3RhcnQ6MH1ib2R5e2JhY2tncm91bmQtc2l6ZTo2NHB4IDMycHg7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7cGFkZGluZzo3NXB4IDA7bWluLXdpZHRoOjEzZW19LmJ1dHRvbi1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgd3JhcH0uYnV0dG9uLXNwYWNlcntmbGV4OjF9Ym9keXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgtNDVkZWcsI2YwZDAwMCwjZjBkMDAwIDMzJSwjZmVkYzAwIDMzJSwjZmVkYzAwIDY2JSwjZjBkMDAwIDY2JSwjZjBkMDAwKX0jcmV0dXJuQnV0dG9ue21pbi13aWR0aDoyNTBweH0uY29udGFpbmVye3Bvc2l0aW9uOnJlbGF0aXZlfTwvc3R5bGU+CjwvaGVhZD48Ym9keT4KPGRpdiBpZD0iZXJyb3JQYWdlQ29udGFpbmVyIiBjbGFzcz0iY29udGFpbmVyIj4KPGRpdiBjbGFzcz0idGl0bGUiPjxoMSBjbGFzcz0idGl0bGUtdGV4dCI+WW91ciBjb25uZWN0aW9uIGlzIG5vdCBzZWN1cmU8L2gxPjwvZGl2PjxkaXYgaWQ9ImVycm9yTG9uZ0NvbnRlbnQiPgo8ZGl2IGlkPSJlcnJvclNob3J0RGVzYyI+PHAgaWQ9ImVycm9yU2hvcnREZXNjVGV4dCI+ClRoZSBvd25lciBvZiB0aGlzIHdlYnNpdGUgaGFzIGNvbmZpZ3VyZWQgdGhlaXIgd2Vic2l0ZSBpbXByb3Blcmx5LgpUaGUgY29ubmVjdGlvbiBiZXR3ZWVuIHlvdSBhbmQg\')+\''+cf_hostname+' is being MITMed by '+mitm_cdnname+'\'+atob(\'LgpUbyBwcm90ZWN0IHlvdXIgaW5mb3JtYXRpb24gZnJvbSBiZWluZyBzdG9sZW4sIHRoZSBhZGQtb24gc3RvcHBlZCBmdXJ0aGVyIGNvbm5lY3Rpb24gdG8gdGhpcyB3ZWJzaXRlLgo8L3A+PC9kaXY+PGRpdiBpZD0iY2VydEVycm9yQW5kQ2FwdGl2ZVBvcnRhbEJ1dHRvbkNvbnRhaW5lciIgY2xhc3M9ImJ1dHRvbi1jb250YWluZXIiPgo8YnV0dG9uIGlkPSJyZXR1cm5CdXR0b24iIGNsYXNzPSJwcmltYXJ5IiBhdXRvY29tcGxldGU9Im9mZiIgb25jbGljaz0iaGlzdG9yeS5nbygtMSkiPkdvIEJhY2s8L2J1dHRvbj4KPGRpdiBjbGFzcz0iYnV0dG9uLXNwYWNlciI+PC9kaXY+CjxidXR0b24gaWQ9ImFkdmFuY2VkQnV0dG9uIiBhdXRvY29tcGxldGU9Im9mZiIgb25jbGljaz0iaWYgKGNvbmZpcm0oJ0RvIHlvdSByZWFsbHkgd2FudCB0byBhZGQg\')+\''+cf_hostname+'\'+atob(\'IHRvIHdoaXRlbGlzdD8nKSl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjbGluaycpLnNyYz0naHR0cHM6Ly8wLjAuMC4wL2NmbWl0bV9hZGRvbi9hbGxvdy8=\')+\''+cf_hostname+'?'+btoa(cf_hostname)+'\'+atob(\'Jzt9Ij5BZGQgRXhjZXB0aW9uPC9idXR0b24+DQo8YnV0dG9uIGlkPSJhZHZhbmNlZEJ1dHRvbiIgYXV0b2NvbXBsZXRlPSJvZmYiIG9uY2xpY2s9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY2xpbmsnKS5zcmM9J2h0dHBzOi8vMC4wLjAuMC9jZm1pdG1fYWRkb24vYWxsb3cvdmlld2V4Y2VwdGlvbnM/bm93JzsiPlZpZXcgRXhjZXB0aW9uczwvYnV0dG9uPg0KPC9kaXY+DQo8L2Rpdj4NCjwvZGl2Pg0KPGRpdiBzdHlsZT0iZGlzcGxheTpub25lIj48aWZyYW1lIGlkPSJhY2xpbmsiIHNyYz0iaHR0cHM6Ly8wLjAuMC4wL2NmbWl0bV9hZGRvbi8iPjwvaWZyYW1lPjwvZGl2Pg0KPC9ib2R5PjwvaHRtbD4=\');window.stop();'; var blockingCFnow=browser.tabs.executeScript(res.tabId,{code: cfblockscreen});blockingCFnow.then(()=>{return {cancel: true};},onError); - -}else{// warning only - -console.log('SECURITY_ALERT: '+mitm_cdnname+' MiTM Detected: '+res.url); +} +if (do_reaction==1){ cfblockscreen='var orig_dt=document.title;setInterval(function(){var link=document.querySelector("link[rel*=\'icon\']")||document.createElement(\'link\');link.type=\'image/x-icon\';link.rel=\'icon\';link.href=\'data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOzk4OKpMSkq6UE9PulRTU7pXV1e6W1tbul1dXbpbW1u6WFhYulVVVbpTU1O6UFBQukxMTLotLS2bAAAAOzY0NJ7Y3Nz/v9zh/8He4//D4eb/xuTp/8jm6//I5On/x+Po/8bj6f/E4ef/wt/l/8Hd4/+/2d//3N/f/xkZGYU2NTWd2N7e/xekxf8WueD/Frrh/xa74f8Ur9P/Iiwu/yIsLv8Ws9//F7De/xer3P8Xptr/IJS6/97g4f8ZGRmCAAAAV9HQ0O91s7z/F8Hj/xbC4/8Ww+T/FLbV/yArLf8gKy3/Frrh/xa13/8XsN7/FqbV/5G3vf+xsbHUAAAARQAAAC5oZ2eV2N7f/yWtv/8Xyub/Fsrm/xbJ5v8Zq8f/GavH/xbA4/8Wu+H/FrXf/zWguf/Z2dn/Ly8veAAAABwAAAAAAAAASsbFxd2gy87/KtTm/xnU6v8W0Oj/FEJI/xRCSP8WxeX/Fr/j/xWw0/+swsP/k5OTtgAAADoAAAAAAAAAAAAAACFFRUV+6evr/zq1vv8w5PH/J9/v/yIiIv8iIiL/Fsrm/xbE5P9Xq7n/19fX+BkZGW0AAAAKAAAAAAAAAAAAAAAAAAAAPre2tsnA3uD/LNrj/y/o8v8rKyv/Kysr/yvb7v8mvdD/xM/P/3d3d6AAAAA0AAAAAAAAAAAAAAAAAAAAAAAAABUbGxtt8PDw+FrAw/8u7PP/NDQ0/zQ0NP8w3e//gLu//8jIyOgAAABRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANJ2dnbTS4+T/KdDV/zQ8PP80QEH/NL3J/9XZ2f9WVlaLAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAABX39/f733Exv8t5vH/Ldrp/5rBw/+2trbUAAAARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALm1tbZXf5ub/LLnD/0S7xP/d3d3/MTExeAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABKx8fH3bHP0f+8zM3/l5eXtgAAADoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITIyMna+vr7Trq6uyRkZGW0AAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbAAAARAAAAD4AAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAIABAAAAAAAAAAAAAIABAACAAwAAwAMAAOAHAADgBwAA8A8AAPAPAAD4HwAA+D8AAPw/AAD+fwAA//8AAA==\';document.getElementsByTagName(\'head\')[0].appendChild(link);if (!document.title.startsWith(\'[!!\') && !document.title.includes(\'!!]\')){document.title=\'[!!'+mitm_cdnname+'!!] \'+orig_dt;}},2500);'; var warningCFnow=browser.tabs.executeScript(res.tabId,{code: cfblockscreen});warningCFnow.then(function(){},onError); - +} +if (do_reaction==2){ +if (res.type=='image'){return {redirectUrl: cf_blocked_img};}else{if (res.type=='main_frame'){return {redirectUrl: 'https://0.0.0.0/'};}else{return {cancel: true};}} } } @@ -122,27 +126,15 @@ var warningCFnow=browser.tabs.executeScript(res.tabId,{code: cfblockscreen});war } function gotwhitelistrequest(r){ -var v_whitelist=r.url.replace('https://0.0.0.0/cfmitm_addon/allow/','',).split('?',2); -if (v_whitelist.length==2){if (/^([0-9a-z.-]{4,200})$/.test(v_whitelist[0]) && v_whitelist[1]==btoa(v_whitelist[0])){ -if (cf_history.includes(v_whitelist[0])){// found in history, assume this request is valid +if (r.url=='https://0.0.0.0/cfmitm_addon/allow/viewexceptions?now'){browser.runtime.openOptionsPage().then(function(){},onError);}else{ +var v_whitelist=r.url.replace('https://0.0.0.0/cfmitm_addon/allow/','',).split('?',2);if (v_whitelist.length==2){if (/^([0-9a-z.-]{4,200})$/.test(v_whitelist[0]) && v_whitelist[1]==btoa(v_whitelist[0])){//cfinfection?originhash +if (cf_history.includes(v_whitelist[0])){if (!cf_ignore.includes(v_whitelist[0])){// found in history and rule not found console.log('CFMITM: Adding to whitelist: '+v_whitelist[0]); -var _gwr=browser.storage.local.get();_gwr.then(function(r){ -var _currentwhitelist=v_whitelist[0]+"\n";if (r.myset_cfwhite){_currentwhitelist+=r.myset_cfwhite;} -_currentwhitelist=_currentwhitelist.split("\n");for (var l=0;l<_currentwhitelist.length;l++){ -if (!/^([0-9a-z.-]{1,})\.([a-z]{2,20})$/.test(_currentwhitelist[l])||_currentwhitelist[l].startsWith(".")||_currentwhitelist[l].includes("..")|| -_currentwhitelist[l].endsWith(".cloudflare.com")||_currentwhitelist[l]=='cloudflare.com'|| -_currentwhitelist[l].endsWith(".incapsula.com")||_currentwhitelist[l]=='incapsula.com'|| -_currentwhitelist[l].endsWith(".withgoogle.com")||_currentwhitelist[l].endsWith(".google.com")){_currentwhitelist[l]='';} -} -_currentwhitelist=_currentwhitelist.slice().sort(function(a,b){return a>b}).reduce(function(a,b){if (a.slice(-1)[0]!==b){a.push(b);};return a;},[]);// -duplicate -_currentwhitelist=_currentwhitelist.filter(v=>v!='');// -empty -_currentwhitelist=_currentwhitelist.join("\n"); -browser.storage.local.set({myset_cfwhite: _currentwhitelist}); -cf_ignore=_currentwhitelist.split("\n").filter(v=>v!='');//update whitelist -browser.tabs.executeScript({code: 'location.reload();'}); -},onError); -} +cf_ignore.push(v_whitelist[0]); +browser.storage.local.set({myset_cfwhite: cf_ignore.join("\n")}).then(function(){browser.tabs.executeScript({code: 'location.reload();'});},onError); }} +}} +} return {cancel: true}; } diff --git a/src/style.css b/src/style.css index 594891ef7..207f5e518 100644 --- a/src/style.css +++ b/src/style.css @@ -1,3 +1,3 @@ body{font:13px Verdana} label{-webkit-user-select:none;-moz-user-select:none} -textarea{white-space:pre;overflow-wrap:normal;overflow-x:scroll} +textarea{white-space:pre;overflow-wrap:normal;overflow-x:scroll} \ No newline at end of file