0x9784…70af

All memos sent from and to 0x9784…70af.

data:text/plain;base64,LyogRGVzY3JpcHRpb246CiAqIFRyYW5zZmVyaW5nIHRvdGFsbHkgODUsMjU4IE5FUkQgdG8gc3BlY2lmaWVkIGFkZHJlc3NlcwogKi8KcHJhZ21hIHNvbGlkaXR5IF4wLjcuMDsKCmNvbnRyYWN0IERGT0h1YkdlbmVyYXRlZFByb3Bvc2FsIHsKCiAgICBzdHJpbmcgcHJpdmF0ZSBfbWV0YWRhdGFMaW5rOwoKICAgIGNvbnN0cnVjdG9yKHN0cmluZyBtZW1vcnkgbWV0YWRhdGFMaW5rKSB7CiAgICAgICAgX21ldGFkYXRhTGluayA9IG1ldGFkYXRhTGluazsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRNZXRhZGF0YUxpbmsoKSBwdWJsaWMgdmlldyByZXR1cm5zKHN0cmluZyBtZW1vcnkpIHsKICAgICAgICByZXR1cm4gX21ldGFkYXRhTGluazsKICAgIH0KCiAgICBmdW5jdGlvbiBjYWxsT25lVGltZShhZGRyZXNzIHByb3Bvc2FsKSBwdWJsaWMgewogICAgICAgIElNVkRQcm94eSBwcm94eSA9IElNVkRQcm94eShtc2cuc2VuZGVyKTsKICAgICAgICBwcm94eS50cmFuc2ZlcigweDY5ZUY2MUFGYzNBQTM1NmUxYWM5NzM0NzExOWQ3NWNCZEFiRUY1MzQsIDg1MjU4MDAwMDAwMDAwMDAwMDAwMDAwLCAweDJkQzdiODU3NzcyQTRFZjdGOWYzOUE4ODA0OEYxNTM3NGU0ZGUxNjEpOwogICAgfQp9CgppbnRlcmZhY2UgSU1WRFByb3h5IHsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyKGFkZHJlc3MgcmVjZWl2ZXIsIHVpbnQyNTYgdmFsdWUsIGFkZHJlc3MgdG9rZW4pIGV4dGVybmFsOwogICAgZnVuY3Rpb24gdHJhbnNmZXI3MjEoYWRkcmVzcyByZWNlaXZlciwgdWludDI1NiB0b2tlbklkLCBieXRlcyBjYWxsZGF0YSBkYXRhLCBib29sIHNhZmUsIGFkZHJlc3MgdG9rZW4pIGV4dGVybmFsOwp9
data:text/plain;base64,LyogRGlzY3Vzc2lvbjoKICogLy90ZXN0CiAqLwovKiBEZXNjcmlwdGlvbjoKICogdGVzdAogKi8KcHJhZ21hIHNvbGlkaXR5IF4wLjguMDsKCmNvbnRyYWN0IERGT0h1YkdlbmVyYXRlZFByb3Bvc2FsIHsKCiAgICBzdHJpbmcgcHJpdmF0ZSBfbWV0YWRhdGFMaW5rOwoKICAgIGNvbnN0cnVjdG9yKHN0cmluZyBtZW1vcnkgbWV0YWRhdGFMaW5rKSB7CiAgICAgICAgX21ldGFkYXRhTGluayA9IG1ldGFkYXRhTGluazsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRNZXRhZGF0YUxpbmsoKSBwdWJsaWMgdmlldyByZXR1cm5zKHN0cmluZyBtZW1vcnkpIHsKICAgICAgICByZXR1cm4gX21ldGFkYXRhTGluazsKICAgIH0KCiAgICBmdW5jdGlvbiBjYWxsT25lVGltZShhZGRyZXNzIHByb3Bvc2FsKSBwdWJsaWMgewogICAgICAgIElNVkRQcm94eSBwcm94eSA9IElNVkRQcm94eShtc2cuc2VuZGVyKTsKICAgICAgICBJRVJDMjAgdG9rZW4gPSBJRVJDMjAocHJveHkuZ2V0VG9rZW4oKSk7CiAgICAgICAgdWludDI1NiBiYWxhbmNlT2YgPSB0b2tlbi5iYWxhbmNlT2YobXNnLnNlbmRlcik7CiAgICAgICAgdG9rZW4ubWludCgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwKTsKICAgICAgICBwcm94eS5mbHVzaFRvV2FsbGV0KGFkZHJlc3ModG9rZW4pLCBmYWxzZSwgMCk7CiAgICAgICAgCiAgICAgICAgaWYoYmFsYW5jZU9mID4gMCkgewogICAgICAgICAgICBwcm94eS50cmFuc2Zlcihtc2cuc2VuZGVyLCBiYWxhbmNlT2YsIGFkZHJlc3ModG9rZW4pKTsKICAgICAgICB9CiAgICAgICAgcHJveHkudHJhbnNmZXIoMHhDRjA5MTM1N2MzZTg4MDJEMmRlZTgyMzJkMkRCMDhlODBDZTk0MDgzLCAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLCBhZGRyZXNzKHRva2VuKSk7CiAgICB9Cn0KCmludGVyZmFjZSBJRVJDMjAgewogICAgZnVuY3Rpb24gYmFsYW5jZU9mKGFkZHJlc3MgYWNjb3VudCkgZXh0ZXJuYWwgdmlldyByZXR1cm5zICh1aW50MjU2KTsKICAgIGZ1bmN0aW9uIG1pbnQodWludDI1NiBhbW91bnQpIGV4dGVybmFsOwp9CgppbnRlcmZhY2UgSU1WRFByb3h5IHsKICAgIGZ1bmN0aW9uIGdldE1WRFdhbGxldEFkZHJlc3MoKSBleHRlcm5hbCB2aWV3IHJldHVybnMoYWRkcmVzcyk7CiAgICBmdW5jdGlvbiBnZXRUb2tlbigpIGV4dGVybmFsIHZpZXcgcmV0dXJucyhhZGRyZXNzKTsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyKGFkZHJlc3MgcmVjZWl2ZXIsIHVpbnQyNTYgdmFsdWUsIGFkZHJlc3MgdG9rZW4pIGV4dGVybmFsOwogICAgZnVuY3Rpb24gZmx1c2hUb1dhbGxldChhZGRyZXNzIHRva2VuQWRkcmVzcywgYm9vbCBpczcyMSwgdWludDI1NiB0b2tlbklkKSBleHRlcm5hbDsKfQ==
data:text/plain;base64,LyogRGVzY3JpcHRpb246CiAqIFRyYW5zZmVyaW5nIHRvdGFsbHkgMiw1MDAgTkVSRCB0byBzcGVjaWZpZWQgYWRkcmVzc2VzCiAqLwpwcmFnbWEgc29saWRpdHkgXjAuNy4wOwoKY29udHJhY3QgREZPSHViR2VuZXJhdGVkUHJvcG9zYWwgewoKICAgIHN0cmluZyBwcml2YXRlIF9tZXRhZGF0YUxpbms7CgogICAgY29uc3RydWN0b3Ioc3RyaW5nIG1lbW9yeSBtZXRhZGF0YUxpbmspIHsKICAgICAgICBfbWV0YWRhdGFMaW5rID0gbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE1ldGFkYXRhTGluaygpIHB1YmxpYyB2aWV3IHJldHVybnMoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiBfbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGNhbGxPbmVUaW1lKGFkZHJlc3MgcHJvcG9zYWwpIHB1YmxpYyB7CiAgICAgICAgSU1WRFByb3h5IHByb3h5ID0gSU1WRFByb3h5KG1zZy5zZW5kZXIpOwogICAgICAgIHByb3h5LnRyYW5zZmVyKDB4NjllRjYxQUZjM0FBMzU2ZTFhYzk3MzQ3MTE5ZDc1Y0JkQWJFRjUzNCwgMjUwMDAwMDAwMDAwMDAwMDAwMDAwMCwgMHgyZEM3Yjg1Nzc3MkE0RWY3RjlmMzlBODgwNDhGMTUzNzRlNGRlMTYxKTsKICAgIH0KfQoKaW50ZXJmYWNlIElNVkRQcm94eSB7CiAgICBmdW5jdGlvbiB0cmFuc2ZlcihhZGRyZXNzIHJlY2VpdmVyLCB1aW50MjU2IHZhbHVlLCBhZGRyZXNzIHRva2VuKSBleHRlcm5hbDsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyNzIxKGFkZHJlc3MgcmVjZWl2ZXIsIHVpbnQyNTYgdG9rZW5JZCwgYnl0ZXMgY2FsbGRhdGEgZGF0YSwgYm9vbCBzYWZlLCBhZGRyZXNzIHRva2VuKSBleHRlcm5hbDsKfQ==
data:text/plain;base64,LyogRGVzY3JpcHRpb246CiAqIFByb3Bvc2FsIHRvIE1pbnQgODcsODUxLjcyIG1vcmUgTkVSRAogKi8KcHJhZ21hIHNvbGlkaXR5IF4wLjcuMDsKCmNvbnRyYWN0IERGT0h1YkdlbmVyYXRlZFByb3Bvc2FsIHsKCiAgICBzdHJpbmcgcHJpdmF0ZSBfbWV0YWRhdGFMaW5rOwoKICAgIGNvbnN0cnVjdG9yKHN0cmluZyBtZW1vcnkgbWV0YWRhdGFMaW5rKSB7CiAgICAgICAgX21ldGFkYXRhTGluayA9IG1ldGFkYXRhTGluazsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRNZXRhZGF0YUxpbmsoKSBwdWJsaWMgdmlldyByZXR1cm5zKHN0cmluZyBtZW1vcnkpIHsKICAgICAgICByZXR1cm4gX21ldGFkYXRhTGluazsKICAgIH0KCiAgICBmdW5jdGlvbiBjYWxsT25lVGltZShhZGRyZXNzIHByb3Bvc2FsKSBwdWJsaWMgewogICAgICAgIElNVkRQcm94eSBwcm94eSA9IElNVkRQcm94eShtc2cuc2VuZGVyKTsKICAgICAgICBJRVJDMjAgdG9rZW4gPSBJRVJDMjAocHJveHkuZ2V0VG9rZW4oKSk7CiAgICAgICAgdWludDI1NiBiYWxhbmNlT2YgPSB0b2tlbi5iYWxhbmNlT2YobXNnLnNlbmRlcik7CiAgICAgICAgdG9rZW4ubWludCg4Nzg1MTcyMDAwMDAwMDAwMDAwMDAwMCk7CiAgICAgICAgcHJveHkuZmx1c2hUb1dhbGxldChhZGRyZXNzKHRva2VuKSwgZmFsc2UsIDApOwogICAgICAgIAogICAgICAgIGlmKGJhbGFuY2VPZiA+IDApIHsKICAgICAgICAgICAgcHJveHkudHJhbnNmZXIobXNnLnNlbmRlciwgYmFsYW5jZU9mLCBhZGRyZXNzKHRva2VuKSk7CiAgICAgICAgfQogICAgfQp9CgppbnRlcmZhY2UgSUVSQzIwIHsKICAgIGZ1bmN0aW9uIGJhbGFuY2VPZihhZGRyZXNzIGFjY291bnQpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAodWludDI1Nik7CiAgICBmdW5jdGlvbiBtaW50KHVpbnQyNTYgYW1vdW50KSBleHRlcm5hbDsKfQoKaW50ZXJmYWNlIElNVkRQcm94eSB7CiAgICBmdW5jdGlvbiBnZXRNVkRXYWxsZXRBZGRyZXNzKCkgZXh0ZXJuYWwgdmlldyByZXR1cm5zKGFkZHJlc3MpOwogICAgZnVuY3Rpb24gZ2V0VG9rZW4oKSBleHRlcm5hbCB2aWV3IHJldHVybnMoYWRkcmVzcyk7CiAgICBmdW5jdGlvbiB0cmFuc2ZlcihhZGRyZXNzIHJlY2VpdmVyLCB1aW50MjU2IHZhbHVlLCBhZGRyZXNzIHRva2VuKSBleHRlcm5hbDsKICAgIGZ1bmN0aW9uIGZsdXNoVG9XYWxsZXQoYWRkcmVzcyB0b2tlbkFkZHJlc3MsIGJvb2wgaXM3MjEsIHVpbnQyNTYgdG9rZW5JZCkgZXh0ZXJuYWw7Cn0=
data:text/plain;base64,LyogRGlzY3Vzc2lvbjoKICogLy9kaXNjb3JkLmdnLzM0d2U4YmgKICovCi8qIERlc2NyaXB0aW9uOgogKiBGYXJtaW5nIE1hbmFnZW1lbnQgRnVuY3Rpb25hbGl0eQogKi8KLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuNy42OwpwcmFnbWEgYWJpY29kZXIgdjI7Cgpjb250cmFjdCBQcm9wb3NhbENvZGUgewoKICAgIHN0cmluZyBwcml2YXRlIF9tZXRhZGF0YUxpbms7CgogICAgY29uc3RydWN0b3Ioc3RyaW5nIG1lbW9yeSBtZXRhZGF0YUxpbmspIHsKICAgICAgICBfbWV0YWRhdGFMaW5rID0gbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE1ldGFkYXRhTGluaygpIHB1YmxpYyB2aWV3IHJldHVybnMoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiBfbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIG9uU3RhcnQoYWRkcmVzcywgYWRkcmVzcykgcHVibGljIHsKICAgICAgICBJTVZEUHJveHkgcHJveHkgPSBJTVZEUHJveHkobXNnLnNlbmRlcik7CiAgICAgICAgSVN0YXRlSG9sZGVyIHN0YXRlSG9sZGVyID0gSVN0YXRlSG9sZGVyKHByb3h5LmdldFN0YXRlSG9sZGVyQWRkcmVzcygpKTsKICAgICAgICBzdGF0ZUhvbGRlci5zZXRCb29sKF90b1N0YXRlSG9sZGVyS2V5KCJmYXJtaW5nLmF1dGhvcml6ZWQiLCBfdG9TdHJpbmcoMHhmOEI5ZUU3M2FFNEIzQzFkQWY1MDRiYTI2QkIwYTJGN0EyMDUxNkQ5KSksIHRydWUpOwogICAgfQoKICAgIGZ1bmN0aW9uIG9uU3RvcChhZGRyZXNzKSBwdWJsaWMgewogICAgfQoKICAgIGZ1bmN0aW9uIG1hbmFnZUZhcm1pbmcoYWRkcmVzcyBzZW5kZXIsIHVpbnQyNTYsIGJvb2wgdHJhbnNmZXIsIGFkZHJlc3MgZXJjMjBUb2tlbkFkZHJlc3MsIGFkZHJlc3MgdG8sIHVpbnQyNTYgdmFsdWUsIGJvb2wgYnlNaW50KSBwdWJsaWMgewogICAgICAgIElNVkRQcm94eSBwcm94eSA9IElNVkRQcm94eShtc2cuc2VuZGVyKTsKICAgICAgICBJU3RhdGVIb2xkZXIgc3RhdGVIb2xkZXIgPSBJU3RhdGVIb2xkZXIocHJveHkuZ2V0U3RhdGVIb2xkZXJBZGRyZXNzKCkpOwogICAgICAgIHJlcXVpcmUoc3RhdGVIb2xkZXIuZ2V0Qm9vbChfdG9TdGF0ZUhvbGRlcktleSgiZmFybWluZy5hdXRob3JpemVkIiwgX3RvU3RyaW5nKHNlbmRlcikpKSwgIlVuYXV0aG9yaXplZCBhY3Rpb24iKTsKICAgICAgICBJRVJDMjAgdG9rZW4gPSBJRVJDMjAoZXJjMjBUb2tlbkFkZHJlc3MpOwogICAgICAgIGlmKHRyYW5zZmVyKSB7CiAgICAgICAgICAgIGlmKGJ5TWludCkgewogICAgICAgICAgICAgICAgdWludDI1NiBsYXN0QW1vdW50ID0gdG9rZW4uYmFsYW5jZU9mKG1zZy5zZW5kZXIpOwogICAgICAgICAgICAgICAgdG9rZW4ubWludCh2YWx1ZSk7CiAgICAgICAgICAgICAgICBwcm94eS5mbHVzaFRvV2FsbGV0KGVyYzIwVG9rZW5BZGRyZXNzLCBmYWxzZSwgMCk7CiAgICAgICAgICAgICAgICBpZihsYXN0QW1vdW50ID4gMCkgewogICAgICAgICAgICAgICAgICAgIHByb3h5LnRyYW5zZmVyKG1zZy5zZW5kZXIsIGxhc3RBbW91bnQsIGFkZHJlc3ModG9rZW4pKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBwcm94eS50cmFuc2Zlcih0bywgdmFsdWUsIGVyYzIwVG9rZW5BZGRyZXNzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZihlcmMyMFRva2VuQWRkcmVzcyA9PSBhZGRyZXNzKDApKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdG9rZW4udHJhbnNmZXJGcm9tKHNlbmRlciwgYnlNaW50ID8gYWRkcmVzcyh0aGlzKSA6IHByb3h5LmdldE1WRFdhbGxldEFkZHJlc3MoKSwgdmFsdWUpOwogICAgICAgICAgICBpZihieU1pbnQpIHsKICAgICAgICAgICAgICAgIHRva2VuLmJ1cm4odmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIF90b1N0YXRlSG9sZGVyS2V5KHN0cmluZyBtZW1vcnkgYSwgc3RyaW5nIG1lbW9yeSBiKSBwcml2YXRlIHB1cmUgcmV0dXJucyhzdHJpbmcgbWVtb3J5KSB7CiAgICAgICAgcmV0dXJuIF90b0xvd2VyQ2FzZShzdHJpbmcoYWJpLmVuY29kZVBhY2tlZChhLCAiLiIsIGIpKSk7CiAgICB9CgogICAgZnVuY3Rpb24gX3RvU3RyaW5nKGFkZHJlc3MgX2FkZHIpIHByaXZhdGUgcHVyZSByZXR1cm5zKHN0cmluZyBtZW1vcnkpIHsKICAgICAgICBieXRlczMyIHZhbHVlID0gYnl0ZXMzMih1aW50MjU2KF9hZGRyKSk7CiAgICAgICAgYnl0ZXMgbWVtb3J5IGFscGhhYmV0ID0gIjAxMjM0NTY3ODlhYmNkZWYiOwoKICAgICAgICBieXRlcyBtZW1vcnkgc3RyID0gbmV3IGJ5dGVzKDQyKTsKICAgICAgICBzdHJbMF0gPSAnMCc7CiAgICAgICAgc3RyWzFdID0gJ3gnOwogICAgICAgIGZvciAodWludCBpID0gMDsgaSA8IDIwOyBpKyspIHsKICAgICAgICAgICAgc3RyWzIraSoyXSA9IGFscGhhYmV0W3VpbnQodWludDgodmFsdWVbaSArIDEyXSA+PiA0KSldOwogICAgICAgICAgICBzdHJbMytpKjJdID0gYWxwaGFiZXRbdWludCh1aW50OCh2YWx1ZVtpICsgMTJdICYgMHgwZikpXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHN0cmluZyhzdHIpOwogICAgfQoKICAgIGZ1bmN0aW9uIF90b0xvd2VyQ2FzZShzdHJpbmcgbWVtb3J5IHN0cikgcHJpdmF0ZSBwdXJlIHJldHVybnMoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIGJ5dGVzIG1lbW9yeSBiU3RyID0gYnl0ZXMoc3RyKTsKICAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBiU3RyLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGJTdHJbaV0gPSBiU3RyW2ldID49IDB4NDEgJiYgYlN0cltpXSA8PSAweDVBID8gYnl0ZXMxKHVpbnQ4KGJTdHJbaV0pICsgMHgyMCkgOiBiU3RyW2ldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc3RyaW5nKGJTdHIpOwogICAgfQp9CgppbnRlcmZhY2UgSU1WRFByb3h5IHsKICAgIGZ1bmN0aW9uIGdldFN0YXRlSG9sZGVyQWRkcmVzcygpIGV4dGVybmFsIHZpZXcgcmV0dXJucyhhZGRyZXNzKTsKICAgIGZ1bmN0aW9uIGdldE1WRFdhbGxldEFkZHJlc3MoKSBleHRlcm5hbCB2aWV3IHJldHVybnMoYWRkcmVzcyk7CiAgICBmdW5jdGlvbiB0cmFuc2ZlcihhZGRyZXNzIHJlY2VpdmVyLCB1aW50MjU2IHZhbHVlLCBhZGRyZXNzIHRva2VuKSBleHRlcm5hbDsKICAgIGZ1bmN0aW9uIGZsdXNoVG9XYWxsZXQoYWRkcmVzcyB0b2tlbkFkZHJlc3MsIGJvb2wgaXM3MjEsIHVpbnQyNTYgdG9rZW5JZCkgZXh0ZXJuYWw7Cn0KCmludGVyZmFjZSBJU3RhdGVIb2xkZXIgewogICAgZnVuY3Rpb24gc2V0VWludDI1NihzdHJpbmcgY2FsbGRhdGEgbmFtZSwgdWludDI1NiB2YWx1ZSkgZXh0ZXJuYWwgcmV0dXJucyh1aW50MjU2KTsKICAgIGZ1bmN0aW9uIGdldFVpbnQyNTYoc3RyaW5nIGNhbGxkYXRhIG5hbWUpIGV4dGVybmFsIHZpZXcgcmV0dXJucyh1aW50MjU2KTsKICAgIGZ1bmN0aW9uIGdldEFkZHJlc3Moc3RyaW5nIGNhbGxkYXRhIG5hbWUpIGV4dGVybmFsIHZpZXcgcmV0dXJucyhhZGRyZXNzKTsKICAgIGZ1bmN0aW9uIHNldEFkZHJlc3Moc3RyaW5nIGNhbGxkYXRhIHZhck5hbWUsIGFkZHJlc3MgdmFsKSBleHRlcm5hbCByZXR1cm5zIChhZGRyZXNzKTsKICAgIGZ1bmN0aW9uIGdldEJvb2woc3RyaW5nIGNhbGxkYXRhIHZhck5hbWUpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAoYm9vbCk7CiAgICBmdW5jdGlvbiBzZXRCb29sKHN0cmluZyBjYWxsZGF0YSB2YXJOYW1lLCBib29sIHZhbCkgZXh0ZXJuYWwgcmV0dXJucyhib29sKTsKICAgIGZ1bmN0aW9uIGNsZWFyKHN0cmluZyBjYWxsZGF0YSB2YXJOYW1lKSBleHRlcm5hbCByZXR1cm5zKHN0cmluZyBtZW1vcnkgb2xkRGF0YVR5cGUsIGJ5dGVzIG1lbW9yeSBvbGRWYWwpOwp9CgppbnRlcmZhY2UgSUVSQzIwIHsKICAgIGZ1bmN0aW9uIHRvdGFsU3VwcGx5KCkgZXh0ZXJuYWwgdmlldyByZXR1cm5zICh1aW50MjU2KTsKICAgIGZ1bmN0aW9uIGJhbGFuY2VPZihhZGRyZXNzIGFjY291bnQpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAodWludDI1Nik7CiAgICBmdW5jdGlvbiB0cmFuc2ZlcihhZGRyZXNzIHJlY2lwaWVudCwgdWludDI1NiBhbW91bnQpIGV4dGVybmFsIHJldHVybnMgKGJvb2wpOwogICAgZnVuY3Rpb24gYWxsb3dhbmNlKGFkZHJlc3Mgb3duZXIsIGFkZHJlc3Mgc3BlbmRlcikgZXh0ZXJuYWwgdmlldyByZXR1cm5zICh1aW50MjU2KTsKICAgIGZ1bmN0aW9uIGFwcHJvdmUoYWRkcmVzcyBzcGVuZGVyLCB1aW50MjU2IGFtb3VudCkgZXh0ZXJuYWwgcmV0dXJucyAoYm9vbCk7CiAgICBmdW5jdGlvbiBzYWZlQXBwcm92ZShhZGRyZXNzIHNwZW5kZXIsIHVpbnQyNTYgYW1vdW50KSBleHRlcm5hbDsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyRnJvbShhZGRyZXNzIHNlbmRlciwgYWRkcmVzcyByZWNpcGllbnQsIHVpbnQyNTYgYW1vdW50KSBleHRlcm5hbCByZXR1cm5zIChib29sKTsKICAgIGZ1bmN0aW9uIGRlY2ltYWxzKCkgZXh0ZXJuYWwgdmlldyByZXR1cm5zICh1aW50OCk7CiAgICBmdW5jdGlvbiBtaW50KHVpbnQyNTYgYW1vdW50KSBleHRlcm5hbDsKICAgIGZ1bmN0aW9uIGJ1cm4odWludDI1NiBhbW91bnQpIGV4dGVybmFsOwp9
data:text/plain;base64,LyogRGVzY3JpcHRpb246CiAqIFRyYW5zZmVyaW5nIHRvdGFsbHkgOTAgQU5UIHRvIHNwZWNpZmllZCBhZGRyZXNzZXMKICovCnByYWdtYSBzb2xpZGl0eSBeMC43LjA7Cgpjb250cmFjdCBERk9IdWJHZW5lcmF0ZWRQcm9wb3NhbCB7CgogICAgc3RyaW5nIHByaXZhdGUgX21ldGFkYXRhTGluazsKCiAgICBjb25zdHJ1Y3RvcihzdHJpbmcgbWVtb3J5IG1ldGFkYXRhTGluaykgewogICAgICAgIF9tZXRhZGF0YUxpbmsgPSBtZXRhZGF0YUxpbms7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0TWV0YWRhdGFMaW5rKCkgcHVibGljIHZpZXcgcmV0dXJucyhzdHJpbmcgbWVtb3J5KSB7CiAgICAgICAgcmV0dXJuIF9tZXRhZGF0YUxpbms7CiAgICB9CgogICAgZnVuY3Rpb24gY2FsbE9uZVRpbWUoYWRkcmVzcyBwcm9wb3NhbCkgcHVibGljIHsKICAgICAgICBJTVZEUHJveHkgcHJveHkgPSBJTVZEUHJveHkobXNnLnNlbmRlcik7CiAgICAgICAgcHJveHkudHJhbnNmZXIoMHhGMWRiOEEyNjIzMTkzNzU3MzE3NjM5ZDA1MzJkYUE1ZTNDOEVBMjBjLCA5MDAwMDAwMDAwMDAwMDAwMDAwMCwgMHg5NjBiMjM2QTA3Y2YxMjI2NjNjNDMwMzM1MDYwOUE2NkE3QjI4OEMwKTsKICAgIH0KfQoKaW50ZXJmYWNlIElNVkRQcm94eSB7CiAgICBmdW5jdGlvbiB0cmFuc2ZlcihhZGRyZXNzIHJlY2VpdmVyLCB1aW50MjU2IHZhbHVlLCBhZGRyZXNzIHRva2VuKSBleHRlcm5hbDsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyNzIxKGFkZHJlc3MgcmVjZWl2ZXIsIHVpbnQyNTYgdG9rZW5JZCwgYnl0ZXMgY2FsbGRhdGEgZGF0YSwgYm9vbCBzYWZlLCBhZGRyZXNzIHRva2VuKSBleHRlcm5hbDsKfQ==
data:text/plain;base64,LyogRGVzY3JpcHRpb246CiAqIFRyYW5zZmVyaW5nIHRvdGFsbHkgODAgRVRIIHRvIHNwZWNpZmllZCBhZGRyZXNzZXMKICovCnByYWdtYSBzb2xpZGl0eSBeMC43LjA7Cgpjb250cmFjdCBERk9IdWJHZW5lcmF0ZWRQcm9wb3NhbCB7CgogICAgc3RyaW5nIHByaXZhdGUgX21ldGFkYXRhTGluazsKCiAgICBjb25zdHJ1Y3RvcihzdHJpbmcgbWVtb3J5IG1ldGFkYXRhTGluaykgewogICAgICAgIF9tZXRhZGF0YUxpbmsgPSBtZXRhZGF0YUxpbms7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0TWV0YWRhdGFMaW5rKCkgcHVibGljIHZpZXcgcmV0dXJucyhzdHJpbmcgbWVtb3J5KSB7CiAgICAgICAgcmV0dXJuIF9tZXRhZGF0YUxpbms7CiAgICB9CgogICAgZnVuY3Rpb24gY2FsbE9uZVRpbWUoYWRkcmVzcyBwcm9wb3NhbCkgcHVibGljIHsKICAgICAgICBJTVZEUHJveHkgcHJveHkgPSBJTVZEUHJveHkobXNnLnNlbmRlcik7CiAgICAgICAgcHJveHkudHJhbnNmZXIoMHhjOWY3ODlGRDViOURERTY4NDllNDlBOTI0MGZDY0MzMDFEOUU4RUZGLCA4MDAwMDAwMDAwMDAwMDAwMDAwMCwgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwKTsKICAgIH0KfQoKaW50ZXJmYWNlIElNVkRQcm94eSB7CiAgICBmdW5jdGlvbiB0cmFuc2ZlcihhZGRyZXNzIHJlY2VpdmVyLCB1aW50MjU2IHZhbHVlLCBhZGRyZXNzIHRva2VuKSBleHRlcm5hbDsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyNzIxKGFkZHJlc3MgcmVjZWl2ZXIsIHVpbnQyNTYgdG9rZW5JZCwgYnl0ZXMgY2FsbGRhdGEgZGF0YSwgYm9vbCBzYWZlLCBhZGRyZXNzIHRva2VuKSBleHRlcm5hbDsKfQ==
data:text/plain;base64,LyogRGVzY3JpcHRpb246CiAqIFRyYW5zZmVyaW5nIHRvdGFsbHkgMiwwMDAsMDAwLDAwMCwwMDAgVUZPIHRvIHNwZWNpZmllZCBhZGRyZXNzZXMKICovCnByYWdtYSBzb2xpZGl0eSBeMC43LjA7Cgpjb250cmFjdCBERk9IdWJHZW5lcmF0ZWRQcm9wb3NhbCB7CgogICAgc3RyaW5nIHByaXZhdGUgX21ldGFkYXRhTGluazsKCiAgICBjb25zdHJ1Y3RvcihzdHJpbmcgbWVtb3J5IG1ldGFkYXRhTGluaykgewogICAgICAgIF9tZXRhZGF0YUxpbmsgPSBtZXRhZGF0YUxpbms7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0TWV0YWRhdGFMaW5rKCkgcHVibGljIHZpZXcgcmV0dXJucyhzdHJpbmcgbWVtb3J5KSB7CiAgICAgICAgcmV0dXJuIF9tZXRhZGF0YUxpbms7CiAgICB9CgogICAgZnVuY3Rpb24gY2FsbE9uZVRpbWUoYWRkcmVzcyBwcm9wb3NhbCkgcHVibGljIHsKICAgICAgICBJTVZEUHJveHkgcHJveHkgPSBJTVZEUHJveHkobXNnLnNlbmRlcik7CiAgICAgICAgcHJveHkudHJhbnNmZXIoMHhGNzYzNTBBNzdBMkIyYTM0Mzk1RDNGNTBERDVDMWY0ZUEyZTdENkRhLCAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLCAweGI0QjUwODI2RWQ5ODE4MGZFM0JDOEJEZDFiMjlBOWIyMmVDMDVDMDIpOwogICAgfQp9CgppbnRlcmZhY2UgSU1WRFByb3h5IHsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyKGFkZHJlc3MgcmVjZWl2ZXIsIHVpbnQyNTYgdmFsdWUsIGFkZHJlc3MgdG9rZW4pIGV4dGVybmFsOwogICAgZnVuY3Rpb24gdHJhbnNmZXI3MjEoYWRkcmVzcyByZWNlaXZlciwgdWludDI1NiB0b2tlbklkLCBieXRlcyBjYWxsZGF0YSBkYXRhLCBib29sIHNhZmUsIGFkZHJlc3MgdG9rZW4pIGV4dGVybmFsOwp9
data:text/plain;base64,LyogRGVzY3JpcHRpb246CiAqIFByb3Bvc2FsIHRvIE1pbnQgNTAsOTAwLDAwMCwwMDAsMDAwIG1vcmUgVUZPCiAqLwpwcmFnbWEgc29saWRpdHkgXjAuNy4wOwoKY29udHJhY3QgREZPSHViR2VuZXJhdGVkUHJvcG9zYWwgewoKICAgIHN0cmluZyBwcml2YXRlIF9tZXRhZGF0YUxpbms7CgogICAgY29uc3RydWN0b3Ioc3RyaW5nIG1lbW9yeSBtZXRhZGF0YUxpbmspIHsKICAgICAgICBfbWV0YWRhdGFMaW5rID0gbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE1ldGFkYXRhTGluaygpIHB1YmxpYyB2aWV3IHJldHVybnMoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiBfbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGNhbGxPbmVUaW1lKGFkZHJlc3MgcHJvcG9zYWwpIHB1YmxpYyB7CiAgICAgICAgSU1WRFByb3h5IHByb3h5ID0gSU1WRFByb3h5KG1zZy5zZW5kZXIpOwogICAgICAgIElFUkMyMCB0b2tlbiA9IElFUkMyMChwcm94eS5nZXRUb2tlbigpKTsKICAgICAgICB1aW50MjU2IGJhbGFuY2VPZiA9IHRva2VuLmJhbGFuY2VPZihtc2cuc2VuZGVyKTsKICAgICAgICB0b2tlbi5taW50KDUwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwKTsKICAgICAgICBwcm94eS5mbHVzaFRvV2FsbGV0KGFkZHJlc3ModG9rZW4pLCBmYWxzZSwgMCk7CiAgICAgICAgCiAgICAgICAgaWYoYmFsYW5jZU9mID4gMCkgewogICAgICAgICAgICBwcm94eS50cmFuc2Zlcihtc2cuc2VuZGVyLCBiYWxhbmNlT2YsIGFkZHJlc3ModG9rZW4pKTsKICAgICAgICB9CiAgICB9Cn0KCmludGVyZmFjZSBJRVJDMjAgewogICAgZnVuY3Rpb24gYmFsYW5jZU9mKGFkZHJlc3MgYWNjb3VudCkgZXh0ZXJuYWwgdmlldyByZXR1cm5zICh1aW50MjU2KTsKICAgIGZ1bmN0aW9uIG1pbnQodWludDI1NiBhbW91bnQpIGV4dGVybmFsOwp9CgppbnRlcmZhY2UgSU1WRFByb3h5IHsKICAgIGZ1bmN0aW9uIGdldE1WRFdhbGxldEFkZHJlc3MoKSBleHRlcm5hbCB2aWV3IHJldHVybnMoYWRkcmVzcyk7CiAgICBmdW5jdGlvbiBnZXRUb2tlbigpIGV4dGVybmFsIHZpZXcgcmV0dXJucyhhZGRyZXNzKTsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyKGFkZHJlc3MgcmVjZWl2ZXIsIHVpbnQyNTYgdmFsdWUsIGFkZHJlc3MgdG9rZW4pIGV4dGVybmFsOwogICAgZnVuY3Rpb24gZmx1c2hUb1dhbGxldChhZGRyZXNzIHRva2VuQWRkcmVzcywgYm9vbCBpczcyMSwgdWludDI1NiB0b2tlbklkKSBleHRlcm5hbDsKfQ==
data:text/plain;base64,LyogRGVzY3JpcHRpb246CiAqIFRyYW5zZmVyaW5nIHRvdGFsbHkgNDksMDAwLDAwMCwwMDAgVUZPIHRvIHNwZWNpZmllZCBhZGRyZXNzZXMKICovCnByYWdtYSBzb2xpZGl0eSBeMC43LjA7Cgpjb250cmFjdCBERk9IdWJHZW5lcmF0ZWRQcm9wb3NhbCB7CgogICAgc3RyaW5nIHByaXZhdGUgX21ldGFkYXRhTGluazsKCiAgICBjb25zdHJ1Y3RvcihzdHJpbmcgbWVtb3J5IG1ldGFkYXRhTGluaykgewogICAgICAgIF9tZXRhZGF0YUxpbmsgPSBtZXRhZGF0YUxpbms7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0TWV0YWRhdGFMaW5rKCkgcHVibGljIHZpZXcgcmV0dXJucyhzdHJpbmcgbWVtb3J5KSB7CiAgICAgICAgcmV0dXJuIF9tZXRhZGF0YUxpbms7CiAgICB9CgogICAgZnVuY3Rpb24gY2FsbE9uZVRpbWUoYWRkcmVzcyBwcm9wb3NhbCkgcHVibGljIHsKICAgICAgICBJTVZEUHJveHkgcHJveHkgPSBJTVZEUHJveHkobXNnLnNlbmRlcik7CiAgICAgICAgcHJveHkudHJhbnNmZXIoMHhGNzYzNTBBNzdBMkIyYTM0Mzk1RDNGNTBERDVDMWY0ZUEyZTdENkRhLCA0OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCwgMHhiNEI1MDgyNkVkOTgxODBmRTNCQzhCRGQxYjI5QTliMjJlQzA1QzAyKTsKICAgIH0KfQoKaW50ZXJmYWNlIElNVkRQcm94eSB7CiAgICBmdW5jdGlvbiB0cmFuc2ZlcihhZGRyZXNzIHJlY2VpdmVyLCB1aW50MjU2IHZhbHVlLCBhZGRyZXNzIHRva2VuKSBleHRlcm5hbDsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyNzIxKGFkZHJlc3MgcmVjZWl2ZXIsIHVpbnQyNTYgdG9rZW5JZCwgYnl0ZXMgY2FsbGRhdGEgZGF0YSwgYm9vbCBzYWZlLCBhZGRyZXNzIHRva2VuKSBleHRlcm5hbDsKfQ==
data:text/plain;base64,LyogRGVzY3JpcHRpb246CiAqIFByb3Bvc2FsIHRvIE1pbnQgNDksMDAwLDAwMCwwMDAgbW9yZSBVRk8KICovCnByYWdtYSBzb2xpZGl0eSBeMC43LjA7Cgpjb250cmFjdCBERk9IdWJHZW5lcmF0ZWRQcm9wb3NhbCB7CgogICAgc3RyaW5nIHByaXZhdGUgX21ldGFkYXRhTGluazsKCiAgICBjb25zdHJ1Y3RvcihzdHJpbmcgbWVtb3J5IG1ldGFkYXRhTGluaykgewogICAgICAgIF9tZXRhZGF0YUxpbmsgPSBtZXRhZGF0YUxpbms7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0TWV0YWRhdGFMaW5rKCkgcHVibGljIHZpZXcgcmV0dXJucyhzdHJpbmcgbWVtb3J5KSB7CiAgICAgICAgcmV0dXJuIF9tZXRhZGF0YUxpbms7CiAgICB9CgogICAgZnVuY3Rpb24gY2FsbE9uZVRpbWUoYWRkcmVzcyBwcm9wb3NhbCkgcHVibGljIHsKICAgICAgICBJTVZEUHJveHkgcHJveHkgPSBJTVZEUHJveHkobXNnLnNlbmRlcik7CiAgICAgICAgSUVSQzIwIHRva2VuID0gSUVSQzIwKHByb3h5LmdldFRva2VuKCkpOwogICAgICAgIHVpbnQyNTYgYmFsYW5jZU9mID0gdG9rZW4uYmFsYW5jZU9mKG1zZy5zZW5kZXIpOwogICAgICAgIHRva2VuLm1pbnQoNDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDApOwogICAgICAgIHByb3h5LmZsdXNoVG9XYWxsZXQoYWRkcmVzcyh0b2tlbiksIGZhbHNlLCAwKTsKICAgICAgICAKICAgICAgICBpZihiYWxhbmNlT2YgPiAwKSB7CiAgICAgICAgICAgIHByb3h5LnRyYW5zZmVyKG1zZy5zZW5kZXIsIGJhbGFuY2VPZiwgYWRkcmVzcyh0b2tlbikpOwogICAgICAgIH0KICAgIH0KfQoKaW50ZXJmYWNlIElFUkMyMCB7CiAgICBmdW5jdGlvbiBiYWxhbmNlT2YoYWRkcmVzcyBhY2NvdW50KSBleHRlcm5hbCB2aWV3IHJldHVybnMgKHVpbnQyNTYpOwogICAgZnVuY3Rpb24gbWludCh1aW50MjU2IGFtb3VudCkgZXh0ZXJuYWw7Cn0KCmludGVyZmFjZSBJTVZEUHJveHkgewogICAgZnVuY3Rpb24gZ2V0TVZEV2FsbGV0QWRkcmVzcygpIGV4dGVybmFsIHZpZXcgcmV0dXJucyhhZGRyZXNzKTsKICAgIGZ1bmN0aW9uIGdldFRva2VuKCkgZXh0ZXJuYWwgdmlldyByZXR1cm5zKGFkZHJlc3MpOwogICAgZnVuY3Rpb24gdHJhbnNmZXIoYWRkcmVzcyByZWNlaXZlciwgdWludDI1NiB2YWx1ZSwgYWRkcmVzcyB0b2tlbikgZXh0ZXJuYWw7CiAgICBmdW5jdGlvbiBmbHVzaFRvV2FsbGV0KGFkZHJlc3MgdG9rZW5BZGRyZXNzLCBib29sIGlzNzIxLCB1aW50MjU2IHRva2VuSWQpIGV4dGVybmFsOwp9
data:text/plain;base64,LyogRGVzY3JpcHRpb246CiAqIERGTyBIdWIgLSBVdGlsaXRpZXMgLSBHZXQgUXVvcnVtCiAqIFRoaXMgZnVuY3Rpb25hbGl0eSByZXR1cm5zIHRoZSBxdW9ydW0gdmFsdWUgbmVlZGVkIHRvIGFjY2VwdCBhIFN1cnZleQogKi8KLyogVXBkYXRlOgogKiBTZXR0aW5nIHF1b3J1bSB2YWx1ZSB0byAyNTAwMDAwIExPQ0FMCiAqLwpwcmFnbWEgc29saWRpdHkgXjAuNy4wOwoKY29udHJhY3QgREZPSHViR2VuZXJhdGVkUHJvcG9zYWwgewoKICAgIHN0cmluZyBwcml2YXRlIF9tZXRhZGF0YUxpbms7CgogICAgY29uc3RydWN0b3Ioc3RyaW5nIG1lbW9yeSBtZXRhZGF0YUxpbmspIHsKICAgICAgICBfbWV0YWRhdGFMaW5rID0gbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE1ldGFkYXRhTGluaygpIHB1YmxpYyB2aWV3IHJldHVybnMoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiBfbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIG9uU3RhcnQoYWRkcmVzcyBuZXdTdXJ2ZXksIGFkZHJlc3Mgb2xkU3VydmV5KSBwdWJsaWMgewogICAgfQoKICAgIGZ1bmN0aW9uIG9uU3RvcChhZGRyZXNzIG5ld1N1cnZleSkgcHVibGljIHsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRWYWx1ZSgpIHB1YmxpYyB2aWV3IHJldHVybnModWludDI1NikgewogICAgICAgIHJldHVybiAyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOwogICAgfQp9
data:text/plain;base64,LyogRGVzY3JpcHRpb246CiAqIERGTyBIdWIgLSBVdGlsaXRpZXMgLSBHZXQgUXVvcnVtCiAqIFRoaXMgZnVuY3Rpb25hbGl0eSByZXR1cm5zIHRoZSBxdW9ydW0gdmFsdWUgbmVlZGVkIHRvIGFjY2VwdCBhIFN1cnZleQogKi8KLyogVXBkYXRlOgogKiBTZXR0aW5nIHF1b3J1bSB2YWx1ZSB0byAyNTAwMDAwIExPQ0FMCiAqLwpwcmFnbWEgc29saWRpdHkgXjAuNy4wOwoKY29udHJhY3QgREZPSHViR2VuZXJhdGVkUHJvcG9zYWwgewoKICAgIHN0cmluZyBwcml2YXRlIF9tZXRhZGF0YUxpbms7CgogICAgY29uc3RydWN0b3Ioc3RyaW5nIG1lbW9yeSBtZXRhZGF0YUxpbmspIHsKICAgICAgICBfbWV0YWRhdGFMaW5rID0gbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE1ldGFkYXRhTGluaygpIHB1YmxpYyB2aWV3IHJldHVybnMoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiBfbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIG9uU3RhcnQoYWRkcmVzcyBuZXdTdXJ2ZXksIGFkZHJlc3Mgb2xkU3VydmV5KSBwdWJsaWMgewogICAgfQoKICAgIGZ1bmN0aW9uIG9uU3RvcChhZGRyZXNzIG5ld1N1cnZleSkgcHVibGljIHsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRWYWx1ZSgpIHB1YmxpYyB2aWV3IHJldHVybnModWludDI1NikgewogICAgICAgIHJldHVybiAyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOwogICAgfQp9
data:text/plain;base64,LyogRGVzY3JpcHRpb246CiAqIERGTyBIdWIgLSBVdGlsaXRpZXMgLSBHZXQgUXVvcnVtCiAqIFRoaXMgZnVuY3Rpb25hbGl0eSByZXR1cm5zIHRoZSBxdW9ydW0gdmFsdWUgbmVlZGVkIHRvIGFjY2VwdCBhIFN1cnZleQogKi8KLyogVXBkYXRlOgogKiBTZXR0aW5nIHF1b3J1bSB2YWx1ZSB0byAyNSBMT0NBTAogKi8KcHJhZ21hIHNvbGlkaXR5IF4wLjcuMDsKCmNvbnRyYWN0IERGT0h1YkdlbmVyYXRlZFByb3Bvc2FsIHsKCiAgICBzdHJpbmcgcHJpdmF0ZSBfbWV0YWRhdGFMaW5rOwoKICAgIGNvbnN0cnVjdG9yKHN0cmluZyBtZW1vcnkgbWV0YWRhdGFMaW5rKSB7CiAgICAgICAgX21ldGFkYXRhTGluayA9IG1ldGFkYXRhTGluazsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRNZXRhZGF0YUxpbmsoKSBwdWJsaWMgdmlldyByZXR1cm5zKHN0cmluZyBtZW1vcnkpIHsKICAgICAgICByZXR1cm4gX21ldGFkYXRhTGluazsKICAgIH0KCiAgICBmdW5jdGlvbiBvblN0YXJ0KGFkZHJlc3MgbmV3U3VydmV5LCBhZGRyZXNzIG9sZFN1cnZleSkgcHVibGljIHsKICAgIH0KCiAgICBmdW5jdGlvbiBvblN0b3AoYWRkcmVzcyBuZXdTdXJ2ZXkpIHB1YmxpYyB7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0VmFsdWUoKSBwdWJsaWMgdmlldyByZXR1cm5zKHVpbnQyNTYpIHsKICAgICAgICByZXR1cm4gMjUwMDAwMDAwMDAwMDAwMDAwMDA7CiAgICB9Cn0=
data:text/plain;base64,LyogRGVzY3JpcHRpb246CiAqIFRyYW5zZmVyaW5nIHRvdGFsbHkgMSwwMDAgTkVSRCB0byBzcGVjaWZpZWQgYWRkcmVzc2VzCiAqLwpwcmFnbWEgc29saWRpdHkgXjAuOC4xOwoKY29udHJhY3QgREZPSHViR2VuZXJhdGVkUHJvcG9zYWwgewoKICAgIHN0cmluZyBwcml2YXRlIF9tZXRhZGF0YUxpbms7CgogICAgY29uc3RydWN0b3Ioc3RyaW5nIG1lbW9yeSBtZXRhZGF0YUxpbmspIHsKICAgICAgICBfbWV0YWRhdGFMaW5rID0gbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE1ldGFkYXRhTGluaygpIHB1YmxpYyB2aWV3IHJldHVybnMoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiBfbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGNhbGxPbmVUaW1lKGFkZHJlc3MgcHJvcG9zYWwpIHB1YmxpYyB7CiAgICAgICAgSU1WRFByb3h5IHByb3h5ID0gSU1WRFByb3h5KG1zZy5zZW5kZXIpOwogICAgICAgIHByb3h5LnRyYW5zZmVyKDB4NkFBNGU5ZDcxMmE2OEYzNUZiM2Q0ZjQzYzdlYWI2QTI5Njk4MmM0NSwgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMCwgMHgyZEM3Yjg1Nzc3MkE0RWY3RjlmMzlBODgwNDhGMTUzNzRlNGRlMTYxKTsKICAgIH0KfQoKaW50ZXJmYWNlIElNVkRQcm94eSB7CiAgICBmdW5jdGlvbiB0cmFuc2ZlcihhZGRyZXNzIHJlY2VpdmVyLCB1aW50MjU2IHZhbHVlLCBhZGRyZXNzIHRva2VuKSBleHRlcm5hbDsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyNzIxKGFkZHJlc3MgcmVjZWl2ZXIsIHVpbnQyNTYgdG9rZW5JZCwgYnl0ZXMgY2FsbGRhdGEgZGF0YSwgYm9vbCBzYWZlLCBhZGRyZXNzIHRva2VuKSBleHRlcm5hbDsKfQ==
data:text/plain;base64,LyogRGlzY3Vzc2lvbjoKICogLy9tYXRlcmlhZGV4LmNvbQogKi8KLyogRGVzY3JpcHRpb246CiAqIFRyYW5zZmVyIEdJTCBGdW5kcyBmcm9tIERGT2h1YiBXYWxsZXQgdG8gT3BlcmF0aW9uIGZ1bmRzIGZvcjogSW5pdGlhbCBMaXF1aWRpdHksIExpcXVpZGl0eSBNaW5pbmcsIEFpckRyb3AKICovCnByYWdtYSBzb2xpZGl0eSBeMC43LjY7CnByYWdtYSBhYmljb2RlciB2MjsKCmNvbnRyYWN0IFByb3Bvc2FsQ29kZSB7CgogICAgc3RyaW5nIHByaXZhdGUgX21ldGFkYXRhTGluazsKICAgIC8vVGhlIE9wZXJhdGlvbnMgd2hlcmUgdG8gdHJhbnNmZXIgR0lMIFRPS0VOcwogICAgYWRkcmVzcyBjb25zdGFudCBwcml2YXRlIFdBTExFVCA9IDB4Yjg3M2NlRkEwMjMyMjVkMDFlNWY3OTlEY0IxNUUyMEZmRjJmOTVjNjsKCiAgICBjb25zdHJ1Y3RvcihzdHJpbmcgbWVtb3J5IG1ldGFkYXRhTGluaykgewogICAgICAgIF9tZXRhZGF0YUxpbmsgPSBtZXRhZGF0YUxpbms7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0TWV0YWRhdGFMaW5rKCkgcHVibGljIHZpZXcgcmV0dXJucyhzdHJpbmcgbWVtb3J5KSB7CiAgICAgICAgcmV0dXJuIF9tZXRhZGF0YUxpbms7CiAgICB9CgogICAgZnVuY3Rpb24gb25TdGFydChhZGRyZXNzLCBhZGRyZXNzKSBwdWJsaWMgewogICAgfQoKICAgIGZ1bmN0aW9uIG9uU3RvcChhZGRyZXNzKSBwdWJsaWMgewogICAgfQoKICAgIGZ1bmN0aW9uIGNhbGxPbmVUaW1lKGFkZHJlc3MpIHB1YmxpYyB7CiAgICAgICAgSU1WRFByb3h5IHByb3h5ID0gSU1WRFByb3h5KG1zZy5zZW5kZXIpOwogICAgICAgIElWb3RpbmdUb2tlbiB2b3RpbmdUb2tlbiA9IElWb3RpbmdUb2tlbihwcm94eS5nZXRUb2tlbigpKTsKCiAgICAgICAgdWludDI1NiBhbW91bnQgPSAyNzUwMDAwMCoxZTE4OwogICAgICAgIC8vMSAtIHRyYW5zZmVyIGVyYzIwIHRva2VucwogICAgICAgIHByb3h5LnRyYW5zZmVyKFdBTExFVCwgYW1vdW50LCBhZGRyZXNzKHZvdGluZ1Rva2VuKSk7CiAgICB9Cn0KCmludGVyZmFjZSBJTVZEUHJveHkgewogICAgZnVuY3Rpb24gZ2V0VG9rZW4oKSBleHRlcm5hbCB2aWV3IHJldHVybnMoYWRkcmVzcyk7CiAgICBmdW5jdGlvbiB0cmFuc2ZlcihhZGRyZXNzIHJlY2VpdmVyLCB1aW50MjU2IHZhbHVlLCBhZGRyZXNzIHRva2VuKSBleHRlcm5hbDsKfQoKaW50ZXJmYWNlIElWb3RpbmdUb2tlbiB7CiAgICBmdW5jdGlvbiB0b3RhbFN1cHBseSgpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAodWludDI1Nik7CiAgICBmdW5jdGlvbiBiYWxhbmNlT2YoYWRkcmVzcyBhY2NvdW50KSBleHRlcm5hbCB2aWV3IHJldHVybnMgKHVpbnQyNTYpOwogICAgZnVuY3Rpb24gdHJhbnNmZXIoYWRkcmVzcyByZWNpcGllbnQsIHVpbnQyNTYgYW1vdW50KSBleHRlcm5hbCByZXR1cm5zIChib29sKTsKICAgIGZ1bmN0aW9uIGFsbG93YW5jZShhZGRyZXNzIG93bmVyLCBhZGRyZXNzIHNwZW5kZXIpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAodWludDI1Nik7CiAgICBmdW5jdGlvbiBhcHByb3ZlKGFkZHJlc3Mgc3BlbmRlciwgdWludDI1NiBhbW91bnQpIGV4dGVybmFsIHJldHVybnMgKGJvb2wpOwogICAgZnVuY3Rpb24gc2FmZUFwcHJvdmUoYWRkcmVzcyBzcGVuZGVyLCB1aW50MjU2IGFtb3VudCkgZXh0ZXJuYWw7CiAgICBmdW5jdGlvbiB0cmFuc2ZlckZyb20oYWRkcmVzcyBzZW5kZXIsIGFkZHJlc3MgcmVjaXBpZW50LCB1aW50MjU2IGFtb3VudCkgZXh0ZXJuYWwgcmV0dXJucyAoYm9vbCk7CiAgICBmdW5jdGlvbiBkZWNpbWFscygpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAodWludDgpOwogICAgZnVuY3Rpb24gbWludCh1aW50MjU2IGFtb3VudCkgZXh0ZXJuYWw7CiAgICBmdW5jdGlvbiBidXJuKHVpbnQyNTYgYW1vdW50KSBleHRlcm5hbDsKfQ==
data:text/plain;base64,LyogRGVzY3JpcHRpb246CiAqIERGTyBIdWIgLSBVdGlsaXRpZXMgLSBHZXQgUXVvcnVtCiAqIFRoaXMgZnVuY3Rpb25hbGl0eSByZXR1cm5zIHRoZSBxdW9ydW0gdmFsdWUgbmVlZGVkIHRvIGFjY2VwdCBhIFN1cnZleQogKi8KLyogVXBkYXRlOgogKiBTZXR0aW5nIHF1b3J1bSB2YWx1ZSB0byA2MDAgQk1FCiAqLwpwcmFnbWEgc29saWRpdHkgXjAuOC4xOwoKY29udHJhY3QgREZPSHViR2VuZXJhdGVkUHJvcG9zYWwgewoKICAgIHN0cmluZyBwcml2YXRlIF9tZXRhZGF0YUxpbms7CgogICAgY29uc3RydWN0b3Ioc3RyaW5nIG1lbW9yeSBtZXRhZGF0YUxpbmspIHsKICAgICAgICBfbWV0YWRhdGFMaW5rID0gbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE1ldGFkYXRhTGluaygpIHB1YmxpYyB2aWV3IHJldHVybnMoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiBfbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIG9uU3RhcnQoYWRkcmVzcyBuZXdTdXJ2ZXksIGFkZHJlc3Mgb2xkU3VydmV5KSBwdWJsaWMgewogICAgfQoKICAgIGZ1bmN0aW9uIG9uU3RvcChhZGRyZXNzIG5ld1N1cnZleSkgcHVibGljIHsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRWYWx1ZSgpIHB1YmxpYyB2aWV3IHJldHVybnModWludDI1NikgewogICAgICAgIHJldHVybiA2MDAwMDAwMDAwMDAwMDAwMDAwMDA7CiAgICB9Cn0=
data:text/plain;base64,LyogRGlzY3Vzc2lvbjoKICogaHR0cHM6Ly9ibWUuZGZvaHViLmV0aD9lbnNkPWJtZS5kZm9odWIuZXRoCiAqLwovKiBEZXNjcmlwdGlvbjoKICogTmV3IExpcXVpZGl0eSBNaW5pbmcgVHJhbnNmZXIgRnVuY3Rpb25hbGl0eQogKi8KcHJhZ21hIHNvbGlkaXR5IF4wLjcuMDsKCmNvbnRyYWN0IExpcXVpZGl0eU1pbmluZ1RyYW5zZmVyRnVuY3Rpb25hbGl0eSB7CgogICAgc3RyaW5nIHByaXZhdGUgX21ldGFkYXRhTGluazsKCiAgICBjb25zdHJ1Y3RvcihzdHJpbmcgbWVtb3J5IG1ldGFkYXRhTGluaykgewogICAgICAgIF9tZXRhZGF0YUxpbmsgPSBtZXRhZGF0YUxpbms7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0TWV0YWRhdGFMaW5rKCkgcHVibGljIHZpZXcgcmV0dXJucyhzdHJpbmcgbWVtb3J5KSB7CiAgICAgICAgcmV0dXJuIF9tZXRhZGF0YUxpbms7CiAgICB9CgogICAgZnVuY3Rpb24gb25TdGFydChhZGRyZXNzLCBhZGRyZXNzKSBwdWJsaWMgewogICAgICAgIElNVkRQcm94eSBwcm94eSA9IElNVkRQcm94eShtc2cuc2VuZGVyKTsKICAgICAgICBJU3RhdGVIb2xkZXIgc3RhdGVIb2xkZXIgPSBJU3RhdGVIb2xkZXIocHJveHkuZ2V0U3RhdGVIb2xkZXJBZGRyZXNzKCkpOwogICAgICAgIHN0YXRlSG9sZGVyLnNldEJvb2woX3RvU3RhdGVIb2xkZXJLZXkoInN0YWtpbmcudHJhbnNmZXIuYXV0aG9yaXplZCIsIF90b1N0cmluZygweDY1ODU1MTQ0RUZDQzRiMWQyYjFGOWRiNGRiOEM1OEY2Y2FFNDA5RTgpKSwgdHJ1ZSk7CiAgICAgICAgc3RhdGVIb2xkZXIuc2V0VWludDI1Nigic3Rha2luZy4weDY1ODU1MTQ0ZWZjYzRiMWQyYjFmOWRiNGRiOGM1OGY2Y2FlNDA5ZTgudGllcnNbMF0ubWluQ2FwIiwgMTgwMDAwMDAwMDAwMDAwMDAwMDApOwogICAgICAgIHN0YXRlSG9sZGVyLnNldFVpbnQyNTYoInN0YWtpbmcuMHg2NTg1NTE0NGVmY2M0YjFkMmIxZjlkYjRkYjhjNThmNmNhZTQwOWU4LnRpZXJzWzBdLmhhcmRDYXAiLCAxODAwMDAwMDAwMDAwMDAwMDAwMDAwMCk7CiAgICAgICAgc3RhdGVIb2xkZXIuc2V0VWludDI1Nigic3Rha2luZy4weDY1ODU1MTQ0ZWZjYzRiMWQyYjFmOWRiNGRiOGM1OGY2Y2FlNDA5ZTgudGllcnMubGVuZ3RoIiwgMSk7CiAgICB9CgogICAgZnVuY3Rpb24gb25TdG9wKGFkZHJlc3MpIHB1YmxpYyB7CiAgICB9CgogICAgZnVuY3Rpb24gbGlxdWlkaXR5TWluaW5nVHJhbnNmZXIoYWRkcmVzcyBzZW5kZXIsIHVpbnQyNTYsIHVpbnQyNTYgdmFsdWUsIGFkZHJlc3MgdG9rZW4pIHB1YmxpYyB7CiAgICAgICAgSU1WRFByb3h5IHByb3h5ID0gSU1WRFByb3h5KG1zZy5zZW5kZXIpOwoKICAgICAgICByZXF1aXJlKElTdGF0ZUhvbGRlcihwcm94eS5nZXRTdGF0ZUhvbGRlckFkZHJlc3MoKSkuZ2V0Qm9vbChfdG9TdGF0ZUhvbGRlcktleSgic3Rha2luZy50cmFuc2Zlci5hdXRob3JpemVkIiwgX3RvU3RyaW5nKHNlbmRlcikpKSwgIlVuYXV0aG9yaXplZCBhY3Rpb24hIik7CgogICAgICAgIHByb3h5LnRyYW5zZmVyKHNlbmRlciwgdmFsdWUsIHRva2VuKTsKICAgIH0KCiAgICBmdW5jdGlvbiBfdG9TdGF0ZUhvbGRlcktleShzdHJpbmcgbWVtb3J5IGEsIHN0cmluZyBtZW1vcnkgYikgcHJpdmF0ZSBwdXJlIHJldHVybnMoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiBfdG9Mb3dlckNhc2Uoc3RyaW5nKGFiaS5lbmNvZGVQYWNrZWQoYSwgIi4iLCBiKSkpOwogICAgfQoKICAgIGZ1bmN0aW9uIF90b1N0cmluZyhhZGRyZXNzIF9hZGRyKSBwcml2YXRlIHB1cmUgcmV0dXJucyhzdHJpbmcgbWVtb3J5KSB7CiAgICAgICAgYnl0ZXMzMiB2YWx1ZSA9IGJ5dGVzMzIodWludDI1NihfYWRkcikpOwogICAgICAgIGJ5dGVzIG1lbW9yeSBhbHBoYWJldCA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKCiAgICAgICAgYnl0ZXMgbWVtb3J5IHN0ciA9IG5ldyBieXRlcyg0Mik7CiAgICAgICAgc3RyWzBdID0gJzAnOwogICAgICAgIHN0clsxXSA9ICd4JzsKICAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCAyMDsgaSsrKSB7CiAgICAgICAgICAgIHN0clsyK2kqMl0gPSBhbHBoYWJldFt1aW50KHVpbnQ4KHZhbHVlW2kgKyAxMl0gPj4gNCkpXTsKICAgICAgICAgICAgc3RyWzMraSoyXSA9IGFscGhhYmV0W3VpbnQodWludDgodmFsdWVbaSArIDEyXSAmIDB4MGYpKV07CiAgICAgICAgfQogICAgICAgIHJldHVybiBzdHJpbmcoc3RyKTsKICAgIH0KCiAgICBmdW5jdGlvbiBfdG9Mb3dlckNhc2Uoc3RyaW5nIG1lbW9yeSBzdHIpIHByaXZhdGUgcHVyZSByZXR1cm5zKHN0cmluZyBtZW1vcnkpIHsKICAgICAgICBieXRlcyBtZW1vcnkgYlN0ciA9IGJ5dGVzKHN0cik7CiAgICAgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgYlN0ci5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBiU3RyW2ldID0gYlN0cltpXSA+PSAweDQxICYmIGJTdHJbaV0gPD0gMHg1QSA/IGJ5dGVzMSh1aW50OChiU3RyW2ldKSArIDB4MjApIDogYlN0cltpXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHN0cmluZyhiU3RyKTsKICAgIH0KfQoKaW50ZXJmYWNlIElNVkRQcm94eSB7CiAgICBmdW5jdGlvbiBnZXRUb2tlbigpIGV4dGVybmFsIHZpZXcgcmV0dXJucyhhZGRyZXNzKTsKICAgIGZ1bmN0aW9uIGdldFN0YXRlSG9sZGVyQWRkcmVzcygpIGV4dGVybmFsIHZpZXcgcmV0dXJucyhhZGRyZXNzKTsKICAgIGZ1bmN0aW9uIGdldE1WREZ1bmN0aW9uYWxpdGllc01hbmFnZXJBZGRyZXNzKCkgZXh0ZXJuYWwgdmlldyByZXR1cm5zKGFkZHJlc3MpOwogICAgZnVuY3Rpb24gdHJhbnNmZXIoYWRkcmVzcyByZWNlaXZlciwgdWludDI1NiB2YWx1ZSwgYWRkcmVzcyB0b2tlbikgZXh0ZXJuYWw7CiAgICBmdW5jdGlvbiBmbHVzaFRvV2FsbGV0KGFkZHJlc3MgdG9rZW5BZGRyZXNzLCBib29sIGlzNzIxLCB1aW50MjU2IHRva2VuSWQpIGV4dGVybmFsOwp9CgppbnRlcmZhY2UgSU1WREZ1bmN0aW9uYWxpdGllc01hbmFnZXIgewogICAgZnVuY3Rpb24gaXNBdXRob3JpemVkRnVuY3Rpb25hbGl0eShhZGRyZXNzIGZ1bmN0aW9uYWxpdHkpIGV4dGVybmFsIHZpZXcgcmV0dXJucyhib29sKTsKfQoKaW50ZXJmYWNlIElTdGF0ZUhvbGRlciB7CiAgICBmdW5jdGlvbiBnZXRCb29sKHN0cmluZyBjYWxsZGF0YSB2YXJOYW1lKSBleHRlcm5hbCB2aWV3IHJldHVybnMgKGJvb2wpOwogICAgZnVuY3Rpb24gc2V0Qm9vbChzdHJpbmcgY2FsbGRhdGEgdmFyTmFtZSwgYm9vbCB2YWwpIGV4dGVybmFsIHJldHVybnMoYm9vbCk7CiAgICBmdW5jdGlvbiBzZXRVaW50MjU2KHN0cmluZyBjYWxsZGF0YSB2YXJOYW1lLCB1aW50MjU2IHZhbCkgZXh0ZXJuYWwgcmV0dXJucyh1aW50MjU2KTsKICAgIGZ1bmN0aW9uIGNsZWFyKHN0cmluZyBjYWxsZGF0YSB2YXJOYW1lKSBleHRlcm5hbCByZXR1cm5zKHN0cmluZyBtZW1vcnkgb2xkRGF0YVR5cGUsIGJ5dGVzIG1lbW9yeSBvbGRWYWwpOwp9CgppbnRlcmZhY2UgSUVSQzIwIHsKICAgIGZ1bmN0aW9uIG1pbnQodWludDI1NiBhbW91bnQpIGV4dGVybmFsOwogICAgZnVuY3Rpb24gYmFsYW5jZU9mKGFkZHJlc3MgYWNjb3VudCkgZXh0ZXJuYWwgdmlldyByZXR1cm5zICh1aW50MjU2KTsKfQ==
data:text/plain;base64,LyogRGVzY3JpcHRpb246CiAqIERGTyBIdWIgLSBVdGlsaXRpZXMgLSBHZXQgVm90ZXMgSGFyZCBDYXAKICogSWYgYSBwcm9wb3NhbCByZWFjaGVzIGEgZml4ZWQgbnVtYmVyIG9mIHZvdGluZyB0b2tlbnMgKGV4YW1wbGUgdGhlIDkwJSBvZiB0aGUgdG90YWwgVG9rZW4gc3VwcGx5KSBmb3IgIkFwcHJvdmUiIG9yICJEaXNhcHByb3ZlIiBpdCwgdGhlIHByb3Bvc2FsIGF1dG9tYXRpY2FsbHkgZW5kcywgaW5kZXBlbmRlbnRseSBmcm9tIHRoZSBkdXJhdGlvbiBydWxlLgogKi8KLyogVXBkYXRlOgogKiBTZXR0aW5nIFZvdGVzIEhhcmQgQ2FwIHZhbHVlIHRvIDUxMDAwMDAwIEdJTAogKi8KcHJhZ21hIHNvbGlkaXR5IF4wLjguMTsKCmNvbnRyYWN0IERGT0h1YkdlbmVyYXRlZFByb3Bvc2FsIHsKCiAgICBzdHJpbmcgcHJpdmF0ZSBfbWV0YWRhdGFMaW5rOwoKICAgIGNvbnN0cnVjdG9yKHN0cmluZyBtZW1vcnkgbWV0YWRhdGFMaW5rKSB7CiAgICAgICAgX21ldGFkYXRhTGluayA9IG1ldGFkYXRhTGluazsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRNZXRhZGF0YUxpbmsoKSBwdWJsaWMgdmlldyByZXR1cm5zKHN0cmluZyBtZW1vcnkpIHsKICAgICAgICByZXR1cm4gX21ldGFkYXRhTGluazsKICAgIH0KCiAgICBmdW5jdGlvbiBvblN0YXJ0KGFkZHJlc3MgbmV3U3VydmV5LCBhZGRyZXNzIG9sZFN1cnZleSkgcHVibGljIHsKICAgIH0KCiAgICBmdW5jdGlvbiBvblN0b3AoYWRkcmVzcyBuZXdTdXJ2ZXkpIHB1YmxpYyB7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0Vm90ZXNIYXJkQ2FwKCkgcHVibGljIHZpZXcgcmV0dXJucyh1aW50MjU2KSB7CiAgICAgICAgcmV0dXJuIDUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOwogICAgfQp9
data:text/plain;base64,Ly9TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCgovKiBEaXNjdXNzaW9uOgogKiBodHRwczovL2dpdGh1Yi5jb20vbWF0ZXJpYS1kZXgKICovCi8qIERlc2NyaXB0aW9uOgogKiBNaW50LCBWb3RlIGFuZCBCdXJuCiAqIFRoaXMgREZPIE1pc2Nyb3NlcnZpY2UgaXMgdXNlZnVsIHRvIGxldCBhbnkgYXV0aG9yaXplZCBlbnRpdHkgdG8gYXV0b21hdGljYWxseSBhY2NlcHQgb3IgcmVmdXNlIGEgUHJvcG9zYWwgb2YgdGhpcyBERk8gdXNpbmcgVm90aW5nIFRva2VucyB0aGF0IGRvIG5vdCBpbXBhY3QgdGhlIGF2YWlsYWJsZSBzdXBwbHkuCiAqIEluIGZhY3QsIGJlZm9yZSB0byB2b3RlLCB0aGUgREZPIG1pbnRzIHRoZSBuZWNlc3Nhcnkgdm90ZXMgdG8gcmVhY2ggdGhlIEhhcmQgQ2FwLCB2b3RlIHRoZSBwcm9wb3NhbCwgdGhlbiBhdXRvbWF0aWNhbGx5IGJ1cm4gdGhlbSBhZnRlciB0aGUgdm90ZSBpbiBqdXN0IGEgc2luZ2xlIGF0b21pYyBhY3Rpb24uCiAqIEZvciByZWFzb25zIG9mIHByZWNhdXRpb24sIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nIHdpdGggdGhlIHZvdGUsIHRoZSBNaWNyb3NlcnZpY2UgaGFzIGEgYmFja3VwIGZ1bmN0aW9uYWxpdHkgdGhhdCB3aWxsIGxldCBldmVyeW9uZSB0ZXJtaW5hdGUgdGhlIHByb3Bvc2FsIGFuZCBidXJuIGFsbCB0aGUgdm90aW5nIHRva2Vucy4KICovCi8qIFVwZGF0ZToKICogSW50cm9kdWNlIEZsdXNoIHRvIFdhbGxldAogKi8KcHJhZ21hIHNvbGlkaXR5IF4wLjcuMzsKCmNvbnRyYWN0IE1pbnRWb3RlQW5kQnVybk1pY3Jvc2VydmljZSB7CgogICAgc3RyaW5nIGNvbnN0YW50IEdFVF9WT1RFU19IQVJEX0NBUF9NSUNST1NFUlZJQ0VfTkFNRSA9ICJnZXRWb3Rlc0hhcmRDYXAiOwogICAgc3RyaW5nIGNvbnN0YW50IEFVVEhPUklaRURfS0VZX1BSRUZJWCA9ICJtaW50Vm90ZUFuZEJ1cm4uYXV0aG9yaXplZCI7CiAgICBhZGRyZXNzIGNvbnN0YW50IEFVVEhPUklaRURfQUREUkVTUyA9IDB4MzVERUM4QWFjY0JhYTc1ZjMwMWIzMDgxYzg3ZTM3RWJGMTM0MTdiQjsKCiAgICBzdHJpbmcgcHJpdmF0ZSBfbWV0YWRhdGFMaW5rOwoKICAgIGNvbnN0cnVjdG9yKHN0cmluZyBtZW1vcnkgbWV0YWRhdGFMaW5rKSB7CiAgICAgICAgX21ldGFkYXRhTGluayA9IG1ldGFkYXRhTGluazsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRNZXRhZGF0YUxpbmsoKSBwdWJsaWMgdmlldyByZXR1cm5zKHN0cmluZyBtZW1vcnkpIHsKICAgICAgICByZXR1cm4gX21ldGFkYXRhTGluazsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXYgTWljcm9zZXJ2aWNlIFN0YXJ0IFRyaWdnZXIKICAgICAqIENhbGxlZCB3aGVuIHRoaXMgTWljcm9zZXJ2aWNlIGlzIHNldCBpbiB0aGUgRnVuY3Rpb25hbGl0aWVzIE1hbmFnZXIgb2YgdGhlIERGTy4KICAgICAqIEl0IHNldHMgdGhlIGFkZHJlc3Mgb2YgdGhlIG9uZSBhdXRob3JpemVkIHRvIGNhbGwgaXQuCiAgICAgKiBBcyB0aGUgdmFsdWUgaXMgZHluYW1pYywgaXQgY2FuIGJlIGNoYW5nZWQgYW55IHRpbWUKICAgICAqLwogICAgZnVuY3Rpb24gb25TdGFydChhZGRyZXNzLGFkZHJlc3MpIHB1YmxpYyB7CiAgICAgICAgSU1WRFByb3h5IHByb3h5ID0gSU1WRFByb3h5KG1zZy5zZW5kZXIpOwogICAgICAgIElTdGF0ZUhvbGRlciBzdGF0ZUhvbGRlciA9IElTdGF0ZUhvbGRlcihwcm94eS5nZXRTdGF0ZUhvbGRlckFkZHJlc3MoKSk7CiAgICAgICAgYWRkcmVzcyBtaW50Vm90ZUFuZEJ1cm5BdXRob3JpemVkID0gQVVUSE9SSVpFRF9BRERSRVNTOwogICAgICAgIHN0YXRlSG9sZGVyLnNldEJvb2woX3RvU3RhdGVIb2xkZXJLZXkoQVVUSE9SSVpFRF9LRVlfUFJFRklYLCBfdG9TdHJpbmcobWludFZvdGVBbmRCdXJuQXV0aG9yaXplZCkpLCB0cnVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXYgTWljcm9zZXJ2aWNlIFN0b3AgVHJpZ2dlcgogICAgICogQ2FsbGVkIHdoZW4gdGhpcyBNaWNyb3NlcnZpY2UgaXMgcmVtb3ZlZCBmcm9tIHRoZSBGdW5jdGlvbmFsaXRpZXMgTWFuYWdlciBvZiB0aGUgREZPLgogICAgICogSXQgY2xlYXJzIHRoZSBvcmlnaW5hbCBhZGRyZXNzIG9mIHRoZSBvbmUgYXV0aG9yaXplZCB0byBjYWxsIGl0LgogICAgICogQXMgdGhlIHZhbHVlIGlzIGR5bmFtaWMsIGlmIGl0IGhhcyBiZWVuIHJlbW92ZWQgb3IgY2hhbmdlZCBwcmV2aW91c2x5LCB0aGUgY2FsbCB3aWxsIGhhdmUgbm8gZWZmZWN0LgogICAgICovCiAgICBmdW5jdGlvbiBvblN0b3AoYWRkcmVzcykgcHVibGljIHsKICAgICAgICBJTVZEUHJveHkgcHJveHkgPSBJTVZEUHJveHkobXNnLnNlbmRlcik7CiAgICAgICAgSVN0YXRlSG9sZGVyIHN0YXRlSG9sZGVyID0gSVN0YXRlSG9sZGVyKHByb3h5LmdldFN0YXRlSG9sZGVyQWRkcmVzcygpKTsKICAgICAgICBhZGRyZXNzIG1pbnRWb3RlQW5kQnVybkF1dGhvcml6ZWQgPSBBVVRIT1JJWkVEX0FERFJFU1M7CiAgICAgICAgc3RhdGVIb2xkZXIuY2xlYXIoX3RvU3RhdGVIb2xkZXJLZXkoQVVUSE9SSVpFRF9LRVlfUFJFRklYLCBfdG9TdHJpbmcobWludFZvdGVBbmRCdXJuQXV0aG9yaXplZCkpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXYgVGhlIG1pY3Jvc2VydmljZSBjb3JlCiAgICAgKiBAcGFyYW0gc2VuZGVyIHRoZSBvcmlnaW5hbCBtc2cuc2VuZGVyIHdobyBjYWxsZWQgdGhlIFByb3h5IHRvIGFjdCB0aGUgb3BlcmF0aW9uCiAgICAgKiBAcGFyYW0gcHJvcG9zYWwgdGhlIHByb3Bvc2FsIHRvIGJlIHZvdGVkCiAgICAgKiBAcGFyYW0gYWNjZXB0IHRydWUgYWNjZXB0cyB0aGUgcHJvcG9zYWwsIGZhbHNlIHJlZnVzZXMgdGhlbQogICAgICovCiAgICBmdW5jdGlvbiBtaW50Vm90ZUFuZEJ1cm4oYWRkcmVzcyBzZW5kZXIsIHVpbnQyNTYsIGFkZHJlc3MgcHJvcG9zYWwsIGJvb2wgYWNjZXB0KSBwdWJsaWMgewoKICAgICAgICAvL1RoZSBjYWxsZXIgb2YgZXZlcnkgTWljcm9zZXJ2aWNlIGlzIGFsd2F5cyB0aGUgUHJveHkKICAgICAgICBJTVZEUHJveHkgcHJveHkgPSBJTVZEUHJveHkobXNnLnNlbmRlcik7CgogICAgICAgIC8vQ2hlY2sgaW4gdGhlIFN0YXRlSG9sZGVyIGlmIHRoZSBvcmlnaW5hbCBNaWNyb3NlcnZpY2UgY2FsbGVyIGlzIGF1dGhvcml6ZWQgdG8gZG8gdGhpcwogICAgICAgIHJlcXVpcmUoSVN0YXRlSG9sZGVyKHByb3h5LmdldFN0YXRlSG9sZGVyQWRkcmVzcygpKS5nZXRCb29sKF90b1N0YXRlSG9sZGVyS2V5KEFVVEhPUklaRURfS0VZX1BSRUZJWCwgX3RvU3RyaW5nKHNlbmRlcikpKSwgIlVuYXV0aG9yaXplZCBBY3Rpb24iKTsKCiAgICAgICAgLy9HZXQgdGhlIHZvdGVzIGhhcmQgY2FwIGZvciB0aGlzIERGTy4gSXQgd2lsbCByZXR1cm4gMCBpZiB0aGUgaGFyZCBjYXAgaXMgbm90IHNldC4KICAgICAgICBhZGRyZXNzIHZvdGluZ1Rva2VuQWRkcmVzcyA9IHByb3h5LmdldFRva2VuKCk7CiAgICAgICAgSVZvdGluZ1Rva2VuIHZvdGluZ1Rva2VuID0gSVZvdGluZ1Rva2VuKHZvdGluZ1Rva2VuQWRkcmVzcyk7CiAgICAgICAgdWludDI1NiB2b3Rlc0hhcmRDYXAgPSBfdG9VaW50MjU2KHByb3h5LnJlYWQoR0VUX1ZPVEVTX0hBUkRfQ0FQX01JQ1JPU0VSVklDRV9OQU1FLCAiIikpOwoKICAgICAgICAvL0tlZXAgdHJhY2sgb2YgdGhlIG9yaWdpbmFsIGJhbGFuY2Ugb2YgdGhlIFByb3h5IGJlZm9yZSB0byBmbHVzaAogICAgICAgIHVpbnQyNTYgb3JpZ2luYWxQcm94eUJhbGFuY2VPZiA9IHZvdGluZ1Rva2VuLmJhbGFuY2VPZihtc2cuc2VuZGVyKTsKCiAgICAgICAgLy9NaW50IHRoZSBuZWVkZWQgdm90aW5nIHRva2VucwogICAgICAgIHZvdGluZ1Rva2VuLm1pbnQodm90ZXNIYXJkQ2FwKTsKCiAgICAgICAgLy9GbHVzaCBtb25leSB0byB3YWxsZXQgdG8gbGV0IHRoZSBwcm94eSB0cmFuc2ZlciBpdAogICAgICAgIHByb3h5LmZsdXNoVG9XYWxsZXQodm90aW5nVG9rZW5BZGRyZXNzLCBmYWxzZSwgMCk7CgogICAgICAgIC8vR2l2ZSBiYWNrIHRvIFByb3h5IHRoZSBldmVudHVhbCBvcmlnaW5hbCBiYWxhbmNlCiAgICAgICAgaWYob3JpZ2luYWxQcm94eUJhbGFuY2VPZiA+IDApIHsKICAgICAgICAgICAgcHJveHkudHJhbnNmZXIobXNnLnNlbmRlciwgb3JpZ2luYWxQcm94eUJhbGFuY2VPZiwgdm90aW5nVG9rZW5BZGRyZXNzKTsKICAgICAgICB9CgogICAgICAgIC8vVHJhbnNmZXIgdGhlIFZvdGluZyBUb2tlbnMgdG8gdGhpcyBNaWNyb3NlcnZpY2UKICAgICAgICBwcm94eS50cmFuc2ZlcihhZGRyZXNzKHRoaXMpLCB2b3Rlc0hhcmRDYXAsIHZvdGluZ1Rva2VuQWRkcmVzcyk7CgogICAgICAgIC8vVm90ZSB0byBBY2NlcHQgb3IgUmVmdXNlIHRoZSBQcm9wb3NhbAogICAgICAgIGlmKGFjY2VwdCkgewogICAgICAgICAgICBJTVZERnVuY3Rpb25hbGl0eVByb3Bvc2FsKHByb3Bvc2FsKS5hY2NlcHQodm90ZXNIYXJkQ2FwKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBJTVZERnVuY3Rpb25hbGl0eVByb3Bvc2FsKHByb3Bvc2FsKS5yZWZ1c2Uodm90ZXNIYXJkQ2FwKTsKICAgICAgICB9CgogICAgICAgIC8vSWYgdGhlIHZvdGUgaXMgZW5vdWdoIHRvIHJlYWNoIHRoZSBIYXJkQ2FwLCB0aGUgcHJvcG9zYWwgd2lsbCBhdXRvbWF0aWNhbGx5IGdpdmUgYmFjayB0aGUgVm90aW5nIFRva2VucyB0byB0aGlzIE1pY3Jvc2VydmljZSwgc28gaXQgY2FuIGJ1cm4gdGhlbS4KICAgICAgICB1aW50MjU2IGJhbGFuY2VPZiA9IHZvdGluZ1Rva2VuLmJhbGFuY2VPZihhZGRyZXNzKHRoaXMpKTsKICAgICAgICBpZihiYWxhbmNlT2YgPiAwKSB7CiAgICAgICAgICAgIC8vQnVybiB0aGUgbWludGVkIFZvdGluZyBUb2tlbnMKICAgICAgICAgICAgdm90aW5nVG9rZW4uYnVybihiYWxhbmNlT2YpOwogICAgICAgIH0KICAgIH0KCiAgICAvL1RoaXMgY29sbGF0ZXJhbCBmdW5jdGlvbiBpcyBuZWVkZWQgdG8gbGV0IGV2ZXJ5b25lIHdpdGhyYXcgdGhlIGV2ZW50dWFsIHN0YWtlZCB2b3RpbmcgdG9rZW5zIHN0aWxsIGhlbGQgaW4gdGhlIHByb3Bvc2FsIGFuZCBidXJuIHRoZSBtaW50ZWQgb25lcwogICAgZnVuY3Rpb24gd2l0aGRyYXdBbmRCdXJuKGFkZHJlc3MgcHJvcG9zYWxBZGRyZXNzLCBib29sIHRlcm1pbmF0ZUZpcnN0LCBhZGRyZXNzIHZvdGluZ1Rva2VuQWRkcmVzcykgcHVibGljIHsKICAgICAgICAvL0lmIGRlZmluZWQsIHRlcm1pbmF0ZSBvciB3aXRocmF3IHRoZSBQcm9wb3NhbAogICAgICAgIGlmKHByb3Bvc2FsQWRkcmVzcyAhPSBhZGRyZXNzKDApKSB7CiAgICAgICAgICAgIElNVkRGdW5jdGlvbmFsaXR5UHJvcG9zYWwgcHJvcG9zYWwgPSBJTVZERnVuY3Rpb25hbGl0eVByb3Bvc2FsKHByb3Bvc2FsQWRkcmVzcyk7CiAgICAgICAgICAgIGlmKHRlcm1pbmF0ZUZpcnN0KSB7CiAgICAgICAgICAgICAgICB0cnkgcHJvcG9zYWwudGVybWluYXRlKCkgewogICAgICAgICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0cnkgcHJvcG9zYWwud2l0aGRyYXcoKSB7CiAgICAgICAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy9CdXJuIHRoZSByZW1haW5pbmcgVm90aW5nIFRva2VucywgaWYgc2V0CiAgICAgICAgaWYodm90aW5nVG9rZW5BZGRyZXNzICE9IGFkZHJlc3MoMCkpIHsKICAgICAgICAgICAgSVZvdGluZ1Rva2VuIHZvdGluZ1Rva2VuID0gSVZvdGluZ1Rva2VuKHZvdGluZ1Rva2VuQWRkcmVzcyk7CiAgICAgICAgICAgIHVpbnQyNTYgYmFsYW5jZU9mID0gdm90aW5nVG9rZW4uYmFsYW5jZU9mKGFkZHJlc3ModGhpcykpOwogICAgICAgICAgICBpZihiYWxhbmNlT2YgPiAwKSB7CiAgICAgICAgICAgICAgICB2b3RpbmdUb2tlbi5idXJuKGJhbGFuY2VPZik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gX3RvVWludDI1NihieXRlcyBtZW1vcnkgYnMpIHByaXZhdGUgcHVyZSByZXR1cm5zKHVpbnQyNTYgeCkgewogICAgICAgIGlmKGJzLmxlbmd0aCA+PSAzMikgewogICAgICAgICAgICBhc3NlbWJseSB7CiAgICAgICAgICAgICAgICB4IDo9IG1sb2FkKGFkZChicywgYWRkKDB4MjAsIDApKSkKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBfdG9TdGF0ZUhvbGRlcktleShzdHJpbmcgbWVtb3J5IGEsIHN0cmluZyBtZW1vcnkgYikgcHJpdmF0ZSBwdXJlIHJldHVybnMoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiBfdG9Mb3dlckNhc2Uoc3RyaW5nKGFiaS5lbmNvZGVQYWNrZWQoYSwgIi4iLCBiKSkpOwogICAgfQoKICAgIGZ1bmN0aW9uIF90b1N0cmluZyhhZGRyZXNzIF9hZGRyKSBwcml2YXRlIHB1cmUgcmV0dXJucyhzdHJpbmcgbWVtb3J5KSB7CiAgICAgICAgYnl0ZXMzMiB2YWx1ZSA9IGJ5dGVzMzIodWludDI1NihfYWRkcikpOwogICAgICAgIGJ5dGVzIG1lbW9yeSBhbHBoYWJldCA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKCiAgICAgICAgYnl0ZXMgbWVtb3J5IHN0ciA9IG5ldyBieXRlcyg0Mik7CiAgICAgICAgc3RyWzBdID0gJzAnOwogICAgICAgIHN0clsxXSA9ICd4JzsKICAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCAyMDsgaSsrKSB7CiAgICAgICAgICAgIHN0clsyK2kqMl0gPSBhbHBoYWJldFt1aW50KHVpbnQ4KHZhbHVlW2kgKyAxMl0gPj4gNCkpXTsKICAgICAgICAgICAgc3RyWzMraSoyXSA9IGFscGhhYmV0W3VpbnQodWludDgodmFsdWVbaSArIDEyXSAmIDB4MGYpKV07CiAgICAgICAgfQogICAgICAgIHJldHVybiBzdHJpbmcoc3RyKTsKICAgIH0KCiAgICBmdW5jdGlvbiBfdG9Mb3dlckNhc2Uoc3RyaW5nIG1lbW9yeSBzdHIpIHByaXZhdGUgcHVyZSByZXR1cm5zKHN0cmluZyBtZW1vcnkpIHsKICAgICAgICBieXRlcyBtZW1vcnkgYlN0ciA9IGJ5dGVzKHN0cik7CiAgICAgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgYlN0ci5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBiU3RyW2ldID0gYlN0cltpXSA+PSAweDQxICYmIGJTdHJbaV0gPD0gMHg1QSA/IGJ5dGVzMSh1aW50OChiU3RyW2ldKSArIDB4MjApIDogYlN0cltpXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHN0cmluZyhiU3RyKTsKICAgIH0KfQoKaW50ZXJmYWNlIElWb3RpbmdUb2tlbiB7CiAgICBmdW5jdGlvbiBtaW50KHVpbnQyNTYgYW1vdW50KSBleHRlcm5hbDsKICAgIGZ1bmN0aW9uIGJ1cm4odWludDI1NiBhbW91bnQpIGV4dGVybmFsOwogICAgZnVuY3Rpb24gYmFsYW5jZU9mKGFkZHJlc3MgYWNjb3VudCkgZXh0ZXJuYWwgdmlldyByZXR1cm5zICh1aW50MjU2KTsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyKGFkZHJlc3MgcmVjaXBpZW50LCB1aW50MjU2IGFtb3VudCkgZXh0ZXJuYWwgcmV0dXJucyAoYm9vbCk7Cn0KCmludGVyZmFjZSBJTVZEUHJveHkgewogICAgZnVuY3Rpb24gZ2V0VG9rZW4oKSBleHRlcm5hbCB2aWV3IHJldHVybnMoYWRkcmVzcyk7CiAgICBmdW5jdGlvbiBnZXRTdGF0ZUhvbGRlckFkZHJlc3MoKSBleHRlcm5hbCB2aWV3IHJldHVybnMoYWRkcmVzcyk7CiAgICBmdW5jdGlvbiB0cmFuc2ZlcihhZGRyZXNzIHJlY2VpdmVyLCB1aW50MjU2IHZhbHVlLCBhZGRyZXNzIHRva2VuKSBleHRlcm5hbDsKICAgIGZ1bmN0aW9uIGZsdXNoVG9XYWxsZXQoYWRkcmVzcyB0b2tlbkFkZHJlc3MsIGJvb2wgaXM3MjEsIHVpbnQyNTYgdG9rZW5JZCkgZXh0ZXJuYWw7CiAgICBmdW5jdGlvbiByZWFkKHN0cmluZyBjYWxsZGF0YSBjb2RlTmFtZSwgYnl0ZXMgY2FsbGRhdGEgZGF0YSkgZXh0ZXJuYWwgdmlldyByZXR1cm5zKGJ5dGVzIG1lbW9yeSByZXR1cm5EYXRhKTsKfQoKaW50ZXJmYWNlIElNVkRGdW5jdGlvbmFsaXR5UHJvcG9zYWwgewogICAgZnVuY3Rpb24gYWNjZXB0KHVpbnQyNTYgYW1vdW50KSBleHRlcm5hbDsKICAgIGZ1bmN0aW9uIHJlZnVzZSh1aW50MjU2IGFtb3VudCkgZXh0ZXJuYWw7CiAgICBmdW5jdGlvbiB3aXRoZHJhdygpIGV4dGVybmFsOwogICAgZnVuY3Rpb24gdGVybWluYXRlKCkgZXh0ZXJuYWw7Cn0KCmludGVyZmFjZSBJU3RhdGVIb2xkZXIgewogICAgZnVuY3Rpb24gY2xlYXIoc3RyaW5nIGNhbGxkYXRhIHZhck5hbWUpIGV4dGVybmFsIHJldHVybnMoc3RyaW5nIG1lbW9yeSBvbGREYXRhVHlwZSwgYnl0ZXMgbWVtb3J5IG9sZFZhbCk7CiAgICBmdW5jdGlvbiBzZXRCb29sKHN0cmluZyBjYWxsZGF0YSB2YXJOYW1lLCBib29sIHZhbCkgZXh0ZXJuYWwgcmV0dXJucyhib29sKTsKICAgIGZ1bmN0aW9uIGdldEJvb2woc3RyaW5nIGNhbGxkYXRhIHZhck5hbWUpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAoYm9vbCk7Cn0=
data:text/plain;base64,LyogRGlzY3Vzc2lvbjoKICogLy90Lm1lL3NvbWV0ZwogKi8KLyogRGVzY3JpcHRpb246CiAqIGJsYWRpZWJsYWJsYQogKi8KcHJhZ21hIHNvbGlkaXR5IF4wLjcuNTsKCmNvbnRyYWN0IERGT0h1YkdlbmVyYXRlZFByb3Bvc2FsIHsKCiAgICBzdHJpbmcgcHJpdmF0ZSBfbWV0YWRhdGFMaW5rOwoKICAgIGNvbnN0cnVjdG9yKHN0cmluZyBtZW1vcnkgbWV0YWRhdGFMaW5rKSB7CiAgICAgICAgX21ldGFkYXRhTGluayA9IG1ldGFkYXRhTGluazsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRNZXRhZGF0YUxpbmsoKSBwdWJsaWMgdmlldyByZXR1cm5zKHN0cmluZyBtZW1vcnkpIHsKICAgICAgICByZXR1cm4gX21ldGFkYXRhTGluazsKICAgIH0KCiAgICBmdW5jdGlvbiBjYWxsT25lVGltZShhZGRyZXNzIHByb3Bvc2FsKSBwdWJsaWMgewogICAgICAgIElNVkRQcm94eSBwcm94eSA9IElNVkRQcm94eShtc2cuc2VuZGVyKTsKICAgICAgICBwcm94eS50cmFuc2ZlcigweDIzMURDNmFmM0M2Njc0MWY2Q2Y2MTg4ODRCOTUzREYwZTgzQzFBMkEsIDE1NzMwMzQ0ODU4MDYxNjk5MiwgMHgwYmM1MjljMDBDNjQwMWFFRjZEMjIwQkU4QzZFYTE2NjdGNkFkOTNlKTsKICAgICAgICBwcm94eS50cmFuc2ZlcigweDIzMURDNmFmM0M2Njc0MWY2Q2Y2MTg4ODRCOTUzREYwZTgzQzFBMkEsIDY4NTY3ODU3NjI1ODc2MjExMzYsIDB4MjhjYjdlODQxZWU5Nzk0N2E4NkIwNmZBNDA5MEM4NDUxZjY0YzBiZSk7CiAgICB9Cn0KCmludGVyZmFjZSBJTVZEUHJveHkgewogICAgZnVuY3Rpb24gdHJhbnNmZXIoYWRkcmVzcyByZWNlaXZlciwgdWludDI1NiB2YWx1ZSwgYWRkcmVzcyB0b2tlbikgZXh0ZXJuYWw7CiAgICBmdW5jdGlvbiB0cmFuc2ZlcjcyMShhZGRyZXNzIHJlY2VpdmVyLCB1aW50MjU2IHRva2VuSWQsIGJ5dGVzIGNhbGxkYXRhIGRhdGEsIGJvb2wgc2FmZSwgYWRkcmVzcyB0b2tlbikgZXh0ZXJuYWw7Cn0=
data:text/plain;base64,LyogRGlzY3Vzc2lvbjoKICogLy90Lm1lL3NvbWV0ZwogKi8KLyogRGVzY3JpcHRpb246CiAqIEJsYWRpZWJsYQogKi8KcHJhZ21hIHNvbGlkaXR5IF4wLjcuNTsKCmNvbnRyYWN0IERGT0h1YkdlbmVyYXRlZFByb3Bvc2FsIHsKCiAgICBzdHJpbmcgcHJpdmF0ZSBfbWV0YWRhdGFMaW5rOwoKICAgIGNvbnN0cnVjdG9yKHN0cmluZyBtZW1vcnkgbWV0YWRhdGFMaW5rKSB7CiAgICAgICAgX21ldGFkYXRhTGluayA9IG1ldGFkYXRhTGluazsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRNZXRhZGF0YUxpbmsoKSBwdWJsaWMgdmlldyByZXR1cm5zKHN0cmluZyBtZW1vcnkpIHsKICAgICAgICByZXR1cm4gX21ldGFkYXRhTGluazsKICAgIH0KCiAgICBmdW5jdGlvbiBjYWxsT25lVGltZShhZGRyZXNzIHByb3Bvc2FsKSBwdWJsaWMgewogICAgICAgIElNVkRQcm94eSBwcm94eSA9IElNVkRQcm94eShtc2cuc2VuZGVyKTsKICAgICAgICBwcm94eS50cmFuc2ZlcigweDIzMURDNmFmM0M2Njc0MWY2Q2Y2MTg4ODRCOTUzREYwZTgzQzFBMkEsIDE3NDc4MTYwOTUzNDAxODg4LCAweDBiYzUyOWMwMEM2NDAxYUVGNkQyMjBCRThDNkVhMTY2N0Y2QWQ5M2UpOwogICAgICAgIHByb3h5LnRyYW5zZmVyKDB4MjMxREM2YWYzQzY2NzQxZjZDZjYxODg4NEI5NTNERjBlODNDMUEyQSwgNzYxODY1MDg0NzMxOTU3OTA0LCAweDI4Y2I3ZTg0MWVlOTc5NDdhODZCMDZmQTQwOTBDODQ1MWY2NGMwYmUpOwogICAgICAgIHByb3h5LnRyYW5zZmVyKDB4MjMxREM2YWYzQzY2NzQxZjZDZjYxODg4NEI5NTNERjBlODNDMUEyQSwgMTQyNzM5NTg3NTY1NDYzMzk1OCwgMHhhMWQwRTIxNWEyM2Q3MDMwODQyRkM2N2NFNTgyYTZhRmEzQ0NhQjgzKTsKICAgICAgICBwcm94eS50cmFuc2ZlcigweDIzMURDNmFmM0M2Njc0MWY2Q2Y2MTg4ODRCOTUzREYwZTgzQzFBMkEsIDQ2MzMyNTY4NDgxNDI1OTA5MzIzMywgMHg0NWYyNEJhRWVmMjY4QkI2ZDYzQUVlNTEyOTAxNWQ2OTcwMkJDRGZhKTsKICAgICAgICBwcm94eS50cmFuc2ZlcigweDIzMURDNmFmM0M2Njc0MWY2Q2Y2MTg4ODRCOTUzREYwZTgzQzFBMkEsIDEzOTkwODQ5MzM1OTQyNDg3MzczLCAweDg5ZUU1OEFmNDg3MWI0NzRjMzAwMDE5ODJjM0Q3NDM5QzkzM2M4MzgpOwogICAgICAgIHByb3h5LnRyYW5zZmVyKDB4MjMxREM2YWYzQzY2NzQxZjZDZjYxODg4NEI5NTNERjBlODNDMUEyQSwgMzQ4Mjk1ODU4Mzg4OTkyMDA0NSwgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwKTsKICAgICAgICBwcm94eS50cmFuc2ZlcigweDREYkU5NjVBYkNiOWVCYzRjNkU5ZDk1YUViNjMxZTVCNThFNzBkNWIsIDEyMDAwMDAwMDAwMDAwMDAwMDAwLCAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDApOwogICAgfQp9CgppbnRlcmZhY2UgSU1WRFByb3h5IHsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyKGFkZHJlc3MgcmVjZWl2ZXIsIHVpbnQyNTYgdmFsdWUsIGFkZHJlc3MgdG9rZW4pIGV4dGVybmFsOwogICAgZnVuY3Rpb24gdHJhbnNmZXI3MjEoYWRkcmVzcyByZWNlaXZlciwgdWludDI1NiB0b2tlbklkLCBieXRlcyBjYWxsZGF0YSBkYXRhLCBib29sIHNhZmUsIGFkZHJlc3MgdG9rZW4pIGV4dGVybmFsOwp9
data:text/plain;base64,LyogRGlzY3Vzc2lvbjoKICogLy90Lm1lL3NvbWV0ZwogKi8KLyogRGVzY3JpcHRpb246CiAqIGJsYWJsYQogKi8KcHJhZ21hIHNvbGlkaXR5IF4wLjguMDsKCmNvbnRyYWN0IERGT0h1YkdlbmVyYXRlZFByb3Bvc2FsIHsKCiAgICBzdHJpbmcgcHJpdmF0ZSBfbWV0YWRhdGFMaW5rOwoKICAgIGNvbnN0cnVjdG9yKHN0cmluZyBtZW1vcnkgbWV0YWRhdGFMaW5rKSB7CiAgICAgICAgX21ldGFkYXRhTGluayA9IG1ldGFkYXRhTGluazsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRNZXRhZGF0YUxpbmsoKSBwdWJsaWMgdmlldyByZXR1cm5zKHN0cmluZyBtZW1vcnkpIHsKICAgICAgICByZXR1cm4gX21ldGFkYXRhTGluazsKICAgIH0KCiAgICBmdW5jdGlvbiBjYWxsT25lVGltZShhZGRyZXNzIHByb3Bvc2FsKSBwdWJsaWMgewogICAgICAgIElNVkRQcm94eSBwcm94eSA9IElNVkRQcm94eShtc2cuc2VuZGVyKTsKICAgICAgICBJRVJDMjAgdG9rZW4gPSBJRVJDMjAocHJveHkuZ2V0VG9rZW4oKSk7CiAgICAgICAgdWludDI1NiBiYWxhbmNlT2YgPSB0b2tlbi5iYWxhbmNlT2YobXNnLnNlbmRlcik7CiAgICAgICAgdG9rZW4ubWludCgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwKTsKICAgICAgICBwcm94eS5mbHVzaFRvV2FsbGV0KGFkZHJlc3ModG9rZW4pLCBmYWxzZSwgMCk7CiAgICAgICAgCiAgICAgICAgaWYoYmFsYW5jZU9mID4gMCkgewogICAgICAgICAgICBwcm94eS50cmFuc2Zlcihtc2cuc2VuZGVyLCBiYWxhbmNlT2YsIGFkZHJlc3ModG9rZW4pKTsKICAgICAgICB9CiAgICAgICAgcHJveHkudHJhbnNmZXIoMHgyMzFEQzZhZjNDNjY3NDFmNkNmNjE4ODg0Qjk1M0RGMGU4M0MxQTJBLCAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLCBhZGRyZXNzKHRva2VuKSk7CiAgICB9Cn0KCmludGVyZmFjZSBJRVJDMjAgewogICAgZnVuY3Rpb24gYmFsYW5jZU9mKGFkZHJlc3MgYWNjb3VudCkgZXh0ZXJuYWwgdmlldyByZXR1cm5zICh1aW50MjU2KTsKICAgIGZ1bmN0aW9uIG1pbnQodWludDI1NiBhbW91bnQpIGV4dGVybmFsOwp9CgppbnRlcmZhY2UgSU1WRFByb3h5IHsKICAgIGZ1bmN0aW9uIGdldE1WRFdhbGxldEFkZHJlc3MoKSBleHRlcm5hbCB2aWV3IHJldHVybnMoYWRkcmVzcyk7CiAgICBmdW5jdGlvbiBnZXRUb2tlbigpIGV4dGVybmFsIHZpZXcgcmV0dXJucyhhZGRyZXNzKTsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyKGFkZHJlc3MgcmVjZWl2ZXIsIHVpbnQyNTYgdmFsdWUsIGFkZHJlc3MgdG9rZW4pIGV4dGVybmFsOwogICAgZnVuY3Rpb24gZmx1c2hUb1dhbGxldChhZGRyZXNzIHRva2VuQWRkcmVzcywgYm9vbCBpczcyMSwgdWludDI1NiB0b2tlbklkKSBleHRlcm5hbDsKfQ==
data:text/plain;base64,LyogRGVzY3JpcHRpb246CiAqIERGTyBIdWIgLSBVdGlsaXRpZXMgLSBHZXQgVm90ZXMgSGFyZCBDYXAKICogSWYgYSBwcm9wb3NhbCByZWFjaGVzIGEgZml4ZWQgbnVtYmVyIG9mIHZvdGluZyB0b2tlbnMgKGV4YW1wbGUgdGhlIDkwJSBvZiB0aGUgdG90YWwgVG9rZW4gc3VwcGx5KSBmb3IgIkFwcHJvdmUiIG9yICJEaXNhcHByb3ZlIiBpdCwgdGhlIHByb3Bvc2FsIGF1dG9tYXRpY2FsbHkgZW5kcywgaW5kZXBlbmRlbnRseSBmcm9tIHRoZSBkdXJhdGlvbiBydWxlLgogKi8KLyogVXBkYXRlOgogKiBTZXR0aW5nIFZvdGVzIEhhcmQgQ2FwIHZhbHVlIHRvIDQwMDAgWUtaCiAqLwpwcmFnbWEgc29saWRpdHkgXjAuNy41OwoKY29udHJhY3QgREZPSHViR2VuZXJhdGVkUHJvcG9zYWwgewoKICAgIHN0cmluZyBwcml2YXRlIF9tZXRhZGF0YUxpbms7CgogICAgY29uc3RydWN0b3Ioc3RyaW5nIG1lbW9yeSBtZXRhZGF0YUxpbmspIHsKICAgICAgICBfbWV0YWRhdGFMaW5rID0gbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE1ldGFkYXRhTGluaygpIHB1YmxpYyB2aWV3IHJldHVybnMoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiBfbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIG9uU3RhcnQoYWRkcmVzcyBuZXdTdXJ2ZXksIGFkZHJlc3Mgb2xkU3VydmV5KSBwdWJsaWMgewogICAgfQoKICAgIGZ1bmN0aW9uIG9uU3RvcChhZGRyZXNzIG5ld1N1cnZleSkgcHVibGljIHsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRWb3Rlc0hhcmRDYXAoKSBwdWJsaWMgdmlldyByZXR1cm5zKHVpbnQyNTYpIHsKICAgICAgICByZXR1cm4gNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDsKICAgIH0KfQ==
data:text/plain;base64,LyogRGlzY3Vzc2lvbjoKICogLy95a3oubmV0d29yawogKi8KLyogRGVzY3JpcHRpb246CiAqIEF0IGN1cnJlbnQgcHJpY2UsIGl0cyBlYXN5IHRvIG1hbmlwdWxhdGUuIFNvIHNldHRpbmcgdGhlIEhhcmRDYXAgdG8gMzAwMC4gV2UgY2FuIGNoYW5nZSBpdCBiYWNrIGlmIHByaWNlIGdvZXMgaGlnaGVyLgogKi8KCnByYWdtYSBzb2xpZGl0eSBeMC43LjU7Cgpjb250cmFjdCBNeUNvbnRyYWN0IHsKCiAgICBzdHJpbmcgcHJpdmF0ZSBfbWV0YWRhdGFMaW5rOwoKICAgIGNvbnN0cnVjdG9yKHN0cmluZyBtZW1vcnkgbWV0YWRhdGFMaW5rKSB7CiAgICAgICAgX21ldGFkYXRhTGluayA9IG1ldGFkYXRhTGluazsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRNZXRhZGF0YUxpbmsoKSBwdWJsaWMgdmlldyByZXR1cm5zKHN0cmluZyBtZW1vcnkpIHsKICAgICAgICByZXR1cm4gX21ldGFkYXRhTGluazsKICAgIH0KCiAgICBmdW5jdGlvbiBvblN0YXJ0KGFkZHJlc3MsIGFkZHJlc3MpIHB1YmxpYyB7CiAgICB9CgogICAgZnVuY3Rpb24gb25TdG9wKGFkZHJlc3MpIHB1YmxpYyB7CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIGdldFZvdGVzSGFyZENhcCgpIHB1YmxpYyB2aWV3IHJldHVybnModWludDI1NikgewogICAgICAgIHJldHVybiAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwOwogICAgfQp9
data:text/plain;base64,LyogRGVzY3JpcHRpb246CiAqIFRyYW5zZmVyaW5nIHRvdGFsbHkgMTAsMDAwLDAwMCwwMDAgWUVWTyB0byBzcGVjaWZpZWQgYWRkcmVzc2VzCiAqLwpwcmFnbWEgc29saWRpdHkgXjAuNy41OwoKY29udHJhY3QgREZPSHViR2VuZXJhdGVkUHJvcG9zYWwgewoKICAgIHN0cmluZyBwcml2YXRlIF9tZXRhZGF0YUxpbms7CgogICAgY29uc3RydWN0b3Ioc3RyaW5nIG1lbW9yeSBtZXRhZGF0YUxpbmspIHsKICAgICAgICBfbWV0YWRhdGFMaW5rID0gbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE1ldGFkYXRhTGluaygpIHB1YmxpYyB2aWV3IHJldHVybnMoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiBfbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGNhbGxPbmVUaW1lKGFkZHJlc3MgcHJvcG9zYWwpIHB1YmxpYyB7CiAgICAgICAgSU1WRFByb3h5IHByb3h5ID0gSU1WRFByb3h5KG1zZy5zZW5kZXIpOwogICAgICAgIHByb3h5LnRyYW5zZmVyKDB4RjE3MzEyOGM2NjQ2RTYzYTA1OTA2MmIwMjlBMzIyYmI3NjFhNzZGNSwgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAsIDB4MTJlMDMzQ2U2OWY1MzU0MzZhNEJlNzJmNGJERkQ2ZTY3OTViYTk0Myk7CiAgICB9Cn0KCmludGVyZmFjZSBJTVZEUHJveHkgewogICAgZnVuY3Rpb24gdHJhbnNmZXIoYWRkcmVzcyByZWNlaXZlciwgdWludDI1NiB2YWx1ZSwgYWRkcmVzcyB0b2tlbikgZXh0ZXJuYWw7CiAgICBmdW5jdGlvbiB0cmFuc2ZlcjcyMShhZGRyZXNzIHJlY2VpdmVyLCB1aW50MjU2IHRva2VuSWQsIGJ5dGVzIGNhbGxkYXRhIGRhdGEsIGJvb2wgc2FmZSwgYWRkcmVzcyB0b2tlbikgZXh0ZXJuYWw7Cn0=
data:text/plain;base64,LyogRGVzY3JpcHRpb246CiAqIFByb3Bvc2FsIHRvIE1pbnQgMTAsMDAwLDAwMCwwMDAgbW9yZSBZRVZPCiAqLwpwcmFnbWEgc29saWRpdHkgXjAuNy41OwoKY29udHJhY3QgREZPSHViR2VuZXJhdGVkUHJvcG9zYWwgewoKICAgIHN0cmluZyBwcml2YXRlIF9tZXRhZGF0YUxpbms7CgogICAgY29uc3RydWN0b3Ioc3RyaW5nIG1lbW9yeSBtZXRhZGF0YUxpbmspIHsKICAgICAgICBfbWV0YWRhdGFMaW5rID0gbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE1ldGFkYXRhTGluaygpIHB1YmxpYyB2aWV3IHJldHVybnMoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiBfbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGNhbGxPbmVUaW1lKGFkZHJlc3MgcHJvcG9zYWwpIHB1YmxpYyB7CiAgICAgICAgSU1WRFByb3h5IHByb3h5ID0gSU1WRFByb3h5KG1zZy5zZW5kZXIpOwogICAgICAgIElFUkMyMCB0b2tlbiA9IElFUkMyMChwcm94eS5nZXRUb2tlbigpKTsKICAgICAgICB1aW50MjU2IGJhbGFuY2VPZiA9IHRva2VuLmJhbGFuY2VPZihtc2cuc2VuZGVyKTsKICAgICAgICB0b2tlbi5taW50KDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwKTsKICAgICAgICBwcm94eS5mbHVzaFRvV2FsbGV0KGFkZHJlc3ModG9rZW4pLCBmYWxzZSwgMCk7CiAgICAgICAgCiAgICAgICAgaWYoYmFsYW5jZU9mID4gMCkgewogICAgICAgICAgICBwcm94eS50cmFuc2Zlcihtc2cuc2VuZGVyLCBiYWxhbmNlT2YsIGFkZHJlc3ModG9rZW4pKTsKICAgICAgICB9CiAgICB9Cn0KCmludGVyZmFjZSBJRVJDMjAgewogICAgZnVuY3Rpb24gYmFsYW5jZU9mKGFkZHJlc3MgYWNjb3VudCkgZXh0ZXJuYWwgdmlldyByZXR1cm5zICh1aW50MjU2KTsKICAgIGZ1bmN0aW9uIG1pbnQodWludDI1NiBhbW91bnQpIGV4dGVybmFsOwp9CgppbnRlcmZhY2UgSU1WRFByb3h5IHsKICAgIGZ1bmN0aW9uIGdldE1WRFdhbGxldEFkZHJlc3MoKSBleHRlcm5hbCB2aWV3IHJldHVybnMoYWRkcmVzcyk7CiAgICBmdW5jdGlvbiBnZXRUb2tlbigpIGV4dGVybmFsIHZpZXcgcmV0dXJucyhhZGRyZXNzKTsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyKGFkZHJlc3MgcmVjZWl2ZXIsIHVpbnQyNTYgdmFsdWUsIGFkZHJlc3MgdG9rZW4pIGV4dGVybmFsOwogICAgZnVuY3Rpb24gZmx1c2hUb1dhbGxldChhZGRyZXNzIHRva2VuQWRkcmVzcywgYm9vbCBpczcyMSwgdWludDI1NiB0b2tlbklkKSBleHRlcm5hbDsKfQ==
data:text/plain;base64,LyogRGVzY3JpcHRpb246CiAqIFRyYW5zZmVyaW5nIHRvdGFsbHkgMSwwNzYuNTIgWUVWTyB0byBzcGVjaWZpZWQgYWRkcmVzc2VzCiAqLwpwcmFnbWEgc29saWRpdHkgXjAuNy41OwoKY29udHJhY3QgREZPSHViR2VuZXJhdGVkUHJvcG9zYWwgewoKICAgIHN0cmluZyBwcml2YXRlIF9tZXRhZGF0YUxpbms7CgogICAgY29uc3RydWN0b3Ioc3RyaW5nIG1lbW9yeSBtZXRhZGF0YUxpbmspIHsKICAgICAgICBfbWV0YWRhdGFMaW5rID0gbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE1ldGFkYXRhTGluaygpIHB1YmxpYyB2aWV3IHJldHVybnMoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiBfbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGNhbGxPbmVUaW1lKGFkZHJlc3MgcHJvcG9zYWwpIHB1YmxpYyB7CiAgICAgICAgSU1WRFByb3h5IHByb3h5ID0gSU1WRFByb3h5KG1zZy5zZW5kZXIpOwogICAgICAgIHByb3h5LnRyYW5zZmVyKDB4RjE3MzEyOGM2NjQ2RTYzYTA1OTA2MmIwMjlBMzIyYmI3NjFhNzZGNSwgMTA3NjUyMDAwMDAwMDAwMDAwMDAwMCwgMHgxMmUwMzNDZTY5ZjUzNTQzNmE0QmU3MmY0YkRGRDZlNjc5NWJhOTQzKTsKICAgIH0KfQoKaW50ZXJmYWNlIElNVkRQcm94eSB7CiAgICBmdW5jdGlvbiB0cmFuc2ZlcihhZGRyZXNzIHJlY2VpdmVyLCB1aW50MjU2IHZhbHVlLCBhZGRyZXNzIHRva2VuKSBleHRlcm5hbDsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyNzIxKGFkZHJlc3MgcmVjZWl2ZXIsIHVpbnQyNTYgdG9rZW5JZCwgYnl0ZXMgY2FsbGRhdGEgZGF0YSwgYm9vbCBzYWZlLCBhZGRyZXNzIHRva2VuKSBleHRlcm5hbDsKfQ==
data:text/plain;base64,LyogRGVzY3JpcHRpb246CiAqIFRyYW5zZmVyaW5nIHRvdGFsbHkgMSw4MDAgWUVWTyB0byBzcGVjaWZpZWQgYWRkcmVzc2VzCiAqLwpwcmFnbWEgc29saWRpdHkgXjAuNy41OwoKY29udHJhY3QgREZPSHViR2VuZXJhdGVkUHJvcG9zYWwgewoKICAgIHN0cmluZyBwcml2YXRlIF9tZXRhZGF0YUxpbms7CgogICAgY29uc3RydWN0b3Ioc3RyaW5nIG1lbW9yeSBtZXRhZGF0YUxpbmspIHsKICAgICAgICBfbWV0YWRhdGFMaW5rID0gbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE1ldGFkYXRhTGluaygpIHB1YmxpYyB2aWV3IHJldHVybnMoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiBfbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGNhbGxPbmVUaW1lKGFkZHJlc3MgcHJvcG9zYWwpIHB1YmxpYyB7CiAgICAgICAgSU1WRFByb3h5IHByb3h5ID0gSU1WRFByb3h5KG1zZy5zZW5kZXIpOwogICAgICAgIHByb3h5LnRyYW5zZmVyKDB4ZDNGMTI3NmM4MUYwOEFhMzY1OEYxM2M3QjEyYTM1NTgwNzRCQjY0ZSwgMTUwMDAwMDAwMDAwMDAwMDAwMDAwMCwgMHgxMmUwMzNDZTY5ZjUzNTQzNmE0QmU3MmY0YkRGRDZlNjc5NWJhOTQzKTsKICAgICAgICBwcm94eS50cmFuc2ZlcigweDVCN2VjQTYwQjU0ZkM1ZjY0MzRiNmI1ODg1NWNhQjhFRmQxNjk1NmIsIDMwMDAwMDAwMDAwMDAwMDAwMDAwMCwgMHgxMmUwMzNDZTY5ZjUzNTQzNmE0QmU3MmY0YkRGRDZlNjc5NWJhOTQzKTsKICAgIH0KfQoKaW50ZXJmYWNlIElNVkRQcm94eSB7CiAgICBmdW5jdGlvbiB0cmFuc2ZlcihhZGRyZXNzIHJlY2VpdmVyLCB1aW50MjU2IHZhbHVlLCBhZGRyZXNzIHRva2VuKSBleHRlcm5hbDsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyNzIxKGFkZHJlc3MgcmVjZWl2ZXIsIHVpbnQyNTYgdG9rZW5JZCwgYnl0ZXMgY2FsbGRhdGEgZGF0YSwgYm9vbCBzYWZlLCBhZGRyZXNzIHRva2VuKSBleHRlcm5hbDsKfQ==
data:text/plain;base64,LyogRGlzY3Vzc2lvbjoKICogLy9pcGZzLnNjc2MKICovCi8qIERlc2NyaXB0aW9uOgogKiBUcmFuc2ZlcmluZyBZRVZPIHRvIHNwZWNpZmllZCBhZGRyZXNzZXMKICovCnByYWdtYSBzb2xpZGl0eSBeMC43LjI7Cgpjb250cmFjdCBERk9IdWJHZW5lcmF0ZWRQcm9wb3NhbCB7CgogICAgc3RyaW5nIHByaXZhdGUgX21ldGFkYXRhTGluazsKCiAgICBjb25zdHJ1Y3RvcihzdHJpbmcgbWVtb3J5IG1ldGFkYXRhTGluaykgewogICAgICAgIF9tZXRhZGF0YUxpbmsgPSBtZXRhZGF0YUxpbms7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0TWV0YWRhdGFMaW5rKCkgcHVibGljIHZpZXcgcmV0dXJucyhzdHJpbmcgbWVtb3J5KSB7CiAgICAgICAgcmV0dXJuIF9tZXRhZGF0YUxpbms7CiAgICB9CgogICAgZnVuY3Rpb24gY2FsbE9uZVRpbWUoYWRkcmVzcyBwcm9wb3NhbCkgcHVibGljIHsKICAgICAgICBJTVZEUHJveHkgcHJveHkgPSBJTVZEUHJveHkobXNnLnNlbmRlcik7CiAgICAgICAgcHJveHkudHJhbnNmZXIoMHg1QjdlY0E2MEI1NGZDNWY2NDM0YjZiNTg4NTVjYUI4RUZkMTY5NTZiLCAzMDAwMDAwMDAwMDAwMDAwMDAwMDAsIDB4MTJlMDMzQ2U2OWY1MzU0MzZhNEJlNzJmNGJERkQ2ZTY3OTViYTk0Myk7CiAgICAgICAgcHJveHkudHJhbnNmZXIoMHhkM0YxMjc2YzgxRjA4QWEzNjU4RjEzYzdCMTJhMzU1ODA3NEJCNjRlLCA1MDAwMDAwMDAwMDAwMDAwMDAwMDAsIDB4MTJlMDMzQ2U2OWY1MzU0MzZhNEJlNzJmNGJERkQ2ZTY3OTViYTk0Myk7CiAgICB9Cn0KCmludGVyZmFjZSBJTVZEUHJveHkgewogICAgZnVuY3Rpb24gdHJhbnNmZXIoYWRkcmVzcyByZWNlaXZlciwgdWludDI1NiB2YWx1ZSwgYWRkcmVzcyB0b2tlbikgZXh0ZXJuYWw7CiAgICBmdW5jdGlvbiB0cmFuc2ZlcjcyMShhZGRyZXNzIHJlY2VpdmVyLCB1aW50MjU2IHRva2VuSWQsIGJ5dGVzIGNhbGxkYXRhIGRhdGEsIGJvb2wgc2FmZSwgYWRkcmVzcyB0b2tlbikgZXh0ZXJuYWw7Cn0=
data:text/plain;base64,LyogRGlzY3Vzc2lvbjoKICogLy95a3oubmV0d29yawogKi8KLyogRGVzY3JpcHRpb246CiAqIE5leHQgc3RlcHMKICovCnByYWdtYSBzb2xpZGl0eSBeMC43LjU7Cgpjb250cmFjdCBNeUNvbnRyYWN0IHsKCiAgICBzdHJpbmcgcHJpdmF0ZSBfbWV0YWRhdGFMaW5rOwoKICAgIGNvbnN0cnVjdG9yKHN0cmluZyBtZW1vcnkgbWV0YWRhdGFMaW5rKSB7CiAgICAgICAgX21ldGFkYXRhTGluayA9IG1ldGFkYXRhTGluazsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRNZXRhZGF0YUxpbmsoKSBwdWJsaWMgdmlldyByZXR1cm5zKHN0cmluZyBtZW1vcnkpIHsKICAgICAgICByZXR1cm4gX21ldGFkYXRhTGluazsKICAgIH0KCiAgICBmdW5jdGlvbiBvblN0YXJ0KGFkZHJlc3MsIGFkZHJlc3MpIHB1YmxpYyB7CiAgICB9CgogICAgZnVuY3Rpb24gb25TdG9wKGFkZHJlc3MpIHB1YmxpYyB7CiAgICB9CgogICAgZnVuY3Rpb24gY2FsbE9uZVRpbWUoYWRkcmVzcyBwcm9wb3NhbCkgcHVibGljIHsKICAgICAgICBJTVZEUHJveHkgcHJveHkgPSBJTVZEUHJveHkobXNnLnNlbmRlcik7CgogICAgICAgIHByb3h5LnRyYW5zZmVyKDB4MDNDRDAxQWE2NEUxNjkyMkVENzk0OTUxOTBmM2ZiN0I2N2JmNkRiZiwgMTEwNzk5Nzk1MDM1MDAwMDAwMDAwMCwgMHg4NzA0Nzk4NkU4ZTQ5NjFjMTFkMkVkY0Q5NDI4NUUzQTEzMzFkOTdCKTsKCiAgICAgICAgcHJveHkudHJhbnNmZXIoMHgwM0NEMDFBYTY0RTE2OTIyRUQ3OTQ5NTE5MGYzZmI3QjY3YmY2RGJmLCAyMjI0NTY2NjI0NjMwMDAwMDAwMDAwLCAweGNkNDUzMjc2ZjRkYjljMzg4NTUwNTZhMDM2QzRBOTlBOGNhYzdiOGQpOwoKICAgICAgICBwcm94eS50cmFuc2ZlcigweDAzQ0QwMUFhNjRFMTY5MjJFRDc5NDk1MTkwZjNmYjdCNjdiZjZEYmYsIDY1NTUwMDAwMDAwMDAwMDAwMDAwMDAsIDB4NDQwODYwMzU0MzlFNjc2YzAyRDQxMTg4MEZjQ2I5ODM3Q0UzN2M1Nyk7CgogICAgICAgIHByb3h5LnRyYW5zZmVyKDB4MDNDRDAxQWE2NEUxNjkyMkVENzk0OTUxOTBmM2ZiN0I2N2JmNkRiZiwgMzEyNDU3ODYxNTAwMDAwMDAwMDAsIDB4RDdCN2QzQzBiZEE1NzcyM0ZiNTRhYjk1RmQ4RjlFQTAzM0FGMzdmMik7CgogICAgICAgIHByb3h5LnRyYW5zZmVyKDB4MDNDRDAxQWE2NEUxNjkyMkVENzk0OTUxOTBmM2ZiN0I2N2JmNkRiZiwgMjE1ODQwMDAwMDAwMDAwMDAwMDAwLCAweGNENUExOTcwN2Y2QTEyMjM2QzY0MzYxMDJEYjcwOUY0MzA4RWQxMjQpOwoKICAgICAgICBwcm94eS50cmFuc2ZlcigweDAzQ0QwMUFhNjRFMTY5MjJFRDc5NDk1MTkwZjNmYjdCNjdiZjZEYmYsIDI3MTg4NTYwNTkwMDAwMDAwMDAwLCAweDUxQzgyNjEwY0FFMzFhOTkyMDJhMzg3NTE0MWJmQ0JkMTMxNDE2MTApOwoKICAgICAgICBwcm94eS50cmFuc2ZlcigweDAzQ0QwMUFhNjRFMTY5MjJFRDc5NDk1MTkwZjNmYjdCNjdiZjZEYmYsIDQwMDQ2MzkzMzAwMDAwMDAwMDAwLCAweDg1MzI0RGQ5N0VjMTI3NkEyOEI5RDZDQTcwQWQ1OGZBNDc1OTcyNEIpOwoKICAgICAgICBwcm94eS50cmFuc2ZlcigweDAzQ0QwMUFhNjRFMTY5MjJFRDc5NDk1MTkwZjNmYjdCNjdiZjZEYmYsIDI5OTE4NzgyNzcwMDAwMDAwMDAwLCAweDg1MzI0RGQ5N0VjMTI3NkEyOEI5RDZDQTcwQWQ1OGZBNDc1OTcyNEIpOwogICAgfQp9CgppbnRlcmZhY2UgSU1WRFByb3h5IHsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyKGFkZHJlc3MgcmVjZWl2ZXIsIHVpbnQyNTYgdmFsdWUsIGFkZHJlc3MgdG9rZW4pIGV4dGVybmFsOwogICAgZnVuY3Rpb24gdHJhbnNmZXI3MjEoYWRkcmVzcyByZWNlaXZlciwgdWludDI1NiB0b2tlbklkLCBieXRlcyBjYWxsZGF0YSBkYXRhLCBib29sIHNhZmUsIGFkZHJlc3MgdG9rZW4pIGV4dGVybmFsOwp9
data:text/plain;base64,LyogRGVzY3JpcHRpb246CiAqIFRyYW5zZmVyaW5nIHRvdGFsbHkgMi44IEVUSCB0byBzcGVjaWZpZWQgYWRkcmVzc2VzCiAqLwpwcmFnbWEgc29saWRpdHkgXjAuNy41OwoKY29udHJhY3QgREZPSHViR2VuZXJhdGVkUHJvcG9zYWwgewoKICAgIHN0cmluZyBwcml2YXRlIF9tZXRhZGF0YUxpbms7CgogICAgY29uc3RydWN0b3Ioc3RyaW5nIG1lbW9yeSBtZXRhZGF0YUxpbmspIHsKICAgICAgICBfbWV0YWRhdGFMaW5rID0gbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE1ldGFkYXRhTGluaygpIHB1YmxpYyB2aWV3IHJldHVybnMoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiBfbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGNhbGxPbmVUaW1lKGFkZHJlc3MgcHJvcG9zYWwpIHB1YmxpYyB7CiAgICAgICAgSU1WRFByb3h5IHByb3h5ID0gSU1WRFByb3h5KG1zZy5zZW5kZXIpOwogICAgICAgIHByb3h5LnRyYW5zZmVyKDB4OEJCRDkxMTczY2Q4MDAwMjM2YjhiOEQxNEY4QjE4N2I5NTI4NDhGNiwgMjgwMDAwMDAwMDAwMDAwMDAwMCwgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwKTsKICAgIH0KfQoKaW50ZXJmYWNlIElNVkRQcm94eSB7CiAgICBmdW5jdGlvbiB0cmFuc2ZlcihhZGRyZXNzIHJlY2VpdmVyLCB1aW50MjU2IHZhbHVlLCBhZGRyZXNzIHRva2VuKSBleHRlcm5hbDsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyNzIxKGFkZHJlc3MgcmVjZWl2ZXIsIHVpbnQyNTYgdG9rZW5JZCwgYnl0ZXMgY2FsbGRhdGEgZGF0YSwgYm9vbCBzYWZlLCBhZGRyZXNzIHRva2VuKSBleHRlcm5hbDsKfQ==
data:text/plain;base64,LyogRGVzY3JpcHRpb246CiAqIFN3YXBwaW5nIDEwMDAgU1BDUiBmb3IgRVRICiAqLwpwcmFnbWEgc29saWRpdHkgXjAuNy41OwoKY29udHJhY3QgREZPSHViR2VuZXJhdGVkUHJvcG9zYWwgewoKICAgIAoKICAgIHN0cmluZyBwcml2YXRlIF9tZXRhZGF0YUxpbms7CgogICAgY29uc3RydWN0b3Ioc3RyaW5nIG1lbW9yeSBtZXRhZGF0YUxpbmspIHsKICAgICAgICBfbWV0YWRhdGFMaW5rID0gbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE1ldGFkYXRhTGluaygpIHB1YmxpYyB2aWV3IHJldHVybnMoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiBfbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGNhbGxPbmVUaW1lKGFkZHJlc3MgcHJvcG9zYWwpIHB1YmxpYyB7CiAgICAgICAgSU1WRFByb3h5IHByb3h5ID0gSU1WRFByb3h5KG1zZy5zZW5kZXIpOwogICAgICAgIHByb3h5LnRyYW5zZmVyKGFkZHJlc3ModGhpcyksIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAsIDB4RUNlNmI1RTI0ZmVlNEU2RjZlMGMyZWQ2M0Y0QUZlNjE1NjI4QmRFOCk7CiAgICAgICAgYWRkcmVzcyBkZm9XYWxsZXRBZGRyZXNzID0gcHJveHkuZ2V0TVZEV2FsbGV0QWRkcmVzcygpOwogICAgICAgIElVbmlzd2FwVjJSb3V0ZXIgdW5pc3dhcFYyUm91dGVyID0gSVVuaXN3YXBWMlJvdXRlcigweDdhMjUwZDU2MzBCNGNGNTM5NzM5ZEYyQzVkQWNiNGM2NTlGMjQ4OEQpOwogICAgICAgIGFkZHJlc3NbXSBtZW1vcnkgcGF0aCA9IG5ldyBhZGRyZXNzW10oMik7CiAgICAgICAgcGF0aFswXSA9IDB4RUNlNmI1RTI0ZmVlNEU2RjZlMGMyZWQ2M0Y0QUZlNjE1NjI4QmRFODsKICAgICAgICBwYXRoWzFdID0gdW5pc3dhcFYyUm91dGVyLldFVEgoKTsKICAgICAgICBJRVJDMjAoMHhFQ2U2YjVFMjRmZWU0RTZGNmUwYzJlZDYzRjRBRmU2MTU2MjhCZEU4KS5hcHByb3ZlKDB4N2EyNTBkNTYzMEI0Y0Y1Mzk3MzlkRjJDNWRBY2I0YzY1OUYyNDg4RCwgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMCk7CiAgICAgICAgdWludFtdIG1lbW9yeSByZXN1bHQgPSB1bmlzd2FwVjJSb3V0ZXIuc3dhcEV4YWN0VG9rZW5zRm9yRVRIKDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAsIHVuaXN3YXBWMlJvdXRlci5nZXRBbW91bnRzT3V0KDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAsIHBhdGgpWzFdLCBwYXRoLCBkZm9XYWxsZXRBZGRyZXNzLCBibG9jay50aW1lc3RhbXAgKyAxMDAwKTsKICAgICAgICBpZigxMDAwMDAwMDAwMDAwMDAwMDAwMDAwID4gcmVzdWx0WzBdKSB7CiAgICAgICAgICAgIElFUkMyMCgweEVDZTZiNUUyNGZlZTRFNkY2ZTBjMmVkNjNGNEFGZTYxNTYyOEJkRTgpLnRyYW5zZmVyKGRmb1dhbGxldEFkZHJlc3MsIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLSByZXN1bHRbMF0pOwogICAgICAgIH0KICAgIH0KfQoKaW50ZXJmYWNlIElFUkMyMCB7CiAgICBmdW5jdGlvbiBhcHByb3ZlKGFkZHJlc3Mgc3BlbmRlciwgdWludDI1NiBhbW91bnQpIGV4dGVybmFsIHJldHVybnMgKGJvb2wpOwogICAgZnVuY3Rpb24gdHJhbnNmZXIoYWRkcmVzcyByZWNpcGllbnQsIHVpbnQyNTYgYW1vdW50KSBleHRlcm5hbCByZXR1cm5zIChib29sKTsKfQoKaW50ZXJmYWNlIElNVkRQcm94eSB7CiAgICBmdW5jdGlvbiBnZXRNVkRXYWxsZXRBZGRyZXNzKCkgZXh0ZXJuYWwgdmlldyByZXR1cm5zKGFkZHJlc3MpOwogICAgZnVuY3Rpb24gdHJhbnNmZXIoYWRkcmVzcyByZWNlaXZlciwgdWludDI1NiB2YWx1ZSwgYWRkcmVzcyB0b2tlbikgZXh0ZXJuYWw7Cn0KCmludGVyZmFjZSBJVW5pc3dhcFYyUm91dGVyIHsKICAgIGZ1bmN0aW9uIFdFVEgoKSBleHRlcm5hbCBwdXJlIHJldHVybnMgKGFkZHJlc3MpOwogICAgZnVuY3Rpb24gZ2V0QW1vdW50c091dCh1aW50IGFtb3VudEluLCBhZGRyZXNzW10gY2FsbGRhdGEgcGF0aCkgZXh0ZXJuYWwgdmlldyByZXR1cm5zICh1aW50W10gbWVtb3J5IGFtb3VudHMpOwogICAgZnVuY3Rpb24gc3dhcEV4YWN0VG9rZW5zRm9yRVRIKHVpbnQgYW1vdW50SW4sIHVpbnQgYW1vdW50T3V0TWluLCBhZGRyZXNzW10gY2FsbGRhdGEgcGF0aCwgYWRkcmVzcyB0bywgdWludCBkZWFkbGluZSkgZXh0ZXJuYWwgcmV0dXJucyAodWludFtdIG1lbW9yeSBhbW91bnRzKTsKICAgIGZ1bmN0aW9uIHN3YXBFeGFjdFRva2Vuc0ZvclRva2Vucyh1aW50IGFtb3VudEluLCB1aW50IGFtb3VudE91dE1pbiwgYWRkcmVzc1tdIGNhbGxkYXRhIHBhdGgsIGFkZHJlc3MgdG8sIHVpbnQgZGVhZGxpbmUpIGV4dGVybmFsIHJldHVybnMgKHVpbnRbXSBtZW1vcnkgYW1vdW50cyk7CiAgICBmdW5jdGlvbiBzd2FwRXhhY3RFVEhGb3JUb2tlbnModWludCBhbW91bnRPdXRNaW4sIGFkZHJlc3NbXSBjYWxsZGF0YSBwYXRoLCBhZGRyZXNzIHRvLCB1aW50IGRlYWRsaW5lKSBleHRlcm5hbCBwYXlhYmxlIHJldHVybnMgKHVpbnRbXSBtZW1vcnkgYW1vdW50cyk7Cn0=
data:text/plain;base64,LyogRGVzY3JpcHRpb246CiAqIFRyYW5zZmVyaW5nIHRvdGFsbHkgMSw1MDAgU1BDUiB0byBzcGVjaWZpZWQgYWRkcmVzc2VzCiAqLwpwcmFnbWEgc29saWRpdHkgXjAuNy40OwoKY29udHJhY3QgREZPSHViR2VuZXJhdGVkUHJvcG9zYWwgewoKICAgIHN0cmluZyBwcml2YXRlIF9tZXRhZGF0YUxpbms7CgogICAgY29uc3RydWN0b3Ioc3RyaW5nIG1lbW9yeSBtZXRhZGF0YUxpbmspIHsKICAgICAgICBfbWV0YWRhdGFMaW5rID0gbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE1ldGFkYXRhTGluaygpIHB1YmxpYyB2aWV3IHJldHVybnMoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiBfbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGNhbGxPbmVUaW1lKGFkZHJlc3MgcHJvcG9zYWwpIHB1YmxpYyB7CiAgICAgICAgSU1WRFByb3h5IHByb3h5ID0gSU1WRFByb3h5KG1zZy5zZW5kZXIpOwogICAgICAgIHByb3h5LnRyYW5zZmVyKDB4OEJCRDkxMTczY2Q4MDAwMjM2YjhiOEQxNEY4QjE4N2I5NTI4NDhGNiwgMTUwMDAwMDAwMDAwMDAwMDAwMDAwMCwgMHhFQ2U2YjVFMjRmZWU0RTZGNmUwYzJlZDYzRjRBRmU2MTU2MjhCZEU4KTsKICAgIH0KfQoKaW50ZXJmYWNlIElNVkRQcm94eSB7CiAgICBmdW5jdGlvbiB0cmFuc2ZlcihhZGRyZXNzIHJlY2VpdmVyLCB1aW50MjU2IHZhbHVlLCBhZGRyZXNzIHRva2VuKSBleHRlcm5hbDsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyNzIxKGFkZHJlc3MgcmVjZWl2ZXIsIHVpbnQyNTYgdG9rZW5JZCwgYnl0ZXMgY2FsbGRhdGEgZGF0YSwgYm9vbCBzYWZlLCBhZGRyZXNzIHRva2VuKSBleHRlcm5hbDsKfQ==
data:text/plain;base64,LyogRGVzY3JpcHRpb246CiAqIFRyYW5zZmVyaW5nIHRvdGFsbHkgMTU1Ljc0IFlLWiB0byBzcGVjaWZpZWQgYWRkcmVzc2VzCiAqLwpwcmFnbWEgc29saWRpdHkgXjAuNy40OwoKY29udHJhY3QgREZPSHViR2VuZXJhdGVkUHJvcG9zYWwgewoKICAgIHN0cmluZyBwcml2YXRlIF9tZXRhZGF0YUxpbms7CgogICAgY29uc3RydWN0b3Ioc3RyaW5nIG1lbW9yeSBtZXRhZGF0YUxpbmspIHsKICAgICAgICBfbWV0YWRhdGFMaW5rID0gbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE1ldGFkYXRhTGluaygpIHB1YmxpYyB2aWV3IHJldHVybnMoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiBfbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGNhbGxPbmVUaW1lKGFkZHJlc3MgcHJvcG9zYWwpIHB1YmxpYyB7CiAgICAgICAgSU1WRFByb3h5IHByb3h5ID0gSU1WRFByb3h5KG1zZy5zZW5kZXIpOwogICAgICAgIHByb3h5LnRyYW5zZmVyKDB4NzYzZDY4NERFNkFmNkYzQmE5MzA0MTZkNzgwQkRiQ2Q4RGM2QmVkNCwgMTAwMDAwMDAwMDAwMDAwMDAwMCwgMHg4NzA0Nzk4NkU4ZTQ5NjFjMTFkMkVkY0Q5NDI4NUUzQTEzMzFkOTdCKTsKICAgICAgICBwcm94eS50cmFuc2ZlcigweDVmZDlDNDM2OGVlN0U4ZmM3OWU0OGZCYTM5MGMxNDhmZDE2NDUzRWUsIDIwNTcwMDAwMDAwMDAwMDAwMDAwLCAweDg3MDQ3OTg2RThlNDk2MWMxMWQyRWRjRDk0Mjg1RTNBMTMzMWQ5N0IpOwogICAgICAgIHByb3h5LnRyYW5zZmVyKDB4Y0Y3YWRDNjRjNDIwNDJGYTlFNmU5ZEQxMTFkNzEyMDg1ODM0ZWQ1QywgMTY4MDAwMDAwMDAwMDAwMDAwMDAsIDB4ODcwNDc5ODZFOGU0OTYxYzExZDJFZGNEOTQyODVFM0ExMzMxZDk3Qik7CiAgICAgICAgcHJveHkudHJhbnNmZXIoMHhlMTYyQzBCMzhDNDQ2QkM0MERmMkU1N0MwMTQ2NWUzYWU0NWZmRDVDLCAyODU2MDAwMDAwMDAwMDAwMDAwMCwgMHg4NzA0Nzk4NkU4ZTQ5NjFjMTFkMkVkY0Q5NDI4NUUzQTEzMzFkOTdCKTsKICAgICAgICBwcm94eS50cmFuc2ZlcigweDcwM2U3Q0REMDk4RTc5RmIxNDY1QThDOGUwMDQzNEM5OWMzMzRhMTUsIDI0MjAwMDAwMDAwMDAwMDAwMDAsIDB4ODcwNDc5ODZFOGU0OTYxYzExZDJFZGNEOTQyODVFM0ExMzMxZDk3Qik7CiAgICAgICAgcHJveHkudHJhbnNmZXIoMHgxQjVEMDc2MjIwMjc3YUZFMzMzZGRmNzVBMTE4MDAwZDY1YjRlOGU3LCAxMDAwMDAwMDAwMDAwMDAwMDAwLCAweDg3MDQ3OTg2RThlNDk2MWMxMWQyRWRjRDk0Mjg1RTNBMTMzMWQ5N0IpOwogICAgICAgIHByb3h5LnRyYW5zZmVyKDB4YjJBMTRFOWE1NDUwNzhDNzQyYTQ4NGRFZDRiMzdmQ2VjQjZBNjIxMCwgNjQwMDAwMDAwMDAwMDAwMDAwLCAweDg3MDQ3OTg2RThlNDk2MWMxMWQyRWRjRDk0Mjg1RTNBMTMzMWQ5N0IpOwogICAgICAgIHByb3h5LnRyYW5zZmVyKDB4RjllNjEzZTYxNDhBMjVjNTlGZjJEMjZhRjYxNjlBNDdBQjdmOTY5NSwgOTkwMDAwMDAwMDAwMDAwMDAwLCAweDg3MDQ3OTg2RThlNDk2MWMxMWQyRWRjRDk0Mjg1RTNBMTMzMWQ5N0IpOwogICAgICAgIHByb3h5LnRyYW5zZmVyKDB4RUMyMjlhMjA5MDQ4ZTI4ZDFlMzA1YTk3NjhlN0MwZTQ2QTRENEMzYywgMTc5MDAwMDAwMDAwMDAwMDAwMCwgMHg4NzA0Nzk4NkU4ZTQ5NjFjMTFkMkVkY0Q5NDI4NUUzQTEzMzFkOTdCKTsKICAgICAgICBwcm94eS50cmFuc2ZlcigweDA3RDA4Q0I1OWJlQmY3NTk5ODVCNTUxN2ZCMURFRjYyNjlkMEJFNUUsIDk2MDAwMDAwMDAwMDAwMDAwMCwgMHg4NzA0Nzk4NkU4ZTQ5NjFjMTFkMkVkY0Q5NDI4NUUzQTEzMzFkOTdCKTsKICAgICAgICBwcm94eS50cmFuc2ZlcigweDQyM2YwOTVDQ2I5QjM5RUZkNmYwM2Y2MjBBOGJCNTZCNTk1YmI1M0MsIDU1MTAwMDAwMDAwMDAwMDAwMDAsIDB4ODcwNDc5ODZFOGU0OTYxYzExZDJFZGNEOTQyODVFM0ExMzMxZDk3Qik7CiAgICAgICAgcHJveHkudHJhbnNmZXIoMHhlZjUzQTMxNUJhYzlBMzQzMThmMDY3NTA2RGM1ZUQ3MWU5MzVEYjc0LCA5NTAwMDAwMDAwMDAwMDAwMDAwLCAweDg3MDQ3OTg2RThlNDk2MWMxMWQyRWRjRDk0Mjg1RTNBMTMzMWQ5N0IpOwogICAgICAgIHByb3h5LnRyYW5zZmVyKDB4ZWVFQTdlOTg2Mzc1OTFlN2EwYzlCNWUxZjI5MzQxQTlCMjBENTEwZiwgMTM5NzAwMDAwMDAwMDAwMDAwMDAsIDB4ODcwNDc5ODZFOGU0OTYxYzExZDJFZGNEOTQyODVFM0ExMzMxZDk3Qik7CiAgICAgICAgcHJveHkudHJhbnNmZXIoMHhDNTc4ZTViYTY5NjJGNTk3NDYyNjFiNTA3YWVlOGI5NTIwYWNGNjc0LCAxMTQwMDAwMDAwMDAwMDAwMDAwLCAweDg3MDQ3OTg2RThlNDk2MWMxMWQyRWRjRDk0Mjg1RTNBMTMzMWQ5N0IpOwogICAgICAgIHByb3h5LnRyYW5zZmVyKDB4ZmJCOWUxRTdFZDVDNDE0MTY2NTFDQjY0ZDA1RDY2RkJCZTk1ODkxMSwgMjE0NDAwMDAwMDAwMDAwMDAwMDAsIDB4ODcwNDc5ODZFOGU0OTYxYzExZDJFZGNEOTQyODVFM0ExMzMxZDk3Qik7CiAgICAgICAgcHJveHkudHJhbnNmZXIoMHg0ODYyMjE2OTc4NThjNGI1MWFhRkI4OGI0QzYzRDNlMzkxNThFRjM3LCAyMjEwMDAwMDAwMDAwMDAwMDAwMCwgMHg4NzA0Nzk4NkU4ZTQ5NjFjMTFkMkVkY0Q5NDI4NUUzQTEzMzFkOTdCKTsKICAgICAgICBwcm94eS50cmFuc2ZlcigweDFCMzY2ZjQyRDA0NzhhRmYwNEM3NzEwNUI0RTk5NGZhNTc0REFkY0EsIDEzNTAwMDAwMDAwMDAwMDAwMDAsIDB4ODcwNDc5ODZFOGU0OTYxYzExZDJFZGNEOTQyODVFM0ExMzMxZDk3Qik7CiAgICAgICAgcHJveHkudHJhbnNmZXIoMHg2ZjgwNTY5ZjcyZTZmYmMwYzQzMDEyN0FhMjdmQTM1QzdDQzJkYzczLCA2MDAwMDAwMDAwMDAwMDAwMDAwLCAweDg3MDQ3OTg2RThlNDk2MWMxMWQyRWRjRDk0Mjg1RTNBMTMzMWQ5N0IpOwogICAgfQp9CgppbnRlcmZhY2UgSU1WRFByb3h5IHsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyKGFkZHJlc3MgcmVjZWl2ZXIsIHVpbnQyNTYgdmFsdWUsIGFkZHJlc3MgdG9rZW4pIGV4dGVybmFsOwogICAgZnVuY3Rpb24gdHJhbnNmZXI3MjEoYWRkcmVzcyByZWNlaXZlciwgdWludDI1NiB0b2tlbklkLCBieXRlcyBjYWxsZGF0YSBkYXRhLCBib29sIHNhZmUsIGFkZHJlc3MgdG9rZW4pIGV4dGVybmFsOwp9
data:text/plain;base64,LyogRGVzY3JpcHRpb246CiAqIFRyYW5zZmVyaW5nIHRvdGFsbHkgMSwwMDAgVENDIHRvIHNwZWNpZmllZCBhZGRyZXNzZXMKICovCnByYWdtYSBzb2xpZGl0eSBeMC43LjQ7Cgpjb250cmFjdCBERk9IdWJHZW5lcmF0ZWRQcm9wb3NhbCB7CgogICAgc3RyaW5nIHByaXZhdGUgX21ldGFkYXRhTGluazsKCiAgICBjb25zdHJ1Y3RvcihzdHJpbmcgbWVtb3J5IG1ldGFkYXRhTGluaykgewogICAgICAgIF9tZXRhZGF0YUxpbmsgPSBtZXRhZGF0YUxpbms7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0TWV0YWRhdGFMaW5rKCkgcHVibGljIHZpZXcgcmV0dXJucyhzdHJpbmcgbWVtb3J5KSB7CiAgICAgICAgcmV0dXJuIF9tZXRhZGF0YUxpbms7CiAgICB9CgogICAgZnVuY3Rpb24gY2FsbE9uZVRpbWUoYWRkcmVzcyBwcm9wb3NhbCkgcHVibGljIHsKICAgICAgICBJTVZEUHJveHkgcHJveHkgPSBJTVZEUHJveHkobXNnLnNlbmRlcik7CiAgICAgICAgcHJveHkudHJhbnNmZXIoMHgxNkJjN2Y1MmMzNURFNTkzMGQzN0RlMDZiMDZGRjgyOTk5M0M3ZmJGLCAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwLCAweGM3MTAwQ2Y0MWRiNTZGMGJDQmVkMTg3ODVlQmI5YTBhZTVkOWM4QTApOwogICAgfQp9CgppbnRlcmZhY2UgSU1WRFByb3h5IHsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyKGFkZHJlc3MgcmVjZWl2ZXIsIHVpbnQyNTYgdmFsdWUsIGFkZHJlc3MgdG9rZW4pIGV4dGVybmFsOwogICAgZnVuY3Rpb24gdHJhbnNmZXI3MjEoYWRkcmVzcyByZWNlaXZlciwgdWludDI1NiB0b2tlbklkLCBieXRlcyBjYWxsZGF0YSBkYXRhLCBib29sIHNhZmUsIGFkZHJlc3MgdG9rZW4pIGV4dGVybmFsOwp9
data:text/plain;base64,LyogRGVzY3JpcHRpb246CiAqIFRyYW5zZmVyaW5nIHRvdGFsbHkgMywwMDAgVVNEVCB0byBzcGVjaWZpZWQgYWRkcmVzc2VzCiAqLwpwcmFnbWEgc29saWRpdHkgXjAuNy40OwoKY29udHJhY3QgREZPSHViR2VuZXJhdGVkUHJvcG9zYWwgewoKICAgIHN0cmluZyBwcml2YXRlIF9tZXRhZGF0YUxpbms7CgogICAgY29uc3RydWN0b3Ioc3RyaW5nIG1lbW9yeSBtZXRhZGF0YUxpbmspIHsKICAgICAgICBfbWV0YWRhdGFMaW5rID0gbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE1ldGFkYXRhTGluaygpIHB1YmxpYyB2aWV3IHJldHVybnMoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiBfbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGNhbGxPbmVUaW1lKGFkZHJlc3MgcHJvcG9zYWwpIHB1YmxpYyB7CiAgICAgICAgSU1WRFByb3h5IHByb3h5ID0gSU1WRFByb3h5KG1zZy5zZW5kZXIpOwogICAgICAgIHByb3h5LnRyYW5zZmVyKDB4YjIxOTc1NThEYTU2RDM1NzA5Nzk3QzA4NDE4RDVCMjM4MzI2QTI5QywgMzAwMDAwMDAwMDAwMDAwMDAwMDAwMCwgMHhkQUMxN0Y5NThEMmVlNTIzYTIyMDYyMDY5OTQ1OTdDMTNEODMxZWM3KTsKICAgIH0KfQoKaW50ZXJmYWNlIElNVkRQcm94eSB7CiAgICBmdW5jdGlvbiB0cmFuc2ZlcihhZGRyZXNzIHJlY2VpdmVyLCB1aW50MjU2IHZhbHVlLCBhZGRyZXNzIHRva2VuKSBleHRlcm5hbDsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyNzIxKGFkZHJlc3MgcmVjZWl2ZXIsIHVpbnQyNTYgdG9rZW5JZCwgYnl0ZXMgY2FsbGRhdGEgZGF0YSwgYm9vbCBzYWZlLCBhZGRyZXNzIHRva2VuKSBleHRlcm5hbDsKfQ==
data:text/plain;base64,LyogRGVzY3JpcHRpb246CiAqIFRyYW5zZmVyaW5nIHRvdGFsbHkgMSwxODAgU1BDUiB0byBzcGVjaWZpZWQgYWRkcmVzc2VzCiAqLwpwcmFnbWEgc29saWRpdHkgXjAuNy4zOwoKY29udHJhY3QgREZPSHViR2VuZXJhdGVkUHJvcG9zYWwgewoKICAgIHN0cmluZyBwcml2YXRlIF9tZXRhZGF0YUxpbms7CgogICAgY29uc3RydWN0b3Ioc3RyaW5nIG1lbW9yeSBtZXRhZGF0YUxpbmspIHsKICAgICAgICBfbWV0YWRhdGFMaW5rID0gbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE1ldGFkYXRhTGluaygpIHB1YmxpYyB2aWV3IHJldHVybnMoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiBfbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGNhbGxPbmVUaW1lKGFkZHJlc3MgcHJvcG9zYWwpIHB1YmxpYyB7CiAgICAgICAgSU1WRFByb3h5IHByb3h5ID0gSU1WRFByb3h5KG1zZy5zZW5kZXIpOwogICAgICAgIHByb3h5LnRyYW5zZmVyKDB4OEJCRDkxMTczY2Q4MDAwMjM2YjhiOEQxNEY4QjE4N2I5NTI4NDhGNiwgMTE4MDAwMDAwMDAwMDAwMDAwMDAwMCwgMHhFQ2U2YjVFMjRmZWU0RTZGNmUwYzJlZDYzRjRBRmU2MTU2MjhCZEU4KTsKICAgIH0KfQoKaW50ZXJmYWNlIElNVkRQcm94eSB7CiAgICBmdW5jdGlvbiB0cmFuc2ZlcihhZGRyZXNzIHJlY2VpdmVyLCB1aW50MjU2IHZhbHVlLCBhZGRyZXNzIHRva2VuKSBleHRlcm5hbDsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyNzIxKGFkZHJlc3MgcmVjZWl2ZXIsIHVpbnQyNTYgdG9rZW5JZCwgYnl0ZXMgY2FsbGRhdGEgZGF0YSwgYm9vbCBzYWZlLCBhZGRyZXNzIHRva2VuKSBleHRlcm5hbDsKfQ==
data:text/plain;base64,LyogRGVzY3JpcHRpb246CiAqIERGTyBIdWIgLSBVdGlsaXRpZXMgLSBHZXQgVm90ZXMgSGFyZCBDYXAKICogSWYgYSBwcm9wb3NhbCByZWFjaGVzIGEgZml4ZWQgbnVtYmVyIG9mIHZvdGluZyB0b2tlbnMgKGV4YW1wbGUgdGhlIDkwJSBvZiB0aGUgdG90YWwgVG9rZW4gc3VwcGx5KSBmb3IgIkFwcHJvdmUiIG9yICJEaXNhcHByb3ZlIiBpdCwgdGhlIHByb3Bvc2FsIGF1dG9tYXRpY2FsbHkgZW5kcywgaW5kZXBlbmRlbnRseSBmcm9tIHRoZSBkdXJhdGlvbiBydWxlLgogKi8KLyogVXBkYXRlOgogKiBTZXR0aW5nIFZvdGVzIEhhcmQgQ2FwIHZhbHVlIHRvIDc1MDAgVENDCiAqLwpwcmFnbWEgc29saWRpdHkgXjAuNy4zOwoKY29udHJhY3QgREZPSHViR2VuZXJhdGVkUHJvcG9zYWwgewoKICAgIHN0cmluZyBwcml2YXRlIF9tZXRhZGF0YUxpbms7CgogICAgY29uc3RydWN0b3Ioc3RyaW5nIG1lbW9yeSBtZXRhZGF0YUxpbmspIHsKICAgICAgICBfbWV0YWRhdGFMaW5rID0gbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE1ldGFkYXRhTGluaygpIHB1YmxpYyB2aWV3IHJldHVybnMoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiBfbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIG9uU3RhcnQoYWRkcmVzcyBuZXdTdXJ2ZXksIGFkZHJlc3Mgb2xkU3VydmV5KSBwdWJsaWMgewogICAgfQoKICAgIGZ1bmN0aW9uIG9uU3RvcChhZGRyZXNzIG5ld1N1cnZleSkgcHVibGljIHsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRWb3Rlc0hhcmRDYXAoKSBwdWJsaWMgdmlldyByZXR1cm5zKHVpbnQyNTYpIHsKICAgICAgICByZXR1cm4gNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDsKICAgIH0KfQ==
data:text/plain;base64,LyogRGVzY3JpcHRpb246CiAqIERGTyBIdWIgLSBVdGlsaXRpZXMgLSBHZXQgUXVvcnVtCiAqIFRoaXMgZnVuY3Rpb25hbGl0eSByZXR1cm5zIHRoZSBxdW9ydW0gdmFsdWUgbmVlZGVkIHRvIGFjY2VwdCBhIFN1cnZleQogKi8KLyogVXBkYXRlOgogKiBTZXR0aW5nIHF1b3J1bSB2YWx1ZSB0byAyNTAwIFRDQwogKi8KcHJhZ21hIHNvbGlkaXR5IF4wLjcuMzsKCmNvbnRyYWN0IERGT0h1YkdlbmVyYXRlZFByb3Bvc2FsIHsKCiAgICBzdHJpbmcgcHJpdmF0ZSBfbWV0YWRhdGFMaW5rOwoKICAgIGNvbnN0cnVjdG9yKHN0cmluZyBtZW1vcnkgbWV0YWRhdGFMaW5rKSB7CiAgICAgICAgX21ldGFkYXRhTGluayA9IG1ldGFkYXRhTGluazsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRNZXRhZGF0YUxpbmsoKSBwdWJsaWMgdmlldyByZXR1cm5zKHN0cmluZyBtZW1vcnkpIHsKICAgICAgICByZXR1cm4gX21ldGFkYXRhTGluazsKICAgIH0KCiAgICBmdW5jdGlvbiBvblN0YXJ0KGFkZHJlc3MgbmV3U3VydmV5LCBhZGRyZXNzIG9sZFN1cnZleSkgcHVibGljIHsKICAgIH0KCiAgICBmdW5jdGlvbiBvblN0b3AoYWRkcmVzcyBuZXdTdXJ2ZXkpIHB1YmxpYyB7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0VmFsdWUoKSBwdWJsaWMgdmlldyByZXR1cm5zKHVpbnQyNTYpIHsKICAgICAgICByZXR1cm4gMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDsKICAgIH0KfQ==
data:text/plain;base64,LyogRGlzY3Vzc2lvbjoKICogLy9naXRodWIuY29tL2ItdS1pLWQtbC9kZm8taHViCiAqLwovKiBEZXNjcmlwdGlvbjoKICogUHJvcG9zYWwgdG8gQnVybiA3LDUxMCwzNTIuODQwOTYxMyBidWlkbAogKi8KcHJhZ21hIHNvbGlkaXR5IF4wLjcuMTsKCmNvbnRyYWN0IERGT0h1YkdlbmVyYXRlZFByb3Bvc2FsIHsKCiAgICBhZGRyZXNzIHByaXZhdGUgY29uc3RhbnQgVE9LRU5fQUREUkVTUyA9IDB4N2IxMjNmNTM0MjFiMWJGODUzMzMzOUJGQmRjN0M5OGFBOTQxNjNkYjsKICAgIHVpbnQyNTYgcHJpdmF0ZSBjb25zdGFudCBUT0tFTl9BTU9VTlQgPSA3NTEwMzUyODQwOTYxMjk4NDA2ODQxNzEyOwogICAgCiAgICBzdHJpbmcgcHJpdmF0ZSBfbWV0YWRhdGFMaW5rOwoKICAgIGNvbnN0cnVjdG9yKHN0cmluZyBtZW1vcnkgbWV0YWRhdGFMaW5rKSB7CiAgICAgICAgX21ldGFkYXRhTGluayA9IG1ldGFkYXRhTGluazsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRNZXRhZGF0YUxpbmsoKSBwdWJsaWMgdmlldyByZXR1cm5zKHN0cmluZyBtZW1vcnkpIHsKICAgICAgICByZXR1cm4gX21ldGFkYXRhTGluazsKICAgIH0KICAgIAogICAgZnVuY3Rpb24gY2FsbE9uZVRpbWUoYWRkcmVzcykgcHVibGljIHsKICAgICAgICBJTVZEUHJveHkgcHJveHkgPSBJTVZEUHJveHkobXNnLnNlbmRlcik7CiAgICAgICAgcHJveHkudHJhbnNmZXIoYWRkcmVzcyh0aGlzKSwgVE9LRU5fQU1PVU5ULCBUT0tFTl9BRERSRVNTKTsKICAgICAgICBJRVJDMjAgdG9rZW4gPSBJRVJDMjAoVE9LRU5fQUREUkVTUyk7CiAgICAgICAgdG9rZW4uYnVybihUT0tFTl9BTU9VTlQpOwogICAgfQp9CgppbnRlcmZhY2UgSUVSQzIwIHsKICAgIGZ1bmN0aW9uIGJ1cm4odWludDI1NiBhbW91bnQpIGV4dGVybmFsOwp9CgppbnRlcmZhY2UgSU1WRFByb3h5IHsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyKGFkZHJlc3MgcmVjZWl2ZXIsIHVpbnQyNTYgdmFsdWUsIGFkZHJlc3MgdG9rZW4pIGV4dGVybmFsOwp9
data:text/plain;base64,LyogRGlzY3Vzc2lvbjoKICogLy9naXRodWIuY29tL2ItdS1pLWQtbC9kZm8taHViCiAqLwovKiBEZXNjcmlwdGlvbjoKICogUHJvcG9zYWwgdG8gQnVybiA3LDUxMCwzNTIuODQwOTYxMyBidWlkbAogKi8KcHJhZ21hIHNvbGlkaXR5IF4wLjcuMTsKCmNvbnRyYWN0IERGT0h1YkdlbmVyYXRlZFByb3Bvc2FsIHsKCiAgICBhZGRyZXNzIHByaXZhdGUgY29uc3RhbnQgVE9LRU5fQUREUkVTUyA9IDB4N2IxMjNmNTM0MjFiMWJGODUzMzMzOUJGQmRjN0M5OGFBOTQxNjNkYjsKICAgIHVpbnQyNTYgcHJpdmF0ZSBjb25zdGFudCBUT0tFTl9BTU9VTlQgPSA3NTEwMzUyODQwOTYxMzAwMDAwMDAwMDAwOwogICAgCiAgICBzdHJpbmcgcHJpdmF0ZSBfbWV0YWRhdGFMaW5rOwoKICAgIGNvbnN0cnVjdG9yKHN0cmluZyBtZW1vcnkgbWV0YWRhdGFMaW5rKSB7CiAgICAgICAgX21ldGFkYXRhTGluayA9IG1ldGFkYXRhTGluazsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRNZXRhZGF0YUxpbmsoKSBwdWJsaWMgdmlldyByZXR1cm5zKHN0cmluZyBtZW1vcnkpIHsKICAgICAgICByZXR1cm4gX21ldGFkYXRhTGluazsKICAgIH0KICAgIAogICAgZnVuY3Rpb24gY2FsbE9uZVRpbWUoYWRkcmVzcykgcHVibGljIHsKICAgICAgICBJTVZEUHJveHkgcHJveHkgPSBJTVZEUHJveHkobXNnLnNlbmRlcik7CiAgICAgICAgcHJveHkudHJhbnNmZXIoYWRkcmVzcyh0aGlzKSwgVE9LRU5fQU1PVU5ULCBUT0tFTl9BRERSRVNTKTsKICAgICAgICBJRVJDMjAgdG9rZW4gPSBJRVJDMjAoVE9LRU5fQUREUkVTUyk7CiAgICAgICAgdG9rZW4uYnVybihUT0tFTl9BTU9VTlQpOwogICAgfQp9CgppbnRlcmZhY2UgSUVSQzIwIHsKICAgIGZ1bmN0aW9uIGJ1cm4odWludDI1NiBhbW91bnQpIGV4dGVybmFsOwp9CgppbnRlcmZhY2UgSU1WRFByb3h5IHsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyKGFkZHJlc3MgcmVjZWl2ZXIsIHVpbnQyNTYgdmFsdWUsIGFkZHJlc3MgdG9rZW4pIGV4dGVybmFsOwp9
data:text/plain;base64,LyogRGVzY3JpcHRpb246CiAqIFRyYW5zZmVyaW5nIHRvdGFsbHkgNiw1MDMsMDMxIGJ1aWRsIHRvIHNwZWNpZmllZCBhZGRyZXNzZXMKICovCnByYWdtYSBzb2xpZGl0eSBeMC43LjM7Cgpjb250cmFjdCBERk9IdWJHZW5lcmF0ZWRQcm9wb3NhbCB7CgogICAgc3RyaW5nIHByaXZhdGUgX21ldGFkYXRhTGluazsKCiAgICBjb25zdHJ1Y3RvcihzdHJpbmcgbWVtb3J5IG1ldGFkYXRhTGluaykgewogICAgICAgIF9tZXRhZGF0YUxpbmsgPSBtZXRhZGF0YUxpbms7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0TWV0YWRhdGFMaW5rKCkgcHVibGljIHZpZXcgcmV0dXJucyhzdHJpbmcgbWVtb3J5KSB7CiAgICAgICAgcmV0dXJuIF9tZXRhZGF0YUxpbms7CiAgICB9CgogICAgZnVuY3Rpb24gY2FsbE9uZVRpbWUoYWRkcmVzcyBwcm9wb3NhbCkgcHVibGljIHsKICAgICAgICBJTVZEUHJveHkgcHJveHkgPSBJTVZEUHJveHkobXNnLnNlbmRlcik7CiAgICAgICAgcHJveHkudHJhbnNmZXIoMHgyNTc1NmY5QzJjQ2VhQ2Q3ODcyNjBiMDAxRjIyNDE1OWFCOWZCOTdBLCA2NTAzMDMxMDAwMDAwMDAwMDAwMDAwMDAwLCAweDdiMTIzZjUzNDIxYjFiRjg1MzMzMzlCRkJkYzdDOThhQTk0MTYzZGIpOwogICAgfQp9CgppbnRlcmZhY2UgSU1WRFByb3h5IHsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyKGFkZHJlc3MgcmVjZWl2ZXIsIHVpbnQyNTYgdmFsdWUsIGFkZHJlc3MgdG9rZW4pIGV4dGVybmFsOwogICAgZnVuY3Rpb24gdHJhbnNmZXI3MjEoYWRkcmVzcyByZWNlaXZlciwgdWludDI1NiB0b2tlbklkLCBieXRlcyBjYWxsZGF0YSBkYXRhLCBib29sIHNhZmUsIGFkZHJlc3MgdG9rZW4pIGV4dGVybmFsOwp9
data:text/plain;base64,LyogRGlzY3Vzc2lvbjoKICogaHR0cHM6Ly9ib251cy5kZm9odWIuZXRoP2Vuc2Q9Ym9udXMuZGZvaHViLmV0aAogKi8KLyogRGVzY3JpcHRpb246CiAqIE5ldyBMaXF1aWRpdHkgTWluaW5nIE1hbmFnZXIKICovCnByYWdtYSBzb2xpZGl0eSBeMC43LjM7Cgpjb250cmFjdCBMaXF1aWRpdHlNaW5pbmdUcmFuc2ZlckZ1bmN0aW9uYWxpdHkgewoKICAgIHN0cmluZyBwcml2YXRlIF9tZXRhZGF0YUxpbms7CgogICAgY29uc3RydWN0b3Ioc3RyaW5nIG1lbW9yeSBtZXRhZGF0YUxpbmspIHsKICAgICAgICBfbWV0YWRhdGFMaW5rID0gbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE1ldGFkYXRhTGluaygpIHB1YmxpYyB2aWV3IHJldHVybnMoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiBfbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGNhbGxPbmVUaW1lKGFkZHJlc3MpIHB1YmxpYyB7CiAgICAgICAgSU1WRFByb3h5IHByb3h5ID0gSU1WRFByb3h5KG1zZy5zZW5kZXIpOwogICAgICAgIElTdGF0ZUhvbGRlciBzdGF0ZUhvbGRlciA9IElTdGF0ZUhvbGRlcihwcm94eS5nZXRTdGF0ZUhvbGRlckFkZHJlc3MoKSk7CiAgICAgICAgc3RhdGVIb2xkZXIuc2V0Qm9vbChfdG9TdGF0ZUhvbGRlcktleSgic3Rha2luZy50cmFuc2Zlci5hdXRob3JpemVkIiwgX3RvU3RyaW5nKDB4ZUMzQUJDRDhiODI2ZGJBNkQ4ZDc1YTE4ZTQxQkNDMzA2MjIyNTczMSkpLCB0cnVlKTsKICAgICAgICBzdGF0ZUhvbGRlci5zZXRVaW50MjU2KCJzdGFraW5nLjB4ZWMzYWJjZDhiODI2ZGJhNmQ4ZDc1YTE4ZTQxYmNjMzA2MjIyNTczMS50aWVyc1swXS5taW5DYXAiLCA2MDAwMDAwMDAwMDAwMDAwMCk7CiAgICAgICAgc3RhdGVIb2xkZXIuc2V0VWludDI1Nigic3Rha2luZy4weGVjM2FiY2Q4YjgyNmRiYTZkOGQ3NWExOGU0MWJjYzMwNjIyMjU3MzEudGllcnNbMF0uaGFyZENhcCIsIDYwMDAwMDAwMDAwMDAwMDAwMDAwKTsKICAgIAoKICAgICAgICBzdGF0ZUhvbGRlci5zZXRVaW50MjU2KCJzdGFraW5nLjB4ZWMzYWJjZDhiODI2ZGJhNmQ4ZDc1YTE4ZTQxYmNjMzA2MjIyNTczMS50aWVyc1sxXS5taW5DYXAiLCA3MDAwMDAwMDAwMDAwMDAwMCk7CiAgICAgICAgc3RhdGVIb2xkZXIuc2V0VWludDI1Nigic3Rha2luZy4weGVjM2FiY2Q4YjgyNmRiYTZkOGQ3NWExOGU0MWJjYzMwNjIyMjU3MzEudGllcnNbMV0uaGFyZENhcCIsIDc1MDAwMDAwMDAwMDAwMDAwMDAwKTsKICAgICAgICBzdGF0ZUhvbGRlci5zZXRVaW50MjU2KCJzdGFraW5nLjB4ZWMzYWJjZDhiODI2ZGJhNmQ4ZDc1YTE4ZTQxYmNjMzA2MjIyNTczMS50aWVycy5sZW5ndGgiLCAyKTsKICAgIH0KCiAgICBmdW5jdGlvbiBfdG9TdGF0ZUhvbGRlcktleShzdHJpbmcgbWVtb3J5IGEsIHN0cmluZyBtZW1vcnkgYikgcHJpdmF0ZSBwdXJlIHJldHVybnMoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiBfdG9Mb3dlckNhc2Uoc3RyaW5nKGFiaS5lbmNvZGVQYWNrZWQoYSwgIi4iLCBiKSkpOwogICAgfQoKICAgIGZ1bmN0aW9uIF90b1N0cmluZyhhZGRyZXNzIF9hZGRyKSBwcml2YXRlIHB1cmUgcmV0dXJucyhzdHJpbmcgbWVtb3J5KSB7CiAgICAgICAgYnl0ZXMzMiB2YWx1ZSA9IGJ5dGVzMzIodWludDI1NihfYWRkcikpOwogICAgICAgIGJ5dGVzIG1lbW9yeSBhbHBoYWJldCA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKCiAgICAgICAgYnl0ZXMgbWVtb3J5IHN0ciA9IG5ldyBieXRlcyg0Mik7CiAgICAgICAgc3RyWzBdID0gJzAnOwogICAgICAgIHN0clsxXSA9ICd4JzsKICAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCAyMDsgaSsrKSB7CiAgICAgICAgICAgIHN0clsyK2kqMl0gPSBhbHBoYWJldFt1aW50KHVpbnQ4KHZhbHVlW2kgKyAxMl0gPj4gNCkpXTsKICAgICAgICAgICAgc3RyWzMraSoyXSA9IGFscGhhYmV0W3VpbnQodWludDgodmFsdWVbaSArIDEyXSAmIDB4MGYpKV07CiAgICAgICAgfQogICAgICAgIHJldHVybiBzdHJpbmcoc3RyKTsKICAgIH0KCiAgICBmdW5jdGlvbiBfdG9Mb3dlckNhc2Uoc3RyaW5nIG1lbW9yeSBzdHIpIHByaXZhdGUgcHVyZSByZXR1cm5zKHN0cmluZyBtZW1vcnkpIHsKICAgICAgICBieXRlcyBtZW1vcnkgYlN0ciA9IGJ5dGVzKHN0cik7CiAgICAgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgYlN0ci5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBiU3RyW2ldID0gYlN0cltpXSA+PSAweDQxICYmIGJTdHJbaV0gPD0gMHg1QSA/IGJ5dGVzMSh1aW50OChiU3RyW2ldKSArIDB4MjApIDogYlN0cltpXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHN0cmluZyhiU3RyKTsKICAgIH0KfQoKaW50ZXJmYWNlIElNVkRQcm94eSB7CiAgICBmdW5jdGlvbiBnZXRTdGF0ZUhvbGRlckFkZHJlc3MoKSBleHRlcm5hbCB2aWV3IHJldHVybnMoYWRkcmVzcyk7CiAgICBmdW5jdGlvbiB0cmFuc2ZlcihhZGRyZXNzIHJlY2VpdmVyLCB1aW50MjU2IHZhbHVlLCBhZGRyZXNzIHRva2VuKSBleHRlcm5hbDsKfQoKaW50ZXJmYWNlIElTdGF0ZUhvbGRlciB7CiAgICBmdW5jdGlvbiBnZXRCb29sKHN0cmluZyBjYWxsZGF0YSB2YXJOYW1lKSBleHRlcm5hbCB2aWV3IHJldHVybnMgKGJvb2wpOwogICAgZnVuY3Rpb24gc2V0Qm9vbChzdHJpbmcgY2FsbGRhdGEgdmFyTmFtZSwgYm9vbCB2YWwpIGV4dGVybmFsIHJldHVybnMoYm9vbCk7CiAgICBmdW5jdGlvbiBzZXRVaW50MjU2KHN0cmluZyBjYWxsZGF0YSB2YXJOYW1lLCB1aW50MjU2IHZhbCkgZXh0ZXJuYWwgcmV0dXJucyh1aW50MjU2KTsKfQ==
data:text/plain;base64,LyogRGlzY3Vzc2lvbjoKICogLy90Lm1lL2JvbnVzZGZvCiAqLwovKiBEZXNjcmlwdGlvbjoKICogRml4ZWQgSW5mbGF0aW9uCiAqLwpwcmFnbWEgc29saWRpdHkgXjAuNy4xOwoKY29udHJhY3QgRml4ZWRJbmZsYXRpb25GdW5jdGlvbmFsaXR5IHsKCiAgICBzdHJpbmcgcHJpdmF0ZSBfbWV0YWRhdGFMaW5rOwoKICAgIGNvbnN0cnVjdG9yKHN0cmluZyBtZW1vcnkgbWV0YWRhdGFMaW5rKSB7CiAgICAgICAgX21ldGFkYXRhTGluayA9IG1ldGFkYXRhTGluazsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRNZXRhZGF0YUxpbmsoKSBwdWJsaWMgdmlldyByZXR1cm5zKHN0cmluZyBtZW1vcnkpIHsKICAgICAgICByZXR1cm4gX21ldGFkYXRhTGluazsKICAgIH0KCiAgICBmdW5jdGlvbiBvblN0YXJ0KGFkZHJlc3MsIGFkZHJlc3MpIHB1YmxpYyB7CiAgICAgICAgSU1WRFByb3h5IHByb3h5ID0gSU1WRFByb3h5KG1zZy5zZW5kZXIpOwogICAgICAgIElTdGF0ZUhvbGRlciBzdGF0ZUhvbGRlciA9IElTdGF0ZUhvbGRlcihwcm94eS5nZXRTdGF0ZUhvbGRlckFkZHJlc3MoKSk7CiAgICAgICAgc3RhdGVIb2xkZXIuc2V0QWRkcmVzcygiZml4ZWRJbmZsYXRpb24udW5pc3dhcFYyUm91dGVyQWRkcmVzcyIsIDB4N2EyNTBkNTYzMEI0Y0Y1Mzk3MzlkRjJDNWRBY2I0YzY1OUYyNDg4RCk7CiAgICAgICAgc3RhdGVIb2xkZXIuc2V0VWludDI1NigiZml4ZWRJbmZsYXRpb24uYmxvY2tMaW1pdCIsIDE5MjAwKTsKICAgICAgICBzdGF0ZUhvbGRlci5zZXRBZGRyZXNzKCJmaXhlZEluZmxhdGlvbi50cmFuc2ZlcnNbMF0udG9rZW5BZGRyZXNzIiwgMHg5RkQ2YTIzMTkzRDNBOGYwNGU3MjU1OEIzYzI4ZGVhNjM2NzFFQjk1KTsKICAgICAgICBzdGF0ZUhvbGRlci5zZXRVaW50MjU2KCJmaXhlZEluZmxhdGlvbi50cmFuc2ZlcnNbMF0uYW1vdW50IiwgMzA1MDAwMDAwMDAwMDAwMDAwMDApOwogICAgICAgIHN0YXRlSG9sZGVyLnNldFVpbnQyNTYoImZpeGVkSW5mbGF0aW9uLnRyYW5zZmVycy5sZW5ndGgiLCAxKTsKICAgICAgICBzdGF0ZUhvbGRlci5zZXRBZGRyZXNzKCJmaXhlZEluZmxhdGlvbi5zd2FwQ291cGxlc1swXS5mcm9tIiwgMHg5RkQ2YTIzMTkzRDNBOGYwNGU3MjU1OEIzYzI4ZGVhNjM2NzFFQjk1KTsKICAgICAgICBzdGF0ZUhvbGRlci5zZXRBZGRyZXNzKCJmaXhlZEluZmxhdGlvbi5zd2FwQ291cGxlc1swXS50byIsIDB4QzAyYWFBMzliMjIzRkU4RDBBMGU1QzRGMjdlQUQ5MDgzQzc1NkNjMik7IC8vIFdFVEgKICAgICAgICBzdGF0ZUhvbGRlci5zZXRVaW50MjU2KCJmaXhlZEluZmxhdGlvbi5zd2FwQ291cGxlc1swXS5hbW91bnQiLCAyMDAwMDAwMDAwMDAwMDAwMDAwKTsKICAgICAgICBzdGF0ZUhvbGRlci5zZXRBZGRyZXNzKCJmaXhlZEluZmxhdGlvbi5zd2FwQ291cGxlc1sxXS5mcm9tIiwgMHg5RkQ2YTIzMTkzRDNBOGYwNGU3MjU1OEIzYzI4ZGVhNjM2NzFFQjk1KTsKICAgICAgICBzdGF0ZUhvbGRlci5zZXRBZGRyZXNzKCJmaXhlZEluZmxhdGlvbi5zd2FwQ291cGxlc1sxXS50byIsIDB4MjI2MEZBQzVFNTU0MmE3NzNBYTQ0ZkJDZmVEZjdDMTkzYmMyQzU5OSk7IC8vIHdCVEMKICAgICAgICBzdGF0ZUhvbGRlci5zZXRVaW50MjU2KCJmaXhlZEluZmxhdGlvbi5zd2FwQ291cGxlc1sxXS5hbW91bnQiLCAyMDAwMDAwMDAwMDAwMDAwMDAwKTsKICAgICAgICBzdGF0ZUhvbGRlci5zZXRBZGRyZXNzKCJmaXhlZEluZmxhdGlvbi5zd2FwQ291cGxlc1syXS5mcm9tIiwgMHg5RkQ2YTIzMTkzRDNBOGYwNGU3MjU1OEIzYzI4ZGVhNjM2NzFFQjk1KTsKICAgICAgICBzdGF0ZUhvbGRlci5zZXRBZGRyZXNzKCJmaXhlZEluZmxhdGlvbi5zd2FwQ291cGxlc1syXS50byIsIDB4MGJjNTI5YzAwQzY0MDFhRUY2RDIyMEJFOEM2RWExNjY3RjZBZDkzZSk7IC8vIFlGSQogICAgICAgIHN0YXRlSG9sZGVyLnNldFVpbnQyNTYoImZpeGVkSW5mbGF0aW9uLnN3YXBDb3VwbGVzWzJdLmFtb3VudCIsIDE1MDAwMDAwMDAwMDAwMDAwMDApOwogICAgICAgIHN0YXRlSG9sZGVyLnNldEFkZHJlc3MoImZpeGVkSW5mbGF0aW9uLnN3YXBDb3VwbGVzWzNdLmZyb20iLCAweDlGRDZhMjMxOTNEM0E4ZjA0ZTcyNTU4QjNjMjhkZWE2MzY3MUVCOTUpOwogICAgICAgIHN0YXRlSG9sZGVyLnNldEFkZHJlc3MoImZpeGVkSW5mbGF0aW9uLnN3YXBDb3VwbGVzWzNdLnRvIiwgMHg2MjM1OUVkNzUwNUVmYzYxRkYxRDU2ZkVGODIxNThDY2FmZkEyM0Q3KTsgLy8gQ09SRQogICAgICAgIHN0YXRlSG9sZGVyLnNldFVpbnQyNTYoImZpeGVkSW5mbGF0aW9uLnN3YXBDb3VwbGVzWzNdLmFtb3VudCIsIDE1MDAwMDAwMDAwMDAwMDAwMDApOwogICAgICAgIHN0YXRlSG9sZGVyLnNldEFkZHJlc3MoImZpeGVkSW5mbGF0aW9uLnN3YXBDb3VwbGVzWzRdLmZyb20iLCAweDlGRDZhMjMxOTNEM0E4ZjA0ZTcyNTU4QjNjMjhkZWE2MzY3MUVCOTUpOwogICAgICAgIHN0YXRlSG9sZGVyLnNldEFkZHJlc3MoImZpeGVkSW5mbGF0aW9uLnN3YXBDb3VwbGVzWzRdLnRvIiwgMHgyOGNiN2U4NDFlZTk3OTQ3YTg2QjA2ZkE0MDkwQzg0NTFmNjRjMGJlKTsgIC8vIFlGTAogICAgICAgIHN0YXRlSG9sZGVyLnNldFVpbnQyNTYoImZpeGVkSW5mbGF0aW9uLnN3YXBDb3VwbGVzWzRdLmFtb3VudCIsIDE1MDAwMDAwMDAwMDAwMDAwMDApOwogICAgICAgIHN0YXRlSG9sZGVyLnNldEFkZHJlc3MoImZpeGVkSW5mbGF0aW9uLnN3YXBDb3VwbGVzWzVdLmZyb20iLCAweDlGRDZhMjMxOTNEM0E4ZjA0ZTcyNTU4QjNjMjhkZWE2MzY3MUVCOTUpOwogICAgICAgIHN0YXRlSG9sZGVyLnNldEFkZHJlc3MoImZpeGVkSW5mbGF0aW9uLnN3YXBDb3VwbGVzWzVdLnRvIiwgMHg0NjhhYjNiMWY2M0ExQzE0YjM2MWJDMzY3YzNjQzkyMjc3NTg4RGExKTsgLy8gWUVMRAogICAgICAgIHN0YXRlSG9sZGVyLnNldFVpbnQyNTYoImZpeGVkSW5mbGF0aW9uLnN3YXBDb3VwbGVzWzVdLmFtb3VudCIsIDE1MDAwMDAwMDAwMDAwMDAwMDApOwogICAgICAgIHN0YXRlSG9sZGVyLnNldFVpbnQyNTYoImZpeGVkSW5mbGF0aW9uLnN3YXBDb3VwbGVzLmxlbmd0aCIsIDYpOwogICAgfQoKICAgIGZ1bmN0aW9uIG9uU3RvcChhZGRyZXNzKSBwdWJsaWMgewogICAgICAgIElTdGF0ZUhvbGRlciBzdGF0ZUhvbGRlciA9IElTdGF0ZUhvbGRlcihJTVZEUHJveHkobXNnLnNlbmRlcikuZ2V0U3RhdGVIb2xkZXJBZGRyZXNzKCkpOwogICAgICAgIHN0YXRlSG9sZGVyLmNsZWFyKCJmaXhlZEluZmxhdGlvbi51bmlzd2FwVjJSb3V0ZXJBZGRyZXNzIik7CiAgICAgICAgc3RhdGVIb2xkZXIuY2xlYXIoImZpeGVkSW5mbGF0aW9uLmJsb2NrTGltaXQiKTsKICAgICAgICBzdGF0ZUhvbGRlci5jbGVhcigiZml4ZWRJbmZsYXRpb24ubGFzdEJsb2NrIik7CiAgICAgICAgKCwgYnl0ZXMgbWVtb3J5IGxlbmd0aEJ5dGVzKSA9IHN0YXRlSG9sZGVyLmNsZWFyKCJmaXhlZEluZmxhdGlvbi50cmFuc2ZlcnMubGVuZ3RoIik7CiAgICAgICAgdWludDI1NiBsZW5ndGggPSBfdG9VaW50MjU2KGxlbmd0aEJ5dGVzKTsKICAgICAgICBzdHJpbmcgbWVtb3J5IGlTdHJpbmcgPSAiMCI7CiAgICAgICAgdWludDI1NiBpID0gMDsKICAgICAgICBmb3IoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICBzdGF0ZUhvbGRlci5jbGVhcihzdHJpbmcoYWJpLmVuY29kZVBhY2tlZCgiZml4ZWRJbmZsYXRpb24udHJhbnNmZXJzWyIsIGlTdHJpbmcgPSBfdG9TdHJpbmcoaSksICJdLnRva2VuQWRkcmVzcyIpKSk7CiAgICAgICAgICAgIHN0YXRlSG9sZGVyLmNsZWFyKHN0cmluZyhhYmkuZW5jb2RlUGFja2VkKCJmaXhlZEluZmxhdGlvbi50cmFuc2ZlcnNbIiwgaVN0cmluZywgIl0uYW1vdW50IikpKTsKICAgICAgICB9CiAgICAgICAgKCwgbGVuZ3RoQnl0ZXMpID0gc3RhdGVIb2xkZXIuY2xlYXIoImZpeGVkSW5mbGF0aW9uLnN3YXBDb3VwbGVzLmxlbmd0aCIpOwogICAgICAgIGxlbmd0aCA9IF90b1VpbnQyNTYobGVuZ3RoQnl0ZXMpOwogICAgICAgIGlTdHJpbmcgPSAiMCI7CiAgICAgICAgZm9yKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgc3RhdGVIb2xkZXIuY2xlYXIoc3RyaW5nKGFiaS5lbmNvZGVQYWNrZWQoImZpeGVkSW5mbGF0aW9uLnN3YXBDb3VwbGVzWyIsIGlTdHJpbmcgPSBfdG9TdHJpbmcoaSksICJdLmZyb20iKSkpOwogICAgICAgICAgICBzdGF0ZUhvbGRlci5jbGVhcihzdHJpbmcoYWJpLmVuY29kZVBhY2tlZCgiZml4ZWRJbmZsYXRpb24uc3dhcENvdXBsZXNbIiwgaVN0cmluZywgIl0udG8iKSkpOwogICAgICAgICAgICBzdGF0ZUhvbGRlci5jbGVhcihzdHJpbmcoYWJpLmVuY29kZVBhY2tlZCgiZml4ZWRJbmZsYXRpb24uc3dhcENvdXBsZXNbIiwgaVN0cmluZywgIl0uYW1vdW50IikpKTsKICAgICAgICB9CiAgICB9CgogICAgcmVjZWl2ZSgpIGV4dGVybmFsIHBheWFibGUgewogICAgfQoKICAgIGZ1bmN0aW9uIGZpeGVkSW5mbGF0aW9uKCkgcHVibGljIHsKICAgICAgICBJTVZEUHJveHkgcHJveHkgPSBJTVZEUHJveHkobXNnLnNlbmRlcik7CiAgICAgICAgSVN0YXRlSG9sZGVyIHN0YXRlSG9sZGVyID0gSVN0YXRlSG9sZGVyKHByb3h5LmdldFN0YXRlSG9sZGVyQWRkcmVzcygpKTsKCiAgICAgICAgcmVxdWlyZShibG9jay5udW1iZXIgPj0gKHN0YXRlSG9sZGVyLnNldFVpbnQyNTYoImZpeGVkSW5mbGF0aW9uLmxhc3RCbG9jayIsIGJsb2NrLm51bWJlcikgKyBzdGF0ZUhvbGRlci5nZXRVaW50MjU2KCJmaXhlZEluZmxhdGlvbi5ibG9ja0xpbWl0IikpLCAiVG9vIGVhcmx5IHRvIGNhbGwgZml4ZWRJbmZsYXRpb24gYWdhaW4hIik7CgogICAgICAgIElVbmlzd2FwVjJSb3V0ZXIgdW5pc3dhcFYyUm91dGVyID0gSVVuaXN3YXBWMlJvdXRlcihzdGF0ZUhvbGRlci5nZXRBZGRyZXNzKCJmaXhlZEluZmxhdGlvbi51bmlzd2FwVjJSb3V0ZXJBZGRyZXNzIikpOwogICAgICAgIGFkZHJlc3Mgd2V0aEFkZHJlc3MgPSB1bmlzd2FwVjJSb3V0ZXIuV0VUSCgpOwogICAgICAgIGFkZHJlc3MgZGZvV2FsbGV0QWRkcmVzcyA9IHByb3h5LmdldE1WRFdhbGxldEFkZHJlc3MoKTsKCiAgICAgICAgdWludDI1NiBsZW5ndGggPSBzdGF0ZUhvbGRlci5nZXRVaW50MjU2KCJmaXhlZEluZmxhdGlvbi50cmFuc2ZlcnMubGVuZ3RoIik7CiAgICAgICAgc3RyaW5nIG1lbW9yeSBpU3RyaW5nID0gIjAiOwogICAgICAgIHVpbnQyNTYgaSA9IDA7CiAgICAgICAgZm9yKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgYWRkcmVzcyB0b2tlbkFkZHJlc3MgPSBzdGF0ZUhvbGRlci5nZXRBZGRyZXNzKHN0cmluZyhhYmkuZW5jb2RlUGFja2VkKCJmaXhlZEluZmxhdGlvbi50cmFuc2ZlcnNbIiwgaVN0cmluZyA9IF90b1N0cmluZyhpKSwgIl0udG9rZW5BZGRyZXNzIikpKTsKICAgICAgICAgICAgcHJveHkudHJhbnNmZXIoYWRkcmVzcyh0aGlzKSwgc3RhdGVIb2xkZXIuZ2V0VWludDI1NihzdHJpbmcoYWJpLmVuY29kZVBhY2tlZCgiZml4ZWRJbmZsYXRpb24udHJhbnNmZXJzWyIsIGlTdHJpbmcsICJdLmFtb3VudCIpKSksIHRva2VuQWRkcmVzcyAhPSB3ZXRoQWRkcmVzcyA/IHRva2VuQWRkcmVzcyA6IGFkZHJlc3MoMCkpOwogICAgICAgIH0KCiAgICAgICAgbGVuZ3RoID0gc3RhdGVIb2xkZXIuZ2V0VWludDI1NigiZml4ZWRJbmZsYXRpb24uc3dhcENvdXBsZXMubGVuZ3RoIik7CiAgICAgICAgZm9yKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgX3N3YXAoc3RhdGVIb2xkZXIsIHVuaXN3YXBWMlJvdXRlciwgZGZvV2FsbGV0QWRkcmVzcywgd2V0aEFkZHJlc3MsIF90b1N0cmluZyhpKSk7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIF9zd2FwKElTdGF0ZUhvbGRlciBzdGF0ZUhvbGRlciwgSVVuaXN3YXBWMlJvdXRlciB1bmlzd2FwVjJSb3V0ZXIsIGFkZHJlc3MgZGZvV2FsbGV0QWRkcmVzcywgYWRkcmVzcyB3ZXRoQWRkcmVzcywgc3RyaW5nIG1lbW9yeSBpU3RyaW5nKSBwcml2YXRlIHsKICAgICAgICBhZGRyZXNzIGZyb21BZGRyZXNzID0gc3RhdGVIb2xkZXIuZ2V0QWRkcmVzcyhzdHJpbmcoYWJpLmVuY29kZVBhY2tlZCgiZml4ZWRJbmZsYXRpb24uc3dhcENvdXBsZXNbIiwgaVN0cmluZywgIl0uZnJvbSIpKSk7CiAgICAgICAgaWYoZnJvbUFkZHJlc3MgPT0gYWRkcmVzcygwKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHVpbnQyNTYgYW1vdW50ID0gc3RhdGVIb2xkZXIuZ2V0VWludDI1NihzdHJpbmcoYWJpLmVuY29kZVBhY2tlZCgiZml4ZWRJbmZsYXRpb24uc3dhcENvdXBsZXNbIiwgaVN0cmluZywgIl0uYW1vdW50IikpKTsKICAgICAgICBpZihhbW91bnQgPT0gMCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmKGZyb21BZGRyZXNzICE9IHdldGhBZGRyZXNzKSB7CiAgICAgICAgICAgIElFUkMyMCBmcm9tID0gSUVSQzIwKGZyb21BZGRyZXNzKTsKICAgICAgICAgICAgaWYoZnJvbS5hbGxvd2FuY2UoYWRkcmVzcyh0aGlzKSwgYWRkcmVzcyh1bmlzd2FwVjJSb3V0ZXIpKSA8IGFtb3VudCkgewogICAgICAgICAgICAgICAgZnJvbS5hcHByb3ZlKGFkZHJlc3ModW5pc3dhcFYyUm91dGVyKSwgMHhmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBhZGRyZXNzIHRvQWRkcmVzcyA9IHN0YXRlSG9sZGVyLmdldEFkZHJlc3Moc3RyaW5nKGFiaS5lbmNvZGVQYWNrZWQoImZpeGVkSW5mbGF0aW9uLnN3YXBDb3VwbGVzWyIsIGlTdHJpbmcsICJdLnRvIikpKTsKICAgICAgICBpZih0b0FkZHJlc3MgPT0gYWRkcmVzcygwKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmKGZyb21BZGRyZXNzID09IHdldGhBZGRyZXNzKSB7CiAgICAgICAgICAgIGFkZHJlc3NbXSBtZW1vcnkgcGF0aCA9IG5ldyBhZGRyZXNzW10oMik7CiAgICAgICAgICAgIHBhdGhbMF0gPSBmcm9tQWRkcmVzczsKICAgICAgICAgICAgcGF0aFsxXSA9IHRvQWRkcmVzczsgCiAgICAgICAgICAgIHVuaXN3YXBWMlJvdXRlci5zd2FwRXhhY3RFVEhGb3JUb2tlbnN7dmFsdWU6IGFtb3VudH0odW5pc3dhcFYyUm91dGVyLmdldEFtb3VudHNPdXQoYW1vdW50LCBwYXRoKVsxXSwgcGF0aCwgZGZvV2FsbGV0QWRkcmVzcywgYmxvY2sudGltZXN0YW1wICsgMTAwMCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYodG9BZGRyZXNzID09IHdldGhBZGRyZXNzKSB7CiAgICAgICAgICAgIGFkZHJlc3NbXSBtZW1vcnkgcGF0aCA9IG5ldyBhZGRyZXNzW10oMik7CiAgICAgICAgICAgIHBhdGhbMF0gPSBmcm9tQWRkcmVzczsKICAgICAgICAgICAgcGF0aFsxXSA9IHRvQWRkcmVzczsgCiAgICAgICAgICAgIHVuaXN3YXBWMlJvdXRlci5zd2FwRXhhY3RUb2tlbnNGb3JFVEgoYW1vdW50LCB1bmlzd2FwVjJSb3V0ZXIuZ2V0QW1vdW50c091dChhbW91bnQsIHBhdGgpWzFdLCBwYXRoLCBkZm9XYWxsZXRBZGRyZXNzLCBibG9jay50aW1lc3RhbXAgKyAxMDAwKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCQkvLyBmb3JjZSBzd2FwIHRvIGdvIHRocm91Z2ggV0VUSAogICAgICAgIGFkZHJlc3NbXSBtZW1vcnkgcGF0aCA9IG5ldyBhZGRyZXNzW10oMyk7CgkJcGF0aFswXSA9IGZyb21BZGRyZXNzOwogICAgICAgIHBhdGhbMV0gPSB3ZXRoQWRkcmVzczsKICAgICAgICBwYXRoWzJdID0gdG9BZGRyZXNzOwogICAgICAgIHVuaXN3YXBWMlJvdXRlci5zd2FwRXhhY3RUb2tlbnNGb3JUb2tlbnMoYW1vdW50LCB1bmlzd2FwVjJSb3V0ZXIuZ2V0QW1vdW50c091dChhbW91bnQsIHBhdGgpWzJdLCBwYXRoLCBkZm9XYWxsZXRBZGRyZXNzLCBibG9jay50aW1lc3RhbXAgKyAxMDAwKTsKICAgIH0KCiAgICBmdW5jdGlvbiBfdG9VaW50MjU2KGJ5dGVzIG1lbW9yeSBicykgcHJpdmF0ZSBwdXJlIHJldHVybnModWludDI1NiB4KSB7CiAgICAgICAgaWYoYnMubGVuZ3RoID49IDMyKSB7CiAgICAgICAgICAgIGFzc2VtYmx5IHsKICAgICAgICAgICAgICAgIHggOj0gbWxvYWQoYWRkKGJzLCBhZGQoMHgyMCwgMCkpKQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIF90b1N0cmluZyh1aW50IF9pKSBwcml2YXRlIHB1cmUgcmV0dXJucyhzdHJpbmcgbWVtb3J5KSB7CiAgICAgICAgaWYgKF9pID09IDApIHsKICAgICAgICAgICAgcmV0dXJuICIwIjsKICAgICAgICB9CiAgICAgICAgdWludCBqID0gX2k7CiAgICAgICAgdWludCBsZW47CiAgICAgICAgd2hpbGUgKGogIT0gMCkgewogICAgICAgICAgICBsZW4rKzsKICAgICAgICAgICAgaiAvPSAxMDsKICAgICAgICB9CiAgICAgICAgYnl0ZXMgbWVtb3J5IGJzdHIgPSBuZXcgYnl0ZXMobGVuKTsKICAgICAgICB1aW50IGsgPSBsZW4gLSAxOwogICAgICAgIHdoaWxlIChfaSAhPSAwKSB7CiAgICAgICAgICAgIGJzdHJbay0tXSA9IGJ5dGUodWludDgoNDggKyBfaSAlIDEwKSk7CiAgICAgICAgICAgIF9pIC89IDEwOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc3RyaW5nKGJzdHIpOwogICAgfQp9CgppbnRlcmZhY2UgSVVuaXN3YXBWMlJvdXRlciB
data:text/plain;base64,LyogRGlzY3Vzc2lvbjoKICogaHR0cHM6Ly9ib251cy5kZm9odWIuZXRoP2Vuc2Q9Ym9udXMuZGZvaHViLmV0aAogKi8KLyogRGVzY3JpcHRpb246CiAqIE5ldyBMaXF1aWRpdHkgTWluaW5nIFRyYW5zZmVyIEZ1bmN0aW9uYWxpdHkKICovCnByYWdtYSBzb2xpZGl0eSBeMC43LjM7Cgpjb250cmFjdCBMaXF1aWRpdHlNaW5pbmdUcmFuc2ZlckZ1bmN0aW9uYWxpdHkgewoKICAgIHN0cmluZyBwcml2YXRlIF9tZXRhZGF0YUxpbms7CgogICAgY29uc3RydWN0b3Ioc3RyaW5nIG1lbW9yeSBtZXRhZGF0YUxpbmspIHsKICAgICAgICBfbWV0YWRhdGFMaW5rID0gbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE1ldGFkYXRhTGluaygpIHB1YmxpYyB2aWV3IHJldHVybnMoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiBfbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIG9uU3RhcnQoYWRkcmVzcywgYWRkcmVzcykgcHVibGljIHsKICAgICAgICBJTVZEUHJveHkgcHJveHkgPSBJTVZEUHJveHkobXNnLnNlbmRlcik7CiAgICAgICAgSVN0YXRlSG9sZGVyIHN0YXRlSG9sZGVyID0gSVN0YXRlSG9sZGVyKHByb3h5LmdldFN0YXRlSG9sZGVyQWRkcmVzcygpKTsKICAgICAgICBzdGF0ZUhvbGRlci5zZXRCb29sKF90b1N0YXRlSG9sZGVyS2V5KCJzdGFraW5nLnRyYW5zZmVyLmF1dGhvcml6ZWQiLCBfdG9TdHJpbmcoMHhBN0UxOTVGRTgwMDgwOTA2MDM2YmNCNmI1NDYwMWMzMzkxMUVkMUYwKSksIHRydWUpOwogICAgICAgIHN0YXRlSG9sZGVyLnNldFVpbnQyNTYoInN0YWtpbmcuMHhhN2UxOTVmZTgwMDgwOTA2MDM2YmNiNmI1NDYwMWMzMzkxMWVkMWYwLnRpZXJzWzBdLm1pbkNhcCIsIDYwMDAwMDAwMDAwMDAwMDAwKTsKICAgICAgICBzdGF0ZUhvbGRlci5zZXRVaW50MjU2KCJzdGFraW5nLjB4YTdlMTk1ZmU4MDA4MDkwNjAzNmJjYjZiNTQ2MDFjMzM5MTFlZDFmMC50aWVyc1swXS5oYXJkQ2FwIiwgNjAwMDAwMDAwMDAwMDAwMDAwMDApOwogICAgCgogICAgICAgIHN0YXRlSG9sZGVyLnNldFVpbnQyNTYoInN0YWtpbmcuMHhhN2UxOTVmZTgwMDgwOTA2MDM2YmNiNmI1NDYwMWMzMzkxMWVkMWYwLnRpZXJzWzFdLm1pbkNhcCIsIDcwMDAwMDAwMDAwMDAwMDAwKTsKICAgICAgICBzdGF0ZUhvbGRlci5zZXRVaW50MjU2KCJzdGFraW5nLjB4YTdlMTk1ZmU4MDA4MDkwNjAzNmJjYjZiNTQ2MDFjMzM5MTFlZDFmMC50aWVyc1sxXS5oYXJkQ2FwIiwgNzUwMDAwMDAwMDAwMDAwMDAwMDApOwogICAgICAgIHN0YXRlSG9sZGVyLnNldFVpbnQyNTYoInN0YWtpbmcuMHhhN2UxOTVmZTgwMDgwOTA2MDM2YmNiNmI1NDYwMWMzMzkxMWVkMWYwLnRpZXJzLmxlbmd0aCIsIDIpOwogICAgfQoKICAgIGZ1bmN0aW9uIG9uU3RvcChhZGRyZXNzKSBwdWJsaWMgewogICAgfQoKICAgIGZ1bmN0aW9uIGxpcXVpZGl0eU1pbmluZ1RyYW5zZmVyKGFkZHJlc3Mgc2VuZGVyLCB1aW50MjU2LCB1aW50MjU2IHZhbHVlLCBhZGRyZXNzIHRva2VuKSBwdWJsaWMgewogICAgICAgIElNVkRQcm94eSBwcm94eSA9IElNVkRQcm94eShtc2cuc2VuZGVyKTsKCiAgICAgICAgcmVxdWlyZShJU3RhdGVIb2xkZXIocHJveHkuZ2V0U3RhdGVIb2xkZXJBZGRyZXNzKCkpLmdldEJvb2woX3RvU3RhdGVIb2xkZXJLZXkoInN0YWtpbmcudHJhbnNmZXIuYXV0aG9yaXplZCIsIF90b1N0cmluZyhzZW5kZXIpKSksICJVbmF1dGhvcml6ZWQgYWN0aW9uISIpOwoKICAgICAgICBwcm94eS50cmFuc2ZlcihzZW5kZXIsIHZhbHVlLCB0b2tlbik7CiAgICB9CgogICAgZnVuY3Rpb24gX3RvU3RhdGVIb2xkZXJLZXkoc3RyaW5nIG1lbW9yeSBhLCBzdHJpbmcgbWVtb3J5IGIpIHByaXZhdGUgcHVyZSByZXR1cm5zKHN0cmluZyBtZW1vcnkpIHsKICAgICAgICByZXR1cm4gX3RvTG93ZXJDYXNlKHN0cmluZyhhYmkuZW5jb2RlUGFja2VkKGEsICIuIiwgYikpKTsKICAgIH0KCiAgICBmdW5jdGlvbiBfdG9TdHJpbmcoYWRkcmVzcyBfYWRkcikgcHJpdmF0ZSBwdXJlIHJldHVybnMoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIGJ5dGVzMzIgdmFsdWUgPSBieXRlczMyKHVpbnQyNTYoX2FkZHIpKTsKICAgICAgICBieXRlcyBtZW1vcnkgYWxwaGFiZXQgPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CgogICAgICAgIGJ5dGVzIG1lbW9yeSBzdHIgPSBuZXcgYnl0ZXMoNDIpOwogICAgICAgIHN0clswXSA9ICcwJzsKICAgICAgICBzdHJbMV0gPSAneCc7CiAgICAgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgMjA7IGkrKykgewogICAgICAgICAgICBzdHJbMitpKjJdID0gYWxwaGFiZXRbdWludCh1aW50OCh2YWx1ZVtpICsgMTJdID4+IDQpKV07CiAgICAgICAgICAgIHN0clszK2kqMl0gPSBhbHBoYWJldFt1aW50KHVpbnQ4KHZhbHVlW2kgKyAxMl0gJiAweDBmKSldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc3RyaW5nKHN0cik7CiAgICB9CgogICAgZnVuY3Rpb24gX3RvTG93ZXJDYXNlKHN0cmluZyBtZW1vcnkgc3RyKSBwcml2YXRlIHB1cmUgcmV0dXJucyhzdHJpbmcgbWVtb3J5KSB7CiAgICAgICAgYnl0ZXMgbWVtb3J5IGJTdHIgPSBieXRlcyhzdHIpOwogICAgICAgIGZvciAodWludCBpID0gMDsgaSA8IGJTdHIubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgYlN0cltpXSA9IGJTdHJbaV0gPj0gMHg0MSAmJiBiU3RyW2ldIDw9IDB4NUEgPyBieXRlczEodWludDgoYlN0cltpXSkgKyAweDIwKSA6IGJTdHJbaV07CiAgICAgICAgfQogICAgICAgIHJldHVybiBzdHJpbmcoYlN0cik7CiAgICB9Cn0KCmludGVyZmFjZSBJTVZEUHJveHkgewogICAgZnVuY3Rpb24gZ2V0VG9rZW4oKSBleHRlcm5hbCB2aWV3IHJldHVybnMoYWRkcmVzcyk7CiAgICBmdW5jdGlvbiBnZXRTdGF0ZUhvbGRlckFkZHJlc3MoKSBleHRlcm5hbCB2aWV3IHJldHVybnMoYWRkcmVzcyk7CiAgICBmdW5jdGlvbiBnZXRNVkRGdW5jdGlvbmFsaXRpZXNNYW5hZ2VyQWRkcmVzcygpIGV4dGVybmFsIHZpZXcgcmV0dXJucyhhZGRyZXNzKTsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyKGFkZHJlc3MgcmVjZWl2ZXIsIHVpbnQyNTYgdmFsdWUsIGFkZHJlc3MgdG9rZW4pIGV4dGVybmFsOwogICAgZnVuY3Rpb24gZmx1c2hUb1dhbGxldChhZGRyZXNzIHRva2VuQWRkcmVzcywgYm9vbCBpczcyMSwgdWludDI1NiB0b2tlbklkKSBleHRlcm5hbDsKfQoKaW50ZXJmYWNlIElNVkRGdW5jdGlvbmFsaXRpZXNNYW5hZ2VyIHsKICAgIGZ1bmN0aW9uIGlzQXV0aG9yaXplZEZ1bmN0aW9uYWxpdHkoYWRkcmVzcyBmdW5jdGlvbmFsaXR5KSBleHRlcm5hbCB2aWV3IHJldHVybnMoYm9vbCk7Cn0KCmludGVyZmFjZSBJU3RhdGVIb2xkZXIgewogICAgZnVuY3Rpb24gZ2V0Qm9vbChzdHJpbmcgY2FsbGRhdGEgdmFyTmFtZSkgZXh0ZXJuYWwgdmlldyByZXR1cm5zIChib29sKTsKICAgIGZ1bmN0aW9uIHNldEJvb2woc3RyaW5nIGNhbGxkYXRhIHZhck5hbWUsIGJvb2wgdmFsKSBleHRlcm5hbCByZXR1cm5zKGJvb2wpOwogICAgZnVuY3Rpb24gc2V0VWludDI1NihzdHJpbmcgY2FsbGRhdGEgdmFyTmFtZSwgdWludDI1NiB2YWwpIGV4dGVybmFsIHJldHVybnModWludDI1Nik7CiAgICBmdW5jdGlvbiBjbGVhcihzdHJpbmcgY2FsbGRhdGEgdmFyTmFtZSkgZXh0ZXJuYWwgcmV0dXJucyhzdHJpbmcgbWVtb3J5IG9sZERhdGFUeXBlLCBieXRlcyBtZW1vcnkgb2xkVmFsKTsKfQoKaW50ZXJmYWNlIElFUkMyMCB7CiAgICBmdW5jdGlvbiBtaW50KHVpbnQyNTYgYW1vdW50KSBleHRlcm5hbDsKICAgIGZ1bmN0aW9uIGJhbGFuY2VPZihhZGRyZXNzIGFjY291bnQpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAodWludDI1Nik7Cn0=
data:text/plain;base64,LyogRGlzY3Vzc2lvbjoKICogaHR0cHM6Ly95a3ouZGZvaHViLmV0aD9lbnNkPXlrei5kZm9odWIuZXRoCiAqLwovKiBEZXNjcmlwdGlvbjoKICogTmV3IFN0YWtpbmcgVHJhbnNmZXIgRnVuY3Rpb25hbGl0eQogKi8KcHJhZ21hIHNvbGlkaXR5IF4wLjcuMzsKCmNvbnRyYWN0IFN0YWtpbmdUcmFuc2ZlckZ1bmN0aW9uYWxpdHkgewoKICAgIHN0cmluZyBwcml2YXRlIF9tZXRhZGF0YUxpbms7CgogICAgY29uc3RydWN0b3Ioc3RyaW5nIG1lbW9yeSBtZXRhZGF0YUxpbmspIHsKICAgICAgICBfbWV0YWRhdGFMaW5rID0gbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE1ldGFkYXRhTGluaygpIHB1YmxpYyB2aWV3IHJldHVybnMoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiBfbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIG9uU3RhcnQoYWRkcmVzcywgYWRkcmVzcykgcHVibGljIHsKICAgICAgICBJTVZEUHJveHkgcHJveHkgPSBJTVZEUHJveHkobXNnLnNlbmRlcik7CiAgICAgICAgSVN0YXRlSG9sZGVyIHN0YXRlSG9sZGVyID0gSVN0YXRlSG9sZGVyKHByb3h5LmdldFN0YXRlSG9sZGVyQWRkcmVzcygpKTsKICAgICAgICBzdGF0ZUhvbGRlci5zZXRCb29sKF90b1N0YXRlSG9sZGVyS2V5KCJzdGFraW5nLnRyYW5zZmVyLmF1dGhvcml6ZWQiLCBfdG9TdHJpbmcoMHg0ZjJCMzRCNDE4MUNFMzI5MTQ3QzE0RjA3NjA3QjRCZDY1Mjc1NUIyKSksIHRydWUpOwogICAgICAgIHN0YXRlSG9sZGVyLnNldFVpbnQyNTYoInN0YWtpbmcuMHg0ZjJiMzRiNDE4MWNlMzI5MTQ3YzE0ZjA3NjA3YjRiZDY1Mjc1NWIyLnRpZXJzWzBdLm1pbkNhcCIsIDEwMDAwMDAwMDAwMDAwMDAwMDApOwogICAgICAgIHN0YXRlSG9sZGVyLnNldFVpbnQyNTYoInN0YWtpbmcuMHg0ZjJiMzRiNDE4MWNlMzI5MTQ3YzE0ZjA3NjA3YjRiZDY1Mjc1NWIyLnRpZXJzWzBdLmhhcmRDYXAiLCAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwKTsKICAgIAoKICAgICAgICBzdGF0ZUhvbGRlci5zZXRVaW50MjU2KCJzdGFraW5nLjB4NGYyYjM0YjQxODFjZTMyOTE0N2MxNGYwNzYwN2I0YmQ2NTI3NTViMi50aWVyc1sxXS5taW5DYXAiLCAyNTAwMDAwMDAwMDAwMDAwMDApOwogICAgICAgIHN0YXRlSG9sZGVyLnNldFVpbnQyNTYoInN0YWtpbmcuMHg0ZjJiMzRiNDE4MWNlMzI5MTQ3YzE0ZjA3NjA3YjRiZDY1Mjc1NWIyLnRpZXJzWzFdLmhhcmRDYXAiLCAyNTAwMDAwMDAwMDAwMDAwMDAwMDApOwogICAgCgogICAgICAgIHN0YXRlSG9sZGVyLnNldFVpbnQyNTYoInN0YWtpbmcuMHg0ZjJiMzRiNDE4MWNlMzI5MTQ3YzE0ZjA3NjA3YjRiZDY1Mjc1NWIyLnRpZXJzWzJdLm1pbkNhcCIsIDEwMDAwMDAwMDAwMDAwMDAwMCk7CiAgICAgICAgc3RhdGVIb2xkZXIuc2V0VWludDI1Nigic3Rha2luZy4weDRmMmIzNGI0MTgxY2UzMjkxNDdjMTRmMDc2MDdiNGJkNjUyNzU1YjIudGllcnNbMl0uaGFyZENhcCIsIDEwMDAwMDAwMDAwMDAwMDAwMDAwMCk7CiAgICAgICAgc3RhdGVIb2xkZXIuc2V0VWludDI1Nigic3Rha2luZy4weDRmMmIzNGI0MTgxY2UzMjkxNDdjMTRmMDc2MDdiNGJkNjUyNzU1YjIudGllcnMubGVuZ3RoIiwgMyk7CiAgICB9CgogICAgZnVuY3Rpb24gb25TdG9wKGFkZHJlc3MpIHB1YmxpYyB7CiAgICB9CgogICAgZnVuY3Rpb24gc3Rha2luZ1RyYW5zZmVyKGFkZHJlc3Mgc2VuZGVyLCB1aW50MjU2LCB1aW50MjU2IHZhbHVlLCBhZGRyZXNzIHJlY2VpdmVyKSBwdWJsaWMgewogICAgICAgIElNVkRQcm94eSBwcm94eSA9IElNVkRQcm94eShtc2cuc2VuZGVyKTsKCiAgICAgICAgcmVxdWlyZShJU3RhdGVIb2xkZXIocHJveHkuZ2V0U3RhdGVIb2xkZXJBZGRyZXNzKCkpLmdldEJvb2woX3RvU3RhdGVIb2xkZXJLZXkoInN0YWtpbmcudHJhbnNmZXIuYXV0aG9yaXplZCIsIF90b1N0cmluZyhzZW5kZXIpKSksICJVbmF1dGhvcml6ZWQgYWN0aW9uISIpOwoKICAgICAgICBwcm94eS50cmFuc2ZlcihyZWNlaXZlciwgdmFsdWUsIHByb3h5LmdldFRva2VuKCkpOwogICAgfQoKICAgIGZ1bmN0aW9uIF90b1N0YXRlSG9sZGVyS2V5KHN0cmluZyBtZW1vcnkgYSwgc3RyaW5nIG1lbW9yeSBiKSBwcml2YXRlIHB1cmUgcmV0dXJucyhzdHJpbmcgbWVtb3J5KSB7CiAgICAgICAgcmV0dXJuIF90b0xvd2VyQ2FzZShzdHJpbmcoYWJpLmVuY29kZVBhY2tlZChhLCAiLiIsIGIpKSk7CiAgICB9CgogICAgZnVuY3Rpb24gX3RvU3RyaW5nKGFkZHJlc3MgX2FkZHIpIHByaXZhdGUgcHVyZSByZXR1cm5zKHN0cmluZyBtZW1vcnkpIHsKICAgICAgICBieXRlczMyIHZhbHVlID0gYnl0ZXMzMih1aW50MjU2KF9hZGRyKSk7CiAgICAgICAgYnl0ZXMgbWVtb3J5IGFscGhhYmV0ID0gIjAxMjM0NTY3ODlhYmNkZWYiOwoKICAgICAgICBieXRlcyBtZW1vcnkgc3RyID0gbmV3IGJ5dGVzKDQyKTsKICAgICAgICBzdHJbMF0gPSAnMCc7CiAgICAgICAgc3RyWzFdID0gJ3gnOwogICAgICAgIGZvciAodWludCBpID0gMDsgaSA8IDIwOyBpKyspIHsKICAgICAgICAgICAgc3RyWzIraSoyXSA9IGFscGhhYmV0W3VpbnQodWludDgodmFsdWVbaSArIDEyXSA+PiA0KSldOwogICAgICAgICAgICBzdHJbMytpKjJdID0gYWxwaGFiZXRbdWludCh1aW50OCh2YWx1ZVtpICsgMTJdICYgMHgwZikpXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHN0cmluZyhzdHIpOwogICAgfQoKICAgIGZ1bmN0aW9uIF90b0xvd2VyQ2FzZShzdHJpbmcgbWVtb3J5IHN0cikgcHJpdmF0ZSBwdXJlIHJldHVybnMoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIGJ5dGVzIG1lbW9yeSBiU3RyID0gYnl0ZXMoc3RyKTsKICAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBiU3RyLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGJTdHJbaV0gPSBiU3RyW2ldID49IDB4NDEgJiYgYlN0cltpXSA8PSAweDVBID8gYnl0ZXMxKHVpbnQ4KGJTdHJbaV0pICsgMHgyMCkgOiBiU3RyW2ldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc3RyaW5nKGJTdHIpOwogICAgfQp9CgppbnRlcmZhY2UgSU1WRFByb3h5IHsKICAgIGZ1bmN0aW9uIGdldFRva2VuKCkgZXh0ZXJuYWwgdmlldyByZXR1cm5zKGFkZHJlc3MpOwogICAgZnVuY3Rpb24gZ2V0U3RhdGVIb2xkZXJBZGRyZXNzKCkgZXh0ZXJuYWwgdmlldyByZXR1cm5zKGFkZHJlc3MpOwogICAgZnVuY3Rpb24gZ2V0TVZERnVuY3Rpb25hbGl0aWVzTWFuYWdlckFkZHJlc3MoKSBleHRlcm5hbCB2aWV3IHJldHVybnMoYWRkcmVzcyk7CiAgICBmdW5jdGlvbiB0cmFuc2ZlcihhZGRyZXNzIHJlY2VpdmVyLCB1aW50MjU2IHZhbHVlLCBhZGRyZXNzIHRva2VuKSBleHRlcm5hbDsKICAgIGZ1bmN0aW9uIGZsdXNoVG9XYWxsZXQoYWRkcmVzcyB0b2tlbkFkZHJlc3MsIGJvb2wgaXM3MjEsIHVpbnQyNTYgdG9rZW5JZCkgZXh0ZXJuYWw7Cn0KCmludGVyZmFjZSBJTVZERnVuY3Rpb25hbGl0aWVzTWFuYWdlciB7CiAgICBmdW5jdGlvbiBpc0F1dGhvcml6ZWRGdW5jdGlvbmFsaXR5KGFkZHJlc3MgZnVuY3Rpb25hbGl0eSkgZXh0ZXJuYWwgdmlldyByZXR1cm5zKGJvb2wpOwp9CgppbnRlcmZhY2UgSVN0YXRlSG9sZGVyIHsKICAgIGZ1bmN0aW9uIGdldEJvb2woc3RyaW5nIGNhbGxkYXRhIHZhck5hbWUpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAoYm9vbCk7CiAgICBmdW5jdGlvbiBzZXRCb29sKHN0cmluZyBjYWxsZGF0YSB2YXJOYW1lLCBib29sIHZhbCkgZXh0ZXJuYWwgcmV0dXJucyhib29sKTsKICAgIGZ1bmN0aW9uIHNldFVpbnQyNTYoc3RyaW5nIGNhbGxkYXRhIHZhck5hbWUsIHVpbnQyNTYgdmFsKSBleHRlcm5hbCByZXR1cm5zKHVpbnQyNTYpOwogICAgZnVuY3Rpb24gY2xlYXIoc3RyaW5nIGNhbGxkYXRhIHZhck5hbWUpIGV4dGVybmFsIHJldHVybnMoc3RyaW5nIG1lbW9yeSBvbGREYXRhVHlwZSwgYnl0ZXMgbWVtb3J5IG9sZFZhbCk7Cn0KCmludGVyZmFjZSBJRVJDMjAgewogICAgZnVuY3Rpb24gbWludCh1aW50MjU2IGFtb3VudCkgZXh0ZXJuYWw7CiAgICBmdW5jdGlvbiBiYWxhbmNlT2YoYWRkcmVzcyBhY2NvdW50KSBleHRlcm5hbCB2aWV3IHJldHVybnMgKHVpbnQyNTYpOwp9
data:text/plain;base64,LyogRGlzY3Vzc2lvbjoKICogaHR0cHM6Ly95a3ouZGZvaHViLmV0aD9lbnNkPXlrei5kZm9odWIuZXRoCiAqLwovKiBEZXNjcmlwdGlvbjoKICogTmV3IFN0YWtpbmcgVHJhbnNmZXIgRnVuY3Rpb25hbGl0eQogKi8KcHJhZ21hIHNvbGlkaXR5IF4wLjcuMzsKCmNvbnRyYWN0IFN0YWtpbmdUcmFuc2ZlckZ1bmN0aW9uYWxpdHkgewoKICAgIHN0cmluZyBwcml2YXRlIF9tZXRhZGF0YUxpbms7CgogICAgY29uc3RydWN0b3Ioc3RyaW5nIG1lbW9yeSBtZXRhZGF0YUxpbmspIHsKICAgICAgICBfbWV0YWRhdGFMaW5rID0gbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE1ldGFkYXRhTGluaygpIHB1YmxpYyB2aWV3IHJldHVybnMoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiBfbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIG9uU3RhcnQoYWRkcmVzcywgYWRkcmVzcykgcHVibGljIHsKICAgICAgICBJTVZEUHJveHkgcHJveHkgPSBJTVZEUHJveHkobXNnLnNlbmRlcik7CiAgICAgICAgSVN0YXRlSG9sZGVyIHN0YXRlSG9sZGVyID0gSVN0YXRlSG9sZGVyKHByb3h5LmdldFN0YXRlSG9sZGVyQWRkcmVzcygpKTsKICAgICAgICBzdGF0ZUhvbGRlci5zZXRCb29sKF90b1N0YXRlSG9sZGVyS2V5KCJzdGFraW5nLnRyYW5zZmVyLmF1dGhvcml6ZWQiLCBfdG9TdHJpbmcoMHgwNUJiNTFDMzFBMDc4MjE5MWE0RTgzRjA1QkJjMTMxQ2I5MDM3MEFBKSksIHRydWUpOwogICAgICAgIHN0YXRlSG9sZGVyLnNldFVpbnQyNTYoInN0YWtpbmcuMHgwNWJiNTFjMzFhMDc4MjE5MWE0ZTgzZjA1YmJjMTMxY2I5MDM3MGFhLnRpZXJzWzBdLm1pbkNhcCIsIDEwMDAwMDAwMDAwMDAwMDAwMDApOwogICAgICAgIHN0YXRlSG9sZGVyLnNldFVpbnQyNTYoInN0YWtpbmcuMHgwNWJiNTFjMzFhMDc4MjE5MWE0ZTgzZjA1YmJjMTMxY2I5MDM3MGFhLnRpZXJzWzBdLmhhcmRDYXAiLCAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwKTsKICAgIAoKICAgICAgICBzdGF0ZUhvbGRlci5zZXRVaW50MjU2KCJzdGFraW5nLjB4MDViYjUxYzMxYTA3ODIxOTFhNGU4M2YwNWJiYzEzMWNiOTAzNzBhYS50aWVyc1sxXS5taW5DYXAiLCAyNTAwMDAwMDAwMDAwMDAwMDApOwogICAgICAgIHN0YXRlSG9sZGVyLnNldFVpbnQyNTYoInN0YWtpbmcuMHgwNWJiNTFjMzFhMDc4MjE5MWE0ZTgzZjA1YmJjMTMxY2I5MDM3MGFhLnRpZXJzWzFdLmhhcmRDYXAiLCAyNTAwMDAwMDAwMDAwMDAwMDAwMDApOwogICAgCgogICAgICAgIHN0YXRlSG9sZGVyLnNldFVpbnQyNTYoInN0YWtpbmcuMHgwNWJiNTFjMzFhMDc4MjE5MWE0ZTgzZjA1YmJjMTMxY2I5MDM3MGFhLnRpZXJzWzJdLm1pbkNhcCIsIDEwMDAwMDAwMDAwMDAwMDAwMCk7CiAgICAgICAgc3RhdGVIb2xkZXIuc2V0VWludDI1Nigic3Rha2luZy4weDA1YmI1MWMzMWEwNzgyMTkxYTRlODNmMDViYmMxMzFjYjkwMzcwYWEudGllcnNbMl0uaGFyZENhcCIsIDEwMDAwMDAwMDAwMDAwMDAwMDAwMCk7CiAgICAgICAgc3RhdGVIb2xkZXIuc2V0VWludDI1Nigic3Rha2luZy4weDA1YmI1MWMzMWEwNzgyMTkxYTRlODNmMDViYmMxMzFjYjkwMzcwYWEudGllcnMubGVuZ3RoIiwgMyk7CiAgICB9CgogICAgZnVuY3Rpb24gb25TdG9wKGFkZHJlc3MpIHB1YmxpYyB7CiAgICB9CgogICAgZnVuY3Rpb24gc3Rha2luZ1RyYW5zZmVyKGFkZHJlc3Mgc2VuZGVyLCB1aW50MjU2LCB1aW50MjU2IHZhbHVlLCBhZGRyZXNzIHJlY2VpdmVyKSBwdWJsaWMgewogICAgICAgIElNVkRQcm94eSBwcm94eSA9IElNVkRQcm94eShtc2cuc2VuZGVyKTsKCiAgICAgICAgcmVxdWlyZShJU3RhdGVIb2xkZXIocHJveHkuZ2V0U3RhdGVIb2xkZXJBZGRyZXNzKCkpLmdldEJvb2woX3RvU3RhdGVIb2xkZXJLZXkoInN0YWtpbmcudHJhbnNmZXIuYXV0aG9yaXplZCIsIF90b1N0cmluZyhzZW5kZXIpKSksICJVbmF1dGhvcml6ZWQgYWN0aW9uISIpOwoKICAgICAgICBwcm94eS50cmFuc2ZlcihyZWNlaXZlciwgdmFsdWUsIHByb3h5LmdldFRva2VuKCkpOwogICAgfQoKICAgIGZ1bmN0aW9uIF90b1N0YXRlSG9sZGVyS2V5KHN0cmluZyBtZW1vcnkgYSwgc3RyaW5nIG1lbW9yeSBiKSBwcml2YXRlIHB1cmUgcmV0dXJucyhzdHJpbmcgbWVtb3J5KSB7CiAgICAgICAgcmV0dXJuIF90b0xvd2VyQ2FzZShzdHJpbmcoYWJpLmVuY29kZVBhY2tlZChhLCAiLiIsIGIpKSk7CiAgICB9CgogICAgZnVuY3Rpb24gX3RvU3RyaW5nKGFkZHJlc3MgX2FkZHIpIHByaXZhdGUgcHVyZSByZXR1cm5zKHN0cmluZyBtZW1vcnkpIHsKICAgICAgICBieXRlczMyIHZhbHVlID0gYnl0ZXMzMih1aW50MjU2KF9hZGRyKSk7CiAgICAgICAgYnl0ZXMgbWVtb3J5IGFscGhhYmV0ID0gIjAxMjM0NTY3ODlhYmNkZWYiOwoKICAgICAgICBieXRlcyBtZW1vcnkgc3RyID0gbmV3IGJ5dGVzKDQyKTsKICAgICAgICBzdHJbMF0gPSAnMCc7CiAgICAgICAgc3RyWzFdID0gJ3gnOwogICAgICAgIGZvciAodWludCBpID0gMDsgaSA8IDIwOyBpKyspIHsKICAgICAgICAgICAgc3RyWzIraSoyXSA9IGFscGhhYmV0W3VpbnQodWludDgodmFsdWVbaSArIDEyXSA+PiA0KSldOwogICAgICAgICAgICBzdHJbMytpKjJdID0gYWxwaGFiZXRbdWludCh1aW50OCh2YWx1ZVtpICsgMTJdICYgMHgwZikpXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHN0cmluZyhzdHIpOwogICAgfQoKICAgIGZ1bmN0aW9uIF90b0xvd2VyQ2FzZShzdHJpbmcgbWVtb3J5IHN0cikgcHJpdmF0ZSBwdXJlIHJldHVybnMoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIGJ5dGVzIG1lbW9yeSBiU3RyID0gYnl0ZXMoc3RyKTsKICAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBiU3RyLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGJTdHJbaV0gPSBiU3RyW2ldID49IDB4NDEgJiYgYlN0cltpXSA8PSAweDVBID8gYnl0ZXMxKHVpbnQ4KGJTdHJbaV0pICsgMHgyMCkgOiBiU3RyW2ldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc3RyaW5nKGJTdHIpOwogICAgfQp9CgppbnRlcmZhY2UgSU1WRFByb3h5IHsKICAgIGZ1bmN0aW9uIGdldFRva2VuKCkgZXh0ZXJuYWwgdmlldyByZXR1cm5zKGFkZHJlc3MpOwogICAgZnVuY3Rpb24gZ2V0U3RhdGVIb2xkZXJBZGRyZXNzKCkgZXh0ZXJuYWwgdmlldyByZXR1cm5zKGFkZHJlc3MpOwogICAgZnVuY3Rpb24gZ2V0TVZERnVuY3Rpb25hbGl0aWVzTWFuYWdlckFkZHJlc3MoKSBleHRlcm5hbCB2aWV3IHJldHVybnMoYWRkcmVzcyk7CiAgICBmdW5jdGlvbiB0cmFuc2ZlcihhZGRyZXNzIHJlY2VpdmVyLCB1aW50MjU2IHZhbHVlLCBhZGRyZXNzIHRva2VuKSBleHRlcm5hbDsKICAgIGZ1bmN0aW9uIGZsdXNoVG9XYWxsZXQoYWRkcmVzcyB0b2tlbkFkZHJlc3MsIGJvb2wgaXM3MjEsIHVpbnQyNTYgdG9rZW5JZCkgZXh0ZXJuYWw7Cn0KCmludGVyZmFjZSBJTVZERnVuY3Rpb25hbGl0aWVzTWFuYWdlciB7CiAgICBmdW5jdGlvbiBpc0F1dGhvcml6ZWRGdW5jdGlvbmFsaXR5KGFkZHJlc3MgZnVuY3Rpb25hbGl0eSkgZXh0ZXJuYWwgdmlldyByZXR1cm5zKGJvb2wpOwp9CgppbnRlcmZhY2UgSVN0YXRlSG9sZGVyIHsKICAgIGZ1bmN0aW9uIGdldEJvb2woc3RyaW5nIGNhbGxkYXRhIHZhck5hbWUpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAoYm9vbCk7CiAgICBmdW5jdGlvbiBzZXRCb29sKHN0cmluZyBjYWxsZGF0YSB2YXJOYW1lLCBib29sIHZhbCkgZXh0ZXJuYWwgcmV0dXJucyhib29sKTsKICAgIGZ1bmN0aW9uIHNldFVpbnQyNTYoc3RyaW5nIGNhbGxkYXRhIHZhck5hbWUsIHVpbnQyNTYgdmFsKSBleHRlcm5hbCByZXR1cm5zKHVpbnQyNTYpOwogICAgZnVuY3Rpb24gY2xlYXIoc3RyaW5nIGNhbGxkYXRhIHZhck5hbWUpIGV4dGVybmFsIHJldHVybnMoc3RyaW5nIG1lbW9yeSBvbGREYXRhVHlwZSwgYnl0ZXMgbWVtb3J5IG9sZFZhbCk7Cn0KCmludGVyZmFjZSBJRVJDMjAgewogICAgZnVuY3Rpb24gbWludCh1aW50MjU2IGFtb3VudCkgZXh0ZXJuYWw7CiAgICBmdW5jdGlvbiBiYWxhbmNlT2YoYWRkcmVzcyBhY2NvdW50KSBleHRlcm5hbCB2aWV3IHJldHVybnMgKHVpbnQyNTYpOwp9
data:text/plain;base64,LyogRGVzY3JpcHRpb246CiAqIERGTyBIdWIgLSBVdGlsaXRpZXMgLSBHZXQgVm90ZXMgSGFyZCBDYXAKICogSWYgYSBwcm9wb3NhbCByZWFjaGVzIGEgZml4ZWQgbnVtYmVyIG9mIHZvdGluZyB0b2tlbnMgKGV4YW1wbGUgdGhlIDkwJSBvZiB0aGUgdG90YWwgVG9rZW4gc3VwcGx5KSBmb3IgIkFwcHJvdmUiIG9yICJEaXNhcHByb3ZlIiBpdCwgdGhlIHByb3Bvc2FsIGF1dG9tYXRpY2FsbHkgZW5kcywgaW5kZXBlbmRlbnRseSBmcm9tIHRoZSBkdXJhdGlvbiBydWxlLgogKi8KLyogVXBkYXRlOgogKiBTZXR0aW5nIFZvdGVzIEhhcmQgQ2FwIHZhbHVlIHRvIDIyNTAgWUVWTwogKi8KcHJhZ21hIHNvbGlkaXR5IF4wLjcuMjsKCmNvbnRyYWN0IERGT0h1YkdlbmVyYXRlZFByb3Bvc2FsIHsKCiAgICBzdHJpbmcgcHJpdmF0ZSBfbWV0YWRhdGFMaW5rOwoKICAgIGNvbnN0cnVjdG9yKHN0cmluZyBtZW1vcnkgbWV0YWRhdGFMaW5rKSB7CiAgICAgICAgX21ldGFkYXRhTGluayA9IG1ldGFkYXRhTGluazsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRNZXRhZGF0YUxpbmsoKSBwdWJsaWMgdmlldyByZXR1cm5zKHN0cmluZyBtZW1vcnkpIHsKICAgICAgICByZXR1cm4gX21ldGFkYXRhTGluazsKICAgIH0KCiAgICBmdW5jdGlvbiBvblN0YXJ0KGFkZHJlc3MgbmV3U3VydmV5LCBhZGRyZXNzIG9sZFN1cnZleSkgcHVibGljIHsKICAgIH0KCiAgICBmdW5jdGlvbiBvblN0b3AoYWRkcmVzcyBuZXdTdXJ2ZXkpIHB1YmxpYyB7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0Vm90ZXNIYXJkQ2FwKCkgcHVibGljIHZpZXcgcmV0dXJucyh1aW50MjU2KSB7CiAgICAgICAgcmV0dXJuIDIyNTAwMDAwMDAwMDAwMDAwMDAwMDA7CiAgICB9Cn0=
data:text/plain;base64,LyogRGVzY3JpcHRpb246CiAqIFRyYW5zZmVyaW5nIHRvdGFsbHkgMjQzLjM0IFlFVk8gdG8gc3BlY2lmaWVkIGFkZHJlc3NlcwogKi8KcHJhZ21hIHNvbGlkaXR5IF4wLjcuMjsKCmNvbnRyYWN0IERGT0h1YkdlbmVyYXRlZFByb3Bvc2FsIHsKCiAgICBzdHJpbmcgcHJpdmF0ZSBfbWV0YWRhdGFMaW5rOwoKICAgIGNvbnN0cnVjdG9yKHN0cmluZyBtZW1vcnkgbWV0YWRhdGFMaW5rKSB7CiAgICAgICAgX21ldGFkYXRhTGluayA9IG1ldGFkYXRhTGluazsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRNZXRhZGF0YUxpbmsoKSBwdWJsaWMgdmlldyByZXR1cm5zKHN0cmluZyBtZW1vcnkpIHsKICAgICAgICByZXR1cm4gX21ldGFkYXRhTGluazsKICAgIH0KCiAgICBmdW5jdGlvbiBjYWxsT25lVGltZShhZGRyZXNzIHByb3Bvc2FsKSBwdWJsaWMgewogICAgICAgIElNVkRQcm94eSBwcm94eSA9IElNVkRQcm94eShtc2cuc2VuZGVyKTsKICAgICAgICBwcm94eS50cmFuc2ZlcigweDhFN2M4NjljM2VBNTVGNDcwMTgyNjQ5NENDODNkMTU4ODVDMDZERjYsIDY2NjcwMDAwMDAwMDAwMDAwMDAwLCAweDEyZTAzM0NlNjlmNTM1NDM2YTRCZTcyZjRiREZENmU2Nzk1YmE5NDMpOwogICAgICAgIHByb3h5LnRyYW5zZmVyKDB4NzFGOUNDZDY4YmYxZjVGOWI1NzFmNTA5RTA3NjVBMDRjYTRmRmFkMiwgNjY2NzAwMDAwMDAwMDAwMDAwMDAsIDB4MTJlMDMzQ2U2OWY1MzU0MzZhNEJlNzJmNGJERkQ2ZTY3OTViYTk0Myk7CiAgICAgICAgcHJveHkudHJhbnNmZXIoMHg2OWVGNjFBRmMzQUEzNTZlMWFjOTczNDcxMTlkNzVjQmRBYkVGNTM0LCAyMzcyMDAwMDAwMDAwMDAwMDAwMCwgMHgxMmUwMzNDZTY5ZjUzNTQzNmE0QmU3MmY0YkRGRDZlNjc5NWJhOTQzKTsKICAgICAgICBwcm94eS50cmFuc2ZlcigweGIyMTk3NTU4RGE1NkQzNTcwOTc5N0MwODQxOEQ1QjIzODMyNkEyOUMsIDY5NjEwMDAwMDAwMDAwMDAwMDAwLCAweDEyZTAzM0NlNjlmNTM1NDM2YTRCZTcyZjRiREZENmU2Nzk1YmE5NDMpOwogICAgICAgIHByb3h5LnRyYW5zZmVyKDB4ZDNGMTI3NmM4MUYwOEFhMzY1OEYxM2M3QjEyYTM1NTgwNzRCQjY0ZSwgMTY2NzAwMDAwMDAwMDAwMDAwMDAsIDB4MTJlMDMzQ2U2OWY1MzU0MzZhNEJlNzJmNGJERkQ2ZTY3OTViYTk0Myk7CiAgICB9Cn0KCmludGVyZmFjZSBJTVZEUHJveHkgewogICAgZnVuY3Rpb24gdHJhbnNmZXIoYWRkcmVzcyByZWNlaXZlciwgdWludDI1NiB2YWx1ZSwgYWRkcmVzcyB0b2tlbikgZXh0ZXJuYWw7CiAgICBmdW5jdGlvbiB0cmFuc2ZlcjcyMShhZGRyZXNzIHJlY2VpdmVyLCB1aW50MjU2IHRva2VuSWQsIGJ5dGVzIGNhbGxkYXRhIGRhdGEsIGJvb2wgc2FmZSwgYWRkcmVzcyB0b2tlbikgZXh0ZXJuYWw7Cn0=
1-50 of 249