biojs-io-wig
Version:
192 lines (155 loc) • 15.2 kB
JavaScript
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
biojsiowig = require('./index');
},{"./index":2}],2:[function(require,module,exports){
module.exports = require("./lib/biojsiowig");
},{"./lib/biojsiowig":3}],3:[function(require,module,exports){
/*
* biojs-io-wig
* https://github.com/anilthanki/biojs-io-wig
*
* Copyright (c) 2014 Anil Thanki
* Licensed under the Apache 2 license.
*/
/**
@class biojsiowig
*/
/**
* Private Methods
*/
/*
* Public Methods
*/
/**
* Method responsible to say Hello
*
* @example
*
* biojsiowig.getRef(wig_data);
*
* @method getRef
* @param {String} data file
* @return {String[]} Returns chromosome list
*/
var wig = { }
/**
* @method getRef
* @param {String} data file
* @return {String[]} Returns chromosome list
*/
module.exports.hello = function(name){
return "hello " + name;
};
module.exports.getRef = function(data){
var max = 0
var data_split = data.split("\n")
var data_len = data_split.length;
var chrom = [];
if (data.indexOf("variableStep") >= 0 || data.indexOf("fixedStep") >= 0) {
for (var i = 0; i < data_len; i++) {
if (data_split[i].indexOf("chrom") >= 0) {
var chr = data_split[i].split(/\s+/)[1].split("=")[1];
if (chrom.indexOf(chr) < 0) {
chrom.push(chr);
}
}
}
} else {
alert("Unknown format detected")
}
return chrom;
};
module.exports.parse = function(data, ref_chr) {
var self = this;
var flag = false;
var wig_file = [];
var max = 0
var data_split = data.split("\n")
var data_len = data_split.length;
var span = null;
var ref = false;
if (data.indexOf("variableStep") >= 0) {
var data_split = data.split("\n")
var data_len = data_split.length;
for (var i = 0; i < data_len; i++) {
if (data_split[i].indexOf("chrom") >= 0) {
var chr = data_split[i].split(/\s+/)[1].split("=")[1];
flag = false;
if (chr == ref_chr) {
if (data_split[i].indexOf("span") >= 0) {
span = data_split[i].split(/\s+/)[2].split("=")[1]
}
flag = true;
ref = true;
}
}
else if (data_split[i].indexOf("#") >= 0) {
continue;
} else if (flag) {
var temp_data = data_split[i].split(/\s+/);
wig_file.push([temp_data[0], temp_data[1], span]);
if (parseInt(temp_data[1]) > parseInt(max)) {
max = temp_data[1];
}
}
}
if (ref == false) {
alert("Selected reference not found")
} else if (wig_file.length > 0) {
var start = parseInt(wig_file[0][0]);//config.requestedStart;
var stop = parseInt(wig_file[wig_file.length - 1][0]);
}
else {
alert("No data for selected reference")
}
}
else if (data.indexOf("fixedStep") >= 0) {
var data_split = data.split("\n")
var data_len = data_split.length;
var start = null;
var step = null;
var ref = false;
for (var i = 0; i < data_len; i++) {
if (data_split[i].indexOf("chrom") >= 0) {
var line = data_split[i].split(/\s+/);
var chr = data_split[i].split(/\s+/)[1].split("=")[1];
flag = false;
if (chr == ref_chr) {
start = line[2].split("=")[1];
step = line[3].split("=")[1];
if (data_split[i].indexOf("span") >= 0) {
span = line[4].split("=")[1]
}
flag = true;
ref = true;
}
}
else if (data_split[i].indexOf("#") >= 0) {
continue;
} else if (flag) {
var temp_data = data_split[i];
start = parseInt(start) + parseInt(step)
wig_file.push([start, temp_data, span]);
if (parseInt(temp_data) > parseInt(max)) {
max = temp_data;
}
}
}
if (ref == false) {
alert("Selected reference not found")
} else if (wig_file.length > 0) {
var start = parseInt(wig_file[0][0]);//config.requestedStart;
var stop = parseInt(wig_file[wig_file.length - 1][0]);
} else if (start == null || step == null) {
alert("Unknown format detected")
}
else {
alert("No data for selected reference")
}
}
else {
alert("Unknown format detected")
}
return wig_file;
}
},{}]},{},[1])
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy90aGFua2lhL2Jpb2pzMi9iaW9qcy1pby13aWcvbm9kZV9tb2R1bGVzL2d1bHAtYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYnJvd3Nlci1wYWNrL19wcmVsdWRlLmpzIiwiL1VzZXJzL3RoYW5raWEvYmlvanMyL2Jpb2pzLWlvLXdpZy9mYWtlX2JhZWNiYjllLmpzIiwiL1VzZXJzL3RoYW5raWEvYmlvanMyL2Jpb2pzLWlvLXdpZy9pbmRleC5qcyIsIi9Vc2Vycy90aGFua2lhL2Jpb2pzMi9iaW9qcy1pby13aWcvbGliL2Jpb2pzaW93aWcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBOztBQ0RBO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpfXZhciBmPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChmLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGYsZi5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJiaW9qc2lvd2lnID0gcmVxdWlyZSgnLi9pbmRleCcpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi9saWIvYmlvanNpb3dpZ1wiKTtcbiIsIi8qXG4gKiBiaW9qcy1pby13aWdcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmlsdGhhbmtpL2Jpb2pzLWlvLXdpZ1xuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNCBBbmlsIFRoYW5raVxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSAyIGxpY2Vuc2UuXG4gKi9cblxuLyoqXG5AY2xhc3MgYmlvanNpb3dpZ1xuICovXG5cbi8qKlxuICogUHJpdmF0ZSBNZXRob2RzXG4gKi9cblxuLypcbiAqIFB1YmxpYyBNZXRob2RzXG4gKi9cblxuLyoqXG4gKiBNZXRob2QgcmVzcG9uc2libGUgdG8gc2F5IEhlbGxvXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgYmlvanNpb3dpZy5nZXRSZWYod2lnX2RhdGEpO1xuICpcbiAqIEBtZXRob2QgZ2V0UmVmXG4gKiBAcGFyYW0ge1N0cmluZ30gZGF0YSBmaWxlXG4gKiBAcmV0dXJuIHtTdHJpbmdbXX0gUmV0dXJucyBjaHJvbW9zb21lIGxpc3RcbiAqL1xuXG52YXIgd2lnID0geyB9XG5cblxuIC8qKlxuICogQG1ldGhvZCBnZXRSZWZcbiAqIEBwYXJhbSB7U3RyaW5nfSBkYXRhIGZpbGVcbiAqIEByZXR1cm4ge1N0cmluZ1tdfSBSZXR1cm5zIGNocm9tb3NvbWUgbGlzdFxuICovXG5cblxubW9kdWxlLmV4cG9ydHMuaGVsbG8gPSBmdW5jdGlvbihuYW1lKXtcbiAgIHJldHVybiBcImhlbGxvIFwiICsgbmFtZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzLmdldFJlZiA9IGZ1bmN0aW9uKGRhdGEpe1xuXHR2YXIgbWF4ID0gMFxuICAgIHZhciBkYXRhX3NwbGl0ID0gZGF0YS5zcGxpdChcIlxcblwiKVxuICAgIHZhciBkYXRhX2xlbiA9IGRhdGFfc3BsaXQubGVuZ3RoO1xuICAgIHZhciBjaHJvbSA9IFtdO1xuICAgIGlmIChkYXRhLmluZGV4T2YoXCJ2YXJpYWJsZVN0ZXBcIikgPj0gMCB8fCBkYXRhLmluZGV4T2YoXCJmaXhlZFN0ZXBcIikgPj0gMCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGFfbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChkYXRhX3NwbGl0W2ldLmluZGV4T2YoXCJjaHJvbVwiKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNociA9IGRhdGFfc3BsaXRbaV0uc3BsaXQoL1xccysvKVsxXS5zcGxpdChcIj1cIilbMV07XG4gICAgICAgICAgICAgICAgaWYgKGNocm9tLmluZGV4T2YoY2hyKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY2hyb20ucHVzaChjaHIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGFsZXJ0KFwiVW5rbm93biBmb3JtYXQgZGV0ZWN0ZWRcIilcbiAgICB9XG5cdHJldHVybiBjaHJvbTtcbn07XG5cbm1vZHVsZS5leHBvcnRzLnBhcnNlID0gZnVuY3Rpb24oZGF0YSwgcmVmX2Nocikge1xuICAgXHQgIFx0dmFyIHNlbGYgPSB0aGlzO1xuXHRcdHZhciBmbGFnID0gZmFsc2U7XG5cbiAgICAgICAgdmFyIHdpZ19maWxlID0gW107XG4gICAgICAgIHZhciBtYXggPSAwXG4gICAgICAgIHZhciBkYXRhX3NwbGl0ID0gZGF0YS5zcGxpdChcIlxcblwiKVxuICAgICAgICB2YXIgZGF0YV9sZW4gPSBkYXRhX3NwbGl0Lmxlbmd0aDtcbiAgICAgICAgdmFyIHNwYW4gPSBudWxsO1xuICAgICAgICB2YXIgcmVmID0gZmFsc2U7XG4gICAgICAgIGlmIChkYXRhLmluZGV4T2YoXCJ2YXJpYWJsZVN0ZXBcIikgPj0gMCkge1xuXG4gICAgICAgICAgICB2YXIgZGF0YV9zcGxpdCA9IGRhdGEuc3BsaXQoXCJcXG5cIilcbiAgICAgICAgICAgIHZhciBkYXRhX2xlbiA9IGRhdGFfc3BsaXQubGVuZ3RoO1xuXG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YV9sZW47IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhX3NwbGl0W2ldLmluZGV4T2YoXCJjaHJvbVwiKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjaHIgPSBkYXRhX3NwbGl0W2ldLnNwbGl0KC9cXHMrLylbMV0uc3BsaXQoXCI9XCIpWzFdO1xuICAgICAgICAgICAgICAgICAgICBmbGFnID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaHIgPT0gcmVmX2Nocikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFfc3BsaXRbaV0uaW5kZXhPZihcInNwYW5cIikgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4gPSBkYXRhX3NwbGl0W2ldLnNwbGl0KC9cXHMrLylbMl0uc3BsaXQoXCI9XCIpWzFdXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFnID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZGF0YV9zcGxpdFtpXS5pbmRleE9mKFwiI1wiKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmxhZykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcF9kYXRhID0gZGF0YV9zcGxpdFtpXS5zcGxpdCgvXFxzKy8pO1xuICAgICAgICAgICAgICAgICAgICB3aWdfZmlsZS5wdXNoKFt0ZW1wX2RhdGFbMF0sIHRlbXBfZGF0YVsxXSwgc3Bhbl0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQodGVtcF9kYXRhWzFdKSA+IHBhcnNlSW50KG1heCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heCA9IHRlbXBfZGF0YVsxXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuXG4gICAgICAgICAgICBpZiAocmVmID09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgYWxlcnQoXCJTZWxlY3RlZCByZWZlcmVuY2Ugbm90IGZvdW5kXCIpXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHdpZ19maWxlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSBwYXJzZUludCh3aWdfZmlsZVswXVswXSk7Ly9jb25maWcucmVxdWVzdGVkU3RhcnQ7XG4gICAgICAgICAgICAgICAgdmFyIHN0b3AgPSBwYXJzZUludCh3aWdfZmlsZVt3aWdfZmlsZS5sZW5ndGggLSAxXVswXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhbGVydChcIk5vIGRhdGEgZm9yIHNlbGVjdGVkIHJlZmVyZW5jZVwiKVxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLmluZGV4T2YoXCJmaXhlZFN0ZXBcIikgPj0gMCkge1xuICAgICAgICAgICAgdmFyIGRhdGFfc3BsaXQgPSBkYXRhLnNwbGl0KFwiXFxuXCIpXG4gICAgICAgICAgICB2YXIgZGF0YV9sZW4gPSBkYXRhX3NwbGl0Lmxlbmd0aDtcbiAgICAgICAgICAgIHZhciBzdGFydCA9IG51bGw7XG4gICAgICAgICAgICB2YXIgc3RlcCA9IG51bGw7XG4gICAgICAgICAgICB2YXIgcmVmID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YV9sZW47IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhX3NwbGl0W2ldLmluZGV4T2YoXCJjaHJvbVwiKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsaW5lID0gZGF0YV9zcGxpdFtpXS5zcGxpdCgvXFxzKy8pO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBjaHIgPSBkYXRhX3NwbGl0W2ldLnNwbGl0KC9cXHMrLylbMV0uc3BsaXQoXCI9XCIpWzFdO1xuICAgICAgICAgICAgICAgICAgICBmbGFnID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNociA9PSByZWZfY2hyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IGxpbmVbMl0uc3BsaXQoXCI9XCIpWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RlcCA9IGxpbmVbM10uc3BsaXQoXCI9XCIpWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFfc3BsaXRbaV0uaW5kZXhPZihcInNwYW5cIikgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4gPSBsaW5lWzRdLnNwbGl0KFwiPVwiKVsxXVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFnID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZGF0YV9zcGxpdFtpXS5pbmRleE9mKFwiI1wiKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmxhZykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcF9kYXRhID0gZGF0YV9zcGxpdFtpXTtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBwYXJzZUludChzdGFydCkgKyBwYXJzZUludChzdGVwKVxuICAgICAgICAgICAgICAgICAgICB3aWdfZmlsZS5wdXNoKFtzdGFydCwgdGVtcF9kYXRhLCBzcGFuXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUludCh0ZW1wX2RhdGEpID4gcGFyc2VJbnQobWF4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF4ID0gdGVtcF9kYXRhO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIGlmIChyZWYgPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBhbGVydChcIlNlbGVjdGVkIHJlZmVyZW5jZSBub3QgZm91bmRcIilcbiAgICAgICAgICAgIH0gZWxzZSBpZiAod2lnX2ZpbGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IHBhcnNlSW50KHdpZ19maWxlWzBdWzBdKTsvL2NvbmZpZy5yZXF1ZXN0ZWRTdGFydDtcbiAgICAgICAgICAgICAgICB2YXIgc3RvcCA9IHBhcnNlSW50KHdpZ19maWxlW3dpZ19maWxlLmxlbmd0aCAtIDFdWzBdKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnQgPT0gbnVsbCB8fCBzdGVwID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBhbGVydChcIlVua25vd24gZm9ybWF0IGRldGVjdGVkXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhbGVydChcIk5vIGRhdGEgZm9yIHNlbGVjdGVkIHJlZmVyZW5jZVwiKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYWxlcnQoXCJVbmtub3duIGZvcm1hdCBkZXRlY3RlZFwiKVxuICAgICAgICB9XG4gICAgXG5cbiAgICByZXR1cm4gd2lnX2ZpbGU7XG59XG5cblxuIFxuXG5cblxuIl19