A/MNCi9c/FVjAAAAAAAAAAADAAAAQAAAAHPlAAAAZAAAWgAAZAEAWgEAZAIAWgIAZAMAWgMAZAQAWgQAZAUAhAAAWgUAZAYAhAAAWgYAZAcAhAAAWgcAZAgAZgAAZAkAhAAAgwAAWVoIAGQKAGYAAGQLAIQAAIMAAFlaCQBkDABaCgBkDQBaCwBkDgBaDABkDwBaDQBpCQBlAABkEAA2ZQEAZBEANmUCAGQSADZlAwBkEwA2ZQQAZBQANmUKAGQVADZlCwBkFgA2ZQwAZBcANmUNAGQYADZaDgBlDwBkGQCEAQBaEABlEQBkGgBrAgBy4QBlEABkGwCDAQABbgAAZBwAUygdAAAAc9wJAAAKTGV0J3MgdHJ5IGEgc2ltcGxlIGdlbmVyYXRvcjoKCiAgICA+Pj4gZGVmIGYoKToKICAgIC4uLiAgICB5aWVsZCAxCiAgICAuLi4gICAgeWllbGQgMgoKICAgID4+PiBmb3IgaSBpbiBmKCk6CiAgICAuLi4gICAgIHByaW50IGkKICAgIDEKICAgIDIKICAgID4+PiBnID0gZigpCiAgICA+Pj4gZy5uZXh0KCkKICAgIDEKICAgID4+PiBnLm5leHQoKQogICAgMgoKIkZhbGxpbmcgb2ZmIHRoZSBlbmQiIHN0b3BzIHRoZSBnZW5lcmF0b3I6CgogICAgPj4+IGcubmV4dCgpCiAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluID8KICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMiwgaW4gZwogICAgU3RvcEl0ZXJhdGlvbgoKInJldHVybiIgYWxzbyBzdG9wcyB0aGUgZ2VuZXJhdG9yOgoKICAgID4+PiBkZWYgZigpOgogICAgLi4uICAgICB5aWVsZCAxCiAgICAuLi4gICAgIHJldHVybgogICAgLi4uICAgICB5aWVsZCAyICMgbmV2ZXIgcmVhY2hlZAogICAgLi4uCiAgICA+Pj4gZyA9IGYoKQogICAgPj4+IGcubmV4dCgpCiAgICAxCiAgICA+Pj4gZy5uZXh0KCkKICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPwogICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAzLCBpbiBmCiAgICBTdG9wSXRlcmF0aW9uCiAgICA+Pj4gZy5uZXh0KCkgIyBvbmNlIHN0b3BwZWQsIGNhbid0IGJlIHJlc3VtZWQKICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPwogICAgU3RvcEl0ZXJhdGlvbgoKInJhaXNlIFN0b3BJdGVyYXRpb24iIHN0b3BzIHRoZSBnZW5lcmF0b3IgdG9vOgoKICAgID4+PiBkZWYgZigpOgogICAgLi4uICAgICB5aWVsZCAxCiAgICAuLi4gICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KICAgIC4uLiAgICAgeWllbGQgMiAjIG5ldmVyIHJlYWNoZWQKICAgIC4uLgogICAgPj4+IGcgPSBmKCkKICAgID4+PiBnLm5leHQoKQogICAgMQogICAgPj4+IGcubmV4dCgpCiAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluID8KICAgIFN0b3BJdGVyYXRpb24KICAgID4+PiBnLm5leHQoKQogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/CiAgICBTdG9wSXRlcmF0aW9uCgpIb3dldmVyLCB0aGV5IGFyZSBub3QgZXhhY3RseSBlcXVpdmFsZW50OgoKICAgID4+PiBkZWYgZzEoKToKICAgIC4uLiAgICAgdHJ5OgogICAgLi4uICAgICAgICAgcmV0dXJuCiAgICAuLi4gICAgIGV4Y2VwdDoKICAgIC4uLiAgICAgICAgIHlpZWxkIDEKICAgIC4uLgogICAgPj4+IGxpc3QoZzEoKSkKICAgIFtdCgogICAgPj4+IGRlZiBnMigpOgogICAgLi4uICAgICB0cnk6CiAgICAuLi4gICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCiAgICAuLi4gICAgIGV4Y2VwdDoKICAgIC4uLiAgICAgICAgIHlpZWxkIDQyCiAgICA+Pj4gcHJpbnQgbGlzdChnMigpKQogICAgWzQyXQoKVGhpcyBtYXkgYmUgc3VycHJpc2luZyBhdCBmaXJzdDoKCiAgICA+Pj4gZGVmIGczKCk6CiAgICAuLi4gICAgIHRyeToKICAgIC4uLiAgICAgICAgIHJldHVybgogICAgLi4uICAgICBmaW5hbGx5OgogICAgLi4uICAgICAgICAgeWllbGQgMQogICAgLi4uCiAgICA+Pj4gbGlzdChnMygpKQogICAgWzFdCgpMZXQncyBjcmVhdGUgYW4gYWx0ZXJuYXRlIHJhbmdlKCkgZnVuY3Rpb24gaW1wbGVtZW50ZWQgYXMgYSBnZW5lcmF0b3I6CgogICAgPj4+IGRlZiB5cmFuZ2Uobik6CiAgICAuLi4gICAgIGZvciBpIGluIHJhbmdlKG4pOgogICAgLi4uICAgICAgICAgeWllbGQgaQogICAgLi4uCiAgICA+Pj4gbGlzdCh5cmFuZ2UoNSkpCiAgICBbMCwgMSwgMiwgMywgNF0KCkdlbmVyYXRvcnMgYWx3YXlzIHJldHVybiB0byB0aGUgbW9zdCByZWNlbnQgY2FsbGVyOgoKICAgID4+PiBkZWYgY3JlYXRvcigpOgogICAgLi4uICAgICByID0geXJhbmdlKDUpCiAgICAuLi4gICAgIHByaW50ICJjcmVhdG9yIiwgci5uZXh0KCkKICAgIC4uLiAgICAgcmV0dXJuIHIKICAgIC4uLgogICAgPj4+IGRlZiBjYWxsZXIoKToKICAgIC4uLiAgICAgciA9IGNyZWF0b3IoKQogICAgLi4uICAgICBmb3IgaSBpbiByOgogICAgLi4uICAgICAgICAgICAgIHByaW50ICJjYWxsZXIiLCBpCiAgICAuLi4KICAgID4+PiBjYWxsZXIoKQogICAgY3JlYXRvciAwCiAgICBjYWxsZXIgMQogICAgY2FsbGVyIDIKICAgIGNhbGxlciAzCiAgICBjYWxsZXIgNAoKR2VuZXJhdG9ycyBjYW4gY2FsbCBvdGhlciBnZW5lcmF0b3JzOgoKICAgID4+PiBkZWYgenJhbmdlKG4pOgogICAgLi4uICAgICBmb3IgaSBpbiB5cmFuZ2Uobik6CiAgICAuLi4gICAgICAgICB5aWVsZCBpCiAgICAuLi4KICAgID4+PiBsaXN0KHpyYW5nZSg1KSkKICAgIFswLCAxLCAyLCAzLCA0XQoKc3ERAAAKClNwZWNpZmljYXRpb246ICBZaWVsZAoKICAgIFJlc3RyaWN0aW9uOiAgQSBnZW5lcmF0b3IgY2Fubm90IGJlIHJlc3VtZWQgd2hpbGUgaXQgaXMgYWN0aXZlbHkKICAgIHJ1bm5pbmc6CgogICAgPj4+IGRlZiBnKCk6CiAgICAuLi4gICAgIGkgPSBtZS5uZXh0KCkKICAgIC4uLiAgICAgeWllbGQgaQogICAgPj4+IG1lID0gZygpCiAgICA+Pj4gbWUubmV4dCgpCiAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgLi4uCiAgICAgIEZpbGUgIjxzdHJpbmc+IiwgbGluZSAyLCBpbiBnCiAgICBWYWx1ZUVycm9yOiBnZW5lcmF0b3IgYWxyZWFkeSBleGVjdXRpbmcKClNwZWNpZmljYXRpb246IFJldHVybgoKICAgIE5vdGUgdGhhdCByZXR1cm4gaXNuJ3QgYWx3YXlzIGVxdWl2YWxlbnQgdG8gcmFpc2luZyBTdG9wSXRlcmF0aW9uOiAgdGhlCiAgICBkaWZmZXJlbmNlIGxpZXMgaW4gaG93IGVuY2xvc2luZyB0cnkvZXhjZXB0IGNvbnN0cnVjdHMgYXJlIHRyZWF0ZWQuCiAgICBGb3IgZXhhbXBsZSwKCiAgICAgICAgPj4+IGRlZiBmMSgpOgogICAgICAgIC4uLiAgICAgdHJ5OgogICAgICAgIC4uLiAgICAgICAgIHJldHVybgogICAgICAgIC4uLiAgICAgZXhjZXB0OgogICAgICAgIC4uLiAgICAgICAgeWllbGQgMQogICAgICAgID4+PiBwcmludCBsaXN0KGYxKCkpCiAgICAgICAgW10KCiAgICBiZWNhdXNlLCBhcyBpbiBhbnkgZnVuY3Rpb24sIHJldHVybiBzaW1wbHkgZXhpdHMsIGJ1dAoKICAgICAgICA+Pj4gZGVmIGYyKCk6CiAgICAgICAgLi4uICAgICB0cnk6CiAgICAgICAgLi4uICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgogICAgICAgIC4uLiAgICAgZXhjZXB0OgogICAgICAgIC4uLiAgICAgICAgIHlpZWxkIDQyCiAgICAgICAgPj4+IHByaW50IGxpc3QoZjIoKSkKICAgICAgICBbNDJdCgogICAgYmVjYXVzZSBTdG9wSXRlcmF0aW9uIGlzIGNhcHR1cmVkIGJ5IGEgYmFyZSAiZXhjZXB0IiwgYXMgaXMgYW55CiAgICBleGNlcHRpb24uCgpTcGVjaWZpY2F0aW9uOiBHZW5lcmF0b3JzIGFuZCBFeGNlcHRpb24gUHJvcGFnYXRpb24KCiAgICA+Pj4gZGVmIGYoKToKICAgIC4uLiAgICAgcmV0dXJuIDEvLzAKICAgID4+PiBkZWYgZygpOgogICAgLi4uICAgICB5aWVsZCBmKCkgICMgdGhlIHplcm8gZGl2aXNpb24gZXhjZXB0aW9uIHByb3BhZ2F0ZXMKICAgIC4uLiAgICAgeWllbGQgNDIgICAjIGFuZCB3ZSdsbCBuZXZlciBnZXQgaGVyZQogICAgPj4+IGsgPSBnKCkKICAgID4+PiBrLm5leHQoKQogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/CiAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDIsIGluIGcKICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMiwgaW4gZgogICAgWmVyb0RpdmlzaW9uRXJyb3I6IGludGVnZXIgZGl2aXNpb24gb3IgbW9kdWxvIGJ5IHplcm8KICAgID4+PiBrLm5leHQoKSAgIyBhbmQgdGhlIGdlbmVyYXRvciBjYW5ub3QgYmUgcmVzdW1lZAogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/CiAgICBTdG9wSXRlcmF0aW9uCiAgICA+Pj4KClNwZWNpZmljYXRpb246IFRyeS9FeGNlcHQvRmluYWxseQoKICAgID4+PiBkZWYgZigpOgogICAgLi4uICAgICB0cnk6CiAgICAuLi4gICAgICAgICB5aWVsZCAxCiAgICAuLi4gICAgICAgICB0cnk6CiAgICAuLi4gICAgICAgICAgICAgeWllbGQgMgogICAgLi4uICAgICAgICAgICAgIDEvLzAKICAgIC4uLiAgICAgICAgICAgICB5aWVsZCAzICAjIG5ldmVyIGdldCBoZXJlCiAgICAuLi4gICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CiAgICAuLi4gICAgICAgICAgICAgeWllbGQgNAogICAgLi4uICAgICAgICAgICAgIHlpZWxkIDUKICAgIC4uLiAgICAgICAgICAgICByYWlzZQogICAgLi4uICAgICAgICAgZXhjZXB0OgogICAgLi4uICAgICAgICAgICAgIHlpZWxkIDYKICAgIC4uLiAgICAgICAgIHlpZWxkIDcgICAgICMgdGhlICJyYWlzZSIgYWJvdmUgc3RvcHMgdGhpcwogICAgLi4uICAgICBleGNlcHQ6CiAgICAuLi4gICAgICAgICB5aWVsZCA4CiAgICAuLi4gICAgIHlpZWxkIDkKICAgIC4uLiAgICAgdHJ5OgogICAgLi4uICAgICAgICAgeCA9IDEyCiAgICAuLi4gICAgIGZpbmFsbHk6CiAgICAuLi4gICAgICAgICB5aWVsZCAxMAogICAgLi4uICAgICB5aWVsZCAxMQogICAgPj4+IHByaW50IGxpc3QoZigpKQogICAgWzEsIDIsIDQsIDUsIDgsIDksIDEwLCAxMV0KICAgID4+PgoKR3VpZG8ncyBiaW5hcnkgdHJlZSBleGFtcGxlLgoKICAgID4+PiAjIEEgYmluYXJ5IHRyZWUgY2xhc3MuCiAgICA+Pj4gY2xhc3MgVHJlZToKICAgIC4uLgogICAgLi4uICAgICBkZWYgX19pbml0X18oc2VsZiwgbGFiZWwsIGxlZnQ9Tm9uZSwgcmlnaHQ9Tm9uZSk6CiAgICAuLi4gICAgICAgICBzZWxmLmxhYmVsID0gbGFiZWwKICAgIC4uLiAgICAgICAgIHNlbGYubGVmdCA9IGxlZnQKICAgIC4uLiAgICAgICAgIHNlbGYucmlnaHQgPSByaWdodAogICAgLi4uCiAgICAuLi4gICAgIGRlZiBfX3JlcHJfXyhzZWxmLCBsZXZlbD0wLCBpbmRlbnQ9IiAgICAiKToKICAgIC4uLiAgICAgICAgIHMgPSBsZXZlbCppbmRlbnQgKyByZXByKHNlbGYubGFiZWwpCiAgICAuLi4gICAgICAgICBpZiBzZWxmLmxlZnQ6CiAgICAuLi4gICAgICAgICAgICAgcyA9IHMgKyAiXG4iICsgc2VsZi5sZWZ0Ll9fcmVwcl9fKGxldmVsKzEsIGluZGVudCkKICAgIC4uLiAgICAgICAgIGlmIHNlbGYucmlnaHQ6CiAgICAuLi4gICAgICAgICAgICAgcyA9IHMgKyAiXG4iICsgc2VsZi5yaWdodC5fX3JlcHJfXyhsZXZlbCsxLCBpbmRlbnQpCiAgICAuLi4gICAgICAgICByZXR1cm4gcwogICAgLi4uCiAgICAuLi4gICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgIC4uLiAgICAgICAgIHJldHVybiBpbm9yZGVyKHNlbGYpCgogICAgPj4+ICMgQ3JlYXRlIGEgVHJlZSBmcm9tIGEgbGlzdC4KICAgID4+PiBkZWYgdHJlZShsaXN0KToKICAgIC4uLiAgICAgbiA9IGxlbihsaXN0KQogICAgLi4uICAgICBpZiBuID09IDA6CiAgICAuLi4gICAgICAgICByZXR1cm4gW10KICAgIC4uLiAgICAgaSA9IG4gLy8gMgogICAgLi4uICAgICByZXR1cm4gVHJlZShsaXN0W2ldLCB0cmVlKGxpc3RbOmldKSwgdHJlZShsaXN0W2krMTpdKSkKCiAgICA+Pj4gIyBTaG93IGl0IG9mZjogY3JlYXRlIGEgdHJlZS4KICAgID4+PiB0ID0gdHJlZSgiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiKQoKICAgID4+PiAjIEEgcmVjdXJzaXZlIGdlbmVyYXRvciB0aGF0IGdlbmVyYXRlcyBUcmVlIGxhYmVscyBpbiBpbi1vcmRlci4KICAgID4+PiBkZWYgaW5vcmRlcih0KToKICAgIC4uLiAgICAgaWYgdDoKICAgIC4uLiAgICAgICAgIGZvciB4IGluIGlub3JkZXIodC5sZWZ0KToKICAgIC4uLiAgICAgICAgICAgICB5aWVsZCB4CiAgICAuLi4gICAgICAgICB5aWVsZCB0LmxhYmVsCiAgICAuLi4gICAgICAgICBmb3IgeCBpbiBpbm9yZGVyKHQucmlnaHQpOgogICAgLi4uICAgICAgICAgICAgIHlpZWxkIHgKCiAgICA+Pj4gIyBTaG93IGl0IG9mZjogY3JlYXRlIGEgdHJlZS4KICAgID4+PiB0ID0gdHJlZSgiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiKQogICAgPj4+ICMgUHJpbnQgdGhlIG5vZGVzIG9mIHRoZSB0cmVlIGluIGluLW9yZGVyLgogICAgPj4+IGZvciB4IGluIHQ6CiAgICAuLi4gICAgIHByaW50IHgsCiAgICBBIEIgQyBEIEUgRiBHIEggSSBKIEsgTCBNIE4gTyBQIFEgUiBTIFQgVSBWIFcgWCBZIFoKCiAgICA+Pj4gIyBBIG5vbi1yZWN1cnNpdmUgZ2VuZXJhdG9yLgogICAgPj4+IGRlZiBpbm9yZGVyKG5vZGUpOgogICAgLi4uICAgICBzdGFjayA9IFtdCiAgICAuLi4gICAgIHdoaWxlIG5vZGU6CiAgICAuLi4gICAgICAgICB3aGlsZSBub2RlLmxlZnQ6CiAgICAuLi4gICAgICAgICAgICAgc3RhY2suYXBwZW5kKG5vZGUpCiAgICAuLi4gICAgICAgICAgICAgbm9kZSA9IG5vZGUubGVmdAogICAgLi4uICAgICAgICAgeWllbGQgbm9kZS5sYWJlbAogICAgLi4uICAgICAgICAgd2hpbGUgbm90IG5vZGUucmlnaHQ6CiAgICAuLi4gICAgICAgICAgICAgdHJ5OgogICAgLi4uICAgICAgICAgICAgICAgICBub2RlID0gc3RhY2sucG9wKCkKICAgIC4uLiAgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgIC4uLiAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAuLi4gICAgICAgICAgICAgeWllbGQgbm9kZS5sYWJlbAogICAgLi4uICAgICAgICAgbm9kZSA9IG5vZGUucmlnaHQKCiAgICA+Pj4gIyBFeGVyY2lzZSB0aGUgbm9uLXJlY3Vyc2l2ZSBnZW5lcmF0b3IuCiAgICA+Pj4gZm9yIHggaW4gdDoKICAgIC4uLiAgICAgcHJpbnQgeCwKICAgIEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSIFMgVCBVIFYgVyBYIFkgWgoKc1kSAAAKClRoZSBkaWZmZXJlbmNlIGJldHdlZW4geWllbGRpbmcgTm9uZSBhbmQgcmV0dXJuaW5nIGl0LgoKPj4+IGRlZiBnKCk6Ci4uLiAgICAgZm9yIGkgaW4gcmFuZ2UoMyk6Ci4uLiAgICAgICAgIHlpZWxkIE5vbmUKLi4uICAgICB5aWVsZCBOb25lCi4uLiAgICAgcmV0dXJuCj4+PiBsaXN0KGcoKSkKW05vbmUsIE5vbmUsIE5vbmUsIE5vbmVdCgpFbnN1cmUgdGhhdCBleHBsaWNpdGx5IHJhaXNpbmcgU3RvcEl0ZXJhdGlvbiBhY3RzIGxpa2UgYW55IG90aGVyIGV4Y2VwdGlvbgppbiB0cnkvZXhjZXB0LCBub3QgbGlrZSBhIHJldHVybi4KCj4+PiBkZWYgZygpOgouLi4gICAgIHlpZWxkIDEKLi4uICAgICB0cnk6Ci4uLiAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KLi4uICAgICBleGNlcHQ6Ci4uLiAgICAgICAgIHlpZWxkIDIKLi4uICAgICB5aWVsZCAzCj4+PiBsaXN0KGcoKSkKWzEsIDIsIDNdCgpOZXh0IG9uZSB3YXMgcG9zdGVkIHRvIGMubC5weS4KCj4+PiBkZWYgZ2NvbWIoeCwgayk6Ci4uLiAgICAgIkdlbmVyYXRlIGFsbCBjb21iaW5hdGlvbnMgb2YgayBlbGVtZW50cyBmcm9tIGxpc3QgeC4iCi4uLgouLi4gICAgIGlmIGsgPiBsZW4oeCk6Ci4uLiAgICAgICAgIHJldHVybgouLi4gICAgIGlmIGsgPT0gMDoKLi4uICAgICAgICAgeWllbGQgW10KLi4uICAgICBlbHNlOgouLi4gICAgICAgICBmaXJzdCwgcmVzdCA9IHhbMF0sIHhbMTpdCi4uLiAgICAgICAgICMgQSBjb21iaW5hdGlvbiBkb2VzIG9yIGRvZXNuJ3QgY29udGFpbiBmaXJzdC4KLi4uICAgICAgICAgIyBJZiBpdCBkb2VzLCB0aGUgcmVtYWluZGVyIGlzIGEgay0xIGNvbWIgb2YgcmVzdC4KLi4uICAgICAgICAgZm9yIGMgaW4gZ2NvbWIocmVzdCwgay0xKToKLi4uICAgICAgICAgICAgIGMuaW5zZXJ0KDAsIGZpcnN0KQouLi4gICAgICAgICAgICAgeWllbGQgYwouLi4gICAgICAgICAjIElmIGl0IGRvZXNuJ3QgY29udGFpbiBmaXJzdCwgaXQncyBhIGsgY29tYiBvZiByZXN0LgouLi4gICAgICAgICBmb3IgYyBpbiBnY29tYihyZXN0LCBrKToKLi4uICAgICAgICAgICAgIHlpZWxkIGMKCj4+PiBzZXEgPSByYW5nZSgxLCA1KQo+Pj4gZm9yIGsgaW4gcmFuZ2UobGVuKHNlcSkgKyAyKToKLi4uICAgICBwcmludCAiJWQtY29tYnMgb2YgJXM6IiAlIChrLCBzZXEpCi4uLiAgICAgZm9yIGMgaW4gZ2NvbWIoc2VxLCBrKToKLi4uICAgICAgICAgcHJpbnQgIiAgICIsIGMKMC1jb21icyBvZiBbMSwgMiwgMywgNF06CiAgICBbXQoxLWNvbWJzIG9mIFsxLCAyLCAzLCA0XToKICAgIFsxXQogICAgWzJdCiAgICBbM10KICAgIFs0XQoyLWNvbWJzIG9mIFsxLCAyLCAzLCA0XToKICAgIFsxLCAyXQogICAgWzEsIDNdCiAgICBbMSwgNF0KICAgIFsyLCAzXQogICAgWzIsIDRdCiAgICBbMywgNF0KMy1jb21icyBvZiBbMSwgMiwgMywgNF06CiAgICBbMSwgMiwgM10KICAgIFsxLCAyLCA0XQogICAgWzEsIDMsIDRdCiAgICBbMiwgMywgNF0KNC1jb21icyBvZiBbMSwgMiwgMywgNF06CiAgICBbMSwgMiwgMywgNF0KNS1jb21icyBvZiBbMSwgMiwgMywgNF06CgpGcm9tIHRoZSBJdGVyYXRvcnMgbGlzdCwgYWJvdXQgdGhlIHR5cGVzIG9mIHRoZXNlIHRoaW5ncy4KCj4+PiBkZWYgZygpOgouLi4gICAgIHlpZWxkIDEKLi4uCj4+PiB0eXBlKGcpCjx0eXBlICdmdW5jdGlvbic+Cj4+PiBpID0gZygpCj4+PiB0eXBlKGkpCjx0eXBlICdnZW5lcmF0b3InPgo+Pj4gW3MgZm9yIHMgaW4gZGlyKGkpIGlmIG5vdCBzLnN0YXJ0c3dpdGgoJ18nKV0KWydjbG9zZScsICdnaV9jb2RlJywgJ2dpX2ZyYW1lJywgJ2dpX3J1bm5pbmcnLCAnbmV4dCcsICdzZW5kJywgJ3Rocm93J10KPj4+IGZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IEhBVkVfRE9DU1RSSU5HUwo+Pj4gcHJpbnQoaS5uZXh0Ll9fZG9jX18gaWYgSEFWRV9ET0NTVFJJTkdTIGVsc2UgJ3gubmV4dCgpIC0+IHRoZSBuZXh0IHZhbHVlLCBvciByYWlzZSBTdG9wSXRlcmF0aW9uJykKeC5uZXh0KCkgLT4gdGhlIG5leHQgdmFsdWUsIG9yIHJhaXNlIFN0b3BJdGVyYXRpb24KPj4+IGl0ZXIoaSkgaXMgaQpUcnVlCj4+PiBpbXBvcnQgdHlwZXMKPj4+IGlzaW5zdGFuY2UoaSwgdHlwZXMuR2VuZXJhdG9yVHlwZSkKVHJ1ZQoKQW5kIG1vcmUsIGFkZGVkIGxhdGVyLgoKPj4+IGkuZ2lfcnVubmluZwowCj4+PiB0eXBlKGkuZ2lfZnJhbWUpCjx0eXBlICdmcmFtZSc+Cj4+PiBpLmdpX3J1bm5pbmcgPSA0MgpUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgLi4uClR5cGVFcnJvcjogcmVhZG9ubHkgYXR0cmlidXRlCj4+PiBkZWYgZygpOgouLi4gICAgIHlpZWxkIG1lLmdpX3J1bm5pbmcKPj4+IG1lID0gZygpCj4+PiBtZS5naV9ydW5uaW5nCjAKPj4+IG1lLm5leHQoKQoxCj4+PiBtZS5naV9ydW5uaW5nCjAKCkEgY2xldmVyIHVuaW9uLWZpbmQgaW1wbGVtZW50YXRpb24gZnJvbSBjLmwucHksIGR1ZSB0byBEYXZpZCBFcHBzdGVpbi4KU2VudDogRnJpZGF5LCBKdW5lIDI5LCAyMDAxIDEyOjE2IFBNClRvOiBweXRob24tbGlzdEBweXRob24ub3JnClN1YmplY3Q6IFJlOiBQRVAgMjU1OiBTaW1wbGUgR2VuZXJhdG9ycwoKPj4+IGNsYXNzIGRpc2pvaW50U2V0OgouLi4gICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKLi4uICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQouLi4gICAgICAgICBzZWxmLnBhcmVudCA9IE5vbmUKLi4uICAgICAgICAgc2VsZi5nZW5lcmF0b3IgPSBzZWxmLmdlbmVyYXRlKCkKLi4uCi4uLiAgICAgZGVmIGdlbmVyYXRlKHNlbGYpOgouLi4gICAgICAgICB3aGlsZSBub3Qgc2VsZi5wYXJlbnQ6Ci4uLiAgICAgICAgICAgICB5aWVsZCBzZWxmCi4uLiAgICAgICAgIGZvciB4IGluIHNlbGYucGFyZW50LmdlbmVyYXRvcjoKLi4uICAgICAgICAgICAgIHlpZWxkIHgKLi4uCi4uLiAgICAgZGVmIGZpbmQoc2VsZik6Ci4uLiAgICAgICAgIHJldHVybiBzZWxmLmdlbmVyYXRvci5uZXh0KCkKLi4uCi4uLiAgICAgZGVmIHVuaW9uKHNlbGYsIHBhcmVudCk6Ci4uLiAgICAgICAgIGlmIHNlbGYucGFyZW50OgouLi4gICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiU29ycnksIEknbSBub3QgYSByb290ISIpCi4uLiAgICAgICAgIHNlbGYucGFyZW50ID0gcGFyZW50Ci4uLgouLi4gICAgIGRlZiBfX3N0cl9fKHNlbGYpOgouLi4gICAgICAgICByZXR1cm4gc2VsZi5uYW1lCgo+Pj4gbmFtZXMgPSAiQUJDREVGR0hJSktMTSIKPj4+IHNldHMgPSBbZGlzam9pbnRTZXQobmFtZSkgZm9yIG5hbWUgaW4gbmFtZXNdCj4+PiByb290cyA9IHNldHNbOl0KCj4+PiBpbXBvcnQgcmFuZG9tCj4+PiBnZW4gPSByYW5kb20uV2ljaG1hbm5IaWxsKDQyKQo+Pj4gd2hpbGUgMToKLi4uICAgICBmb3IgcyBpbiBzZXRzOgouLi4gICAgICAgICBwcmludCAiJXMtPiVzIiAlIChzLCBzLmZpbmQoKSksCi4uLiAgICAgcHJpbnQKLi4uICAgICBpZiBsZW4ocm9vdHMpID4gMToKLi4uICAgICAgICAgczEgPSBnZW4uY2hvaWNlKHJvb3RzKQouLi4gICAgICAgICByb290cy5yZW1vdmUoczEpCi4uLiAgICAgICAgIHMyID0gZ2VuLmNob2ljZShyb290cykKLi4uICAgICAgICAgczEudW5pb24oczIpCi4uLiAgICAgICAgIHByaW50ICJtZXJnZWQiLCBzMSwgImludG8iLCBzMgouLi4gICAgIGVsc2U6Ci4uLiAgICAgICAgIGJyZWFrCkEtPkEgQi0+QiBDLT5DIEQtPkQgRS0+RSBGLT5GIEctPkcgSC0+SCBJLT5JIEotPkogSy0+SyBMLT5MIE0tPk0KbWVyZ2VkIEQgaW50byBHCkEtPkEgQi0+QiBDLT5DIEQtPkcgRS0+RSBGLT5GIEctPkcgSC0+SCBJLT5JIEotPkogSy0+SyBMLT5MIE0tPk0KbWVyZ2VkIEMgaW50byBGCkEtPkEgQi0+QiBDLT5GIEQtPkcgRS0+RSBGLT5GIEctPkcgSC0+SCBJLT5JIEotPkogSy0+SyBMLT5MIE0tPk0KbWVyZ2VkIEwgaW50byBBCkEtPkEgQi0+QiBDLT5GIEQtPkcgRS0+RSBGLT5GIEctPkcgSC0+SCBJLT5JIEotPkogSy0+SyBMLT5BIE0tPk0KbWVyZ2VkIEggaW50byBFCkEtPkEgQi0+QiBDLT5GIEQtPkcgRS0+RSBGLT5GIEctPkcgSC0+RSBJLT5JIEotPkogSy0+SyBMLT5BIE0tPk0KbWVyZ2VkIEIgaW50byBFCkEtPkEgQi0+RSBDLT5GIEQtPkcgRS0+RSBGLT5GIEctPkcgSC0+RSBJLT5JIEotPkogSy0+SyBMLT5BIE0tPk0KbWVyZ2VkIEogaW50byBHCkEtPkEgQi0+RSBDLT5GIEQtPkcgRS0+RSBGLT5GIEctPkcgSC0+RSBJLT5JIEotPkcgSy0+SyBMLT5BIE0tPk0KbWVyZ2VkIEUgaW50byBHCkEtPkEgQi0+RyBDLT5GIEQtPkcgRS0+RyBGLT5GIEctPkcgSC0+RyBJLT5JIEotPkcgSy0+SyBMLT5BIE0tPk0KbWVyZ2VkIE0gaW50byBHCkEtPkEgQi0+RyBDLT5GIEQtPkcgRS0+RyBGLT5GIEctPkcgSC0+RyBJLT5JIEotPkcgSy0+SyBMLT5BIE0tPkcKbWVyZ2VkIEkgaW50byBLCkEtPkEgQi0+RyBDLT5GIEQtPkcgRS0+RyBGLT5GIEctPkcgSC0+RyBJLT5LIEotPkcgSy0+SyBMLT5BIE0tPkcKbWVyZ2VkIEsgaW50byBBCkEtPkEgQi0+RyBDLT5GIEQtPkcgRS0+RyBGLT5GIEctPkcgSC0+RyBJLT5BIEotPkcgSy0+QSBMLT5BIE0tPkcKbWVyZ2VkIEYgaW50byBBCkEtPkEgQi0+RyBDLT5BIEQtPkcgRS0+RyBGLT5BIEctPkcgSC0+RyBJLT5BIEotPkcgSy0+QSBMLT5BIE0tPkcKbWVyZ2VkIEEgaW50byBHCkEtPkcgQi0+RyBDLT5HIEQtPkcgRS0+RyBGLT5HIEctPkcgSC0+RyBJLT5HIEotPkcgSy0+RyBMLT5HIE0tPkcKCnOqHgAACgpCdWlsZCB1cCB0byBhIHJlY3Vyc2l2ZSBTaWV2ZSBvZiBFcmF0b3N0aGVuZXMgZ2VuZXJhdG9yLgoKPj4+IGRlZiBmaXJzdG4oZywgbik6Ci4uLiAgICAgcmV0dXJuIFtnLm5leHQoKSBmb3IgaSBpbiByYW5nZShuKV0KCj4+PiBkZWYgaW50c2Zyb20oaSk6Ci4uLiAgICAgd2hpbGUgMToKLi4uICAgICAgICAgeWllbGQgaQouLi4gICAgICAgICBpICs9IDEKCj4+PiBmaXJzdG4oaW50c2Zyb20oNSksIDcpCls1LCA2LCA3LCA4LCA5LCAxMCwgMTFdCgo+Pj4gZGVmIGV4Y2x1ZGVfbXVsdGlwbGVzKG4sIGludHMpOgouLi4gICAgIGZvciBpIGluIGludHM6Ci4uLiAgICAgICAgIGlmIGkgJSBuOgouLi4gICAgICAgICAgICAgeWllbGQgaQoKPj4+IGZpcnN0bihleGNsdWRlX211bHRpcGxlcygzLCBpbnRzZnJvbSgxKSksIDYpClsxLCAyLCA0LCA1LCA3LCA4XQoKPj4+IGRlZiBzaWV2ZShpbnRzKToKLi4uICAgICBwcmltZSA9IGludHMubmV4dCgpCi4uLiAgICAgeWllbGQgcHJpbWUKLi4uICAgICBub3RfZGl2aXNpYmxlX2J5X3ByaW1lID0gZXhjbHVkZV9tdWx0aXBsZXMocHJpbWUsIGludHMpCi4uLiAgICAgZm9yIHAgaW4gc2lldmUobm90X2RpdmlzaWJsZV9ieV9wcmltZSk6Ci4uLiAgICAgICAgIHlpZWxkIHAKCj4+PiBwcmltZXMgPSBzaWV2ZShpbnRzZnJvbSgyKSkKPj4+IGZpcnN0bihwcmltZXMsIDIwKQpbMiwgMywgNSwgNywgMTEsIDEzLCAxNywgMTksIDIzLCAyOSwgMzEsIDM3LCA0MSwgNDMsIDQ3LCA1MywgNTksIDYxLCA2NywgNzFdCgoKQW5vdGhlciBmYW1vdXMgcHJvYmxlbTogIGdlbmVyYXRlIGFsbCBpbnRlZ2VycyBvZiB0aGUgZm9ybQogICAgMioqaSAqIDMqKmogICogNSoqawppbiBpbmNyZWFzaW5nIG9yZGVyLCB3aGVyZSBpLGosayA+PSAwLiAgVHJpY2tpZXIgdGhhbiBpdCBtYXkgbG9vayBhdCBmaXJzdCEKVHJ5IHdyaXRpbmcgaXQgd2l0aG91dCBnZW5lcmF0b3JzLCBhbmQgY29ycmVjdGx5LCBhbmQgd2l0aG91dCBnZW5lcmF0aW5nCjMgaW50ZXJuYWwgcmVzdWx0cyBmb3IgZWFjaCByZXN1bHQgb3V0cHV0LgoKPj4+IGRlZiB0aW1lcyhuLCBnKToKLi4uICAgICBmb3IgaSBpbiBnOgouLi4gICAgICAgICB5aWVsZCBuICogaQo+Pj4gZmlyc3RuKHRpbWVzKDEwLCBpbnRzZnJvbSgxKSksIDEwKQpbMTAsIDIwLCAzMCwgNDAsIDUwLCA2MCwgNzAsIDgwLCA5MCwgMTAwXQoKPj4+IGRlZiBtZXJnZShnLCBoKToKLi4uICAgICBuZyA9IGcubmV4dCgpCi4uLiAgICAgbmggPSBoLm5leHQoKQouLi4gICAgIHdoaWxlIDE6Ci4uLiAgICAgICAgIGlmIG5nIDwgbmg6Ci4uLiAgICAgICAgICAgICB5aWVsZCBuZwouLi4gICAgICAgICAgICAgbmcgPSBnLm5leHQoKQouLi4gICAgICAgICBlbGlmIG5nID4gbmg6Ci4uLiAgICAgICAgICAgICB5aWVsZCBuaAouLi4gICAgICAgICAgICAgbmggPSBoLm5leHQoKQouLi4gICAgICAgICBlbHNlOgouLi4gICAgICAgICAgICAgeWllbGQgbmcKLi4uICAgICAgICAgICAgIG5nID0gZy5uZXh0KCkKLi4uICAgICAgICAgICAgIG5oID0gaC5uZXh0KCkKClRoZSBmb2xsb3dpbmcgd29ya3MsIGJ1dCBpcyBkb2luZyBhIHdoYWxlIG9mIGEgbG90IG9mIHJlZHVuZGFudCB3b3JrIC0tCml0J3Mgbm90IGNsZWFyIGhvdyB0byBnZXQgdGhlIGludGVybmFsIHVzZXMgb2YgbTIzNSB0byBzaGFyZSBhIHNpbmdsZQpnZW5lcmF0b3IuICBOb3RlIHRoYXQgbWVfdGltZXMyIChldGMpIGVhY2ggbmVlZCB0byBzZWUgZXZlcnkgZWxlbWVudCBpbiB0aGUKcmVzdWx0IHNlcXVlbmNlLiAgU28gdGhpcyBpcyBhbiBleGFtcGxlIHdoZXJlIGxhenkgbGlzdHMgYXJlIG1vcmUgbmF0dXJhbAooeW91IGNhbiBsb29rIGF0IHRoZSBoZWFkIG9mIGEgbGF6eSBsaXN0IGFueSBudW1iZXIgb2YgdGltZXMpLgoKPj4+IGRlZiBtMjM1KCk6Ci4uLiAgICAgeWllbGQgMQouLi4gICAgIG1lX3RpbWVzMiA9IHRpbWVzKDIsIG0yMzUoKSkKLi4uICAgICBtZV90aW1lczMgPSB0aW1lcygzLCBtMjM1KCkpCi4uLiAgICAgbWVfdGltZXM1ID0gdGltZXMoNSwgbTIzNSgpKQouLi4gICAgIGZvciBpIGluIG1lcmdlKG1lcmdlKG1lX3RpbWVzMiwKLi4uICAgICAgICAgICAgICAgICAgICAgICAgICBtZV90aW1lczMpLAouLi4gICAgICAgICAgICAgICAgICAgIG1lX3RpbWVzNSk6Ci4uLiAgICAgICAgIHlpZWxkIGkKCkRvbid0IHByaW50ICJ0b28gbWFueSIgb2YgdGhlc2UgLS0gdGhlIGltcGxlbWVudGF0aW9uIGFib3ZlIGlzIGV4dHJlbWVseQppbmVmZmljaWVudDogIGVhY2ggY2FsbCBvZiBtMjM1KCkgbGVhZHMgdG8gMyByZWN1cnNpdmUgY2FsbHMsIGFuZCBpbgp0dXJuIGVhY2ggb2YgdGhvc2UgMyBtb3JlLCBhbmQgc28gb24sIGFuZCBzbyBvbiwgdW50aWwgd2UndmUgZGVzY2VuZGVkCmVub3VnaCBsZXZlbHMgdG8gc2F0aXNmeSB0aGUgcHJpbnQgc3RtdHMuICBWZXJ5IG9kZDogIHdoZW4gSSBwcmludGVkIDUKbGluZXMgb2YgcmVzdWx0cyBiZWxvdywgdGhpcyBtYW5hZ2VkIHRvIHNjcmV3IHVwIFdpbjk4J3MgbWFsbG9jIGluICJ0aGUKdXN1YWwiIHdheSwgaS5lLiB0aGUgaGVhcCBncmV3IG92ZXIgNE1iIHNvIFdpbjk4IHN0YXJ0ZWQgZnJhZ21lbnRpbmcKYWRkcmVzcyBzcGFjZSwgYW5kIGl0ICpsb29rZWQqIGxpa2UgYSB2ZXJ5IHNsb3cgbGVhay4KCj4+PiByZXN1bHQgPSBtMjM1KCkKPj4+IGZvciBpIGluIHJhbmdlKDMpOgouLi4gICAgIHByaW50IGZpcnN0bihyZXN1bHQsIDE1KQpbMSwgMiwgMywgNCwgNSwgNiwgOCwgOSwgMTAsIDEyLCAxNSwgMTYsIDE4LCAyMCwgMjRdClsyNSwgMjcsIDMwLCAzMiwgMzYsIDQwLCA0NSwgNDgsIDUwLCA1NCwgNjAsIDY0LCA3MiwgNzUsIDgwXQpbODEsIDkwLCA5NiwgMTAwLCAxMDgsIDEyMCwgMTI1LCAxMjgsIDEzNSwgMTQ0LCAxNTAsIDE2MCwgMTYyLCAxODAsIDE5Ml0KCkhlaC4gIEhlcmUncyBvbmUgd2F5IHRvIGdldCBhIHNoYXJlZCBsaXN0LCBjb21wbGV0ZSB3aXRoIGFuIGV4Y3J1Y2lhdGluZwpuYW1lc3BhY2UgcmVuYW1pbmcgdHJpY2suICBUaGUgKnByZXR0eSogcGFydCBpcyB0aGF0IHRoZSB0aW1lcygpIGFuZCBtZXJnZSgpCmZ1bmN0aW9ucyBjYW4gYmUgcmV1c2VkIGFzLWlzLCBiZWNhdXNlIHRoZXkgb25seSBhc3N1bWUgdGhlaXIgc3RyZWFtCmFyZ3VtZW50cyBhcmUgaXRlcmFibGUgLS0gYSBMYXp5TGlzdCBpcyB0aGUgc2FtZSBhcyBhIGdlbmVyYXRvciB0byB0aW1lcygpLgoKPj4+IGNsYXNzIExhenlMaXN0OgouLi4gICAgIGRlZiBfX2luaXRfXyhzZWxmLCBnKToKLi4uICAgICAgICAgc2VsZi5zb2ZhciA9IFtdCi4uLiAgICAgICAgIHNlbGYuZmV0Y2ggPSBnLm5leHQKLi4uCi4uLiAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgouLi4gICAgICAgICBzb2ZhciwgZmV0Y2ggPSBzZWxmLnNvZmFyLCBzZWxmLmZldGNoCi4uLiAgICAgICAgIHdoaWxlIGkgPj0gbGVuKHNvZmFyKToKLi4uICAgICAgICAgICAgIHNvZmFyLmFwcGVuZChmZXRjaCgpKQouLi4gICAgICAgICByZXR1cm4gc29mYXJbaV0KCj4+PiBkZWYgbTIzNSgpOgouLi4gICAgIHlpZWxkIDEKLi4uICAgICAjIEdhY2s6ICBtMjM1IGJlbG93IGFjdHVhbGx5IHJlZmVycyB0byBhIExhenlMaXN0LgouLi4gICAgIG1lX3RpbWVzMiA9IHRpbWVzKDIsIG0yMzUpCi4uLiAgICAgbWVfdGltZXMzID0gdGltZXMoMywgbTIzNSkKLi4uICAgICBtZV90aW1lczUgPSB0aW1lcyg1LCBtMjM1KQouLi4gICAgIGZvciBpIGluIG1lcmdlKG1lcmdlKG1lX3RpbWVzMiwKLi4uICAgICAgICAgICAgICAgICAgICAgICAgICBtZV90aW1lczMpLAouLi4gICAgICAgICAgICAgICAgICAgIG1lX3RpbWVzNSk6Ci4uLiAgICAgICAgIHlpZWxkIGkKClByaW50IGFzIG1hbnkgb2YgdGhlc2UgYXMgeW91IGxpa2UgLS0gKnRoaXMqIGltcGxlbWVudGF0aW9uIGlzIG1lbW9yeS0KZWZmaWNpZW50LgoKPj4+IG0yMzUgPSBMYXp5TGlzdChtMjM1KCkpCj4+PiBmb3IgaSBpbiByYW5nZSg1KToKLi4uICAgICBwcmludCBbbTIzNVtqXSBmb3IgaiBpbiByYW5nZSgxNSppLCAxNSooaSsxKSldClsxLCAyLCAzLCA0LCA1LCA2LCA4LCA5LCAxMCwgMTIsIDE1LCAxNiwgMTgsIDIwLCAyNF0KWzI1LCAyNywgMzAsIDMyLCAzNiwgNDAsIDQ1LCA0OCwgNTAsIDU0LCA2MCwgNjQsIDcyLCA3NSwgODBdCls4MSwgOTAsIDk2LCAxMDAsIDEwOCwgMTIwLCAxMjUsIDEyOCwgMTM1LCAxNDQsIDE1MCwgMTYwLCAxNjIsIDE4MCwgMTkyXQpbMjAwLCAyMTYsIDIyNSwgMjQwLCAyNDMsIDI1MCwgMjU2LCAyNzAsIDI4OCwgMzAwLCAzMjAsIDMyNCwgMzYwLCAzNzUsIDM4NF0KWzQwMCwgNDA1LCA0MzIsIDQ1MCwgNDgwLCA0ODYsIDUwMCwgNTEyLCA1NDAsIDU3NiwgNjAwLCA2MjUsIDY0MCwgNjQ4LCA2NzVdCgpZZSBvbGRlIEZpYm9uYWNjaSBnZW5lcmF0b3IsIExhenlMaXN0IHN0eWxlLgoKPj4+IGRlZiBmaWJnZW4oYSwgYik6Ci4uLgouLi4gICAgIGRlZiBzdW0oZywgaCk6Ci4uLiAgICAgICAgIHdoaWxlIDE6Ci4uLiAgICAgICAgICAgICB5aWVsZCBnLm5leHQoKSArIGgubmV4dCgpCi4uLgouLi4gICAgIGRlZiB0YWlsKGcpOgouLi4gICAgICAgICBnLm5leHQoKSAgICAjIHRocm93IGZpcnN0IGF3YXkKLi4uICAgICAgICAgZm9yIHggaW4gZzoKLi4uICAgICAgICAgICAgIHlpZWxkIHgKLi4uCi4uLiAgICAgeWllbGQgYQouLi4gICAgIHlpZWxkIGIKLi4uICAgICBmb3IgcyBpbiBzdW0oaXRlcihmaWIpLAouLi4gICAgICAgICAgICAgICAgICB0YWlsKGl0ZXIoZmliKSkpOgouLi4gICAgICAgICB5aWVsZCBzCgo+Pj4gZmliID0gTGF6eUxpc3QoZmliZ2VuKDEsIDIpKQo+Pj4gZmlyc3RuKGl0ZXIoZmliKSwgMTcpClsxLCAyLCAzLCA1LCA4LCAxMywgMjEsIDM0LCA1NSwgODksIDE0NCwgMjMzLCAzNzcsIDYxMCwgOTg3LCAxNTk3LCAyNTg0XQoKClJ1bm5pbmcgYWZ0ZXIgeW91ciB0YWlsIHdpdGggaXRlcnRvb2xzLnRlZSAobmV3IGluIHZlcnNpb24gMi40KQoKVGhlIGFsZ29yaXRobXMgIm0yMzUiIChIYW1taW5nKSBhbmQgRmlib25hY2NpIHByZXNlbnRlZCBhYm92ZSBhcmUgYm90aApleGFtcGxlcyBvZiBhIHdob2xlIGZhbWlseSBvZiBGUCAoZnVuY3Rpb25hbCBwcm9ncmFtbWluZykgYWxnb3JpdGhtcwp3aGVyZSBhIGZ1bmN0aW9uIHByb2R1Y2VzIGFuZCByZXR1cm5zIGEgbGlzdCB3aGlsZSB0aGUgcHJvZHVjdGlvbiBhbGdvcml0aG0Kc3VwcG9zZSB0aGUgbGlzdCBhcyBhbHJlYWR5IHByb2R1Y2VkIGJ5IHJlY3Vyc2l2ZWx5IGNhbGxpbmcgaXRzZWxmLgpGb3IgdGhlc2UgYWxnb3JpdGhtcyB0byB3b3JrLCB0aGV5IG11c3Q6CgotIHByb2R1Y2UgYXQgbGVhc3QgYSBmaXJzdCBlbGVtZW50IHdpdGhvdXQgcHJlc3VwcG9zaW5nIHRoZSBleGlzdGVuY2Ugb2YKICB0aGUgcmVzdCBvZiB0aGUgbGlzdAotIHByb2R1Y2UgdGhlaXIgZWxlbWVudHMgaW4gYSBsYXp5IG1hbm5lcgoKVG8gd29yayBlZmZpY2llbnRseSwgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdCBtdXN0IG5vdCBiZSByZWNvbXB1dGVkIG92ZXIKYW5kIG92ZXIgYWdhaW4uIFRoaXMgaXMgZW5zdXJlZCBpbiBtb3N0IEZQIGxhbmd1YWdlcyBhcyBhIGJ1aWx0LWluIGZlYXR1cmUuCkluIHB5dGhvbiwgd2UgaGF2ZSB0byBleHBsaWNpdGx5IG1haW50YWluIGEgbGlzdCBvZiBhbHJlYWR5IGNvbXB1dGVkIHJlc3VsdHMKYW5kIGFiYW5kb24gZ2VudWluZSByZWN1cnNpdml0eS4KClRoaXMgaXMgd2hhdCBoYWQgYmVlbiBhdHRlbXB0ZWQgYWJvdmUgd2l0aCB0aGUgTGF6eUxpc3QgY2xhc3MuIE9uZSBwcm9ibGVtCndpdGggdGhhdCBjbGFzcyBpcyB0aGF0IGl0IGtlZXBzIGEgbGlzdCBvZiBhbGwgb2YgdGhlIGdlbmVyYXRlZCByZXN1bHRzIGFuZAp0aGVyZWZvcmUgY29udGludWFsbHkgZ3Jvd3MuIFRoaXMgcGFydGlhbGx5IGRlZmVhdHMgdGhlIGdvYWwgb2YgdGhlIGdlbmVyYXRvcgpjb25jZXB0LCB2aXouIHByb2R1Y2UgdGhlIHJlc3VsdHMgb25seSBhcyBuZWVkZWQgaW5zdGVhZCBvZiBwcm9kdWNpbmcgdGhlbQphbGwgYW5kIHRoZXJlYnkgd2FzdGluZyBtZW1vcnkuCgpUaGFua3MgdG8gaXRlcnRvb2xzLnRlZSwgaXQgaXMgbm93IGNsZWFyICJob3cgdG8gZ2V0IHRoZSBpbnRlcm5hbCB1c2VzIG9mCm0yMzUgdG8gc2hhcmUgYSBzaW5nbGUgZ2VuZXJhdG9yIi4KCj4+PiBmcm9tIGl0ZXJ0b29scyBpbXBvcnQgdGVlCj4+PiBkZWYgbTIzNSgpOgouLi4gICAgIGRlZiBfbTIzNSgpOgouLi4gICAgICAgICB5aWVsZCAxCi4uLiAgICAgICAgIGZvciBuIGluIG1lcmdlKHRpbWVzKDIsIG0yKSwKLi4uICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2UodGltZXMoMywgbTMpLAouLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcyg1LCBtNSkpKToKLi4uICAgICAgICAgICAgIHlpZWxkIG4KLi4uICAgICBtMSA9IF9tMjM1KCkKLi4uICAgICBtMiwgbTMsIG01LCBtUmVzID0gdGVlKG0xLCA0KQouLi4gICAgIHJldHVybiBtUmVzCgo+Pj4gaXQgPSBtMjM1KCkKPj4+IGZvciBpIGluIHJhbmdlKDUpOgouLi4gICAgIHByaW50IGZpcnN0bihpdCwgMTUpClsxLCAyLCAzLCA0LCA1LCA2LCA4LCA5LCAxMCwgMTIsIDE1LCAxNiwgMTgsIDIwLCAyNF0KWzI1LCAyNywgMzAsIDMyLCAzNiwgNDAsIDQ1LCA0OCwgNTAsIDU0LCA2MCwgNjQsIDcyLCA3NSwgODBdCls4MSwgOTAsIDk2LCAxMDAsIDEwOCwgMTIwLCAxMjUsIDEyOCwgMTM1LCAxNDQsIDE1MCwgMTYwLCAxNjIsIDE4MCwgMTkyXQpbMjAwLCAyMTYsIDIyNSwgMjQwLCAyNDMsIDI1MCwgMjU2LCAyNzAsIDI4OCwgMzAwLCAzMjAsIDMyNCwgMzYwLCAzNzUsIDM4NF0KWzQwMCwgNDA1LCA0MzIsIDQ1MCwgNDgwLCA0ODYsIDUwMCwgNTEyLCA1NDAsIDU3NiwgNjAwLCA2MjUsIDY0MCwgNjQ4LCA2NzVdCgpUaGUgInRlZSIgZnVuY3Rpb24gZG9lcyBqdXN0IHdoYXQgd2Ugd2FudC4gSXQgaW50ZXJuYWxseSBrZWVwcyBhIGdlbmVyYXRlZApyZXN1bHQgZm9yIGFzIGxvbmcgYXMgaXQgaGFzIG5vdCBiZWVuICJjb25zdW1lZCIgZnJvbSBhbGwgb2YgdGhlIGR1cGxpY2F0ZWQKaXRlcmF0b3JzLCB3aGVyZXVwb24gaXQgaXMgZGVsZXRlZC4gWW91IGNhbiB0aGVyZWZvcmUgcHJpbnQgdGhlIGhhbW1pbmcKc2VxdWVuY2UgZHVyaW5nIGhvdXJzIHdpdGhvdXQgaW5jcmVhc2luZyBtZW1vcnkgdXNhZ2UsIG9yIHZlcnkgbGl0dGxlLgoKVGhlIGJlYXV0eSBvZiBpdCBpcyB0aGF0IHJlY3Vyc2l2ZSBydW5uaW5nLWFmdGVyLXRoZWlyLXRhaWwgRlAgYWxnb3JpdGhtcwphcmUgcXVpdGUgc3RyYWlnaHRmb3J3YXJkbHkgZXhwcmVzc2VkIHdpdGggdGhpcyBQeXRob24gaWRpb20uCgpZZSBvbGRlIEZpYm9uYWNjaSBnZW5lcmF0b3IsIHRlZSBzdHlsZS4KCj4+PiBkZWYgZmliKCk6Ci4uLgouLi4gICAgIGRlZiBfaXN1bShnLCBoKToKLi4uICAgICAgICAgd2hpbGUgMToKLi4uICAgICAgICAgICAgIHlpZWxkIGcubmV4dCgpICsgaC5uZXh0KCkKLi4uCi4uLiAgICAgZGVmIF9maWIoKToKLi4uICAgICAgICAgeWllbGQgMQouLi4gICAgICAgICB5aWVsZCAyCi4uLiAgICAgICAgIGZpYlRhaWwubmV4dCgpICMgdGhyb3cgZmlyc3QgYXdheQouLi4gICAgICAgICBmb3IgcmVzIGluIF9pc3VtKGZpYkhlYWQsIGZpYlRhaWwpOgouLi4gICAgICAgICAgICAgeWllbGQgcmVzCi4uLgouLi4gICAgIHJlYWxmaWIgPSBfZmliKCkKLi4uICAgICBmaWJIZWFkLCBmaWJUYWlsLCBmaWJSZXMgPSB0ZWUocmVhbGZpYiwgMykKLi4uICAgICByZXR1cm4gZmliUmVzCgo+Pj4gZmlyc3RuKGZpYigpLCAxNykKWzEsIDIsIDMsIDUsIDgsIDEzLCAyMSwgMzQsIDU1LCA4OSwgMTQ0LCAyMzMsIDM3NywgNjEwLCA5ODcsIDE1OTcsIDI1ODRdCgpzmw8AAAoKPj4+IGRlZiBmKCk6Ci4uLiAgICAgcmV0dXJuIDIyCi4uLiAgICAgeWllbGQgMQpUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgLi4KU3ludGF4RXJyb3I6ICdyZXR1cm4nIHdpdGggYXJndW1lbnQgaW5zaWRlIGdlbmVyYXRvciAoPGRvY3Rlc3QgdGVzdC50ZXN0X2dlbmVyYXRvcnMuX190ZXN0X18uc3ludGF4WzBdPiwgbGluZSAzKQoKPj4+IGRlZiBmKCk6Ci4uLiAgICAgeWllbGQgMQouLi4gICAgIHJldHVybiAyMgpUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgLi4KU3ludGF4RXJyb3I6ICdyZXR1cm4nIHdpdGggYXJndW1lbnQgaW5zaWRlIGdlbmVyYXRvciAoPGRvY3Rlc3QgdGVzdC50ZXN0X2dlbmVyYXRvcnMuX190ZXN0X18uc3ludGF4WzFdPiwgbGluZSAzKQoKInJldHVybiBOb25lIiBpcyBub3QgdGhlIHNhbWUgYXMgInJldHVybiIgaW4gYSBnZW5lcmF0b3I6Cgo+Pj4gZGVmIGYoKToKLi4uICAgICB5aWVsZCAxCi4uLiAgICAgcmV0dXJuIE5vbmUKVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogIC4uClN5bnRheEVycm9yOiAncmV0dXJuJyB3aXRoIGFyZ3VtZW50IGluc2lkZSBnZW5lcmF0b3IgKDxkb2N0ZXN0IHRlc3QudGVzdF9nZW5lcmF0b3JzLl9fdGVzdF9fLnN5bnRheFsyXT4sIGxpbmUgMykKClRoZXNlIGFyZSBmaW5lOgoKPj4+IGRlZiBmKCk6Ci4uLiAgICAgeWllbGQgMQouLi4gICAgIHJldHVybgoKPj4+IGRlZiBmKCk6Ci4uLiAgICAgdHJ5OgouLi4gICAgICAgICB5aWVsZCAxCi4uLiAgICAgZmluYWxseToKLi4uICAgICAgICAgcGFzcwoKPj4+IGRlZiBmKCk6Ci4uLiAgICAgdHJ5OgouLi4gICAgICAgICB0cnk6Ci4uLiAgICAgICAgICAgICAxLy8wCi4uLiAgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKLi4uICAgICAgICAgICAgIHlpZWxkIDY2NgouLi4gICAgICAgICBleGNlcHQ6Ci4uLiAgICAgICAgICAgICBwYXNzCi4uLiAgICAgZmluYWxseToKLi4uICAgICAgICAgcGFzcwoKPj4+IGRlZiBmKCk6Ci4uLiAgICAgdHJ5OgouLi4gICAgICAgICB0cnk6Ci4uLiAgICAgICAgICAgICB5aWVsZCAxMgouLi4gICAgICAgICAgICAgMS8vMAouLi4gICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6Ci4uLiAgICAgICAgICAgICB5aWVsZCA2NjYKLi4uICAgICAgICAgZXhjZXB0OgouLi4gICAgICAgICAgICAgdHJ5OgouLi4gICAgICAgICAgICAgICAgIHggPSAxMgouLi4gICAgICAgICAgICAgZmluYWxseToKLi4uICAgICAgICAgICAgICAgICB5aWVsZCAxMgouLi4gICAgIGV4Y2VwdDoKLi4uICAgICAgICAgcmV0dXJuCj4+PiBsaXN0KGYoKSkKWzEyLCA2NjZdCgo+Pj4gZGVmIGYoKToKLi4uICAgIHlpZWxkCj4+PiB0eXBlKGYoKSkKPHR5cGUgJ2dlbmVyYXRvcic+CgoKPj4+IGRlZiBmKCk6Ci4uLiAgICBpZiAwOgouLi4gICAgICAgIHlpZWxkCj4+PiB0eXBlKGYoKSkKPHR5cGUgJ2dlbmVyYXRvcic+CgoKPj4+IGRlZiBmKCk6Ci4uLiAgICAgaWYgMDoKLi4uICAgICAgICAgeWllbGQgMQo+Pj4gdHlwZShmKCkpCjx0eXBlICdnZW5lcmF0b3InPgoKPj4+IGRlZiBmKCk6Ci4uLiAgICBpZiAiIjoKLi4uICAgICAgICB5aWVsZCBOb25lCj4+PiB0eXBlKGYoKSkKPHR5cGUgJ2dlbmVyYXRvcic+Cgo+Pj4gZGVmIGYoKToKLi4uICAgICByZXR1cm4KLi4uICAgICB0cnk6Ci4uLiAgICAgICAgIGlmIHg9PTQ6Ci4uLiAgICAgICAgICAgICBwYXNzCi4uLiAgICAgICAgIGVsaWYgMDoKLi4uICAgICAgICAgICAgIHRyeToKLi4uICAgICAgICAgICAgICAgICAxLy8wCi4uLiAgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6Ci4uLiAgICAgICAgICAgICAgICAgcGFzcwouLi4gICAgICAgICAgICAgZWxzZToKLi4uICAgICAgICAgICAgICAgICBpZiAwOgouLi4gICAgICAgICAgICAgICAgICAgICB3aGlsZSAxMjoKLi4uICAgICAgICAgICAgICAgICAgICAgICAgIHggKz0gMQouLi4gICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgMiAjIGRvbid0IGJsaW5rCi4uLiAgICAgICAgICAgICAgICAgICAgICAgICBmKGEsIGIsIGMsIGQsIGUpCi4uLiAgICAgICAgIGVsc2U6Ci4uLiAgICAgICAgICAgICBwYXNzCi4uLiAgICAgZXhjZXB0OgouLi4gICAgICAgICB4ID0gMQouLi4gICAgIHJldHVybgo+Pj4gdHlwZShmKCkpCjx0eXBlICdnZW5lcmF0b3InPgoKPj4+IGRlZiBmKCk6Ci4uLiAgICAgaWYgMDoKLi4uICAgICAgICAgZGVmIGcoKToKLi4uICAgICAgICAgICAgIHlpZWxkIDEKLi4uCj4+PiB0eXBlKGYoKSkKPHR5cGUgJ05vbmVUeXBlJz4KCj4+PiBkZWYgZigpOgouLi4gICAgIGlmIDA6Ci4uLiAgICAgICAgIGNsYXNzIEM6Ci4uLiAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6Ci4uLiAgICAgICAgICAgICAgICAgeWllbGQgMQouLi4gICAgICAgICAgICAgZGVmIGYoc2VsZik6Ci4uLiAgICAgICAgICAgICAgICAgeWllbGQgMgo+Pj4gdHlwZShmKCkpCjx0eXBlICdOb25lVHlwZSc+Cgo+Pj4gZGVmIGYoKToKLi4uICAgICBpZiAwOgouLi4gICAgICAgICByZXR1cm4KLi4uICAgICBpZiAwOgouLi4gICAgICAgICB5aWVsZCAyCj4+PiB0eXBlKGYoKSkKPHR5cGUgJ2dlbmVyYXRvcic+CgoKPj4+IGRlZiBmKCk6Ci4uLiAgICAgaWYgMDoKLi4uICAgICAgICAgbGFtYmRhIHg6ICB4ICAgICAgICAjIHNob3VsZG4ndCB0cmlnZ2VyIGhlcmUKLi4uICAgICAgICAgcmV0dXJuICAgICAgICAgICAgICAjIG9yIGhlcmUKLi4uICAgICAgICAgZGVmIGYoaSk6Ci4uLiAgICAgICAgICAgICByZXR1cm4gMippICAgICAgIyBvciBoZXJlCi4uLiAgICAgICAgIGlmIDA6Ci4uLiAgICAgICAgICAgICByZXR1cm4gMyAgICAgICAgIyBidXQgKnRoaXMqIHN1Y2tzIChsaW5lIDgpCi4uLiAgICAgaWYgMDoKLi4uICAgICAgICAgeWllbGQgMiAgICAgICAgICAgICAjIGJlY2F1c2UgaXQncyBhIGdlbmVyYXRvciAobGluZSAxMCkKVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgpTeW50YXhFcnJvcjogJ3JldHVybicgd2l0aCBhcmd1bWVudCBpbnNpZGUgZ2VuZXJhdG9yICg8ZG9jdGVzdCB0ZXN0LnRlc3RfZ2VuZXJhdG9ycy5fX3Rlc3RfXy5zeW50YXhbMjRdPiwgbGluZSAxMCkKClRoaXMgb25lIGNhdXNlZCBhIGNyYXNoIChzZWUgU0YgYnVnIDU2NzUzOCk6Cgo+Pj4gZGVmIGYoKToKLi4uICAgICBmb3IgaSBpbiByYW5nZSgzKToKLi4uICAgICAgICAgdHJ5OgouLi4gICAgICAgICAgICAgY29udGludWUKLi4uICAgICAgICAgZmluYWxseToKLi4uICAgICAgICAgICAgIHlpZWxkIGkKLi4uCj4+PiBnID0gZigpCj4+PiBwcmludCBnLm5leHQoKQowCj4+PiBwcmludCBnLm5leHQoKQoxCj4+PiBwcmludCBnLm5leHQoKQoyCj4+PiBwcmludCBnLm5leHQoKQpUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6ClN0b3BJdGVyYXRpb24KCgpUZXN0IHRoZSBnaV9jb2RlIGF0dHJpYnV0ZQoKPj4+IGRlZiBmKCk6Ci4uLiAgICAgeWllbGQgNQouLi4KPj4+IGcgPSBmKCkKPj4+IGcuZ2lfY29kZSBpcyBmLmZ1bmNfY29kZQpUcnVlCj4+PiBnLm5leHQoKQo1Cj4+PiBnLm5l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ZXJhdGUgdGhlIDMtYml0IGJpbmFyeSBudW1iZXJzIGluIG9yZGVyLiAgVGhpcyBpbGx1c3RyYXRlcyBkdW1iZXN0LQpwb3NzaWJsZSB1c2Ugb2YgY29uam9pbiwganVzdCB0byBnZW5lcmF0ZSB0aGUgZnVsbCBjcm9zcy1wcm9kdWN0LgoKPj4+IGZvciBjIGluIGNvbmpvaW4oW2xhbWJkYTogaXRlcigoMCwgMSkpXSAqIDMpOgouLi4gICAgIHByaW50IGMKWzAsIDAsIDBdClswLCAwLCAxXQpbMCwgMSwgMF0KWzAsIDEsIDFdClsxLCAwLCAwXQpbMSwgMCwgMV0KWzEsIDEsIDBdClsxLCAxLCAxXQoKRm9yIGVmZmljaWVuY3kgaW4gdHlwaWNhbCBiYWNrdHJhY2tpbmcgYXBwcywgY29uam9pbigpIHlpZWxkcyB0aGUgc2FtZSBsaXN0Cm9iamVjdCBlYWNoIHRpbWUuICBTbyBpZiB5b3Ugd2FudCB0byBzYXZlIGF3YXkgYSBmdWxsIGFjY291bnQgb2YgaXRzCmdlbmVyYXRlZCBzZXF1ZW5jZSwgeW91IG5lZWQgdG8gY29weSBpdHMgcmVzdWx0cy4KCj4+PiBkZWYgZ2VuY29weShpdGVyYXRvcik6Ci4uLiAgICAgZm9yIHggaW4gaXRlcmF0b3I6Ci4uLiAgICAgICAgIHlpZWxkIHhbOl0KCj4+PiBmb3IgbiBpbiByYW5nZSgxMCk6Ci4uLiAgICAgYWxsID0gbGlzdChnZW5jb3B5KGNvbmpvaW4oW2xhbWJkYTogaXRlcigoMCwgMSkpXSAqIG4pKSkKLi4uICAgICBwcmludCBuLCBsZW4oYWxsKSwgYWxsWzBdID09IFswXSAqIG4sIGFsbFstMV0gPT0gWzFdICogbgowIDEgVHJ1ZSBUcnVlCjEgMiBUcnVlIFRydWUKMiA0IFRydWUgVHJ1ZQozIDggVHJ1ZSBUcnVlCjQgMTYgVHJ1ZSBUcnVlCjUgMzIgVHJ1ZSBUcnVlCjYgNjQgVHJ1ZSBUcnVlCjcgMTI4IFRydWUgVHJ1ZQo4IDI1NiBUcnVlIFRydWUKOSA1MTIgVHJ1ZSBUcnVlCgpBbmQgcnVuIGFuIDgtcXVlZW5zIHNvbHZlci4KCj4+PiBxID0gUXVlZW5zKDgpCj4+PiBMSU1JVCA9IDIKPj4+IGNvdW50ID0gMAo+Pj4gZm9yIHJvdzJjb2wgaW4gcS5zb2x2ZSgpOgouLi4gICAgIGNvdW50ICs9IDEKLi4uICAgICBpZiBjb3VudCA8PSBMSU1JVDoKLi4uICAgICAgICAgcHJpbnQgIlNvbHV0aW9uIiwgY291bnQKLi4uICAgICAgICAgcS5wcmludHNvbHV0aW9uKHJvdzJjb2wpClNvbHV0aW9uIDEKKy0rLSstKy0rLSstKy0rLSsKfFF8IHwgfCB8IHwgfCB8IHwKKy0rLSstKy0rLSstKy0rLSsKfCB8IHwgfCB8UXwgfCB8IHwKKy0rLSstKy0rLSstKy0rLSsKfCB8IHwgfCB8IHwgfCB8UXwKKy0rLSstKy0rLSstKy0rLSsKfCB8IHwgfCB8IHxRfCB8IHwKKy0rLSstKy0rLSstKy0rLSsKfCB8IHxRfCB8IHwgfCB8IHwKKy0rLSstKy0rLSstKy0rLSsKfCB8IHwgfCB8IHwgfFF8IHwKKy0rLSstKy0rLSstKy0rLSsKfCB8UXwgfCB8IHwgfCB8IHwKKy0rLSstKy0rLSstKy0rLSsKfCB8IHwgfFF8IHwgfCB8IHwKKy0rLSstKy0rLSstKy0rLSsKU29sdXRpb24gMgorLSstKy0rLSstKy0rLSstKwp8UXwgfCB8IHwgfCB8IHwgfAorLSstKy0rLSstKy0rLSstKwp8IHwgfCB8IHwgfFF8IHwgfAorLSstKy0rLSstKy0rLSstKwp8IHwgfCB8IHwgfCB8IHxRfAorLSstKy0rLSstKy0rLSstKwp8IHwgfFF8IHwgfCB8IHwgfAorLSstKy0rLSstKy0rLSstKwp8IHwgfCB8IHwgfCB8UXwgfAorLSstKy0rLSstKy0rLSstKwp8IHwgfCB8UXwgfCB8IHwgfAorLSstKy0rLSstKy0rLSstKwp8IHxRfCB8IHwgfCB8IHwgfAorLSstKy0rLSstKy0rLSstKwp8IHwgfCB8IHxRfCB8IHwgfAorLSstKy0rLSstKy0rLSstKwoKPj4+IHByaW50IGNvdW50LCAic29sdXRpb25zIGluIGFsbC4iCjkyIHNvbHV0aW9ucyBpbiBhbGwuCgpBbmQgcnVuIGEgS25pZ2h0J3MgVG91ciBvbiBhIDEweDEwIGJvYXJkLiAgTm90ZSB0aGF0IHRoZXJlIGFyZSBhYm91dAoyMCwwMDAgc29sdXRpb25zIGV2ZW4gb24gYSA2eDYgYm9hcmQsIHNvIGRvbid0IGRhcmUgcnVuIHRoaXMgdG8gZXhoYXVzdGlvbi4KCj4+PiBrID0gS25pZ2h0cygxMCwgMTApCj4+PiBMSU1JVCA9IDIKPj4+IGNvdW50ID0gMAo+Pj4gZm9yIHggaW4gay5zb2x2ZSgpOgouLi4gICAgIGNvdW50ICs9IDEKLi4uICAgICBpZiBjb3VudCA8PSBMSU1JVDoKLi4uICAgICAgICAgcHJpbnQgIlNvbHV0aW9uIiwgY291bnQKLi4uICAgICAgICAgay5wcmludHNvbHV0aW9uKHgpCi4uLiAgICAgZWxzZToKLi4uICAgICAgICAgYnJlYWsKU29sdXRpb24gMQorLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKwp8ICAxfCA1OHwgMjd8IDM0fCAgM3wgNDB8IDI5fCAxMHwgIDV8ICA4fAorLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKwp8IDI2fCAzNXwgIDJ8IDU3fCAyOHwgMzN8ICA0fCAgN3wgMzB8IDExfAorLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKwp8IDU5fDEwMHwgNzN8IDM2fCA0MXwgNTZ8IDM5fCAzMnwgIDl8ICA2fAorLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKwp8IDc0fCAyNXwgNjB8IDU1fCA3MnwgMzd8IDQyfCA0OXwgMTJ8IDMxfAorLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKwp8IDYxfCA4NnwgOTl8IDc2fCA2M3wgNTJ8IDQ3fCAzOHwgNDN8IDUwfAorLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKwp8IDI0fCA3NXwgNjJ8IDg1fCA1NHwgNzF8IDY0fCA1MXwgNDh8IDEzfAorLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKwp8IDg3fCA5OHwgOTF8IDgwfCA3N3wgODR8IDUzfCA0NnwgNjV8IDQ0fAorLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKwp8IDkwfCAyM3wgODh8IDk1fCA3MHwgNzl8IDY4fCA4M3wgMTR8IDE3fAorLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKwp8IDk3fCA5MnwgMjF8IDc4fCA4MXwgOTR8IDE5fCAxNnwgNDV8IDY2fAorLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKwp8IDIyfCA4OXwgOTZ8IDkzfCAyMHwgNjl8IDgyfCA2N3wgMTh8IDE1fAorLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKwpTb2x1dGlvbiAyCistLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCnwgIDF8IDU4fCAyN3wgMzR8ICAzfCA0MHwgMjl8IDEwfCAgNXwgIDh8CistLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCnwgMjZ8IDM1fCAgMnwgNTd8IDI4fCAzM3wgIDR8ICA3fCAzMHwgMTF8CistLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCnwgNTl8MTAwfCA3M3wgMzZ8IDQxfCA1NnwgMzl8IDMyfCAgOXwgIDZ8CistLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCnwgNzR8IDI1fCA2MHwgNTV8IDcyfCAzN3wgNDJ8IDQ5fCAxMnwgMzF8CistLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCnwgNjF8IDg2fCA5OXwgNzZ8IDYzfCA1MnwgNDd8IDM4fCA0M3wgNTB8CistLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCnwgMjR8IDc1fCA2MnwgODV8IDU0fCA3MXwgNjR8IDUxfCA0OHwgMTN8CistLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCnwgODd8IDk4fCA4OXwgODB8IDc3fCA4NHwgNTN8IDQ2fCA2NXwgNDR8CistLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCnwgOTB8IDIzfCA5MnwgOTV8IDcwfCA3OXwgNjh8IDgzfCAxNHwgMTd8CistLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCnwgOTd8IDg4fCAyMXwgNzh8IDgxfCA5NHwgMTl8IDE2fCA0NXwgNjZ8CistLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCnwgMjJ8IDkxfCA5NnwgOTN8IDIwfCA2OXwgODJ8IDY3fCAxOHwgMTV8CistLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCnNNAQAAR2VuZXJhdG9ycyBhcmUgd2Vha2x5IHJlZmVyZW5jYWJsZToKCj4+PiBpbXBvcnQgd2Vha3JlZgo+Pj4gZGVmIGdlbigpOgouLi4gICAgIHlpZWxkICdmb28hJwouLi4KPj4+IHdyID0gd2Vha3JlZi5yZWYoZ2VuKQo+Pj4gd3IoKSBpcyBnZW4KVHJ1ZQo+Pj4gcCA9IHdlYWtyZWYucHJveHkoZ2VuKQoKR2VuZXJhdG9yLWl0ZXJhdG9ycyBhcmUgd2Vha2x5IHJlZmVyZW5jYWJsZSBhcyB3ZWxsOgoKPj4+IGdpID0gZ2VuKCkKPj4+IHdyID0gd2Vha3JlZi5yZWYoZ2kpCj4+PiB3cigpIGlzIGdpClRydWUKPj4+IHAgPSB3ZWFrcmVmLnByb3h5KGdpKQo+Pj4gbGlzdChwKQpbJ2ZvbyEnXQoKc1YYAABTZW5kaW5nIGEgdmFsdWUgaW50byBhIHN0YXJ0ZWQgZ2VuZXJhdG9yOgoKPj4+IGRlZiBmKCk6Ci4uLiAgICAgcHJpbnQgKHlpZWxkIDEpCi4uLiAgICAgeWllbGQgMgo+Pj4gZyA9IGYoKQo+Pj4gZy5uZXh0KCkKMQo+Pj4gZy5zZW5kKDQyKQo0MgoyCgpTZW5kaW5nIGEgdmFsdWUgaW50byBhIG5ldyBnZW5lcmF0b3IgcHJvZHVjZXMgYSBUeXBlRXJyb3I6Cgo+Pj4gZigpLnNlbmQoImZvbyIpClRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLi4uClR5cGVFcnJvcjogY2FuJ3Qgc2VuZCBub24tTm9uZSB2YWx1ZSB0byBhIGp1c3Qtc3RhcnRlZCBnZW5lcmF0b3IKCgpZaWVsZCBieSBpdHNlbGYgeWllbGRzIE5vbmU6Cgo+Pj4gZGVmIGYoKTogeWllbGQKPj4+IGxpc3QoZigpKQpbTm9uZV0KCgoKQW4gb2JzY2VuZSBhYnVzZSBvZiBhIHlpZWxkIGV4cHJlc3Npb24gd2l0aGluIGEgZ2VuZXJhdG9yIGV4cHJlc3Npb246Cgo+Pj4gbGlzdCgoeWllbGQgMjEpIGZvciBpIGluIHJhbmdlKDQpKQpbMjEsIE5vbmUsIDIxLCBOb25lLCAyMSwgTm9uZSwgMjEsIE5vbmVdCgpBbmQgYSBtb3JlIHNhbmUsIGJ1dCBzdGlsbCB3ZWlyZCB1c2FnZToKCj4+PiBkZWYgZigpOiBsaXN0KGkgZm9yIGkgaW4gWyh5aWVsZCAyNildKQo+Pj4gdHlwZShmKCkpCjx0eXBlICdnZW5lcmF0b3InPgoKCkEgeWllbGQgZXhwcmVzc2lvbiB3aXRoIGF1Z21lbnRlZCBhc3NpZ25tZW50LgoKPj4+IGRlZiBjb3JvdXRpbmUoc2VxKToKLi4uICAgICBjb3VudCA9IDAKLi4uICAgICB3aGlsZSBjb3VudCA8IDIwMDoKLi4uICAgICAgICAgY291bnQgKz0geWllbGQKLi4uICAgICAgICAgc2VxLmFwcGVuZChjb3VudCkKPj4+IHNlcSA9IFtdCj4+PiBjID0gY29yb3V0aW5lKHNlcSkKPj4+IGMubmV4dCgpCj4+PiBwcmludCBzZXEKW10KPj4+IGMuc2VuZCgxMCkKPj4+IHByaW50IHNlcQpbMTBdCj4+PiBjLnNlbmQoMTApCj4+PiBwcmludCBzZXEKWzEwLCAyMF0KPj4+IGMuc2VuZCgxMCkKPj4+IHByaW50IHNlcQpbMTAsIDIwLCAzMF0KCgpDaGVjayBzb21lIHN5bnRheCBlcnJvcnMgZm9yIHlpZWxkIGV4cHJlc3Npb25zOgoKPj4+IGY9bGFtYmRhOiAoeWllbGQgMSksKHlpZWxkIDIpClRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAuLi4KICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3RfZ2VuZXJhdG9ycy5fX3Rlc3RfXy5jb3JvdXRpbmVbMjFdPiIsIGxpbmUgMQpTeW50YXhFcnJvcjogJ3lpZWxkJyBvdXRzaWRlIGZ1bmN0aW9uCgo+Pj4gZGVmIGYoKTogcmV0dXJuIGxhbWJkYSB4PSh5aWVsZCk6IDEKVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogIC4uLgpTeW50YXhFcnJvcjogJ3JldHVybicgd2l0aCBhcmd1bWVudCBpbnNpZGUgZ2VuZXJhdG9yICg8ZG9jdGVzdCB0ZXN0LnRlc3RfZ2VuZXJhdG9ycy5fX3Rlc3RfXy5jb3JvdXRpbmVbMjJdPiwgbGluZSAxKQoKPj4+IGRlZiBmKCk6IHggPSB5aWVsZCA9IHkKVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogIC4uLgogIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9nZW5lcmF0b3JzLl9fdGVzdF9fLmNvcm91dGluZVsyM10+IiwgbGluZSAxClN5bnRheEVycm9yOiBhc3NpZ25tZW50IHRvIHlpZWxkIGV4cHJlc3Npb24gbm90IHBvc3NpYmxlCgo+Pj4gZGVmIGYoKTogKHlpZWxkIGJhcikgPSB5ClRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAuLi4KICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3RfZ2VuZXJhdG9ycy5fX3Rlc3RfXy5jb3JvdXRpbmVbMjRdPiIsIGxpbmUgMQpTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIHlpZWxkIGV4cHJlc3Npb24KCj4+PiBkZWYgZigpOiAoeWllbGQgYmFyKSArPSB5ClRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAuLi4KICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3RfZ2VuZXJhdG9ycy5fX3Rlc3RfXy5jb3JvdXRpbmVbMjVdPiIsIGxpbmUgMQpTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIHlpZWxkIGV4cHJlc3Npb24KCgpOb3cgY2hlY2sgc29tZSB0aHJvdygpIGNvbmRpdGlvbnM6Cgo+Pj4gZGVmIGYoKToKLi4uICAgICB3aGlsZSBUcnVlOgouLi4gICAgICAgICB0cnk6Ci4uLiAgICAgICAgICAgICBwcmludCAoeWllbGQpCi4uLiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLHY6Ci4uLiAgICAgICAgICAgICBwcmludCAiY2F1Z2h0IFZhbHVlRXJyb3IgKCVzKSIgJSAodiksCj4+PiBpbXBvcnQgc3lzCj4+PiBnID0gZigpCj4+PiBnLm5leHQoKQoKPj4+IGcudGhyb3coVmFsdWVFcnJvcikgIyB0eXBlIG9ubHkKY2F1Z2h0IFZhbHVlRXJyb3IgKCkKCj4+PiBnLnRocm93KFZhbHVlRXJyb3IoInh5eiIpKSAgIyB2YWx1ZSBvbmx5CmNhdWdodCBWYWx1ZUVycm9yICh4eXopCgo+Pj4gZy50aHJvdyhWYWx1ZUVycm9yLCBWYWx1ZUVycm9yKDEpKSAgICMgdmFsdWUrbWF0Y2hpbmcgdHlwZQpjYXVnaHQgVmFsdWVFcnJvciAoMSkKCj4+PiBnLnRocm93KFZhbHVlRXJyb3IsIFR5cGVFcnJvcigxKSkgICMgbWlzbWF0Y2hlZCB0eXBlLCByZXdyYXBwZWQKY2F1Z2h0IFZhbHVlRXJyb3IgKDEpCgo+Pj4gZy50aHJvdyhWYWx1ZUVycm9yLCBWYWx1ZUVycm9yKDEpLCBOb25lKSAgICMgZXhwbGljaXQgTm9uZSB0cmFjZWJhY2sKY2F1Z2h0IFZhbHVlRXJyb3IgKDEpCgo+Pj4gZy50aHJvdyhWYWx1ZUVycm9yKDEpLCAiZm9vIikgICAgICAgIyBiYWQgYXJncwpUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgLi4uClR5cGVFcnJvcjogaW5zdGFuY2UgZXhjZXB0aW9uIG1heSBub3QgaGF2ZSBhIHNlcGFyYXRlIHZhbHVlCgo+Pj4gZy50aHJvdyhWYWx1ZUVycm9yLCAiZm9vIiwgMjMpICAgICAgIyBiYWQgYXJncwpUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgLi4uClR5cGVFcnJvcjogdGhyb3coKSB0aGlyZCBhcmd1bWVudCBtdXN0IGJlIGEgdHJhY2ViYWNrIG9iamVjdAoKPj4+IGRlZiB0aHJvdyhnLGV4Yyk6Ci4uLiAgICAgdHJ5OgouLi4gICAgICAgICByYWlzZSBleGMKLi4uICAgICBleGNlcHQ6Ci4uLiAgICAgICAgIGcudGhyb3coKnN5cy5leGNfaW5mbygpKQo+Pj4gdGhyb3coZyxWYWx1ZUVycm9yKSAjIGRvIGl0IHdpdGggdHJhY2ViYWNrIGluY2x1ZGVkCmNhdWdodCBWYWx1ZUVycm9yICgpCgo+Pj4gZy5zZW5kKDEpCjEKCj4+PiB0aHJvdyhnLFR5cGVFcnJvcikgICMgdGVybWluYXRlIHRoZSBnZW5lcmF0b3IKVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogIC4uLgpUeXBlRXJyb3IKCj4+PiBwcmludCBnLmdpX2ZyYW1lCk5vbmUKCj4+PiBnLnNlbmQoMikKVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogIC4uLgpTdG9wSXRlcmF0aW9uCgo+Pj4gZy50aHJvdyhWYWx1ZUVycm9yLDYpICAgICAgICMgdGhyb3cgb24gY2xvc2VkIGdlbmVyYXRvcgpUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgLi4uClZhbHVlRXJyb3I6IDYKCj4+PiBmKCkudGhyb3coVmFsdWVFcnJvciw3KSAgICAgIyB0aHJvdyBvbiBqdXN0LW9wZW5lZCBnZW5lcmF0b3IKVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogIC4uLgpWYWx1ZUVycm9yOiA3Cgo+Pj4gZigpLnRocm93KCJhYmMiKSAgICAgIyB0aHJvdyBvbiBqdXN0LW9wZW5lZCBnZW5lcmF0b3IKVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogIC4uLgpUeXBlRXJyb3I6IGV4Y2VwdGlvbnMgbXVzdCBiZSBjbGFzc2VzLCBvciBpbnN0YW5jZXMsIG5vdCBzdHIKCk5vdyBsZXQncyB0cnkgY2xvc2luZyBhIGdlbmVyYXRvcjoKCj4+PiBkZWYgZigpOgouLi4gICAgIHRyeTogeWllbGQKLi4uICAgICBleGNlcHQgR2VuZXJhdG9yRXhpdDoKLi4uICAgICAgICAgcHJpbnQgImV4aXRpbmciCgo+Pj4gZyA9IGYoKQo+Pj4gZy5uZXh0KCkKPj4+IGcuY2xvc2UoKQpleGl0aW5nCj4+PiBnLmNsb3NlKCkgICMgc2hvdWxkIGJlIG5vLW9wIG5vdwoKPj4+IGYoKS5jbG9zZSgpICAjIGNsb3NlIG9uIGp1c3Qtb3BlbmVkIGdlbmVyYXRvciBzaG91bGQgYmUgZmluZQoKPj4+IGRlZiBmKCk6IHlpZWxkICAgICAgIyBhbiBldmVuIHNpbXBsZXIgZ2VuZXJhdG9yCj4+PiBmKCkuY2xvc2UoKSAgICAgICAgICMgY2xvc2UgYmVmb3JlIG9wZW5pbmcKPj4+IGcgPSBmKCkKPj4+IGcubmV4dCgpCj4+PiBnLmNsb3NlKCkgICAgICAgICAgICMgY2xvc2Ugbm9ybWFsbHkKCkFuZCBmaW5hbGl6YXRpb246Cgo+Pj4gZGVmIGYoKToKLi4uICAgICB0cnk6IHlpZWxkCi4uLiAgICAgZmluYWxseToKLi4uICAgICAgICAgcHJpbnQgImV4aXRpbmciCgo+Pj4gZyA9IGYoKQo+Pj4gZy5uZXh0KCkKPj4+IGRlbCBnCmV4aXRpbmcKCj4+PiBjbGFzcyBjb250ZXh0KG9iamVjdCk6Ci4uLiAgICBkZWYgX19lbnRlcl9fKHNlbGYpOiBwYXNzCi4uLiAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOiBwcmludCAnZXhpdGluZycKPj4+IGRlZiBmKCk6Ci4uLiAgICAgd2l0aCBjb250ZXh0KCk6Ci4uLiAgICAgICAgICB5aWVsZAo+Pj4gZyA9IGYoKQo+Pj4gZy5uZXh0KCkKPj4+IGRlbCBnCmV4aXRpbmcKCgpHZW5lcmF0b3JFeGl0IGlzIG5vdCBjYXVnaHQgYnkgZXhjZXB0IEV4Y2VwdGlvbjoKCj4+PiBkZWYgZigpOgouLi4gICAgIHRyeTogeWllbGQKLi4uICAgICBleGNlcHQgRXhjZXB0aW9uOiBwcmludCAnZXhjZXB0JwouLi4gICAgIGZpbmFsbHk6IHByaW50ICdmaW5hbGx5JwoKPj4+IGcgPSBmKCkKPj4+IGcubmV4dCgpCj4+PiBkZWwgZwpmaW5hbGx5CgoKTm93IGxldCdzIHRyeSBzb21lIGlsbC1iZWhhdmVkIGdlbmVyYXRvcnM6Cgo+Pj4gZGVmIGYoKToKLi4uICAgICB0cnk6IHlpZWxkCi4uLiAgICAgZXhjZXB0IEdlbmVyYXRvckV4aXQ6Ci4uLiAgICAgICAgIHlpZWxkICJmb28hIgo+Pj4gZyA9IGYoKQo+Pj4gZy5uZXh0KCkKPj4+IGcuY2xvc2UoKQpUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgLi4uClJ1bnRpbWVFcnJvcjogZ2VuZXJhdG9yIGlnbm9yZWQgR2VuZXJhdG9yRXhpdAo+Pj4gZy5jbG9zZSgpCgoKT3VyIGlsbC1iZWhhdmVkIGNvZGUgc2hvdWxkIGJlIGludm9rZWQgZHVyaW5nIEdDOgoKPj4+IGltcG9ydCBzeXMsIFN0cmluZ0lPCj4+PiBvbGQsIHN5cy5zdGRlcnIgPSBzeXMuc3RkZXJyLCBTdHJpbmdJTy5TdHJpbmdJTygpCj4+PiBnID0gZigpCj4+PiBnLm5leHQoKQo+Pj4gZGVsIGcKPj4+IHN5cy5zdGRlcnIuZ2V0dmFsdWUoKS5zdGFydHN3aXRoKAouLi4gICAgICJFeGNlcHRpb24gUnVudGltZUVycm9yOiAnZ2VuZXJhdG9yIGlnbm9yZWQgR2VuZXJhdG9yRXhpdCcgaW4gIgouLi4gKQpUcnVlCj4+PiBzeXMuc3RkZXJyID0gb2xkCgoKQW5kIGVycm9ycyB0aHJvd24gZHVyaW5nIGNsb3Npbmcgc2hvdWxkIHByb3BhZ2F0ZToKCj4+PiBkZWYgZigpOgouLi4gICAgIHRyeTogeWllbGQKLi4uICAgICBleGNlcHQgR2VuZXJhdG9yRXhpdDoKLi4uICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJmaWUhIikKPj4+IGcgPSBmKCkKPj4+IGcubmV4dCgpCj4+PiBnLmNsb3NlKCkKVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogIC4uLgpUeXBlRXJyb3I6IGZpZSEKCgpFbnN1cmUgdGhhdCB2YXJpb3VzIHlpZWxkIGV4cHJlc3Npb24gY29uc3RydWN0cyBtYWtlIHRoZWlyCmVuY2xvc2luZyBmdW5jdGlvbiBhIGdlbmVyYXRvcjoKCj4+PiBkZWYgZigpOiB4ICs9IHlpZWxkCj4+PiB0eXBlKGYoKSkKPHR5cGUgJ2dlbmVyYXRvcic+Cgo+Pj4gZGVmIGYoKTogeCA9IHlpZWxkCj4+PiB0eXBlKGYoKSkKPHR5cGUgJ2dlbmVyYXRvcic+Cgo+Pj4gZGVmIGYoKTogbGFtYmRhIHg9KHlpZWxkKTogMQo+Pj4gdHlwZShmKCkpCjx0eXBlICdnZW5lcmF0b3InPgoKPj4+IGRlZiBmKCk6IHg9KGkgZm9yIGkgaW4gKHlpZWxkKSBpZiAoeWllbGQpKQo+Pj4gdHlwZShmKCkpCjx0eXBlICdnZW5lcmF0b3InPgoKPj4+IGRlZiBmKGQpOiBkWyh5aWVsZCAiYSIpXSA9IGRbKHlpZWxkICJiIildID0gMjcKPj4+IGRhdGEgPSBbMSwyXQo+Pj4gZyA9IGYoZGF0YSkKPj4+IHR5cGUoZykKPHR5cGUgJ2dlbmVyYXRvcic+Cj4+PiBnLnNlbmQoTm9uZSkKJ2EnCj4+PiBkYXRhClsxLCAyXQo+Pj4gZy5zZW5kKDApCidiJwo+Pj4gZGF0YQpbMjcsIDJdCj4+PiB0cnk6IGcuc2VuZCgxKQouLi4gZXhjZXB0IFN0b3BJdGVyYXRpb246IHBhc3MKPj4+IGRhdGEKWzI3LCAyN10KCnNTBwAAClByaW9yIHRvIGFkZGluZyBjeWNsZS1HQyBzdXBwb3J0IHRvIGl0ZXJ0b29scy50ZWUsIHRoaXMgY29kZSB3b3VsZCBsZWFrCnJlZmVyZW5jZXMuIFdlIGFkZCBpdCB0byB0aGUgc3RhbmRhcmQgc3VpdGUgc28gdGhlIHJvdXRpbmUgcmVmbGVhay10ZXN0cwp3b3VsZCB0cmlnZ2VyIGlmIGl0IHN0YXJ0cyBiZWluZyB1bmNsZWFuYWJsZSBhZ2Fpbi4KCj4+PiBpbXBvcnQgaXRlcnRvb2xzCj4+PiBkZWYgbGVhaygpOgouLi4gICAgIGNsYXNzIGdlbjoKLi4uICAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgouLi4gICAgICAgICAgICAgcmV0dXJuIHNlbGYKLi4uICAgICAgICAgZGVmIG5leHQoc2VsZik6Ci4uLiAgICAgICAgICAgICByZXR1cm4gc2VsZi5pdGVtCi4uLiAgICAgZyA9IGdlbigpCi4uLiAgICAgaGVhZCwgdGFpbCA9IGl0ZXJ0b29scy50ZWUoZykKLi4uICAgICBnLml0ZW0gPSBoZWFkCi4uLiAgICAgcmV0dXJuIGhlYWQKPj4+IGl0ID0gbGVhaygpCgpNYWtlIHN1cmUgdG8gYWxzbyB0ZXN0IHRoZSBpbnZvbHZlbWVudCBvZiB0aGUgdGVlLWludGVybmFsIHRlZWRhdGFvYmplY3QsCndoaWNoIHN0b3JlcyByZXR1cm5lZCBpdGVtcy4KCj4+PiBpdGVtID0gaXQubmV4dCgpCgoKClRoaXMgdGVzdCBsZWFrZWQgYXQgb25lIHBvaW50IGR1ZSB0byBnZW5lcmF0b3IgZmluYWxpemF0aW9uL2Rlc3RydWN0aW9uLgpJdCB3YXMgY29waWVkIGZyb20gTGliL3Rlc3QvbGVha2Vycy90ZXN0X2dlbmVyYXRvcl9jeWNsZS5weSBiZWZvcmUgdGhlIGZpbGUKd2FzIHJlbW92ZWQuCgo+Pj4gZGVmIGxlYWsoKToKLi4uICAgIGRlZiBnZW4oKToKLi4uICAgICAgICB3aGlsZSBUcnVlOgouLi4gICAgICAgICAgICB5aWVsZCBnCi4uLiAgICBnID0gZ2VuKCkKCj4+PiBsZWFrKCkKCgoKVGhpcyB0ZXN0IGlzbid0IHJlYWxseSBnZW5lcmF0b3IgcmVsYXRlZCwgYnV0IHJhdGhlciBleGNlcHRpb24taW4tY2xlYW51cApyZWxhdGVkLiBUaGUgY29yb3V0aW5lIHRlc3RzIChhYm92ZSkganVzdCBoYXBwZW4gdG8gY2F1c2UgYW4gZXhjZXB0aW9uIGluCnRoZSBnZW5lcmF0b3IncyBfX2RlbF9fICh0cF9kZWwpIG1ldGhvZC4gV2UgY2FuIGFsc28gdGVzdCBmb3IgdGhpcwpleHBsaWNpdGx5LCB3aXRob3V0IGdlbmVyYXRvcnMuIFdlIGRvIGhhdmUgdG8gcmVkaXJlY3Qgc3RkZXJyIHRvIGF2b2lkCnByaW50aW5nIHdhcm5pbmdzIGFuZCB0byBkb3VibGVjaGVjayB0aGF0IHdlIGFjdHVhbGx5IHRlc3RlZCB3aGF0IHdlIHdhbnRlZAp0byB0ZXN0LgoKPj4+IGltcG9ydCBzeXMsIFN0cmluZ0lPCj4+PiBvbGQgPSBzeXMuc3RkZXJyCj4+PiB0cnk6Ci4uLiAgICAgc3lzLnN0ZGVyciA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKLi4uICAgICBjbGFzcyBMZWFrZXI6Ci4uLiAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgouLi4gICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCi4uLgouLi4gICAgIGwgPSBMZWFrZXIoKQouLi4gICAgIGRlbCBsCi4uLiAgICAgZXJyID0gc3lzLnN0ZGVyci5nZXR2YWx1ZSgpLnN0cmlwKCkKLi4uICAgICBlcnIuc3RhcnRzd2l0aCgKLi4uICAgICAgICAgIkV4Y2VwdGlvbiBSdW50aW1lRXJyb3I6IFJ1bnRpbWVFcnJvcigpIGluIDwiCi4uLiAgICAgKQouLi4gICAgIGVyci5lbmRzd2l0aCgiPiBpZ25vcmVkIikKLi4uICAgICBsZW4oZXJyLnNwbGl0bGluZXMoKSkKLi4uIGZpbmFsbHk6Ci4uLiAgICAgc3lzLnN0ZGVyciA9IG9sZApUcnVlClRydWUKMQoKCgpUaGVzZSByZWZsZWFrIHRlc3RzIHNob3VsZCBwZXJoYXBzIGJlIGluIGEgdGVzdGZpbGUgb2YgdGhlaXIgb3duLAp0ZXN0X2dlbmVyYXRvcnMganVzdCBoYXBwZW5lZCB0byBiZSB0aGUgdGVzdCB0aGF0IGRyZXcgdGhlc2Ugb3V0LgoKdAMAAAB0dXR0AwAAAHBlcHQFAAAAZW1haWx0AwAAAGZ1bnQGAAAAc3ludGF4UhEAAAB0BwAAAHdlYWtyZWZ0CQAAAGNvcm91dGluZXQIAAAAcmVmbGVha3NjAQAAAAMAAAADAAAAQwAAAHMqAAAAZAEAZAIAbAAAbQEAfQEAbQIAfQIAAXwBAGoDAHwCAHwAAIMCAAFkAABTKAMAAABOaf////8oAgAAAHQMAAAAdGVzdF9zdXBwb3J0dA8AAAB0ZXN0X2dlbmVyYXRvcnMoBAAAAHQEAAAAdGVzdFJlAAAAUmYAAAB0CwAAAHJ1bl9kb2N0ZXN0KAMAAAB0BwAAAHZlcmJvc2VSZQAAAFJmAAAAKAAAAAAoAAAAAHNbAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZ2VuZXJhdG9ycy5weXQJAAAAdGVzdF9tYWlubQcAAHMEAAAAAAEWAXQIAAAAX19tYWluX19pAQAAAE4oEgAAAHQOAAAAdHV0b3JpYWxfdGVzdHN0CQAAAHBlcF90ZXN0c3QLAAAAZW1haWxfdGVzdHN0CQAAAGZ1bl90ZXN0c3QMAAAAc3ludGF4X3Rlc3RzUgcAAABSEQAAAFIXAAAAUhgAAABSMAAAAHQNAAAAY29uam9pbl90ZXN0c3QNAAAAd2Vha3JlZl90ZXN0c3QPAAAAY29yb3V0aW5lX3Rlc3RzdA4AAAByZWZsZWFrc190ZXN0c3QIAAAAX190ZXN0X19SBgAAAFJqAAAAUi4AAAAoAAAAACgAAAAAKAAAAABzWwAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2dlbmVyYXRvcnMucHl0CAAAADxtb2R1bGU+hAAAAHM2AAAABqUGvgbuBtkGFgkVCT0JJBM3E/8AUQYYBv8AOQZLBgIKAQcBBwEHAQcBBwEHAQcBCgcMBQwB