DIR : /home/kozerus/public_html/index_tm_orig.html
/home/kozerus/public_html
<html>
<head>
<title>index.htm 20180603_1400</title>
<!--
<title>index.html 20180603_0600</title>
<title>index_links.html 20180602_0100</title>
-->
<style>
body{ background-color:slategrey; }
</style>
<style id="style_thumbnail" >
.thumbnail {
position: relative;
float: left;
padding: 5px;
/*z-index: 0;*/
}
.thumbnail:hover {
background-color: #e9e9e2;
/*z-index: 50;*/
color: #335500;
text-decoration: none;
}
/*CSS for enlarged image*/
.thumbnail span {
position: absolute;
background-color: #e5e5e5;
padding: 5px;
/*left: -1000px;*/
border: 1px solid #666;
visibility: hidden;
color: black;
text-decoration: none;
}
/*CSS for enlarged image*/
.thumbnail span img {
border-width: 0px;
/*padding: 2px;*/
}
/*CSS for enlarged image on hover*/
.thumbnail:hover span {
visibility: visible;
width: 200px;
top: 5px; /* use IF IE6 style to correct IE6 positions of larger image relative to thumb */
left: 300px;/*position where enlarged image should offset horizontally */
}
/*THUMBNAIL2 - thumbnail2 has border and border on hover*/
.thumbnail2 {
position: relative;
float: left;
padding: 5px;
/*z-index: 0;*/
}
.thumbnail2:hover {
background-color: #e9e9e2;
/*z-index: 50;*/
color: #335500;
text-decoration: none;
}
.thumbnail2 span { /*CSS for enlarged image*/
position: absolute;
background-color: #e5e5e5;
padding: 5px;
/*left: -1000px;*/
border: 1px solid #666;
visibility: hidden;
color: black;
text-decoration: none;
}
/*CSS for enlarged image*/
.thumbnail2 span img { border-width: 0px;}
/*CSS for enlarged image on hover*/
.thumbnail2:hover span {
visibility: visible; width: 208px;
top: 5px; /* use IF IE6 style to correct IE6 positions of larger image relative to thumb */
left: 300px;/*position where enlarged image should offset horizontally */
}
a.thumbnail2 img { text-decoration:none; z-index: 50; }
/*if same attribute for all 4 states, then declare here in a.thumbnail2*/
a.thumbnail2 img:link { border: 2px solid #e9e9e2; background: transparent; }
a.thumbnail2 img:visited { border: 2px solid #e9e9e2; background : transparent; }
a.thumbnail2 img:hover { border: 2px solid #f00; background : transparent; }
a.thumbnail2 img:active { border: 2px solid #e9e9e2; background : transparent; }
a.thumbnail2 img { border: 2px solid #e9e9e2; }
</style>
<style id="style_buttons" >
body { text-align: center; background-color: "slategrey"; color:"white"; }
button {
// visibility: hidden;
// background: rgba(7, 99, 53, .1);
background: transparent;
// border: 3px solid rgba(7, 99, 53, 1);
border: 3px solid slategrey;
border-radius: 5px;
// color: rgba(7, 99, 53, 1);
color: slategrey;
cursor: pointer;
line-height: 40px;
font-size: 20px;
outline: none;
padding: 0 20px;
transition: all .3s;
}
button:hover {
// background: rgba(7, 99, 53, 1);
background: darkgreyslate;
// background: yellow;
// background: white;
// color: rgba(255,255,255,1);
color: white;
}
p {font-size: 20px; font-weight: bold;
</style>
<style id="style_input" >
body { text-align: center; background-color: "slategrey"; color:"white"; }
input {
// visibility: hidden;
// background: rgba(7, 99, 53, .1);
background: transparent;
// border: 3px solid rgba(7, 99, 53, 1);
border: 3px solid slategrey;
border-radius: 5px;
// color: rgba(7, 99, 53, 1);
color: slategrey;
cursor: pointer;
line-height: 40px;
font-size: 10px;
outline: none;
padding: 0 20px;
transition: all .3s;
}
button:hover {
// background: rgba(7, 99, 53, 1);
background: darkgreyslate;
// background: yellow;
// background: white;
// color: rgba(255,255,255,1);
color: white;
}
p {font-size: 10px; font-weight: bold;
</style>
<style type="text/css"><!--
#drop {
width:200px;
height:150px;
margin:3px auto;
background:#eddaa8;
font-size:16px;
}
#drop #sw { text-decoration:underline; cursor:pointer; }
#drag {
width:450px;
height:180px;
margin:12px auto;
border:1px solid silver;
font-size:16px;
}
#drag .drg { margin:10px 12px; }
#drag div.drg {
width:150px;
height:50px;
background:#07da08;
border:2px solid blue;
}
--></style>
<script type="text/javascript"><!--
$(document).ready(function() {
// sets the draggable
$('#drag .drg').draggable({
cursor: 'move', // sets the cursor apperance
revert: 'valid'
});
// sets droppable
$('#drop').droppable({
drop: function(event, ui) {
// after the draggable is droped, hides it with a hide() effect
ui.draggable.hide(1000);
}
});
// when the "#sw" element (inside the "#drop") is clicked
// show the items with class "drg", contained in "#drag"
$('#drop #sw').click(function(){
// $('#drag .drg').slideDown(1000);
var url = "https://ka6//ko_center/ko_center.php?q=jqui/dragdrop1/"
$(location).attr('href',url);
});
});
--></script>
</head>
<body>
<script id="script_load_liks" >
var ko_links = new Array();
var svc_links = new Array();
var srv_links = new Array();
function load_svc_links() {
svc_links[0]="./index_av.html|./imgs/links/index_av.png|index_av|./imgs/btn/kob.png";
svc_links[1]="./index_bb.html|./imgs/links/index_bb.png|index_bb|./imgs/btn/kob.png";
svc_links[2]="./index_dd.html|./imgs/links/index_dd.png|index_dd|./imgs/btn/kob.png";
svc_links[3]="./index_sl.html|./imgs/links/index_sl.png|index_sl|./imgs/btn/kob.png";
svc_links[4]="./index_tl.html|./imgs/links/index_tl.png|index_tl|./imgs/btn/kob.png";
svc_links[5]="./index_tm.html|./imgs/links/index_tm.png|index_tm|./imgs/btn/kob.png";
svc_links[6]="./index_yt.html|./imgs/links/index_yt.png|index_yt|./imgs/btn/kob.png";
svc_links[7]="./index_zm.html|./imgs/links/index_zm.png|index_zm|./imgs/btn/kob.png";
return( svc_links );
}
function load_srv_links() {
srv_links[0]="ko0.us/index.html|./imgs/btn/koeyeb.png|ko0us|./imgs/btn/kob.png";
srv_links[1]="ko1.us/index.html|./imgs/btn/koeye.png|ko1us|./imgs/btn/kop1234.png";
srv_links[2]="ko2.us/index.html|./imgs/btn/koeyew.png|ko2us|./imgs/btn/kow.png";
srv_links[3]="konet.org/index.html|./imgs/btn/ko.png|konet-org|./imgs/btn/kib.png";
srv_links[4]="iperms.com/index.html|./imgs/links/iperms.png|iperms-com|./imgs/btn/kop34.png";
srv_links[5]="kassil.com/index.html|./imgs/links/kassil.png|kassil-com|./imgs/btn/kop12.png";
return( srv_links );
}
function load_ko_links() {
var j=0;
ko_links[j++]="./jkwii/blackboard.html|./imgs/links/blackboard.png|blackboard|./imgs/btn/koeye.png";
ko_links[j++]="./jkwii/js/threejs/examples/index.html|./imgs/links/index_js3d.png|index_js3d|./imgs/btn/koeye.png";
ko_links[j++]="./ko/svc/js/stemkoskijs/Three.js/index.html|./imgs/links/index_js3d-stemkoski.png|index_js3d-stemkoski|./imgs/btn/koeye.png";
ko_links[j++]="./jkwii/js/gojs/index.html|./imgs/links/index_jsgo.png|index_jsgo|./imgs/btn/koeye.png";
ko_links[j++]="./index_jsdk.html|./imgs/links/index_jsdk.png|index_jsdk|./imgs/btn/koeye.png";
ko_links[j++]="./jkwii/koh5_globe/koh5_globe.html|./imgs/links/koh5_globe.png|koh5_globe|./imgs/btn/koeye.png";
ko_links[j++]="./jkwii/aud/keybd/index.html|./imgs/links/index_jskb.png|index_jskb|./imgs/btn/koeye.png";
ko_links[j++]="./svc/kokbdm/index.html|./imgs/links/index_jskb-dm.png|index_jskb-dm|./imgs/btn/koeye.png";
ko_links[j++]="./svc/kokbdms/index.html|./imgs/links/index_jskb-dms.png|index_jskb-dms|./imgs/btn/koeye.png";
ko_links[j++]="./piano.html|./imgs/links/index_piano.png|index_piano|./imgs/btn/koeye.png";
ko_links[j++]="./jkwii/aud/piano_uri/koh5_piano_uri.html|./imgs/links/index_jskb-uri.png|index_jskb_uri|./imgs/btn/koeye.png";
ko_links[j++]="./ko/svc/js/stemkoskijs/index.html|./imgs/links/index_js3d-stemkoski.png|index_js3d-stemkoski|./imgs/btn/koeye.png";
ko_links[j++]="./ko/svc/aud/mrcoles/koh5_mrcoles.html|./imgs/links/mrcoles.png|mrcoles|./imgs/btn/koeye.png";
ko_links[j++]="http://effectgames.com/demos/canvascycle/|./imgs/links/index_effectgames.png|index_effectgames|./imgs/btn/koeye.png";
ko_links[j++]="https://www.leshylabs.com/apps/sfMaker/|./imgs/links/index_sfmaker.png|index_sfmaker|./imgs/btn/koeye.png";
ko_links[j++]="https://dragongoserver.net/|./imgs/links/index_dgs.png|index_dgs|./imgs/btn/koeye.png";
ko_links[j++]="./ko_center/ko_center.php|./imgs/links/ko_center.png|ko_center|./imgs/btn/kob.png";
ko_links[j++]="./ko_saic/ko_saic.php|./imgs/links/ko_saic.png|ko_saic|./imgs/btn/kob.png";
ko_links[j++]="./index_kt.html|./imgs/links/index_kt.png|index_kt|./imgs/btn/kob.png";
ko_links[j++]="./index_jtf.html|./imgs/links/index_jtf.png|index_jtf|./imgs/btn/kob.png";
ko_links[j++]="./index2big.html|./imgs/links/index2big.png|index2big|./imgs/btn/kob.png";
ko_links[j++]="./index2big.htm|./imgs/links/index2big_noel.png|index2big_noel|./imgs/btn/kob.png";
ko_links[j++]="./jkwii/whiteboard.html|./imgs/links/whiteboard.png|whiteboard|./imgs/btn/koeye.png";
return( ko_links );
}
function show_svc_links(mode) {
svc_links = load_svc_links();
htmout_svc_links = "";
htmout_svc_linkz = "";
for (i = 0; i < svc_links.length; i++) {
my_btnimg = "./imgs/btn/kib.png";
my_href = svc_links[i].split("|")[0];
my_popimg = svc_links[i].split("|")[1];
my_alt = svc_links[i].split("|")[2];
// htmout_svc_linkz += '<div class="drag" name="'+my_alt+'" >\n';
htmout_svc_linkz += '<a class="drag" href="' + my_href + '" target=_blank>"';
htmout_svc_linkz += '<img id="drg" src="' + my_popimg + '" alt="' + my_alt + '" height=100></a>';
// htmout_svc_linkz += '</div >';
// htmout_svc_links += '<div class="drag" name="'+my_alt+'" >\n';
htmout_svc_links += '<a class="thumbnail" href="' + my_href + '" target=_blank>"';
htmout_svc_links += '<img class="drag" id="drg" src="' + my_btnimg + '" alt="' + my_alt + '" width=25px height=14px border=0>';
htmout_svc_links += '<span><img src="' + my_popimg + '" alt="' + my_alt + '"></span></a>';
// htmout_svc_links += '</div >';
}
if( mode === 'pop' ) {
htmout_svc_links += "<br><br>\n";
var div_svc_links = document.getElementById('div_svc_links');
div_svc_links.insertAdjacentHTML('beforeend', htmout_svc_links);
return( htmout_svc_links );
}
htmout_svc_linkz += "<br><br>\n";
var div_svc_linkz = document.getElementById('div_svc_linkz');
div_svc_linkz.insertAdjacentHTML('beforeend', htmout_svc_linkz);
return( htmout_svc_linkz );
}
function show_ko_links(mode) {
ko_links = load_ko_links();
htmout_ko_links = "";
htmout_ko_linkz = "";
for (i = 0; i < ko_links.length; i++) {
my_btnimg = "./imgs/btn/koeye.png";
my_href = ko_links[i].split("|")[0];
my_popimg = ko_links[i].split("|")[1];
my_alt = ko_links[i].split("|")[2];
htmout_ko_linkz += '<a class="drag" href="' + my_href + '" target=_blank>"';
htmout_ko_linkz += '<img src="' + my_popimg + '" alt="' + my_alt + '" height=100></a>';
htmout_ko_links += '<a class="thumbnail" href="' + my_href + '" target=_blank>"';
htmout_ko_links += '<img src="' + my_btnimg + '" alt="' + my_alt + '" width=25px height=14px border=0>';
htmout_ko_links += '<span><img src="' + my_popimg + '" alt="' + my_alt + '"></span></a>';
}
if( mode === 'pop' ) {
htmout_ko_links += "<br><br>";
var div_ko_links = document.getElementById('div_ko_links');
div_ko_links.insertAdjacentHTML('beforeend', htmout_ko_links);
return( htmout_ko_links );
}
htmout_ko_linkz += "<br><br>";
var div_ko_linkz = document.getElementById('div_ko_linkz');
div_ko_linkz.insertAdjacentHTML('beforeend', htmout_ko_linkz);
return( htmout_ko_linkz );
}
function show_srv_links(mode) {
srv_links = load_srv_links();
htmout_srv_links = "";
htmout_srv_linkz = "";
for (i = 0; i < srv_links.length; i++) {
my_btnimg = "./imgs/btn/kiw.png";
my_href = srv_links[i].split("|")[0];
my_popimg = srv_links[i].split("|")[1];
my_alt = srv_links[i].split("|")[2];
htmout_srv_linkz += '<a class="drag" href="' + my_href + '" target=_blank>"';
htmout_srv_linkz += '<img src="' + my_popimg + '" alt="' + my_alt + '" height=100></a>';
htmout_srv_links += '<a class="thumbnail" href="' + my_href + '" target=_blank>"';
htmout_srv_links += '<img src="' + my_btnimg + '" alt="' + my_alt + '" width=25px height=14px border=0>';
htmout_srv_links += '<span><img src="' + my_popimg + '" alt="' + my_alt + '"></span></a>';
}
if( mode === 'pop' ) {
htmout_srv_links += "<br><br>\n"
var div_srv_links = document.getElementById('div_srv_links');
div_srv_links.insertAdjacentHTML('beforeend', htmout_srv_links);
return( htmout_srv_links );
}
htmout_srv_linkz += "<br><br>\n"
var div_srv_linkz = document.getElementById('div_srv_linkz');
div_srv_linkz.insertAdjacentHTML('beforeend', htmout_srv_linkz);
return( htmout_srv_linkz );
}
// document.write( htmout_svc_links );
// document.write( htmout_ko_links );
// document.write( htmout_srv_links );
// var div_ko_links = document.getElementById("div_ko_links");
// var div_ko_links_orig = div_ko_links.innerHTML;
// alert( "BUGS_500 div_ko_links_orig="+div_ko_links_orig );
// div_ko_links.innerHTML = "";
// div_ko_links.appendChild( htmout_ko_links);
// pqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpq
//
// getElementById("foo").insertAdjacentHTML
// <!-- beforebegin / before -->
// <p>
// <!-- afterbegin / prepend -->
// foo
// <!-- beforeend / append -->
// </p>
// <!-- afterend / after-->
//
// document.getElementById('foo').insertAdjacentHTML("beforebegin", "<hr>")
// $('#foo').before("<hr>")
// document.getElementById('foo').insertAdjacentHTML("afterend", "<hr>")
// $('#foo').append("<hr>")
// document.getElementById('foo').insertAdjacentHTML("beforeend", "<hr>")
// $('#foo').append("<hr>")
// document.getElementById('foo').insertAdjacentHTML("afterbegin", "<hr>")
// $('#foo').prepend("<hr>")
//
// var btn = document.getElementById('btn'); // The button itself with an ID of 'btn'
// var newButton = '<button>New button</button>'; // New button to be inserted
// btn.insertAdjacentHTML('afterend', newButton);
//
// bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdb
function show_all_links(mode) {
show_svc_links(mode);
show_ko_links(mode);
show_srv_links(mode);
}
</script>
<div id="div_links" >
<hr color=red>
<div id="div_svc_links" > </div>
<hr color=red>
<hr color=white>
<div id="div_ko_links" > </div>
<hr color=white>
<hr color=blue>
<div id="div_srv_links" > </div>
<hr color=blue>
</div>
<div id="div_linkz" >
<hr color=red>
<div id="div_svc_linkz" > </div>
<hr color=red>
<hr color=black>
<div id="div_ko_linkz" > </div>
<hr color=black>
<hr color=blue>
<div id="div_srv_linkz" > </div>
<hr color=blue>
</div>
<div id="div_cfaa" class=ko>
<!--
<style id=style_craa>
body {
// background: url("data:font/ttf;base64,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AEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgCjAFcAWABZAJYAWgChAFsAXABdAF4AXwBgAGEAYgBjAGQAZQBmAGcAaABpAGoAawBsAG0AbgBvAHAAcQByAHMAdAB1AHYAdwB4AHkAegB7AHwAfQB+AH8AgACBAIIAgwCEAIUAhgCHAIgAiQCKAIsAjACNAI4AjwCQAJEAkgCTAJQAlQCWAJcAmACZAJoAmwANAJwAnQCeAJ8AoAChAAAAAAAQAAAAqAkIBQABAQMCAwQFAwMEAgQCBQQCAwMDAwQDAgQCAgMEAwIGAwgFBAQEBAIEBAMGBQQEBQQCAwMEBgUEAwICAgQDBgQEAgQFAgQEAgYEAwQEBAICAwMGBQQDAwMFAgICBgYGBgYGCAgEBAQCAgIFBAQEBAQEAwMDAwMEBAQEBAQHBgQEBAICAgQDAwMDAwMDAwMDCAYCAgICAgIBAgIEAgICBgUBBQUAAAoJBQABAQMCBAUGAwMFAgQCBQUCBAMDBAUDAgQCAgMEAwMHAwkGBAQFBAIEBAMHBgUEBgQCBAQEBwUEAwICAwUDBwUEAgUGAgQEAgYFAwUFBQICAwMGBQQDAwMGAwIDBwcHBwcHCQkEBAQCAgIGBQUFBQUFBAQEBAMFBQUFBQUIBwQEBAICAgUDAwMDAwQDAwMDCAcDAwICAgIBAgIEAgICBwUBBQUAAAsKBgACAgQCBAUGAwMFAgQCBgUDBAQEBAUEAwUDAgMEAwMIAwoGBQUFBQIEBQMHBgUEBgUDBAQECAYFAwIDAwUDCAUFAwUGAgQEAgcFBAUFBQMDAwMHBgUDBAQGAwIDCAgICAgICQoFBQUCAgIGBQUFBQUFBAQEBAMFBQUFBQUJCAUFBQICAgUEBAQEBAQDAwMDCQgDAwICAwIBAgIEAgICBwYBBgYAAAwLBgACAgQDBAYHBAQGAgUDBgYDBQQEBAUEAwUDAwQFBAMIAwsHBQUFBQIFBQQIBwYFBwUDBQUFCAYFAwMDAwYDCQYFAwUHAgUFAggGBAYGBgMDBAQHBgUDBAQHAwMDCAgICAgICgsFBQUCAgIHBgYGBgYGBQUFBQMGBgYGBgYJCQUFBQICAgYEBAQEBAQEBAQECggDAwMDAwIBAwMFAwMDCAYBBgYAAA0MBwACAgQDBQYHBAQGAwUDBwYDBQQFBQYEAwYDAwQFBAMJBAwIBgYGBQMFBgQJBwYFCAUDBQUFCQcFBAMDAwYECQYGAwYIAwUFAggGBQYGBgMDBAQIBwYEBAQHAwMDCQkJCQkJCwwGBgYDAwMHBgYGBgYGBQUFBQQGBgYGBgYKCQYGBgMDAwYFBQUFBQUEBAQECwkDAwMDAwIBAwMFAwMDCQcCBwcAAA4NBwACAgUDBQcIBAQHAwUDBwcDBQUFBQYFAwYDAwQFBAQKBAwIBgYGBgMGBgQJCAcGCAYDBQUGCggGBAMDBAcECgcGAwYIAwYGAwkHBQcHBwMDBAQJBwYEBQUIBAMECgoKCgoKDA0GBgYDAwMIBwcHBwcHBQUFBQQHBwcHBwcLCgYGBgMDAwcFBQUFBQUEBAQEDAoEBAMDAwMBAwMGAwMDCQcCBwcAAA8OCAACAgUDBgcIBQUHAwYDCAcDBgUFBQcFBAcEAwUGBQQLBA0JBwcHBgMGBwUKCAcGCQYEBgYGCggGBAMEBAcECwcHBAcJAwYGAwkHBQcHBwQDBQUJCAYEBQUJBAMECwsLCwsLDQ4HBwcDAwMIBwcHBwcHBgYGBgQHBwcHBwcMCwcHBwMDAwcFBQUFBQUFBQUFDQoEBAMDBAMCAwMGAwMDCggCCAgAABAPCAACAgUEBggJBQUIAwYECAgEBgUGBgcFBAcEBAUGBQQLBQ4JBwcHBwMGBwULCQgGCQcEBgYGCwkHBAQEBAgFCwgHBAcJAwcGAwoHBggIBwQEBQUKCAcEBQUJBAMECwsLCwsLDg8HBwcDAwMJCAgICAgIBgYGBgUICAgICAgNCwcHBwMDAwcGBgYGBgYFBQUFDgsEBAQEBAMCAwMGBAQECwgCCAgAABEQCQACAgYEBggJBQUIAwcECQgEBwYGBggGBAcEBAUHBQUMBQ8KBwcIBwMHCAULCggHCgcEBgYHDAkHBQQEBAgFDAgHBAgKAwcHAwsIBggICAQEBQUKCQcFBgYKBAQFDAwMDAwMDxAHCAcDAwMKCAgICAgIBgYGBgUICAgICAgNDAcHBwMDAwgGBgYGBgYFBQUFDgwFBQQEBAMCBAQHBAQECwkCCQkAABIQCQADAwYEBwkKBgYJBAcECQkEBwYGBggGBAgEBAYHBgUNBRAKCAgICAQHCAUMCgkHCwcEBwcHDQoIBQQEBQkFDQkIBAgKBAcHAwsIBgkJCAQEBQYLCQgFBgYKBQQFDQ0NDQ0NDxAICAgEBAQKCQkJCQkJBwcHBwUJCQkJCQkODQgICAQEBAgGBgYGBgYFBQUFDwwFBQQEBAMCBAQHBAQEDAkCCQkAABMRCgADAwYEBwkLBgYJBAcECgkEBwYHBwkGBAgFBAYHBgUNBhELCAgJCAQICAYNCwkICwgEBwcIDQoIBQQFBQkFDQkIBAkLBAgIBAwJBwkJCQQEBgYMCggFBgYLBQQFDQ0NDQ0NEBEICAgEBAQLCQkJCQkJBwcHBwUJCQkJCQkPDQgICAQEBAkHBwcHBwcGBgYGEA0FBQQEBQQCBAQIBAQEDQoCCgoAABQSCgADAwcEBwoLBgYKBAgECgoFCAcHBwkHBQkFBAYIBgUOBhIMCQkJCAQICQYNCwoIDAgFCAgIDgsIBgUFBQoGDgoJBQkMBAgIBA0JBwoKCQUFBgYMCgkGBwcLBQQFDg4ODg4OERIJCQkEBAQLCgoKCgoKCAgICAYKCgoKCgoQDgkJCQQEBAkHBwcHBwcGBgYGEQ4FBQUFBQQCBAQIBQUEDgoCCgoAABUTCwADAwcFCAoMBgYKBAgFCwoFCAcHBwoHBQkFBQYIBgYPBhMMCQkJCQQJCQYODAoIDAkFCAgIDwsJBgUFBQoGDwoJBQoMBAkIBA0KBwoKCgUFBgcNCwkGBwcMBQQGDw8PDw8PEhMJCQkEBAQMCgoKCgoKCAgICAYKCgoKCgoRDwkJCQQEBAoHBwcHBwcGBgYGEg4GBgUFBQQCBAQIBQUFDgsDCwsAABYUCwADAwcFCAsMBwcLBAkFCwoFCAcICAoHBQoFBQcJBwYPBhQNCgoKCQQJCgcPDAoJDQkFCAgJDwwJBgUFBgsGEAsKBQoNBAkJBA4KCAsLCgUFBwcOCwkGBwcNBgUGDw8PDw8PExQKCgoEBAQMCgoKCgoLCAgICAYLCwsLCwsREAoKCgQEBAoICAgICAgHBwcHEw8GBgUFBQQCBQUJBQUFDwsDCwsAABcVDAADAwcFCQsNBwcLBQkFDAsFCQcICAsIBQoGBQcJBwYQBxQNCgoKCgUJCgcPDQsJDQoFCQkJEAwKBgUGBgsHEAsKBQoNBQkJBA4LCAsLCwUFBwcODAoGBwgNBgUGEBAQEBAQFBUKCgoFBQUNCwsLCwsLCQkJCQcLCwsLCwsSEAoKCgUFBQsICAgICAgHBwcHFBAGBgUFBgQCBQUJBQUFEAwDDAwAABgWDAADAwgFCQwNBwcMBQkFDAsGCQgICAsIBgoGBQcJBwYRBxUOCgoLCgUKCwcQDgsKDgoGCQkKEQ0KBwUGBgsHEQwKBgsOBQoKBA8LCAwMCwYGBwgPDAoHCAgOBgUGERERERERFRYKCwoFBQUOCwsLCwsMCQkJCQcLCwsLCwsTEQoKCgUFBQsICAgICAgHBwcHFBEGBgUFBgQCBQUKBQUFEAwDDAwAAAABAV0BkAAFAAICvAKKAAAAjwK8AooAAAHFADIBAwAAAAAEAAAAAAAAAAAAAAMAAAAAAAAAAAAAAABNQUNSAEAAICIZAyH/OQAAAyEAxwAAAAEAAAAAAAAAAQAAgAAAAACLAT8AAGAAAbQCdVlva2ttb2trICAgICAgICD/////N////llPS1IwMAAAAAAAAAABAAAAAQAAmJpL9V8PPPUAAAPoAAAAALfnFZIAAAAAt+cVkv+2/zkDawMhAAAAAwACAAEAAAAAAAEAAAMh/zkAAAOQ/7b/uANrAAEAAAAAAAAAAAAAAAAAAACkAAEAAACkAJgADQAAAAAAAgAIAEAACgAAAF0AvgABAAE=");
background-color: darkslategrey;
color: white;
font-size:62.5%;
// font-family: yokkmokkOT;
font-size: 38pt;
}
</style>
<script id=script_htm>
if( url.pathname == "/index.htm" ) {
body { background-color: slategrey;
color: white;
}
}
</script>
<script id=script_cfaa>
</script>
-->
<script id="script_cfaa">
var text_cfaa =
`
pqpqpqpqpqpqpqpqpqpq Warning pqpqpqpqpqpqpqpqpqpq<br>
<br>
This site may be protected under the
<br>
<br>
<b>CFAA</b>
<br>
Computer Fraud and Abuse Act
<br>
<br>
your attemped access has been logged
<br>
repeated attemps by unauthorized guests will be reported
<br>
<br>
By continuing You are acknowledging
<br>
you are fully authorized and
<br>
understand the responsibilites to access the content on the site
<br>
<br>
This page must not be removed
<br>
bdbdbdbdbdbdbdbdbdbd Warning bdbdbdbdbdbdbdbdbdbd
<br>
<br>
unauthoriced users should
<br>
consider browsing elsewhere:
<hr color=black>
<hr color=ivory>
<hr color=red>
<hr color=blue>
<hr color=ebony>
<hr color=white>
<a href=duckduckgo.com > <img src="ok.png" alt="duckduckgo" height=10 border=0></a>
     
<a href=bing.com > <img src="ok.png" alt="bing" height=10 border=0></a>
     
<a href=google.com > <img src="ok.png" alt="google" height=10 border=0></a>
     
<a href=yahoo.com > <img src="ok.png" alt="yahoo" height=10 border=0></a>
     
<a href=https://mars.jpl.nasa.gov/msl/multimedia/raw target=_blank>
<img src="ok.png" border=0 height=10>
</a>
     
<a href=http://youtube.com target=_blank>
<img src="ok.png" border=0 height=10>
</a>
<hr color=white>
<hr color=ebony>
<hr color=blue>
<hr color=red>
<hr color=ivory>
<hr color=black>
<div id=warn2 class=ko>
<p id=p_warn2 class=ko>
<hr color=black>
<hr color=white>
<hr color=red>
If you are seeing this page
<br>
you are probably unauthorized
<br>
you should <b>NOT</b> continue
<br>
accessing site content here may be
<br>
protected under <b>CFAA</b>
<hr color=red>
<hr color=white>
<hr color=black>
</p>
authorized sites are available from bluehost
<a href=http://bluehost.com/track/konet/ko2.us target=_blank>
<img src=./imgs/bh/bh_anim.gif height=30 border=0 alt=bluehost.com affiliate></a>
<div id=kobh_offer class=ko>
bluehost offers
50 gb space
999 gb bandwidth
6 domains on 1 account
and more for only $6.95/month
</div>
</div>
<script id="script_url">
var url = document.createElement("a");
url.href=location.href
var output = "output"
url.pathname = url.pathname.replace(/(^\/?)/,"/");
// alert(location.href)
// alert(url.protocol)
// alert(url.hostname)
// alert(url.pathname)
// alert(url.search)
// alert(url.hash)
if( url.search == "" ) {document.write( text_cfaa );}
if( url.search == "?q=cfaa" ) {document.write( text_cfaa ); }
</script>
</div>
<!--
<iframe id="myframe" src="./svc/kokbdm/index.html" width="1000" height="500"
frameborder="0" scrolling="yes"></iframe>
-->
<hr color=red><hr color=black><hr color=white>
<button type="button" onclick="show_all_links('pop')">show_all_links</button>
<!-- <button type="button" id="upload" value="Upload" onclick="Upload()">upload</button> -->
<hr color=red><hr color=white><hr color=blue>
<button type="button" onclick="show_svc_links('pop')">show_svc_links</button>
<button type="button" onclick="show_ko_links('pop')">show_ko_links</button>
<button type="button" onclick="show_srv_links('pop')">show_srv_links</button>
<hr color=blue><hr color=white><hr color=black>
<img src="./imgs/btn/kib.png" height="50" size="150" alt="koeye" onclick="show_svc_links()">
<img src="./imgs/btn/ko.png" height="50" size="150" alt="koeyeb" onclick="show_ko_links()">
<img src="./imgs/btn/kiw.png" height="50" size="150" alt="koeyew" onclick="show_srv_links()">
<hr color=blue><hr color=white><hr color=red>
<div id="div_neave_wobble" >
<iframe frameborder='0' height='150' marginheight='0' marginwidth='0' scrolling='no'
src='./index_wobble.html'
style='margin-bottom: 20px; box-shadow: 0 2px 2px rgba(0,0,0,0.3)' width='100%'>
</iframe>
</div>
<div id="div_files" >
<output id="zonelist"></output>
<div id="dropzone">
dropzone
<div id="div_canvas" style="position:relative; width:400px; height:200px background:white">
<canvas id="canvas_dropzone" style="z-index: 1;
position:absolute;
left:0px;
top:0px;
" height="100px" width="200" background-color="white" color="white">
WARN_1387 unauthorized access has been logged
</canvas>
</div>
<script name="script_fileselect">
function handleFileSelect(evt) {
evt.stopPropagation();
evt.preventDefault();
var files = evt.dataTransfer.files; // FileList object.
// files is a FileList of File objects. List some properties.
var output = [];
for (var i = 0, f; f = files[i]; i++) {
output.push('<li><strong>', escape(f.name), '</strong> (', f.type || 'n/a', ') - ',
f.size, ' bytes, last modified: ',
f.lastModifiedDate ? f.lastModifiedDate.toLocaleDateString() : 'n/a',
'</li>');
}
document.getElementById('zonelist').innerHTML = '<ul>' + output.join('') + '</ul>';
}
function handleDragOver(evt) {
evt.stopPropagation();
evt.preventDefault();
evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.
}
// Setup the dnd listeners.
var dropZone = document.getElementById('dropzone');
dropZone.addEventListener('dragover', handleDragOver, false);
dropZone.addEventListener('drop', handleFileSelect, false);
</script>
<hr><hr><hr>
<style>
.thumb {
height: 75px;
border: 1px solid #000;
margin: 10px 5px 0 0;
}
</style>
<input id="files" name="files[]" multiple="" type="file">
<output id="zonelist"></output>
<script>
function handleFileSelect(evt) {
var files = evt.target.files; // FileList object
// files is a FileList of File objects. List some properties.
var output = [];
for (var i = 0, f; f = files[i]; i++) {
output.push('<li><strong>', escape(f.name), '</strong> (', f.type || 'n/a', ') - ',
f.size, ' bytes, last modified: ',
f.lastModifiedDate ? f.lastModifiedDate.toLocaleDateString() : 'n/a',
'</li>');
}
document.getElementById('zonelist').innerHTML = '<ul>' + output.join('') + '</ul>';
}
document.getElementById('files').addEventListener('change', handleFileSelect, false);
</script>
<div id="div_files2" hidden >
<h1>bugs_506_files</h1>
<input id="files" name="files[]" multiple="" type="file">
<output id="zonelist"></output>
</div>
<script>
function handleFileSelect(evt) {
var files = evt.target.files; // FileList object
// Loop through the FileList and render image files as thumbnails.
for (var i = 0, f; f = files[i]; i++) {
// Only process image files.
if (!f.type.match('image.*')) { continue; }
var reader = new FileReader();
// Closure to capture the file information.
reader.onload = (function(theFile) {
return function(e) {
// Render thumbnail.
var span = document.createElement('span');
span.innerHTML = ['<img class="thumb" src="', e.target.result,
'" title="', escape(theFile.name), '"/>'].join('');
document.getElementById('zonelist').insertBefore(span, null);
};
})(f);
// Read in the image file as a data URL.
reader.readAsDataURL(f);
}
}
document.getElementById('files').addEventListener('change', handleFileSelect, false);
</script>
<hr color=black><hr color=black><hr color=black>
<style>
#byte_content {
margin: 5px 0;
max-height: 100px;
overflow-y: auto;
overflow-x: hidden;
}
#byte_range { margin-top: 5px; }
</style>
<script id="script_previewfile">
function previewfile(file) {
if (tests.filereader === true && acceptedTypes[file.type] === true) {
var reader = new FileReader();
reader.onload = function (event) {
var image = new Image();
image.src = event.target.result;
image.width = 250; // a fake resize
holder.appendChild(image);
};
reader.readAsDataURL(file);
}
else {
holder.innerHTML +=
'<p>done: koupload'
+ file.name
+ ' '
+ (file.size ? (file.size/1024|0) + 'K' : '');
console.log(file);
}
}
function readfiles(files) {
debugger;
var formData = tests.formdata ? new FormData() : null;
for (var i = 0; i < files.length; i++) {
if (tests.formdata) formData.append('file', files[i]);
previewfile(files[i]);
}
// now post a new XHR request
if (tests.formdata) {
var xhr = new XMLHttpRequest();
xhr.open('POST', 'http://ka6/ko/bin/php/ko.php?ko=ajax,upload,filenames,phpi,ok');
// xhr.open('POST', 'ka6/ko/bin/php/index.php?q=upload,filenames');
xhr.onload = function() {
progress.value = progress.innerHTML = 100;
};
if (tests.progress) {
xhr.upload.onprogress = function (event) {
if (event.lengthComputable) {
var complete = (event.loaded / event.total * 100 | 0);
progress.value = progress.innerHTML = complete;
}
}
}
xhr.send(formData);
}
}
if (tests.dnd) {
holder.ondragover = function () { this.className = 'hover'; return false; };
holder.ondragend = function () { this.className = ''; return false; };
holder.ondrop = function (e) {
this.className = '';
e.preventDefault();
readfiles(e.dataTransfer.files);
}
}
else {
fileupload.className = 'hidden';
fileupload.querySelector('input').onchange = function () {
readfiles(this.files);
};
}
</script>
<script id="script_myfilework>
funtion myfilework( j, file ) {
alert( j+" file="+file );
}
</script>
<script id="script_upload_input">>
var upload = document.getElementsByTagName('input')[0],
holder2 = document.getElementById('holder2'),
state = document.getElementById('status');
if (typeof window.FileReader === 'undefined') {
state.className = 'fail';
}
else {
state.className = 'success';
state.innerHTML = 'File API & FileReader available';
}
upload.onchange = function (e) {
e.preventDefault();
var file = upload.files[0],
reader = new FileReader();
reader.onload = function (event) {
var img = new Image();
img.src = event.target.result;
// note: no onload required since we've got the dataurl...I think! :)
if (img.width > 560) { // holder width
img.width = 560;
}
holder2.innerHTML = '';
holder.appendChild(img);
};
reader.readAsDataURL(file);
return false;
};
// var formData = new FormData();
// formData.append("part_num", "123ABC");
// formData.append("part_price", 7.95);
// formData.append("part_image", somefile)
//
// var xhr = new XMLHttpRequest();
// xhr.open("POST", "http://ka6/ko/bin/php/ko.php?ko=ajax,upload/");
// xhr.send(formData);
</script>
<!-- <canvas color="darkslatgrey" height="100" width="400"></canvas> -->
<canvas color="darkslatgrey" height="100" width="400"></canvas>
<script>
var canvas = document.getElementsByTagName('canvas')[0],
ctx = null,
grad = null,
body = document.getElementsByTagName('body')[0],
color = 255;
color = lightblue;
if (canvas.getContext('2d')) {
ctx = canvas.getContext('2d');
ctx.clearRect(0, 0, 600, 600);
ctx.save();
// Create radial gradient
// grad = ctx.createRadialGradient(0,0,0,0,0,600);
// grad.addColorStop(0, '#000');
// grad.addColorStop(1, 'rgb(' + color + ', ' + color + ', ' + color + ')');
// assign gradients to fill
// ctx.fillStyle = grad;
ctx.fillstyle = "lightblue";
// draw 600x600 fill
ctx.fillRect(0,0,600,600);
ctx.save();
body.onmousemove = function (event) {
var width = window.innerWidth,
height = window.innerHeight,
x = event.clientX,
y = event.clientY,
rx = 600 * x / width,
ry = 600 * y / height;
var xc = ~~(256 * x / width);
var yc = ~~(256 * y / height);
grad = ctx.createRadialGradient(rx, ry, 0, rx, ry, 600);
grad.addColorStop(0, '#000');
grad.addColorStop(1, ['rgb(', xc, ', ', (255 - xc), ', ', yc, ')'].join(''));
// ctx.restore();
// ctx.fillStyle = grad;
ctx.fillstyle="lightblue";
ctx.fillRect(0,0,600,600);
// ctx.save();
};
}
</script>
<div id="div_csv">
<style type="text/css">
body {
font-family: Arial;
font-size: 10pt;
}
table {
border: 1px solid #ccc;
}
table th {
background-color: #F7F7F7;
color: #333;
font-weight: bold;
}
table th, table td {
padding: 5px;
border-color: #ccc;
}
</style>
<script type="text/javascript">
function Upload() {
var fileUpload = document.getElementById("fileUpload");
var regex = /^([a-zA-Z0-9\s_\\.\-:])+(.csv|.txt|.psv|.py|.htm|.html|.php)$/;
if (regex.test(fileUpload.value.toLowerCase())) {
if (typeof (FileReader) != "undefined") {
var reader = new FileReader();
reader.onload = function (e) {
var table = document.createElement("table");
var rows = e.target.result.split("\n");
for (var i = 0; i < rows.length; i++) {
var row = table.insertRow(-1);
// var cells = rows[i].split("|");
var cells = rows[i].split(",");
for (var j = 0; j < cells.length; j++) {
var cell = row.insertCell(-1);
cell.innerHTML = cells[j];
}
}
var csv2tbl = document.getElementById("csv2tbl");
csv2tbl.innerHTML = "";
csv2tbl.appendChild(table);
}
reader.readAsText(fileUpload.files[0]);
}
else {
alert("csv2tbl warn: unauthorized access noted");
}
}
else {
alert("csv2tbl fail: unsuppoted format");
}
}
</script>
<input id="fileUpload" type="file">
<!-- <input id="upload" value="Upload" onclick="Upload()" type="button"> -->
</div>
<div id="csv2tbl"> </div>
<!-- <button type="button" id="fileUpload" type="file" >select</button> -->
<button type="button" id="upload" value="Upload" onclick="Upload()">upload</button>
</div>
</div>
<div id="div_showhide" hidden>
<script id="script_showhide" >
function show_files() {
var div_files = document.getElementbyID("div_files");
div_files.show();
}
function hide_files() {
var div_files = document.getElementbyID("div_files");
div_files.hide();
}
</script>
<button type="button" id="show">show</button>
<button type="button" id="hide">hide</button>
<button type="show_files" id="show_files" onclick="show_files()">Show_files</button>
<button type="hide_files" id="hide_files" onclick="hide_files()">Hide_files</button>
<button type="show_neave_wobble" id="show_neave_wobble">Show_neave_wobble</button>
<button type="hide_neave_wobble" id="hide_neave_wobble">Hide_neave_wobble</button>
<!--
<button type="show_dd" id="show_dd">Show_dd</button>
<button type="hide_dd" id="hide_dd">Hide_dd</button>
<button type="show_bb" id="show_bb">Show_bb</button>
<button type="hide_bb" id="hide_bb">Hide_bb</button>
<button type="show_tl" id="show_tl">Show_tl</button>
<button type="hide_tl" id="hide_tl">Hide_tl</button>
<button type="show_colors" id="show_colors">Show_colors</button>
<button type="hide_colors" id="hide_colors">Hide_colors</button>
<button type="show_fonts" id="show_fonts">Show_fonts</button>
<button type="hide_fonts" id="hide_fonts">Hide_fonts</button>
<button type="show_alldivs" id="show_alldivs">Show_alldivs</button>
<button type="hide_alldivs" id="hide_alldivs">Hide_alldivs</button>
-->
</div>
<div id="item" > </div>
<script id="script_showhide">
$( "#show" ).click(function() {$('#item').show(); });
$( "#hide" ).click(function() {$('#item').hide();});
$( "#show_files" ).click(function() {$('#div_files').show(); });
$( "#hide_files" ).click(function() {$('#div_files').hide();});
$( "#show_neave_wobble" ).click(function() {$('#div_neave_wobble').show(); });
$( "#hide_neave_wobble" ).click(function() {$('#div_neave_wobble').hide();});
// $( "#show_dd" ).click(function() {$('#div_dd').show(); });
// $( "#hide_dd" ).click(function() {$('#div_dd').hide();});
// $( "#show_bb" ).click(function() {$('#div_bb').show(); });
// $( "#hide_bb" ).click(function() {$('#div_bb').hide();});
// $( "#show_tl" ).click(function() {$('#div_tl').show(); });
// $( "#hide_tl" ).click(function() {$('#div_tl').hide();});
// $( "#show_jkwii" ).click(function() {$('#div_jkwii').show(); });
// $( "#hide_jkwii" ).click(function() {$('#div_jkwii').hide();});
// $( "#show_colors" ).click(function() {$('#div_colors').show(); });
// $( "#hide_colors" ).click(function() {$('#div_colors').hide();});
// $( "#show_fonts" ).click(function() {$('#div_fonts').show(); });
// $( "#hide_fonts" ).click(function() {$('#div_fonts').hide();});
// $( "#show_alldivs" ).click(function() {$('#div_alldivs').show(); });
// $( "#hide_alldivs" ).click(function() {$('#div_alldivs').hide();});
</script>
</div>
<!-- <link rel="stylesheet" media="all" href="./terminal.css"> -->
<!--
<link rel="stylesheet" media="all" href="data:/text/plain;base64,QGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdJbmNvbnNvbGF0YSc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgc3JjOiBsb2NhbCgnSW5jb25zb2xhdGEnKSwgdXJsKCdJbmNvbnNvbGF0YS53b2ZmJykgZm9ybWF0KCd3b2ZmJyk7Cn0KCi8qQC13ZWJraXQta2V5ZnJhbWVzIHB1bHNlIHsKIDAlIHsKICBvcGFjaXR5OiAwOwogfQogMjUlIHsKICBvcGFjaXR5OiAwLjI7CiB9CiA1MCUgewogIG9wYWNpdHk6IDA7CiB9CiA3NSUgewogIG9wYWNpdHk6IDA7CiB9CiAxMDAlIHsKICAgb3BhY2l0eTogMC4yOwogfQp9CiovCi8qCkAtd2Via2l0LWtleWZyYW1lcyBmbGlja2VyIHsKICAwJSB7IG9wYWNpdHk6IDAuOTU7IH0KICAxMCUgeyBvcGFjaXR5OiAwLjk7IH0KICAyMCUgeyBvcGFjaXR5OiAwLjg1OyB9CiAgMzAlIHsgb3BhY2l0eTogMC45OyB9CiAgNDAlIHsgb3BhY2l0eTogMC45NTsgfQogIDUwJSB7IG9wYWNpdHk6IDAuOTsgfQogIDYwJSB7IG9wYWNpdHk6IDAuOTU7IH0KICA3MCUgeyBvcGFjaXR5OiAwLjkyOyB9CiAgODAlIHsgb3BhY2l0eTogMC44NTsgfQogIDkwJSB7IG9wYWNpdHk6IDAuOTI7IH0KICAxMDAlIHsgb3BhY2l0eTogMC45OyB9Cn0KKi8KQC13ZWJraXQta2V5ZnJhbWVzIGZsaWNrZXIgewogIDAlIHsgb3BhY2l0eTogMC43NTsgfQogIDEwJSB7IG9wYWNpdHk6IDAuNzsgfQogIDIwJSB7IG9wYWNpdHk6IDAuNjU7IH0KICAzMCUgeyBvcGFjaXR5OiAwLjc7IH0KICA0MCUgeyBvcGFjaXR5OiAwLjc1OyB9CiAgNTAlIHsgb3BhY2l0eTogMC42NTsgfQogIDYwJSB7IG9wYWNpdHk6IDAuNzU7IH0KICA3MCUgeyBvcGFjaXR5OiAwLjcyOyB9CiAgODAlIHsgb3BhY2l0eTogMC42NTsgfQogIDkwJSB7IG9wYWNpdHk6IDAuNzI7IH0KICAxMDAlIHsgb3BhY2l0eTogMC43OyB9Cn0KCjo6c2VsZWN0aW9uIHsKICBiYWNrZ3JvdW5kOiAjMDA4MEZGOwogIHRleHQtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7Cn0KaHRtbCwgYm9keSB7CiAgbWFyZ2luOiAwOwogIGhlaWdodDogMTAwJTsKfQpib2R5IHsKICBmb250LWZhbWlseTogSW5jb25zb2xhdGEsIG1vbm9zcGFjZTsKICBjb2xvcjogd2hpdGU7CiAgYmFja2dyb3VuZDogLXdlYmtpdC1yYWRpYWwtZ3JhZGllbnQoY2VudGVyIGNlbnRlciwgY29udGFpbiwgcmdiYSgwLDE1MCwwLDEpLCBibGFjaykgY2VudGVyIGNlbnRlciBuby1yZXBlYXQsIGJsYWNrOyAvKmNlbnRlciBjZW50ZXIgZm9yIHRoZSBncmFkaWVudCBzY3JvbGxzIHdpdGggdGhlIHBhZ2UgOigqLwogIC8qYmFja2dyb3VuZDogLXdlYmtpdC1yYWRpYWwtZ3JhZGllbnQoY2VudGVyIDc1JSwgY29udGFpbiwgcmdiYSgwLDc1LDAsMC44KSwgYmxhY2spIGNlbnRlciBjZW50ZXIgbm8tcmVwZWF0LCBibGFjazsqLwogIC13ZWJraXQtYmFja2dyb3VuZC1zaXplOiAxMTAlIDEwMCU7Cn0KLm9mZnNjcmVlbiB7CiAgYmFja2dyb3VuZDogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjMDAwLCAjMzMzKTsKfQoub2Zmc2NyZWVuICNjb250YWluZXIgewogIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC43KTsKICBoZWlnaHQ6IDEwMCU7CiAgcG9zaXRpb246IGZpeGVkOwogIHRleHQtc2hhZG93OiBub25lOwogIGJveC1zaGFkb3c6IDAgMCAxNXB4IGJsYWNrOwp9Ci5vZmZzY3JlZW4gI2NvbnRhaW5lciBvdXRwdXQgewogIG92ZXJmbG93LXg6IGhpZGRlbjsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgaGVpZ2h0OiAxMDBweDsKfQoub2Zmc2NyZWVuIC5pbnRlcmxhY2UgewogIGRpc3BsYXk6IG5vbmU7Cn0KI2NvbnRhaW5lciB7CiAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAxLjVzIGVhc2UtaW4tb3V0OwogIHdpZHRoOiAxMDAlOwogIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDsKICBib3gtc2l6aW5nOiBib3JkZXItYm94Owp9CgouZHJvcHBpbmcgewogIC8qYmFja2dyb3VuZDogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoCiAgICBib3R0b20sCiAgICByZ2IoMjA5LDE0NCwyMykgMTMlLAogICAgcmdiKDI1MSwxNzMsNTEpIDU3JSwKICAgIHJnYigyNTUsMjA4LDc3KSA3OSUKICApOyovCiAgYmFja2dyb3VuZDogLXdlYmtpdC1yYWRpYWwtZ3JhZGllbnQoY2VudGVyIGNlbnRlciwgY29udGFpbiwgcmdiYSgwLDE3NSwwLDEpLCBibGFjaykgY2VudGVyIGNlbnRlciBuby1yZXBlYXQ7CiAgLXdlYmtpdC1iYWNrZ3JvdW5kLXNpemU6IDEyNSUgMTI1JTsKfQovKgouY3J0IHsKICB6LWluZGV4OiA1MDsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDUwcHg7CiAgcG9zaXRpb246IGZpeGVkOwogIC8qbWFyZ2luOiAxNXB4IDMxcHggMHB4IDMycHg7CiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMTBweDsKICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMTBweDsKICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KHJhZGlhbCwgNTAlIDEwMDU3JSwgNDk5OSwgNTAlIDEwMDU1JSwgNTAwMCwgZnJvbSh0cmFuc3BhcmVudCksIHRvKGJsYWNrKSApIHRyYW5zcGFyZW50IG5vLXJlcGVhdCAxMCUgMTAwJTsKfQouY3J0LnRvcCB7CiAgdG9wOiAtMjBweDsKfQouY3J0LmJvdHRvbSB7CiAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOwogIGJvdHRvbTogLTIwcHg7Cn0qLwouY3J0IHsKICB6LWluZGV4OiA1MDsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDUwcHg7CiAgcG9zaXRpb246IGZpeGVkOwogIGJhY2tncm91bmQ6IGJsYWNrOwp9Ci5jcnQudG9wIHsKICB0b3A6IDA7Cn0KLmNydC5ib3R0b20gewogIGJvdHRvbTogMDsKICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7Cn0KLmh6IHsKICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBoejsKICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogMzBzOwogIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7Cn0KCi5mbGlja2VyIHsKICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmbGlja2VyOwogIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiAxczsKICAtd2Via2l0LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlOwogIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbi1vdXQ7Cn0KLmludGVybGFjZSB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIGxlZnQ6IDA7CiAgdG9wOiAwOwogIGJhY2tncm91bmQ6IHVybChpbnRlcmxhY2UucG5nKSB0b3AgbGVmdCByZXBlYXQsIHJnYmEoMjU1LDI1NSwyNTUsMC41KTsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7CiAgb3BhY2l0eTogMC4yOwogIHotaW5kZXg6IDEwOwogIHBvaW50ZXItZXZlbnRzOiBub25lOwogIC8qYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMTUwcHggNTBweDsKICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMTUwcHggNTBweDsKICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAxNTBweCA1MHB4OwogIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAxNTBweCA1MHB4OyovCn0KLmhpZGRlbiB7CiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9Ci5kaW0gPiAqIHsKICBvcGFjaXR5OiAwLjQ7Cn0KLmRpbSAuaGVscCB7CiAgb3BhY2l0eTogMTsKfQppZnJhbWUjZnNuIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgaGVpZ2h0OiAxMDAlOwogIHdpZHRoOiAxMDAlOwogIGJvcmRlcjogbm9uZTsKfQojY29udGFpbmVyIHsKICBwYWRkaW5nOiAxZW0gMS41ZW0gMWVtIDFlbTsKICB0ZXh0LXNoYWRvdzogMCAwIDVweCAjQzhDOEM4OwogIC8qb3ZlcmZsb3c6IGhpZGRlbjsKICB3aGl0ZS1zcGFjZTogbm93cmFwOyovCgogIC8qYm94LXNoYWRvdzogMTBweCA1cHggMjBweCByZ2JhKDI1NSwyNTUsMjU1LDAuMikgaW5zZXQsCiAgICAgICAgICAgICAgLTEwcHggLTVweCAyMHB4IHJnYmEoMjU1LDI1NSwyNTUsMC4yKSBpbnNldDsKICBib3JkZXItcmFkaXVzOiA1MHB4OwogIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsqLwp9CiNjb250YWluZXIgb3V0cHV0IHsKICBjbGVhcjogYm90aDsKICB3aWR0aDogMTAwJTsKfQojY29udGFpbmVyIG91dHB1dCBoMyB7CiAgbWFyZ2luOiAwOwp9CiNjb250YWluZXIgb3V0cHV0IHByZSB7CiAgbWFyZ2luOiAwOwp9CiNjb250YWluZXIgb3V0cHV0IHRleHRhcmVhIHsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDIwMHB4OwogIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC4xKTsKICBib3JkZXI6IG5vbmU7CiAgY29sb3I6IGluaGVyaXQ7CiAgZm9udDogaW5oZXJpdDsKICBvdXRsaW5lOiAwOwogIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgcGFkZGluZzogNXB4Owp9CiNjb250YWluZXIgb3V0cHV0IHRleHRhcmVhOjpzZWxlY3Rpb24gewogIGJhY2tncm91bmQ6IHJlZDsKfQojY29udGFpbmVyIG91dHB1dCB0ZXh0YXJlYTo6LXdlYmtpdC1zY3JvbGxiYXIgewogIHdpZHRoOiAxZXg7Cn0KI2NvbnRhaW5lciBvdXRwdXQgdGV4dGFyZWE6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICBib3JkZXItdG9wOiAxcHggc29saWQgI2ZmZjsKICBiYWNrZ3JvdW5kOiAjY2NjIC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHJnYigyNDAsIDI0MCwgMjQwKSwgcmdiKDIxMCwgMjEwLCAyMTApKTsKICBib3JkZXItcmFkaXVzOiAxZXg7CiAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC40KTsKfQouaW5wdXQtbGluZSB7CiAgZGlzcGxheTogLXdlYmtpdC1ib3g7CiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsOwogIC13ZWJraXQtYm94LWFsaWduOiBzdHJldGNoOwogIGRpc3BsYXk6IGJveDsKICBib3gtb3JpZW50OiBob3Jpem9udGFsOwogIGJveC1hbGlnbjogc3RyZXRjaDsKICBjbGVhcjogYm90aDsKfQouaW5wdXQtbGluZSA+IGRpdjpudGgtY2hpbGQoMikgewogIC13ZWJraXQtYm94LWZsZXg6IDE7CiAgYm94LWZsZXg6IDE7Cn0KLnByb21wdCB7CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICBjb2xvcjogI2ZmY2MwMDsgLypncmVlbjsqLwogIG1hcmdpbi1yaWdodDogN3B4OwogIGRpc3BsYXk6IC13ZWJraXQtYm94OwogIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjsKICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsOwogIGRpc3BsYXk6IGJveDsKICBib3gtcGFjazogY2VudGVyOwogIGJveC1vcmllbnQ6IHZlcnRpY2FsOwogIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KLmNtZGxpbmUgewogIG91dGxpbmU6IG5vbmU7CiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgbWFyZ2luOiAwOwogIHdpZHRoOiAxMDAlOwogIGZvbnQ6IGluaGVyaXQ7CiAgYm9yZGVyOiBub25lOwogIGNvbG9yOiBpbmhlcml0Owp9Ci5mb2xkZXIgewogIGNvbG9yOiAjZmZjYzAwOwp9Ci5scy1maWxlcyB7CiAgLypoZWlnaHQ6IDQ1cHg7Ki8KICAvKiBEZWZhdWx0LCBidXQgY2hhbmdlZCBieSBqcyBkZXBlbmRpbmcgb24gbGVuZ3RoIG9mIGZpbGVuYW1lICovCiAgLXdlYmtpdC1jb2x1bW4td2lkdGg6IDEwMHB4OwogIGNvbHVtbi13aWR0aDogMTAwcHg7Cn0KLmxzLWZpbGVzIHNwYW4gewogIGN1cnNvcjogcG9pbnRlcjsKfQoubHMtZmlsZXMgc3Bhbjpob3ZlciB7CiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cn0KYnV0dG9uIHsKICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgMCUgNDAlLCAwJSA3MCUsIGZyb20oI0Y5RjlGOSksIHRvKCNFM0UzRTMpKTsKICBib3JkZXI6IDFweCBzb2xpZCAjY2NjOwogIGJvcmRlci1yYWRpdXM6IDNweDsKICBjb2xvcjogYmxhY2s7CiAgcGFkZGluZzogNXB4IDhweDsKICBvdXRsaW5lOiBub25lOwogIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAtd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7CiAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgY3Vyc29yOiBwb2ludGVyOwp9CmJ1dHRvbjpub3QoW2Rpc2FibGVkXSk6aG92ZXIgewogIGJvcmRlci1jb2xvcjogI2ZmY2MwMDsKfQpidXR0b246bm90KFtkaXNhYmxlZF0pOmFjdGl2ZSB7CiAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIDAlIDQwJSwgMCUgNzAlLCBmcm9tKCNFM0UzRTMpLCB0bygjRjlGOUY5KSk7Cn0KYnV0dG9uW2Rpc2FibGVkXSB7CiAgY29sb3I6ICNjY2M7Cn0KLmhlbHAgewogIGZvbnQtZmFtaWx5OiAnRHJvaWQgU2FucycsIEFyaWFsLCBzYW5zLXNlcmlmOwogIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogIHBvc2l0aW9uOiBmaXhlZDsKICB0b3A6IDA7CiAgbGVmdDogMDsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7CiAgei1pbmRleDogMTAwOwogIGRpc3BsYXk6IC13ZWJraXQtYm94OwogIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7CiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyOwogIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7CiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICB1c2VyLXNlbGVjdDogbm9uZTsKICBmb250LXNpemU6IDEwcHQ7Cn0KLmhlbHAsCi5oZWxwID4gc2VjdGlvbiB7CiAgYm9yZGVyLXJhZGl1czogMTBweDsKfQouaGVscCA+IHNlY3Rpb24gewogIHBhZGRpbmc6IDEwcHg7CiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpOwogIC13ZWJraXQtYm94LXNoYWRvdzogM3B4IDNweCA1cHggcmdiYSgwLDAsMCwwLjYpOwogIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgY29sb3I6IHdoaXRlOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB3aWR0aDogNjEwcHg7Cn0KLmhlbHAgc2VjdGlvbiA+IGRpdjpmaXJzdC1jaGlsZCB7CiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMTBweDsKICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMTBweDsKfQouaGVscCBzZWN0aW9uID4gZGl2Omxhc3QtY2hpbGQgewogIHBhZGRpbmctdG9wOiAwOwogIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDEwcHg7CiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDEwcHg7Cn0KLmhlbHAgPiBzZWN0aW9uID4gZGl2IHsKICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDEpOwogIHBhZGRpbmc6IDIwcHg7Cn0KLmhlbHAgaDIgewogIHBhZGRpbmctYm90dG9tOiA4cHg7CiAgbWFyZ2luLXRvcDogMDsKICBtYXJnaW4tYm90dG9tOiAyNXB4OwogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZmZmOwogIGNvbG9yOiAjZmZjYzAwOwp9Ci5oZWxwIHAgc3Ryb25nIHsKICB3aWR0aDogNjBweDsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cn0KLmhlbHAgI2Nsb3NlIHsKICBib3JkZXItcmFkaXVzOiAyMHB4OwogIHBhZGRpbmc6IDJweCA2cHggMnB4IDdweDsKICBib3JkZXI6IDJweCBzb2xpZCAjZmZmOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICByaWdodDogMjBweDsKICB0b3A6IDIwcHg7CiAgY3Vyc29yOiBwb2ludGVyOwogIGZvbnQtc2l6ZTogOTAlOwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGxpbmUtaGVpZ2h0OiAxN3B4Owp9Ci5oZWxwICNjbG9zZTphY3RpdmUgewogIHJpZ2h0OiAxOXB4OwogIHRvcDogMjFweDsKfQouaGVscCAuc2hvcnRjdXRzIHsKICAtd2Via2l0LWNvbHVtbnM6IDI7CiAgY29sdW1uczogMjsKfQoKCi8qIFRoZW1lcyAqLwouY3JlYW0gewogIGNvbG9yOiBibGFjazsKICBiYWNrZ3JvdW5kOiAjZmZmZmYzOwp9Ci5jcmVhbSAuaW50ZXJsYWNlIHsKICBvcGFjaXR5OiAwLjE7Cn0KLmNyZWFtIC5wcm9tcHQgewogIGNvbG9yOiBwdXJwbGU7Cn0KLmNyZWFtIC5jbWRsaW5lIHsKICBjb2xvcjogYmxhY2s7Cn0K">
-->
<style id="style_terminal_css">
@font-face {
font-family: 'Inconsolata';
font-style: normal;
font-weight: normal;
src: local('Inconsolata'), url('Inconsolata.woff') format('woff');
}
/*@-webkit-keyframes pulse {
0% {
opacity: 0;
}
25% {
opacity: 0.2;
}
50% {
opacity: 0;
}
75% {
opacity: 0;
}
100% {
opacity: 0.2;
}
}
*/
/*
@-webkit-keyframes flicker {
0% { opacity: 0.95; }
10% { opacity: 0.9; }
20% { opacity: 0.85; }
30% { opacity: 0.9; }
40% { opacity: 0.95; }
50% { opacity: 0.9; }
60% { opacity: 0.95; }
70% { opacity: 0.92; }
80% { opacity: 0.85; }
90% { opacity: 0.92; }
100% { opacity: 0.9; }
}
*/
@-webkit-keyframes flicker {
0% { opacity: 0.75; }
10% { opacity: 0.7; }
20% { opacity: 0.65; }
30% { opacity: 0.7; }
40% { opacity: 0.75; }
50% { opacity: 0.65; }
60% { opacity: 0.75; }
70% { opacity: 0.72; }
80% { opacity: 0.65; }
90% { opacity: 0.72; }
100% { opacity: 0.7; }
}
::selection {
background: #0080FF;
text-shadow: none !important;
}
html, body {
margin: 0;
height: 100%;
}
body {
font-family: Inconsolata, monospace;
color: white;
// background: -webkit-radial-gradient(center center, contain, rgba(0,150,0,1), black) center center no-repeat, black; /*center center for the gradient scrolls with the page :(*/
background: slategrey;
/*background: -webkit-radial-gradient(center 75%, contain, rgba(0,75,0,0.8), black) center center no-repeat, black;*/
-webkit-background-size: 110% 100%;
}
.offscreen {
// background: -webkit-linear-gradient(top, #000, #333);
background: ivory;
}
.offscreen #container {
background: rgba(0,0,0,0.7);
height: 100%;
position: fixed;
text-shadow: none;
box-shadow: 0 0 15px slategrey;
}
.offscreen #container output {
overflow-x: hidden;
display: inline-block;
height: 100px;
}
.offscreen .interlace {
display: none;
}
#container {
-webkit-transition: -webkit-transform 1.5s ease-in-out;
width: 100%;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
.dropping {
/*background: -webkit-linear-gradient(
bottom,
rgb(209,144,23) 13%,
rgb(251,173,51) 57%,
rgb(255,208,77) 79%
);*/
background: -webkit-radial-gradient(center center, contain, rgba(0,175,0,1), black) center center no-repeat;
-webkit-background-size: 125% 125%;
}
/*
.crt {
z-index: 50;
width: 100%;
height: 50px;
position: fixed;
/*margin: 15px 31px 0px 32px;
border-bottom-left-radius: 10px;
border-bottom-right-radius: 10px;
background: -webkit-gradient(radial, 50% 10057%, 4999, 50% 10055%, 5000, from(transparent), to(black) ) transparent no-repeat 10% 100%;
}
.crt.top {
top: -20px;
}
.crt.bottom {
-webkit-transform: rotate(180deg);
bottom: -20px;
}*/
.crt {
z-index: 50;
width: 100%;
height: 50px;
position: fixed;
background: black;
}
.crt.top {
top: 0;
}
.crt.bottom {
bottom: 0;
-webkit-transform: rotate(180deg);
}
.hz {
-webkit-animation-name: hz;
-webkit-animation-duration: 30s;
-webkit-animation-iteration-count: infinite;
}
.flicker {
-webkit-animation-name: flicker;
-webkit-animation-duration: 1s;
-webkit-animation-iteration-count: infinite;
-webkit-animation-timing-function: ease-in-out;
}
.interlace {
position: absolute;
left: 0;
top: 0;
background: url(interlace.png) top left repeat, rgba(255,255,255,0.5);
width: 100%;
height: 100%;
opacity: 0.2;
z-index: 10;
pointer-events: none;
/*border-top-left-radius: 150px 50px;
border-top-right-radius: 150px 50px;
border-bottom-left-radius: 150px 50px;
border-bottom-right-radius: 150px 50px;*/
}
.hidden {
display: none !important;
}
.dim > * {
opacity: 0.4;
}
.dim .help {
opacity: 1;
}
iframe#fsn {
position: absolute;
height: 100%;
width: 100%;
border: none;
}
#container {
padding: 1em 1.5em 1em 1em;
text-shadow: 0 0 5px #C8C8C8;
/*overflow: hidden;
white-space: nowrap;*/
/*box-shadow: 10px 5px 20px rgba(255,255,255,0.2) inset,
-10px -5px 20px rgba(255,255,255,0.2) inset;
border-radius: 50px;
background: rgba(255, 255, 255, 0.1);*/
}
#container output {
clear: both;
width: 100%;
}
#container output h3 {
margin: 0;
}
#container output pre {
margin: 0;
}
#container output textarea {
width: 100%;
height: 200px;
background-color: rgba(255,255,255,0.1);
border: none;
color: inherit;
font: inherit;
outline: 0;
border-radius: 10px;
padding: 5px;
}
#container output textarea::selection {
background: red;
}
#container output textarea::-webkit-scrollbar {
width: 1ex;
}
#container output textarea::-webkit-scrollbar-thumb {
border-top: 1px solid #fff;
background: #ccc -webkit-linear-gradient(rgb(240, 240, 240), rgb(210, 210, 210));
border-radius: 1ex;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);
}
.input-line {
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
display: box;
box-orient: horizontal;
box-align: stretch;
clear: both;
}
.input-line > div:nth-child(2) {
-webkit-box-flex: 1;
box-flex: 1;
}
.prompt {
white-space: nowrap;
color: #ffcc00; /*green;*/
margin-right: 7px;
display: -webkit-box;
-webkit-box-pack: center;
-webkit-box-orient: vertical;
display: box;
box-pack: center;
box-orient: vertical;
-webkit-user-select: none;
user-select: none;
}
.cmdline {
outline: none;
background-color: transparent;
margin: 0;
width: 100%;
font: inherit;
border: none;
color: inherit;
}
.folder {
color: #ffcc00;
}
.ls-files {
/*height: 45px;*/
/* Default, but changed by js depending on length of filename */
-webkit-column-width: 100px;
column-width: 100px;
}
.ls-files span {
cursor: pointer;
}
.ls-files span:hover {
text-decoration: underline;
}
button {
background: -webkit-gradient(linear, 0% 40%, 0% 70%, from(#F9F9F9), to(#E3E3E3));
border: 1px solid #ccc;
border-radius: 3px;
color: black;
padding: 5px 8px;
outline: none;
white-space: nowrap;
vertical-align: middle;
-webkit-user-select:none;
user-select: none;
cursor: pointer;
}
button:not([disabled]):hover {
border-color: #ffcc00;
}
button:not([disabled]):active {
background: -webkit-gradient(linear, 0% 40%, 0% 70%, from(#E3E3E3), to(#F9F9F9));
}
button[disabled] {
color: #ccc;
}
.help {
font-family: 'Droid Sans', Arial, sans-serif;
-webkit-font-smoothing: antialiased;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 100;
display: -webkit-box;
-webkit-box-align: center;
-webkit-box-pack: center;
-webkit-box-orient: vertical;
-webkit-user-select: none;
user-select: none;
font-size: 10pt;
}
.help,
.help > section {
border-radius: 10px;
}
.help > section {
padding: 10px;
background: rgba(255, 255, 255, 0.3);
-webkit-box-shadow: 3px 3px 5px rgba(0,0,0,0.6);
border-radius: 10px;
color: white;
position: relative;
width: 610px;
}
.help section > div:first-child {
border-top-left-radius: 10px;
border-top-right-radius: 10px;
}
.help section > div:last-child {
padding-top: 0;
border-bottom-left-radius: 10px;
border-bottom-right-radius: 10px;
}
.help > section > div {
background: rgba(0, 0, 0, 1);
padding: 20px;
}
.help h2 {
padding-bottom: 8px;
margin-top: 0;
margin-bottom: 25px;
border-bottom: 1px solid #fff;
color: #ffcc00;
}
.help p strong {
width: 60px;
display: inline-block;
}
.help #close {
border-radius: 20px;
padding: 2px 6px 2px 7px;
border: 2px solid #fff;
position: absolute;
right: 20px;
top: 20px;
cursor: pointer;
font-size: 90%;
font-weight: bold;
line-height: 17px;
}
.help #close:active {
right: 19px;
top: 21px;
}
.help .shortcuts {
-webkit-columns: 2;
columns: 2;
}
/* Themes */
.cream {
color: black;
background: #fffff3;
}
.cream .interlace {
opacity: 0.1;
}
.cream .prompt {
color: purple;
}
.cream .cmdline {
color: black;
}
</style>
<!-- <link rel="chrome-application-definition" href="./manifest.json"> -->
<!--
<link rel="chrome-application-definition" href="data:/text/plain;base64,ewogICJuYW1lIjogIkhUTUw1IFRlcm1pbmFsIiwKICAiZGVzY3JpcHRpb24iOiAiQ29tbWFuZC1saW5lIHRlcm1pbmFsIHNoZWxsIHJ1bm5pbmcgb24gdG9wIG9mIEhUTUw1IEFQSXMiLAogICJ2ZXJzaW9uIjogIjEuMC4wIiwKICAiaWNvbnMiOiB7CiAgICAiMTYiOiAidGVybWluYWwtaWNvbi5wbmciLAogICAgIjEyOCI6ICJ0ZXJtaW5hbC1pY29uLnBuZyIKICB9LAogICJtaW5pbXVtX2Nocm9tZV92ZXJzaW9uIjogIjExIiwKICAvKiJ1cmxzIjogWwogICAgIio6Ly9sb2NhbGhvc3QvIgogIF0sKi8KICAibGF1bmNoX3VybCI6ICJ0ZXJtaW5hbC5odG1sIiwKICAicGVybWlzc2lvbnMiOiBbCiAgICAidW5saW1pdGVkU3RvcmFnZSIKICBdCn0K">
-->
<style id="style_manifest_json">
{
"name": "HTML5 Terminal",
"description": "Command-line terminal shell running on top of HTML5 APIs",
"version": "1.0.0",
"icons": {
"16": "terminal-icon.png",
"128": "terminal-icon.png"
},
"minimum_chrome_version": "11",
/*"urls": [
"*://localhost/"
],*/
"launch_url": "terminal.html",
"permissions": [
"unlimitedStorage"
]
}
</style>
<!--
</head>
<body>
-->
<aside class="help hidden">
<section>
<div>
<span onclick="toggleHelp()" id="close">x</span>
<h2>Keyboard shortcuts</h2>
<div class="shortcuts">
<p><strong><ctrl> + s</strong> : Toggle CRT monitor flicker effect</p>
<p><strong><esc></strong> : toggle this help menu</p>
</div>
</div>
<!--
<div>
<h2>What is this?</h2>
<p>A Command-line terminal/shell running on top of HTML5 APIs.</p>
<p>By: Eric Bidelman <ericbidelman@chromium.org></p>
</div>
-->
</section>
</aside>
<!--<div class="crt top"></div>-->
<div class="interlace"></div>
<div id="container"></div>
<!--<div class="crt bottom"></div>-->
<!-- <script src="./terminal.js"></script> -->
<!--
<script src="data:/text/plain;base64,LyoKQ29weXJpZ2h0IDIwMTEgR29vZ2xlIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgpBdXRob3I6IEVyaWMgQmlkZWxtYW4gKGVyaWNiaWRlbG1hbkBjaHJvbWl1bS5vcmcpCiovCgp2YXIgdXRpbCA9IHV0aWwgfHwge307CnV0aWwudG9BcnJheSA9IGZ1bmN0aW9uKGxpc3QpIHsKICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobGlzdCB8fCBbXSwgMCk7Cn07CgovLyBDcm9zcy1icm93c2VyIGltcGwgdG8gZ2V0IGRvY3VtZW50J3MgaGVpZ2h0Lgp1dGlsLmdldERvY0hlaWdodCA9IGZ1bmN0aW9uKCkgewogIHZhciBkID0gZG9jdW1lbnQ7CiAgcmV0dXJuIE1hdGgubWF4KAogICAgICBNYXRoLm1heChkLmJvZHkuc2Nyb2xsSGVpZ2h0LCBkLmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQpLAogICAgICBNYXRoLm1heChkLmJvZHkub2Zmc2V0SGVpZ2h0LCBkLmRvY3VtZW50RWxlbWVudC5vZmZzZXRIZWlnaHQpLAogICAgICBNYXRoLm1heChkLmJvZHkuY2xpZW50SGVpZ2h0LCBkLmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpCiAgKTsKfTsKCgovLyBUT0RPKGVyaWNiaWRlbG1hbik6IGFkZCBmYWxsYmFjayB0byBodG1sNSBhdWRpby4KZnVuY3Rpb24gU291bmQob3B0X2xvb3ApIHsKICB2YXIgc2VsZl8gPSB0aGlzOwogIHZhciBjb250ZXh0XyA9IG51bGw7CiAgdmFyIHNvdXJjZV8gPSBudWxsOwogIHZhciBsb29wXyA9IG9wdF9sb29wIHx8IGZhbHNlOwoKICB3aW5kb3cuQXVkaW9Db250ZXh0ID0gd2luZG93LkF1ZGlvQ29udGV4dCB8fCB3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0OwogIGlmICh3aW5kb3cuQXVkaW9Db250ZXh0KSB7CiAgICBjb250ZXh0XyA9IG5ldyB3aW5kb3cuQXVkaW9Db250ZXh0KCk7CiAgfQoKICB0aGlzLmxvYWQgPSBmdW5jdGlvbih1cmwsIG1peFRvTW9ubywgb3B0X2NhbGxiYWNrKSB7CiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CiAgICB4aHIub3BlbignR0VUJywgdXJsLCB0cnVlKTsKICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInOwogICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkgewogICAgICBpZiAoY29udGV4dF8pIHsKICAgICAgICAvKnNlbGZfLnNhbXBsZSA9IGNvbnRleHRfLmNyZWF0ZUJ1ZmZlcih0aGlzLnJlc3BvbnNlLCBtaXhUb01vbm8pOwogICAgICAgIGlmIChvcHRfY2FsbGJhY2spIHsKICAgICAgICAgIG9wdF9jYWxsYmFjaygpOwogICAgICAgIH0KICAgICAgICAqLwogICAgICAgIGNvbnRleHRfLmRlY29kZUF1ZGlvRGF0YSh0aGlzLnJlc3BvbnNlLCBmdW5jdGlvbihhdWRpb0J1ZmZlcikgewogICAgICAgICAgc2VsZl8uc2FtcGxlID0gYXVkaW9CdWZmZXI7CiAgICAgICAgICBvcHRfY2FsbGJhY2sgJiYgb3B0X2NhbGxiYWNrKCk7CiAgICAgICAgfSwgZnVuY3Rpb24oZSkgewogICAgICAgICAgY29uc29sZS5sb2coZSk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH07CiAgICB4aHIuc2VuZCgpOwogIH07CgogIHRoaXMucGxheSA9IGZ1bmN0aW9uKCkgewogICAgaWYgKGNvbnRleHRfKSB7CiAgICAgIHNvdXJjZV8gPSBjb250ZXh0Xy5jcmVhdGVCdWZmZXJTb3VyY2UoKTsKICAgICAgc291cmNlXy5idWZmZXIgPSBzZWxmXy5zYW1wbGU7CiAgICAgIHNvdXJjZV8ubG9vcGluZyA9IGxvb3BfOwogICAgICBzb3VyY2VfLmNvbm5lY3QoY29udGV4dF8uZGVzdGluYXRpb24pOwogICAgICBzb3VyY2VfLm5vdGVPbigwKTsKICAgIH0KICB9OwoKICB0aGlzLnN0b3AgPSBmdW5jdGlvbigpIHsKICAgIGlmIChzb3VyY2VfKSB7CiAgICAgIHNvdXJjZV8ubm90ZU9mZigwKTsKICAgICAgc291cmNlXy5kaXNjb25uZWN0KDApOwogICAgfQogIH07Cn0KCnZhciBUZXJtaW5hbCA9IFRlcm1pbmFsIHx8IGZ1bmN0aW9uKGNvbnRhaW5lcklkKSB7CiAgd2luZG93LlVSTCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDsKICB3aW5kb3cucmVxdWVzdEZpbGVTeXN0ZW0gPSB3aW5kb3cucmVxdWVzdEZpbGVTeXN0ZW0gfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cud2Via2l0UmVxdWVzdEZpbGVTeXN0ZW07CgogIGNvbnN0IFZFUlNJT05fID0gJzEuMC4wJzsKICBjb25zdCBDTURTXyA9IFsKICAgICczZCcsICdjYXQnLCAnY2QnLCAnY3AnLCAnY2xlYXInLCAnZGF0ZScsICdoZWxwJywgJ2luc3RhbGwnLCAnbHMnLCAnbWtkaXInLAogICAgJ212JywgJ29wZW4nLCAncHdkJywgJ3JtJywgJ3JtZGlyJywgJ3RoZW1lJywgJ3ZlcnNpb24nLCAnd2hvJywgJ3dnZXQnCiAgXTsKICBjb25zdCBUSEVNRVNfID0gWydkZWZhdWx0JywgJ2NyZWFtJ107CgogIHZhciBmc18gPSBudWxsOwogIHZhciBjd2RfID0gbnVsbDsKICB2YXIgaGlzdG9yeV8gPSBbXTsKICB2YXIgaGlzdHBvc18gPSAwOwogIHZhciBoaXN0dGVtcF8gPSAwOwoKICB2YXIgdGltZXJfID0gbnVsbDsKICB2YXIgbWFnaWNXb3JkXyA9IG51bGw7CgogIHZhciBmc25fID0gbnVsbDsKICB2YXIgaXMzRF8gPSBmYWxzZTsKCiAgLy8gRmlyZSB3b3JrZXIgdG8gcmV0dXJuIHJlY3Vyc2l2ZSBzbmFwc2hvdCBvZiBjdXJyZW50IEZTIHRyZWUuCiAgdmFyIHdvcmtlcl8gPSBuZXcgV29ya2VyKCd3b3JrZXIuanMnKTsKICB3b3JrZXJfLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHsKICAgIHZhciBkYXRhID0gZS5kYXRhOwogICAgaWYgKGRhdGEuZW50cmllcykgewogICAgICBmc25fLmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2Uoe2NtZDogJ2J1aWxkJywgZGF0YTogZGF0YS5lbnRyaWVzfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pOwogICAgfQogICAgaWYgKGRhdGEubXNnKSB7CiAgICAgIG91dHB1dCgnPGRpdj4nICsgZGF0YS5tc2cgKyAnPC9kaXY+Jyk7CiAgICB9CiAgfTsKICB3b3JrZXJfLm9uZXJyb3IgPSBmdW5jdGlvbihlKSB7IGNvbnNvbGUubG9nKGUpIH07CgogIC8vIENyZWF0ZSB0ZXJtaW5hbCBhbmQgY2FjaGUgRE9NIG5vZGVzOwogIHZhciBjb250YWluZXJfID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29udGFpbmVySWQpOwogIGNvbnRhaW5lcl8uaW5zZXJ0QWRqYWNlbnRIVE1MKCdiZWZvcmVFbmQnLAogICAgICBbJzxvdXRwdXQ+PC9vdXRwdXQ+JywKICAgICAgICc8ZGl2IGlkPSJpbnB1dC1saW5lIiBjbGFzcz0iaW5wdXQtbGluZSI+JywKICAgICAgICc8ZGl2IGNsYXNzPSJwcm9tcHQiPiQmZ3Q7PC9kaXY+PGRpdj48aW5wdXQgY2xhc3M9ImNtZGxpbmUiIGF1dG9mb2N1cyAvPjwvZGl2PicsCiAgICAgICAnPC9kaXY+J10uam9pbignJykpOwogIHZhciBjbWRMaW5lXyA9IGNvbnRhaW5lcl8ucXVlcnlTZWxlY3RvcignI2lucHV0LWxpbmUgLmNtZGxpbmUnKTsKICB2YXIgb3V0cHV0XyA9IGNvbnRhaW5lcl8ucXVlcnlTZWxlY3Rvcignb3V0cHV0Jyk7CiAgdmFyIGludGVybGFjZV8gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuaW50ZXJsYWNlJyk7CiAgdmFyIGJlbGxfID0gbmV3IFNvdW5kKGZhbHNlKTsKICBiZWxsXy5sb2FkKCdiZWVwLm1wMycsIGZhbHNlKTsKCiAgLy8gSGFja2VyeSB0byByZXNpemUgdGhlIGludGVybGFjZSBiYWNrZ3JvdW5kIGltYWdlIGFzIHRoZSBjb250YWluZXIgZ3Jvd3MuCiAgb3V0cHV0Xy5hZGRFdmVudExpc3RlbmVyKCdET01TdWJ0cmVlTW9kaWZpZWQnLCBmdW5jdGlvbihlKSB7CiAgICB2YXIgZG9jSGVpZ2h0ID0gdXRpbC5nZXREb2NIZWlnaHQoKTsKICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5oZWlnaHQgPSBkb2NIZWlnaHQgKyAncHgnOwogICAgLy9kb2N1bWVudC5ib2R5LnN0eWxlLmJhY2tncm91bmQgPSAnLXdlYmtpdC1yYWRpYWwtZ3JhZGllbnQoY2VudGVyICcgKyAoTWF0aC5yb3VuZChkb2NIZWlnaHQgLyAyKSkgKyAncHgsIGNvbnRhaW4sIHJnYmEoMCw3NSwwLDAuOCksIGJsYWNrKSBjZW50ZXIgY2VudGVyIG5vLXJlcGVhdCwgYmxhY2snOwogICAgaW50ZXJsYWNlXy5zdHlsZS5oZWlnaHQgPSBkb2NIZWlnaHQgKyAncHgnOwogICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgLy8gTmVlZCB0aGlzIHdyYXBwZWQgaW4gYSBzZXRUaW1lb3V0LiBDaHJvbWUgaXMganVwbWluZyB0byB0b3AgOigKICAgICAgLy93aW5kb3cuc2Nyb2xsVG8oMCwgZG9jSGVpZ2h0KTsKICAgICAgY21kTGluZV8uc2Nyb2xsSW50b1ZpZXcoKTsKICAgIH0sIDApOwogICAgLy93aW5kb3cuc2Nyb2xsVG8oMCwgZG9jSGVpZ2h0KTsKICB9LCBmYWxzZSk7CgogIG91dHB1dF8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICB2YXIgZWwgPSBlLnRhcmdldDsKICAgIGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoJ2ZpbGUnKSB8fCBlbC5jbGFzc0xpc3QuY29udGFpbnMoJ2ZvbGRlcicpKSB7CiAgICAgIGNtZExpbmVfLnZhbHVlICs9ICcgJyArIGVsLnRleHRDb250ZW50OwogICAgfQogIH0sIGZhbHNlKTsKCiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkgewogICAgLy9pZiAoIWRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCdvZmZzY3JlZW4nKSkgewogICAgICBjbWRMaW5lXy5mb2N1cygpOwogICAgLy99CiAgfSwgZmFsc2UpOwoKICAvLyBBbHdheXMgZm9yY2UgdGV4dCBjdXJzb3IgdG8gZW5kIG9mIGlucHV0IGxpbmUuCiAgY21kTGluZV8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBpbnB1dFRleHRDbGlja18sIGZhbHNlKTsKCiAgLy8gSGFuZGxlIHVwL2Rvd24ga2V5IHByZXNzZXMgZm9yIHNoZWxsIGhpc3RvcnkgYW5kIGVudGVyIGZvciBuZXcgY29tbWFuZC4KICBjbWRMaW5lXy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywga2V5Ym9hcmRTaG9ydGN1dEhhbmRsZXJfLCBmYWxzZSk7CiAgY21kTGluZV8uYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBoaXN0b3J5SGFuZGxlcl8sIGZhbHNlKTsgLy8ga2V5dXAgbmVlZGVkIGZvciBpbnB1dCBibGlua2VyIHRvIGFwcGVhciBhdCBlbmQgb2YgaW5wdXQuCiAgY21kTGluZV8uYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHByb2Nlc3NOZXdDb21tYW5kXywgZmFsc2UpOwoKICAvKndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBmdW5jdGlvbihlKSB7CiAgICByZXR1cm4gIkRvbid0IGxlYXZlIG1lISI7CiAgfSwgZmFsc2UpOyovCgogIGZ1bmN0aW9uIGlucHV0VGV4dENsaWNrXyhlKSB7CiAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZTsKICB9CgogIGZ1bmN0aW9uIGtleWJvYXJkU2hvcnRjdXRIYW5kbGVyXyhlKSB7CiAgICAvLyBUb2dnbGUgQ1JUIHNjcmVlbiBmbGlja2VyLgogICAgaWYgKChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSAmJiBlLmtleUNvZGUgPT0gODMpIHsgLy8gY3J0bCtzCiAgICAgIGNvbnRhaW5lcl8uY2xhc3NMaXN0LnRvZ2dsZSgnZmxpY2tlcicpOwogICAgICBvdXRwdXQoJzxkaXY+U2NyZWVuIGZsaWNrZXI6ICcgKwogICAgICAgICAgICAgKGNvbnRhaW5lcl8uY2xhc3NMaXN0LmNvbnRhaW5zKCdmbGlja2VyJykgPyAnb24nIDogJ29mZicpICsKICAgICAgICAgICAgICc8L2Rpdj4nKTsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gc2VsZWN0RmlsZV8oZWwpIHsKICAgIGFsZXJ0KGVsKQogIH0KCiAgZnVuY3Rpb24gaGlzdG9yeUhhbmRsZXJfKGUpIHsgLy8gVGFiIG5lZWRzIHRvIGJlIGtleWRvd24uCgogICAgaWYgKGhpc3RvcnlfLmxlbmd0aCkgewogICAgICBpZiAoZS5rZXlDb2RlID09IDM4IHx8IGUua2V5Q29kZSA9PSA0MCkgewogICAgICAgIGlmIChoaXN0b3J5X1toaXN0cG9zX10pIHsKICAgICAgICAgIGhpc3RvcnlfW2hpc3Rwb3NfXSA9IHRoaXMudmFsdWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGhpc3R0ZW1wXyA9IHRoaXMudmFsdWU7CiAgICAgICAgfQogICAgICB9CgogICAgICBpZiAoZS5rZXlDb2RlID09IDM4KSB7IC8vIHVwCiAgICAgICAgaGlzdHBvc18tLTsKICAgICAgICBpZiAoaGlzdHBvc18gPCAwKSB7CiAgICAgICAgICBoaXN0cG9zXyA9IDA7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGUua2V5Q29kZSA9PSA0MCkgeyAvLyBkb3duCiAgICAgICAgaGlzdHBvc18rKzsKICAgICAgICBpZiAoaGlzdHBvc18gPiBoaXN0b3J5Xy5sZW5ndGgpIHsKICAgICAgICAgIGhpc3Rwb3NfID0gaGlzdG9yeV8ubGVuZ3RoOwogICAgICAgIH0KICAgICAgfQoKICAgICAgaWYgKGUua2V5Q29kZSA9PSAzOCB8fCBlLmtleUNvZGUgPT0gNDApIHsKICAgICAgICB0aGlzLnZhbHVlID0gaGlzdG9yeV9baGlzdHBvc19dID8gaGlzdG9yeV9baGlzdHBvc19dIDogaGlzdHRlbXBfOwogICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlOyAvLyBTZXRzIGN1cnNvciB0byBlbmQgb2YgaW5wdXQuCiAgICAgIH0KICAgIH0KICB9CgogIGZ1bmN0aW9uIHByb2Nlc3NOZXdDb21tYW5kXyhlKSB7CgogICAgLy8gQmVlcCBvbiBiYWNrc3BhY2UgYW5kIG5vIHZhbHVlIG9uIGNvbW1hbmQgbGluZS4KICAgIGlmICghdGhpcy52YWx1ZSAmJiBlLmtleUNvZGUgPT0gOCkgewogICAgICBiZWxsXy5zdG9wKCk7CiAgICAgIGJlbGxfLnBsYXkoKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChlLmtleUNvZGUgPT0gOSkgeyAvLyBUYWIKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAvLyBUT0RPKGVyaWNiaWRlbG1hbik6IEltcGxlbWVudCB0YWIgc3VnZ2VzdC4KICAgIH0gZWxzZSBpZiAoZS5rZXlDb2RlID09IDEzKSB7IC8vIGVudGVyCgogICAgICAvLyBTYXZlIHNoZWxsIGhpc3RvcnkuCiAgICAgIGlmICh0aGlzLnZhbHVlKSB7CiAgICAgICAgaGlzdG9yeV9baGlzdG9yeV8ubGVuZ3RoXSA9IHRoaXMudmFsdWU7CiAgICAgICAgaGlzdHBvc18gPSBoaXN0b3J5Xy5sZW5ndGg7CiAgICAgIH0KCiAgICAgIC8vIER1cGxpY2F0ZSBjdXJyZW50IGlucHV0IGFuZCBhcHBlbmQgdG8gb3V0cHV0IHNlY3Rpb24uCiAgICAgIHZhciBsaW5lID0gdGhpcy5wYXJlbnROb2RlLnBhcmVudE5vZGUuY2xvbmVOb2RlKHRydWUpOwogICAgICBsaW5lLnJlbW92ZUF0dHJpYnV0ZSgnaWQnKQogICAgICBsaW5lLmNsYXNzTGlzdC5hZGQoJ2xpbmUnKTsKICAgICAgdmFyIGlucHV0ID0gbGluZS5xdWVyeVNlbGVjdG9yKCdpbnB1dC5jbWRsaW5lJyk7CiAgICAgIGlucHV0LmF1dG9mb2N1cyA9IGZhbHNlOwogICAgICBpbnB1dC5yZWFkT25seSA9IHRydWU7CiAgICAgIG91dHB1dF8uYXBwZW5kQ2hpbGQobGluZSk7CgogICAgICAvLyBQYXJzZSBvdXQgY29tbWFuZCwgYXJncywgYW5kIHRyaW0gb2ZmIHdoaXRlc3BhY2UuCiAgICAgIC8vIFRPRE8oZXJpY2JpZGVsbWFuKTogU3VwcG9ydCBtdWx0aXBsZSBjb21tYSBzZXBhcmF0ZWQgY29tbWFuZHMuCiAgICAgIGlmICh0aGlzLnZhbHVlICYmIHRoaXMudmFsdWUudHJpbSgpKSB7CiAgICAgICAgdmFyIGFyZ3MgPSB0aGlzLnZhbHVlLnNwbGl0KCcgJykuZmlsdGVyKGZ1bmN0aW9uKHZhbCwgaSkgewogICAgICAgICAgcmV0dXJuIHZhbDsKICAgICAgICB9KTsKICAgICAgICB2YXIgY21kID0gYXJnc1swXS50b0xvd2VyQ2FzZSgpOwogICAgICAgIGFyZ3MgPSBhcmdzLnNwbGljZSgxKTsgLy8gUmVtb3ZlIGNtZCBmcm9tIGFyZyBsaXN0LgogICAgICB9CgogICAgICBzd2l0Y2ggKGNtZCkgewogICAgICAgIGNhc2UgJzNkJzoKICAgICAgICAgIGNsZWFyXyh0aGlzKTsKICAgICAgICAgIG91dHB1dCgnSG9sZCBvbiB0byB5b3VyIGJ1dHRzIScpOwogICAgICAgICAgdG9nZ2xlM0RWaWV3XygpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnY2F0JzoKICAgICAgICAgIHZhciBmaWxlTmFtZSA9IGFyZ3Muam9pbignICcpOwoKICAgICAgICAgIGlmICghZmlsZU5hbWUpIHsKICAgICAgICAgICAgb3V0cHV0KCd1c2FnZTogJyArIGNtZCArICcgZmlsZW5hbWUnKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CgogICAgICAgICAgcmVhZF8oY21kLCBmaWxlTmFtZSwgZnVuY3Rpb24ocmVzdWx0KSB7CiAgICAgICAgICAgIG91dHB1dCgnPHByZT4nICsgcmVzdWx0ICsgJzwvcHJlPicpOwogICAgICAgICAgfSk7CgogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnY2xlYXInOgogICAgICAgICAgY2xlYXJfKHRoaXMpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIGNhc2UgJ2RhdGUnOgogICAgICAgICAgb3V0cHV0KChuZXcgRGF0ZSgpKS50b0xvY2FsZVN0cmluZygpKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2V4aXQnOgogICAgICAgICAgaWYgKGlzM0RfKSB7CiAgICAgICAgICAgIHRvZ2dsZTNEVmlld18oKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aW1lcl8gIT0gbnVsbCkgewogICAgICAgICAgICBtYWdpY1dvcmRfLnN0b3AoKTsKICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcl8pOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnaGVscCc6CiAgICAgICAgICBvdXRwdXQoJzxkaXYgY2xhc3M9ImxzLWZpbGVzIj4nICsgQ01EU18uam9pbignPGJyPicpICsgJzwvZGl2PicpOwogICAgICAgICAgb3V0cHV0KCc8cD5BZGQgZmlsZXMgYnkgZHJhZ2dpbmcgdGhlbSBmcm9tIHlvdXIgZGVza3RvcC48L3A+Jyk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdpbnN0YWxsJzoKICAgICAgICAgIC8vIENoZWNrIGlzIGluc3RhbGxlZC4KICAgICAgICAgIGlmICh3aW5kb3cuY2hyb21lICYmIHdpbmRvdy5jaHJvbWUuYXBwKSB7CiAgICAgICAgICAgIGlmICghd2luZG93LmNocm9tZS5hcHAuaXNJbnN0YWxsZWQpIHsKICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgY2hyb21lLmFwcC5pbnN0YWxsKCk7CiAgICAgICAgICAgICAgfSBjYXRjaChlKSB7CiAgICAgICAgICAgICAgICBhbGVydChlICsgJ1xuRW5hYmxlIGlzIGFib3V0OmZsYWdzJyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIG91dHB1dCgnVGhpcyBhcHAgaXMgYWxyZWFkeSBpbnN0YWxsZWQuJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2xzJzoKICAgICAgICAgIGxzXyhmdW5jdGlvbihlbnRyaWVzKSB7CiAgICAgICAgICAgIGlmIChlbnRyaWVzLmxlbmd0aCkgewogICAgICAgICAgICAgIHZhciBodG1sID0gZm9ybWF0Q29sdW1uc18oZW50cmllcyk7CiAgICAgICAgICAgICAgdXRpbC50b0FycmF5KGVudHJpZXMpLmZvckVhY2goZnVuY3Rpb24oZW50cnksIGkpIHsKICAgICAgICAgICAgICAgIGh0bWwucHVzaCgKICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9IicsIGVudHJ5LmlzRGlyZWN0b3J5ID8gJ2ZvbGRlcicgOiAnZmlsZScsCiAgICAgICAgICAgICAgICAgICAgJyI+JywgZW50cnkubmFtZSwgJzwvc3Bhbj48YnI+Jyk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgaHRtbC5wdXNoKCc8L2Rpdj4nKTsKICAgICAgICAgICAgICBvdXRwdXQoaHRtbC5qb2luKCcnKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAncHdkJzoKICAgICAgICAgIG91dHB1dChjd2RfLmZ1bGxQYXRoKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2NkJzoKICAgICAgICAgIHZhciBkZXN0ID0gYXJncy5qb2luKCcgJykgfHwgJy8nOwoKICAgICAgICAgIGN3ZF8uZ2V0RGlyZWN0b3J5KGRlc3QsIHt9LCBmdW5jdGlvbihkaXJFbnRyeSkgewogICAgICAgICAgICBjd2RfID0gZGlyRW50cnk7CiAgICAgICAgICAgIG91dHB1dCgnPGRpdj4nICsgZGlyRW50cnkuZnVsbFBhdGggKyAnPC9kaXY+Jyk7CgogICAgICAgICAgICAvLyBUZWxsIEZTTiB2aXN1YWxpemVyIHRoYXQgd2UncmUgY2QnaW5nLgogICAgICAgICAgICBpZiAoZnNuXykgewogICAgICAgICAgICAgIGZzbl8uY29udGVudFdpbmRvdy5wb3N0TWVzc2FnZSh7Y21kOiAnY2QnLCBkYXRhOiBkZXN0fSwgbG9jYXRpb24ub3JpZ2luKTsKICAgICAgICAgICAgfQoKICAgICAgICAgIH0sIGZ1bmN0aW9uKGUpIHsgaW52YWxpZE9wRm9yRW50cnlUeXBlXyhlLCBjbWQsIGRlc3QpOyB9KTsKCiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdta2Rpcic6CiAgICAgICAgICB2YXIgZGFzaFAgPSBmYWxzZTsKICAgICAgICAgIHZhciBpbmRleCA9IGFyZ3MuaW5kZXhPZignLXAnKTsKICAgICAgICAgIGlmIChpbmRleCAhPSAtMSkgewogICAgICAgICAgICBhcmdzLnNwbGljZShpbmRleCwgMSk7CiAgICAgICAgICAgIGRhc2hQID0gdHJ1ZTsKICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoIWFyZ3MubGVuZ3RoKSB7CiAgICAgICAgICAgIG91dHB1dCgndXNhZ2U6ICcgKyBjbWQgKyAnIFstcF0gZGlyZWN0b3J5PGJyPicpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KCiAgICAgICAgICAvLyBDcmVhdGUgZWFjaCBkaXJlY3RvcnkgcGFzc2VkIGFzIGFuIGFyZ3VtZW50LgogICAgICAgICAgYXJncy5mb3JFYWNoKGZ1bmN0aW9uKGRpck5hbWUsIGkpIHsKICAgICAgICAgICAgaWYgKGRhc2hQKSB7CiAgICAgICAgICAgICAgdmFyIGZvbGRlcnMgPSBkaXJOYW1lLnNwbGl0KCcvJyk7CgogICAgICAgICAgICAgIC8vIFRocm93IG91dCAnLi8nIG9yICcvJyBpZiBwcmVzZW50IG9uIHRoZSBiZWdpbm5pbmcgb2Ygb3VyIHBhdGguCiAgICAgICAgICAgICAgaWYgKGZvbGRlcnNbMF0gPT0gJy4nIHx8IGZvbGRlcnNbMF0gPT0gJycpIHsKICAgICAgICAgICAgICAgIGZvbGRlcnMgPSBmb2xkZXJzLnNsaWNlKDEpOwogICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgY3JlYXRlRGlyXyhjd2RfLCBmb2xkZXJzKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBjd2RfLmdldERpcmVjdG9yeShkaXJOYW1lLCB7Y3JlYXRlOiB0cnVlLCBleGNsdXNpdmU6IHRydWV9LCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIC8vIFRlbGwgRlNOIHZpc3VhbGl6ZXIgdGhhdCB3ZSdyZSBta2RpcidpbmcuCiAgICAgICAgICAgICAgICBpZiAoZnNuXykgewogICAgICAgICAgICAgICAgICBmc25fLmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2Uoe2NtZDogJ21rZGlyJywgZGF0YTogZGlyTmFtZX0sIGxvY2F0aW9uLm9yaWdpbik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSwgZnVuY3Rpb24oZSkgeyBpbnZhbGlkT3BGb3JFbnRyeVR5cGVfKGUsIGNtZCwgZGlyTmFtZSk7IH0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2NwJzoKICAgICAgICBjYXNlICdtdic6CiAgICAgICAgICB2YXIgc3JjID0gYXJnc1swXTsKICAgICAgICAgIHZhciBkZXN0ID0gYXJnc1sxXTsKCiAgICAgICAgICBpZiAoIXNyYyB8fCAhZGVzdCkgewogICAgICAgICAgICBvdXRwdXQoWyd1c2FnZTogJywgY21kLCAnIHNvdXJjZSB0YXJnZXQ8YnI+JywKICAgICAgICAgICAgICAgICAgICcmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsnLCBjbWQsCiAgICAgICAgICAgICAgICAgICAnIHNvdXJjZSBkaXJlY3RvcnkvJ10uam9pbignJykpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KCiAgICAgICAgICB2YXIgcnVuQWN0aW9uID0gZnVuY3Rpb24oY21kLCBzcmNEaXJFbnRyeSwgZGVzdERpckVudHJ5LCBvcHRfbmV3TmFtZSkgewogICAgICAgICAgICB2YXIgbmV3TmFtZSA9IG9wdF9uZXdOYW1lIHx8IG51bGw7CiAgICAgICAgICAgIGlmIChjbWQgPT0gJ212JykgewogICAgICAgICAgICAgICAgc3JjRGlyRW50cnkubW92ZVRvKGRlc3REaXJFbnRyeSwgbmV3TmFtZSk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHNyY0RpckVudHJ5LmNvcHlUbyhkZXN0RGlyRW50cnksIG5ld05hbWUpOwogICAgICAgICAgICAgIH0KICAgICAgICAgIH07CgogICAgICAgICAgLy8gTW92aW5nIHRvIGEgZm9sZGVyPyAoZS5nLiBzZWNvbmQgYXJnIGVuZHMgaW4gJy8nKS4KICAgICAgICAgIGlmIChkZXN0W2Rlc3QubGVuZ3RoIC0gMV0gPT0gJy8nKSB7CiAgICAgICAgICAgIGN3ZF8uZ2V0RGlyZWN0b3J5KHNyYywge30sIGZ1bmN0aW9uKHNyY0RpckVudHJ5KSB7CiAgICAgICAgICAgICAgLy8gQ3JlYXRlIGJsYWNrbGlzdCBmb3IgZGlycyB3ZSBjYW4ndCByZS1jcmVhdGUuCiAgICAgICAgICAgICAgdmFyIGNyZWF0ZSA9IFsKICAgICAgICAgICAgICAgICcuJywgJy4vJywgJy4uJywgJy4uLycsICcvJ10uaW5kZXhPZihkZXN0KSAhPSAtMSA/IGZhbHNlIDogdHJ1ZTsKCiAgICAgICAgICAgICAgY3dkXy5nZXREaXJlY3RvcnkoZGVzdCwge2NyZWF0ZTogY3JlYXRlfSwgZnVuY3Rpb24oZGVzdERpckVudHJ5KSB7CiAgICAgICAgICAgICAgICBydW5BY3Rpb24oY21kLCBzcmNEaXJFbnRyeSwgZGVzdERpckVudHJ5KTsKICAgICAgICAgICAgICB9LCBlcnJvckhhbmRsZXJfKTsKICAgICAgICAgICAgfSwgZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgIC8vIFRyeSB0aGUgc3JjIGVudHJ5IGFzIGEgZmlsZSBpbnN0ZWFkLgogICAgICAgICAgICAgIGN3ZF8uZ2V0RmlsZShzcmMsIHt9LCBmdW5jdGlvbihzcmNEaXJFbnRyeSkgewogICAgICAgICAgICAgICAgY3dkXy5nZXREaXJlY3RvcnkoZGVzdCwge30sIGZ1bmN0aW9uKGRlc3REaXJFbnRyeSkgewogICAgICAgICAgICAgICAgICBydW5BY3Rpb24oY21kLCBzcmNEaXJFbnRyeSwgZGVzdERpckVudHJ5KTsKICAgICAgICAgICAgICAgIH0sIGVycm9ySGFuZGxlcl8pOwogICAgICAgICAgICAgIH0sIGVycm9ySGFuZGxlcl8pOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0gZWxzZSB7IC8vIFRyZWF0IHNyYy9kZXN0aW5hdGlvbiBhcyBmaWxlcy4KICAgICAgICAgICAgY3dkXy5nZXRGaWxlKHNyYywge30sIGZ1bmN0aW9uKHNyY0ZpbGVFbnRyeSkgewogICAgICAgICAgICAgIHNyY0ZpbGVFbnRyeS5nZXRQYXJlbnQoZnVuY3Rpb24ocGFyZW50RGlyRW50cnkpIHsKICAgICAgICAgICAgICAgIHJ1bkFjdGlvbihjbWQsIHNyY0ZpbGVFbnRyeSwgcGFyZW50RGlyRW50cnksIGRlc3QpOwogICAgICAgICAgICAgIH0sIGVycm9ySGFuZGxlcl8pOwogICAgICAgICAgICB9LCBlcnJvckhhbmRsZXJfKTsKICAgICAgICAgIH0KCiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdvcGVuJzoKICAgICAgICAgIHZhciBmaWxlTmFtZSA9IGFyZ3Muam9pbignICcpOwoKICAgICAgICAgIGlmICghZmlsZU5hbWUpIHsKICAgICAgICAgICAgb3V0cHV0KCd1c2FnZTogJyArIGNtZCArICcgZmlsZW5hbWUnKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CgogICAgICAgICAgb3Blbl8oY21kLCBmaWxlTmFtZSwgZnVuY3Rpb24oZmlsZUVudHJ5KSB7CiAgICAgICAgICAgIHZhciBteVdpbiA9IHdpbmRvdy5vcGVuKGZpbGVFbnRyeS50b1VSTCgpLCAnbXl3aW4nKTsKICAgICAgICAgIH0pOwoKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2luaXQnOgogICAgICAgICAgaWYgKHdvcmtlcl8pIHsKICAgICAgICAgICAgd29ya2VyXy5wb3N0TWVzc2FnZSh7Y21kOiAnaW5pdCcsIHR5cGU6IHR5cGVfLCBzaXplOiBzaXplX30pOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAncm0nOgogICAgICAgICAgLy8gUmVtb3ZlIHJlY3Vyc2l2ZWx5PyBJZiBzbywgcmVtb3ZlIHRoZSBmbGFnKHMpIGZyb20gdGhlIGFyZyBsaXN0LgogICAgICAgICAgdmFyIHJlY3Vyc2l2ZSA9IGZhbHNlOwogICAgICAgICAgWyctcicsICctZicsICctcmYnLCAnLWZyJ10uZm9yRWFjaChmdW5jdGlvbihhcmcsIGkpIHsKICAgICAgICAgICAgdmFyIGluZGV4ID0gYXJncy5pbmRleE9mKGFyZyk7CiAgICAgICAgICAgIGlmIChpbmRleCAhPSAtMSkgewogICAgICAgICAgICAgIGFyZ3Muc3BsaWNlKGluZGV4LCAxKTsKICAgICAgICAgICAgICByZWN1cnNpdmUgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKCiAgICAgICAgICAvLyBSZW1vdmUgZWFjaCBmaWxlIHBhc3NlZCBhcyBhbiBhcmd1bWVudC4KICAgICAgICAgIGFyZ3MuZm9yRWFjaChmdW5jdGlvbihmaWxlTmFtZSwgaSkgewogICAgICAgICAgICBjd2RfLmdldEZpbGUoZmlsZU5hbWUsIHt9LCBmdW5jdGlvbihmaWxlRW50cnkpIHsKICAgICAgICAgICAgICBmaWxlRW50cnkucmVtb3ZlKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgLy8gVGVsbCBGU04gdmlzdWFsaXplciB0aGF0IHdlJ3JlIHJtJ2luZy4KICAgICAgICAgICAgICAgIGlmIChmc25fKSB7CiAgICAgICAgICAgICAgICAgIGZzbl8uY29udGVudFdpbmRvdy5wb3N0TWVzc2FnZSh7Y21kOiAncm0nLCBkYXRhOiBmaWxlTmFtZX0sIGxvY2F0aW9uLm9yaWdpbik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSwgZXJyb3JIYW5kbGVyXyk7CiAgICAgICAgICAgIH0sIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICBpZiAocmVjdXJzaXZlICYmIGUuY29kZSA9PSBGaWxlRXJyb3IuVFlQRV9NSVNNQVRDSF9FUlIpIHsKICAgICAgICAgICAgICAgIGN3ZF8uZ2V0RGlyZWN0b3J5KGZpbGVOYW1lLCB7fSwgZnVuY3Rpb24oZGlyRW50cnkpIHsKICAgICAgICAgICAgICAgICAgZGlyRW50cnkucmVtb3ZlUmVjdXJzaXZlbHkobnVsbCwgZXJyb3JIYW5kbGVyXyk7CiAgICAgICAgICAgICAgICB9LCBlcnJvckhhbmRsZXJfKTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKGUuY29kZSA9PSBGaWxlRXJyb3IuSU5WQUxJRF9TVEFURV9FUlIpIHsKICAgICAgICAgICAgICAgIG91dHB1dChjbWQgKyAnOiAnICsgZmlsZU5hbWUgKyAnOiBpcyBhIGRpcmVjdG9yeTxicj4nKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyXyhlKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdybWRpcic6CiAgICAgICAgICAvLyBSZW1vdmUgZWFjaCBkaXJlY3RvcnkgcGFzc2VkIGFzIGFuIGFyZ3VtZW50LgogICAgICAgICAgYXJncy5mb3JFYWNoKGZ1bmN0aW9uKGRpck5hbWUsIGkpIHsKICAgICAgICAgICAgY3dkXy5nZXREaXJlY3RvcnkoZGlyTmFtZSwge30sIGZ1bmN0aW9uKGRpckVudHJ5KSB7CiAgICAgICAgICAgICAgZGlyRW50cnkucmVtb3ZlKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgLy8gVGVsbCBGU04gdmlzdWFsaXplciB0aGF0IHdlJ3JlIHJtZGlyJ2luZy4KICAgICAgICAgICAgICAgIGlmIChmc25fKSB7CiAgICAgICAgICAgICAgICAgIGZzbl8uY29udGVudFdpbmRvdy5wb3N0TWVzc2FnZSh7Y21kOiAncm0nLCBkYXRhOiBkaXJOYW1lfSwgbG9jYXRpb24ub3JpZ2luKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9LCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICBpZiAoZS5jb2RlID09IEZpbGVFcnJvci5JTlZBTElEX01PRElGSUNBVElPTl9FUlIpIHsKICAgICAgICAgICAgICAgICAgb3V0cHV0KGNtZCArICc6ICcgKyBkaXJOYW1lICsgJzogRGlyZWN0b3J5IG5vdCBlbXB0eTxicj4nKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIGVycm9ySGFuZGxlcl8oZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0sIGZ1bmN0aW9uKGUpIHsgaW52YWxpZE9wRm9yRW50cnlUeXBlXyhlLCBjbWQsIGRpck5hbWUpOyB9KTsKICAgICAgICAgIH0pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnc3Vkbyc6CiAgICAgICAgICBpZiAodGltZXJfICE9IG51bGwpIHsKICAgICAgICAgICAgbWFnaWNXb3JkXy5zdG9wKCk7CiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXJfKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghbWFnaWNXb3JkXykgewogICAgICAgICAgICBtYWdpY1dvcmRfID0gbmV3IFNvdW5kKHRydWUpOwogICAgICAgICAgICBtYWdpY1dvcmRfLmxvYWQoJ21hZ2ljX3dvcmQubXAzJywgZmFsc2UsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIG1hZ2ljV29yZF8ucGxheSgpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG1hZ2ljV29yZF8ucGxheSgpOwogICAgICAgICAgfQogICAgICAgICAgdGltZXJfID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIG91dHB1dCgiPGRpdj5ZT1UgRElETidUIFNBWSBUSEUgTUFHSUMgV09SRCE8L2Rpdj4iKTsKICAgICAgICAgIH0sIDEwMCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICd0aGVtZSc6CiAgICAgICAgICB2YXIgdGhlbWUgPSBhcmdzLmpvaW4oJyAnKTsKICAgICAgICAgIGlmICghdGhlbWUpIHsKICAgICAgICAgICAgb3V0cHV0KFsndXNhZ2U6ICcsIGNtZCwgJyAnICsgVEhFTUVTXy5qb2luKCcsJyldLmpvaW4oJycpKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChUSEVNRVNfLmluZGV4T2YodGhlbWUpICE9IC0xKSB7CiAgICAgICAgICAgICAgc2V0VGhlbWVfKHRoZW1lKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBvdXRwdXQoJ0Vycm9yIC0gVW5yZWNvZ25pemVkIHRoZW1lIHVzZWQnKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAndmVyc2lvbic6CiAgICAgICAgY2FzZSAndmVyJzoKICAgICAgICAgIG91dHB1dChWRVJTSU9OXyk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICd3Z2V0JzoKICAgICAgICAgIHZhciB1cmwgPSBhcmdzWzBdOwogICAgICAgICAgaWYgKCF1cmwpIHsKICAgICAgICAgICAgb3V0cHV0KFsndXNhZ2U6ICcsIGNtZCwgJyBtaXNzaW5nIFVSTCddLmpvaW4oJycpKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9IGVsc2UgaWYgKHVybC5zZWFyY2goJ15odHRwOi8vJykgPT0gLTEpIHsKICAgICAgICAgICAgdXJsID0gJ2h0dHA6Ly8nICsgdXJsOwogICAgICAgICAgfQogICAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwogICAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09IDIwMCAmJiB0aGlzLnJlYWR5U3RhdGUgPT0gNCkgewogICAgICAgICAgICAgIG91dHB1dCgnPHRleHRhcmVhPicgKyB0aGlzLnJlc3BvbnNlICsgJzwvdGV4dGFyZWE+Jyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgb3V0cHV0KCdFUlJPUjogJyArIHRoaXMuc3RhdHVzICsgJyAnICsgdGhpcy5zdGF0dXNUZXh0KTsKICAgICAgICAgICAgfQogICAgICAgICAgfTsKICAgICAgICAgIHhoci5vbmVycm9yID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgICBvdXRwdXQoJ0VSUk9SOiAnICsgdGhpcy5zdGF0dXMgKyAnICcgKyB0aGlzLnN0YXR1c1RleHQpOwogICAgICAgICAgICBvdXRwdXQoJ0NvdWxkIG5vdCBmZXRjaCAnICsgdXJsKTsKICAgICAgICAgIH07CiAgICAgICAgICB4aHIub3BlbignR0VUJywgdXJsLCB0cnVlKTsKICAgICAgICAgIHhoci5zZW5kKCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICd3aG8nOgogICAgICAgICAgb3V0cHV0KGRvY3VtZW50LnRpdGxlICsKICAgICAgICAgICAgICAgICAnIC0gQnk6IEVyaWMgQmlkZWxtYW4gJmx0O2VyaWNiaWRlbG1hbkBjaHJvbWl1bS5vcmcmZ3Q7Jyk7CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgaWYgKGNtZCkgewogICAgICAgICAgICBvdXRwdXQoY21kICsgJzogY29tbWFuZCBub3QgZm91bmQnKTsKICAgICAgICAgIH0KICAgICAgfTsKCiAgICAgIHRoaXMudmFsdWUgPSAnJzsgLy8gQ2xlYXIvc2V0dXAgbGluZSBmb3IgbmV4dCBpbnB1dC4KICAgIH0KICB9CgogIGZ1bmN0aW9uIGZvcm1hdENvbHVtbnNfKGVudHJpZXMpIHsKICAgIHZhciBtYXhOYW1lID0gZW50cmllc1swXS5uYW1lOwogICAgdXRpbC50b0FycmF5KGVudHJpZXMpLmZvckVhY2goZnVuY3Rpb24oZW50cnksIGkpIHsKICAgICAgaWYgKGVudHJ5Lm5hbWUubGVuZ3RoID4gbWF4TmFtZS5sZW5ndGgpIHsKICAgICAgICBtYXhOYW1lID0gZW50cnkubmFtZTsKICAgICAgfQogICAgfSk7CgogICAgLy8gSWYgd2UgaGF2ZSAzIG9yIGxlc3MgZW50cmllcywgc2hvcnRlbiB0aGUgb3V0cHV0IGNvbnRhaW5lcidzIGhlaWdodC4KICAgIC8vIDE1cHggaGVpZ2h0IHdpdGggYSBtb25vc3BhY2UgZm9udC1zaXplIG9mIH4xMnB4OwogICAgdmFyIGhlaWdodCA9IGVudHJpZXMubGVuZ3RoID09IDEgPyAnaGVpZ2h0OiAnICsgKGVudHJpZXMubGVuZ3RoICogMzApICsgJ3B4OycgOgogICAgICAgICAgICAgICAgIGVudHJpZXMubGVuZ3RoIDw9IDMgPyAnaGVpZ2h0OiAnICsgKGVudHJpZXMubGVuZ3RoICogMTgpICsgJ3B4OycgOiAnJzsKCiAgICAvLyB+MTJweCBtb25vc3BhY2UgZm9udCB5aWVsZHMgfjhweCBzY3JlZW4gd2lkdGguCiAgICB2YXIgY29sV2lkdGggPSBtYXhOYW1lLmxlbmd0aCAqIDE2Oy8vOzg7CgogICAgcmV0dXJuIFsnPGRpdiBjbGFzcz0ibHMtZmlsZXMiIHN0eWxlPSItd2Via2l0LWNvbHVtbi13aWR0aDonLAogICAgICAgICAgICBjb2xXaWR0aCwgJ3B4OycsIGhlaWdodCwgJyI+J107CiAgfQoKICBmdW5jdGlvbiBpbnZhbGlkT3BGb3JFbnRyeVR5cGVfKGUsIGNtZCwgZGVzdCkgewogICAgaWYgKGUuY29kZSA9PSBGaWxlRXJyb3IuTk9UX0ZPVU5EX0VSUikgewogICAgICBvdXRwdXQoY21kICsgJzogJyArIGRlc3QgKyAnOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5PGJyPicpOwogICAgfSBlbHNlIGlmIChlLmNvZGUgPT0gRmlsZUVycm9yLklOVkFMSURfU1RBVEVfRVJSKSB7CiAgICAgIG91dHB1dChjbWQgKyAnOiAnICsgZGVzdCArICc6IE5vdCBhIGRpcmVjdG9yeTxicj4nKTsKICAgIH0gZWxzZSBpZiAoZS5jb2RlID09IEZpbGVFcnJvci5JTlZBTElEX01PRElGSUNBVElPTl9FUlIpIHsKICAgICAgb3V0cHV0KGNtZCArICc6ICcgKyBkZXN0ICsgJzogRmlsZSBhbHJlYWR5IGV4aXN0czxicj4nKTsKICAgIH0gZWxzZSB7CiAgICAgIGVycm9ySGFuZGxlcl8oZSk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBlcnJvckhhbmRsZXJfKGUpIHsKICAgIHZhciBtc2cgPSAnJzsKICAgIHN3aXRjaCAoZS5jb2RlKSB7CiAgICAgIGNhc2UgRmlsZUVycm9yLlFVT1RBX0VYQ0VFREVEX0VSUjoKICAgICAgICBtc2cgPSAnUVVPVEFfRVhDRUVERURfRVJSJzsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBGaWxlRXJyb3IuTk9UX0ZPVU5EX0VSUjoKICAgICAgICBtc2cgPSAnTk9UX0ZPVU5EX0VSUic7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgRmlsZUVycm9yLlNFQ1VSSVRZX0VSUjoKICAgICAgICBtc2cgPSAnU0VDVVJJVFlfRVJSJzsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBGaWxlRXJyb3IuSU5WQUxJRF9NT0RJRklDQVRJT05fRVJSOgogICAgICAgIG1zZyA9ICdJTlZBTElEX01PRElGSUNBVElPTl9FUlInOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEZpbGVFcnJvci5JTlZBTElEX1NUQVRFX0VSUjoKICAgICAgICBtc2cgPSAnSU5WQUxJRF9TVEFURV9FUlInOwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIG1zZyA9ICdVbmtub3duIEVycm9yJzsKICAgICAgICBicmVhazsKICAgIH07CiAgICBvdXRwdXQoJzxkaXY+RXJyb3I6ICcgKyBtc2cgKyAnPC9kaXY+Jyk7CiAgfQoKICBmdW5jdGlvbiBjcmVhdGVEaXJfKHJvb3REaXJFbnRyeSwgZm9sZGVycywgb3B0X2Vycm9yQ2FsbGJhY2spIHsKICAgIHZhciBlcnJvckNhbGxiYWNrID0gb3B0X2Vycm9yQ2FsbGJhY2sgfHwgZXJyb3JIYW5kbGVyXzsKCiAgICByb290RGlyRW50cnkuZ2V0RGlyZWN0b3J5KGZvbGRlcnNbMF0sIHtjcmVhdGU6IHRydWV9LCBmdW5jdGlvbihkaXJFbnRyeSkgewoKICAgICAgLy8gUmVjdXJzaXZlbHkgYWRkIHRoZSBuZXcgc3ViZm9sZGVyIGlmIHdlIHN0aWxsIGhhdmUgYSBzdWJmb2xkZXIgdG8gY3JlYXRlLgogICAgICBpZiAoZm9sZGVycy5sZW5ndGgpIHsKICAgICAgICBjcmVhdGVEaXJfKGRpckVudHJ5LCBmb2xkZXJzLnNsaWNlKDEpKTsKICAgICAgfQogICAgfSwgZXJyb3JDYWxsYmFjayk7CiAgfQoKICBmdW5jdGlvbiBvcGVuXyhjbWQsIHBhdGgsIHN1Y2Nlc3NDYWxsYmFjaykgewogICAgaWYgKCFmc18pIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGN3ZF8uZ2V0RmlsZShwYXRoLCB7fSwgc3VjY2Vzc0NhbGxiYWNrLCBmdW5jdGlvbihlKSB7CiAgICAgIGlmIChlLmNvZGUgPT0gRmlsZUVycm9yLk5PVF9GT1VORF9FUlIpIHsKICAgICAgICBvdXRwdXQoY21kICsgJzogJyArIHBhdGggKyAnOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5PGJyPicpOwogICAgICB9CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIHJlYWRfKGNtZCwgcGF0aCwgc3VjY2Vzc0NhbGxiYWNrKSB7CiAgICBpZiAoIWZzXykgewogICAgICByZXR1cm47CiAgICB9CgogICAgY3dkXy5nZXRGaWxlKHBhdGgsIHt9LCBmdW5jdGlvbihmaWxlRW50cnkpIHsKICAgICAgZmlsZUVudHJ5LmZpbGUoZnVuY3Rpb24oZmlsZSkgewogICAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOwoKICAgICAgICByZWFkZXIub25sb2FkZW5kID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKHRoaXMucmVzdWx0KTsKICAgICAgICB9OwoKICAgICAgICByZWFkZXIucmVhZEFzVGV4dChmaWxlKTsKICAgICAgfSwgZXJyb3JIYW5kbGVyXyk7CiAgICB9LCBmdW5jdGlvbihlKSB7CiAgICAgIGlmIChlLmNvZGUgPT0gRmlsZUVycm9yLklOVkFMSURfU1RBVEVfRVJSKSB7CiAgICAgICAgb3V0cHV0KGNtZCArICc6ICcgKyBwYXRoICsgJzogaXMgYSBkaXJlY3Rvcnk8YnI+Jyk7CiAgICAgIH0gZWxzZSBpZiAoZS5jb2RlID09IEZpbGVFcnJvci5OT1RfRk9VTkRfRVJSKSB7CiAgICAgICAgb3V0cHV0KGNtZCArICc6ICcgKyBwYXRoICsgJzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeTxicj4nKTsKICAgICAgfQogICAgfSk7CiAgfQoKICBmdW5jdGlvbiBsc18oc3VjY2Vzc0NhbGxiYWNrKSB7CiAgICBpZiAoIWZzXykgewogICAgICByZXR1cm47CiAgICB9CgogICAgLy8gUmVhZCBjb250ZW50cyBvZiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiBBY2NvcmRpbmcgdG8gc3BlYywgbmVlZCB0bwogICAgLy8ga2VlcCBjYWxsaW5nIHJlYWRFbnRyaWVzKCkgdW50aWwgbGVuZ3RoIG9mIHJlc3VsdCBhcnJheSBpcyAwLiBXZSdyZQogICAgLy8gZ3VhcmVudGVlZCB0aGUgc2FtZSBlbnRyeSB3b24ndCBiZSByZXR1cm5lZCBhZ2Fpbi4KICAgIHZhciBlbnRyaWVzID0gW107CiAgICB2YXIgcmVhZGVyID0gY3dkXy5jcmVhdGVSZWFkZXIoKTsKCiAgICB2YXIgcmVhZEVudHJpZXMgPSBmdW5jdGlvbigpIHsKICAgICAgcmVhZGVyLnJlYWRFbnRyaWVzKGZ1bmN0aW9uKHJlc3VsdHMpIHsKICAgICAgICBpZiAoIXJlc3VsdHMubGVuZ3RoKSB7CiAgICAgICAgICBlbnRyaWVzID0gZW50cmllcy5zb3J0KCk7CiAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2soZW50cmllcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGVudHJpZXMgPSBlbnRyaWVzLmNvbmNhdCh1dGlsLnRvQXJyYXkocmVzdWx0cykpOwogICAgICAgICAgcmVhZEVudHJpZXMoKTsKICAgICAgICB9CiAgICAgIH0sIGVycm9ySGFuZGxlcl8pOwogICAgfTsKCiAgICByZWFkRW50cmllcygpOwogIH0KCiAgZnVuY3Rpb24gY2xlYXJfKGlucHV0KSB7CiAgICBvdXRwdXRfLmlubmVySFRNTCA9ICcnOwogICAgaW5wdXQudmFsdWUgPSAnJzsKICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7CiAgICBpbnRlcmxhY2VfLnN0eWxlLmhlaWdodCA9ICcxMDAlJzsKICB9CgogIGZ1bmN0aW9uIHNldFRoZW1lXyh0aGVtZSkgewogICAgdmFyIGN1cnJlbnRVcmwgPSBkb2N1bWVudC5sb2NhdGlvbi5wYXRobmFtZTsKCiAgICBpZiAoIXRoZW1lIHx8IHRoZW1lID09ICdkZWZhdWx0JykgewogICAgICAvL2hpc3RvcnkucmVwbGFjZVN0YXRlKHt9LCAnJywgY3VycmVudFVybCk7CiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCd0aGVtZScpOwogICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTmFtZSA9ICcnOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKHRoZW1lKSB7CiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCh0aGVtZSk7CiAgICAgIGxvY2FsU3RvcmFnZS50aGVtZSA9IHRoZW1lOwogICAgICAvL2hpc3RvcnkucmVwbGFjZVN0YXRlKHt9LCAnJywgY3VycmVudFVybCArICcjdGhlbWU9JyArIHRoZW1lKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHRvZ2dsZTNEVmlld18oKSB7CiAgICB2YXIgYm9keSA9IGRvY3VtZW50LmJvZHk7CiAgICBib2R5LmNsYXNzTGlzdC50b2dnbGUoJ29mZnNjcmVlbicpOwoKICAgIGlzM0RfID0gIWlzM0RfOwoKICAgIGlmIChib2R5LmNsYXNzTGlzdC5jb250YWlucygnb2Zmc2NyZWVuJykpIHsKCiAgICAgIGNvbnRhaW5lcl8uc3R5bGUud2Via2l0VHJhbnNmb3JtID0KICAgICAgICAgICd0cmFuc2xhdGVZKCcgKyAodXRpbC5nZXREb2NIZWlnaHQoKSAtIDE3NSkgKyAncHgpJzsKCiAgICAgIHZhciB0cmFuc0VuZF8gPSBmdW5jdGlvbihlKSB7CiAgICAgICAgdmFyIGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOwogICAgICAgIGlmcmFtZS5pZCA9ICdmc24nOwogICAgICAgIGlmcmFtZS5zcmMgPSAnLi4vZnNuL2Zzbl9wcm90by5odG1sJzsKCiAgICAgICAgZnNuXyA9IGJvZHkuaW5zZXJ0QmVmb3JlKGlmcmFtZSwgYm9keS5maXJzdEVsZW1lbnRDaGlsZCk7CgogICAgICAgIGlmcmFtZS5jb250ZW50V2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgd29ya2VyXy5wb3N0TWVzc2FnZSh7Y21kOiAncmVhZCcsIHR5cGU6IHR5cGVfLCBzaXplOiBzaXplX30pOwogICAgICAgIH0KICAgICAgICBjb250YWluZXJfLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmtpdFRyYW5zaXRpb25FbmQnLCB0cmFuc0VuZF8sIGZhbHNlKTsKICAgICAgfTsKICAgICAgY29udGFpbmVyXy5hZGRFdmVudExpc3RlbmVyKCd3ZWJraXRUcmFuc2l0aW9uRW5kJywgdHJhbnNFbmRfLCBmYWxzZSk7CiAgICB9IGVsc2UgewogICAgICBjb250YWluZXJfLnN0eWxlLndlYmtpdFRyYW5zZm9ybSA9ICd0cmFuc2xhdGVZKDApJzsKICAgICAgYm9keS5yZW1vdmVDaGlsZChmc25fKTsKICAgICAgZnNuXyA9IG51bGw7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBvdXRwdXQoaHRtbCkgewogICAgb3V0cHV0Xy5pbnNlcnRBZGphY2VudEhUTUwoJ2JlZm9yZUVuZCcsIGh0bWwpOwogICAgLy9vdXRwdXRfLnNjcm9sbEludG9WaWV3KCk7CiAgICBjbWRMaW5lXy5zY3JvbGxJbnRvVmlldygpOwogIH0KCiAgcmV0dXJuIHsKICAgIGluaXRGUzogZnVuY3Rpb24ocGVyc2lzdGVudCwgc2l6ZSkgewogICAgICBvdXRwdXQoJzxkaXY+V2VsY29tZSB0byAnICsgZG9jdW1lbnQudGl0bGUgKwogICAgICAgICAgICAgJyEgKHYnICsgVkVSU0lPTl8gKyAnKTwvZGl2PicpOwogICAgICBvdXRwdXQoKG5ldyBEYXRlKCkpLnRvTG9jYWxlU3RyaW5nKCkpOwogICAgICBvdXRwdXQoJzxwPkRvY3VtZW50YXRpb246IHR5cGUgImhlbHAiPC9wPicpOwoKICAgICAgaWYgKCEhIXdpbmRvdy5yZXF1ZXN0RmlsZVN5c3RlbSkgewogICAgICAgIG91dHB1dCgnPGRpdj5Tb3JyeSEgVGhlIEZpbGVTeXN0ZW0gQVBJcyBhcmUgbm90IGF2YWlsYWJsZSBpbiB5b3VyIGJyb3dzZXIuPC9kaXY+Jyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICB2YXIgdHlwZSA9IHBlcnNpc3RlbnQgPyB3aW5kb3cuUEVSU0lTVEVOVCA6IHdpbmRvdy5URU1QT1JBUlk7CiAgICAgIHdpbmRvdy5yZXF1ZXN0RmlsZVN5c3RlbSh0eXBlLCBzaXplLCBmdW5jdGlvbihmaWxlc3lzdGVtKSB7CiAgICAgICAgZnNfID0gZmlsZXN5c3RlbTsKICAgICAgICBjd2RfID0gZnNfLnJvb3Q7CiAgICAgICAgdHlwZV8gPSB0eXBlOwogICAgICAgIHNpemVfID0gc2l6ZTsKCiAgICAgICAgLy8gSWYgd2UgZ2V0IHRoaXMgZmFyLCBhdHRlbXB0IHRvIGNyZWF0ZSBhIGZvbGRlciB0byB0ZXN0IGlmIHRoZQogICAgICAgIC8vIC0tdW5saW1pdGVkLXF1b3RhLWZvci1maWxlcyBmYWcgaXMgc2V0LgogICAgICAgIGN3ZF8uZ2V0RGlyZWN0b3J5KCd0ZXN0cXVvdGFmb3Jmc2ZvbGRlcicsIHtjcmVhdGU6IHRydWV9LCBmdW5jdGlvbihkaXJFbnRyeSkgewogICAgICAgICAgZGlyRW50cnkucmVtb3ZlKGZ1bmN0aW9uKCkgeyAvLyBJZiBzdWNjZXNzZnVsbHkgY3JlYXRlZCwganVzdCBkZWxldGUgaXQuCiAgICAgICAgICAgIC8vIG5vb3AuCiAgICAgICAgICB9KTsKICAgICAgICB9LCBmdW5jdGlvbihlKSB7CiAgICAgICAgICBpZiAoZS5jb2RlID09IEZpbGVFcnJvci5RVU9UQV9FWENFRURFRF9FUlIpIHsKICAgICAgICAgICAgb3V0cHV0KCdFUlJPUjogV3JpdGUgYWNjZXNzIHRvIHRoZSBGaWxlU3lzdGVtIGlzIHVuYXZhaWxhYmxlLjxicj4nKTsKICAgICAgICAgICAgb3V0cHV0KCdUeXBlICJpbnN0YWxsIiBvciBydW4gQ2hyb21lIHdpdGggdGhlIC0tdW5saW1pdGVkLXF1b3RhLWZvci1maWxlcyBmbGFnLicpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZXJyb3JIYW5kbGVyXyhlKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgIH0sIGVycm9ySGFuZGxlcl8pOwogICAgfSwKICAgIG91dHB1dDogb3V0cHV0LAogICAgc2V0VGhlbWU6IHNldFRoZW1lXywKICAgIGdldENtZExpbmU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY21kTGluZV87IH0sCiAgICBhZGREcm9wcGVkRmlsZXM6IGZ1bmN0aW9uKGZpbGVzKSB7CiAgICAgIHV0aWwudG9BcnJheShmaWxlcykuZm9yRWFjaChmdW5jdGlvbihmaWxlLCBpKSB7CiAgICAgICAgY3dkXy5nZXRGaWxlKGZpbGUubmFtZSwge2NyZWF0ZTogdHJ1ZSwgZXhjbHVzaXZlOiB0cnVlfSwgZnVuY3Rpb24oZmlsZUVudHJ5KSB7CgogICAgICAgICAgLy8gVGVsbCBGU04gdmlzdWFsaXplciB3ZSd2ZSBhZGRlZCBhIGZpbGUuCiAgICAgICAgICBpZiAoZnNuXykgewogICAgICAgICAgICBmc25fLmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2Uoe2NtZDogJ3RvdWNoJywgZGF0YTogZmlsZS5uYW1lfSwgbG9jYXRpb24ub3JpZ2luKTsKICAgICAgICAgIH0KICAgICAgICAgIAogICAgICAgICAgZmlsZUVudHJ5LmNyZWF0ZVdyaXRlcihmdW5jdGlvbihmaWxlV3JpdGVyKSB7CiAgICAgICAgICAgIGZpbGVXcml0ZXIud3JpdGUoZmlsZSk7CiAgICAgICAgICB9LCBlcnJvckhhbmRsZXJfKTsKICAgICAgICB9LCBlcnJvckhhbmRsZXJfKTsKICAgICAgfSk7CiAgICB9LAogICAgdG9nZ2xlM0RWaWV3OiB0b2dnbGUzRFZpZXdfLAogICAgc2VsZWN0RmlsZTogc2VsZWN0RmlsZV8KICB9Cn07Cgo="></script>
-->
<script id="script_terminal_js" >
/*
Copyright 2011 Google Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Author: Eric Bidelman (ericbidelman@chromium.org)
*/
var util = util || {};
util.toArray = function(list) {
return Array.prototype.slice.call(list || [], 0);
};
// Cross-browser impl to get document's height.
util.getDocHeight = function() {
var d = document;
return Math.max(
Math.max(d.body.scrollHeight, d.documentElement.scrollHeight),
Math.max(d.body.offsetHeight, d.documentElement.offsetHeight),
Math.max(d.body.clientHeight, d.documentElement.clientHeight)
);
};
// TODO(ericbidelman): add fallback to html5 audio.
function Sound(opt_loop) {
var self_ = this;
var context_ = null;
var source_ = null;
var loop_ = opt_loop || false;
window.AudioContext = window.AudioContext || window.webkitAudioContext;
if (window.AudioContext) {
context_ = new window.AudioContext();
}
this.load = function(url, mixToMono, opt_callback) {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'arraybuffer';
xhr.onload = function() {
if (context_) {
/*self_.sample = context_.createBuffer(this.response, mixToMono);
if (opt_callback) {
opt_callback();
}
*/
context_.decodeAudioData(this.response, function(audioBuffer) {
self_.sample = audioBuffer;
opt_callback && opt_callback();
}, function(e) {
console.log(e);
});
}
};
xhr.send();
};
this.play = function() {
if (context_) {
source_ = context_.createBufferSource();
source_.buffer = self_.sample;
source_.looping = loop_;
source_.connect(context_.destination);
source_.noteOn(0);
}
};
this.stop = function() {
if (source_) {
source_.noteOff(0);
source_.disconnect(0);
}
};
}
var Terminal = Terminal || function(containerId) {
window.URL = window.URL || window.webkitURL;
window.requestFileSystem = window.requestFileSystem ||
window.webkitRequestFileSystem;
const VERSION_ = '1.0.0';
const CMDS_ = [
'vi', ':', '/', '?', '3d', 'cat', 'cd', 'cp', 'clear', 'date', 'help', 'install', 'ls', 'mkdir',
'mv', 'open', 'pwd', 'rm', 'rmdir', 'theme', 'version', 'who', 'wget'
];
const THEMES_ = ['default', 'cream'];
var fs_ = null;
var cwd_ = null;
var history_ = [];
var histpos_ = 0;
var histtemp_ = 0;
var timer_ = null;
var magicWord_ = null;
var fsn_ = null;
var is3D_ = false;
// Fire worker to return recursive snapshot of current FS tree.
var worker_ = new Worker('worker.js');
worker_.onmessage = function(e) {
var data = e.data;
if (data.entries) {
fsn_.contentWindow.postMessage({cmd: 'build', data: data.entries},
window.location.origin);
}
if (data.msg) {
output('<div>' + data.msg + '</div>');
}
};
worker_.onerror = function(e) { console.log(e) };
// Create terminal and cache DOM nodes;
var container_ = document.getElementById(containerId);
container_.insertAdjacentHTML('beforeEnd',
['<output></output>',
'<div id="input-line" class="input-line">',
'<div class="prompt">$></div><div><input class="cmdline" autofocus /></div>',
'</div>'].join(''));
var cmdLine_ = container_.querySelector('#input-line .cmdline');
var output_ = container_.querySelector('output');
var interlace_ = document.querySelector('.interlace');
var bell_ = new Sound(false);
bell_.load('beep.mp3', false);
// Hackery to resize the interlace background image as the container grows.
output_.addEventListener('DOMSubtreeModified', function(e) {
var docHeight = util.getDocHeight();
document.documentElement.style.height = docHeight + 'px';
//document.body.style.background = '-webkit-radial-gradient(center ' + (Math.round(docHeight / 2)) + 'px, contain, rgba(0,75,0,0.8), black) center center no-repeat, black';
interlace_.style.height = docHeight + 'px';
setTimeout(function() { // Need this wrapped in a setTimeout. Chrome is jupming to top :(
//window.scrollTo(0, docHeight);
cmdLine_.scrollIntoView();
}, 0);
//window.scrollTo(0, docHeight);
}, false);
output_.addEventListener('click', function(e) {
var el = e.target;
if (el.classList.contains('file') || el.classList.contains('folder')) {
cmdLine_.value += ' ' + el.textContent;
}
}, false);
window.addEventListener('click', function(e) {
//if (!document.body.classList.contains('offscreen')) {
cmdLine_.focus();
//}
}, false);
// Always force text cursor to end of input line.
cmdLine_.addEventListener('click', inputTextClick_, false);
// Handle up/down key presses for shell history and enter for new command.
cmdLine_.addEventListener('keydown', keyboardShortcutHandler_, false);
cmdLine_.addEventListener('keyup', historyHandler_, false); // keyup needed for input blinker to appear at end of input.
cmdLine_.addEventListener('keydown', processNewCommand_, false);
/*window.addEventListener('beforeunload', function(e) {
return "Don't leave me!";
}, false);*/
function inputTextClick_(e) {
this.value = this.value;
}
function keyboardShortcutHandler_(e) {
// Toggle CRT screen flicker.
if ((e.ctrlKey || e.metaKey) && e.keyCode == 83) { // crtl+s
container_.classList.toggle('flicker');
output('<div>Screen flicker: ' +
(container_.classList.contains('flicker') ? 'on' : 'off') +
'</div>');
e.preventDefault();
e.stopPropagation();
}
}
function selectFile_(el) {
alert(el)
}
function historyHandler_(e) { // Tab needs to be keydown.
if (history_.length) {
if (e.keyCode == 38 || e.keyCode == 40) {
if (history_[histpos_]) {
history_[histpos_] = this.value;
} else {
histtemp_ = this.value;
}
}
if (e.keyCode == 38) { // up
histpos_--;
if (histpos_ < 0) {
histpos_ = 0;
}
} else if (e.keyCode == 40) { // down
histpos_++;
if (histpos_ > history_.length) {
histpos_ = history_.length;
}
}
if (e.keyCode == 38 || e.keyCode == 40) {
this.value = history_[histpos_] ? history_[histpos_] : histtemp_;
this.value = this.value; // Sets cursor to end of input.
}
}
}
function processNewCommand_(e) {
// Beep on backspace and no value on command line.
if (!this.value && e.keyCode == 8) {
bell_.stop();
bell_.play();
return;
}
if (e.keyCode == 9) { // Tab
e.preventDefault();
// TODO(ericbidelman): Implement tab suggest.
} else if (e.keyCode == 13) { // enter
// Save shell history.
if (this.value) {
history_[history_.length] = this.value;
histpos_ = history_.length;
}
// Duplicate current input and append to output section.
var line = this.parentNode.parentNode.cloneNode(true);
line.removeAttribute('id')
line.classList.add('line');
var input = line.querySelector('input.cmdline');
input.autofocus = false;
input.readOnly = true;
output_.appendChild(line);
// Parse out command, args, and trim off whitespace.
// TODO(ericbidelman): Support multiple comma separated commands.
if (this.value && this.value.trim()) {
var args = this.value.split(' ').filter(function(val, i) {
return val;
});
var cmd = args[0].toLowerCase();
args = args.splice(1); // Remove cmd from arg list.
}
switch (cmd) {
case '3d':
clear_(this);
output('Hold on to your butts!');
toggle3DView_();
break;
case 'cat':
var fileName = args.join(' ');
if (!fileName) {
output('usage: ' + cmd + ' filename');
break;
}
read_(cmd, fileName, function(result) {
output('<pre>' + result + '</pre>');
});
break;
case 'clear':
clear_(this);
return;
case 'date':
output((new Date()).toLocaleString());
break;
case 'exit':
if (is3D_) {
toggle3DView_();
}
if (timer_ != null) {
magicWord_.stop();
clearInterval(timer_);
}
break;
case 'help':
output('<div class="ls-files">' + CMDS_.join('<br>') + '</div>');
output('<p>Add files by dragging them from your desktop.</p>');
break;
case 'install':
// Check is installed.
if (window.chrome && window.chrome.app) {
if (!window.chrome.app.isInstalled) {
try {
chrome.app.install();
} catch(e) {
alert(e + '\nEnable is about:flags');
}
} else {
output('This app is already installed.');
}
}
break;
case 'ls':
ls_(function(entries) {
if (entries.length) {
var html = formatColumns_(entries);
util.toArray(entries).forEach(function(entry, i) {
html.push(
'<span class="', entry.isDirectory ? 'folder' : 'file',
'">', entry.name, '</span><br>');
});
html.push('</div>');
output(html.join(''));
}
});
break;
case 'pwd':
output(cwd_.fullPath);
break;
case 'cd':
var dest = args.join(' ') || '/';
cwd_.getDirectory(dest, {}, function(dirEntry) {
cwd_ = dirEntry;
output('<div>' + dirEntry.fullPath + '</div>');
// Tell FSN visualizer that we're cd'ing.
if (fsn_) {
fsn_.contentWindow.postMessage({cmd: 'cd', data: dest}, location.origin);
}
}, function(e) { invalidOpForEntryType_(e, cmd, dest); });
break;
case 'mkdir':
var dashP = false;
var index = args.indexOf('-p');
if (index != -1) {
args.splice(index, 1);
dashP = true;
}
if (!args.length) {
output('usage: ' + cmd + ' [-p] directory<br>');
break;
}
// Create each directory passed as an argument.
args.forEach(function(dirName, i) {
if (dashP) {
var folders = dirName.split('/');
// Throw out './' or '/' if present on the beginning of our path.
if (folders[0] == '.' || folders[0] == '') {
folders = folders.slice(1);
}
createDir_(cwd_, folders);
} else {
cwd_.getDirectory(dirName, {create: true, exclusive: true}, function() {
// Tell FSN visualizer that we're mkdir'ing.
if (fsn_) {
fsn_.contentWindow.postMessage({cmd: 'mkdir', data: dirName}, location.origin);
}
}, function(e) { invalidOpForEntryType_(e, cmd, dirName); });
}
});
break;
case 'cp':
case 'mv':
var src = args[0];
var dest = args[1];
if (!src || !dest) {
output(['usage: ', cmd, ' source target<br>',
' ', cmd,
' source directory/'].join(''));
break;
}
var runAction = function(cmd, srcDirEntry, destDirEntry, opt_newName) {
var newName = opt_newName || null;
if (cmd == 'mv') {
srcDirEntry.moveTo(destDirEntry, newName);
} else {
srcDirEntry.copyTo(destDirEntry, newName);
}
};
// Moving to a folder? (e.g. second arg ends in '/').
if (dest[dest.length - 1] == '/') {
cwd_.getDirectory(src, {}, function(srcDirEntry) {
// Create blacklist for dirs we can't re-create.
var create = [
'.', './', '..', '../', '/'].indexOf(dest) != -1 ? false : true;
cwd_.getDirectory(dest, {create: create}, function(destDirEntry) {
runAction(cmd, srcDirEntry, destDirEntry);
}, errorHandler_);
}, function(e) {
// Try the src entry as a file instead.
cwd_.getFile(src, {}, function(srcDirEntry) {
cwd_.getDirectory(dest, {}, function(destDirEntry) {
runAction(cmd, srcDirEntry, destDirEntry);
}, errorHandler_);
}, errorHandler_);
});
} else { // Treat src/destination as files.
cwd_.getFile(src, {}, function(srcFileEntry) {
srcFileEntry.getParent(function(parentDirEntry) {
runAction(cmd, srcFileEntry, parentDirEntry, dest);
}, errorHandler_);
}, errorHandler_);
}
break;
case 'open':
var fileName = args.join(' ');
if (!fileName) {
output('usage: ' + cmd + ' filename');
break;
}
open_(cmd, fileName, function(fileEntry) {
var myWin = window.open(fileEntry.toURL(), 'mywin');
});
break;
case 'init':
if (worker_) {
worker_.postMessage({cmd: 'init', type: type_, size: size_});
}
break;
case 'rm':
// Remove recursively? If so, remove the flag(s) from the arg list.
var recursive = false;
['-r', '-f', '-rf', '-fr'].forEach(function(arg, i) {
var index = args.indexOf(arg);
if (index != -1) {
args.splice(index, 1);
recursive = true;
}
});
// Remove each file passed as an argument.
args.forEach(function(fileName, i) {
cwd_.getFile(fileName, {}, function(fileEntry) {
fileEntry.remove(function() {
// Tell FSN visualizer that we're rm'ing.
if (fsn_) {
fsn_.contentWindow.postMessage({cmd: 'rm', data: fileName}, location.origin);
}
}, errorHandler_);
}, function(e) {
if (recursive && e.code == FileError.TYPE_MISMATCH_ERR) {
cwd_.getDirectory(fileName, {}, function(dirEntry) {
dirEntry.removeRecursively(null, errorHandler_);
}, errorHandler_);
} else if (e.code == FileError.INVALID_STATE_ERR) {
output(cmd + ': ' + fileName + ': is a directory<br>');
} else {
errorHandler_(e);
}
});
});
break;
case 'rmdir':
// Remove each directory passed as an argument.
args.forEach(function(dirName, i) {
cwd_.getDirectory(dirName, {}, function(dirEntry) {
dirEntry.remove(function() {
// Tell FSN visualizer that we're rmdir'ing.
if (fsn_) {
fsn_.contentWindow.postMessage({cmd: 'rm', data: dirName}, location.origin);
}
}, function(e) {
if (e.code == FileError.INVALID_MODIFICATION_ERR) {
output(cmd + ': ' + dirName + ': Directory not empty<br>');
} else {
errorHandler_(e);
}
});
}, function(e) { invalidOpForEntryType_(e, cmd, dirName); });
});
break;
case 'sudo':
if (timer_ != null) {
magicWord_.stop();
clearInterval(timer_);
}
if (!magicWord_) {
magicWord_ = new Sound(true);
magicWord_.load('magic_word.mp3', false, function() {
magicWord_.play();
});
} else {
magicWord_.play();
}
timer_ = setInterval(function() {
output("<div>YOU DIDN'T SAY THE MAGIC WORD!</div>");
}, 100);
break;
case 'theme':
var theme = args.join(' ');
if (!theme) {
output(['usage: ', cmd, ' ' + THEMES_.join(',')].join(''));
} else {
if (THEMES_.indexOf(theme) != -1) {
setTheme_(theme);
} else {
output('Error - Unrecognized theme used');
}
}
break;
case 'vi':
case 'vi':
alert( "vi" );
// output(VERSION_);
break;
case ':':
alert( ":" );
break;
case '/':
alert( "/" );
break;
case '?':
alert( "?" );
break;
case 'version':
case 'ver':
output(VERSION_);
break;
case 'wget':
var url = args[0];
if (!url) {
output(['usage: ', cmd, ' missing URL'].join(''));
break;
} else if (url.search('^http://') == -1) {
url = 'http://' + url;
}
var xhr = new XMLHttpRequest();
xhr.onload = function(e) {
if (this.status == 200 && this.readyState == 4) {
output('<textarea>' + this.response + '</textarea>');
} else {
output('ERROR: ' + this.status + ' ' + this.statusText);
}
};
xhr.onerror = function(e) {
output('ERROR: ' + this.status + ' ' + this.statusText);
output('Could not fetch ' + url);
};
xhr.open('GET', url, true);
xhr.send();
break;
case 'who':
output(document.title +
' - By: jkwii <adminiwii@ko0.us> & Eric Bidelman <ericbidelman@chromium.org>');
break;
default:
if (cmd) {
output(cmd + ': command not found');
}
};
this.value = ''; // Clear/setup line for next input.
}
}
function formatColumns_(entries) {
var maxName = entries[0].name;
util.toArray(entries).forEach(function(entry, i) {
if (entry.name.length > maxName.length) {
maxName = entry.name;
}
});
// If we have 3 or less entries, shorten the output container's height.
// 15px height with a monospace font-size of ~12px;
var height = entries.length == 1 ? 'height: ' + (entries.length * 30) + 'px;' :
entries.length <= 3 ? 'height: ' + (entries.length * 18) + 'px;' : '';
// ~12px monospace font yields ~8px screen width.
var colWidth = maxName.length * 16;//;8;
return ['<div class="ls-files" style="-webkit-column-width:',
colWidth, 'px;', height, '">'];
}
function invalidOpForEntryType_(e, cmd, dest) {
if (e.code == FileError.NOT_FOUND_ERR) {
output(cmd + ': ' + dest + ': No such file or directory<br>');
} else if (e.code == FileError.INVALID_STATE_ERR) {
output(cmd + ': ' + dest + ': Not a directory<br>');
} else if (e.code == FileError.INVALID_MODIFICATION_ERR) {
output(cmd + ': ' + dest + ': File already exists<br>');
} else {
errorHandler_(e);
}
}
function errorHandler_(e) {
var msg = '';
switch (e.code) {
case FileError.QUOTA_EXCEEDED_ERR:
msg = 'QUOTA_EXCEEDED_ERR';
break;
case FileError.NOT_FOUND_ERR:
msg = 'NOT_FOUND_ERR';
break;
case FileError.SECURITY_ERR:
msg = 'SECURITY_ERR';
break;
case FileError.INVALID_MODIFICATION_ERR:
msg = 'INVALID_MODIFICATION_ERR';
break;
case FileError.INVALID_STATE_ERR:
msg = 'INVALID_STATE_ERR';
break;
default:
msg = 'Unknown Error';
break;
};
output('<div>Error: ' + msg + '</div>');
}
function createDir_(rootDirEntry, folders, opt_errorCallback) {
var errorCallback = opt_errorCallback || errorHandler_;
rootDirEntry.getDirectory(folders[0], {create: true}, function(dirEntry) {
// Recursively add the new subfolder if we still have a subfolder to create.
if (folders.length) {
createDir_(dirEntry, folders.slice(1));
}
}, errorCallback);
}
function open_(cmd, path, successCallback) {
if (!fs_) {
return;
}
cwd_.getFile(path, {}, successCallback, function(e) {
if (e.code == FileError.NOT_FOUND_ERR) {
output(cmd + ': ' + path + ': No such file or directory<br>');
}
});
}
function read_(cmd, path, successCallback) {
if (!fs_) {
return;
}
cwd_.getFile(path, {}, function(fileEntry) {
fileEntry.file(function(file) {
var reader = new FileReader();
reader.onloadend = function(e) {
successCallback(this.result);
};
reader.readAsText(file);
}, errorHandler_);
}, function(e) {
if (e.code == FileError.INVALID_STATE_ERR) {
output(cmd + ': ' + path + ': is a directory<br>');
} else if (e.code == FileError.NOT_FOUND_ERR) {
output(cmd + ': ' + path + ': No such file or directory<br>');
}
});
}
function ls_(successCallback) {
if (!fs_) {
return;
}
// Read contents of current working directory. According to spec, need to
// keep calling readEntries() until length of result array is 0. We're
// guarenteed the same entry won't be returned again.
var entries = [];
var reader = cwd_.createReader();
var readEntries = function() {
reader.readEntries(function(results) {
if (!results.length) {
entries = entries.sort();
successCallback(entries);
} else {
entries = entries.concat(util.toArray(results));
readEntries();
}
}, errorHandler_);
};
readEntries();
}
function clear_(input) {
output_.innerHTML = '';
input.value = '';
document.documentElement.style.height = '100%';
interlace_.style.height = '100%';
}
function setTheme_(theme) {
var currentUrl = document.location.pathname;
if (!theme || theme == 'default') {
//history.replaceState({}, '', currentUrl);
localStorage.removeItem('theme');
document.body.className = '';
return;
}
if (theme) {
document.body.classList.add(theme);
localStorage.theme = theme;
//history.replaceState({}, '', currentUrl + '#theme=' + theme);
}
}
function toggle3DView_() {
var body = document.body;
body.classList.toggle('offscreen');
is3D_ = !is3D_;
if (body.classList.contains('offscreen')) {
container_.style.webkitTransform =
'translateY(' + (util.getDocHeight() - 175) + 'px)';
var transEnd_ = function(e) {
var iframe = document.createElement('iframe');
iframe.id = 'fsn';
iframe.src = '../fsn/fsn_proto.html';
fsn_ = body.insertBefore(iframe, body.firstElementChild);
iframe.contentWindow.onload = function() {
worker_.postMessage({cmd: 'read', type: type_, size: size_});
}
container_.removeEventListener('webkitTransitionEnd', transEnd_, false);
};
container_.addEventListener('webkitTransitionEnd', transEnd_, false);
} else {
container_.style.webkitTransform = 'translateY(0)';
body.removeChild(fsn_);
fsn_ = null;
}
}
function output(html) {
output_.insertAdjacentHTML('beforeEnd', html);
//output_.scrollIntoView();
cmdLine_.scrollIntoView();
}
return {
initFS: function(persistent, size) {
output('<div>Welcome to ' + document.title +
'! (v' + VERSION_ + ')</div>');
output((new Date()).toLocaleString());
output('<p>Documentation: type "help"</p>');
if (!!!window.requestFileSystem) {
output('<div>Sorry! The FileSystem APIs are not available in your browser.</div>');
return;
}
var type = persistent ? window.PERSISTENT : window.TEMPORARY;
window.requestFileSystem(type, size, function(filesystem) {
fs_ = filesystem;
cwd_ = fs_.root;
type_ = type;
size_ = size;
// If we get this far, attempt to create a folder to test if the
// --unlimited-quota-for-files fag is set.
cwd_.getDirectory('testquotaforfsfolder', {create: true}, function(dirEntry) {
dirEntry.remove(function() { // If successfully created, just delete it.
// noop.
});
}, function(e) {
if (e.code == FileError.QUOTA_EXCEEDED_ERR) {
output('ERROR: Write access to the FileSystem is unavailable.<br>');
output('Type "install" or run Chrome with the --unlimited-quota-for-files flag.');
} else {
errorHandler_(e);
}
});
}, errorHandler_);
},
output: output,
setTheme: setTheme_,
getCmdLine: function() { return cmdLine_; },
addDroppedFiles: function(files) {
util.toArray(files).forEach(function(file, i) {
cwd_.getFile(file.name, {create: true, exclusive: true}, function(fileEntry) {
// Tell FSN visualizer we've added a file.
if (fsn_) {
fsn_.contentWindow.postMessage({cmd: 'touch', data: file.name}, location.origin);
}
fileEntry.createWriter(function(fileWriter) {
fileWriter.write(file);
}, errorHandler_);
}, errorHandler_);
});
},
toggle3DView: toggle3DView_,
selectFile: selectFile_
}
};
</script>
<script>
function toggleHelp() {
document.querySelector('.help').classList.toggle('hidden');
document.body.classList.toggle('dim');
}
(function() {
var term = new Terminal('container');
term.initFS(false, 1024 * 1024);
if (document.location.hash) {
var theme = document.location.hash.substring(1).split('=')[1];
term.setTheme(theme);
} else if (localStorage.theme) {
term.setTheme(localStorage.theme);
}
document.body.addEventListener('keydown', function(e) {
if (e.keyCode == 'h' ) { // help
toggleHelp();
e.stopPropagation();
e.preventDefault();
}
if (e.keyCode == 27) { // Esc
alert( "esc" );
// toggleHelp();
e.stopPropagation();
e.preventDefault();
}
if (e.keyCode == ":" ) { // colon
alert( ":" );
}
if (e.keyCode == "/" ) { // slash
alert( "/" );
}
if (e.keyCode == "?" ) { // question
alert( "?" );
}
}, false);
// Setup the DnD listeners for file drop.
document.body.addEventListener('dragenter', function(e) {
e.stopPropagation();
e.preventDefault();
this.classList.add('dropping');
}, false);
document.body.addEventListener('dragover', function(e) {
e.stopPropagation();
e.preventDefault();
e.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.
}, false);
document.body.addEventListener('dragleave', function(e) {
this.classList.remove('dropping');
}, false);
document.body.addEventListener('drop', function(e) {
e.stopPropagation();
e.preventDefault();
this.classList.remove('dropping');
term.addDroppedFiles(e.dataTransfer.files);
term.output('<div>File(s) added!</div>');
}, false);
})();
</script>
<!--
<script>
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-23384572-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
-->
</body>
</html>
<!--
Copyright 2011 Google Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Author: Eric Bidelman (ericbidelman@chromium.org)
-->
//
koh5_pano
Drag mouse to navigate.
Navigation
- Left/Right Mouse drag: Changes camera heading.
- Up/Sown Mouse drag: Changes camera pitch.
- Scroll wheel: Changes camera field of view.
- I-Key: Displays Info panel with canvas size, image size and FPS.
17.Aug.2010, Martin Wengenmayer