Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:网页插件¥js_url¥global_Pornhub增强@base64://Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICBQb3JuaHViIOWinuW8ugovLyBAaWNvbiAgICAgICAgIGRhdGE6aW1hZ2UveC1pY29uO2Jhc2U2NCxBQUFCQUFFQUVCQUFBQUVBQ0FCb0JRQUFGZ0FBQUNnQUFBQVFBQUFBSUFBQUFBRUFDQUFBQUFBQUFBRUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBQUFBQUJvckFBQUNBd0FBd1A4QUFHKzVBQUEwVmdBQVVZa0FBSW5rQUFBL2FRQUFNRkVBQUpmL0FBQlpsQUFBbXY4QUFHU25BQUFhTEFBQUVSd0FBS1AvQUFCSFpBQUFCQWNBQUMweEFBQ3Avd0FBclA4QUFMTC9BQUJEY0FBQWJvd0FBSS91QUFBS0VBQUFodDRBQUx2L0FBQXRTd0FBaU9FQUFJM3NBQUNWL3dBQW1QOEFBSnYvQUFBQkFRQUFudjhBQUhySEFBQmxwd0FBLy84QUFORC9BQUNoL3dBQWlPSUFBQzlQQUFCcXNnQUFwUDhBQUVWa0FBQkplZ0FBcC84QUFERlNBQUNxL3dBQUdTb0FBQUVDQUFDdC93QUFNMVVBQUlqakFBQSthQUFBZmNnQUFMYi9BQUFkTUFBQVQ0TUFBRHBqQUFCQWF3QUF1ZjhBQUFzUUFBQy8vd0FBQUFZQUFNTC9BQUFEQmdBQUNRNEFBTVgvQUFDVy93QUFtZjhBQURkY0FBQ2Mvd0FBbi84QUFCQWNBQUJSaHdBQW92OEFBSVhkQUFEWC93QUFxUDhBQUt2L0FBQ1E4QUFBV0kwQUFDNU5BQUN4L3dBQUlFTUFBTFQvQUFDRjNnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVNFaElTRWhJU0VoSVNFaElTRWhJU0VoSVNFaElTRWhJU0VoSVNFaElTRWhJU0F4SVNFaElTQ0lpU0VnTUlraElDa3BXTFNCSUlVZzFNRWNnRURVaUNrNFpDQVFVU0NRaU1Ud1VOUTB4SHhCU1R3QXZRMHNRU2dBeldCdzRBRmt5VVNvQUJqcE9QeWtBTmloUUN3QTNVVkVIQWpSQ1JWUXlEMHd1RVRzMEIxRlJOeU5WR0FrQUpoMENHa0FTQWdkUlVSNEFMQ2RPQUQwQlZVRkdUUUEzVVZJYkFFUVRBQUE1QUE0L0F6NEFXVEpPVXhjRlYwa2xOU3M4RkRVTk1SOFFDa29XRmhaWU5TRVZNRWNnRURVaUNraElEQXdNU0VoSUlpSklTQXdpU0VoSVNFaElTRWhJU0VoSVNFaElTRWhJU0VoSVNFaElTRWhJU0VoSVNFaElTQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE9Ci8vIEBuYW1lc3BhY2UgICAgZ2l0aHViLmNvbS9obWp6MTAwCi8vIEB2ZXJzaW9uICAgICAgMC4xLjYKLy8gQGRlc2NyaXB0aW9uICDjgIrkuZ/orrjlkIznsbvlnovkuK3mnIDlpb3nlKjvvJ/jgIvns7vliJcgLSBQb3JuaHViIOinhumikeabv+aNoiBBcnRwbGF5ZXLvvIzkuI3mmL7npLrop4bpopHlub/lkYrvvIzmlK/mjIHov5vluqbmnaHng63lipvlm77vvIzmmL7npLrop4bpopHlpJrliIbovqjnjocgbTN1OC9tcDQg5LiL6L296ZO+5o6l77yM5Y+v55u05o6l5LiL6L29IOWFjei0uS/ku5jotLkv56aB5LiLIOeahOinhumikQovLyBAYXV0aG9yICAgICAgIGhtanoxMDAsbGl1d2FubGluCi8vIEBsaWNlbnNlICAgICAgTUlUCi8vIEBtYXRjaCAgICAgICAgKjovLyoucG9ybmh1Yi5vcmcvdmlld192aWRlby5waHA/dmlld2tleT0qCi8vIEBtYXRjaCAgICAgICAgKjovLyoucG9ybmh1Yi5jb20vdmlld192aWRlby5waHA/dmlld2tleT0qCi8vIEBtYXRjaCAgICAgICAgKjovLyoucG9ybmh1YnByZW1pdW0uY29tL3ZpZXdfdmlkZW8ucGhwP3ZpZXdrZXk9KgovLyBAbWF0Y2ggICAgICAgICo6Ly8qLyovaHZ0cnM4JTJGLWNsLnJvcG5qdSU2MC5hb28lMkZ0aWd3JTVEdmtkZ28lMkNwanAlM0R2a2V1a2d5JTNGKgovLyBAZ3JhbnQgICAgICAgIHVuc2FmZVdpbmRvdwovLyBAZ3JhbnQgICAgICAgIEdNX2FkZFN0eWxlCi8vIEBncmFudCAgICAgICAgR01fc2V0Q2xpcGJvYXJkCi8vIEBjb25uZWN0ICAgICAgKi5wb3JuaHViLm9yZwovLyBAY29ubmVjdCAgICAgICoucG9ybmh1Yi5jb20KLy8gQGNvbm5lY3QgICAgICAqLnBvcm5odWJwcmVtaXVtLmNvbQovLyBAY29ubmVjdCAgICAgICoucGhuY2RuLmNvbQovLyBAcmVxdWlyZSAgICAgIGh0dHBzOi8vdW5wa2cuY29tL2pxdWVyeUAzLjYuMy9kaXN0L2pxdWVyeS5taW4uanMKLy8gQHJlcXVpcmUgICAgICBodHRwczovL3VucGtnLmNvbS9obHMuanNAMS41LjEwL2Rpc3QvaGxzLm1pbi5qcwovLyBAcmVxdWlyZSAgICAgIGh0dHBzOi8vdW5wa2cuY29tL2FydHBsYXllckA1LjEuNi9kaXN0L2FydHBsYXllci5sZWdhY3kuanMKLy8gQGRvd25sb2FkVVJMIGh0dHBzOi8vdXBkYXRlLnNsZWF6eWZvcmsub3JnL3NjcmlwdHMvNTAxNTM3L1Bvcm5odWIlMjAlRTUlQTIlOUUlRTUlQkMlQkEudXNlci5qcwovLyBAdXBkYXRlVVJMIGh0dHBzOi8vdXBkYXRlLnNsZWF6eWZvcmsub3JnL3NjcmlwdHMvNTAxNTM3L1Bvcm5odWIlMjAlRTUlQTIlOUUlRTUlQkMlQkEubWV0YS5qcwovLyA9PS9Vc2VyU2NyaXB0PT0KCihmdW5jdGlvbiAoKSB7CgkndXNlIHN0cmljdCc7CgoJd2FpdEZvcktleUVsZW1lbnRzKCJib2R5IGRpdi5ib3R0b21OYXYiLCBmdW5jdGlvbiAoZWxlbWVudCkgewoJCWNvbnNvbGUubG9nKGVsZW1lbnQpCgkJZWxlbWVudC5mYWRlVG9nZ2xlKCkKCX0pCgoJLy8g5pqC5YGc5Y6f5aeL5pKt5pS+5Zmo55qE5pKt5pS+77yM6YG/5YWN5pu/5o2i5ZCO5rKh5rOV5pqC5YGcCgl3YWl0Rm9yS2V5RWxlbWVudHMoImRpdi5tZ3BfdmlkZW9XcmFwcGVyIHZpZGVvIiwgZnVuY3Rpb24gKGVsZW1lbnQpIHsKCQlzZXRJbnRlcnZhbCgoKSA9PiB7CgkJCWVsZW1lbnRbMF0ucGF1c2UoKQoJCX0sIDEpCgl9KQoKCS8vIOWIoOmZpOmhtemdoiBpZnJhbWUg5bm/5ZGKCgl3YWl0Rm9yS2V5RWxlbWVudHMoImlmcmFtZVthbGxvd3RyYW5zcGFyZW5jeV1bZGF0YS1lbWJlZGRlZGFkc11bZGF0YS1zcG90LWlkXSIsIGZ1bmN0aW9uIChlbGVtZW50KSB7CgkJZnVuY3Rpb24gZmluZFBhcmVudFdpdGhDbGFzcyhlbCkgewoJCQlpZiAoZWwubGVuZ3RoID4gMCkgewoJCQkJaWYgKGVsLnBhcmVudCgpLmF0dHIoImNsYXNzIikpIHsKCQkJCQlpZiAoZWwucGFyZW50KCkuYXR0cigncmVtb3ZlZCcpKSByZXR1cm47CgkJCQkJZWwucGFyZW50KCkuYXR0cigncmVtb3ZlZCcsIHRydWUpOwoJCQkJCWNvbnNvbGUubG9nKGDjgJBQb3JuaHVi5aKe5by644CRQURcbmAsIGVsLnBhcmVudCgpLmF0dHIoImNsYXNzIiksICLmnIljbGFzc++8jOmakOiXj++8gSIpCgkJCQkJZWwucGFyZW50KCkuZmFkZVRvZ2dsZSgpOwoJCQkJfSBlbHNlIHsKCQkJCQljb25zb2xlLmxvZyhg44CQUG9ybmh1YuWinuW8uuOAkUFEXG5gLCAi5rKh5pyJY2xhc3PvvIznu6fnu63mn6Xmib4uLi4iKQoJCQkJCWZpbmRQYXJlbnRXaXRoQ2xhc3MoZWwucGFyZW50KCkpOwoJCQkJfQoJCQl9CgkJfQoJCWZpbmRQYXJlbnRXaXRoQ2xhc3MoZWxlbWVudCk7Cgl9KQoKCS8vIOetieW+hemhtemdouS/oeaBr+WHuueOsAoJbGV0IGZsYXNodmFyc1JlcXVpcmVUaW1lciA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHsKCQlsZXQgZmxhc2h2YXJzID0ge307CgkJZm9yIChsZXQgcHJvcCBpbiB1bnNhZmVXaW5kb3cpIHsKCQkJaWYgKHByb3Auc3RhcnRzV2l0aCgnZmxhc2h2YXJzXycpKSB7CgkJCQljbGVhckludGVydmFsKGZsYXNodmFyc1JlcXVpcmVUaW1lcikKCQkJCWZsYXNodmFycyA9IHVuc2FmZVdpbmRvd1twcm9wXTsKCQkJfSBlbHNlIGNvbnRpbnVlCgkJfQoJCWlmICghZmxhc2h2YXJzLmxlbmd0aCAmJiAhZmxhc2h2YXJzLm1lZGlhRGVmaW5pdGlvbnMpIHJldHVybjsKCgkJR01fYWRkU3R5bGUoYAoJCQlhLCBidXR0b24sIHVsIGxpLCB1aSwgbGFiZWwsIGlucHV0LCBzZWxlY3QgewoJCQkJdHJhbnNpdGlvbjogYWxsIDAuMjVzICFpbXBvcnRhbnQ7CgkJCQktd2Via2l0LXRyYW5zaXRpb246IGFsbCAwLjI1cyAhaW1wb3J0YW50OwoJCQl9CgkJCS5uby1zY3JvbGwgewoJCQkJb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50OwoJCQl9CgkJCS5kb3dubG9hZC11cmxzIHVsIHsKCQkJCXBhZGRpbmc6IDAgMTBweCAxNXB4OwoJCQkJZm9udC13ZWlnaHQ6IGJvbGQ7CgkJCQlsaW5lLWhlaWdodDogMS41OwoJCQl9CgkJCS5kb3dubG9hZC11cmxzIHVsIGxpIHsKCQkJCWRpc3BsYXk6IGZsZXg7CgkJCQlhbGlnbi1pdGVtczogY2VudGVyOwoJCQkJaGVpZ2h0OiBhdXRvOwoJCQl9CgkJCS5kb3dubG9hZC11cmwubGFiZWwgewoJCQkJd2lkdGg6IDEwJTsKCQkJCXRleHQtYWxpZ246IGNlbnRlcjsKCQkJfQoJCQkuZG93bmxvYWQtdXJsIHsKCQkJCXdpZHRoOiA1JTsKCQkJCXRleHQtYWxpZ246IGNlbnRlcjsKCQkJfQoJCQkuZG93bmxvYWQtdXJsLmRvd25sb2FkIHsKCQkJCWJvcmRlcjogbm9uZTsKCQkJCWJvcmRlci1yYWRpdXM6IDVweDsKCQkJCWZvbnQtc2l6ZTogMTJweDsKCQkJCWJhY2tncm91bmQ6ICNmZjkwMDA7CgkJCQljb2xvcjogI2ZmZjsKCQkJfQoJCQkuZG93bmxvYWQtdXJsLmRvd25sb2FkOmhvdmVyLCAuZG93bmxvYWQtdXJsLmRvd25sb2FkOmRpc2FibGVkIHsKCQkJCWJhY2tncm91bmQ6ICNmZjkwMDBEMDsKCQkJfQoJCQkuZG93bmxvYWQtdXJsLmlucHV0IHsKCQkJCXdpZHRoOiA4MCU7CgkJCQlmb250LXNpemU6IDEycHg7CgkJCQlwYWRkaW5nOiAwIDVweDsKCQkJCWJvcmRlcjogMXB4IHNvbGlkICNmZmY7CgkJCQltYXJnaW46IDAgNXB4OwoJCQl9CgkJCS5hcnQtY29udGV4dG1lbnUgc3ZnLCAuYXJ0LWNvbnRleHRtZW51IGltZyB7CgkJCQl2ZXJ0aWNhbC1hbGlnbjogdG9wOwoJCQkJbWFyZ2luLXJpZ2h0OiA1cHgKCQkJfQoJCQloZWFkZXIgewoJCQkJei1pbmRleDogOTk5OTk5OTk5OTk5ICFpbXBvcnRhbnQ7CgkJCX0KCQlgKTsKCgkJY29uc29sZS5sb2coYOOAkFBvcm5odWLlop7lvLrjgJFpbmZvXG5gLCBmbGFzaHZhcnMpOwoKCQlsZXQgZGF0YSA9IHsKCQkJaWQ6IGZsYXNodmFycy5saW5rX3VybCwKCQkJdGl0bGU6IGZsYXNodmFycy52aWRlb190aXRsZSwKCQkJdXJsOiBudWxsLAoJCQlobHM6IFtdLAoJCQltcDQ6IFtdLAoJCQl0aXRsZTogZmxhc2h2YXJzLnZpZGVvX3RpdGxlLAoJCQljb3ZlcjogZmxhc2h2YXJzLmltYWdlX3VybCwKCQkJaG90c3BvdHM6IGZsYXNodmFycy5ob3RzcG90cwoJCX0KCQlsZXQgbWF4UXVhbGl0eSA9IG51bGw7CgkJbGV0IHByb21pc2VzID0gW107CgoJCWZsYXNodmFycy5tZWRpYURlZmluaXRpb25zLmZvckVhY2goaXRlbSA9PiB7CgkJCWlmIChpdGVtLmZvcm1hdCA9PT0gJ2hscycpIHsKCQkJCWxldCBxdWFsaXR5ID0gTnVtYmVyKGl0ZW0ucXVhbGl0eSk7CgkJCQlpZiAobWF4UXVhbGl0eSA9PT0gbnVsbCB8fCBxdWFsaXR5ID4gbWF4UXVhbGl0eSkgewoJCQkJCW1heFF1YWxpdHkgPSBxdWFsaXR5OwoJCQkJfQoJCQkJbGV0IHZpZGVvID0gewoJCQkJCSJ1cmwiOiBpdGVtLnZpZGVvVXJsLAoJCQkJCSJodG1sIjogcXVhbGl0eSA8PSAxMDgwID8gYCR7cXVhbGl0eX1QYCA6IHF1YWxpdHkgPD0gMTQ0MCA/IGAyS2AgOiBxdWFsaXR5IDw9IDIxNjAgPyBgNEtgIDogYCR7cXVhbGl0eX1QYCwKCQkJCQkicXVhbGl0eSI6IHF1YWxpdHkKCQkJCX07CgkJCQlkYXRhLmhscy5wdXNoKHZpZGVvKTsKCQkJfSBlbHNlIGlmIChpdGVtLmZvcm1hdCA9PT0gJ21wNCcpIHsKCQkJCWxldCB1cmwgPSBuZXcgVVJMKGl0ZW0udmlkZW9VcmwpCgkJCQlpZiAobG9jYXRpb24uaG9zdC5pbmNsdWRlcygicG9ybmh1YiIpKSB1cmwuaG9zdCA9IGxvY2F0aW9uLmhvc3QKCQkJCWxldCBwcm9taXNlID0gdW5zYWZlV2luZG93LmZldGNoKHVybC50b1N0cmluZygpKQoJCQkJCS50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmpzb24oKSkKCQkJCQkudGhlbihyZXMgPT4gewoJCQkJCQlyZXMuZm9yRWFjaChpdGVtID0+IHsKCQkJCQkJCWxldCBxdWFsaXR5ID0gTnVtYmVyKGl0ZW0ucXVhbGl0eSk7CgkJCQkJCQlpZiAobWF4UXVhbGl0eSA9PT0gbnVsbCB8fCBxdWFsaXR5ID4gbWF4UXVhbGl0eSkgewoJCQkJCQkJCW1heFF1YWxpdHkgPSBxdWFsaXR5OwoJCQkJCQkJfQoJCQkJCQkJbGV0IHZpZGVvID0gewoJCQkJCQkJCSJ1cmwiOiBpdGVtLnZpZGVvVXJsLAoJCQkJCQkJCSJodG1sIjogcXVhbGl0eSA8PSAxMDgwID8gYCR7cXVhbGl0eX1QYCA6IHF1YWxpdHkgPD0gMTQ0MCA/IGAyS2AgOiBxdWFsaXR5IDw9IDIxNjAgPyBgNEtgIDogYCR7cXVhbGl0eX1QYCwKCQkJCQkJCQkicXVhbGl0eSI6IHF1YWxpdHkKCQkJCQkJCX07CgkJCQkJCQlkYXRhLm1wNC5wdXNoKHZpZGVvKTsKCQkJCQkJfSk7CgkJCQkJfSkKCQkJCQkuY2F0Y2goZXJyb3IgPT4gewoJCQkJCQljb25zb2xlLmVycm9yKCdGZXRjaCDlj5HnlJ/plJnor686JywgZXJyb3IpOwoJCQkJCX0pOwoKCQkJCXByb21pc2VzLnB1c2gocHJvbWlzZSk7IC8vIOWwhiBQcm9taXNlIOWtmOWFpeaVsOe7hAoJCQl9CgkJfSk7CgkJZGF0YS5obHMuc29ydCgoYSwgYikgPT4gKGIucXVhbGl0eSB8fCAwKSAtIChhLnF1YWxpdHkgfHwgMCkpOwoJCWRhdGEuaGxzLmZvckVhY2godXJsID0+IHsKCQkJaWYgKHVybC5xdWFsaXR5ID09PSBtYXhRdWFsaXR5KSB7CgkJCQl1cmwuZGVmYXVsdCA9IHRydWU7CgkJCQlkYXRhLnVybCA9IHVybC51cmwKCQkJfQoJCX0pOwoKCQl3YWl0Rm9yS2V5RWxlbWVudHMoImRpdi52aWRlby13cmFwcGVyIGRpdiNwbGF5ZXIiLCBmdW5jdGlvbiAoZWxlbWVudCkgewoJCQlsZXQgcGxheWVyID0gJCgnPGRpdiBjbGFzcz0iaW5kZXgtbW9kdWxlX2FydC1wbGF5ZXIiIHN0eWxlPSJvdmVyZmxvdzogaGlkZGVuOyBhc3BlY3QtcmF0aW86IDE2Lzk7IGJvcmRlci1yYWRpdXM6IDEwcHg7Ij48L2Rpdj4nKQoJCQllbGVtZW50LmFmdGVyKHBsYXllcik7CgkJCWVsZW1lbnQuZmFkZVRvZ2dsZSgpOwoJCQlwbGF5KGRhdGEuaWQsIGRhdGEudXJsLCBkYXRhLmhscywgZGF0YS5jb3ZlciwgKGFydCkgPT4gewoJCQkJYXJ0LmNvbnRyb2xzLmFkZCh7CgkJCQkJbmFtZTogJ2hpZGVMaXN0JywKCQkJCQlpbmRleDogNTAsCgkJCQkJcG9zaXRpb246ICdyaWdodCcsCgkJCQkJaHRtbDogJzxpIGNsYXNzPSJhcnQtaWNvbiI+PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxMTUyIDEwMjQiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xMDc1LjIgMEg3Ni44QTc2LjggNzYuOCAwIDAgMCAwIDc2Ljh2ODcwLjRhNzYuOCA3Ni44IDAgMCAwIDc2LjggNzYuOGg5OTguNGE3Ni44IDc2LjggMCAwIDAgNzYuOC03Ni44Vjc2LjhBNzYuOCA3Ni44IDAgMCAwIDEwNzUuMiAwek0xMDI0IDEyOHY3NjhIMTI4VjEyOGg4OTZ6bS01NzYiPjwvcGF0aD48L3N2Zz48L2k+JywKCQkJCQl0b29sdGlwOiAn5a695bGP5qih5byPJywKCQkJCQljbGljazogZnVuY3Rpb24gKCkgewoJCQkJCQkkKCcjaGQtcmlnaHRDb2xWaWRlb1BhZ2UnKS5mYWRlVG9nZ2xlKCk7CgkJCQkJCWlmICgkKCcjdnBDb250ZW50Q29udGFpbmVyJykuYXR0cigic3R5bGUiKSkgewoJCQkJCQkJJCgnI3ZwQ29udGVudENvbnRhaW5lcicpLnJlbW92ZUF0dHIoInN0eWxlIik7CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkKCcjdnBDb250ZW50Q29udGFpbmVyJykuY3NzKHsgImdyaWQtdGVtcGxhdGUtY29sdW1ucyI6ICJhdXRvIiB9KTsKCQkJCQkJfQoJCQkJCX0KCQkJCX0pCgkJCQlhcnQub24oJ2Z1bGxzY3JlZW4nLCAoKSA9PiB7CgkJCQkJJCgnaGVhZGVyJykuZmFkZVRvZ2dsZSgpOwoJCQkJCSQoYXJ0LmNvbnRyb2xzLmZ1bGxzY3JlZW5XZWIpLnRvZ2dsZSgpOwoJCQkJCSQoYXJ0LmNvbnRyb2xzLmhpZGVMaXN0KS50b2dnbGUoKTsKCQkJCX0pOwoJCQkJYXJ0Lm9uKCdmdWxsc2NyZWVuV2ViJywgKCkgPT4gewoJCQkJCSQoYXJ0LmNvbnRyb2xzLmZ1bGxzY3JlZW4pLnRvZ2dsZSgpOwoJCQkJCSQoYXJ0LmNvbnRyb2xzLmhpZGVMaXN0KS50b2dnbGUoKTsKCQkJCX0pOwoJCQkJaWYgKGRhdGEuaG90c3BvdHMpIHsKCQkJCQkvLyDlubPmu5Hlh73mlbDvvIzkvb/nlKjnroDljZXnmoTnp7vliqjlubPlnYcKCQkJCQlmdW5jdGlvbiBzbW9vdGhEYXRhKGRhdGEsIHdpbmRvd1NpemUpIHsKCQkJCQkJdmFyIHNtb290aGVkID0gW107CgkJCQkJCWZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykgewoJCQkJCQkJbGV0IHN1bSA9IDA7CgkJCQkJCQlsZXQgY291bnQgPSAwOwoJCQkJCQkJZm9yIChsZXQgaiA9IE1hdGgubWF4KDAsIGkgLSB3aW5kb3dTaXplKTsgaiA8PSBNYXRoLm1pbihkYXRhLmxlbmd0aCAtIDEsIGkgKyB3aW5kb3dTaXplKTsgaisrKSB7CgkJCQkJCQkJc3VtICs9IGRhdGFbal07CgkJCQkJCQkJY291bnQrKzsKCQkJCQkJCX0KCQkJCQkJCXNtb290aGVkLnB1c2goc3VtIC8gY291bnQpOwoJCQkJCQl9CgkJCQkJCXJldHVybiBzbW9vdGhlZDsKCQkJCQl9CgoJCQkJCWxldCBob3RzcG90cyA9IHNtb290aERhdGEoZGF0YS5ob3RzcG90cy5zbGljZSg1KSwgMik7CgoJCQkJCXZhciBzdmdXaWR0aCA9IDEwMDA7CgkJCQkJdmFyIHN2Z0hlaWdodCA9IDEwMDsKCQkJCQl2YXIgbWF4ID0gTWF0aC5tYXgoLi4uaG90c3BvdHMpOwoKCQkJCQlsZXQgcG9pbnRzID0gYDAsJHtzdmdIZWlnaHR9IGA7IC8vIOS7juW3puS4i+inkuW8gOWniwoJCQkJCWhvdHNwb3RzLmZvckVhY2goKHZhbHVlLCBpbmRleCkgPT4gewoJCQkJCQl2YXIgeCA9IChpbmRleCAvIChob3RzcG90cy5sZW5ndGggLSAxKSkgKiBzdmdXaWR0aDsKCQkJCQkJdmFyIHkgPSBzdmdIZWlnaHQgLSAodmFsdWUgLyBtYXgpICogc3ZnSGVpZ2h0OwoJCQkJCQlwb2ludHMgKz0gYCR7eH0sJHt5fSBgOwoJCQkJCX0pOwoJCQkJCXBvaW50cyArPSBgJHtzdmdXaWR0aH0sJHtzdmdIZWlnaHR9YDsgLy8g5Yiw5Y+z5LiL6KeSCgkJCQkJJChhcnQudGVtcGxhdGUuJGxheWVyKS5jc3MoeyAiei1pbmRleCI6ICI2MSIgfSkKCQkJCQkkKGFydC50ZW1wbGF0ZS4kcHJvZ3Jlc3MpLnByZXBlbmQoYAoJCQkJCQk8c3ZnIHZpZXdCb3g9IjAgMCAxMDAwIDEwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSIgc3R5bGU9ImhlaWdodDogMzBweDsgd2lkdGg6IDEwMCU7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSg1LjZweCk7IHBvaW50ZXItZXZlbnRzOiBub25lOyI+CgkJCQkJCQk8cG9seWdvbiBpZD0iaGVhdG1hcCIgcG9pbnRzPSIke3BvaW50c30iIGZpbGw9InZhcigtLWFydC1wcm9ncmVzcy1jb2xvcikiIHN0cm9rZT0idmFyKC0tYXJ0LXByb2dyZXNzLWNvbG9yKSIgLz4KCQkJCQkJPC9zdmc+CgkJCQkJYCkKCQkJCX0KCQkJfSk7CgkJfSkKCQl3YWl0Rm9yS2V5RWxlbWVudHMoImRpdi5wbGF5ZXJXcmFwcGVyIiwgZnVuY3Rpb24gKGVsZW1lbnQpIHsKCQkJbGV0IHBsYXllciA9ICQoJzxkaXYgY2xhc3M9ImluZGV4LW1vZHVsZV9hcnQtcGxheWVyIiBzdHlsZT0ib3ZlcmZsb3c6IGhpZGRlbjsgYXNwZWN0LXJhdGlvOiAxNi85OyBtYXJnaW4tdG9wOiA2MHB4OyI+PC9kaXY+JykKCQkJZWxlbWVudC5hZnRlcihwbGF5ZXIpOwoJCQllbGVtZW50LmZhZGVUb2dnbGUoKTsKCQkJcGxheShkYXRhLmlkLCBkYXRhLnVybCwgZGF0YS5obHMsIGRhdGEuY292ZXIsIChhcnQpID0+IHsKCQkJCWFydC5vbignZnVsbHNjcmVlbicsICgpID0+IHsKCQkJCQkkKCdoZWFkZXInKS5mYWRlVG9nZ2xlKCk7CgkJCQkJJChhcnQuY29udHJvbHMuZnVsbHNjcmVlbldlYikudG9nZ2xlKCk7CgkJCQkJJChhcnQuY29udHJvbHMuaGlkZUxpc3QpLnRvZ2dsZSgpOwoJCQkJfSk7CgkJCQlhcnQub24oJ2Z1bGxzY3JlZW5XZWInLCAoKSA9PiB7CgkJCQkJJChhcnQuY29udHJvbHMuZnVsbHNjcmVlbikudG9nZ2xlKCk7CgkJCQkJJChhcnQuY29udHJvbHMuaGlkZUxpc3QpLnRvZ2dsZSgpOwoJCQkJfSk7CgkJCQlpZiAoZGF0YS5ob3RzcG90cykgewoJCQkJCS8vIOW5s+a7keWHveaVsO+8jOS9v+eUqOeugOWNleeahOenu+WKqOW5s+WdhwoJCQkJCWZ1bmN0aW9uIHNtb290aERhdGEoZGF0YSwgd2luZG93U2l6ZSkgewoJCQkJCQl2YXIgc21vb3RoZWQgPSBbXTsKCQkJCQkJZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7CgkJCQkJCQlsZXQgc3VtID0gMDsKCQkJCQkJCWxldCBjb3VudCA9IDA7CgkJCQkJCQlmb3IgKGxldCBqID0gTWF0aC5tYXgoMCwgaSAtIHdpbmRvd1NpemUpOyBqIDw9IE1hdGgubWluKGRhdGEubGVuZ3RoIC0gMSwgaSArIHdpbmRvd1NpemUpOyBqKyspIHsKCQkJCQkJCQlzdW0gKz0gZGF0YVtqXTsKCQkJCQkJCQljb3VudCsrOwoJCQkJCQkJfQoJCQkJCQkJc21vb3RoZWQucHVzaChzdW0gLyBjb3VudCk7CgkJCQkJCX0KCQkJCQkJcmV0dXJuIHNtb290aGVkOwoJCQkJCX0KCgkJCQkJbGV0IGhvdHNwb3RzID0gc21vb3RoRGF0YShkYXRhLmhvdHNwb3RzLnNsaWNlKDUpLCAyKTsKCgkJCQkJdmFyIHN2Z1dpZHRoID0gMTAwMDsKCQkJCQl2YXIgc3ZnSGVpZ2h0ID0gMTAwOwoJCQkJCXZhciBtYXggPSBNYXRoLm1heCguLi5ob3RzcG90cyk7CgoJCQkJCWxldCBwb2ludHMgPSBgMCwke3N2Z0hlaWdodH0gYDsgLy8g5LuO5bem5LiL6KeS5byA5aeLCgkJCQkJaG90c3BvdHMuZm9yRWFjaCgodmFsdWUsIGluZGV4KSA9PiB7CgkJCQkJCXZhciB4ID0gKGluZGV4IC8gKGhvdHNwb3RzLmxlbmd0aCAtIDEpKSAqIHN2Z1dpZHRoOwoJCQkJCQl2YXIgeSA9IHN2Z0hlaWdodCAtICh2YWx1ZSAvIG1heCkgKiBzdmdIZWlnaHQ7CgkJCQkJCXBvaW50cyArPSBgJHt4fSwke3l9IGA7CgkJCQkJfSk7CgkJCQkJcG9pbnRzICs9IGAke3N2Z1dpZHRofSwke3N2Z0hlaWdodH1gOyAvLyDliLDlj7PkuIvop5IKCQkJCQkkKGFydC50ZW1wbGF0ZS4kcHJvZ3Jlc3MpLnByZXBlbmQoYAoJCQkJCQk8c3ZnIHZpZXdCb3g9IjAgMCAxMDAwIDEwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSIgc3R5bGU9ImhlaWdodDogMzBweDsgd2lkdGg6IDEwMCU7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSg1LjFweCk7Ij4KCQkJCQkJCTxwb2x5Z29uIGlkPSJoZWF0bWFwIiBwb2ludHM9IiR7cG9pbnRzfSIgZmlsbD0idmFyKC0tYXJ0LXByb2dyZXNzLWNvbG9yKSIgc3Ryb2tlPSJ2YXIoLS1hcnQtcHJvZ3Jlc3MtY29sb3IpIiAvPgoJCQkJCQk8L3N2Zz4KCQkJCQlgKQoJCQkJfQoJCQl9KTsKCQl9KQoKCQl3YWl0Rm9yS2V5RWxlbWVudHMoImRpdi52aWRlby13cmFwcGVyIGRpdi52aWRlby1hY3Rpb25zLW1lbnUsZGl2LmNhdGVnb3J5VGFncyBkaXYudG9vbHRpcFdyYXBwZXIiLCBmdW5jdGlvbiAoZWxlbWVudCkgewoJCQlsZXQgZG93bmxvYWRDb250ZW50ID0gJChgPGRpdiBjbGFzcz0iZG93bmxvYWQtdXJscyI+PHVsPjwvdWw+PC9kaXY+YCk7CgkJCWVsZW1lbnQuYWZ0ZXIoZG93bmxvYWRDb250ZW50KTsKCgkJCWRhdGEuaGxzLmZvckVhY2goaXRlbSA9PiB7CgkJCQlsZXQgZG93bmxvYWRJdGVtID0gJChgCgkJCQkJPGxpPgoJCQkJCQk8c3BhbiBjbGFzcz0iZG93bmxvYWQtdXJsIGxhYmVsIj5ITFMgJHtpdGVtLmh0bWx9PC9zcGFuPgoJCQkJCQk8aW5wdXQgY2xhc3M9ImRvd25sb2FkLXVybCBpbnB1dCIgdmFsdWU9IiR7aXRlbS51cmx9IiAvPgoJCQkJCQk8YSBjbGFzcz0iZG93bmxvYWQtdXJsIGNvcHkiIGRhdGEtaHJlZj0iJHtpdGVtLnVybH0iIGhyZWY9ImphdmFzY3JpcHQ6IHZvaWQoMCk7IiBzdHlsZT0id2lkdGg6IDEwJTsiPuWkjeWItjwvYT4KCQkJCQk8L2xpPgoJCQkJYCk7CgkJCQlkb3dubG9hZEl0ZW0uZmluZCgnLmRvd25sb2FkLXVybC5jb3B5Jykub24oJ2NsaWNrJywgZnVuY3Rpb24gKGVsZW1lbnQpIHsKCQkJCQllbGVtZW50LnByZXZlbnREZWZhdWx0KCk7CgkJCQkJZWxlbWVudCA9ICQodGhpcykKCQkJCQlHTV9zZXRDbGlwYm9hcmQoZWxlbWVudC5kYXRhKCdocmVmJykpOwoJCQkJCWVsZW1lbnQudGV4dCgi5oiQ5YqfIikKCQkJCQlzZXRUaW1lb3V0KCgpID0+IHsgZWxlbWVudC50ZXh0KCLlpI3liLYiKSB9LCAxMDAwKQoJCQkJfSkKCQkJCWVsZW1lbnQucGFyZW50KCkuZmluZCgiLmRvd25sb2FkLXVybHMgdWwiKS5hcHBlbmQoZG93bmxvYWRJdGVtKTsKCQkJfSk7CgkJCVByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHsKCQkJCWRhdGEubXA0LnNvcnQoKGEsIGIpID0+IChiLnF1YWxpdHkgfHwgMCkgLSAoYS5xdWFsaXR5IHx8IDApKTsKCQkJCWRhdGEubXA0LmZvckVhY2goaXRlbSA9PiB7CgkJCQkJbGV0IGRvd25sb2FkSXRlbQoJCQkJCS8vIOWvueS6juWOn+Wni+ermeeCueaYvuekuuS4i+i9veaMiemSrgoJCQkJCWlmIChsb2NhdGlvbi5ob3N0LmluY2x1ZGVzKCJwb3JuaHViIikpIHsKCQkJCQkJZG93bmxvYWRJdGVtID0gJChgCgkJCQkJCQk8bGk+CgkJCQkJCQkJPHNwYW4gY2xhc3M9ImRvd25sb2FkLXVybCBsYWJlbCI+TVA0ICR7aXRlbS5odG1sfTwvc3Bhbj4KCQkJCQkJCQk8aW5wdXQgY2xhc3M9ImRvd25sb2FkLXVybCBpbnB1dCIgdmFsdWU9IiR7aXRlbS51cmx9IiAvPgoJCQkJCQkJCTxidXR0b24gY2xhc3M9ImRvd25sb2FkLXVybCBkb3dubG9hZCIgZGF0YS1ocmVmPSIke2l0ZW0udXJsfSIgZGF0YS1uYW1lPSIke2RhdGEudGl0bGV9ICR7aXRlbS5odG1sfSI+5LiL6L29PC9idXR0b24+CgkJCQkJCQkJPGEgY2xhc3M9ImRvd25sb2FkLXVybCBjb3B5IiBkYXRhLWhyZWY9IiR7aXRlbS51cmx9IiBocmVmPSJqYXZhc2NyaXB0OiB2b2lkKDApOyI+5aSN5Yi2PC9hPgoJCQkJCQkJPC9saT4KCQkJCQkJYCkKCQkJCQkJZG93bmxvYWRJdGVtLmZpbmQoJy5kb3dubG9hZC11cmwuZG93bmxvYWQnKS5vbignY2xpY2snLCBhc3luYyBmdW5jdGlvbiAoZWxlbWVudCkgewoJCQkJCQkJaWYgKCEkKHRoaXMpLmRhdGEoJ2hyZWYnKSkgcmV0dXJuOwoJCQkJCQkJZWxlbWVudC5wcmV2ZW50RGVmYXVsdCgpOwoJCQkJCQkJZWxlbWVudCA9ICQodGhpcykKCQkJCQkJCWxldCBpbnMgPSB7fTsKCQkJCQkJCWxldCBwcm9ncmVzcyA9IHt9OwoJCQkJCQkJbGV0IGluZGV4ID0gZWxlbWVudC5kYXRhKCdpbmRleCcpOwoKCQkJCQkJCWVsZW1lbnQucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTsKCgkJCQkJCQlpbnNbaW5kZXhdID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgewoJCQkJCQkJCWxldCBwcm9nID0gK3Byb2dyZXNzW2luZGV4XSB8fCAwOwoJCQkJCQkJCWVsZW1lbnQudGV4dChwcm9nICsgIiUiKTsKCQkJCQkJCX0sIDEwKTsKCgkJCQkJCQl0cnkgewoJCQkJCQkJCWxldCByZXNwb25zZSA9IGF3YWl0IHVuc2FmZVdpbmRvdy5mZXRjaChlbGVtZW50LmRhdGEoJ2hyZWYnKSk7CgkJCQkJCQkJaWYgKCFyZXNwb25zZS5vaykgdGhyb3cgbmV3IEVycm9yKCfnvZHnu5zlk43lupTlpLHotKUnKTsKCgkJCQkJCQkJbGV0IHRvdGFsU2l6ZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdDb250ZW50LUxlbmd0aCcpIHx8IDA7CgkJCQkJCQkJbGV0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHkuZ2V0UmVhZGVyKCk7CgkJCQkJCQkJbGV0IHJlY2VpdmVkTGVuZ3RoID0gMDsKCQkJCQkJCQlsZXQgY2h1bmtzID0gW107CgoJCQkJCQkJCXdoaWxlICh0cnVlKSB7CgkJCQkJCQkJCWNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7CgkJCQkJCQkJCWlmIChkb25lKSBicmVhazsKCQkJCQkJCQkJY2h1bmtzLnB1c2godmFsdWUpOwoJCQkJCQkJCQlyZWNlaXZlZExlbmd0aCArPSB2YWx1ZS5sZW5ndGg7CgkJCQkJCQkJCXByb2dyZXNzW2luZGV4XSA9ICgocmVjZWl2ZWRMZW5ndGggLyB0b3RhbFNpemUpICogMTAwKS50b0ZpeGVkKDEpOwoJCQkJCQkJCX0KCgkJCQkJCQkJY29uc3QgYmxvYiA9IG5ldyBCbG9iKGNodW5rcyk7CgoJCQkJCQkJCWNsZWFySW50ZXJ2YWwoaW5zW2luZGV4XSk7CgkJCQkJCQkJcHJvZ3Jlc3NbaW5kZXhdID0gMTAwOwoJCQkJCQkJCWVsZW1lbnQudGV4dCgi5a6M5oiQIikKCgkJCQkJCQkJY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTsKCQkJCQkJCQljb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOwoJCQkJCQkJCWEuaHJlZiA9IHVybDsKCQkJCQkJCQlhLmRvd25sb2FkID0gYCR7ZWxlbWVudC5kYXRhKCduYW1lJyl9Lm1wNGA7CgkJCQkJCQkJYS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwoJCQkJCQkJCWRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7CgkJCQkJCQkJYS5jbGljaygpOwoKCQkJCQkJCQlzZXRUaW1lb3V0KCgpID0+IHsKCQkJCQkJCQkJVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpOwoJCQkJCQkJCQlkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpOwoJCQkJCQkJCX0sIDEwMDApOwoKCQkJCQkJCQlzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKCQkJCQkJCQkJZWxlbWVudC50ZXh0KCLkuIvovb0iKTsKCQkJCQkJCQkJJCh0aGlzKS5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTsKCQkJCQkJCQl9LmJpbmQodGhpcyksIDMwMDApOwoJCQkJCQkJfSBjYXRjaCAoZXJyb3IpIHsKCQkJCQkJCQljbGVhckludGVydmFsKGluc1tpbmRleF0pOwoJCQkJCQkJCWNvbnNvbGUuZXJyb3IoIuS4i+i9veWksei0pToiLCBlcnJvcik7CgkJCQkJCQkJZWxlbWVudC50ZXh0KCLph43or5U/Iik7CgkJCQkJCQkJJCh0aGlzKS5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKS5vbmUoJ2NsaWNrJywgYXN5bmMgZnVuY3Rpb24gKCkgewoJCQkJCQkJCQkkKHRoaXMpLnRyaWdnZXIoJ2NsaWNrJyk7CgkJCQkJCQkJfSk7CgkJCQkJCQl9CgkJCQkJCX0pCgkJCQkJfSBlbHNlIHsKCQkJCQkJLy8g5a+55LqO6ZWc5YOP56uZ54K55pi+56S655u06ZO+5LiL6L295oyJ6ZKu77yM5b2T54S277yM5rKh5om+5Yiw5Yqe5rOV5LiL6L295LiL5p2lCgkJCQkJCWRvd25sb2FkSXRlbSA9ICQoYAoJCQkJCQkJPGxpPgoJCQkJCQkJCTxzcGFuIGNsYXNzPSJkb3dubG9hZC11cmwgbGFiZWwiPk1QNCAke2l0ZW0uaHRtbH08L3NwYW4+CgkJCQkJCQkJPGlucHV0IGNsYXNzPSJkb3dubG9hZC11cmwgaW5wdXQiIHZhbHVlPSIke2l0ZW0udXJsfSIgLz4KCQkJCQkJCQk8YSBjbGFzcz0iZG93bmxvYWQtdXJsIGRvd25sb2FkIiBocmVmPSIke2l0ZW0udXJsfSIgdGFyZ2V0PSJfYmxhbmsiPuebtOmTvjwvYT4KCQkJCQkJCQk8YSBjbGFzcz0iZG93bmxvYWQtdXJsIGNvcHkiIGRhdGEtaHJlZj0iJHtpdGVtLnVybH0iIGhyZWY9ImphdmFzY3JpcHQ6IHZvaWQoMCk7Ij7lpI3liLY8L2E+CgkJCQkJCQk8L2xpPgoJCQkJCQlgKQoJCQkJCX0KCQkJCQlkb3dubG9hZEl0ZW0uZmluZCgnLmRvd25sb2FkLXVybC5jb3B5Jykub24oJ2NsaWNrJywgZnVuY3Rpb24gKGVsZW1lbnQpIHsKCQkJCQkJaWYgKCEkKHRoaXMpLmRhdGEoJ2hyZWYnKSkgcmV0dXJuOwoJCQkJCQllbGVtZW50LnByZXZlbnREZWZhdWx0KCk7CgkJCQkJCWVsZW1lbnQgPSAkKHRoaXMpCgkJCQkJCUdNX3NldENsaXBib2FyZChlbGVtZW50LmRhdGEoJ2hyZWYnKSk7CgkJCQkJCWVsZW1lbnQudGV4dCgi5a6M5oiQIikKCQkJCQkJc2V0VGltZW91dCgoKSA9PiB7IGVsZW1lbnQudGV4dCgi5aSN5Yi2IikgfSwgMTAwMCkKCQkJCQl9KQoJCQkJCWVsZW1lbnQucGFyZW50KCkuZmluZCgiLmRvd25sb2FkLXVybHMgdWwiKS5hcHBlbmQoZG93bmxvYWRJdGVtKTsKCQkJCX0pOwoJCQl9KQoJCX0sIHRydWUpOwoJfSwgMSkKCglmdW5jdGlvbiBwbGF5KGlkLCB1cmwsIHVybHMsIGNvdmVyLCBhY3Rpb25GdW5jdGlvbikgewoJCXZhciBhcnQgPSBuZXcgQXJ0cGxheWVyKHsKCQkJaWQ6IGlkLAoJCQljb250YWluZXI6ICcuaW5kZXgtbW9kdWxlX2FydC1wbGF5ZXInLAoJCQl1cmw6IHVybCwKCQkJdm9sdW1lOiAxLAoJCQlhdXRvUGxheWJhY2s6IHRydWUsCgkJCXRoZW1lOiAnI2ZmOTAwMCcsCgkJCWN1c3RvbVR5cGU6IHsKCQkJCW0zdTg6IGZ1bmN0aW9uICh2aWRlbywgdXJsLCBhcnQpIHsKCQkJCQlpZiAoSGxzLmlzU3VwcG9ydGVkKCkpIHsKCQkJCQkJaWYgKGFydC5obHMpIGFydC5obHMuZGVzdHJveSgpOwoJCQkJCQlsZXQgaGxzID0gbmV3IEhscygpOwoJCQkJCQlobHMubG9hZFNvdXJjZSh1cmwpOwoJCQkJCQlobHMuYXR0YWNoTWVkaWEodmlkZW8pOwoJCQkJCQlhcnQuaGxzID0gaGxzOwoJCQkJCQlhcnQub24oJ2Rlc3Ryb3knLCAoKSA9PiBobHMuZGVzdHJveSgpKTsKCQkJCQl9IGVsc2UgaWYgKHZpZGVvLmNhblBsYXlUeXBlKCdhcHBsaWNhdGlvbi92bmQuYXBwbGUubXBlZ3VybCcpKSB7CgkJCQkJCXZpZGVvLnNyYyA9IHVybDsKCQkJCQl9IGVsc2UgewoJCQkJCQlhcnQubm90aWNlLnNob3cgPSAnVW5zdXBwb3J0ZWQgcGxheWJhY2sgZm9ybWF0OiBtM3U4JzsKCQkJCQl9CgkJCQl9LAoJCQl9LAoJCQljb250cm9sczogWwoJCQkJewoJCQkJCW5hbWU6ICdnb29kUmluZycsCgkJCQkJaW5kZXg6IDIxLAoJCQkJCXBvc2l0aW9uOiAnbGVmdCcsCgkJCQkJaHRtbDogJzxpIGNsYXNzPSJhcnQtaWNvbiBwaC1pY29uLXRodW1iLXVwIj48L2k+JywKCQkJCQl0b29sdGlwOiAn6LWP5Liq5aW96K+EJywKCQkJCQljbGljazogZnVuY3Rpb24gKCkgewoJCQkJCQl3aW5kb3cub3BlbignaHR0cHM6Ly9ncmVhc3lmb3JrLm9yZy9zY3JpcHRzLzUwMTUzNy9mZWVkYmFjaycsICdfYmxhbmsnKQoJCQkJCX0sCgkJCQl9CgkJCV0sCgkJCWljb25zOiB7CgkJCQlzdGF0ZTogJzxzdmcgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIGZpbGw9Im5vbmUiPjxnIG9wYWNpdHk9Ii45Ij48cGF0aCBvcGFjaXR5PSIuNSIgZD0iTTUwIDQuMTY3QzI0LjY4NyA0LjE2NyA0LjE2NyAyNC42ODcgNC4xNjcgNTBjMCAyNS4zMTQgMjAuNTIgNDUuODM0IDQ1LjgzMyA0NS44MzQgMjUuMzE0IDAgNDUuODM0LTIwLjUyIDQ1LjgzNC00NS44MzQgMC0yNS4zMTMtMjAuNTItNDUuODMzLTQ1LjgzNC00NS44MzNaIiBmaWxsPSIjMDAwIi8+PHBhdGggZD0iTTY5LjE5NCA1My4wNDMgNDMuMTUzIDcwLjIzMWEzLjY0NiAzLjY0NiAwIDAgMS01LjY1My0zLjA0M1YzMi44MTZhMy42NDYgMy42NDYgMCAwIDEgNS42NTQtMy4wNDNsMjYuMDQyIDE3LjE4OGMyLjE4MyAxLjQ0IDIuMTgzIDQuNjQ1IDAgNi4wODYtMi4xODQgMS40NCA2LjUxLTQuMy0uMDAyLS4wMDRaIiBmaWxsPSIjZmZmIi8+PC9nPjwvc3ZnPicsCgkJCQlpbmRpY2F0b3I6ICc8aW1nIHdpZHRoPSIxNiIgaGVpZ3RoPSIxNiIgc3R5bGU9ImJvcmRlci1yYWRpdXM6NTBweCIgc3JjPSIvZmF2aWNvbi5pY28iPicsCgkJCQlwbGF5OiAnPHN2ZyB3aWR0aD0iMTMiIGhlaWdodD0iMTMiIHZpZXdCb3g9IjAgMCA4Ny41IDEwMCI+PHBhdGggZD0ibTAgMHYxMDBsODcuNS01MHoiPjwvcGF0aD48L3N2Zz4nLAoJCQkJcGF1c2U6ICc8c3ZnIHdpZHRoPSIxMyIgaGVpZ2h0PSIxMyIgdmlld0JveD0iMCAwIDgxLjc1IDEwMCI+PHBhdGggZD0ibTU2LjU5NiAxMDB2LTEwMGgyNS4xNTR2MTAwem0tNTYuNTk2LTEwMGgyNS4xNTR2MTAwaC0yNS4xNTR6Ij48L3BhdGg+PC9zdmc+JywKCQkJCXZvbHVtZTogJzxzdmcgd2lkdGg9IjE4IiBoZWlnaHQ9IjE4IiB2aWV3Qm94PSIwIDAgMTIwIDEwMCIgZmlsbD0ibm9uZSI+PHBhdGggZD0ibTMwIDI1IDM5Ljk5OS0yNXYxMDBsLTM5Ljk5OS0yNXptLTMwIDUwaDIwdi01MGgtMjB6bTEwMS4zMi02Ni4zMi03LjQ4NTEgNy40ODVjOS4yMzUxIDguOTE1IDE0LjkxNSAyMC43ODUgMTQuOTE1IDMzLjgzNXMtNS42NzUyIDI0LjkyLTE0LjkxNSAzMy44M2w3LjQ4OTkgNy40OWMxMS41MjUtMTAuNzY1IDE4LjY3Ni0yNS4yNzUgMTguNjc2LTQxLjMyIDAtMTYuMDQ2LTcuMTQ5OC0zMC41NS0xOC42OC00MS4zMnptLTIuNDQ1MyA0MS4zMmMwLTEwLjQyLTQuNTc0Ny0xOS44MzUtMTEuOTE5LTI2Ljk1NGwtNy41MTQ2IDcuNTE1YzUuMDU0NyA1LjI0NSA4LjE4NDUgMTIuMDA1IDguMTg0NSAxOS40NCAwIDcuNDQtMy4xMTQ2IDE0LjIwNS04LjE2OTcgMTkuNDU2bDcuNTE1IDcuNTE0N2M3LjM0LTcuMTIgMTEuOTA0LTE2LjU0NCAxMS45MDQtMjYuOTd6IiBzdHJva2Utd2lkdGg9IjEuMTk5NSI+PC9wYXRoPjwvc3ZnPicsCgkJCQl2b2x1bWVDbG9zZTogJzxzdmcgd2lkdGg9IjE4IiBoZWlnaHQ9IjE4IiB2aWV3Qm94PSIwIDAgMTIwIDEwMCIgZmlsbD0ibm9uZSI+PHBhdGggZD0ibTgzLjk0OSAzMC42NTZ2NjUuMTc2bC00Mi41NzktMjAuODM0di0zLjI3MTJ6bTcuOTgzNy0yNS4zOTMtNy4xMTU2LTUuMjY2OS0xNS44NCAxNy42OTctMjcuNjA4IDE1LjYzN3YxNS4xOTJsLTkuMTkzMyAxMC4yNjd2LTI1LjQ1OWgtMTguMzg3djQxLjY2OGgzLjg3NDlsLTE3LjY2NCAxOS43MzQgNy4xMTU2IDUuMjY3eiIgc3Ryb2tlLXdpZHRoPSIxLjA1MDQiPjwvcGF0aD48L3N2Zz4nLAoJCQkJc2V0dGluZzogJzxzdmcgd2lkdGg9IjE4IiBoZWlnaHQ9IjE4IiB2aWV3Qm94PSIwIDAgOTcuMyAxMDAiPjxwYXRoIGQ9Im04NS44MjIgNTQuOWMwLjE5OTY0LTEuNjAwNCAwLjM1LTMuMjAwMiAwLjM1LTQuOTAwMnMtMC4xNTAzNi0zLjMtMC4zNS00LjlsMTAuNTUzLTguMjQ5N2MwLjk1MDE4LTAuNzUgMS4yMDA0LTIuMSAwLjYwMDE4LTMuMmwtMTAuMDAzLTE3LjNjLTAuNjAwMTgtMS4xLTEuOTUwOS0xLjUtMy4wNTE1LTEuMWwtMTIuNDUzIDVjLTIuNjAxLTItNS40MDE2LTMuNjUtOC40NTI1LTQuOWwtMS45MDEtMTMuMjVjLTAuMTQ5NzMtMS4yLTEuMjAwNC0yLjEtMi40NTA2LTIuMWgtMjAuMDA2Yy0xLjI1MDQgMC0yLjMwMDcgMC45LTIuNDUwOCAyLjFsLTEuOTAwNiAxMy4yNWMtMy4wNTEgMS4yNS01Ljg1MTggMi45NS04LjQ1MjUgNC45bC0xMi40NTMtNWMtMS4xNTAzLTAuNDUtMi40NTA4IDAtMy4wNTEgMS4xbC0xMC4wMDMgMTcuM2MtMC42NTAyMiAxLjEtMC4zNTAxMyAyLjQ1IDAuNjAwMTggMy4ybDEwLjU1MyA4LjI0OTdjLTAuMjAwMDggMS42LTAuMzUwMTMgMy4yNS0wLjM1MDEzIDQuOSAwIDEuNjUgMC4xNTAwNSAzLjI5OTggMC4zNTAxMyA0LjkwMDJsLTEwLjU1MyA4LjI0OTdjLTAuOTUwMzEgMC43NTAzMi0xLjIwMDQgMi4xLTAuNjAwMTggMy4yMDAybDEwLjAwMyAxNy4zYzAuNjAwMTggMS4wOTk2IDEuOTUwNiAxLjUgMy4wNTEgMS4wOTk2bDEyLjQ1My00Ljk5OTZjMi42MDA4IDEuOTk5NiA1LjQwMTYgMy42NDk5IDguNDUyNSA0Ljg5OThsMS45MDA2IDEzLjI1YzAuMTUwMDQgMS4yIDEuMjAwNCAyLjEgMi40NTA4IDIuMWgyMC4wMDZjMS4yNTAzIDAgMi4zMDA5LTAuOSAyLjQ1MDYtMi4xbDEuOTAxLTEzLjI1YzMuMDUwOC0xLjI0OTkgNS44NTE1LTIuOTUwMSA4LjQ1MjUtNC44OTk4bDEyLjQ1MyA0Ljk5OTZjMS4xNTA1IDAuNDUwMzIgMi40NTEzIDAgMy4wNTE1LTEuMDk5NmwxMC4wMDMtMTcuM2MwLjYwMDE4LTEuMTAwMiAwLjM1LTIuNDQ5OS0wLjYwMDE4LTMuMjAwMnptLTM3LjE2MSAxMi42Yy05LjY1MjggMC0xNy41MDUtNy44NDk5LTE3LjUwNS0xNy41IDAtOS42NDk5IDcuODUyMy0xNy41IDE3LjUwNS0xNy41IDkuNjUyOCAwIDE3LjUwNSA3Ljg0OTkgMTcuNTA1IDE3LjUgMCA5LjY1MDYtNy44NTIzIDE3LjUtMTcuNTA1IDE3LjV6Ij48L3BhdGg+PC9zdmc+JywKCQkJfSwKCQkJc2V0dGluZzogdHJ1ZSwKCQkJaG90a2V5OiB0cnVlLAoJCQlmbGlwOiB0cnVlLAoJCQlwbGF5YmFja1JhdGU6IHRydWUsCgkJCWFzcGVjdFJhdGlvOiB0cnVlLAoJCQltaW5pUHJvZ3Jlc3NCYXI6IHRydWUsCgkJCWZ1bGxzY3JlZW46IHRydWUsCgkJCWZ1bGxzY3JlZW5XZWI6IHRydWUsCgkJCWZhc3RGb3J3YXJkOiB0cnVlLAoJCQlhdXRvT3JpZW50YXRpb246IHRydWUsCgkJCWxvY2s6IHRydWUsCgkJfSkKCQlhcnQub24oJ2Z1bGxzY3JlZW4nLCAoKSA9PiB7CgkJCSQoJ2hlYWRlcicpLnRvZ2dsZSgpOwoJCQkkKGFydC5jb250cm9scy5nb29kUmluZykudG9nZ2xlKCk7CgkJCWlmICghJCgnYm9keScpLmhhc0NsYXNzKCduby1zY3JvbGwnKSkgewoJCQkJJCgnYm9keScpLmFkZENsYXNzKCduby1zY3JvbGwnKTsKCQkJfSBlbHNlIHsKCQkJCSQoJ2JvZHknKS5yZW1vdmVDbGFzcygnbm8tc2Nyb2xsJyk7CgkJCX0KCQl9KTsKCQlhcnQub24oJ2Z1bGxzY3JlZW5XZWInLCAoKSA9PiB7CgkJCSQoJ2hlYWRlcicpLnRvZ2dsZSgpOwoJCQkkKGFydC5jb250cm9scy5nb29kUmluZykudG9nZ2xlKCk7CgkJCWlmICghJCgnYm9keScpLmhhc0NsYXNzKCduby1zY3JvbGwnKSkgewoJCQkJJCgnYm9keScpLmFkZENsYXNzKCduby1zY3JvbGwnKTsKCQkJfSBlbHNlIHsKCQkJCSQoJ2JvZHknKS5yZW1vdmVDbGFzcygnbm8tc2Nyb2xsJyk7CgkJCX0KCQl9KTsKCQl2YXIgY29udGV4dG1lbnVTdHlsZSA9IHsKCQkJImRpc3BsYXkiOiAiZmxleCIsCgkJCSJqdXN0aWZ5LWNvbnRlbnQiOiAiY2VudGVyIiwKCQkJImFsaWduLWl0ZW1zIjogImNlbnRlciIsCgkJCSJib3JkZXItYm90dG9tIjogIm5vbmUiCgkJfQoJCWFydC5jb250ZXh0bWVudS5hZGQoewoJCQluYW1lOiAnYXBwVGl0bGUnLAoJCQlpbmRleDogMSwKCQkJaHRtbDogYDxpbWcgd2lkdGg9IjE2IiBoZWlndGg9IjE2IiBzdHlsZT0iYm9yZGVyLXJhZGl1czo1MHB4IiBzcmM9Ii9mYXZpY29uLmljbyI+UHJvbmh1YiDlop7lvLpgLAoJCQlzdHlsZTogY29udGV4dG1lbnVTdHlsZSwKCQkJY2xpY2s6IGZ1bmN0aW9uICgpIHsKCQkJCXdpbmRvdy5vcGVuKCdodHRwczovL2dyZWFzeWZvcmsub3JnL3NjcmlwdHMvNTAxNTM3L2ZlZWRiYWNrJywgJ19ibGFuaycpCgkJCX0sCgkJfSkKCQlhcnQuY29udGV4dG1lbnUudXBkYXRlKHsKCQkJbmFtZTogJ3ZlcnNpb24nLAoJCQlpbmRleDogMiwKCQkJaHRtbDogYDxpbWcgd2lkdGg9IjE1IiBoZWlndGg9IjE1IiBzcmM9Imh0dHBzOi8vYXJ0cGxheWVyLm9yZy9hc3NldHMvaW1nL2xvZ28ucG5nIi8+QXJ0cGxheWVyIFVsdHJhICR7QXJ0cGxheWVyLnZlcnNpb259YCwKCQkJY2xpY2s6IGZ1bmN0aW9uICgpIHsKCQkJCXdpbmRvdy5vcGVuKCdodHRwczovL2FydHBsYXllci5vcmcvJywgJ19ibGFuaycpCgkJCX0sCgkJCXN0eWxlOiBjb250ZXh0bWVudVN0eWxlCgkJfSkKCQlhcnQuY29udGV4dG1lbnUudXBkYXRlKHsKCQkJbmFtZTogJ2luZm8nLAoJCQlpbmRleDogNDAsCgkJCWh0bWw6IGAke2FydC5pMThuLmxhbmd1YWdlWyJWaWRlbyBJbmZvIl19YCwKCQkJc3R5bGU6IGNvbnRleHRtZW51U3R5bGUKCQl9KQoJCWFydC5jb250ZXh0bWVudS51cGRhdGUoewoJCQluYW1lOiAnY2xvc2UnLAoJCQlpbmRleDogNTAsCgkJCWh0bWw6IGAke2FydC5pMThuLmxhbmd1YWdlWyJDbG9zZSJdfWAsCgkJCXN0eWxlOiBjb250ZXh0bWVudVN0eWxlCgkJfSkKCQl1bnNhZmVXaW5kb3cuYXJ0ID0gYXJ0CgkJY292ZXIgPyAoYXJ0LnBvc3RlciA9IGNvdmVyKSA6ICIiCgkJdXJscyA/IChhcnQucXVhbGl0eSA9IFsuLi51cmxzXSkgOiAiIgoJCSQoYXJ0LnRlbXBsYXRlLiRjb250YWluZXIpLmZpbmQoIi5pY29uIikucmVtb3ZlQ2xhc3MoImljb24iKQoJCWFjdGlvbkZ1bmN0aW9uID8gYWN0aW9uRnVuY3Rpb24oYXJ0KSA6ICIiCgl9CgoJZnVuY3Rpb24gd2FpdEZvcktleUVsZW1lbnRzKHNlbGVjdG9yVHh0LCBhY3Rpb25GdW5jdGlvbiwgYldhaXRPbmNlLCBpZnJhbWVTZWxlY3RvcikgewoJCXZhciB0YXJnZXRiYWRnZXMsIGJ0YXJnZXRzRm91bmQ7CgoJCWlmICh0eXBlb2YgaWZyYW1lU2VsZWN0b3IgPT0gInVuZGVmaW5lZCIpCgkJCXRhcmdldGJhZGdlcyA9ICQoc2VsZWN0b3JUeHQpOwoJCWVsc2UKCQkJdGFyZ2V0YmFkZ2VzID0gJChpZnJhbWVTZWxlY3RvcikuY29udGVudHMoKS5maW5kKHNlbGVjdG9yVHh0KTsKCgkJaWYgKHRhcmdldGJhZGdlcyAmJiB0YXJnZXRiYWRnZXMubGVuZ3RoID4gMCkgewoJCQlidGFyZ2V0c0ZvdW5kID0gdHJ1ZTsKCQkJdGFyZ2V0YmFkZ2VzLmVhY2goZnVuY3Rpb24gKCkgewoJCQkJdmFyIGpUaGlzID0gJCh0aGlzKTsKCQkJCXZhciBhbHJlYWR5Rm91bmQgPSBqVGhpcy5kYXRhKCdhbHJlYWR5Rm91bmQnKSB8fCBmYWxzZTsKCQkJCWlmICghYWxyZWFkeUZvdW5kKSB7CgkJCQkJdmFyIGNhbmNlbEZvdW5kID0gYWN0aW9uRnVuY3Rpb24oalRoaXMpOwoJCQkJCWlmIChjYW5jZWxGb3VuZCkgewoJCQkJCQlidGFyZ2V0c0ZvdW5kID0gZmFsc2U7CgkJCQkJfSBlbHNlIHsKCQkJCQkJalRoaXMuZGF0YSgnYWxyZWFkeUZvdW5kJywgdHJ1ZSk7CgkJCQkJfQoJCQkJfQoJCQl9KTsKCQl9IGVsc2UgewoJCQlidGFyZ2V0c0ZvdW5kID0gZmFsc2U7CgkJfQoKCQl2YXIgY29udHJvbE9iaiA9IHdhaXRGb3JLZXlFbGVtZW50cy5jb250cm9sT2JqIHx8IHt9OwoJCXZhciBjb250cm9sS2V5ID0gc2VsZWN0b3JUeHQucmVwbGFjZSgvW15cd10vZywgIl8iKTsKCQl2YXIgdGltZUNvbnRyb2wgPSBjb250cm9sT2JqW2NvbnRyb2xLZXldOwoKCQlpZiAoYnRhcmdldHNGb3VuZCAmJiBiV2FpdE9uY2UgJiYgdGltZUNvbnRyb2wpIHsKCQkJY2xlYXJJbnRlcnZhbCh0aW1lQ29udHJvbCk7CgkJCWRlbGV0ZSBjb250cm9sT2JqW2NvbnRyb2xLZXldOwoJCX0gZWxzZSB7CgkJCWlmICghdGltZUNvbnRyb2wpIHsKCQkJCXRpbWVDb250cm9sID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgewoJCQkJCXdhaXRGb3JLZXlFbGVtZW50cyhzZWxlY3RvclR4dCwgYWN0aW9uRnVuY3Rpb24sIGJXYWl0T25jZSwgaWZyYW1lU2VsZWN0b3IpOwoJCQkJfSwgMSk7CgkJCQljb250cm9sT2JqW2NvbnRyb2xLZXldID0gdGltZUNvbnRyb2w7CgkJCX0KCQl9CgoJCXdhaXRGb3JLZXlFbGVtZW50cy5jb250cm9sT2JqID0gY29udHJvbE9iajsKCX0KfSkoKTs=
Add Comment
Please, Sign In to add comment