Skip to content

Instantly share code, notes, and snippets.

@ahdinosaur
Created September 12, 2016 09:02
Show Gist options
  • Save ahdinosaur/d7ae4746a35d7d23cefb578bf448c342 to your computer and use it in GitHub Desktop.
Save ahdinosaur/d7ae4746a35d7d23cefb578bf448c342 to your computer and use it in GitHub Desktop.
requirebin sketch
var pull = require('pull-stream')
var paramap = require('pull-paramap')
pull(
pull.values([1, 2, 3, 4, 5]),
paramap(function (amount, cb) {
pull(
pull.infinite(Math.random),
pull.take(amount),
pull.collect(cb)
)
}),
pull.filter(arr => arr.length > 2),
pull.drain(arr => console.log(arr))
)
setTimeout(function(){
;require=(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);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.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})({"pull-paramap":[function(require,module,exports){
module.exports = function (map, width) {
var reading = false, abort
return function (read) {
var i = 0, j = 0, last = 0
var seen = [], started = false, ended = false, _cb, error
function drain () {
if(_cb) {
var cb = _cb
if(error) {
_cb = null
return cb(error)
}
if(Object.hasOwnProperty.call(seen, j)) {
_cb = null
var data = seen[j]; delete seen[j]; j++
cb(null, data)
if(width) start()
} else if(j >= last && ended) {
_cb = null
cb(true)
}
}
}
function start () {
started = true
if(ended) return drain()
if(reading || width && (i - width >= j)) return
reading = true
read(abort, function (end, data) {
reading = false
if(end) {
last = i; ended = end
drain()
} else {
var k = i++
map(data, function (err, data) {
seen[k] = data
if(err) error = err
drain()
})
if(!ended)
start()
}
})
}
return function (_abort, cb) {
if(_abort)
read(ended = abort = _abort, function (err) {
if(cb) return cb(err)
})
else {
_cb = cb
if(!started) start()
drain()
}
}
}
}
},{}]},{},[])
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2hvbWUvYWRtaW4vYnJvd3NlcmlmeS1jZG4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2Jyb3dzZXItcGFjay9fcHJlbHVkZS5qcyIsImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1hcCwgd2lkdGgpIHtcbiAgdmFyIHJlYWRpbmcgPSBmYWxzZSwgYWJvcnRcbiAgcmV0dXJuIGZ1bmN0aW9uIChyZWFkKSB7XG4gICAgdmFyIGkgPSAwLCBqID0gMCwgbGFzdCA9IDBcbiAgICB2YXIgc2VlbiA9IFtdLCBzdGFydGVkID0gZmFsc2UsIGVuZGVkID0gZmFsc2UsIF9jYiwgZXJyb3JcblxuICAgIGZ1bmN0aW9uIGRyYWluICgpIHtcbiAgICAgIGlmKF9jYikge1xuICAgICAgICB2YXIgY2IgPSBfY2JcbiAgICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgICBfY2IgPSBudWxsXG4gICAgICAgICAgcmV0dXJuIGNiKGVycm9yKVxuICAgICAgICB9XG4gICAgICAgIGlmKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNlZW4sIGopKSB7XG4gICAgICAgICAgX2NiID0gbnVsbFxuICAgICAgICAgIHZhciBkYXRhID0gc2VlbltqXTsgZGVsZXRlIHNlZW5bal07IGorK1xuICAgICAgICAgIGNiKG51bGwsIGRhdGEpXG4gICAgICAgICAgaWYod2lkdGgpIHN0YXJ0KClcbiAgICAgICAgfSBlbHNlIGlmKGogPj0gbGFzdCAmJiBlbmRlZCkge1xuICAgICAgICAgIF9jYiA9IG51bGxcbiAgICAgICAgICBjYih0cnVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnQgKCkge1xuICAgICAgc3RhcnRlZCA9IHRydWVcbiAgICAgIGlmKGVuZGVkKSByZXR1cm4gZHJhaW4oKVxuICAgICAgaWYocmVhZGluZyB8fCB3aWR0aCAmJiAoaSAtIHdpZHRoID49IGopKSByZXR1cm5cbiAgICAgIHJlYWRpbmcgPSB0cnVlXG4gICAgICByZWFkKGFib3J0LCBmdW5jdGlvbiAoZW5kLCBkYXRhKSB7XG4gICAgICAgIHJlYWRpbmcgPSBmYWxzZVxuICAgICAgICBpZihlbmQpIHtcbiAgICAgICAgICBsYXN0ID0gaTsgZW5kZWQgPSBlbmRcbiAgICAgICAgICBkcmFpbigpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGsgPSBpKytcblxuICAgICAgICAgIG1hcChkYXRhLCBmdW5jdGlvbiAoZXJyLCBkYXRhKSB7XG4gICAgICAgICAgICBzZWVuW2tdID0gZGF0YVxuICAgICAgICAgICAgaWYoZXJyKSBlcnJvciA9IGVyclxuICAgICAgICAgICAgZHJhaW4oKVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBpZighZW5kZWQpXG4gICAgICAgICAgICBzdGFydCgpXG5cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKF9hYm9ydCwgY2IpIHtcbiAgICAgIGlmKF9hYm9ydClcbiAgICAgICAgcmVhZChlbmRlZCA9IGFib3J0ID0gX2Fib3J0LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgaWYoY2IpIHJldHVybiBjYihlcnIpXG4gICAgICAgIH0pXG4gICAgICBlbHNlIHtcbiAgICAgICAgX2NiID0gY2JcbiAgICAgICAgaWYoIXN0YXJ0ZWQpIHN0YXJ0KClcbiAgICAgICAgZHJhaW4oKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4iXX0=
require=(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);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.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){
'use strict'
module.exports = function pull (a) {
var length = arguments.length
if (typeof a === 'function' && a.length === 1) {
var args = new Array(length)
for(var i = 0; i < length; i++)
args[i] = arguments[i]
return function (read) {
if (args == null) {
throw new TypeError("partial sink should only be called once!")
}
// Grab the reference after the check, because it's always an array now
// (engines like that kind of consistency).
var ref = args
args = null
// Prioritize common case of small number of pulls.
switch (length) {
case 1: return pull(read, ref[0])
case 2: return pull(read, ref[0], ref[1])
case 3: return pull(read, ref[0], ref[1], ref[2])
case 4: return pull(read, ref[0], ref[1], ref[2], ref[3])
default:
ref.unshift(read)
return pull.apply(null, ref)
}
}
}
var read = a
if (read && typeof read.source === 'function') {
read = read.source
}
for (var i = 1; i < length; i++) {
var s = arguments[i]
if (typeof s === 'function') {
read = s(read)
} else if (s && typeof s === 'object') {
s.sink(read)
read = s.source
}
}
return read
}
},{}],2:[function(require,module,exports){
'use strict'
var reduce = require('./reduce')
module.exports = function collect (cb) {
return reduce(function (arr, item) {
arr.push(item)
return arr
}, [], cb)
}
},{"./reduce":9}],3:[function(require,module,exports){
'use strict'
var reduce = require('./reduce')
module.exports = function concat (cb) {
return reduce(function (a, b) {
return a + b
}, '', cb)
}
},{"./reduce":9}],4:[function(require,module,exports){
'use strict'
module.exports = function drain (op, done) {
var read, abort
function sink (_read) {
read = _read
if(abort) return sink.abort()
//this function is much simpler to write if you
//just use recursion, but by using a while loop
//we do not blow the stack if the stream happens to be sync.
;(function next() {
var loop = true, cbed = false
while(loop) {
cbed = false
read(null, function (end, data) {
cbed = true
if(end = end || abort) {
loop = false
if(done) done(end === true ? null : end)
else if(end && end !== true)
throw end
}
else if(op && false === op(data) || abort) {
loop = false
read(abort || true, done || function () {})
}
else if(!loop){
next()
}
})
if(!cbed) {
loop = false
return
}
}
})()
}
sink.abort = function (err, cb) {
if('function' == typeof err)
cb = err, err = true
abort = err || true
if(read) return read(abort, cb || function () {})
}
return sink
}
},{}],5:[function(require,module,exports){
'use strict'
function id (e) { return e }
var prop = require('../util/prop')
var drain = require('./drain')
module.exports = function find (test, cb) {
var ended = false
if(!cb)
cb = test, test = id
else
test = prop(test) || id
return drain(function (data) {
if(test(data)) {
ended = true
cb(null, data)
return false
}
}, function (err) {
if(ended) return //already called back
cb(err === true ? null : err, null)
})
}
},{"../util/prop":29,"./drain":4}],6:[function(require,module,exports){
'use strict'
module.exports = {
drain: require('./drain'),
onEnd: require('./on-end'),
log: require('./log'),
find: require('./find'),
reduce: require('./reduce'),
collect: require('./collect'),
concat: require('./concat')
}
},{"./collect":2,"./concat":3,"./drain":4,"./find":5,"./log":7,"./on-end":8,"./reduce":9}],7:[function(require,module,exports){
'use strict'
var drain = require('./drain')
module.exports = function log (done) {
return drain(function (data) {
console.log(data)
}, done)
}
},{"./drain":4}],8:[function(require,module,exports){
'use strict'
var drain = require('./drain')
module.exports = function onEnd (done) {
return drain(null, done)
}
},{"./drain":4}],9:[function(require,module,exports){
'use strict'
var drain = require('./drain')
module.exports = function reduce (reducer, acc, cb) {
return drain(function (data) {
acc = reducer(acc, data)
}, function (err) {
cb(err, acc)
})
}
},{"./drain":4}],10:[function(require,module,exports){
'use strict'
module.exports = function count (max) {
var i = 0; max = max || Infinity
return function (end, cb) {
if(end) return cb && cb(end)
if(i > max)
return cb(true)
cb(null, i++)
}
}
},{}],11:[function(require,module,exports){
'use strict'
//a stream that ends immediately.
module.exports = function empty () {
return function (abort, cb) {
cb(true)
}
}
},{}],12:[function(require,module,exports){
'use strict'
//a stream that errors immediately.
module.exports = function error (err) {
return function (abort, cb) {
cb(err)
}
}
},{}],13:[function(require,module,exports){
'use strict'
module.exports = {
keys: require('./keys'),
once: require('./once'),
values: require('./values'),
count: require('./count'),
infinite: require('./infinite'),
empty: require('./empty'),
error: require('./error')
}
},{"./count":10,"./empty":11,"./error":12,"./infinite":14,"./keys":15,"./once":16,"./values":17}],14:[function(require,module,exports){
'use strict'
module.exports = function infinite (generate) {
generate = generate || Math.random
return function (end, cb) {
if(end) return cb && cb(end)
return cb(null, generate())
}
}
},{}],15:[function(require,module,exports){
'use strict'
var values = require('./values')
module.exports = function (object) {
return values(Object.keys(object))
}
},{"./values":17}],16:[function(require,module,exports){
'use strict'
var abortCb = require('../util/abort-cb')
module.exports = function once (value, onAbort) {
return function (abort, cb) {
if(abort)
return abortCb(cb, abort, onAbort)
if(value != null) {
var _value = value; value = null
cb(null, _value)
} else
cb(true)
}
}
},{"../util/abort-cb":28}],17:[function(require,module,exports){
'use strict'
var abortCb = require('../util/abort-cb')
module.exports = function values (array, onAbort) {
if(!array)
return function (abort, cb) {
if(abort) return abortCb(cb, abort, onAbort)
return cb(true)
}
if(!Array.isArray(array))
array = Object.keys(array).map(function (k) {
return array[k]
})
var i = 0
return function (abort, cb) {
if(abort)
return abortCb(cb, abort, onAbort)
if(i >= array.length)
cb(true)
else
cb(null, array[i++])
}
}
},{"../util/abort-cb":28}],18:[function(require,module,exports){
'use strict'
function id (e) { return e }
var prop = require('../util/prop')
module.exports = function asyncMap (map) {
if(!map) return id
map = prop(map)
var busy = false, abortCb, aborted
return function (read) {
return function next (abort, cb) {
if(aborted) return cb(aborted)
if(abort) {
aborted = abort
if(!busy) read(abort, cb)
else read(abort, function () {
//if we are still busy, wait for the mapper to complete.
if(busy) abortCb = cb
else cb(abort)
})
}
else
read(null, function (end, data) {
if(end) cb(end)
else if(aborted) cb(aborted)
else {
busy = true
map(data, function (err, data) {
busy = false
if(aborted) {
cb(aborted)
abortCb(aborted)
}
else if(err) next (err, cb)
else cb(null, data)
})
}
})
}
}
}
},{"../util/prop":29}],19:[function(require,module,exports){
'use strict'
var tester = require('../util/tester')
var filter = require('./filter')
module.exports = function filterNot (test) {
test = tester(test)
return filter(function (data) { return !test(data) })
}
},{"../util/tester":30,"./filter":20}],20:[function(require,module,exports){
'use strict'
var tester = require('../util/tester')
module.exports = function filter (test) {
//regexp
test = tester(test)
return function (read) {
return function next (end, cb) {
var sync, loop = true
while(loop) {
loop = false
sync = true
read(end, function (end, data) {
if(!end && !test(data))
return sync ? loop = true : next(end, cb)
cb(end, data)
})
sync = false
}
}
}
}
},{"../util/tester":30}],21:[function(require,module,exports){
'use strict'
var values = require('../sources/values')
var once = require('../sources/once')
//convert a stream of arrays or streams into just a stream.
module.exports = function flatten () {
return function (read) {
var _read
return function (abort, cb) {
if (abort) { //abort the current stream, and then stream of streams.
_read ? _read(abort, function(err) {
read(err || abort, cb)
}) : read(abort, cb)
}
else if(_read) nextChunk()
else nextStream()
function nextChunk () {
_read(null, function (err, data) {
if (err === true) nextStream()
else if (err) {
read(true, function(abortErr) {
// TODO: what do we do with the abortErr?
cb(err)
})
}
else cb(null, data)
})
}
function nextStream () {
_read = null
read(null, function (end, stream) {
if(end)
return cb(end)
if(Array.isArray(stream) || stream && 'object' === typeof stream)
stream = values(stream)
else if('function' != typeof stream)
stream = once(stream)
_read = stream
nextChunk()
})
}
}
}
}
},{"../sources/once":16,"../sources/values":17}],22:[function(require,module,exports){
'use strict'
module.exports = {
map: require('./map'),
asyncMap: require('./async-map'),
filter: require('./filter'),
filterNot: require('./filter-not'),
through: require('./through'),
take: require('./take'),
unique: require('./unique'),
nonUnique: require('./non-unique'),
flatten: require('./flatten')
}
},{"./async-map":18,"./filter":20,"./filter-not":19,"./flatten":21,"./map":23,"./non-unique":24,"./take":25,"./through":26,"./unique":27}],23:[function(require,module,exports){
'use strict'
function id (e) { return e }
var prop = require('../util/prop')
module.exports = function map (mapper) {
if(!mapper) return id
mapper = prop(mapper)
return function (read) {
return function (abort, cb) {
read(abort, function (end, data) {
try {
data = !end ? mapper(data) : null
} catch (err) {
return read(err, function () {
return cb(err)
})
}
cb(end, data)
})
}
}
}
},{"../util/prop":29}],24:[function(require,module,exports){
'use strict'
var unique = require('./unique')
//passes an item through when you see it for the second time.
module.exports = function nonUnique (field) {
return unique(field, true)
}
},{"./unique":27}],25:[function(require,module,exports){
'use strict'
//read a number of items and then stop.
module.exports = function take (test, opts) {
opts = opts || {}
var last = opts.last || false // whether the first item for which !test(item) should still pass
var ended = false
if('number' === typeof test) {
last = true
var n = test; test = function () {
return --n
}
}
return function (read) {
function terminate (cb) {
read(true, function (err) {
last = false; cb(err || true)
})
}
return function (end, cb) {
if(ended) last ? terminate(cb) : cb(ended)
else if(ended = end) read(ended, cb)
else
read(null, function (end, data) {
if(ended = ended || end) {
//last ? terminate(cb) :
cb(ended)
}
else if(!test(data)) {
ended = true
last ? cb(null, data) : terminate(cb)
}
else
cb(null, data)
})
}
}
}
},{}],26:[function(require,module,exports){
'use strict'
//a pass through stream that doesn't change the value.
module.exports = function through (op, onEnd) {
var a = false
function once (abort) {
if(a || !onEnd) return
a = true
onEnd(abort === true ? null : abort)
}
return function (read) {
return function (end, cb) {
if(end) once(end)
return read(end, function (end, data) {
if(!end) op && op(data)
else once(end)
cb(end, data)
})
}
}
}
},{}],27:[function(require,module,exports){
'use strict'
function id (e) { return e }
var prop = require('../util/prop')
var filter = require('./filter')
//drop items you have already seen.
module.exports = function unique (field, invert) {
field = prop(field) || id
var seen = {}
return filter(function (data) {
var key = field(data)
if(seen[key]) return !!invert //false, by default
else seen[key] = true
return !invert //true by default
})
}
},{"../util/prop":29,"./filter":20}],28:[function(require,module,exports){
module.exports = function abortCb(cb, abort, onAbort) {
cb(abort)
onAbort && onAbort(abort === true ? null: abort)
return
}
},{}],29:[function(require,module,exports){
module.exports = function prop (key) {
return key && (
'string' == typeof key
? function (data) { return data[key] }
: 'object' === typeof key && 'function' === typeof key.exec //regexp
? function (data) { var v = key.exec(data); return v && v[0] }
: key
)
}
},{}],30:[function(require,module,exports){
var prop = require('./prop')
function id (e) { return e }
module.exports = function tester (test) {
return (
'object' === typeof test && 'function' === typeof test.test //regexp
? function (data) { return test.test(data) }
: prop (test) || id
)
}
},{"./prop":29}],"pull-stream":[function(require,module,exports){
'use strict'
var sources = require('./sources')
var sinks = require('./sinks')
var throughs = require('./throughs')
exports = module.exports = require('./pull')
for(var k in sources)
exports[k] = sources[k]
for(var k in throughs)
exports[k] = throughs[k]
for(var k in sinks)
exports[k] = sinks[k]
},{"./pull":1,"./sinks":6,"./sources":13,"./throughs":22}]},{},[])
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2hvbWUvYWRtaW4vYnJvd3NlcmlmeS1jZG4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2Jyb3dzZXItcGFjay9fcHJlbHVkZS5qcyIsInB1bGwuanMiLCJzaW5rcy9jb2xsZWN0LmpzIiwic2lua3MvY29uY2F0LmpzIiwic2lua3MvZHJhaW4uanMiLCJzaW5rcy9maW5kLmpzIiwic2lua3MvaW5kZXguanMiLCJzaW5rcy9sb2cuanMiLCJzaW5rcy9vbi1lbmQuanMiLCJzaW5rcy9yZWR1Y2UuanMiLCJzb3VyY2VzL2NvdW50LmpzIiwic291cmNlcy9lbXB0eS5qcyIsInNvdXJjZXMvZXJyb3IuanMiLCJzb3VyY2VzL2luZGV4LmpzIiwic291cmNlcy9pbmZpbml0ZS5qcyIsInNvdXJjZXMva2V5cy5qcyIsInNvdXJjZXMvb25jZS5qcyIsInNvdXJjZXMvdmFsdWVzLmpzIiwidGhyb3VnaHMvYXN5bmMtbWFwLmpzIiwidGhyb3VnaHMvZmlsdGVyLW5vdC5qcyIsInRocm91Z2hzL2ZpbHRlci5qcyIsInRocm91Z2hzL2ZsYXR0ZW4uanMiLCJ0aHJvdWdocy9pbmRleC5qcyIsInRocm91Z2hzL21hcC5qcyIsInRocm91Z2hzL25vbi11bmlxdWUuanMiLCJ0aHJvdWdocy90YWtlLmpzIiwidGhyb3VnaHMvdGhyb3VnaC5qcyIsInRocm91Z2hzL3VuaXF1ZS5qcyIsInV0aWwvYWJvcnQtY2IuanMiLCJ1dGlsL3Byb3AuanMiLCJ1dGlsL3Rlc3Rlci5qcyIsImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHB1bGwgKGEpIHtcbiAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGhcbiAgaWYgKHR5cGVvZiBhID09PSAnZnVuY3Rpb24nICYmIGEubGVuZ3RoID09PSAxKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuZ3RoKVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcbiAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV1cbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlYWQpIHtcbiAgICAgIGlmIChhcmdzID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInBhcnRpYWwgc2luayBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSFcIilcbiAgICAgIH1cblxuICAgICAgLy8gR3JhYiB0aGUgcmVmZXJlbmNlIGFmdGVyIHRoZSBjaGVjaywgYmVjYXVzZSBpdCdzIGFsd2F5cyBhbiBhcnJheSBub3dcbiAgICAgIC8vIChlbmdpbmVzIGxpa2UgdGhhdCBraW5kIG9mIGNvbnNpc3RlbmN5KS5cbiAgICAgIHZhciByZWYgPSBhcmdzXG4gICAgICBhcmdzID0gbnVsbFxuXG4gICAgICAvLyBQcmlvcml0aXplIGNvbW1vbiBjYXNlIG9mIHNtYWxsIG51bWJlciBvZiBwdWxscy5cbiAgICAgIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgICBjYXNlIDE6IHJldHVybiBwdWxsKHJlYWQsIHJlZlswXSlcbiAgICAgIGNhc2UgMjogcmV0dXJuIHB1bGwocmVhZCwgcmVmWzBdLCByZWZbMV0pXG4gICAgICBjYXNlIDM6IHJldHVybiBwdWxsKHJlYWQsIHJlZlswXSwgcmVmWzFdLCByZWZbMl0pXG4gICAgICBjYXNlIDQ6IHJldHVybiBwdWxsKHJlYWQsIHJlZlswXSwgcmVmWzFdLCByZWZbMl0sIHJlZlszXSlcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJlZi51bnNoaWZ0KHJlYWQpXG4gICAgICAgIHJldHVybiBwdWxsLmFwcGx5KG51bGwsIHJlZilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgcmVhZCA9IGFcblxuICBpZiAocmVhZCAmJiB0eXBlb2YgcmVhZC5zb3VyY2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZWFkID0gcmVhZC5zb3VyY2VcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcyA9IGFyZ3VtZW50c1tpXVxuICAgIGlmICh0eXBlb2YgcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVhZCA9IHMocmVhZClcbiAgICB9IGVsc2UgaWYgKHMgJiYgdHlwZW9mIHMgPT09ICdvYmplY3QnKSB7XG4gICAgICBzLnNpbmsocmVhZClcbiAgICAgIHJlYWQgPSBzLnNvdXJjZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZWFkXG59XG4iLCIndXNlIHN0cmljdCdcblxudmFyIHJlZHVjZSA9IHJlcXVpcmUoJy4vcmVkdWNlJylcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjb2xsZWN0IChjYikge1xuICByZXR1cm4gcmVkdWNlKGZ1bmN0aW9uIChhcnIsIGl0ZW0pIHtcbiAgICBhcnIucHVzaChpdGVtKVxuICAgIHJldHVybiBhcnJcbiAgfSwgW10sIGNiKVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbnZhciByZWR1Y2UgPSByZXF1aXJlKCcuL3JlZHVjZScpXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY29uY2F0IChjYikge1xuICByZXR1cm4gcmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGEgKyBiXG4gIH0sICcnLCBjYilcbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRyYWluIChvcCwgZG9uZSkge1xuICB2YXIgcmVhZCwgYWJvcnRcblxuICBmdW5jdGlvbiBzaW5rIChfcmVhZCkge1xuICAgIHJlYWQgPSBfcmVhZFxuICAgIGlmKGFib3J0KSByZXR1cm4gc2luay5hYm9ydCgpXG4gICAgLy90aGlzIGZ1bmN0aW9uIGlzIG11Y2ggc2ltcGxlciB0byB3cml0ZSBpZiB5b3VcbiAgICAvL2p1c3QgdXNlIHJlY3Vyc2lvbiwgYnV0IGJ5IHVzaW5nIGEgd2hpbGUgbG9vcFxuICAgIC8vd2UgZG8gbm90IGJsb3cgdGhlIHN0YWNrIGlmIHRoZSBzdHJlYW0gaGFwcGVucyB0byBiZSBzeW5jLlxuICAgIDsoZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgdmFyIGxvb3AgPSB0cnVlLCBjYmVkID0gZmFsc2VcbiAgICAgICAgd2hpbGUobG9vcCkge1xuICAgICAgICAgIGNiZWQgPSBmYWxzZVxuICAgICAgICAgIHJlYWQobnVsbCwgZnVuY3Rpb24gKGVuZCwgZGF0YSkge1xuICAgICAgICAgICAgY2JlZCA9IHRydWVcbiAgICAgICAgICAgIGlmKGVuZCA9IGVuZCB8fCBhYm9ydCkge1xuICAgICAgICAgICAgICBsb29wID0gZmFsc2VcbiAgICAgICAgICAgICAgaWYoZG9uZSkgZG9uZShlbmQgPT09IHRydWUgPyBudWxsIDogZW5kKVxuICAgICAgICAgICAgICBlbHNlIGlmKGVuZCAmJiBlbmQgIT09IHRydWUpXG4gICAgICAgICAgICAgICAgdGhyb3cgZW5kXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKG9wICYmIGZhbHNlID09PSBvcChkYXRhKSB8fCBhYm9ydCkge1xuICAgICAgICAgICAgICBsb29wID0gZmFsc2VcbiAgICAgICAgICAgICAgcmVhZChhYm9ydCB8fCB0cnVlLCBkb25lIHx8IGZ1bmN0aW9uICgpIHt9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZighbG9vcCl7XG4gICAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYoIWNiZWQpIHtcbiAgICAgICAgICAgIGxvb3AgPSBmYWxzZVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSgpXG4gIH1cblxuICBzaW5rLmFib3J0ID0gZnVuY3Rpb24gKGVyciwgY2IpIHtcbiAgICBpZignZnVuY3Rpb24nID09IHR5cGVvZiBlcnIpXG4gICAgICBjYiA9IGVyciwgZXJyID0gdHJ1ZVxuICAgIGFib3J0ID0gZXJyIHx8IHRydWVcbiAgICBpZihyZWFkKSByZXR1cm4gcmVhZChhYm9ydCwgY2IgfHwgZnVuY3Rpb24gKCkge30pXG4gIH1cblxuICByZXR1cm4gc2lua1xufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmZ1bmN0aW9uIGlkIChlKSB7IHJldHVybiBlIH1cbnZhciBwcm9wID0gcmVxdWlyZSgnLi4vdXRpbC9wcm9wJylcbnZhciBkcmFpbiA9IHJlcXVpcmUoJy4vZHJhaW4nKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZpbmQgKHRlc3QsIGNiKSB7XG4gIHZhciBlbmRlZCA9IGZhbHNlXG4gIGlmKCFjYilcbiAgICBjYiA9IHRlc3QsIHRlc3QgPSBpZFxuICBlbHNlXG4gICAgdGVzdCA9IHByb3AodGVzdCkgfHwgaWRcblxuICByZXR1cm4gZHJhaW4oZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBpZih0ZXN0KGRhdGEpKSB7XG4gICAgICBlbmRlZCA9IHRydWVcbiAgICAgIGNiKG51bGwsIGRhdGEpXG4gICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYoZW5kZWQpIHJldHVybiAvL2FscmVhZHkgY2FsbGVkIGJhY2tcbiAgICBjYihlcnIgPT09IHRydWUgPyBudWxsIDogZXJyLCBudWxsKVxuICB9KVxufVxuXG5cblxuXG4iLCIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGRyYWluOiByZXF1aXJlKCcuL2RyYWluJyksXG4gIG9uRW5kOiByZXF1aXJlKCcuL29uLWVuZCcpLFxuICBsb2c6IHJlcXVpcmUoJy4vbG9nJyksXG4gIGZpbmQ6IHJlcXVpcmUoJy4vZmluZCcpLFxuICByZWR1Y2U6IHJlcXVpcmUoJy4vcmVkdWNlJyksXG4gIGNvbGxlY3Q6IHJlcXVpcmUoJy4vY29sbGVjdCcpLFxuICBjb25jYXQ6IHJlcXVpcmUoJy4vY29uY2F0Jylcbn1cblxuIiwiJ3VzZSBzdHJpY3QnXG5cbnZhciBkcmFpbiA9IHJlcXVpcmUoJy4vZHJhaW4nKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGxvZyAoZG9uZSkge1xuICByZXR1cm4gZHJhaW4oZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBjb25zb2xlLmxvZyhkYXRhKVxuICB9LCBkb25lKVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbnZhciBkcmFpbiA9IHJlcXVpcmUoJy4vZHJhaW4nKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG9uRW5kIChkb25lKSB7XG4gIHJldHVybiBkcmFpbihudWxsLCBkb25lKVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbnZhciBkcmFpbiA9IHJlcXVpcmUoJy4vZHJhaW4nKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlZHVjZSAocmVkdWNlciwgYWNjLCBjYikge1xuICByZXR1cm4gZHJhaW4oZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBhY2MgPSByZWR1Y2VyKGFjYywgZGF0YSlcbiAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgIGNiKGVyciwgYWNjKVxuICB9KVxufVxuXG4iLCIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjb3VudCAobWF4KSB7XG4gIHZhciBpID0gMDsgbWF4ID0gbWF4IHx8IEluZmluaXR5XG4gIHJldHVybiBmdW5jdGlvbiAoZW5kLCBjYikge1xuICAgIGlmKGVuZCkgcmV0dXJuIGNiICYmIGNiKGVuZClcbiAgICBpZihpID4gbWF4KVxuICAgICAgcmV0dXJuIGNiKHRydWUpXG4gICAgY2IobnVsbCwgaSsrKVxuICB9XG59XG5cblxuIiwiJ3VzZSBzdHJpY3QnXG4vL2Egc3RyZWFtIHRoYXQgZW5kcyBpbW1lZGlhdGVseS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZW1wdHkgKCkge1xuICByZXR1cm4gZnVuY3Rpb24gKGFib3J0LCBjYikge1xuICAgIGNiKHRydWUpXG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0J1xuLy9hIHN0cmVhbSB0aGF0IGVycm9ycyBpbW1lZGlhdGVseS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZXJyb3IgKGVycikge1xuICByZXR1cm4gZnVuY3Rpb24gKGFib3J0LCBjYikge1xuICAgIGNiKGVycilcbiAgfVxufVxuXG4iLCIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0ge1xuICBrZXlzOiByZXF1aXJlKCcuL2tleXMnKSxcbiAgb25jZTogcmVxdWlyZSgnLi9vbmNlJyksXG4gIHZhbHVlczogcmVxdWlyZSgnLi92YWx1ZXMnKSxcbiAgY291bnQ6IHJlcXVpcmUoJy4vY291bnQnKSxcbiAgaW5maW5pdGU6IHJlcXVpcmUoJy4vaW5maW5pdGUnKSxcbiAgZW1wdHk6IHJlcXVpcmUoJy4vZW1wdHknKSxcbiAgZXJyb3I6IHJlcXVpcmUoJy4vZXJyb3InKVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluZmluaXRlIChnZW5lcmF0ZSkge1xuICBnZW5lcmF0ZSA9IGdlbmVyYXRlIHx8IE1hdGgucmFuZG9tXG4gIHJldHVybiBmdW5jdGlvbiAoZW5kLCBjYikge1xuICAgIGlmKGVuZCkgcmV0dXJuIGNiICYmIGNiKGVuZClcbiAgICByZXR1cm4gY2IobnVsbCwgZ2VuZXJhdGUoKSlcbiAgfVxufVxuXG5cbiIsIid1c2Ugc3RyaWN0J1xudmFyIHZhbHVlcyA9IHJlcXVpcmUoJy4vdmFsdWVzJylcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICByZXR1cm4gdmFsdWVzKE9iamVjdC5rZXlzKG9iamVjdCkpXG59XG5cblxuIiwiJ3VzZSBzdHJpY3QnXG52YXIgYWJvcnRDYiA9IHJlcXVpcmUoJy4uL3V0aWwvYWJvcnQtY2InKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG9uY2UgKHZhbHVlLCBvbkFib3J0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoYWJvcnQsIGNiKSB7XG4gICAgaWYoYWJvcnQpXG4gICAgICByZXR1cm4gYWJvcnRDYihjYiwgYWJvcnQsIG9uQWJvcnQpXG4gICAgaWYodmFsdWUgIT0gbnVsbCkge1xuICAgICAgdmFyIF92YWx1ZSA9IHZhbHVlOyB2YWx1ZSA9IG51bGxcbiAgICAgIGNiKG51bGwsIF92YWx1ZSlcbiAgICB9IGVsc2VcbiAgICAgIGNiKHRydWUpXG4gIH1cbn1cblxuXG4iLCIndXNlIHN0cmljdCdcbnZhciBhYm9ydENiID0gcmVxdWlyZSgnLi4vdXRpbC9hYm9ydC1jYicpXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdmFsdWVzIChhcnJheSwgb25BYm9ydCkge1xuICBpZighYXJyYXkpXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhYm9ydCwgY2IpIHtcbiAgICAgIGlmKGFib3J0KSByZXR1cm4gYWJvcnRDYihjYiwgYWJvcnQsIG9uQWJvcnQpXG4gICAgICByZXR1cm4gY2IodHJ1ZSlcbiAgICB9XG4gIGlmKCFBcnJheS5pc0FycmF5KGFycmF5KSlcbiAgICBhcnJheSA9IE9iamVjdC5rZXlzKGFycmF5KS5tYXAoZnVuY3Rpb24gKGspIHtcbiAgICAgIHJldHVybiBhcnJheVtrXVxuICAgIH0pXG4gIHZhciBpID0gMFxuICByZXR1cm4gZnVuY3Rpb24gKGFib3J0LCBjYikge1xuICAgIGlmKGFib3J0KVxuICAgICAgcmV0dXJuIGFib3J0Q2IoY2IsIGFib3J0LCBvbkFib3J0KVxuICAgIGlmKGkgPj0gYXJyYXkubGVuZ3RoKVxuICAgICAgY2IodHJ1ZSlcbiAgICBlbHNlXG4gICAgICBjYihudWxsLCBhcnJheVtpKytdKVxuICB9XG59XG4iLCIndXNlIHN0cmljdCdcblxuZnVuY3Rpb24gaWQgKGUpIHsgcmV0dXJuIGUgfVxudmFyIHByb3AgPSByZXF1aXJlKCcuLi91dGlsL3Byb3AnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGFzeW5jTWFwIChtYXApIHtcbiAgaWYoIW1hcCkgcmV0dXJuIGlkXG4gIG1hcCA9IHByb3AobWFwKVxuICB2YXIgYnVzeSA9IGZhbHNlLCBhYm9ydENiLCBhYm9ydGVkXG4gIHJldHVybiBmdW5jdGlvbiAocmVhZCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0IChhYm9ydCwgY2IpIHtcbiAgICAgIGlmKGFib3J0ZWQpIHJldHVybiBjYihhYm9ydGVkKVxuICAgICAgaWYoYWJvcnQpIHtcbiAgICAgICAgYWJvcnRlZCA9IGFib3J0XG4gICAgICAgIGlmKCFidXN5KSByZWFkKGFib3J0LCBjYilcbiAgICAgICAgZWxzZSByZWFkKGFib3J0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy9pZiB3ZSBhcmUgc3RpbGwgYnVzeSwgd2FpdCBmb3IgdGhlIG1hcHBlciB0byBjb21wbGV0ZS5cbiAgICAgICAgICBpZihidXN5KSBhYm9ydENiID0gY2JcbiAgICAgICAgICBlbHNlIGNiKGFib3J0KVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAgICByZWFkKG51bGwsIGZ1bmN0aW9uIChlbmQsIGRhdGEpIHtcbiAgICAgICAgICBpZihlbmQpIGNiKGVuZClcbiAgICAgICAgICBlbHNlIGlmKGFib3J0ZWQpIGNiKGFib3J0ZWQpXG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBidXN5ID0gdHJ1ZVxuICAgICAgICAgICAgbWFwKGRhdGEsIGZ1bmN0aW9uIChlcnIsIGRhdGEpIHtcbiAgICAgICAgICAgICAgYnVzeSA9IGZhbHNlXG4gICAgICAgICAgICAgIGlmKGFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICBjYihhYm9ydGVkKVxuICAgICAgICAgICAgICAgIGFib3J0Q2IoYWJvcnRlZClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIGlmKGVycikgbmV4dCAoZXJyLCBjYilcbiAgICAgICAgICAgICAgZWxzZSBjYihudWxsLCBkYXRhKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuICB9XG59XG5cblxuIiwiJ3VzZSBzdHJpY3QnXG5cbnZhciB0ZXN0ZXIgPSByZXF1aXJlKCcuLi91dGlsL3Rlc3RlcicpXG52YXIgZmlsdGVyID0gcmVxdWlyZSgnLi9maWx0ZXInKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZpbHRlck5vdCAodGVzdCkge1xuICB0ZXN0ID0gdGVzdGVyKHRlc3QpXG4gIHJldHVybiBmaWx0ZXIoZnVuY3Rpb24gKGRhdGEpIHsgcmV0dXJuICF0ZXN0KGRhdGEpIH0pXG59XG4iLCIndXNlIHN0cmljdCdcblxudmFyIHRlc3RlciA9IHJlcXVpcmUoJy4uL3V0aWwvdGVzdGVyJylcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmaWx0ZXIgKHRlc3QpIHtcbiAgLy9yZWdleHBcbiAgdGVzdCA9IHRlc3Rlcih0ZXN0KVxuICByZXR1cm4gZnVuY3Rpb24gKHJlYWQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCAoZW5kLCBjYikge1xuICAgICAgdmFyIHN5bmMsIGxvb3AgPSB0cnVlXG4gICAgICB3aGlsZShsb29wKSB7XG4gICAgICAgIGxvb3AgPSBmYWxzZVxuICAgICAgICBzeW5jID0gdHJ1ZVxuICAgICAgICByZWFkKGVuZCwgZnVuY3Rpb24gKGVuZCwgZGF0YSkge1xuICAgICAgICAgIGlmKCFlbmQgJiYgIXRlc3QoZGF0YSkpXG4gICAgICAgICAgICByZXR1cm4gc3luYyA/IGxvb3AgPSB0cnVlIDogbmV4dChlbmQsIGNiKVxuICAgICAgICAgIGNiKGVuZCwgZGF0YSlcbiAgICAgICAgfSlcbiAgICAgICAgc3luYyA9IGZhbHNlXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbiIsIid1c2Ugc3RyaWN0J1xuXG52YXIgdmFsdWVzID0gcmVxdWlyZSgnLi4vc291cmNlcy92YWx1ZXMnKVxudmFyIG9uY2UgPSByZXF1aXJlKCcuLi9zb3VyY2VzL29uY2UnKVxuXG4vL2NvbnZlcnQgYSBzdHJlYW0gb2YgYXJyYXlzIG9yIHN0cmVhbXMgaW50byBqdXN0IGEgc3RyZWFtLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbGF0dGVuICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChyZWFkKSB7XG4gICAgdmFyIF9yZWFkXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhYm9ydCwgY2IpIHtcbiAgICAgIGlmIChhYm9ydCkgeyAvL2Fib3J0IHRoZSBjdXJyZW50IHN0cmVhbSwgYW5kIHRoZW4gc3RyZWFtIG9mIHN0cmVhbXMuXG4gICAgICAgIF9yZWFkID8gX3JlYWQoYWJvcnQsIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgIHJlYWQoZXJyIHx8IGFib3J0LCBjYilcbiAgICAgICAgfSkgOiByZWFkKGFib3J0LCBjYilcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYoX3JlYWQpIG5leHRDaHVuaygpXG4gICAgICBlbHNlIG5leHRTdHJlYW0oKVxuXG4gICAgICBmdW5jdGlvbiBuZXh0Q2h1bmsgKCkge1xuICAgICAgICBfcmVhZChudWxsLCBmdW5jdGlvbiAoZXJyLCBkYXRhKSB7XG4gICAgICAgICAgaWYgKGVyciA9PT0gdHJ1ZSkgbmV4dFN0cmVhbSgpXG4gICAgICAgICAgZWxzZSBpZiAoZXJyKSB7XG4gICAgICAgICAgICByZWFkKHRydWUsIGZ1bmN0aW9uKGFib3J0RXJyKSB7XG4gICAgICAgICAgICAgIC8vIFRPRE86IHdoYXQgZG8gd2UgZG8gd2l0aCB0aGUgYWJvcnRFcnI/XG4gICAgICAgICAgICAgIGNiKGVycilcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgY2IobnVsbCwgZGF0YSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIG5leHRTdHJlYW0gKCkge1xuICAgICAgICBfcmVhZCA9IG51bGxcbiAgICAgICAgcmVhZChudWxsLCBmdW5jdGlvbiAoZW5kLCBzdHJlYW0pIHtcbiAgICAgICAgICBpZihlbmQpXG4gICAgICAgICAgICByZXR1cm4gY2IoZW5kKVxuICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkoc3RyZWFtKSB8fCBzdHJlYW0gJiYgJ29iamVjdCcgPT09IHR5cGVvZiBzdHJlYW0pXG4gICAgICAgICAgICBzdHJlYW0gPSB2YWx1ZXMoc3RyZWFtKVxuICAgICAgICAgIGVsc2UgaWYoJ2Z1bmN0aW9uJyAhPSB0eXBlb2Ygc3RyZWFtKVxuICAgICAgICAgICAgc3RyZWFtID0gb25jZShzdHJlYW0pXG4gICAgICAgICAgX3JlYWQgPSBzdHJlYW1cbiAgICAgICAgICBuZXh0Q2h1bmsoKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4iLCIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1hcDogcmVxdWlyZSgnLi9tYXAnKSxcbiAgYXN5bmNNYXA6IHJlcXVpcmUoJy4vYXN5bmMtbWFwJyksXG4gIGZpbHRlcjogcmVxdWlyZSgnLi9maWx0ZXInKSxcbiAgZmlsdGVyTm90OiByZXF1aXJlKCcuL2ZpbHRlci1ub3QnKSxcbiAgdGhyb3VnaDogcmVxdWlyZSgnLi90aHJvdWdoJyksXG4gIHRha2U6IHJlcXVpcmUoJy4vdGFrZScpLFxuICB1bmlxdWU6IHJlcXVpcmUoJy4vdW5pcXVlJyksXG4gIG5vblVuaXF1ZTogcmVxdWlyZSgnLi9ub24tdW5pcXVlJyksXG4gIGZsYXR0ZW46IHJlcXVpcmUoJy4vZmxhdHRlbicpXG59XG5cblxuXG4iLCIndXNlIHN0cmljdCdcblxuZnVuY3Rpb24gaWQgKGUpIHsgcmV0dXJuIGUgfVxudmFyIHByb3AgPSByZXF1aXJlKCcuLi91dGlsL3Byb3AnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG1hcCAobWFwcGVyKSB7XG4gIGlmKCFtYXBwZXIpIHJldHVybiBpZFxuICBtYXBwZXIgPSBwcm9wKG1hcHBlcilcbiAgcmV0dXJuIGZ1bmN0aW9uIChyZWFkKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhYm9ydCwgY2IpIHtcbiAgICAgIHJlYWQoYWJvcnQsIGZ1bmN0aW9uIChlbmQsIGRhdGEpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9ICFlbmQgPyBtYXBwZXIoZGF0YSkgOiBudWxsXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJldHVybiByZWFkKGVyciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGNiKGVycilcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIGNiKGVuZCwgZGF0YSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG4iLCIndXNlIHN0cmljdCdcblxudmFyIHVuaXF1ZSA9IHJlcXVpcmUoJy4vdW5pcXVlJylcblxuLy9wYXNzZXMgYW4gaXRlbSB0aHJvdWdoIHdoZW4geW91IHNlZSBpdCBmb3IgdGhlIHNlY29uZCB0aW1lLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBub25VbmlxdWUgKGZpZWxkKSB7XG4gIHJldHVybiB1bmlxdWUoZmllbGQsIHRydWUpXG59XG4iLCIndXNlIHN0cmljdCdcblxuLy9yZWFkIGEgbnVtYmVyIG9mIGl0ZW1zIGFuZCB0aGVuIHN0b3AuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRha2UgKHRlc3QsIG9wdHMpIHtcbiAgb3B0cyA9IG9wdHMgfHwge31cbiAgdmFyIGxhc3QgPSBvcHRzLmxhc3QgfHwgZmFsc2UgLy8gd2hldGhlciB0aGUgZmlyc3QgaXRlbSBmb3Igd2hpY2ggIXRlc3QoaXRlbSkgc2hvdWxkIHN0aWxsIHBhc3NcbiAgdmFyIGVuZGVkID0gZmFsc2VcbiAgaWYoJ251bWJlcicgPT09IHR5cGVvZiB0ZXN0KSB7XG4gICAgbGFzdCA9IHRydWVcbiAgICB2YXIgbiA9IHRlc3Q7IHRlc3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gLS1uXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChyZWFkKSB7XG5cbiAgICBmdW5jdGlvbiB0ZXJtaW5hdGUgKGNiKSB7XG4gICAgICByZWFkKHRydWUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgbGFzdCA9IGZhbHNlOyBjYihlcnIgfHwgdHJ1ZSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChlbmQsIGNiKSB7XG4gICAgICBpZihlbmRlZCkgICAgICAgICAgICBsYXN0ID8gdGVybWluYXRlKGNiKSA6IGNiKGVuZGVkKVxuICAgICAgZWxzZSBpZihlbmRlZCA9IGVuZCkgcmVhZChlbmRlZCwgY2IpXG4gICAgICBlbHNlXG4gICAgICAgIHJlYWQobnVsbCwgZnVuY3Rpb24gKGVuZCwgZGF0YSkge1xuICAgICAgICAgIGlmKGVuZGVkID0gZW5kZWQgfHwgZW5kKSB7XG4gICAgICAgICAgICAvL2xhc3QgPyB0ZXJtaW5hdGUoY2IpIDpcbiAgICAgICAgICAgIGNiKGVuZGVkKVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmKCF0ZXN0KGRhdGEpKSB7XG4gICAgICAgICAgICBlbmRlZCA9IHRydWVcbiAgICAgICAgICAgIGxhc3QgPyBjYihudWxsLCBkYXRhKSA6IHRlcm1pbmF0ZShjYilcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgY2IobnVsbCwgZGF0YSlcbiAgICAgICAgfSlcbiAgICB9XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG4vL2EgcGFzcyB0aHJvdWdoIHN0cmVhbSB0aGF0IGRvZXNuJ3QgY2hhbmdlIHRoZSB2YWx1ZS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdGhyb3VnaCAob3AsIG9uRW5kKSB7XG4gIHZhciBhID0gZmFsc2VcblxuICBmdW5jdGlvbiBvbmNlIChhYm9ydCkge1xuICAgIGlmKGEgfHwgIW9uRW5kKSByZXR1cm5cbiAgICBhID0gdHJ1ZVxuICAgIG9uRW5kKGFib3J0ID09PSB0cnVlID8gbnVsbCA6IGFib3J0KVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChyZWFkKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChlbmQsIGNiKSB7XG4gICAgICBpZihlbmQpIG9uY2UoZW5kKVxuICAgICAgcmV0dXJuIHJlYWQoZW5kLCBmdW5jdGlvbiAoZW5kLCBkYXRhKSB7XG4gICAgICAgIGlmKCFlbmQpIG9wICYmIG9wKGRhdGEpXG4gICAgICAgIGVsc2Ugb25jZShlbmQpXG4gICAgICAgIGNiKGVuZCwgZGF0YSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG4iLCIndXNlIHN0cmljdCdcblxuZnVuY3Rpb24gaWQgKGUpIHsgcmV0dXJuIGUgfVxudmFyIHByb3AgPSByZXF1aXJlKCcuLi91dGlsL3Byb3AnKVxudmFyIGZpbHRlciA9IHJlcXVpcmUoJy4vZmlsdGVyJylcblxuLy9kcm9wIGl0ZW1zIHlvdSBoYXZlIGFscmVhZHkgc2Vlbi5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdW5pcXVlIChmaWVsZCwgaW52ZXJ0KSB7XG4gIGZpZWxkID0gcHJvcChmaWVsZCkgfHwgaWRcbiAgdmFyIHNlZW4gPSB7fVxuICByZXR1cm4gZmlsdGVyKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgdmFyIGtleSA9IGZpZWxkKGRhdGEpXG4gICAgaWYoc2VlbltrZXldKSByZXR1cm4gISFpbnZlcnQgLy9mYWxzZSwgYnkgZGVmYXVsdFxuICAgIGVsc2Ugc2VlbltrZXldID0gdHJ1ZVxuICAgIHJldHVybiAhaW52ZXJ0IC8vdHJ1ZSBieSBkZWZhdWx0XG4gIH0pXG59XG5cbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJvcnRDYihjYiwgYWJvcnQsIG9uQWJvcnQpIHtcbiAgY2IoYWJvcnQpXG4gIG9uQWJvcnQgJiYgb25BYm9ydChhYm9ydCA9PT0gdHJ1ZSA/IG51bGw6IGFib3J0KVxuICByZXR1cm5cbn1cblxuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwcm9wIChrZXkpIHtcbiAgcmV0dXJuIGtleSAmJiAoXG4gICAgJ3N0cmluZycgPT0gdHlwZW9mIGtleVxuICAgID8gZnVuY3Rpb24gKGRhdGEpIHsgcmV0dXJuIGRhdGFba2V5XSB9XG4gICAgOiAnb2JqZWN0JyA9PT0gdHlwZW9mIGtleSAmJiAnZnVuY3Rpb24nID09PSB0eXBlb2Yga2V5LmV4ZWMgLy9yZWdleHBcbiAgICA/IGZ1bmN0aW9uIChkYXRhKSB7IHZhciB2ID0ga2V5LmV4ZWMoZGF0YSk7IHJldHVybiB2ICYmIHZbMF0gfVxuICAgIDoga2V5XG4gIClcbn1cbiIsInZhciBwcm9wID0gcmVxdWlyZSgnLi9wcm9wJylcblxuZnVuY3Rpb24gaWQgKGUpIHsgcmV0dXJuIGUgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRlc3RlciAodGVzdCkge1xuICByZXR1cm4gKFxuICAgICdvYmplY3QnID09PSB0eXBlb2YgdGVzdCAmJiAnZnVuY3Rpb24nID09PSB0eXBlb2YgdGVzdC50ZXN0IC8vcmVnZXhwXG4gICAgPyBmdW5jdGlvbiAoZGF0YSkgeyByZXR1cm4gdGVzdC50ZXN0KGRhdGEpIH1cbiAgICA6IHByb3AgKHRlc3QpIHx8IGlkXG4gIClcbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG52YXIgc291cmNlcyAgPSByZXF1aXJlKCcuL3NvdXJjZXMnKVxudmFyIHNpbmtzICAgID0gcmVxdWlyZSgnLi9zaW5rcycpXG52YXIgdGhyb3VnaHMgPSByZXF1aXJlKCcuL3Rocm91Z2hzJylcblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9wdWxsJylcblxuZm9yKHZhciBrIGluIHNvdXJjZXMpXG4gIGV4cG9ydHNba10gPSBzb3VyY2VzW2tdXG5cbmZvcih2YXIgayBpbiB0aHJvdWdocylcbiAgZXhwb3J0c1trXSA9IHRocm91Z2hzW2tdXG5cbmZvcih2YXIgayBpbiBzaW5rcylcbiAgZXhwb3J0c1trXSA9IHNpbmtzW2tdXG5cbiJdfQ==
var pull = require('pull-stream')
var paramap = require('pull-paramap')
pull(
pull.values([1, 2, 3, 4, 5]),
paramap(function (amount, cb) {
pull(
pull.infinite(Math.random),
pull.take(amount),
pull.collect(cb)
)
}),
pull.filter(arr => arr.length > 2),
pull.drain(arr => console.log(arr))
)
;}, 0)
{
"name": "requirebin-sketch",
"version": "1.0.0",
"dependencies": {
"pull-paramap": "1.1.6",
"pull-stream": "3.4.5"
}
}
<!-- contents of this file will be placed inside the <body> -->
<main></main>
<!-- contents of this file will be placed inside the <head> -->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment