質問: chromeのキャッシュされたwebページを表示する方法 webページにアクセスしましたが、そのwebページが削除されたか、サーバーが停止しました。 chromeがこのwebページのバージョンをキャッシュしたとします。もしそうなら、どのように私はこのウェブページを見ることができますか?
回答: 最も重要な点:ブラウザのキャッシュは不安定で、古いコンテンツは積極的に破棄されます。あなたの「行動の速さ」の尺度は、数分から数時間で測定されますctrl + fでabout:cacheで探しているurlが見つかったと仮定すると、以下のスクリプトはそのurlに一致するものすべてを保存しようとします。完全に自動化されています。 what.cdがダウンしたときに私はこれを書いた。あなたのキャッシュに何もない場合、おめでとう:(あなたは "ハード"モードになっています。もしあなたが 本当に あなたのキャッシュデータを戻したいなら、あなたはtestdisk( http://www.cgsecurity)を得る必要があります。 org/wiki/testdisk )が動作していて、キャッシュフォルダ内の何かを復元できるかどうかを確認してください。データがきれいに復元されれば、chromeから取得できるかもしれませんが、ディスクフォーマットをパースしようとして動かなくなるかもしれません(回復したデータをnirsoftのキャッシュビューアに送り込むことができます。)あなたが実際にabout:cache、すごいことに何かしているのなら! 2つのフォルダを作成します。1つは "files"、もう1つは "raw"(または同様の名前)という名前です。 open chrome:// settings/search#ダウンロード%20場所 ダウンロードフォルダを生のフォルダに変更します。 about about:cache(設定タブを開いたままにします) f12キーを押してdevtoolsを開きます(注 - devtoolsが開いている間ずっと見られるcontent security policyエラーを無視してください)。 以下のものをすべてクリップボードにコピーします(最後に巨大なjsの集まりがあることを確認してください。「テキストの終わり」のコメントがあります)。 開発ツールのコンソールタブに行きます 貼り付けて、chromeが追いつくのを待って、enterキーを押します。 これで、キャッシュwebページに2つのボタンが表示されます。一致させたいurl文字列(単純にするために正規表現ではない)を入力します。 「raw」ボタンをクリックして、chromeの起動をお楽しみください。 :p 今すぐダウンロードフォルダを "files"フォルダに切り替え、戻ってきて "files"ボタンをクリックしてください。 (11.ダウンロードフォルダを元に戻すことを忘れないでください)これで2つのフォルダがデータでいっぱいになりました。"files"ボタンを押したときにスクリプトがクラッシュした(うまくいけばしなかった)、または "error saving"メッセージがdevtoolsに表示された場合、ファイルを難読化していたときにパースエラーがあり、生のバージョンこれは単なる解析上の問題であり、スクリプトを修正することで解決できますが、このシナリオでchromeがすべての応答を元に戻すことができるとは思いません。生データにはhttpヘッダー情報が含まれていることに注意してください。また、元のデータを回復するために他の人に送信する場合は注意してください。1つの大きな問題は解凍です - 私がオンラインで見つけたランダムなgunzip jsライブラリを使っています、それは完璧ではないかもしれません(それはうまくいくはずですが)。このライブラリがクラッシュしたか問題がある場合は、jxg.decompress()行をコメントアウトしてデータをgzip形式で保存し、ローカルで再展開できるかどうかを確認してください。もう1つの問題は、ダウンロードフォルダの全文をbase64文字列として表現しようとしているため、ダウンロードフォルダを開くとchromeが動作しなくなることです。それらのダウンロードで 'x'を押すとそれを防ぐことができます。これはスラッシュを^(キャレット)文字として保存し、他のすべての(windows)禁止文字をファイル名の "#"に置き換えて、保存ファイル名の完全なurlをキャプチャすることに注意してください。パブリックドメイン、所有権はありません。意のままに強化します。数時間(3-4時間)で構築されました(コードはひどいです)。私のlinuxラップトップでのみテストされています。バグがあるかもしれません:dまた、stack exchangeチームがこの20kb +の投稿を受け入れたことに敬意を表します。私は「リンクを投稿しない」ということを極端にすることにしました。とは言っても、誰でもこのスクリプトを実行することを歓迎します(そして非常にうまくいけばそれを改善してください!)// cc0 | november 2016 by i336_ (asmqb7@gmail.com) var ui = document.createelement('div'); document.body.appendchild(ui); var iframe = document.createelement('iframe') document.body.appendchild(iframe); var dl = document.createelement('a'); document.body.appendchild(dl); var list = document.queryselector('table'); var len = list.children0].childelementcount; var save_raw, dl_raw, dl_files, status, search, entries, donecount, url, next, save_errors = ""; ui.innerhtml = '<div style="position: fixed; text-align: center; padding: 0px 20px 20px 20px; top: 20px; left: 20px; background: #cf0">' + '<h2 id="status">type a string</h2>' + '<div><input id="search" /></div><br>' + '<button style="display: none" id="dl-files">download as files</button><br><br>' + '<button style="display: none" id="dl-raw">download raw data</button>' + '</div>'; status = document.queryselector('#status').innerhtml; search = document.queryselector('#search'); dl_files = document.queryselector('#dl-files'); dl_files.onclick = function() { document.queryselector('#dl-files').style.fontweight = 'bold'; dl_files.disabled = dl_raw.disabled = 1; donecount = 1; save_raw = 0; next = len - 1; findnext(); } dl_raw = document.queryselector('#dl-raw'); dl_raw.onclick = function() { document.queryselector('#dl-raw').style.fontweight = 'bold'; dl_files.disabled = dl_raw.disabled = 1; donecount = 1; save_raw = 1; next = len - 1; findnext(); } document.queryselector('#search').oninput = function() { url = search.value; if (url.length == 0) { setstatus('empty string doesn\'t work'); return; } entries = 0; for (i = 0; i < len; i++) { if (list.children[0].children[i].children[0].children[0].href.indexof(url) > -1) entries++; } if (entries > 0) { setstatus(entries + ' entry(s)!'); dl_files.style.display = dl_raw.style.display = 'inline-block'; } else { setstatus('no data :\'('); } } function setstatus(text) { document.queryselector('#status').innerhtml = text; } function wait() { console.log('waiting'); var dosave = 0; try { if (frames[0].document.body.innerhtml.substr(-36) == '</pre><hr><pre></pre><table></table>') dosave = 1; } catch (e) { } if (dosave) { settimeout(save, 100); } else { settimeout(wait, 100); } } function parse(rawhtml) { var lines = math.ceil(rawhtml.length / 76); var str = ""; for (i = 0; i < lines; i++) { line = rawhtml.substr(10 + (76 * i), 47); for (j = 0; j < line.length; j += 3) { str += string.fromcharcode(parseint(line.substr(j, 2), 16)); } } if (str.substr(10, 8) == '1f 8b 08') { str = jxg.decompress(btoa(str)); } return str; } function save() { console.log('triggering download'); dl.download = iframe.src.substr(25).replace(/:\/\//, '___').replace(/\//g, '^').replace(/[\<\>\:\"\\\/\|\?\*]/, '#'); var dl_data = ""; var dosave = 0; if (save_raw) { dl.download = 'raw_' + dl.download; dl.href = 'data:text/plain;base64,' + btoa(frames[0].document.body.innerhtml); dosave = 1; } else { try { var dl_data = frames[0].document.queryselectorall('pre')[2].innertext; if (dl_data != "") { dl.href = 'data:text/plain;base64,' + btoa(parse(dl_data)); dosave = 1; } else { console.log('no data while saving: ' + iframe.src, e); save_errors += "error: no data while saving " + iframe.src + "\n"; } } catch (e) { console.log('frame load error while saving: ' + iframe.src, e); save_errors += "error: frame load error while saving " + iframe.src + "\n"; } } if (dosave == 1) { dl.click(); } frames[0].document.body.innerhtml = ""; donecount++; settimeout(findnext, 100); } function load(index) { console.log('loading ' + donecount + ' of ' + entries); setstatus('saving ' + donecount + '/' + entries); iframe.src = list.children[0].children[index].children[0].children[0].href; settimeout(wait, 100); } function findnext() { console.log('findnext'); s = -1; for (i = next; i > -1; i--) { if (list.children[0].children[i].children[0].children[0].href.indexof(url) > -1) { s = i; break; } } if (s != -1) { load(s); next = s - 1; } else { console.log('done!!'); if (save_errors != "") console.error(save_errors); save_errors = ""; setstatus((save_raw ? 'raw data' : 'files') + ' saved!'); dl_files.disabled = dl_raw.disabled = 0; document.queryselector('#dl-raw').style.fontweight = document.queryselector('#dl-files').style.fontweight = 'normal'; } } !function(){var e,r,n;!function(t){function o(e,r){return w.call(e,r)}function i(e,r){var n,t,o,i,u,a,c,f,s,l,p=r&&r.split("/"),h=k.map,d=h&&h["*"]||{};if(e&&"."===e.charat(0))if(r){for(p=p.slice(0,p.length-1),e=p.concat(e.split("/")),f=0;f<e.length;f+=1)if(l=e[f],"."===l)e.splice(f,1),f-=1;else if(".."===l){if(1===f&&(".."===e[2]||".."===e[0]))break;f>0&&(e.splice(f-1,2),f-=2)}e=e.join("/")}else 0===e.indexof("./")&&(e=e.substring(2));if((p||d)&&h){for(n=e.split("/"),f=n.length;f>0;f-=1){if(t=n.slice(0,f).join("/"),p)for(s=p.length;s>0;s-=1)if(o=h[p.slice(0,s).join("/")],o&&(o=o[t])){i=o,u=f;break}if(i)break;!a&&d&&d[t]&&(a=d[t],c=f)}!i&&a&&(i=a,u=c),i&&(n.splice(0,u,i),e=n.join("/"))}return e}function u(e,r){return function(){return h.apply(t,c.call(arguments,0).concat([e,r]))}}function a(e){return function(r){return i(r,e)}}function c(e){return function(r){b[e]=r}}function f(e){if(o(m,e)){var r=m[e];delete m[e],y[e]=!0,p.apply(t,r)}if(!o(b,e)&&!o(y,e))throw new error("no "+e);return b[e]}function s(e){var r,n=e?e.indexof("!"):-1;return n>-1&&(r=e.substring(0,n),e=e.substring(n+1,e.length)),[r,e]}function l(e){return function(){return k&&k.config&&k.config[e]||{}}}var p,h,d,g,b={},m={},k={},y={},w=object.prototype.hasownproperty,c=[].slice;d=function(e,r){var n,t=s(e),o=t[0];return e=t[1],o&&(o=i(o,r),n=f(o)),o?e=n&&n.normalize?n.normalize(e,a(r)):i(e,r):(e=i(e,r),t=s(e),o=t[0],e=t[1],o&&(n=f(o))),{f:o?o+"!"+e:e,n:e,pr:o,p:n}},g={require:function(e){return u(e)},exports:function(e){var r=b[e];return"undefined"!=typeof r?r:b[e]={}},module:function(e){return{id:e,uri:"",exports:b[e],config:l(e)}}},p=function(e,r,n,i){var a,s,l,p,h,k,w=[];if(i=i||e,"function"==typeof n){for(r=!r.length&&n.length?["require","exports","module"]:r,h=0;h<r.length;h+=1)if(p=d(r[h],i),s=p.f,"require"===s)w[h]=g.require(e);else if("exports"===s)w[h]=g.exports(e),k=!0;else if("module"===s)a=w[h]=g.module(e);else if(o(b,s)||o(m,s)||o(y,s))w[h]=f(s);else{if(!p.p)throw new error(e+" missing "+s);p.p.load(p.n,u(i,!0),c(s),{}),w[h]=b[s]}l=n.apply(b[e],w),e&&(a&&a.exports!==t&&a.exports!==b[e]?b[e]=a.exports:l===t&&k||(b[e]=l))}else e&&(b[e]=n)},e=r=h=function(e,r,n,o,i){return"string"==typeof e?g[e]?g[e:f(d(e,r).f):(e.splice||(k=e,r.splice?(e=r,r=n,n=null):e=t),r=r||function(){},"function"==typeof n&&(n=o,o=i),o?p(t,e,r,n):settimeout(function(){p(t,e,r,n)},4),h)},h.config=function(e){return k=e,k.deps&&h(k.deps,k.callback),h},n=function(e,r,n){r.splice||(n=r,r=[]),o(b,e)||o(m,e)||(m[e]=[e,r,n])},n.amd={jquery:!0}}(),n("../node_modules/almond/almond",function(){}),n("jxg",[],function(){var e={};return"object"!=typeof jxg||jxg.extend||(e=jxg),e.extend=function(e,r,n,t){var o,i;n=n||!1,t=t||!1;for(o in r)(!n||n&&r.hasownproperty(o))&&(i=t?o.tolowercase():o,e[i]=r[o])},e.extend(e,{boards:{},readers:{},elements:{},registerelement:function(e,r){e=e.tolowercase(),this.elements[e]=r},registerreader:function(e,r){var n,t;for(n=0;n<r.length;n++)t=r[n].tolowercase(),"function"!=typeof this.readers[t]&&(this.readers[t]=e)},shortcut:function(e,r){return function(){return e[r].apply(this,arguments)}},getref:function(e,r){return e.select(r)},getreference:function(e,r){return e.select(r)},debugint:function(){var e,r;for(e=0;e<arguments.length;e++)r=arguments[e],"object"==typeof window&&window.console&&console.log?console.log(r):"object"==typeof document&&document.getelementbyid("debug")&&(document.getelementbyid("debug").innerhtml+=r+"<br/>")},debugwst:function(){var r=new error;e.debugint.apply(this,arguments),r&&r.stack&&(e.debugint("stacktrace"),e.debugint(r.stack.split("\n").slice(1).join("\n")))},debugline:function(){var r=new error;e.debugint.apply(this,arguments),r&&r.stack&&e.debugint("called from",r.stack.split("\n").slice(2,3).join("\n"))},debug:function(){e.debugint.apply(this,arguments)}}),e}),n("utils/zip",["jxg"],function(e){var r=[0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,8,136,72,200,40,168,104,232,24,152,88,216,56,184,120,248,4,132,68,196,36,164,100,228,20,148,84,212,52,180,116,244,12,140,76,204,44,172,108,236,28,156,92,220,60,188,124,252,2,130,66,194,34,162,98,226,18,146,82,210,50,178,114,242,10,138,74,202,42,170,106,234,26,154,90,218,58,186,122,250,6,134,70,198,38,166,102,230,22,150,86,214,54,182,118,246,14,142,78,206,46,174,110,238,30,158,94,222,62,190,126,254,1,129,65,193,33,161,97,225,17,145,81,209,49,177,113,241,9,137,73,201,41,169,105,233,25,153,89,217,57,185,121,249,5,133,69,197,37,165,101,229,21,149,85,213,53,181,117,245,13,141,77,205,45,173,109,237,29,157,93,221,61,189,125,253,3,131,67,195,35,163,99,227,19,147,83,211,51,179,115,243,11,139,75,203,43,171,107,235,27,155,91,219,59,187,123,251,7,135,71,199,39,167,103,231,23,151,87,215,55,183,119,247,15,143,79,207,47,175,111,239,31,159,95,223,63,191,127,255],n=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],t=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,99,99],o=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],i=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],u=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],a=256;return e.util=e.util||{},e.util.unzip=function(c){function f(){return r+=8,o>x?c[x++]:-1}function s(){b=1}function l(){var e;try{return r++,e=1&b,b>>=1,0===b&&(b=f(),e=1&b,b=128|b>>1),e}catch(r){throw r}}function p(e){var n=0,t=e;try{for(;t--;)n=n<<1|l();e&&(n=r[n]>>8-e)}catch(o){throw o}return n}function h(){j=0}function d(e){a++,g[j++]=e,z.push(string.fromcharcode(e)),32768===j&&(j=0)}function g(){this.b0=0,this.b1=0,this.jump=null,this.jumppos=-1}function b(){for(;;){if(m[h]>=x)return-1;if(u[m[h]]===h)return m[h]++;m[h]++}}function m(){var e,r=p[f];if(17===h)return-1;if(f++,h++,e=b(),e>=0)r.b0=e;else if(r.b0=32768,m())return-1;if(e=b(),e>=0)r.b1=e,r.jump=null;else if(r.b1=32768,r.jump=p[f],r.jumppos=f,m())return-1;return h--,0}function k(e,r,n){var t;for(p=e,f=0,u=n,x=r,t=0;17>t;t++)m[t]=0;return h=0,m()?-1:0}function y(e){for(var r,n,t,o=0,i=e[o];;)if(t=l()){if(!(32768&i.b1))return i.b1;for(i=i.jump,r=e.length,n=0;r>n;n++)if(e[n]===i){o=n;break}}else{if(!(32768&i.b0))return i.b0;o++,i=e[o]}}function w(){var a,c,b,m,w,c,v,a,j,u,x,s,z,i,e,l,o;do if(a=l(),b=p(2),0===b)for(s(),u=f(),u|=f()<<8,s=f(),s|=f()<<8,65535&(u^~s)&&e.debug("blocklen checksum mismatch\n");u--;)c=f(),d(c);else if(1===b)for(;;)if(w=r[p(7)]>>1,w>23?(w=w<<1|l(),w>199?(w-=128,w=w<<1|l()):(w-=48,w>143&&(w+=136))):w+=256,256>w)d(w);else{if(256===w)break;for(w-=257,j=p(t[w])+n[w],w=r[p(5)]>>3,i[w]>8?(x=p(8),x|=p(i[w]-8)<<8):x=p(i[w]),x+=o[w],w=0;j>w;w++)c=g[32767&j-x],d(c)}else if(2===b){for(v=new array(320),i=257+p(5),e=1+p(5),l=4+p(4),w=0;19>w;w++)v[w]=0;for(w=0;l>w;w++)v[u[w]]=p(3);for(j=q.length,m=0;j>m;m++)q[m]=new g;if(k(q,19,v,0))return h(),1;for(z=i+e,m=0,o=-1;z>m;)if(o++,w=y(q),16>w)v[m++]=w;else if(16===w){if(w=3+p(2),m+w>z)return h(),1;for(c=m?v[m-1]:0;w--;)v[m++]=c}else{if(w=17===w?3+p(3):11+p(7),m+w>z)return h(),1;for(;w--;)v[m++]=0}for(j=t.length,m=0;j>m;m++)t[m]=new g;if(k(t,i,v,0))return h(),1;for(j=t.length,m=0;j>m;m++)q[m]=new g;for(a=[],m=i;m<v.length;m++)a[m-i]=v[m];if(k(q,e,a,0))return h(),1;for(;;)if(w=y(t),w>=256){if(w-=256,0===w)break;for(w-=1,j=p(t[w])+n[w],w=y(q),i[w]>8?(x=p(8),x|=p(i[w]-8)<<8):x=p(i[w]),x+=o[w];j--;)c=g[32767&j-x],d(c)}else d(w)}while(!a);return h(),s(),0}function c(){var e,r,n,t,o,i,u,c,s=[];try{if(z=[],l=!1,s[0]=f(),s[1]=f(),120===s[0]&&218===s[1]&&(w(),e[i]=[z.join(""),"geonext.gxt"],i++),31===s[0]&&139===s[1]&&(s(),e[i]=[z.join(""),"file"],i++),80===s[0]&&75===s[1]&&(l=!0,s[2]=f(),s[3]=f(),3===s[2]&&4===s[3])){for(s[0]=f(),s[1]=f(),v=f(),v|=f()<<8,c=f(),c|=f()<<8,f(),f(),f(),f(),u=f(),u|=f()<<8,u|=f()<<16,u|=f()<<24,i=f(),i|=f()<<8,i|=f()<<16,i|=f()<<24,o=f(),o|=f()<<8,o|=f()<<16,o|=f()<<24,t=f(),t|=f()<<8,n=f(),n|=f()<<8,e=0,n=[];t--;)r=f(),"/"===r|":"===r?e=0:a-1>e&&(n[e++]=string.fromcharcode(r));for(j||(j=n),e=0;n>e;)r=f(),e++;a=0,8===c&&(w(),e[i]=new array(2),e[i][0]=z.join(""),e[i][1]=n.join(""),i++),s()}}catch(l){throw l}}var v,a,j,u,x,s,z=[],i=0,e=[],g=new array(32768),j=0,l=!1,o=c.length,x=0,b=1,r=0,t=new array(288),q=new array(32),f=0,p=null,h=(new array(64),new array(64),0),m=new array(17),n=[];m[0]=0,s=function(){var e,r,n,t,o,i,u=[];if(8&v&&(u[0]=f(),u[1]=f(),u[2]=f(),u[3]=f(),80===u[0]&&75===u[1]&&7===u[2]&&8===u[3]?(e=f(),e|=f()<<8,e|=f()<<16,e|=f()<<24):e=u[0]|u[1]<<8|u[2]<<16|u[3]<<24,r=f(),r|=f()<<8,r|=f()<<16,r|=f()<<24,n=f(),n|=f()<<8,n|=f()<<16,n|=f()<<24),l&&c(),u[0]=f(),8===u[0]){if(v=f(),f(),f(),f(),f(),f(),t=f(),4&v)for(u[0]=f(),u[2]=f(),h=u[0]+256*u[1],o=0;h>o;o++)f();if(8&v)for(o=0,n=[],i=f();i;)("7"===i||":"===i)&&(o=0),a-1>o&&(n[o++]=i),i=f();if(16&v)for(i=f();i;)i=f();2&v&&(f(),f()),w(),e=f(),e|=f()<<8,e|=f()<<16,e|=f()<<24,n=f(),n|=f()<<8,n|=f()<<16,n|=f()<<24,l&&c()}},e.util.unzip.prototype.unzipfile=function(e){var r;for(this.unzip(),r=0;r<e.length;r++)if(e[r][1]===e)return e[r][0];return""},e.util.unzip.prototype.unzip=function(){return c(),e}},e.util}),n("utils/encoding",["jxg"],function(e){var r=0,n=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,10,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,11,6,6,6,5,8,8,8,8,8,8,8,8,8,8,8,0,12,24,36,60,96,84,12,12,12,48,72,12,12,12,12,12,12,12,12,12,12,12,12,12,0,12,12,12,12,12,0,12,0,12,12,12,24,12,12,12,12,12,24,12,24,12,12,12,12,12,12,12,12,12,24,12,12,12,12,12,24,12,12,12,12,12,12,12,24,12,12,12,12,12,12,12,12,12,36,12,36,12,12,12,36,12,12,12,12,12,36,12,36,12,12,12,36,12,12,12,12,12,12,12,12,12,12];return e.util=e.util||{},e.util.utf8={encode:function(e){var r,n,t="",o=e.length;if(e=e.replace(/\r\n/g,"\n"),"function"==typeof unescape&&"function"==typeof encodeuricomponent)return unescape(encodeuricomponent(e));for(r=0;o>r;r++)n=e.charcodeat(r),128>n?t+=string.fromcharcode(n):n>127&&2048>n?(t+=string.fromcharcode(192|n>>6),t+=string.fromcharcode(128|63&n)):(t+=string.fromcharcode(224|n>>12),t+=string.fromcharcode(128|63&n>>6),t+=string.fromcharcode(128|63&n));return t},decode:function(e){var t,o,i,u=0,a=0,c=r,f=[],s=e.length,l=[];for(t=0;s>t;t++)o=e.charcodeat(t),i=n[o],a=c!==r?63&o|a<<6:255>>i&o,c=n[256+c+i],c===r&&(a>65535?f.push(55232+(a>>10),56320+(1023&a)):f.push(a),u++,0===u%1e4&&(l.push(string.fromcharcode.apply(null,f)),f=[]));return l.push(string.fromcharcode.apply(null,f)),l.join("")},asciicharcodeat:function(e,r){var n=e.charcodeat(r);if(n>255)switch(n){case 8364:n=128;break;case 8218:n=130;break;case 402:n=131;break;case 8222:n=132;break;case 8230:n=133;break;case 8224:n=134;break;case 8225:n=135;break;case 710:n=136;break;case 8240:n=137;break;case 352:n=138;break;case 8249:n=139;break;case 338:n=140;break;case 381:n=142;break;case 8216:n=145;break;case 8217:n=146;break;case 8220:n=147;break;case 8221:n=148;break;case 8226:n=149;break;case 8211:n=150;break;case 8212:n=151;break;case 732:n=152;break;case 8482:n=153;break;case 353:n=154;break;case 8250:n=155;break;case 339:n=156;break;case 382:n=158;break;case 376:n=159}return n}},e.util.utf8}),n("utils/base64",["jxg","utils/encoding"],function(e,r){function n(e,r){return 255&e.charcodeat(r)}function t(e,r){var n=o.indexof(e.charat(r));if(-1===n)throw new error("jsxgraph/utils/base64: can't decode string (invalid character).");return n}var o="abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789+/",i="=";return e.util=e.util||{},e.util.base64={encode:function(e){var t,u,a,c,f,s=[];for(f=r.encode(e),a=f.length,c=a%3,t=0;a-c>t;t+=3)u=n(f,t)<<16|n(f,t+1)<<8|n(f,t+2),s.push(o.charat(u>>18),o.charat(63&u>>12),o.charat(63&u>>6),o.charat(63&u));switch(c){case 1:u=n(f,a-1),s.push(o.charat(u>>2),o.charat(63&u<<4),i,i);break;case 2:u=n(f,a-2)<<8|n(f,a-1),s.push(o.charat(u>>10),o.charat(63&u>>4),o.charat(63&u<<2),i)}return s.join("")},decode:function(e,n){var o,u,a,c,f,s,l=[],p=[];if(o=e.replace(/[^a-za-z0-9\+\/=]/g,""),a=o.length,0!==a%4)throw new error("jsxgraph/utils/base64: can't decode string (invalid input length).");for(o.charat(a-1)===i&&(c=1,o.charat(a-2)===i&&(c=2),a-=4),u=0;a>u;u+=4)f=t(o,u)<<18|t(o,u+1)<<12|t(o,u+2)<<6|t(o,u+3),p.push(f>>16,255&f>>8,255&f),0===u%1e4&&(l.push(string.fromcharcode.apply(null,p)),p=[]);switch(c){case 1:f=t(o,a)<<12|t(o,a+1)<<6|t(o,a+2),p.push(f>>10,255&f>>2);break;case 2:f=t(o,u)<<6|t(o,u+1),p.push(f>>4)}return l.push(string.fromcharcode.apply(null,p)),s=l.join(""),n&&(s=r.decode(s)),s},decodeasarray:function(e){var r,n=this.decode(e),t=[],o=n.length;for(r=0;o>r;r++)t[r]=n.charcodeat(r);return t}},e.util.base64}),n("../build/compressor.deps.js",["jxg","utils/zip","utils/base64"],function(e,r,n){return e.decompress=function(e){return unescape(new r.unzip(n.decodeasarray(e)).unzip()[0][0])},e}),window.jxg=r("../build/compressor.deps.js")}(); console.log('ready'); // if you can see this you've copied the whole thing